Merge branch 'v1.19.x' of https://github.com/NodeBB/NodeBB into isekai

v1.18.x
落雨楓 2 years ago
commit e0427b290f

@ -2,8 +2,8 @@
NodeBB's security policy is based around a private bug bounty program. Users are invited to explore NodeBB for vulnerabilities, and report them to the NodeBB team so that they can be patched.
If you have found a security vulnerability, **do not post it onto our GitHub tracker**. Some security vulnerabilities are quite severe and discretion is recommended. Email the NodeBB Security Team at security@nodebb.org, instead.
If you have found a security vulnerability, **do not post it onto our GitHub tracker**. Some security vulnerabilities are quite severe and discretion is recommended. Email the NodeBB Security Team at security@nodebb.org, instead, even if you are not sure whether something qualifies.
# Bug Bounty Program
Security vulnerability reports may be eligible for a bounty based on severity and confirmation from NodeBB team members. For full details regarding our bug bounty program, including the bounty amounts, please consult the following page: https://blog.nodebb.org/bounty
Security vulnerability reports may be eligible for a bounty based on severity and confirmation from NodeBB team members. For full details regarding our bug bounty program, including the bounty amounts, please consult the [dedicated page for our Bug Bounty Program](https://nodebb.org/bounty).

@ -21,7 +21,7 @@ jobs:
fail-fast: false
matrix:
os: [ubuntu-latest]
node: [12, 14, 16]
node: [14, 16]
database: [mongo-dev, mongo, redis, postgres]
include:
# only run coverage once
@ -69,7 +69,7 @@ jobs:
- 6379:6379
mongo:
image: 'mongo:3.2'
image: 'mongo:3.6'
ports:
# Maps port 27017 on service container to the host
- 27017:27017

1
.gitignore vendored

@ -76,3 +76,4 @@ link-plugins.sh
# Isekai addition
makeCordova.sh
rebuild.sh
test.sh

@ -41,6 +41,7 @@ trans.rw = public/language/rw/category.json
trans.sc = public/language/sc/category.json
trans.sk = public/language/sk/category.json
trans.sl = public/language/sl/category.json
trans.sq_AL = public/language/sq-AL/category.json
trans.sr = public/language/sr/category.json
trans.sv = public/language/sv/category.json
trans.th = public/language/th/category.json
@ -91,6 +92,7 @@ trans.rw = public/language/rw/login.json
trans.sc = public/language/sc/login.json
trans.sk = public/language/sk/login.json
trans.sl = public/language/sl/login.json
trans.sq_AL = public/language/sq-AL/login.json
trans.sr = public/language/sr/login.json
trans.sv = public/language/sv/login.json
trans.th = public/language/th/login.json
@ -141,6 +143,7 @@ trans.rw = public/language/rw/recent.json
trans.sc = public/language/sc/recent.json
trans.sk = public/language/sk/recent.json
trans.sl = public/language/sl/recent.json
trans.sq_AL = public/language/sq-AL/recent.json
trans.sr = public/language/sr/recent.json
trans.sv = public/language/sv/recent.json
trans.th = public/language/th/recent.json
@ -191,6 +194,7 @@ trans.rw = public/language/rw/unread.json
trans.sc = public/language/sc/unread.json
trans.sk = public/language/sk/unread.json
trans.sl = public/language/sl/unread.json
trans.sq_AL = public/language/sq-AL/unread.json
trans.sr = public/language/sr/unread.json
trans.sv = public/language/sv/unread.json
trans.th = public/language/th/unread.json
@ -241,6 +245,7 @@ trans.rw = public/language/rw/modules.json
trans.sc = public/language/sc/modules.json
trans.sk = public/language/sk/modules.json
trans.sl = public/language/sl/modules.json
trans.sq_AL = public/language/sq-AL/modules.json
trans.sr = public/language/sr/modules.json
trans.sv = public/language/sv/modules.json
trans.th = public/language/th/modules.json
@ -291,6 +296,7 @@ trans.rw = public/language/rw/post-queue.json
trans.sc = public/language/sc/post-queue.json
trans.sk = public/language/sk/post-queue.json
trans.sl = public/language/sl/post-queue.json
trans.sq_AL = public/language/sq-AL/post-queue.json
trans.sr = public/language/sr/post-queue.json
trans.sv = public/language/sv/post-queue.json
trans.th = public/language/th/post-queue.json
@ -341,6 +347,7 @@ trans.rw = public/language/rw/ip-blacklist.json
trans.sc = public/language/sc/ip-blacklist.json
trans.sk = public/language/sk/ip-blacklist.json
trans.sl = public/language/sl/ip-blacklist.json
trans.sq_AL = public/language/sq-AL/ip-blacklist.json
trans.sr = public/language/sr/ip-blacklist.json
trans.sv = public/language/sv/ip-blacklist.json
trans.th = public/language/th/ip-blacklist.json
@ -391,6 +398,7 @@ trans.rw = public/language/rw/register.json
trans.sc = public/language/sc/register.json
trans.sk = public/language/sk/register.json
trans.sl = public/language/sl/register.json
trans.sq_AL = public/language/sq-AL/register.json
trans.sr = public/language/sr/register.json
trans.sv = public/language/sv/register.json
trans.th = public/language/th/register.json
@ -441,6 +449,7 @@ trans.rw = public/language/rw/user.json
trans.sc = public/language/sc/user.json
trans.sk = public/language/sk/user.json
trans.sl = public/language/sl/user.json
trans.sq_AL = public/language/sq-AL/user.json
trans.sr = public/language/sr/user.json
trans.sv = public/language/sv/user.json
trans.th = public/language/th/user.json
@ -491,6 +500,7 @@ trans.rw = public/language/rw/global.json
trans.sc = public/language/sc/global.json
trans.sk = public/language/sk/global.json
trans.sl = public/language/sl/global.json
trans.sq_AL = public/language/sq-AL/global.json
trans.sr = public/language/sr/global.json
trans.sv = public/language/sv/global.json
trans.th = public/language/th/global.json
@ -541,6 +551,7 @@ trans.rw = public/language/rw/notifications.json
trans.sc = public/language/sc/notifications.json
trans.sk = public/language/sk/notifications.json
trans.sl = public/language/sl/notifications.json
trans.sq_AL = public/language/sq-AL/notifications.json
trans.sr = public/language/sr/notifications.json
trans.sv = public/language/sv/notifications.json
trans.th = public/language/th/notifications.json
@ -591,6 +602,7 @@ trans.rw = public/language/rw/reset_password.json
trans.sc = public/language/sc/reset_password.json
trans.sk = public/language/sk/reset_password.json
trans.sl = public/language/sl/reset_password.json
trans.sq_AL = public/language/sq-AL/reset_password.json
trans.sr = public/language/sr/reset_password.json
trans.sv = public/language/sv/reset_password.json
trans.th = public/language/th/reset_password.json
@ -641,6 +653,7 @@ trans.rw = public/language/rw/users.json
trans.sc = public/language/sc/users.json
trans.sk = public/language/sk/users.json
trans.sl = public/language/sl/users.json
trans.sq_AL = public/language/sq-AL/users.json
trans.sr = public/language/sr/users.json
trans.sv = public/language/sv/users.json
trans.th = public/language/th/users.json
@ -691,6 +704,7 @@ trans.rw = public/language/rw/language.json
trans.sc = public/language/sc/language.json
trans.sk = public/language/sk/language.json
trans.sl = public/language/sl/language.json
trans.sq_AL = public/language/sq-AL/language.json
trans.sr = public/language/sr/language.json
trans.sv = public/language/sv/language.json
trans.th = public/language/th/language.json
@ -741,6 +755,7 @@ trans.rw = public/language/rw/pages.json
trans.sc = public/language/sc/pages.json
trans.sk = public/language/sk/pages.json
trans.sl = public/language/sl/pages.json
trans.sq_AL = public/language/sq-AL/pages.json
trans.sr = public/language/sr/pages.json
trans.sv = public/language/sv/pages.json
trans.th = public/language/th/pages.json
@ -791,6 +806,7 @@ trans.rw = public/language/rw/topic.json
trans.sc = public/language/sc/topic.json
trans.sk = public/language/sk/topic.json
trans.sl = public/language/sl/topic.json
trans.sq_AL = public/language/sq-AL/topic.json
trans.sr = public/language/sr/topic.json
trans.sv = public/language/sv/topic.json
trans.th = public/language/th/topic.json
@ -841,6 +857,7 @@ trans.rw = public/language/rw/success.json
trans.sc = public/language/sc/success.json
trans.sk = public/language/sk/success.json
trans.sl = public/language/sl/success.json
trans.sq_AL = public/language/sq-AL/success.json
trans.sr = public/language/sr/success.json
trans.sv = public/language/sv/success.json
trans.th = public/language/th/success.json
@ -891,6 +908,7 @@ trans.rw = public/language/rw/error.json
trans.sc = public/language/sc/error.json
trans.sk = public/language/sk/error.json
trans.sl = public/language/sl/error.json
trans.sq_AL = public/language/sq-AL/error.json
trans.sr = public/language/sr/error.json
trans.sv = public/language/sv/error.json
trans.th = public/language/th/error.json
@ -941,6 +959,7 @@ trans.rw = public/language/rw/flags.json
trans.sc = public/language/sc/flags.json
trans.sk = public/language/sk/flags.json
trans.sl = public/language/sl/flags.json
trans.sq_AL = public/language/sq-AL/flags.json
trans.sr = public/language/sr/flags.json
trans.sv = public/language/sv/flags.json
trans.th = public/language/th/flags.json
@ -990,6 +1009,7 @@ trans.rw = public/language/rw/tags.json
trans.sc = public/language/sc/tags.json
trans.sk = public/language/sk/tags.json
trans.sl = public/language/sl/tags.json
trans.sq_AL = public/language/sq-AL/tags.json
trans.sr = public/language/sr/tags.json
trans.sv = public/language/sv/tags.json
trans.th = public/language/th/tags.json
@ -1040,6 +1060,7 @@ trans.rw = public/language/rw/top.json
trans.sc = public/language/sc/top.json
trans.sk = public/language/sk/top.json
trans.sl = public/language/sl/top.json
trans.sq_AL = public/language/sq-AL/top.json
trans.sr = public/language/sr/top.json
trans.sv = public/language/sv/top.json
trans.th = public/language/th/top.json
@ -1090,6 +1111,7 @@ trans.rw = public/language/rw/email.json
trans.sc = public/language/sc/email.json
trans.sk = public/language/sk/email.json
trans.sl = public/language/sl/email.json
trans.sq_AL = public/language/sq-AL/email.json
trans.sr = public/language/sr/email.json
trans.sv = public/language/sv/email.json
trans.th = public/language/th/email.json
@ -1140,6 +1162,7 @@ trans.rw = public/language/rw/search.json
trans.sc = public/language/sc/search.json
trans.sk = public/language/sk/search.json
trans.sl = public/language/sl/search.json
trans.sq_AL = public/language/sq-AL/search.json
trans.sr = public/language/sr/search.json
trans.sv = public/language/sv/search.json
trans.th = public/language/th/search.json
@ -1190,6 +1213,7 @@ trans.rw = public/language/rw/groups.json
trans.sc = public/language/sc/groups.json
trans.sk = public/language/sk/groups.json
trans.sl = public/language/sl/groups.json
trans.sq_AL = public/language/sq-AL/groups.json
trans.sr = public/language/sr/groups.json
trans.sv = public/language/sv/groups.json
trans.th = public/language/th/groups.json
@ -1240,6 +1264,7 @@ trans.rw = public/language/rw/uploads.json
trans.sc = public/language/sc/uploads.json
trans.sk = public/language/sk/uploads.json
trans.sl = public/language/sl/uploads.json
trans.sq_AL = public/language/sq-AL/uploads.json
trans.sr = public/language/sr/uploads.json
trans.sv = public/language/sv/uploads.json
trans.th = public/language/th/uploads.json
@ -1290,6 +1315,7 @@ trans.rw = public/language/rw/admin/admin.json
trans.sc = public/language/sc/admin/admin.json
trans.sk = public/language/sk/admin/admin.json
trans.sl = public/language/sl/admin/admin.json
trans.sq_AL = public/language/sq-AL/admin/admin.json
trans.sr = public/language/sr/admin/admin.json
trans.sv = public/language/sv/admin/admin.json
trans.th = public/language/th/admin/admin.json
@ -1340,6 +1366,7 @@ trans.rw = public/language/rw/admin/menu.json
trans.sc = public/language/sc/admin/menu.json
trans.sk = public/language/sk/admin/menu.json
trans.sl = public/language/sl/admin/menu.json
trans.sq_AL = public/language/sq-AL/admin/menu.json
trans.sr = public/language/sr/admin/menu.json
trans.sv = public/language/sv/admin/menu.json
trans.th = public/language/th/admin/menu.json
@ -1390,6 +1417,7 @@ trans.rw = public/language/rw/admin/advanced/cache.json
trans.sc = public/language/sc/admin/advanced/cache.json
trans.sk = public/language/sk/admin/advanced/cache.json
trans.sl = public/language/sl/admin/advanced/cache.json
trans.sq_AL = public/language/sq-AL/admin/advanced/cache.json
trans.sr = public/language/sr/admin/advanced/cache.json
trans.sv = public/language/sv/admin/advanced/cache.json
trans.th = public/language/th/admin/advanced/cache.json
@ -1440,6 +1468,7 @@ trans.rw = public/language/rw/admin/advanced/database.json
trans.sc = public/language/sc/admin/advanced/database.json
trans.sk = public/language/sk/admin/advanced/database.json
trans.sl = public/language/sl/admin/advanced/database.json
trans.sq_AL = public/language/sq-AL/admin/advanced/database.json
trans.sr = public/language/sr/admin/advanced/database.json
trans.sv = public/language/sv/admin/advanced/database.json
trans.th = public/language/th/admin/advanced/database.json
@ -1490,6 +1519,7 @@ trans.rw = public/language/rw/admin/advanced/errors.json
trans.sc = public/language/sc/admin/advanced/errors.json
trans.sk = public/language/sk/admin/advanced/errors.json
trans.sl = public/language/sl/admin/advanced/errors.json
trans.sq_AL = public/language/sq-AL/admin/advanced/errors.json
trans.sr = public/language/sr/admin/advanced/errors.json
trans.sv = public/language/sv/admin/advanced/errors.json
trans.th = public/language/th/admin/advanced/errors.json
@ -1540,6 +1570,7 @@ trans.rw = public/language/rw/admin/advanced/events.json
trans.sc = public/language/sc/admin/advanced/events.json
trans.sk = public/language/sk/admin/advanced/events.json
trans.sl = public/language/sl/admin/advanced/events.json
trans.sq_AL = public/language/sq-AL/admin/advanced/events.json
trans.sr = public/language/sr/admin/advanced/events.json
trans.sv = public/language/sv/admin/advanced/events.json
trans.th = public/language/th/admin/advanced/events.json
@ -1590,6 +1621,7 @@ trans.rw = public/language/rw/admin/advanced/logs.json
trans.sc = public/language/sc/admin/advanced/logs.json
trans.sk = public/language/sk/admin/advanced/logs.json
trans.sl = public/language/sl/admin/advanced/logs.json
trans.sq_AL = public/language/sq-AL/admin/advanced/logs.json
trans.sr = public/language/sr/admin/advanced/logs.json
trans.sv = public/language/sv/admin/advanced/logs.json
trans.th = public/language/th/admin/advanced/logs.json
@ -1640,6 +1672,7 @@ trans.rw = public/language/rw/admin/appearance/customise.json
trans.sc = public/language/sc/admin/appearance/customise.json
trans.sk = public/language/sk/admin/appearance/customise.json
trans.sl = public/language/sl/admin/appearance/customise.json
trans.sq_AL = public/language/sq-AL/admin/appearance/customise.json
trans.sr = public/language/sr/admin/appearance/customise.json
trans.sv = public/language/sv/admin/appearance/customise.json
trans.th = public/language/th/admin/appearance/customise.json
@ -1690,6 +1723,7 @@ trans.rw = public/language/rw/admin/appearance/skins.json
trans.sc = public/language/sc/admin/appearance/skins.json
trans.sk = public/language/sk/admin/appearance/skins.json
trans.sl = public/language/sl/admin/appearance/skins.json
trans.sq_AL = public/language/sq-AL/admin/appearance/skins.json
trans.sr = public/language/sr/admin/appearance/skins.json
trans.sv = public/language/sv/admin/appearance/skins.json
trans.th = public/language/th/admin/appearance/skins.json
@ -1740,6 +1774,7 @@ trans.rw = public/language/rw/admin/appearance/themes.json
trans.sc = public/language/sc/admin/appearance/themes.json
trans.sk = public/language/sk/admin/appearance/themes.json
trans.sl = public/language/sl/admin/appearance/themes.json
trans.sq_AL = public/language/sq-AL/admin/appearance/themes.json
trans.sr = public/language/sr/admin/appearance/themes.json
trans.sv = public/language/sv/admin/appearance/themes.json
trans.th = public/language/th/admin/appearance/themes.json
@ -1790,6 +1825,7 @@ trans.rw = public/language/rw/admin/development/info.json
trans.sc = public/language/sc/admin/development/info.json
trans.sk = public/language/sk/admin/development/info.json
trans.sl = public/language/sl/admin/development/info.json
trans.sq_AL = public/language/sq-AL/admin/development/info.json
trans.sr = public/language/sr/admin/development/info.json
trans.sv = public/language/sv/admin/development/info.json
trans.th = public/language/th/admin/development/info.json
@ -1840,6 +1876,7 @@ trans.rw = public/language/rw/admin/development/logger.json
trans.sc = public/language/sc/admin/development/logger.json
trans.sk = public/language/sk/admin/development/logger.json
trans.sl = public/language/sl/admin/development/logger.json
trans.sq_AL = public/language/sq-AL/admin/development/logger.json
trans.sr = public/language/sr/admin/development/logger.json
trans.sv = public/language/sv/admin/development/logger.json
trans.th = public/language/th/admin/development/logger.json
@ -1890,6 +1927,7 @@ trans.rw = public/language/rw/admin/extend/plugins.json
trans.sc = public/language/sc/admin/extend/plugins.json
trans.sk = public/language/sk/admin/extend/plugins.json
trans.sl = public/language/sl/admin/extend/plugins.json
trans.sq_AL = public/language/sq-AL/admin/extend/plugins.json
trans.sr = public/language/sr/admin/extend/plugins.json
trans.sv = public/language/sv/admin/extend/plugins.json
trans.th = public/language/th/admin/extend/plugins.json
@ -1940,6 +1978,7 @@ trans.rw = public/language/rw/admin/extend/rewards.json
trans.sc = public/language/sc/admin/extend/rewards.json
trans.sk = public/language/sk/admin/extend/rewards.json
trans.sl = public/language/sl/admin/extend/rewards.json
trans.sq_AL = public/language/sq-AL/admin/extend/rewards.json
trans.sr = public/language/sr/admin/extend/rewards.json
trans.sv = public/language/sv/admin/extend/rewards.json
trans.th = public/language/th/admin/extend/rewards.json
@ -1990,6 +2029,7 @@ trans.rw = public/language/rw/admin/extend/widgets.json
trans.sc = public/language/sc/admin/extend/widgets.json
trans.sk = public/language/sk/admin/extend/widgets.json
trans.sl = public/language/sl/admin/extend/widgets.json
trans.sq_AL = public/language/sq-AL/admin/extend/widgets.json
trans.sr = public/language/sr/admin/extend/widgets.json
trans.sv = public/language/sv/admin/extend/widgets.json
trans.th = public/language/th/admin/extend/widgets.json
@ -2040,6 +2080,7 @@ trans.rw = public/language/rw/admin/dashboard.json
trans.sc = public/language/sc/admin/dashboard.json
trans.sk = public/language/sk/admin/dashboard.json
trans.sl = public/language/sl/admin/dashboard.json
trans.sq_AL = public/language/sq-AL/admin/dashboard.json
trans.sr = public/language/sr/admin/dashboard.json
trans.sv = public/language/sv/admin/dashboard.json
trans.th = public/language/th/admin/dashboard.json
@ -2090,6 +2131,7 @@ trans.rw = public/language/rw/admin/settings/homepage.json
trans.sc = public/language/sc/admin/settings/homepage.json
trans.sk = public/language/sk/admin/settings/homepage.json
trans.sl = public/language/sl/admin/settings/homepage.json
trans.sq_AL = public/language/sq-AL/admin/settings/homepage.json
trans.sr = public/language/sr/admin/settings/homepage.json
trans.sv = public/language/sv/admin/settings/homepage.json
trans.th = public/language/th/admin/settings/homepage.json
@ -2140,6 +2182,7 @@ trans.rw = public/language/rw/admin/settings/languages.json
trans.sc = public/language/sc/admin/settings/languages.json
trans.sk = public/language/sk/admin/settings/languages.json
trans.sl = public/language/sl/admin/settings/languages.json
trans.sq_AL = public/language/sq-AL/admin/settings/languages.json
trans.sr = public/language/sr/admin/settings/languages.json
trans.sv = public/language/sv/admin/settings/languages.json
trans.th = public/language/th/admin/settings/languages.json
@ -2190,6 +2233,7 @@ trans.rw = public/language/rw/admin/settings/navigation.json
trans.sc = public/language/sc/admin/settings/navigation.json
trans.sk = public/language/sk/admin/settings/navigation.json
trans.sl = public/language/sl/admin/settings/navigation.json
trans.sq_AL = public/language/sq-AL/admin/settings/navigation.json
trans.sr = public/language/sr/admin/settings/navigation.json
trans.sv = public/language/sv/admin/settings/navigation.json
trans.th = public/language/th/admin/settings/navigation.json
@ -2240,6 +2284,7 @@ trans.rw = public/language/rw/admin/settings/social.json
trans.sc = public/language/sc/admin/settings/social.json
trans.sk = public/language/sk/admin/settings/social.json
trans.sl = public/language/sl/admin/settings/social.json
trans.sq_AL = public/language/sq-AL/admin/settings/social.json
trans.sr = public/language/sr/admin/settings/social.json
trans.sv = public/language/sv/admin/settings/social.json
trans.th = public/language/th/admin/settings/social.json
@ -2290,6 +2335,7 @@ trans.rw = public/language/rw/admin/settings/sounds.json
trans.sc = public/language/sc/admin/settings/sounds.json
trans.sk = public/language/sk/admin/settings/sounds.json
trans.sl = public/language/sl/admin/settings/sounds.json
trans.sq_AL = public/language/sq-AL/admin/settings/sounds.json
trans.sr = public/language/sr/admin/settings/sounds.json
trans.sv = public/language/sv/admin/settings/sounds.json
trans.th = public/language/th/admin/settings/sounds.json
@ -2340,6 +2386,7 @@ trans.rw = public/language/rw/admin/manage/admins-mods.json
trans.sc = public/language/sc/admin/manage/admins-mods.json
trans.sk = public/language/sk/admin/manage/admins-mods.json
trans.sl = public/language/sl/admin/manage/admins-mods.json
trans.sq_AL = public/language/sq-AL/admin/manage/admins-mods.json
trans.sr = public/language/sr/admin/manage/admins-mods.json
trans.sv = public/language/sv/admin/manage/admins-mods.json
trans.th = public/language/th/admin/manage/admins-mods.json
@ -2390,6 +2437,7 @@ trans.rw = public/language/rw/admin/manage/categories.json
trans.sc = public/language/sc/admin/manage/categories.json
trans.sk = public/language/sk/admin/manage/categories.json
trans.sl = public/language/sl/admin/manage/categories.json
trans.sq_AL = public/language/sq-AL/admin/manage/categories.json
trans.sr = public/language/sr/admin/manage/categories.json
trans.sv = public/language/sv/admin/manage/categories.json
trans.th = public/language/th/admin/manage/categories.json
@ -2440,6 +2488,7 @@ trans.rw = public/language/rw/admin/manage/groups.json
trans.sc = public/language/sc/admin/manage/groups.json
trans.sk = public/language/sk/admin/manage/groups.json
trans.sl = public/language/sl/admin/manage/groups.json
trans.sq_AL = public/language/sq-AL/admin/manage/groups.json
trans.sr = public/language/sr/admin/manage/groups.json
trans.sv = public/language/sv/admin/manage/groups.json
trans.th = public/language/th/admin/manage/groups.json
@ -2490,6 +2539,7 @@ trans.rw = public/language/rw/admin/manage/privileges.json
trans.sc = public/language/sc/admin/manage/privileges.json
trans.sk = public/language/sk/admin/manage/privileges.json
trans.sl = public/language/sl/admin/manage/privileges.json
trans.sq_AL = public/language/sq-AL/admin/manage/privileges.json
trans.sr = public/language/sr/admin/manage/privileges.json
trans.sv = public/language/sv/admin/manage/privileges.json
trans.th = public/language/th/admin/manage/privileges.json
@ -2540,6 +2590,7 @@ trans.rw = public/language/rw/admin/manage/registration.json
trans.sc = public/language/sc/admin/manage/registration.json
trans.sk = public/language/sk/admin/manage/registration.json
trans.sl = public/language/sl/admin/manage/registration.json
trans.sq_AL = public/language/sq-AL/admin/manage/registration.json
trans.sr = public/language/sr/admin/manage/registration.json
trans.sv = public/language/sv/admin/manage/registration.json
trans.th = public/language/th/admin/manage/registration.json
@ -2590,6 +2641,7 @@ trans.rw = public/language/rw/admin/manage/tags.json
trans.sc = public/language/sc/admin/manage/tags.json
trans.sk = public/language/sk/admin/manage/tags.json
trans.sl = public/language/sl/admin/manage/tags.json
trans.sq_AL = public/language/sq-AL/admin/manage/tags.json
trans.sr = public/language/sr/admin/manage/tags.json
trans.sv = public/language/sv/admin/manage/tags.json
trans.th = public/language/th/admin/manage/tags.json
@ -2640,6 +2692,7 @@ trans.rw = public/language/rw/admin/manage/uploads.json
trans.sc = public/language/sc/admin/manage/uploads.json
trans.sk = public/language/sk/admin/manage/uploads.json
trans.sl = public/language/sl/admin/manage/uploads.json
trans.sq_AL = public/language/sq-AL/admin/manage/uploads.json
trans.sr = public/language/sr/admin/manage/uploads.json
trans.sv = public/language/sv/admin/manage/uploads.json
trans.th = public/language/th/admin/manage/uploads.json
@ -2690,6 +2743,7 @@ trans.rw = public/language/rw/admin/manage/users.json
trans.sc = public/language/sc/admin/manage/users.json
trans.sk = public/language/sk/admin/manage/users.json
trans.sl = public/language/sl/admin/manage/users.json
trans.sq_AL = public/language/sq-AL/admin/manage/users.json
trans.sr = public/language/sr/admin/manage/users.json
trans.sv = public/language/sv/admin/manage/users.json
trans.th = public/language/th/admin/manage/users.json
@ -2740,6 +2794,7 @@ trans.rw = public/language/rw/admin/manage/digest.json
trans.sc = public/language/sc/admin/manage/digest.json
trans.sk = public/language/sk/admin/manage/digest.json
trans.sl = public/language/sl/admin/manage/digest.json
trans.sq_AL = public/language/sq-AL/admin/manage/digest.json
trans.sr = public/language/sr/admin/manage/digest.json
trans.sv = public/language/sv/admin/manage/digest.json
trans.th = public/language/th/admin/manage/digest.json
@ -2790,6 +2845,7 @@ trans.rw = public/language/rw/admin/settings/advanced.json
trans.sc = public/language/sc/admin/settings/advanced.json
trans.sk = public/language/sk/admin/settings/advanced.json
trans.sl = public/language/sl/admin/settings/advanced.json
trans.sq_AL = public/language/sq-AL/admin/settings/advanced.json
trans.sr = public/language/sr/admin/settings/advanced.json
trans.sv = public/language/sv/admin/settings/advanced.json
trans.th = public/language/th/admin/settings/advanced.json
@ -2840,6 +2896,7 @@ trans.rw = public/language/rw/admin/settings/cookies.json
trans.sc = public/language/sc/admin/settings/cookies.json
trans.sk = public/language/sk/admin/settings/cookies.json
trans.sl = public/language/sl/admin/settings/cookies.json
trans.sq_AL = public/language/sq-AL/admin/settings/cookies.json
trans.sr = public/language/sr/admin/settings/cookies.json
trans.sv = public/language/sv/admin/settings/cookies.json
trans.th = public/language/th/admin/settings/cookies.json
@ -2890,6 +2947,7 @@ trans.rw = public/language/rw/admin/settings/general.json
trans.sc = public/language/sc/admin/settings/general.json
trans.sk = public/language/sk/admin/settings/general.json
trans.sl = public/language/sl/admin/settings/general.json
trans.sq_AL = public/language/sq-AL/admin/settings/general.json
trans.sr = public/language/sr/admin/settings/general.json
trans.sv = public/language/sv/admin/settings/general.json
trans.th = public/language/th/admin/settings/general.json
@ -2940,6 +2998,7 @@ trans.rw = public/language/rw/admin/settings/guest.json
trans.sc = public/language/sc/admin/settings/guest.json
trans.sk = public/language/sk/admin/settings/guest.json
trans.sl = public/language/sl/admin/settings/guest.json
trans.sq_AL = public/language/sq-AL/admin/settings/guest.json
trans.sr = public/language/sr/admin/settings/guest.json
trans.sv = public/language/sv/admin/settings/guest.json
trans.th = public/language/th/admin/settings/guest.json
@ -2990,6 +3049,7 @@ trans.rw = public/language/rw/admin/settings/pagination.json
trans.sc = public/language/sc/admin/settings/pagination.json
trans.sk = public/language/sk/admin/settings/pagination.json
trans.sl = public/language/sl/admin/settings/pagination.json
trans.sq_AL = public/language/sq-AL/admin/settings/pagination.json
trans.sr = public/language/sr/admin/settings/pagination.json
trans.sv = public/language/sv/admin/settings/pagination.json
trans.th = public/language/th/admin/settings/pagination.json
@ -3040,6 +3100,7 @@ trans.rw = public/language/rw/admin/settings/reputation.json
trans.sc = public/language/sc/admin/settings/reputation.json
trans.sk = public/language/sk/admin/settings/reputation.json
trans.sl = public/language/sl/admin/settings/reputation.json
trans.sq_AL = public/language/sq-AL/admin/settings/reputation.json
trans.sr = public/language/sr/admin/settings/reputation.json
trans.sv = public/language/sv/admin/settings/reputation.json
trans.th = public/language/th/admin/settings/reputation.json
@ -3090,6 +3151,7 @@ trans.rw = public/language/rw/admin/settings/tags.json
trans.sc = public/language/sc/admin/settings/tags.json
trans.sk = public/language/sk/admin/settings/tags.json
trans.sl = public/language/sl/admin/settings/tags.json
trans.sq_AL = public/language/sq-AL/admin/settings/tags.json
trans.sr = public/language/sr/admin/settings/tags.json
trans.sv = public/language/sv/admin/settings/tags.json
trans.th = public/language/th/admin/settings/tags.json
@ -3140,6 +3202,7 @@ trans.rw = public/language/rw/admin/settings/user.json
trans.sc = public/language/sc/admin/settings/user.json
trans.sk = public/language/sk/admin/settings/user.json
trans.sl = public/language/sl/admin/settings/user.json
trans.sq_AL = public/language/sq-AL/admin/settings/user.json
trans.sr = public/language/sr/admin/settings/user.json
trans.sv = public/language/sv/admin/settings/user.json
trans.th = public/language/th/admin/settings/user.json
@ -3190,6 +3253,7 @@ trans.rw = public/language/rw/admin/settings/chat.json
trans.sc = public/language/sc/admin/settings/chat.json
trans.sk = public/language/sk/admin/settings/chat.json
trans.sl = public/language/sl/admin/settings/chat.json
trans.sq_AL = public/language/sq-AL/admin/settings/chat.json
trans.sr = public/language/sr/admin/settings/chat.json
trans.sv = public/language/sv/admin/settings/chat.json
trans.th = public/language/th/admin/settings/chat.json
@ -3240,6 +3304,7 @@ trans.rw = public/language/rw/admin/settings/email.json
trans.sc = public/language/sc/admin/settings/email.json
trans.sk = public/language/sk/admin/settings/email.json
trans.sl = public/language/sl/admin/settings/email.json
trans.sq_AL = public/language/sq-AL/admin/settings/email.json
trans.sr = public/language/sr/admin/settings/email.json
trans.sv = public/language/sv/admin/settings/email.json
trans.th = public/language/th/admin/settings/email.json
@ -3290,6 +3355,7 @@ trans.rw = public/language/rw/admin/settings/group.json
trans.sc = public/language/sc/admin/settings/group.json
trans.sk = public/language/sk/admin/settings/group.json
trans.sl = public/language/sl/admin/settings/group.json
trans.sq_AL = public/language/sq-AL/admin/settings/group.json
trans.sr = public/language/sr/admin/settings/group.json
trans.sv = public/language/sv/admin/settings/group.json
trans.th = public/language/th/admin/settings/group.json
@ -3340,6 +3406,7 @@ trans.rw = public/language/rw/admin/settings/notifications.json
trans.sc = public/language/sc/admin/settings/notifications.json
trans.sk = public/language/sk/admin/settings/notifications.json
trans.sl = public/language/sl/admin/settings/notifications.json
trans.sq_AL = public/language/sq-AL/admin/settings/notifications.json
trans.sr = public/language/sr/admin/settings/notifications.json
trans.sv = public/language/sv/admin/settings/notifications.json
trans.th = public/language/th/admin/settings/notifications.json
@ -3390,6 +3457,7 @@ trans.rw = public/language/rw/admin/settings/api.json
trans.sc = public/language/sc/admin/settings/api.json
trans.sk = public/language/sk/admin/settings/api.json
trans.sl = public/language/sl/admin/settings/api.json
trans.sq_AL = public/language/sq-AL/admin/settings/api.json
trans.sr = public/language/sr/admin/settings/api.json
trans.sv = public/language/sv/admin/settings/api.json
trans.th = public/language/th/admin/settings/api.json
@ -3440,6 +3508,7 @@ trans.rw = public/language/rw/admin/settings/post.json
trans.sc = public/language/sc/admin/settings/post.json
trans.sk = public/language/sk/admin/settings/post.json
trans.sl = public/language/sl/admin/settings/post.json
trans.sq_AL = public/language/sq-AL/admin/settings/post.json
trans.sr = public/language/sr/admin/settings/post.json
trans.sv = public/language/sv/admin/settings/post.json
trans.th = public/language/th/admin/settings/post.json
@ -3490,6 +3559,7 @@ trans.rw = public/language/rw/admin/settings/sockets.json
trans.sc = public/language/sc/admin/settings/sockets.json
trans.sk = public/language/sk/admin/settings/sockets.json
trans.sl = public/language/sl/admin/settings/sockets.json
trans.sq_AL = public/language/sq-AL/admin/settings/sockets.json
trans.sr = public/language/sr/admin/settings/sockets.json
trans.sv = public/language/sv/admin/settings/sockets.json
trans.th = public/language/th/admin/settings/sockets.json
@ -3540,6 +3610,7 @@ trans.rw = public/language/rw/admin/settings/uploads.json
trans.sc = public/language/sc/admin/settings/uploads.json
trans.sk = public/language/sk/admin/settings/uploads.json
trans.sl = public/language/sl/admin/settings/uploads.json
trans.sq_AL = public/language/sq-AL/admin/settings/uploads.json
trans.sr = public/language/sr/admin/settings/uploads.json
trans.sv = public/language/sv/admin/settings/uploads.json
trans.th = public/language/th/admin/settings/uploads.json
@ -3590,6 +3661,7 @@ trans.rw = public/language/rw/admin/settings/web-crawler.json
trans.sc = public/language/sc/admin/settings/web-crawler.json
trans.sk = public/language/sk/admin/settings/web-crawler.json
trans.sl = public/language/sl/admin/settings/web-crawler.json
trans.sq_AL = public/language/sq-AL/admin/settings/web-crawler.json
trans.sr = public/language/sr/admin/settings/web-crawler.json
trans.sv = public/language/sv/admin/settings/web-crawler.json
trans.th = public/language/th/admin/settings/web-crawler.json

@ -1,3 +1,982 @@
#### v1.19.11 (2022-11-28)
##### Chores
* up version, closes #10812 (a06c05c2)
* update composer-default (9fffce87)
##### New Features
* store topic title and tags in diffs (#10900) (175d5342)
##### Bug Fixes
* prototype vulnerability in socket.io onMessage (963bfff3)
* use admin:groups priv for groups (#10960) (65284c14)
* broken flag history on flag update (98be0420)
#### v1.19.6 (2022-04-13)
##### Chores
* incrementing version number - v1.19.6 (283a0072)
* update changelog for v1.19.5 (05032ca2)
* **deps:**
* bump semver from 7.3.6 to 7.3.7 in /install (#10493) (65cec8d0)
* update dependency grunt to v1.5.2 (9f496659)
* update dependency grunt to v1.5.1 (0a8bf44e)
* update dependency grunt to v1.5.0 (e82d8bb6)
* update dependency eslint to v8.13.0 (bc3aabb4)
* update dependency eslint-plugin-import to v2.26.0 (a2ebf53b)
* bump nodebb-theme-persona from 11.4.3 to 11.4.4 in /install (#10437) (5b1789c1)
* bump nodebb-plugin-composer-default in /install (#10438) (c8c42933)
* update dependency eslint to v8.12.0 (a6590e20)
* update dependency lint-staged to v12.3.7 (#10407) (5f36ad39)
* **i18n:** fallback strings for new resources: nodebb.post-queue (a06d1246)
##### New Features
* #10460, add cutoff to suggested topics (799e94e0)
* add response:helpers.notAllowed (e8058ca3)
* add filter:image.stripEXIF (b8765df5)
* add confirm to reject, closes #10427 (538ad9e1)
* allow client-side hook registration chaining (b88bb3cf)
* delete flagId field from post/user on flag purge (31251282)
* add flags.purge (3b529b84)
* new admin events, closes #10405 (421ba6e1)
* add Albanian localisation :tada: (309968bf)
##### Bug Fixes
* dont add caller to arrays (5316029f)
* #10491, don't leak deleted message in cleanedContent (c52401da)
* #10473, trim trailing slashes on config url (9f91db16)
* closes #10436, fix DST issue on acp dashboard (39877763)
* delete history as well (002a241c)
* handle purge posts as well (93b60532)
* byCid removal, targetCid not stored in flagObj (03fdb5be)
* upgrade script (55be4202)
* column counts for other privileges (2b9b2b4a)
* **deps:**
* update dependency nodebb-plugin-mentions to v3.0.8 (#10490) (7c733e9c)
* update dependency winston to v3.7.2 (#10454) (dc03a2f9)
* update dependency nconf to v0.11.4 (#10481) (f253bbdd)
* update dependency yargs to v17.4.1 (#10480) (bbf2b73e)
* update dependency ioredis to v5.0.4 (#10479) (88200ec1)
* update dependency html-to-text to v8.2.0 (#10471) (91026e5f)
* update dependency semver to v7.3.6 (#10466) (c50de911)
* update dependency html-to-text to v8.1.1 (#10470) (b3ec8059)
* update dependency nodebb-widget-essentials to v5.0.10 (#10461) (b6517cfd)
* update dependency body-parser to v1.20.0 (#10450) (26511185)
* update dependency spdx-license-list to v6.5.0 (#10452) (5e37f34e)
* update dependency graceful-fs to v4.2.10 (#10457) (947fa193)
* update dependency mongodb to v4.5.0 (#10458) (30f728ca)
* update dependency ioredis to v5.0.3 (#10446) (0d744d30)
* update dependency ioredis to v5 (#10434) (060ad1b0)
* update dependency nodebb-plugin-2factor to v3.0.6 (#10435) (0ac426e0)
* update dependency nodebb-plugin-composer-default to v7.0.21 (#10429) (898e0e89)
* update dependency nodebb-plugin-spam-be-gone to v0.8.1 (#10425) (47399bfe)
* update dependency sortablejs to v1.15.0 (#10418) (12cd1df2)
* update dependency nodemailer to v6.7.3 (#10421) (7e542495)
* update dependency yargs to v17.4.0 (#10416) (eaa05517)
* update dependency nodebb-theme-persona to v11.4.3 (#10414) (720a9dba)
* update dependency connect-redis to v6.1.3 (#10390) (06594131)
* **security:**
* explicitly declare cache-control header instead of using middleware (38ca73c4)
* cache-control on all pages using setupPageRoute or setupApiRoute, and 404 controllers. (1f6f389f)
* explicitly set cache-control 'private' on any page where a header is built (e39cdd49)
##### Performance Improvements
* WIP #10449, allow array of pids for posts.purge (#10465) (76797371)
* #10410, faster upgrade script (dab22d5f)
##### Refactors
* replace deprecated String.prototype.substr() (#10432) (200f0b2e)
* remove some verbose logging (9abe22a0)
* :trollface: (29b86b32)
* shorter generateTopicClass (f76c0e89)
#### v1.19.5 (2022-03-16)
##### Chores
* incrementing version number - v1.19.5 (48d6eb4f)
* update changelog for v1.19.4 (0e6e49b2)
* **deps:**
* bump less from 3.13.1 to 4.1.2 in /install (#9856) (d33485f6)
* bump autoprefixer from 10.4.2 to 10.4.4 in /install (#10403) (90094935)
* update dependency lint-staged to v12.3.6 (0a4522a2)
* update commitlint monorepo to v16.2.3 (0a97015d)
* bump nodebb-plugin-spam-be-gone in /install (#10387) (445e3d70)
* bump connect-redis from 6.1.1 to 6.1.2 in /install (#10391) (145621f7)
* update dependency eslint to v8.11.0 (feaf3068)
* update dependency mocha to v9.2.2 (#10383) (4ffbd78d)
* **i18n:**
* fallback strings for new resources: nodebb.admin-manage-users (2f09c22c)
* fallback strings for new resources: nodebb.admin-manage-privileges, nodebb.admin-manage-users, nodebb.error, nodebb.user (15508bac)
* fallback strings for new resources: nodebb.admin-settings-reputation, nodebb.error (5274a6aa)
##### New Features
* collect hook logs in order to reduce console noise, flush on ajaxify loadScript completion (935704a8)
* add support for PATCH method in api module (4b79dfd2)
* on online users page override timeago cutoff to 24 hours (7c946570)
* ability to mute users (be6bbabd)
* min:rep:upvote, and other limits similar to downvotes (3414a23b)
* post-queue hooks, closes #10381 (2056ac04)
##### Bug Fixes
* topic events if there is a blocked user in topic (3935a86b)
* topic events disappearing if there are queued posts (2808c952)
* #10393, move 'Create User' control to overflow menu (cd687cff)
* don't append to history on refresh or ajaxify to same url (c83987bd)
* global privs (7d063d73)
* #10384 -- mixed up sizes for fallback touch icons (cb113208)
* #10377, remove logging of env vars (997ab7d4)
* **deps:**
* update dependency postcss to v8.4.12 (#10396) (bdbc168d)
* update dependency sharp to v0.30.3 (#10389) (b4213859)
##### Refactors
* closes #10301 (c8e986d6)
##### Tests
* skip i18n tests if the github event is a pull request (e578c605)
* fix middleware test (24c1f879)
* fix category tests (6344c3b6)
* fix one more test (a5511425)
#### v1.19.4 (2022-03-09)
##### Chores
* incrementing version number - v1.19.4 (67282057)
* delay `filter:email.send` removal to v2.0.0 (83fd4311)
* up persona (c23b2089)
* incrementing version number - v1.19.3 (09cb11c8)
* update changelog for v1.19.3 (0b48ec54)
* **deps:**
* bump postcss from 8.4.7 to 8.4.8 in /install (#10372) (d7a4ae1f)
* update dependency lint-staged to v12.3.5 (517ae926)
* bump nodebb-plugin-spam-be-gone in /install (81e7ca20)
* update dependency eslint to v8.10.0 (e83c8be2)
* bump postcss from 8.4.6 to 8.4.7 in /install (52ee5ce8)
* bump json2csv from 5.0.6 to 5.0.7 in /install (e44cbb24)
* update dependency smtp-server to v3.10.0 (67e4df78)
* update dependency mocha to v9.2.1 (00eebf10)
* bump prompt from 1.2.1 to 1.2.2 in /install (21913b5b)
* bump express from 4.17.2 to 4.17.3 in /install (5321ba4d)
* **i18n:**
* fallback strings for new resources: nodebb.admin-settings-reputation, nodebb.flags (a5fe8350)
* fallback strings for new resources: nodebb.topic (dc0f9a73)
##### New Features
* add hook filter:posts.getUserInfoForPosts (df46ab48)
* add translateKeys (e841d59a)
* post auto flagging on downvotes #10029 (#10367) (62187caa)
* closes #10324, show recently online users as well (eac9cd03)
* resolve paths for staticDirs as well (e0b1c374)
* ability to go through your posts in a topic (b517b376)
* **sorted-list:** add new client-side hook `filter:settings.sorted-list.loadItem` (92d613e4)
##### Bug Fixes
* apply some DRY (a3b4c668)
* optional params (e9a86cb9)
* #10374, use quick search in setting (70e613f8)
* #10366, remove dupe /files (371b4658)
* always show self on /users?online (56345777)
* db call (21cd1e61)
* lastonline timestamps and display for guests (cc665fd6)
* #10357 (7ee4e4e0)
* #10358, bad uploads path (5479f364)
* #10360, only take top level posts (37ef8366)
* #10354, flag actions regression (fec907d9)
* dont overwrite asset_base_url if its set (0e12f82d)
* allow calls to api module without a defined payload (914733e4)
* #10334, use the correct env vars for web install (6b22d0e1)
* persona test fail (10a5901e)
* #10316, fix quoting regression (0b813d60)
* #10322 (5694e62e)
* #10329, select elements in sorted-list not showing proper values (1fa41342)
* allow translation keys in `label` attributes (52836f3a)
* don't load setup.json into nconf if setup.json doesn't exist (6e156daa)
* regression caused by 94b79ce4024f72a3eee2cfa06b05d8f66898149f (4164898d)
* **deps:**
* update dependency nodebb-plugin-markdown to v9.0.10 (bcb68ee9)
* update dependency mongodb to v4.4.1 (#10364) (4b730df9)
* update dependency nodebb-theme-persona to v11.4.2 (#10361) (4d590f65)
* update dependency body-parser to v1.19.2 (#10298) (c75714b7)
* update dependency sharp to v0.30.2 (#10359) (1a6c2c55)
* update dependency nodebb-plugin-mentions to v3.0.7 (#10355) (3e5a0f0d)
* update dependency nodebb-plugin-2factor to v3.0.5 (f30c65a4)
* update dependency nodebb-theme-persona to v11.4.1 (#10337) (b84e61d5)
* update dependency nodebb-theme-persona to v11.4.0 (#10325) (244d8801)
* update dependency nodebb-plugin-mentions to v3.0.6 (#10328) (31cbff19)
* update dependency nodebb-plugin-dbsearch to v5.1.3 (#10330) (1c1062e1)
* update dependency nodebb-plugin-markdown to v9.0.8 (#10327) (c17b9bd4)
* update dependency mongodb to v4.4.0 (#10319) (afd2993d)
* update dependency nodebb-plugin-emoji to v3.5.17 (#10314) (04900291)
* update dependency nodebb-plugin-dbsearch to v5.1.2 (#10313) (0e30362b)
* update dependency nodebb-widget-essentials to v5.0.9 (#10307) (5666c103)
* update dependency nodebb-widget-essentials to v5.0.8 (#10306) (636f1baf)
* **sorted-list:**
* call loadItem hook on add/edit items as well as on item retrieval, refactor edit to call parse() (1c8d1d23)
* only call `.stripHTMLTags()` on string values (fb4f89f3)
##### Refactors
* show a louder deprecation notice, alert once for each hook, not per plugin per hook (93b80f17)
* move header unread code to separate module (40230725)
* remove code that doesn't do anything (4a1e761a)
* wrap around if at end (3acd2ac8)
* change lang string (94961196)
##### Tests
* possible fix random psql test failure (50ed3a32)
* log configJSON (9db90a30)
* check contents of config.json in tests (32f69301)
#### v1.19.3 (2022-02-16)
##### Chores
* **i18n:**
* fallback strings for new resources: nodebb.admin-settings-uploads (4043f179)
* fallback strings for new resources: nodebb.user (775d9077)
* **deps:**
* update dependency lint-staged to v12.3.4 (9577ef8d)
* update commitlint monorepo to v16.2.1 (2290cee5)
* update dependency eslint to v8.9.0 (763cd193)
* remove punycode dep (e9cb1452)
* incrementing version number - v1.19.2 (e49b31f0)
* update changelog for v1.19.2 (f012984d)
##### New Features
* delete diffs on post purge, closes #10291 (e9e48a75)
* closes #10296 (58b5781c)
* deleting a user upload dissociates from posts, and vice versa (d5ed8736)
* #10276, dont change/revert theme if its current (398d25c2)
##### Bug Fixes
* #10302, fix regression (503e27f7)
* one last try (9205169f)
* doggy.gif (2f64d633)
* one more fix (cfdfbf32)
* dupe key errors (770fcd9e)
* #10292, delete missing fields (dbf7a458)
* local deleteUploads() method in `src/user/delete.js` to call `User.deleteUpload()` (b9edee14)
* #10144, automatically delete uploads from disk on post purge, ACP option to keep uploads on disk if desired (84dfda59)
* four-space indents in package.json (9aa3e442)
* #10289, remove lodash dependency in src/cli/package-install.js (81fa2e22)
* non-functional upgrade script (1c7fb8fe)
* language keys (350052ec)
* #10273, properly calculate item count for best/controversial (d70ce3a9)
* **deps:**
* update dependency nodebb-plugin-emoji to v3.5.16 (#10297) (b47ca86d)
* update dependency nodebb-plugin-markdown to v9.0.7 (#10293) (5b0d4a8e)
* update dependency nodebb-plugin-emoji to v3.5.14 (#10295) (7af057fa)
* update dependency nodebb-plugin-mentions to v3.0.5 (#10294) (55a98183)
* update dependency winston to v3.6.0 (#10285) (22da7a10)
* update dependency nodebb-plugin-markdown to v9.0.6 (3225a1af)
* update dependency nodebb-plugin-spam-be-gone to v0.7.13 (#10280) (3dc108d3)
* update dependency nodebb-plugin-emoji to v3.5.12 (#10279) (2c0b6322)
* update dependency nodebb-plugin-emoji to v3.5.11 (#10274) (766ef4e5)
##### Refactors
* lazy load slugify (946d351f)
* .deleteUpload() to accept array of paths (7ef9c7d2)
* fix user uploads paths, and associate uid with user uploads (ea36016d)
* change the post uploads' hash seeds to have the `files/` prefix (6489e9fd)
* abstract some common code out to local utility methods (aad0c5fd)
* move post upload tests to its own file (d92da828)
* remove extra zset remove, closes #10277 (489c0d30)
##### Code Style Changes
* linting errors (5d7e1ebc)
##### Tests
* fix topic thumb tests and topic thumbs to work properly with post upload assoc. (fb78570c)
* user uploads.js tests (8c2752ba)
* testing user upload methods, already fixed one bug (11275d68)
#### v1.19.2 (2022-02-09)
##### Chores
* up persona (14ecafb6)
* up markdown (8a4b7dc4)
* add missing quote (b98758d3)
* use source and current local vars, + docs (9e4147f0)
* up persona (1eaae1d0)
* up emoji (106ef7cf)
* persona (3b4cf971)
* persona (78db61cf)
* up deps (c7a56439)
* add punycode dependency (452f29c0)
* up persona (d50d4a9e)
* up persona (458606bc)
* up persona (cfe53305)
* up persona (f29bed27)
* up packages (b4a4e60e)
* up persona (3e30b6cd)
* incrementing version number - v1.19.1 (7f450268)
* update changelog for v1.19.1 (55df683a)
* **deps:**
* bump ioredis from 4.28.4 to 4.28.5 in /install (#10254) (b496ad44)
* bump nodebb-widget-essentials in /install (#10219) (b71025ce)
* update dependency lint-staged to v12.3.3 (6ba25557)
* update dependency eslint to v8.8.0 (153693e0)
* bump nodebb-theme-persona in /install (#10199) (2db54e67)
* update dependency lint-staged to v12.3.2 (814cb66b)
* update dependency mocha to v9.2.0 (05e2b354)
* bump helmet from 5.0.1 to 5.0.2 in /install (1f037bf6)
* update dependency lint-staged to v12.3.1 (ac244af3)
* update dependency lint-staged to v12.3.0 (7060837b)
* bump helmet from 4.6.0 to 5.0.1 in /install (5d3900dc)
* **i18n:**
* fallback strings for new resources: nodebb.modules (a71b8e59)
* fallback strings for new resources: nodebb.global, nodebb.pages (aa812f03)
* fallback strings for new resources: nodebb.users (70eeb204)
* fallback strings for new resources: nodebb.admin-settings-email (e9588ca7)
* fallback strings for new resources: nodebb.admin-settings-advanced (2ec4e31f)
##### Documentation Changes
* openapi spec for new route (9b912db7)
* some tweaks to cli help (c869d7db)
##### New Features
* handle array of keys in psql exists for zsets (5143ca33)
* upgrade script to clean up leftover :thumb zsets (0ac28435)
* more tests for ensuring downvoted posts are added to the :votes zset (1b8eeaf8)
* upgrade script to store downvotes posts in the user :votes sorted set (cf88483f)
* new accounts route to show most downvoted ('controversial') posts (5afd5de0)
* v3 user email tests (aa8914a1)
* allow gif profile images, sharp 0.30.0 supports gifs (7f1c4477)
* detect alternative package managers based on lockfile (8ba9e67c)
* new language key for user search in chat (766ad6b7)
* remove colors in favour of chalk (#10142) (cf8f62ae)
* add upload helper module for drag&drop, paste, closes #6388 (cf5c0968)
* no more sending emails to banned users, + feature flag (ea27eaf1)
* push the theme name into body class (e1e1d522)
* add ACP toggles for COEP and CORP headers (d91aeea3)
##### Bug Fixes
* **deps:**
* update dependency sharp to v0.30.1 (#10270) (8e52abe8)
* update dependency nodebb-widget-essentials to v5.0.7 (#10269) (6c0f7034)
* update dependency nodebb-theme-persona to v11.3.37 (#10265) (78d48c37)
* update dependency ioredis to v4.28.5 (#10252) (721a70c0)
* update dependency connect-redis to v6.1.1 (#10260) (a10e4940)
* update dependency nodebb-theme-persona to v11.3.36 (#10253) (0e2a4a2d)
* update dependency nodebb-theme-persona to v11.3.35 (#10251) (6465e012)
* update dependency pg-cursor to v2.7.3 (#10244) (e6185883)
* update dependency nodebb-theme-persona to v11.3.33 (#10248) (32477676)
* update dependency nodebb-theme-vanilla to v12.1.17 (#10249) (8f5b5ef1)
* update dependency nodebb-plugin-emoji to v3.5.9 (#10250) (1eb0939e)
* update dependency sanitize-html to v2.7.0 (#10246) (845717b8)
* update dependency pg to v8.7.3 (#10243) (531a3b1e)
* update dependency connect-redis to v6.1.0 (#10245) (c343b631)
* update dependency nodebb-theme-persona to v11.3.31 (#10241) (f1bed441)
* update dependency nodebb-plugin-composer-default to v7.0.20 (#10231) (a4702959)
* update dependency nodebb-theme-persona to v11.3.30 (#10232) (916a0db3)
* update dependency nodebb-plugin-emoji to v3.5.8 (#10239) (ebf4e12b)
* update dependency sharp to v0.30.0 (#10221) (2924cd3b)
* update dependency ioredis to v4.28.4 (#10224) (cda07cb7)
* update dependency clipboard to v2.0.10 (2c605d1c)
* update dependency sitemap to v7.1.1 (1bf938da)
* update dependency winston to v3.5.1 (b0dd68bb)
* pin dependency punycode to 2.1.1 (e7ba24c5)
* update dependency postcss to v8.4.6 (322f1033)
* update dependency nodebb-plugin-markdown to v9 (7d5080cd)
* update dependency ace-builds to v1.4.14 (#10200) (c50f6512)
* update dependency winston to v3.5.0 (#10202) (a7f142be)
* update dependency clipboard to v2.0.9 (#10203) (c6164e48)
* remove extraneous devDependencies on package merge (a2c7d69e)
* #10257, topic thumbs not deleting on topic deletion (0f788b8e)
* #10256, allow quote tooltip on mobile (fb3f4f9a)
* #10255, create verified/unverified groups on install (08f2a050)
* controversial posts/bests posts not showing anything (079c487d)
* regression in package.json merging logic that caused extraneous packages to not be removed (d34471f6)
* #10229, package merging should deep merge nested objects (689c125c)
* use fs.promises (a0a38706)
* bug where .reduce() exploded due to no initial value, if input value was an empty array (5cff6e3f)
* https://github.com/NodeBB/NodeBB/issues/10242 (dcb201df)
* missing early return (ad635175)
* handle case where email is explicitly passed into user.create, and thus is set in user hash, but confirmation request may have expired (936562c3)
* #10236, don't check email:uid, instead verify an email confirmation is active (0322e984)
* don't crash if requestedFields is undefined (98839108)
* a missed invocation of colors (c3d926ff)
* proactively guard against homograph characters in website values (fa7dcdb9)
* #10208, don't use leading slash in directory names (1d01741a)
* don't crash if quick search doesn't return posts (93d18383)
* properly unregister hooks in emailer tests (fc2c755c)
* email ban tests (dee9cca3)
* update usage of emailer.send to not catch (as errors are no longer thrown), email error throttler (d4e5259f)
* derp (b3f7b742)
* bug where page wouldn't complete loading if data.scripts was emptied (578145ac)
* use escaped group names in invite modal (2a89ad82)
* https://github.com/julianlam/nodebb-plugin-mentions/issues/170 (dc6e629d)
* #10197, fix relative path urls for dashboard pages (92a249c9)
* actually, CORP is ok (df8c8ad8)
* update defaults for corp and coep to be more permissive, for now, to be reverted for v1.20.0 (4467299e)
* if no group label is selected, select no group title option (94da5026)
##### Other Changes
* remove unused require (6be330f2)
##### Performance Improvements
* increase batch size (b548083b)
##### Refactors
* update chat plcaeholder message (fbd9ba79)
* updated package-install.js exports style, new exported method 'getPackageManager' for use in cases where nconf is unreliable, fix bug where nconf was not correctly set up in cli tools, proper installation of dev dependencies based on global env value (9a169085)
* emailer.send and emailer.sendToEmail returns Boolean based on message being successfully sent (f0e32ff1)
* sorted-list .get() to be async fn (89b559a2)
##### Tests
* fix occasional test failure (2dbdd181)
* add test to verify that a sorted set is automatically deleted if its last element is removed (#10261) (60680876)
* stricter isValidationPending check (d1b1f50b)
* fix derp (680e36da)
* up acp plugin page timeout (a214f9a6)
#### v1.19.1 (2022-01-21)
##### Chores
* **deps:**
* bump compare-versions from 4.1.2 to 4.1.3 in /install (#10154) (4a5182e4)
* update dependency lint-staged to v12.2.2 (f090de36)
* update dependency @commitlint/cli to v16.1.0 (44d81a95)
* update dependency lint-staged to v12.2.1 (857ac480)
* update dependency @commitlint/cli to v16.0.3 (9c63d076)
* update dependency lint-staged to v12.2.0 (1a0c117d)
* update dependency eslint to v8.7.0 (8abaf3f6)
* update dependency mocha to v9.1.4 (f5ad173b)
* up persona (89871d71)
* add test.sh to gitignore (d7796f0b)
* delete test script (250274c7)
* remove unused lang key #10180 (2fe91e36)
* incrementing version number - v1.19.0 (18b0a29f)
* update changelog for v1.19.0 (c8f1bc53)
* **i18n:**
* fallback strings for new resources: nodebb.admin-settings-user (78cd6de7)
* fallback strings for new resources: nodebb.user (3ec9197c)
* fallback strings for new resources: nodebb.email (354aa1a5)
##### New Features
* revert label js change (1c80adf1)
* hide all categories link on flags filters (e9d0db28)
* nicer error handling for bad jwt in unsubscribe template (31ea2266)
##### Bug Fixes
* **deps:**
* update dependency jquery-ui to v1.13.1 (#10186) (55b3a355)
* update dependency multiparty to v4.2.3 (#10188) (7fa2ba70)
* update dependency nodebb-theme-persona to v11.3.15 (#10155) (e03d4747)
* update dependency mongodb to v4.3.1 (#10178) (693ca1f1)
* update dependency nodebb-plugin-composer-default to v7.0.18 (#10164) (2c75cce6)
* urls used when recent/unread/popular/top is used as the homepage (28359665)
* mark unread button showing the selected category (fdfafb44)
* catch exceptions from sendNotifications (c1ec2047)
* multiple cid filter on flags page (3e8cb732)
* post indices if there is a blocked user in topic (f9279b63)
* dont add duplicate link backs (3b72ff87)
* #10175, fix topic linkbacks duplicating on post edit (b06c6329)
* #10173, don't show optional message if email is required (d1eb21c5)
* #10172, fix postqueue accept/reject notification text (6a75ed50)
* #10167, fix regression prevent guest post (4799efc7)
* CSRF handler to go back to saving in session (#10159) (e9ee843b)
* #10158, fix extra padding (03f5cbcc)
##### Refactors
* add method to error messages (c9fabb0e)
##### Tests
* add failing guest csrf test (#10169) (10949184)
#### v1.19.0 (2022-01-13)
##### Breaking Changes
* `GET /chats/:roomId/users` [breaking] (6eea6451)
* remove socket.emit('user.exists') (1f063058)
* remove socket.emit('user.changeUsernameEmail') (6b45dee9)
* #10077, store nav items in objects (69c96078)
* remove socket.emit('topics.follow') (f918a381)
* remove socket.emit('topics.post') (6ad04721)
* remove socket.emit('user.banUsers'); (49641a32)
* remove socket.emit('posts.reply') (4604a572)
* remove socket.emit('user.changePicture') (6d95684b)
* remove socket.emit('user.search') (0d694c78)
* remove socketHelpers.setDefaultPostData (99f865c6)
* remove deprecated groups socket calls (02ea17ea)
* remove deprecated methods (0d1e57dc)
* remove socket.emit('posts.delete') (bd1cb2d4)
* remove socket.emit('posts.upvote') (ec1d5e38)
* remove socket.emit('posts.move') (8427c5d9)
* remove socket.emit('posts.edit') (4247f624)
* remove socket.emit('posts.bookmark/unbookmark') (f7418ccd)
* remove deprecated admin.groups methods (07e2741e)
* remove socket.emit('categories.getCategory') (45d755b6)
* remove socket.emit('admin.categories.setPrivilege') and socket.emit('admin.categories.getPrivilegeSettings') (cc3f82bc)
* remove deprecated socket.emit('admin.categories.update') (0b9c01f9)
* remove deprecated socket.emit('admin.categories.purge') (ba5d2e7b)
* remove deprecated socket.emit('admin.categories.create') (b3353723)
* remove deprecated socket.emit('admin.categories.getAll') (10c19af2)
* remove getTopicPosts(tid, ...) usage (170e5dd9)
* remove deprecated post diff socket calls (8117b7f2)
* remove deprecated user middlewares (1a7fffc7)
* remove action:category.loaded, use action:topics.loading (36aa6034)
* remove setTopicSort/setCategorySort (6dcdf1d3)
* remove deprecated socket user create/delete functions (a7d1dfb6)
* remove deprecated uploads.delete (c93d7fdb)
* remove deprecated methods (79de48c5)
* remove socket.io/flags.js (c5f08fdc)
##### Chores
* org; merge consecutive await calls into one Promise.all (be4dbe34)
* fix #9213 (0a5420ed)
* revert engines change in install/package.json (487f25ba)
* update renovate config (f95acce3)
* update renovate range strategy... (bc0f33df)
* remove debug logs in test/api.js (82768fcf)
* use apiv3 for room rename tests (e745e212)
* trigger lang (540eeae9)
* up themes (71fa8175)
* right dropdown (7aa85882)
* right dropdown (a998cc1c)
* update readme mongodb version (af5393ec)
* incrementing version number - v1.18.6 (3a78a151)
* update changelog for v1.18.6 (3c8109e2)
* **deps:**
* update commitlint monorepo (56d134c3)
* update dependency lint-staged to v12.1.7 (40e7007f)
* update dependency lint-staged to v12.1.6 (f78108ac)
* update dependency eslint-plugin-import to v2.25.4 (a69afdb6)
* update dependency lint-staged to v12.1.5 (12038039)
* update dependency eslint to v8.6.0 (b546ff4e)
* update dependency lint-staged to v12.1.4 (87779fc8)
* update dependency jsdom to v19 (#10053) (ee05b762)
* update dependency lint-staged to v12.1.3 (c0dd8dcb)
* update dependency eslint to v8.5.0 (55b9fab1)
* update dependency eslint to v8.4.1 (ba02f015)
* update dependency eslint to v8.4.0 (4b113715)
* update dependency lint-staged to v12 (b3423389)
* update dependency eslint to v8 (e9aadde1)
* update commitlint monorepo to v15 (f6c6425d)
* update dependency jsdom to v18.1.1 (87433b79)
* bump compare-versions from 3.6.0 to 4.1.1 in /install (ea9f2c73)
* update dependency jsdom to v18.1.0 (d7c2a311)
* **i18n:**
* fallback strings for new resources: nodebb.user (d79d7e80)
* fallback strings for new resources: nodebb.admin-settings-uploads (e6a46ef6)
* fallback strings for new resources: nodebb.error (207ae8cd)
* fallback strings for new resources: nodebb.post-queue (edba10e2)
* fallback strings for new resources: nodebb.modules, nodebb.notifications (fd939f8b)
* fallback strings for new resources: nodebb.admin-admin (4a53adf6)
* fallback strings for new resources: nodebb.admin-admin (b052a8e7)
* fallback strings for new resources: nodebb.topic (23c915ba)
* fallback strings for new resources: nodebb.admin-settings-user, nodebb.login (eecd02fb)
* fallback strings for new resources: nodebb.admin-settings-email (72e1c281)
##### Documentation Changes
* comment hint :shipit: (ffdf26af)
* fix description for route (47ab9526)
* roomId is number (0aa25f20)
* openAPI documentation for routes (55e68e2f)
* use social media card in readme header (33c8b197)
* add social media card (f7b3f69f)
* add docs link higher up (1a85aaad)
* update readme blurb (e325aa93)
##### New Features
* bundling nodebb-plugin-2factor with all NodeBB installations, v1.19.0 onwards :tada: (31b4b8fd)
* revoke user sessions on successful password reset (6ca216ab)
* allow % in tags, #10135 (a75a043b)
* allow isCluster, isPrimary, and jobsDisabled to be passed in as numbers in addition to string/bool (b5b188fd)
* `GET /api/v3/chats/:roomId/messages` (2fe53cf8)
* `DELETE /api/v3/chats/:roomId/users` and `DELETE /api/v3/chats/:roomId/users/:uid` (fe17c94c)
* `POST /chats/:roomId/users` (d62ee846)
* `POST /chats/:roomId/:mid` and `DELETE /chats/:roomId/:mid` (d5fd098e)
* middleware.assert.message (90fcbe44)
* `GET /chats/:roomId/:mid` (b2929605)
* `PUT /chats/:roomId/:mid` (f48ed365)
* allow API checkRequired middleware error to be internationalized (74f1905e)
* `PUT /api/v3/chats/:roomId` (9a4fd5dc)
* `POST /api/v3/chats/:roomId` (eeffb9d9)
* `GET /api/v3/chats/:roomId` (09cf9c77)
* `POST /api/v3/chats`, chat room creation, plus openAPI docs update (40b4544e)
* `GET /api/v3/chats` (94bead71)
* stub code for v3 chats api (02e878be)
* #9506, allow seeing and editing your queued posts (c4042c70)
* pass in all query params to category search filter (599bffd8)
* add data param to filter:categories.search (c4156bdd)
* ensure that all requests handled by NodeBB fall under the relative_path as configured (a3bdb706)
* show 10 members (d9c42c00)
* closes #10018 (1e535528)
* #10018 add href (06bfec88)
* #10018 , wip (0f14f23b)
* autocomplete for activate/reset (f0d192fb)
* #10008, add history entry for note deletion (c26870d2)
* #9957, don't remove existing fields form config.json (0532c1b2)
* add feature flag to disable verification emails, closes #9996 (09e0c6d5)
##### Bug Fixes
* **deps:**
* update dependency nodebb-plugin-markdown to v8.14.6 (ad6f6051)
* update dependency winston to v3.4.0 (#10150) (2fee1d07)
* update dependency ioredis to v4.28.3 (#10151) (bfad04ab)
* pin dependencies (da2bb340)
* pin dependency socket.io-adapter-cluster to 1.0.1 (#10146) (15bf3db2)
* update dependency nodebb-theme-vanilla to v12.1.15 (#10149) (2fa3cd0d)
* update dependency nodebb-theme-slick to v1.4.23 (#10148) (762de2d8)
* update dependency nodebb-theme-persona to v11.3.13 (#10147) (385d4c71)
* update dependency winston to v3.3.4 (4bada01b)
* update dependency autoprefixer to v10.4.2 (a47883e8)
* update dependency mongodb to v4.3.0 (50eb4556)
* update socket.io packages to v4.4.1 (9eb00cb2)
* update dependency nodebb-rewards-essentials to v0.2.1 (0a15c99e)
* update dependency autoprefixer to v10.4.1 (f1aa5f7d)
* update dependency yargs to v17.3.1 (5c3335b7)
* update dependency nodebb-theme-vanilla to v12.1.14 (#10102) (dd8b1f75)
* update dependency nodebb-theme-slick to v1.4.22 (#10101) (dd1633ff)
* update dependency nodebb-theme-lavender to v5.3.2 (#10099) (eccdfc9d)
* update dependency nodebb-theme-persona to v11.3.12 (#10100) (4f6fc10b)
* update dependency nodebb-theme-persona to v11.3.11 (32cbf760)
* update dependency nodebb-theme-slick to v1.4.21 (9253519c)
* update dependency nodebb-theme-slick to v1.4.20 (#10084) (019804e1)
* update dependency nodebb-theme-vanilla to v12.1.13 (#10085) (66c759ed)
* update dependency nodebb-theme-persona to v11.3.10 (#10083) (d276c9cd)
* update dependency nodebb-plugin-composer-default to v7.0.17 (#10082) (0ef9c7ab)
* update dependency nodebb-theme-vanilla to v12.1.12 (dda7c075)
* update dependency nodebb-theme-slick to v1.4.19 (4577600e)
* update dependency nodebb-theme-persona to v11.3.8 (5e2281c3)
* update dependency mongodb to v4.2.2 (0551a19e)
* update dependency postcss to v8.4.5 (16398dd9)
* update dependency compare-versions to v4.1.2 (de1ed01d)
* bump persona (16c88a97)
* bump persona (c90a8926)
* update dependency nodebb-plugin-mentions to v3.0.4 (#10063) (07217762)
* update dependency nodebb-plugin-spam-be-gone to v0.7.12 (#10064) (a5840c5a)
* update dependency nodebb-theme-slick to v1.4.18 (#10065) (5477cf32)
* update dependency nodebb-plugin-markdown to v8.14.5 (#10062) (60d778f0)
* update dependency nodebb-theme-persona to v11.3.5 (#10059) (8695d370)
* update dependency nodebb-plugin-dbsearch to v5.1.1 (70068d6c)
* update dependency nodebb-plugin-composer-default to v7.0.15 (84b03a34)
* update dependency nodebb-theme-persona to v11.3.3 (8cbe0df2)
* bump emoji plugin (14e35247)
* update dependency ioredis to v4.28.2 (597d826b)
* update dependency yargs to v17.3.0 (115de4e5)
* update dependency mime to v3 (#9963) (49813cce)
* update dependency mongodb to v4.2.1 (f72af319)
* update dependency @socket.io/redis-adapter to v7.1.0 (ed4b0cf7)
* update dependency postcss to v8.4.4 (b34b8aa9)
* update dependency postcss to v8.4.3 (2dadf786)
* update dependency postcss to v8.4.1 (6a273798)
* update dependency postcss to v8.4.0 (29345275)
* update dependency ioredis to v4.28.1 (9966a00f)
* update dependency nodebb-theme-persona to v11.3.1 (fdae6991)
* update socket.io packages to v4.4.0 (f05d308a)
* update dependency nodebb-theme-vanilla to v12.1.10 (68dddbd9)
* update dependency nodebb-theme-persona to v11.2.22 (3eb91a20)
* update dependency nodebb-plugin-mentions to v3.0.3 (5ec32c31)
* update dependency mongodb to v4.2.0 (#10011) (2378fc84)
* update dependency @socket.io/redis-adapter to v7.0.1 (aae7be02)
* update dependency sharp to v0.29.3 (46162537)
* lint (c9592e17)
* icon alignment issue that was also bugging me :shipit: (37a71291)
* #10143, add back ace editor searchbox (42caef7f)
* #10095, add login info to email interstitial (5eb02f59)
* #10121, fix error messages in user creation (8ad64ec0)
* #10115, fix chat autocomplete hook (69a7634a)
* notice links in subfolder installs (cc27a324)
* move authenticateRequest before interstitial and maintenance mode middlewares, allowed plugins to disable authentication on certain routes (d89fc44c)
* retry incrObjtFieldBy (07232a8c)
* use component instead of class name (b179f0fc)
* assertion check to ensure messages are in the room when editing/deleting, etc (d95b4ee2)
* rename language key for incorrect parameter type error (aeb43b9b)
* deprecate chats.leave (16ba16cd)
* re-allow kicking of the other party in a 1-to-1 chat (6294beea)
* isFinite check for room assertion, more test migrating (140f9d24)
* #10096, don't display preview for links if hostname doesnt match (a115b771)
* only render preview on topic page (a9f81215)
* don't crash server if analytics fails to save (8fb89d76)
* upgrade script to handle strings as well (e332acf3)
* #10090, remove left over necro posts messages (fdaf8274)
* #10086, if pidfile is empty delete (59214ca2)
* utils method (91e21ecc)
* prevent crash if groups is not valid json (cc0a087a)
* upgrade script (968d4616)
* delete left over nav items after removal of some (737e1c19)
* targetBlank/dropdown not getting cleared (10e890e4)
* prettier bulk method usage (3b0c42a5)
* bug where groupChat property was not set for chat rooms (42959df0)
* #9484 show user history only to admins and gmods (bc7707aa)
* no need to pass 'img' to teaser tags stripping as images are already converted to alt text (45c9dde3)
* #10069, don't modify fields array (a8afdc60)
* #10068, update data-index values after sort (236d4e80)
* #10068, baseIndex should be read before sort update fix off by one error (9af23351)
* tests (45d8157f)
* #10067, count posts instead of incr/decr (830166d1)
* handle start=0 stop=0 for topics.getTopicPosts (906dc567)
* wrong usage of is ACP (4f423610)
* don't throw on invalid session, just return early so socket is not opened. (fa01801f)
* #10052, dont use spaces in tag class name (a2953583)
* don't crash if tid is falsy (1cdb0b1e)
* regression from https://github.com/NodeBB/NodeBB/commit/27c05448e1532ce466658513af0e2ff65576b410 (50063fe2)
* keep query params on /me redirects (941ecaf8)
* 403/400/500 page not generating csrf_token (65c55041)
* error pages dont have config.csrf_token (3dd681eb)
* quote button staying on screen on slow computers (d378bf4c)
* removed unused var (e0caa5e0)
* #10027, properly auto confirm first user (2473d5d8)
* cli password reset (71e34be5)
* #10023, bump persona (a10ea03c)
* #10020, /api/post/upload returns v3 style response (242f8e95)
* consolidate plugin reset logic (449366ca)
* search crash (9245f71a)
* #10010, handle reverse sorting for topic events (d5bfd512)
* #10006, dont allow new rooms or adding to a room if target is blocked (047f031d)
##### Other Changes
* remove unused (afc75ba4)
* fix (682f6089)
* missing ; (20e76699)
* remove unused (cbf198fe)
* remove unused (a20abdce)
* fix (0a6eeb93)
* remove unused utils (82b72f7e)
* fix (fa1ac04d)
##### Performance Improvements
* only add middleware if relativePath is set (41db9436)
* don't load all set members to get count (0414356c)
* create user tooltips on demand (23147235)
* closes #9994, bulk methods for settings (d412ba44)
* remove createUserTooltips (facc10e4)
##### Refactors
* remove unused language key (5278b11a)
* put message api calls behind `/messages` prefix, #10097 (aaa6f752)
* rewrite messaging tests to use API v3 calls when available, rewrote a bunch of tests to async..await (c990211c)
* only write analytics data on nbb that has runJobs=true (35fea58a)
* remove knonwOwner param (42781467)
* remove console.log (a7644466)
* remove unused validator (4e1d4217)
* only pass qs (b8896d13)
* change error message (1e60ae87)
* use hasOwnProperty (9f1b8a3b)
* remove object.create (dbba0c39)
* remove unused args (3d3ae82f)
* remove comment (633061f4)
* use .map to return promises (d4f3ee67)
* async (cfd47448)
* async (f0394c49)
* use async (8491f67d)
* remove unused (e3c0f0be)
* always returns array (9627fa90)
* use async/await (f4aa249d)
* change var name (36eb47d9)
* alerts (621c142f)
* use alerts.error/success (cba78aee)
* use lang keys, fix typo (dd02c49f)
* use alerts module (1980feed)
* dont need local function (2bb0828a)
* DRY (324262cb)
* use routePrefixMap instead of routeRegexpMap, +tests (#10035) (6c07433d)
* use hasOwnProprety (daf385cd)
* tab rules (fb363957)
* change category feed so it is not updated on every reply (697dd376)
* dont expost entire res._locals to client side (e368feef)
* shorter meta.settings.get (190532b3)
* clone settings before returning (51cbeccb)
* remove another async.series (27c05448)
* remove tabs after declaration (4359e5c9)
* update dates (6d38eab6)
* clone before returning (f729e519)
* add filter:topic.getPosts (258f368e)
* setObjectBulk to match sortedSetAddBulk (8379c11b)
* remove more async.eachSeries/mapSeries (d1964095)
* make a single call to set widgets per template (8750ee04)
* remove jshint, remove async.parallel (80f9963b)
##### Code Style Changes
* eslint (d960f601)
##### Tests
* fix util test (6c1e184c)
* update tag tests, fix linux symlink error (9b75b1ed)
* fix restore test (0d9ec9d3)
* fix user tests calling deprecated socket methods (e747998c)
* add email interstitial tests (1264dcb5)
* don't use csrf_token for get,head, options (5e08f7e6)
* fix tests (0e273ab2)
* remove old test (68fd0875)
* make it async (5c3d5f1f)
* fix (26f00ffb)
* one more getTopicPosts test (f8f0a83b)
* utils.params (7b99dc46)
* regular user shouldn't see admin:privileges (cd2040ac)
* add missing tests (58431221)
* add api token tests (7434cbf6)
* add missing tests (404a8774)
* upgrade.runParticular (2bdb4906)
* add missing acp root category test (c17ec996)
* cache dump test (217aae4c)
* add missing controllers (bc120dba)
* fix tpl name (edf7c647)
* add mising email.test tpls (6d186ff1)
* debug routes in dev (754cdab8)
* add digest route test (1280d9ae)
* digest (f11bc33a)
* fix function name (0e725125)
* submitUsage (d375dcb8)
* remove log (d7c32ccb)
* middleware/expose.js (29b3587d)
* up mongodb version (500cad78)
* mainPost removed from inf scroll (aac0792a)
#### v1.18.6 (2021-11-10)
##### Chores
* make it a link (a0f0dd02)
* update badges, remove david doesnt work (dad31c8e)
* up themes (b1d6c9ba)
* up mentions (98b98a11)
* up mentions (3e4d477e)
* fix type.yaml example and summary (591424ce)
* incrementing version number - v1.18.5 (1e418f5b)
* update changelog for v1.18.5 (82eda23a)
* remove .opacity() mixin as it is supported cross-browser (28efcb59)
* **deps:**
* update dependency eslint-plugin-import to v2.25.3 (45a0895c)
* update commitlint monorepo to v14 (dc78125a)
* update dependency jsdom to v18.0.1 (7d468e72)
* **i18n:**
* fallback strings for new resources: nodebb.admin-development-info (91676c6c)
* fallback strings for new resources: nodebb.admin-settings-navigation (3727e39f)
* fallback strings for new resources: nodebb.admin-settings-post (46789910)
##### New Features
* #9992, hooks.one (96f13e4f)
* use auto-generated meta and link tags in ACP, closes #9991 (1719bff8)
* add node 16 (#9847) (d27c9696)
* #9967, allow dropdowns in navigation (2e623dd2)
* show number of events per type in acp (b916e42f)
* show posts previews if enabled on mouse over (8c670316)
##### Bug Fixes
* **deps:**
* update dependency nodebb-theme-slick to v1.4.16 (#9990) (cf30876f)
* update dependency nodebb-plugin-composer-default to v7.0.14 (#9989) (ef02bdc4)
* update dependency nodebb-plugin-composer-default to v7.0.13 (#9988) (654c8e61)
* update dependency nodebb-plugin-mentions to v3.0.2 (1a22b0ec)
* update dependency socket.io to v4.3.2 (98ebc4d9)
* update dependency html-to-text to v8.1.0 (c1f5889f)
* update dependency nodebb-plugin-dbsearch to v5.1.0 (#9983) (4f1ee1fc)
* update dependency nodebb-plugin-composer-default to v7.0.12 (7fee0e32)
* update dependency nodebb-plugin-mentions to v3.0.1 (#9979) (8224a2a9)
* update dependency nodebb-plugin-spam-be-gone to v0.7.11 (91293ecc)
* update dependency nodebb-theme-lavender to v5.3.1 (f7295aaa)
* update dependency nodebb-plugin-mentions to v3 (#9966) (0888aae6)
* update dependency mongodb to v4.1.4 (#9968) (f5993731)
* update dependency nodebb-theme-persona to v11.2.21 (#9969) (8fac8d61)
* update dependency nodebb-plugin-mentions to v2.15.1 (0f8a68c0)
* update dependency validator to v13.7.0 (81c8d70c)
* update dependency autoprefixer to v10.4.0 (755860f1)
* ability to enumerate email via updateProfile method (c1ac2912)
* accidentally not clearing email when said email is confirmed for a different uid (b912a564)
* #9976 (28dd31a8)
* #9976, handle array or object (9bfb6c72)
* dont show previews on mobile (41e02400)
* category load more btn visibility (05468526)
* #9973, ignore if assigning to same parent (66e7cdac)
* #9972 (67cb2491)
* remove tooltip on ajaxify (f728abda)
* don't highlight external nav items (8a88295d)
* don't use # for previews (5a0efd2d)
* events for just topic with main post (3d611ab7)
* #9954, get next post timestamp (89399c0e)
* topic events not rendered in infinitescroll (a7f235db)
* broken post uploads due to 6a976a9db0340e34577961ce8d5d9479c78f7856 (485b6ced)
* #9950, rename account export routes to remove `uid/` prefix (0ee85d5a)
* double invocation of authenticateRequest (60352eca)
* #9945, call authenticateRequest middleware for mount points in /api (6a976a9d)
* hooks is sometimes undefined (74aa12c9)
* typo in flags (bc4b19b4)
* remove unused code (50b2ebf8)
* handle undefined data.query (8f08d9ca)
##### Performance Improvements
* only load posts once (9fbb3b11)
##### Refactors
* shorter require (41c3eb82)
* deprecate app.alert functions user alerts module directly (0428912c)
* deprecate app.logout (8b4510cc)
* simpler rejoin (61903448)
* deprecate app.openChat/newChat (f352be63)
* move search functions from app.js to search module (1a9b1598)
* move session messages (666fe209)
* move warnings/messages out of app.js (51855254)
* remove jshint (0a7ff208)
* cleanup info, better cpu usage % (4b738c8c)
* acp only uses 3 modes and a single theme (890bf03f)
* display errors from category drag/drop (c1cc35a9)
* use utils.debounce (e8c17fee)
##### Tests
* add another assert for random failing test (ae64b9f4)
* socket.emit doesnt exist in tests (61d1f565)
* show body when test fails (e3f5b706)
* lint (3d2398ac)
* fix tpl test (30cce142)
* dbsearch no longer has staticDir (3386893b)
* increase timeout (4ac9270a)
* fix account export test routes (10bb8cf7)
* add test aliases.buildTargets (62ac9a8b)
* empty query params for search (bda5d144)
#### v1.18.5 (2021-10-27)
##### Breaking Changes

@ -22,4 +22,4 @@ ENV NODE_ENV=production \
EXPOSE 4567
CMD node ./nodebb build ; node ./nodebb start
CMD test -n "${SETUP}" && ./nodebb setup || node ./nodebb build; node ./nodebb start

@ -1,22 +1,14 @@
# ![NodeBB](public/images/logo.svg)
# ![NodeBB](public/images/sm-card.png)
[![Workflow](https://github.com/NodeBB/NodeBB/actions/workflows/test.yaml/badge.svg)](https://github.com/NodeBB/NodeBB/actions/workflows/test.yaml)
[![Coverage Status](https://coveralls.io/repos/github/NodeBB/NodeBB/badge.svg?branch=master)](https://coveralls.io/github/NodeBB/NodeBB?branch=master)
[![Code Climate](https://codeclimate.com/github/NodeBB/NodeBB/badges/gpa.svg)](https://codeclimate.com/github/NodeBB/NodeBB)
[**NodeBB Forum Software**](https://nodebb.org) is powered by Node.js and supports either Redis, MongoDB, or a PostgreSQL database. It utilizes web sockets for instant interactions and real-time notifications. NodeBB has many modern features out of the box such as social network integration and streaming discussions, while still making sure to be compatible with older browsers.
[**NodeBB Forum Software**](https://nodebb.org) is powered by Node.js and supports either Redis, MongoDB, or a PostgreSQL database. It utilizes web sockets for instant interactions and real-time notifications. NodeBB takes the best of the modern web: real-time streaming discussions, mobile responsiveness, and rich RESTful read/write APIs, while staying true to the original bulletin board/forum format → categorical hierarchies, local user accounts, and asynchronous messaging.
Additional functionality is enabled through the use of third-party plugins.
NodeBB by itself contains a "common core" of basic functionality, while additional functionality and integrations are enabled through the use of third-party plugins.
* [Demo](https://try.nodebb.org)
* [Developer Community](http://community.nodebb.org)
* [Documentation & Installation Instructions](http://docs.nodebb.org)
* [Help translate NodeBB](https://www.transifex.com/projects/p/nodebb/)
* [NodeBB Blog](http://blog.nodebb.org)
* [Premium Hosting for NodeBB](http://www.nodebb.org/ "NodeBB")
* Unofficial IRC community – channel `#nodebb` on Libera.chat
* [Follow us on Twitter](http://www.twitter.com/NodeBB/ "NodeBB Twitter")
* [Like us on Facebook](http://www.facebook.com/NodeBB/ "NodeBB Facebook")
### [Try it now](//try.nodebb.org) | [Documentation](//docs.nodebb.org)
## Screenshots
@ -50,7 +42,7 @@ Our minimalist "Persona" theme gets you going right away, no coding experience r
NodeBB requires the following software to be installed:
* A version of Node.js at least 12 or greater ([installation/upgrade instructions](https://github.com/nodesource/distributions))
* MongoDB, version 2.6 or greater **or** Redis, version 2.8.9 or greater
* MongoDB, version 3.6 or greater **or** Redis, version 2.8.9 or greater
* If you are using [clustering](https://docs.nodebb.org/configuring/scaling/) you need Redis installed and configured.
* nginx, version 1.3.13 or greater (**only if** intending to use nginx to proxy requests to a NodeBB)
@ -78,3 +70,15 @@ Detailed upgrade instructions are listed in [Upgrading NodeBB](https://docs.node
NodeBB is licensed under the **GNU General Public License v3 (GPL-3)** (http://www.gnu.org/copyleft/gpl.html).
Interested in a sublicense agreement for use of NodeBB in a non-free/restrictive environment? Contact us at sales@nodebb.org.
## More Information/Links
* [Demo](https://try.nodebb.org)
* [Developer Community](http://community.nodebb.org)
* [Documentation & Installation Instructions](http://docs.nodebb.org)
* [Help translate NodeBB](https://www.transifex.com/projects/p/nodebb/)
* [NodeBB Blog](http://blog.nodebb.org)
* [Premium Hosting for NodeBB](http://www.nodebb.org/ "NodeBB")
* Unofficial IRC community – channel `#nodebb` on Libera.chat
* [Follow us on Twitter](http://www.twitter.com/NodeBB/ "NodeBB Twitter")
* [Like us on Facebook](http://www.facebook.com/NodeBB/ "NodeBB Facebook")

@ -1,7 +1,7 @@
/*
NodeBB - A better forum platform for the modern web
https://github.com/NodeBB/NodeBB/
Copyright (C) 2013-2017 NodeBB Inc.
Copyright (C) 2013-2021 NodeBB Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by

@ -77,9 +77,13 @@
"reputation:disabled": 0,
"downvote:disabled": 0,
"disableSignatures": 0,
"upvotesPerDay": 20,
"upvotesPerUserPerDay": 6,
"downvotesPerDay": 10,
"downvotesPerUserPerDay": 3,
"min:rep:chat": 0,
"min:rep:downvote": 0,
"min:rep:upvote": 0,
"min:rep:flag": 0,
"min:rep:profile-picture": 0,
"min:rep:cover-picture": 0,
@ -87,6 +91,7 @@
"min:rep:aboutme": 0,
"min:rep:signature": 0,
"flags:limitPerTarget": 0,
"flags:autoFlagOnDownvoteThreshold": 0,
"notificationType_upvote": "notification",
"notificationType_new-topic": "notification",
"notificationType_new-reply": "notification",
@ -141,10 +146,15 @@
"sendValidationEmail": 1,
"includeUnverifiedEmails": 0,
"emailPrompt": 1,
"sendEmailToBanned": 0,
"requireEmailAddress": 0,
"inviteExpiration": 7,
"dailyDigestFreq": "off",
"digestHour": 17,
"passwordExpiryDays": 0,
"cross-origin-embedder-policy": 0,
"cross-origin-opener-policy": "same-origin",
"cross-origin-resource-policy": "same-origin",
"hsts-maxage": 31536000,
"hsts-subdomains": 0,
"hsts-preload": 0,

@ -64,9 +64,6 @@
"iconClass": "fa-cogs",
"textClass": "visible-xs-inline",
"text": "[[global:header.admin]]",
"groups": ["administrators"],
"properties": {
"targetBlank": false
}
"groups": ["administrators"]
}
]

@ -2,7 +2,7 @@
"name": "nodebb",
"license": "GPL-3.0",
"description": "NodeBB Forum",
"version": "1.18.6",
"version": "1.19.11",
"homepage": "http://www.nodebb.org",
"repository": {
"type": "git",
@ -28,136 +28,138 @@
]
},
"dependencies": {
"@adactive/bootstrap-tagsinput": "^0.8.2",
"ace-builds": "^1.4.12",
"archiver": "^5.2.0",
"async": "^3.2.0",
"autoprefixer": "10.4.0",
"@adactive/bootstrap-tagsinput": "0.8.2",
"ace-builds": "1.4.14",
"archiver": "5.3.1",
"async": "3.2.3",
"autoprefixer": "10.4.5",
"bcryptjs": "2.4.3",
"benchpressjs": "2.4.3",
"body-parser": "^1.19.0",
"body-parser": "1.20.0",
"bootbox": "5.5.2",
"bootstrap": "^3.4.1",
"chart.js": "^2.9.4",
"cli-graph": "^3.2.2",
"clipboard": "^2.0.6",
"bootstrap": "3.4.1",
"chalk": "4.1.2",
"chart.js": "2.9.4",
"cli-graph": "3.2.2",
"clipboard": "2.0.10",
"colors": "1.4.0",
"commander": "^7.1.0",
"compare-versions": "3.6.0",
"compression": "^1.7.4",
"connect-flash": "^0.1.1",
"commander": "7.2.0",
"compare-versions": "4.1.3",
"compression": "1.7.4",
"connect-flash": "0.1.1",
"connect-mongo": "4.6.0",
"connect-multiparty": "^2.2.0",
"connect-pg-simple": "^7.0.0",
"connect-redis": "6.0.0",
"cookie-parser": "^1.4.5",
"cron": "^1.8.2",
"cropperjs": "^1.5.11",
"csurf": "^1.11.0",
"daemon": "^1.1.0",
"diff": "^5.0.0",
"express": "^4.17.1",
"express-session": "^1.17.1",
"express-useragent": "^1.0.15",
"graceful-fs": "^4.2.6",
"helmet": "^4.4.1",
"html-to-text": "8.1.0",
"ipaddr.js": "^2.0.0",
"connect-multiparty": "2.2.0",
"connect-pg-simple": "7.0.0",
"connect-redis": "6.1.3",
"cookie-parser": "1.4.6",
"cron": "1.8.2",
"cropperjs": "1.5.12",
"csurf": "1.11.0",
"daemon": "1.1.0",
"diff": "5.0.0",
"express": "4.18.0",
"express-session": "1.17.2",
"express-useragent": "1.0.15",
"graceful-fs": "4.2.10",
"helmet": "5.0.2",
"html-to-text": "8.2.0",
"ipaddr.js": "2.0.1",
"jquery": "3.6.0",
"jquery-deserialize": "2.0.0",
"jquery-form": "4.3.0",
"jquery-serializeobject": "1.0.0",
"jquery-ui": "1.13.0",
"jquery-ui": "1.13.1",
"jsesc": "3.0.2",
"json2csv": "5.0.6",
"jsonwebtoken": "^8.5.1",
"less": "^3.11.1",
"lodash": "^4.17.21",
"logrotate-stream": "^0.2.7",
"json2csv": "5.0.7",
"jsonwebtoken": "8.5.1",
"less": "4.1.2",
"lodash": "4.17.21",
"logrotate-stream": "0.2.8",
"lru-cache": "6.0.0",
"material-design-lite": "^1.3.0",
"mime": "^2.5.2",
"mkdirp": "^1.0.4",
"mongodb": "4.1.4",
"morgan": "^1.10.0",
"mousetrap": "^1.6.5",
"multiparty": "4.2.2",
"material-design-lite": "1.3.0",
"mime": "3.0.0",
"mkdirp": "1.0.4",
"mongodb": "4.5.0",
"morgan": "1.10.0",
"mousetrap": "1.6.5",
"multiparty": "4.2.3",
"@nodebb/bootswatch": "3.4.2",
"nconf": "^0.11.2",
"nodebb-plugin-composer-default": "7.0.14",
"nodebb-plugin-dbsearch": "5.1.0",
"nodebb-plugin-emoji": "^3.5.0",
"nconf": "0.12.0",
"nodebb-plugin-2factor": "3.0.7",
"nodebb-plugin-composer-default": "7.0.23",
"nodebb-plugin-dbsearch": "5.1.3",
"nodebb-plugin-emoji": "3.5.17",
"nodebb-plugin-emoji-android": "2.0.5",
"nodebb-plugin-markdown": "8.14.4",
"nodebb-plugin-mentions": "3.0.3",
"nodebb-plugin-spam-be-gone": "0.7.11",
"nodebb-rewards-essentials": "0.2.0",
"nodebb-theme-lavender": "5.3.1",
"nodebb-theme-persona": "11.2.21",
"nodebb-theme-slick": "1.4.16",
"nodebb-theme-vanilla": "12.1.9",
"nodebb-widget-essentials": "5.0.4",
"nodemailer": "^6.5.0",
"nodebb-plugin-markdown": "9.0.10",
"nodebb-plugin-mentions": "3.0.8",
"nodebb-plugin-spam-be-gone": "0.8.1",
"nodebb-rewards-essentials": "0.2.1",
"nodebb-theme-lavender": "5.3.2",
"nodebb-theme-persona": "11.4.4",
"nodebb-theme-slick": "1.4.23",
"nodebb-theme-vanilla": "12.1.17",
"nodebb-widget-essentials": "5.0.11",
"nodemailer": "6.7.3",
"nprogress": "0.2.0",
"passport": "^0.5.0",
"passport-http-bearer": "^1.0.1",
"passport": "0.5.2",
"passport-http-bearer": "1.0.1",
"passport-local": "1.0.0",
"pg": "^8.7.1",
"pg-cursor": "^2.7.1",
"postcss": "8.3.11",
"pg": "8.7.3",
"pg-cursor": "2.7.3",
"postcss": "8.4.12",
"postcss-clean": "1.2.0",
"prompt": "^1.1.0",
"ioredis": "4.28.0",
"prompt": "1.3.0",
"ioredis": "5.0.4",
"request": "2.88.2",
"request-promise-native": "^1.0.9",
"request-promise-native": "1.0.9",
"requirejs": "2.3.6",
"rimraf": "3.0.2",
"rss": "^1.2.2",
"sanitize-html": "^2.3.2",
"semver": "^7.3.4",
"serve-favicon": "^2.5.0",
"sharp": "0.29.2",
"sitemap": "^7.0.0",
"rss": "1.2.2",
"sanitize-html": "2.7.0",
"semver": "7.3.7",
"serve-favicon": "2.5.0",
"sharp": "0.30.4",
"sitemap": "7.1.1",
"slideout": "1.0.1",
"socket.io": "4.3.2",
"socket.io-adapter-cluster": "^1.0.1",
"socket.io-client": "4.3.2",
"@socket.io/redis-adapter": "7.0.0",
"sortablejs": "1.14.0",
"spdx-license-list": "^6.4.0",
"socket.io": "4.5.0",
"socket.io-adapter-cluster": "1.0.1",
"socket.io-client": "4.5.0",
"@socket.io/redis-adapter": "7.1.0",
"sortablejs": "1.15.0",
"spdx-license-list": "6.5.0",
"spider-detector": "2.0.0",
"textcomplete": "^0.18.0",
"textcomplete.contenteditable": "^0.1.1",
"timeago": "^1.6.7",
"textcomplete": "0.18.2",
"textcomplete.contenteditable": "0.1.1",
"timeago": "1.6.7",
"tinycon": "0.6.8",
"toobusy-js": "^0.5.1",
"uglify-es": "^3.3.9",
"toobusy-js": "0.5.1",
"uglify-es": "3.3.9",
"validator": "13.7.0",
"visibilityjs": "2.0.2",
"winston": "3.3.3",
"xml": "^1.0.1",
"xregexp": "^5.0.1",
"yargs": "17.2.1",
"zxcvbn": "^4.4.2"
"winston": "3.7.2",
"xml": "1.0.1",
"xregexp": "5.1.0",
"yargs": "17.4.1",
"zxcvbn": "4.4.2"
},
"devDependencies": {
"@apidevtools/swagger-parser": "10.0.3",
"@commitlint/cli": "14.1.0",
"@commitlint/config-angular": "14.1.0",
"@commitlint/cli": "16.2.4",
"@commitlint/config-angular": "16.2.4",
"coveralls": "3.1.1",
"eslint": "7.32.0",
"eslint-config-nodebb": "0.0.3",
"eslint-plugin-import": "2.25.3",
"grunt": "1.4.1",
"eslint": "8.14.0",
"eslint-config-nodebb": "0.1.1",
"eslint-plugin-import": "2.26.0",
"grunt": "1.5.2",
"grunt-contrib-watch": "1.1.0",
"husky": "7.0.4",
"jsdom": "18.0.1",
"lint-staged": "11.2.6",
"mocha": "9.1.3",
"jsdom": "19.0.0",
"lint-staged": "12.4.1",
"mocha": "9.2.2",
"mocha-lcov-reporter": "1.3.0",
"mockdate": "3.0.5",
"nyc": "15.1.0",
"smtp-server": "3.9.0"
"smtp-server": "3.10.0"
},
"bugs": {
"url": "https://github.com/NodeBB/NodeBB/issues"

@ -113,7 +113,7 @@ function ping(req, res) {
}
function welcome(req, res) {
const dbs = ['redis', 'mongo', 'postgres'];
const dbs = ['mongo', 'redis', 'postgres'];
const databases = dbs.map((databaseName) => {
const questions = require(`../src/database/${databaseName}`).questions.filter(question => question && !question.hideOnWebInstall);
@ -146,29 +146,27 @@ function install(req, res) {
}
req.setTimeout(0);
installing = true;
const setupEnvVars = nconf.get();
for (const [key, value] of Object.entries(req.body)) {
if (!process.env.hasOwnProperty(key)) {
setupEnvVars[key.replace(':', '__')] = value;
}
}
// Flatten any objects in setupEnvVars
const pushToRoot = function (parentKey, key) {
setupEnvVars[`${parentKey}__${key}`] = setupEnvVars[parentKey][key];
const database = nconf.get('database') || req.body.database || 'mongo';
const setupEnvVars = {
...process.env,
NODEBB_URL: nconf.get('url') || req.body.url || (`${req.protocol}://${req.get('host')}`),
NODEBB_PORT: nconf.get('port') || 4567,
NODEBB_ADMIN_USERNAME: nconf.get('admin:username') || req.body['admin:username'],
NODEBB_ADMIN_PASSWORD: nconf.get('admin:password') || req.body['admin:password'],
NODEBB_ADMIN_EMAIL: nconf.get('admin:email') || req.body['admin:email'],
NODEBB_DB: database,
NODEBB_DB_HOST: nconf.get(`${database}:host`) || req.body[`${database}:host`],
NODEBB_DB_PORT: nconf.get(`${database}:port`) || req.body[`${database}:port`],
NODEBB_DB_USER: nconf.get(`${database}:username`) || req.body[`${database}:username`],
NODEBB_DB_PASSWORD: nconf.get(`${database}:password`) || req.body[`${database}:password`],
NODEBB_DB_NAME: nconf.get(`${database}:database`) || req.body[`${database}:database`],
NODEBB_DB_SSL: nconf.get(`${database}:ssl`) || req.body[`${database}:ssl`],
defaultPlugins: JSON.stringify(nconf.get('defaultplugins') || nconf.get('defaultPlugins') || []),
};
for (const [parentKey, value] of Object.entries(setupEnvVars)) {
if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
Object.keys(value).forEach(key => pushToRoot(parentKey, key));
delete setupEnvVars[parentKey];
} else if (Array.isArray(value)) {
setupEnvVars[parentKey] = JSON.stringify(value);
}
}
winston.info('Starting setup process');
winston.info(setupEnvVars);
launchUrl = setupEnvVars.url;
launchUrl = setupEnvVars.NODEBB_URL;
const child = require('child_process').fork('app', ['--setup'], {
env: setupEnvVars,
@ -284,12 +282,15 @@ async function copyCSS() {
async function loadDefaults() {
const setupDefaultsPath = path.join(__dirname, '../setup.json');
try {
await fs.promises.access(setupDefaultsPath, fs.constants.F_OK + fs.constants.R_OK);
// eslint-disable-next-line no-bitwise
await fs.promises.access(setupDefaultsPath, fs.constants.F_OK | fs.constants.R_OK);
} catch (err) {
// setup.json not found or inaccessible, proceed with no defaults
if (err.code !== 'ENOENT') {
throw err;
}
return;
}
winston.info('[installer] Found setup.json, populating default values');
nconf.file({

@ -48,7 +48,7 @@ Loader.init = function () {
Loader.displayStartupMessages = function () {
console.log('');
console.log(`NodeBB v${pkg.version} Copyright (C) 2013-2014 NodeBB Inc.`);
console.log(`NodeBB v${pkg.version} Copyright (C) 2013-${(new Date()).getFullYear()} NodeBB Inc.`);
console.log('This program comes with ABSOLUTELY NO WARRANTY.');
console.log('This is free software, and you are welcome to redistribute it under certain conditions.');
console.log('For the full license, please visit: http://www.gnu.org/copyleft/gpl.html');
@ -208,12 +208,25 @@ fs.open(pathToConfig, 'r', (err) => {
if (nconf.get('daemon') !== 'false' && nconf.get('daemon') !== false) {
if (file.existsSync(pidFilePath)) {
let pid = 0;
try {
const pid = fs.readFileSync(pidFilePath, { encoding: 'utf-8' });
process.kill(pid, 0);
process.exit();
} catch (e) {
fs.unlinkSync(pidFilePath);
pid = fs.readFileSync(pidFilePath, { encoding: 'utf-8' });
if (pid) {
process.kill(pid, 0);
console.info(`Process "${pid}" from pidfile already running, exiting`);
process.exit();
} else {
console.info(`Invalid pid "${pid}" from pidfile, deleting pidfile`);
fs.unlinkSync(pidFilePath);
}
} catch (err) {
if (err.code === 'ESRCH') {
console.info(`Process "${pid}" from pidfile not found, deleting pidfile`);
fs.unlinkSync(pidFilePath);
} else {
console.error(err.stack);
throw err;
}
}
}

@ -1,84 +0,0 @@
{
"maxerr" : 50, // {int} Maximum error before stopping
"esversion": 9,
// Enforcing
"bitwise" : true, // true: Prohibit bitwise operators (&, |, ^, etc.)
"camelcase" : false, // true: Identifiers must be in camelCase
"curly" : true, // true: Require {} for every new block or scope
"eqeqeq" : true, // true: Require triple equals (===) for comparison
"forin" : true, // true: Require filtering for..in loops with obj.hasOwnProperty()
"immed" : false, // true: Require immediate invocations to be wrapped in parens e.g. `(function () { } ());`
"indent" : 4, // {int} Number of spaces to use for indentation
"latedef" : false, // true: Require variables/functions to be defined before being used
"newcap" : false, // true: Require capitalization of all constructor functions e.g. `new F()`
"noarg" : true, // true: Prohibit use of `arguments.caller` and `arguments.callee`
"noempty" : true, // true: Prohibit use of empty blocks
"nonew" : false, // true: Prohibit use of constructors for side-effects (without assignment)
"plusplus" : false, // true: Prohibit use of `++` & `--`
"quotmark" : false, // Quotation mark consistency:
// false : do nothing (default)
// true : ensure whatever is used is consistent
// "single" : require single quotes
// "double" : require double quotes
"undef" : true, // true: Require all non-global variables to be declared (prevents global leaks)
"unused" : true, // true: Require all defined variables be used
"strict" : true, // true: Requires all functions run in ES5 Strict Mode
"trailing" : false, // true: Prohibit trailing whitespaces
"maxparams" : false, // {int} Max number of formal params allowed per function
"maxdepth" : false, // {int} Max depth of nested blocks (within functions)
"maxstatements" : false, // {int} Max number statements per function
"maxcomplexity" : false, // {int} Max cyclomatic complexity per function
"maxlen" : false, // {int} Max number of characters per line
// Relaxing
"asi" : false, // true: Tolerate Automatic Semicolon Insertion (no semicolons)
"boss" : false, // true: Tolerate assignments where comparisons would be expected
"debug" : false, // true: Allow debugger statements e.g. browser breakpoints.
"eqnull" : false, // true: Tolerate use of `== null`
"es5" : false, // true: Allow ES5 syntax (ex: getters and setters)
"esnext" : false, // true: Allow ES.next (ES6) syntax (ex: `const`)
"moz" : false, // true: Allow Mozilla specific syntax (extends and overrides esnext features)
// (ex: `for each`, multiple try/catch, function expression…)
"evil" : false, // true: Tolerate use of `eval` and `new Function()`
"expr" : false, // true: Tolerate `ExpressionStatement` as Programs
"funcscope" : false, // true: Tolerate defining variables inside control statements"
"globalstrict" : true, // true: Allow global "use strict" (also enables 'strict')
"iterator" : false, // true: Tolerate using the `__iterator__` property
"lastsemic" : false, // true: Tolerate omitting a semicolon for the last statement of a 1-line block
"laxbreak" : false, // true: Tolerate possibly unsafe line breakings
"laxcomma" : false, // true: Tolerate comma-first style coding
"loopfunc" : false, // true: Tolerate functions being defined in loops
"multistr" : false, // true: Tolerate multi-line strings
"proto" : false, // true: Tolerate using the `__proto__` property
"scripturl" : false, // true: Tolerate script-targeted URLs
"smarttabs" : false, // true: Tolerate mixed tabs/spaces when used for alignment
"shadow" : false, // true: Allows re-define variables later in code e.g. `var x=1; x=2;`
"sub" : false, // true: Tolerate using `[]` notation when it can still be expressed in dot notation
"supernew" : false, // true: Tolerate `new function () { ... };` and `new Object;`
"validthis" : false, // true: Tolerate using this in a non-constructor function
"globals": {
"app": true,
"io": true,
"socket": true,
"ajaxify": true,
"config": true,
"utils": true,
"overrides": true,
"componentHandler": true,
"templates": true,
"Visibility": true,
"Tinycon": true,
"require": true,
"define": true,
"ace": true,
"Sortable": true,
"Slideout": true,
"NProgress": true
},
"jquery": true,
"browser": true
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 215 KiB

@ -3,5 +3,9 @@
"alert.confirm-restart": "هل تريد بالتأكيد إعادة تشغيل NodeBB؟",
"acp-title": "لوحة تحكم إدارة NodeBB | %1",
"settings-header-contents": "محتويات"
"settings-header-contents": "محتويات",
"changes-saved": "Changes Saved",
"changes-saved-message": "Your changes to the NodeBB configuration have been saved.",
"changes-not-saved": "Changes Not Saved",
"changes-not-saved-message": "NodeBB encountered a problem saving your changes. (%1)"
}

@ -10,6 +10,7 @@
"upload-files": "Upload Files",
"signature": "Signature",
"ban": "Ban",
"mute": "Mute",
"invite": "Invite",
"search-content": "Search Content",
"search-users": "Search Users",

@ -18,7 +18,8 @@
"download-csv": "Download CSV",
"manage-groups": "Manage Groups",
"add-group": "Add Group",
"invite": "Invite",
"create": "Create User",
"invite": "Invite by Email",
"new": "New User",
"filter-by": "Filter by",
"pills.unvalidated": "Not Validated",
@ -62,7 +63,7 @@
"create.password": "Password",
"create.password-confirm": "Confirm Password",
"temp-ban.length": "Ban Length",
"temp-ban.length": "Length",
"temp-ban.reason": "Reason <span class=\"text-muted\">(Optional)</span>",
"temp-ban.hours": "Hours",
"temp-ban.days": "Days",

@ -15,6 +15,10 @@
"headers.acac": "Access-Control-Allow-Credentials",
"headers.acam": "Access-Control-Allow-Methods",
"headers.acah": "Access-Control-Allow-Headers",
"headers.coep": "Cross-Origin-Embedder-Policy",
"headers.coep-help": "When enabled (default), will set the header to <code>require-corp</code>",
"headers.coop": "Cross-Origin-Opener-Policy",
"headers.corp": "Cross-Origin-Resource-Policy",
"hsts": "Strict Transport Security",
"hsts.enabled": "Enabled HSTS (recommended)",
"hsts.maxAge": "HSTS Max Age",

@ -38,9 +38,11 @@
"subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. <code>0</code> for midnight, <code>17</code> for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.<br /> The approximate server time is: <span id=\"serverTime\"></span><br /> The next daily digest is scheduled to be sent <span id=\"nextDigestTime\"></span>",
"notifications.remove-images": "Remove images from email notifications",
"require-email-address": "Require new users to specify an email address",
"require-email-address-warning": "By default, users can opt-out of entering an email address. Enabling this option means they have to enter an email address in order to proceed with registration. <strong>It does not ensure user will enter a real email address, nor even an address they own.</strong>",
"require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means they have to enter an email address in order to proceed with registration. <strong>It does not ensure user will enter a real email address, nor even an address they own.</strong>",
"send-validation-email": "Send validation emails when an email is added or changed",
"include-unverified-emails": "Send emails to recipients who have not explicitly confirmed their emails",
"include-unverified-warning": "By default, users with emails associated with their account have already been verified, but there are situations where this is not the case (e.g. SSO logins, grandfathered users, etc). <strong>Enable this setting at your own risk</strong> &ndash; sending emails to unverified addresses may be a violation of regional anti-spam laws.",
"prompt": "Prompt users to enter or confirm their emails",
"prompt-help": "If a user does not have an email set, or their email is not confirmed, a warning will be shown on screen."
"prompt-help": "If a user does not have an email set, or their email is not confirmed, a warning will be shown on screen.",
"sendEmailToBanned": "Send emails to users even if they have been banned"
}

@ -4,9 +4,13 @@
"disable-down-voting": "Disable Down Voting",
"votes-are-public": "All Votes Are Public",
"thresholds": "Activity Thresholds",
"min-rep-upvote": "Minimum reputation to upvote posts",
"upvotes-per-day": "Upvotes per day (set to 0 for unlimited upvotes)",
"upvotes-per-user-per-day": "Upvotes per user per day (set to 0 for unlimited upvotes)",
"min-rep-downvote": "Minimum reputation to downvote posts",
"downvotes-per-day": "Downvotes per day (set to 0 for unlimited downvotes)",
"downvotes-per-user-per-day": "Downvotes per user per day (set to 0 for unlimited downvotes)",
"min-rep-chat": "Minimum reputation to send chat messages",
"min-rep-flag": "Minimum reputation to flag posts",
"min-rep-website": "Minimum reputation to add \"Website\" to user profile",
"min-rep-aboutme": "Minimum reputation to add \"About me\" to user profile",
@ -18,5 +22,6 @@
"flags.limit-per-target": "Maximum number of times something can be flagged",
"flags.limit-per-target-placeholder": "Default: 0",
"flags.limit-per-target-help": "When a post or user is flagged multiple times, each additional flag is considered a &quot;report&quot; and added to the original flag. Set this option to a number other than zero to limit the number of reports an item can receive.",
"flags.auto-flag-on-downvote-threshold": "Number of downvotes to auto flag posts (Set to 0 to disable, default: 0)",
"flags.auto-resolve-on-ban": "Automatically resolve all of a user's tickets when they are banned"
}

@ -1,8 +1,8 @@
{
"posts": "المشاركات",
"allow-files": "السماح للأعضاء بتحميل الملفات الإعتيادية",
"private": "جعل الملفات التي تم رفعها خاصة",
"strip-exif-data": "Strip EXIF Data",
"preserve-orphaned-uploads": "Keep uploaded files on disk after a post is purged",
"private-extensions": "File extensions to make private",
"private-uploads-extensions-help": "Enter comma-separated list of file extensions to make private here (e.g. <code>pdf,xls,doc</code>). An empty list means all files are private.",
"resize-image-width-threshold": "Resize images if they are wider than specified width",

@ -1,12 +1,10 @@
{
"authentication": "المصادقة",
"require-email-confirmation": "يطلب تأكيد البريد الإلكتروني",
"email-confirm-interval": "لا يمكن للمستخدم إعادة إرسال رسالة تأكيد البريد الالكتروني حتى مرور",
"email-confirm-email2": "دقائق",
"allow-login-with": "السماح بتسجيل الدخول باستخدام",
"allow-login-with.username-email": "اسم المستخدم أو البريد الالكتروني",
"allow-login-with.username": "اسم المستخدم فقط",
"allow-login-with.email": "البريد الالكتروني فقط",
"account-settings": "إعدادت الحساب",
"gdpr_enabled": "Enable GDPR consent collection",
"gdpr_enabled_help": "When enabled, all new registrants will be required to explicitly give consent for data collection and usage under the <a href=\"https://ec.europa.eu/info/priorities/justice-and-fundamental-rights/data-protection/2018-reform-eu-data-protection-rules/eu-data-protection-rules_en\">General Data Protection Regulation (GDPR)</a>. <strong>Note</strong>: Enabling GDPR does not force pre-existing users to provide consent. To do so, you will need to install the GDPR plugin.",

@ -48,6 +48,8 @@
"unsub.cta": "انقر هنا لتغيير تلك الإعدادات",
"unsubscribe": "unsubscribe",
"unsub.success": "You will no longer receive emails from the <strong>%1</strong> mailing list",
"unsub.failure.title": "Unable to unsubscribe",
"unsub.failure.message": "Unfortunately, we were not able to unsubscribe you from the mailing list, as there was an issue with the link. However, you can alter your email preferences by going to <a href=\"%2\">your user settings</a>.<br /><br />(error: <code>%1</code>)",
"banned.subject": "You have been banned from %1",
"banned.text1": "The user %1 has been banned from %2.",
"banned.text2": "This ban will last until %1.",

@ -1,6 +1,8 @@
{
"invalid-data": "بيانات غير صحيحة",
"invalid-json": "Invalid JSON",
"wrong-parameter-type": "A value of type %3 was expected for property `%1`, but %2 was received instead",
"required-parameters-missing": "Required parameters were missing from this API call: %1",
"not-logged-in": "لم تقم بتسجيل الدخول",
"account-locked": "تم حظر حسابك مؤقتًا.",
"search-requires-login": "البحث في المنتدى يتطلب حساب - الرجاء تسجيل الدخول أو التسجيل",
@ -9,6 +11,7 @@
"invalid-tid": "موضوع غير متواجد",
"invalid-pid": "رد غير موجود",
"invalid-uid": "مستخدم غير موجود",
"invalid-mid": "Invalid Chat Message ID",
"invalid-date": "A valid date must be provided",
"invalid-username": "اسم المستخدم غير مقبول",
"invalid-email": "البريد الاكتروني غير مقبول",
@ -104,6 +107,9 @@
"already-bookmarked": "You have already bookmarked this post",
"already-unbookmarked": "You have already unbookmarked this post",
"cant-ban-other-admins": "لايمكن حظر مدبر نظام آخر.",
"cant-mute-other-admins": "You can't mute other admins!",
"user-muted-for-hours": "You have been muted, you will be able to post in %1 hour(s)",
"user-muted-for-minutes": "You have been muted, you will be able to post in %1 minute(s)",
"cant-make-banned-users-admin": "You can't make banned users admin.",
"cant-remove-last-admin": "رجاءًا ، أضف مدير أخر قبل حذف صلاحيات الإدارة من حسابك.",
"account-deletion-disabled": "Account deletion is disabled",
@ -142,7 +148,6 @@
"invalid-chat-message": "الرسالة غير صالحة.",
"chat-message-too-long": "Chat messages can not be longer than %1 characters.",
"cant-edit-chat-message": "غير مصرح لك بتعديل الرسالة.",
"cant-remove-last-user": "لأيمكنك إزالت اخر مستخدم.",
"cant-delete-chat-message": "غير مصرح لك بحذف الرسالة.",
"chat-edit-duration-expired": "You are only allowed to edit chat messages for %1 second(s) after posting",
"chat-delete-duration-expired": "You are only allowed to delete chat messages for %1 second(s) after posting",
@ -152,19 +157,23 @@
"already-voting-for-this-post": "لقد شاركت بالتصويت ، ألا تذكر؟",
"reputation-system-disabled": "نظام السمعة معطل",
"downvoting-disabled": "التصويتات السلبية معطلة",
"not-enough-reputation-to-downvote": "ليس لديك سمعة تكفي لإضافة صوت سلبي لهذا الموضوع",
"not-enough-reputation-to-flag": "ليس لديك سمعة تكفي للإشعار بموضوع مخل",
"not-enough-reputation-min-rep-website": "You do not have enough reputation to add a website",
"not-enough-reputation-min-rep-aboutme": "You do not have enough reputation to add an about me",
"not-enough-reputation-min-rep-signature": "You do not have enough reputation to add a signature",
"not-enough-reputation-min-rep-profile-picture": "You do not have enough reputation to add a profile picture",
"not-enough-reputation-min-rep-cover-picture": "You do not have enough reputation to add a cover picture",
"not-enough-reputation-to-chat": "You need %1 reputation to chat",
"not-enough-reputation-to-upvote": "You need %1 reputation to upvote",
"not-enough-reputation-to-downvote": "You need %1 reputation to downvote",
"not-enough-reputation-to-flag": "You need %1 reputation to flag this post",
"not-enough-reputation-min-rep-website": "You need %1 reputation to add a website",
"not-enough-reputation-min-rep-aboutme": "You need %1 reputation to add an about me",
"not-enough-reputation-min-rep-signature": "You need %1 reputation to add a signature",
"not-enough-reputation-min-rep-profile-picture": "You need %1 reputation to add a profile picture",
"not-enough-reputation-min-rep-cover-picture": "You need %1 reputation to add a cover picture",
"post-already-flagged": "You have already flagged this post",
"user-already-flagged": "You have already flagged this user",
"post-flagged-too-many-times": "This post has been flagged by others already",
"user-flagged-too-many-times": "This user has been flagged by others already",
"cant-flag-privileged": "You are not allowed to flag the profiles or content of privileged users (moderators/global moderators/admins)",
"self-vote": "You cannot vote on your own post",
"too-many-upvotes-today": "You can only upvote %1 times a day",
"too-many-upvotes-today-user": "You can only upvote a user %1 times a day",
"too-many-downvotes-today": "You can only downvote %1 times a day",
"too-many-downvotes-today-user": "You can only downvote a user %1 times a day",
"reload-failed": "المنتدى واجه مشكلة أثناء إعادة التحميل: \"%1\". سيواصل المنتدى خدمة العملاء السابقين لكن يجب عليك إلغاء أي تغيير قمت به قبل إعادة التحميل.",

@ -81,5 +81,6 @@
"bulk-actions": "Bulk Actions",
"bulk-resolve": "Resolve Flag(s)",
"bulk-success": "%1 flags updated",
"flagged-timeago-readable": "Flagged <span class=\"timeago\" title=\"%1\"></span> (%2)"
"flagged-timeago-readable": "Flagged <span class=\"timeago\" title=\"%1\"></span> (%2)",
"auto-flagged": "[Auto Flagged] Received %1 downvotes."
}

@ -23,7 +23,7 @@
"close": "أغلق",
"pagination": "الصفحات",
"pagination.out_of": "%1 من %2",
"pagination.enter_index": "أدخل الرقم التسلسلي",
"pagination.enter_index": "Go to post index",
"header.admin": "مدير النظام",
"header.categories": "الأقسام",
"header.recent": "حديث",
@ -56,6 +56,7 @@
"posts": "المشاركات",
"x-posts": "%1 posts",
"best": "الأفضل",
"controversial": "Controversial",
"votes": "Votes",
"x-votes": "%1 votes",
"voters": "Voters",

@ -1,7 +1,6 @@
{
"username-email": "اسم المستخدم / البريد الإلكتروني",
"username": "اسم المستخدم",
"email": "البريد الإلكتروني",
"remember_me": "تذكرني؟",
"forgot_password": "نسيت كلمة المرور؟",
"alternative_logins": "تسجيلات الدخول البديلة",

@ -1,6 +1,6 @@
{
"chat.chatting_with": "Chat with",
"chat.placeholder": "أكتب رسالة دردشة هنا، اضغط ENTER للإرسال",
"chat.placeholder": "Type chat message here, drag & drop images, press enter to send",
"chat.scroll-up-alert": "You are looking at older messages, click here to go to most recent message.",
"chat.send": "أرسل",
"chat.no_active": "لا يوجد لديك دردشات نشطة.",
@ -68,6 +68,8 @@
"bootbox.ok": "OK",
"bootbox.cancel": "إلغاء",
"bootbox.confirm": "تأكيد",
"bootbox.submit": "Submit",
"bootbox.send": "Send",
"cover.dragging_title": "Cover Photo Positioning",
"cover.dragging_message": "Drag the cover photo to the desired position and click \"Save\"",
"cover.saved": "Cover photo image and position saved",

@ -50,6 +50,7 @@
"users-csv-exported": "Users csv exported, click to download",
"post-queue-accepted": "Your queued post has been accepted. Click here to see your post.",
"post-queue-rejected": "Your queued post has been rejected.",
"post-queue-notify": "Queued post received a notification:<br/>\"%1\"",
"email-confirmed": "تم التحقق من عنوان البريد الإلكتروني",
"email-confirmed-message": "شكرًا على إثبات صحة عنوان بريدك الإلكتروني. صار حسابك مفعلًا بالكامل.",
"email-confirm-error-message": "حدث خطأ أثناء التحقق من عنوان بريدك الإلكتروني. ربما رمز التفعيل خاطئ أو انتهت صلاحيته.",

@ -54,6 +54,7 @@
"account/upvoted": "Posts upvoted by %1",
"account/downvoted": "Posts downvoted by %1",
"account/best": "Best posts made by %1",
"account/controversial": "Controversial posts made by %1",
"account/blocks": "Blocked users for %1",
"account/uploads": "Uploads by %1",
"account/sessions": "Login Sessions",

@ -14,5 +14,9 @@
"reply": "Reply",
"topic": "Topic",
"accept": "Accept",
"reject": "Reject"
"reject": "Reject",
"remove": "Remove",
"notify": "Notify",
"notify-user": "Notify User",
"confirm-reject": "Do you want to reject this post?"
}

@ -48,6 +48,7 @@
"moved-from-by": "Moved from %1 by",
"queued-by": "Post queued for approval &rarr;",
"backlink": "Referenced by",
"forked-by": "Forked by",
"bookmark_instructions": "اضغط هنا للعودة لأخر مشاركة مقروءة في الموضوع",
"flag-post": "Flag this post",
"flag-user": "Flag this user",
@ -180,5 +181,7 @@
"timeago_earlier": "%1 earlier",
"first-post": "First post",
"last-post": "Last post",
"go-to-my-next-post": "Go to my next post",
"no-more-next-post": "You don't have more posts in this topic",
"post-quick-reply": "Post quick reply"
}

@ -12,6 +12,8 @@
"ban_account": "حظر الحساب",
"ban_account_confirm": "هل تريد حقاً حظر هاذا العضو؟",
"unban_account": "إزالة حظر الحساب",
"mute_account": "Mute Account",
"unmute_account": "Unmute Account",
"delete_account": "حذف الحساب",
"delete_account_as_admin": "Delete <strong>Account</strong>",
"delete_content": "Delete Account <strong>Content</strong>",
@ -105,7 +107,7 @@
"has_no_ignored_topics": "هذا المستخدم لم يقم بتجاهل اية مواضيع حتى الآن.",
"has_no_upvoted_posts": "هذا المستخدم لم يقم بالتصويت للأعلى لأي مشاركة حتى الآن.",
"has_no_downvoted_posts": "هذا المستخدم لم يقم بالتصويت للأسفل لأي مشاركة حتى الآن.",
"has_no_voted_posts": "هذا المستخدم لا يمتلك اية مشاركات تم التصويت عليها",
"has_no_controversial_posts": "This user does not have any downvoted posts yet.",
"has_no_blocks": "You have blocked no users.",
"email_hidden": "البريد الإلكتروني مخفي",
"hidden": "مخفي",
@ -154,6 +156,7 @@
"info.banned-permanently": "محظور بشكل دائم",
"info.banned-reason-label": "سبب",
"info.banned-no-reason": "لم يتم إعطاء سبب.",
"info.muted-no-reason": "No reason given.",
"info.username-history": "سجل اسم المستخدم",
"info.email-history": "سجل البريد الإلكتروني",
"info.moderation-note": "ملاحظة الإشراف",
@ -184,6 +187,7 @@
"consent.export_posts": "Export Posts (.csv)",
"consent.export-posts-success": "Exporting posts, you will get a notification when it is complete.",
"emailUpdate.intro": "Please enter your email address below. This forum uses your email address for scheduled digest and notifications, as well as for account recovery in the event of a lost password.",
"emailUpdate.optional": "<strong>This field is optional</strong>. You are not obligated to provide your email address, but without a validated email, you will not be able to recover your account.",
"emailUpdate.optional": "<strong>This field is optional</strong>. You are not obligated to provide your email address, but without a validated email you will not be able to recover your account or login with your email.",
"emailUpdate.required": "<strong>This field is required</strong>.",
"emailUpdate.change-instructions": "A confirmation email will be sent to the entered email address with a unique link. Accessing that link will confirm your ownership of the email address and it will become active on your account. At any time, you are able to update your email on file from within your account page."
}

@ -5,6 +5,7 @@
"most_flags": "Most Flags",
"search": "بحث",
"enter_username": "أدخل اسم مستخدم للبحث",
"search-user-for-chat": "ابحث عن مستخدم لبدء محادثة ",
"load_more": "حمل المزيد",
"users-found-search-took": "تم إيجاد %1 مستخدمـ(ين)! استغرق البحث %2 ثانية.",
"filter-by": "Filter By",

@ -3,5 +3,9 @@
"alert.confirm-restart": "Наистина ли искате да рестартирате NodeBB?",
"acp-title": "%1 | Контролен панел за администратори на NodeBB",
"settings-header-contents": "Съдържание"
"settings-header-contents": "Съдържание",
"changes-saved": "Промените са запазени",
"changes-saved-message": "Промените Ви в настройките на NodeBB бяха запазени.",
"changes-not-saved": "Промените не са запазени",
"changes-not-saved-message": "Възникна проблем при запазването на промените Ви по NodeBB. (%1)"
}

@ -10,6 +10,7 @@
"upload-files": "Качване на файлове",
"signature": "Подпис",
"ban": "Блокиране",
"mute": "Заглушаване",
"invite": "Пращане на покана",
"search-content": "Търсене на съдържание",
"search-users": "Търсене на потребители",

@ -18,7 +18,8 @@
"download-csv": "Сваляне във формат „CSV“",
"manage-groups": "Управление на групите",
"add-group": "Добавяне на група",
"invite": "Покана",
"create": "Създаване на потребител",
"invite": "Поканване по е-поща",
"new": "Нов потребител",
"filter-by": "Филтриране по",
"pills.unvalidated": "Няма потвърдена е-поща",
@ -62,7 +63,7 @@
"create.password": "Парола",
"create.password-confirm": "Потвърдете паролата",
"temp-ban.length": "Продължителност на блокирането",
"temp-ban.length": "Продължителност",
"temp-ban.reason": "Причина <span class=\"text-muted\">(незадължително)</span>",
"temp-ban.hours": "Часове",
"temp-ban.days": "Дни",

@ -8,13 +8,17 @@
"headers.csp-frame-ancestors": "Задайте заглавката „Content-Security-Policy frame-ancestors“ за да поставите NodeBB „iFrame“",
"headers.csp-frame-ancestors-help": "„none“ (нищо), „self“ (себе си по подразбиране) или списък от позволени адреси.",
"headers.powered-by": "Персонализиране на заглавната част „Захранван от“, която се изпраща от NodeBB",
"headers.acao": "Произход за разрешаване на управлението на достъпа",
"headers.acao-regex": "Регулярен израз за произхода за разрешаване на управлението на достъпа",
"headers.acao": "Access-Control-Allow-Origin",
"headers.acao-regex": "Регулярен израз за „Access-Control-Allow-Origin“",
"headers.acao-help": "За да забраните достъпа до всички уеб сайтове, оставете празно",
"headers.acao-regex-help": "Въведете регулярен израз за съвпадение с динамичните произходи. За да забраните достъпа на всички уеб сайтове, оставете това празно.",
"headers.acac": "Удостоверителни данни за разрешаване на управлението на достъпа",
"headers.acac": "Access-Control-Allow-Credentials",
"headers.acam": "Методи за разрешаване на управлението на достъпа",
"headers.acah": "Заглавки за разрешаване на управлението на достъпа",
"headers.acah": "Access-Control-Allow-Headers",
"headers.coep": "Cross-Origin-Embedder-Policy",
"headers.coep-help": "Когато е включено (по подразбиране), стойността на заглавката ще бъде <code>require-corp</code>",
"headers.coop": "Cross-Origin-Opener-Policy",
"headers.corp": "Cross-Origin-Resource-Policy",
"hsts": "Стриктна транспортна сигурност",
"hsts.enabled": "Включване на HSTS (препоръчително)",
"hsts.maxAge": "Максимална възраст на HSTS",

@ -38,9 +38,11 @@
"subscriptions.hour-help": "Моля, въведете число, представляващо часа, в който да се разпращат е-писма с подготвеното резюме (напр.. <code>0</code> за полунощ, <code>17</code> за 5 следобед). Имайте предвид, че този час е според часовата зона на сървъра и може да не съвпада с часовника на системата Ви.<br /> Приблизителното време на сървъра е: <span id=\"serverTime\"></span><br /> Изпращането на следващия ежедневен бюлетин е планирано за <span id=\"nextDigestTime\"></span>",
"notifications.remove-images": "Премахване на изображенията от известията по е-поща",
"require-email-address": "Новите потребители задължително трябва да предоставят е-поща",
"require-email-address-warning": "По подразбиране потребителите могат да не въвеждат адрес на е-поща. Ако включите това, те задължително ще трябва да предоставят е-поща, за да могат да се регистрират. <strong>Това не означава, че потребителят ще въведе съществуваща е-поща, нито че тя ще е негова.</strong>",
"require-email-address-warning": "По подразбиране потребителите могат да не въвеждат адрес на е-поща, като оставят полето празно. Ако включите това, те задължително ще трябва да предоставят е-поща, за да могат да се регистрират. <strong>Това не означава, че потребителят ще въведе съществуваща е-поща, нито че тя ще е негова.</strong>",
"send-validation-email": "Изпращане на е-писма за потвърждение, когато бъде добавена или променена е-поща",
"include-unverified-emails": "Изпращане на е-писма към получатели, които не са потвърдили изрично е-пощата си",
"include-unverified-warning": "За потребителите, които имат свързана е-поща с регистрацията си, тя се смята за потвърдена. Но има ситуации, в които това не е така (например при ползване на регистрация от друга система, но и в други случаи), <strong>Включете тази настройка на собствен риск</strong> &ndash; изпращането на е-писма към непотвърдени адреси може да нарушава определени местни закони против нежеланата поща.",
"prompt": "Подсещане на потребителите да въведат или потвърдят е-пощата си",
"prompt-help": "Ако потребител няма зададена е-поща, или ако тя не е потвърдена, на екрана му ще се покаже предупредително съобщение."
"prompt-help": "Ако потребител няма зададена е-поща, или ако тя не е потвърдена, на екрана му ще се покаже предупредително съобщение.",
"sendEmailToBanned": "Изпращане на е-писма дори до блокираните потребители"
}

@ -4,9 +4,13 @@
"disable-down-voting": "Забрана на отрицателното гласуване",
"votes-are-public": "Всички гласувания са публични",
"thresholds": "Ограничения на дейността",
"min-rep-upvote": "Минимална репутация, необходима за положително гласуване за публикации",
"upvotes-per-day": "Положителни гласувания за ден (задайте 0 за неограничен брой)",
"upvotes-per-user-per-day": "Положителни гласувания за потребител за ден (задайте 0 за неограничен брой)",
"min-rep-downvote": "Минимална репутация, необходима за отрицателно гласуване за публикации",
"downvotes-per-day": "Отрицателни гласувания за ден (задайте 0 за неограничен брой)",
"downvotes-per-user-per-day": "Отрицателни гласувания за потребител за ден (задайте 0 за неограничен брой)",
"min-rep-chat": "Минимална репутация, необходима за изпращане на съобщения в разговори",
"min-rep-flag": "Минимална репутация, необходима за докладване на публикации",
"min-rep-website": "Минимална репутация, необходима за добавяне на полето „Уебсайт“ към профила на потребителя",
"min-rep-aboutme": "Минимална репутация, необходима за добавяне на полето „За мен“ към профила на потребителя",
@ -18,5 +22,6 @@
"flags.limit-per-target": "Максимален брой докладвания на едно и също нещо",
"flags.limit-per-target-placeholder": "По подразбиране: 0",
"flags.limit-per-target-help": "Когато публикация или потребител бъде докладван няколко пъти, това се добавя към един общ доклад. Задайте на тази настройка стойност по-голяма от нула, за да ограничите броя на докладванията, които могат да бъдат натрупани към една публикация или потребител.",
"flags.auto-flag-on-downvote-threshold": "Брой отрицателни гласове, при които публикациите да бъдат докладвани автоматично (0 = изключено, по подразбиране: 0)",
"flags.auto-resolve-on-ban": "Автоматично премахване на всички доклади за потребител, когато той бъде блокиран"
}

@ -1,8 +1,8 @@
{
"posts": "Публикации",
"allow-files": "Позволяване на потребителите да качват обикновени файлове",
"private": "Качените файлове да бъдат частни",
"strip-exif-data": "Премахване на данните EXIF",
"preserve-orphaned-uploads": "Запазване на качените файлове на диска дори след изтриването на публикацията",
"private-extensions": "Файлови разширения, които да бъдат частни",
"private-uploads-extensions-help": "Въведете списък от файлови разширения, разделени със запетаи, които искате да бъдат частни (например <code>pdf,xls,doc</code>). Ако оставите това поле празно, всички файлове ще бъдат частни.",
"resize-image-width-threshold": "Преоразмеряване на изображенията, ако са по-широки от определената ширина",

@ -1,12 +1,10 @@
{
"authentication": "Удостоверяване",
"require-email-confirmation": "Изискване на потвърждение на е-пощата",
"email-confirm-interval": "Потребителят не може да изпраща повторно е-писмото за потвърждение, преди да са минали",
"email-confirm-email2": "минути",
"allow-login-with": "Позволяване на вписването чрез",
"allow-login-with.username-email": "Потребителско име или е-поща",
"allow-login-with.username": "Само потребителско име",
"allow-login-with.email": "Само е-поща",
"account-settings": "Настройки на акаунта",
"gdpr_enabled": "Включване на искането за съгласие с ОРЗД",
"gdpr_enabled_help": "Ако това е включено, всички новорегистрирани потребители ще бъдат задължени изрично да дадат съгласието си за събирането на данни и статистики за потреблението според <a href=\"https://ec.europa.eu/info/priorities/justice-and-fundamental-rights/data-protection/2018-reform-eu-data-protection-rules/eu-data-protection-rules_en\">Общия регламент относно защитата на данните (ОРЗД)</a>. <strong>Забележка</strong>: Включването на ОРЗД не задължава съществуващите потребители да дадат съгласието си. Ако искате това, ще трябва да инсталирате добавката за ОРЗД (GDPR).",

@ -48,6 +48,8 @@
"unsub.cta": "Натиснете тук, за да промените тези настройки",
"unsubscribe": "отписване",
"unsub.success": "Повече няма да получавате е-писма от пощенския списък на <strong>%1</strong>",
"unsub.failure.title": "Отписването не може да се извърши",
"unsub.failure.message": "За съжаление не успяхме да Ви отпишем от пощенския списък, поради проблем с връзката. Можете, обаче, да промените предпочитанията си за е-писмата в <a href=\"%2\">потребителските си настройки</a>.<br /><br />(грешка: <code>%1</code>)",
"banned.subject": "Вие бяхте блокиран(а) от %1",
"banned.text1": "Потребителят %1 беше блокиран от %2.",
"banned.text2": "Това блокиране ще е в сила до %1.",

@ -1,6 +1,8 @@
{
"invalid-data": "Грешни данни",
"invalid-json": "Неправилен JSON",
"wrong-parameter-type": "За свойството `%1` се очакваше стойност от тип %3, но вместо това беше получено %2",
"required-parameters-missing": "Липсват задължителни параметри от това извикване към ППИ: %1",
"not-logged-in": "Изглежда не сте се вписали в системата.",
"account-locked": "Вашият акаунт беше заключен временно",
"search-requires-login": "Търсенето изисква регистриран акаунт! Моля, впишете се или се регистрирайте!",
@ -9,6 +11,7 @@
"invalid-tid": "Грешен идентификатор на тема",
"invalid-pid": "Грешен идентификатор на публикация",
"invalid-uid": "Грешен идентификатор на потребител",
"invalid-mid": "Грешен идентификатор на съобщение в разговор",
"invalid-date": "Трябва да бъде посочена правилна дата",
"invalid-username": "Грешно потребителско име",
"invalid-email": "Грешна е-поща",
@ -104,6 +107,9 @@
"already-bookmarked": "Вече имате отметка към тази публикация",
"already-unbookmarked": "Вече сте премахнали отметката си от тази публикация",
"cant-ban-other-admins": "Не можете да блокирате другите администратори!",
"cant-mute-other-admins": "Не можете да заглушавате другите администратори!",
"user-muted-for-hours": "Вие бяхте заглушен(а). Ще можете да пускате публикации отново след %1 час(а)",
"user-muted-for-minutes": "Вие бяхте заглушен(а). Ще можете да пускате публикации отново след %1 минута/и",
"cant-make-banned-users-admin": "Не можете да давате администраторски права на блокирани потребители.",
"cant-remove-last-admin": "Вие сте единственият администратор. Добавете друг потребител като администратор, преди да премахнете себе си като администратор",
"account-deletion-disabled": "Изтриването на акаунт е забранено",
@ -142,7 +148,6 @@
"invalid-chat-message": "Неправилно съобщение",
"chat-message-too-long": "Съобщенията в разговор не може да бъдат по-дълги от %1 знака.",
"cant-edit-chat-message": "Нямате право да редактирате това съобщение",
"cant-remove-last-user": "Не можете да премахнете последния потребител",
"cant-delete-chat-message": "Нямате право да изтриете това съобщение",
"chat-edit-duration-expired": "Можете да редактирате съобщенията си в разговорите до %1 секунда/и, след като ги пуснете",
"chat-delete-duration-expired": "Можете да изтривате съобщенията си в разговорите до %1 секунда/и след пускането им",
@ -152,19 +157,23 @@
"already-voting-for-this-post": "Вече сте дали глас за тази публикация.",
"reputation-system-disabled": "Системата за репутация е изключена.",
"downvoting-disabled": "Отрицателното гласуване е изключено",
"not-enough-reputation-to-downvote": "Нямате достатъчно репутация, за да гласувате отрицателно за тази публикация",
"not-enough-reputation-to-flag": "Нямате достатъчно репутация, за да докладвате тази публикация",
"not-enough-reputation-min-rep-website": "Нямате достатъчно репутация, за да добавите уеб сайт",
"not-enough-reputation-min-rep-aboutme": "Нямате достатъчно репутация, за да добавите информация за себе си",
"not-enough-reputation-min-rep-signature": "Нямате достатъчно репутация, за да добавите подпис",
"not-enough-reputation-min-rep-profile-picture": "Нямате достатъчно репутация, за да добавите снимка на профила си",
"not-enough-reputation-min-rep-cover-picture": "Нямате достатъчно репутация, за да добавите снимка на корицата",
"not-enough-reputation-to-chat": "Репутацията Ви трябва да бъде поне %1, за да участвате в разговори",
"not-enough-reputation-to-upvote": "Репутацията Ви трябва да бъде поне %1, за да гласувате положително",
"not-enough-reputation-to-downvote": "Репутацията Ви трябва да бъде поне %1, за да гласувате отрицателно",
"not-enough-reputation-to-flag": "Репутацията Ви трябва да бъде поне %1, за да докладвате тази публикация",
"not-enough-reputation-min-rep-website": "Репутацията Ви трябва да бъде поне %1, за да добавите уеб сайт",
"not-enough-reputation-min-rep-aboutme": "Репутацията Ви трябва да бъде поне %1, за да добавите информация за себе си",
"not-enough-reputation-min-rep-signature": "Репутацията Ви трябва да бъде поне %1, за да добавите подпис",
"not-enough-reputation-min-rep-profile-picture": "Репутацията Ви трябва да бъде поне %1, за да добавите снимка на профила си",
"not-enough-reputation-min-rep-cover-picture": "Репутацията Ви трябва да бъде поне %1, за да добавите снимка на корицата",
"post-already-flagged": "Вече сте докладвали тази публикация",
"user-already-flagged": "Вече сте докладвали този потребител",
"post-flagged-too-many-times": "Тази публикация вече е докладвана от други хора",
"user-flagged-too-many-times": "Този потребител вече е докладван от други хора",
"cant-flag-privileged": "Не можете да докладвате профилите или съдържанието от потребители с по-високи правомощия (модератори, глобални модератори, администратори)",
"self-vote": "Не можете да гласувате за собствената си публикация",
"too-many-upvotes-today": "Можете да гласувате положително не повече от %1 пъти на ден",
"too-many-upvotes-today-user": "Можете да гласувате положително за потребител не повече от %1 пъти на ден",
"too-many-downvotes-today": "Можете да гласувате отрицателно не повече от %1 пъти на ден",
"too-many-downvotes-today-user": "Можете да гласувате отрицателно за потребител не повече от %1 пъти на ден",
"reload-failed": "NodeBB срещна проблем при презареждането: „%1“. NodeBB ще продължи да поддържа съществуващите клиентски ресурси, но Вие трябва да отмените последните си действия преди презареждането.",

@ -81,5 +81,6 @@
"bulk-actions": "Групови действия",
"bulk-resolve": "Разрешаване на доклад(и)",
"bulk-success": "%1 доклада са обновени",
"flagged-timeago-readable": "Докладвано <span class=\"timeago\" title=\"%1\"></span> (%2)"
"flagged-timeago-readable": "Докладвано <span class=\"timeago\" title=\"%1\"></span> (%2)",
"auto-flagged": "[Авт. докладвано] Получени %1 отрицателни гласа."
}

@ -23,7 +23,7 @@
"close": "Затваряне",
"pagination": "Странициране",
"pagination.out_of": "%1 от %2",
"pagination.enter_index": "Въведете номер",
"pagination.enter_index": "Към публикация номер",
"header.admin": "Администратор",
"header.categories": "Категории",
"header.recent": "Скорошни",
@ -56,6 +56,7 @@
"posts": "Публ.",
"x-posts": "%1 публикации",
"best": "Най-добри",
"controversial": "Противоречиви",
"votes": "Гласове",
"x-votes": "%1 гласа",
"voters": "Гласували",

@ -1,7 +1,6 @@
{
"username-email": "Потребителско име / е-поща",
"username": "Потребителско име",
"email": "Е-поща",
"remember_me": "Запомнете ме?",
"forgot_password": "Забравена парола?",
"alternative_logins": "Други начини за вписване",

@ -1,6 +1,6 @@
{
"chat.chatting_with": "Разговор с",
"chat.placeholder": "Въведете съобщението тук и натиснете Ентер за изпращане",
"chat.placeholder": "Въведете съобщение тук или пуснете снимки и натиснете Ентер за изпращане",
"chat.scroll-up-alert": "В момента разглеждате по-стари съобщения. Щракнете тук, за да се прехвърлите към най-новото съобщение.",
"chat.send": "Изпращане",
"chat.no_active": "Нямате текущи разговори.",
@ -68,6 +68,8 @@
"bootbox.ok": "Добре",
"bootbox.cancel": "Отказ",
"bootbox.confirm": "Потвърждаване",
"bootbox.submit": "Публикуване",
"bootbox.send": "Изпращане",
"cover.dragging_title": "Наместване на снимката",
"cover.dragging_message": "Преместете снимката на желаното положение и натиснете „Запазване“",
"cover.saved": "Снимката и мястото ѝ бяха запазени",

@ -50,6 +50,7 @@
"users-csv-exported": "Потребителите са изнесени във формат „csv“, щракнете за сваляне",
"post-queue-accepted": "Вашата публикация, която чакаше в опашката, беше приета. Натиснете тук, за да я видите.",
"post-queue-rejected": "Вашата публикация, която чакаше в опашката, беше отхвърлена.",
"post-queue-notify": "Публикация, чакаща в опашката, получи известие:<br/>„%1“",
"email-confirmed": "Е-пощата беше потвърдена",
"email-confirmed-message": "Благодарим Ви, че потвърдихте е-пощата си. Акаунтът Ви е вече напълно активиран.",
"email-confirm-error-message": "Възникна проблем при потвърждаването на е-пощата Ви. Може кодът да е грешен или давността му да е изтекла.",

@ -54,6 +54,7 @@
"account/upvoted": "Публикации, получили положителен глас от %1",
"account/downvoted": "Публикации, получили отрицателен глас от %1",
"account/best": "Най-добрите публикации от %1",
"account/controversial": "Противоречиви публикации от %1",
"account/blocks": "Блокирани потребители за %1",
"account/uploads": "Качвания от %1",
"account/sessions": "Сесии на вписване",

@ -14,5 +14,9 @@
"reply": "Отговор",
"topic": "Тема",
"accept": "Приемане",
"reject": "Отказване"
"reject": "Отказване",
"remove": "Премахване",
"notify": "Известяване",
"notify-user": "Известяване на потребителя",
"confirm-reject": "Искате ли да отхвърлите тази публикация?"
}

@ -48,6 +48,7 @@
"moved-from-by": "Преместена от %1 от",
"queued-by": "Публикацията е добавена в опашката за одобрение &rarr;",
"backlink": "Спомената от",
"forked-by": "Разделена от",
"bookmark_instructions": "Щракнете тук, за да се върнете към последно прочетената публикация в тази тема.",
"flag-post": "Докладване на тази публикация",
"flag-user": "Докладване на този потребител",
@ -180,5 +181,7 @@
"timeago_earlier": "%1 по-рано",
"first-post": "Първа публикация",
"last-post": "Последна публикация",
"go-to-my-next-post": "Към следващата ми публикация",
"no-more-next-post": "Нямате повече публикации в тази тема",
"post-quick-reply": "Пускане на бърза публикация"
}

@ -12,6 +12,8 @@
"ban_account": "Блокиране на акаунта",
"ban_account_confirm": "Наистина ли искате да блокирате този потребител?",
"unban_account": "Деблокиране на акаунта",
"mute_account": "Заглушаване на акаунта",
"unmute_account": "Премахване на заглушаването на акаунта",
"delete_account": "Изтриване на акаунта",
"delete_account_as_admin": "Изтриване на <strong>акаунта</strong>",
"delete_content": "Изтриване на <strong>съдържанието</strong> на акаунта",
@ -105,7 +107,7 @@
"has_no_ignored_topics": "Този потребител не е пренебрегнал нито една тема досега.",
"has_no_upvoted_posts": "Този потребител не е гласувал положително досега.",
"has_no_downvoted_posts": "Този потребител не е гласувал отрицателно досега.",
"has_no_voted_posts": "Този потребител не е гласувал досега.",
"has_no_controversial_posts": "Този потребител няма публикации с отрицателни гласове засега.",
"has_no_blocks": "Не сте блокирали никого.",
"email_hidden": "Е-пощата е скрита",
"hidden": "скрито",
@ -154,6 +156,7 @@
"info.banned-permanently": "Блокиран за постоянно",
"info.banned-reason-label": "Причина",
"info.banned-no-reason": "Няма посочена причина.",
"info.muted-no-reason": "Няма посочена причина.",
"info.username-history": "История на потребителските имена",
"info.email-history": "Историята на е-пощите",
"info.moderation-note": "Модераторска бележка",
@ -184,6 +187,7 @@
"consent.export_posts": "Изнасяне на публикациите (.csv)",
"consent.export-posts-success": "Изнасяне на публикациите… Ще получите известие, когато е готово.",
"emailUpdate.intro": "Въведете е-пощата си по-долу. Този форум използва е-пощата за планирани резюмета и известия, както и за възстановяване на акаунта, в случай на забравена парола.",
"emailUpdate.optional": "<strong>Това поле не е задължително</strong>. Не сте длъжен/на да ни давате адреса на е-пощата си, но ако нямате потвърдена е-поща, няма да можете да възстановите достъпа до акаунта си в случай на проблем.",
"emailUpdate.optional": "<strong>Това поле не е задължително</strong>. Не сте длъжен/на да предоставяте адрес на е-поща, но без проверена е-поща, няма да можете да възстановите акаунта си в случай на проблем, нито ще можете да се вписвате с е-пощата си.",
"emailUpdate.required": "<strong>Това поле е задължително</strong>.",
"emailUpdate.change-instructions": "Ще Ви изпратим е-писмо за потвърждение на посочената е-поща, което ще съдържа уникална връзка. Щом последвате тази връзка, притежанието Ви на тази е-поща ще бъде потвърдено и тя ще бъде свързана с акаунта Ви. Ще можете да промените тази е-поща по всяко време, от страницата на акаунта си."
}

@ -5,6 +5,7 @@
"most_flags": "С най-много доклади",
"search": "Търсене",
"enter_username": "Въведете потребителско име, което да потърсите",
"search-user-for-chat": "Потърсете потребител, с когото да започнете разговор",
"load_more": "Зареждане на още",
"users-found-search-took": "Намерени са %1 потребител(и)! Търсенето отне %2 секунди.",
"filter-by": "Филтриране",

@ -3,5 +3,9 @@
"alert.confirm-restart": "আপনি কি নিশ্চিত যে আপনি NodeBB রিস্টার্ট করতে চান ?",
"acp-title": "%1 | NodeBB এডমিন কন্ট্রোল প্যানেল",
"settings-header-contents": "কনটেন্টস"
"settings-header-contents": "কনটেন্টস",
"changes-saved": "Changes Saved",
"changes-saved-message": "Your changes to the NodeBB configuration have been saved.",
"changes-not-saved": "Changes Not Saved",
"changes-not-saved-message": "NodeBB encountered a problem saving your changes. (%1)"
}

@ -10,6 +10,7 @@
"upload-files": "Upload Files",
"signature": "Signature",
"ban": "Ban",
"mute": "Mute",
"invite": "Invite",
"search-content": "Search Content",
"search-users": "Search Users",

@ -18,7 +18,8 @@
"download-csv": "Download CSV",
"manage-groups": "Manage Groups",
"add-group": "Add Group",
"invite": "Invite",
"create": "Create User",
"invite": "Invite by Email",
"new": "New User",
"filter-by": "Filter by",
"pills.unvalidated": "Not Validated",
@ -62,7 +63,7 @@
"create.password": "Password",
"create.password-confirm": "Confirm Password",
"temp-ban.length": "Ban Length",
"temp-ban.length": "Length",
"temp-ban.reason": "Reason <span class=\"text-muted\">(Optional)</span>",
"temp-ban.hours": "Hours",
"temp-ban.days": "Days",

@ -15,6 +15,10 @@
"headers.acac": "Access-Control-Allow-Credentials",
"headers.acam": "Access-Control-Allow-Methods",
"headers.acah": "Access-Control-Allow-Headers",
"headers.coep": "Cross-Origin-Embedder-Policy",
"headers.coep-help": "When enabled (default), will set the header to <code>require-corp</code>",
"headers.coop": "Cross-Origin-Opener-Policy",
"headers.corp": "Cross-Origin-Resource-Policy",
"hsts": "Strict Transport Security",
"hsts.enabled": "Enabled HSTS (recommended)",
"hsts.maxAge": "HSTS Max Age",

@ -38,9 +38,11 @@
"subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. <code>0</code> for midnight, <code>17</code> for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.<br /> The approximate server time is: <span id=\"serverTime\"></span><br /> The next daily digest is scheduled to be sent <span id=\"nextDigestTime\"></span>",
"notifications.remove-images": "Remove images from email notifications",
"require-email-address": "Require new users to specify an email address",
"require-email-address-warning": "By default, users can opt-out of entering an email address. Enabling this option means they have to enter an email address in order to proceed with registration. <strong>It does not ensure user will enter a real email address, nor even an address they own.</strong>",
"require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means they have to enter an email address in order to proceed with registration. <strong>It does not ensure user will enter a real email address, nor even an address they own.</strong>",
"send-validation-email": "Send validation emails when an email is added or changed",
"include-unverified-emails": "Send emails to recipients who have not explicitly confirmed their emails",
"include-unverified-warning": "By default, users with emails associated with their account have already been verified, but there are situations where this is not the case (e.g. SSO logins, grandfathered users, etc). <strong>Enable this setting at your own risk</strong> &ndash; sending emails to unverified addresses may be a violation of regional anti-spam laws.",
"prompt": "Prompt users to enter or confirm their emails",
"prompt-help": "If a user does not have an email set, or their email is not confirmed, a warning will be shown on screen."
"prompt-help": "If a user does not have an email set, or their email is not confirmed, a warning will be shown on screen.",
"sendEmailToBanned": "Send emails to users even if they have been banned"
}

@ -4,9 +4,13 @@
"disable-down-voting": "Disable Down Voting",
"votes-are-public": "All Votes Are Public",
"thresholds": "Activity Thresholds",
"min-rep-upvote": "Minimum reputation to upvote posts",
"upvotes-per-day": "Upvotes per day (set to 0 for unlimited upvotes)",
"upvotes-per-user-per-day": "Upvotes per user per day (set to 0 for unlimited upvotes)",
"min-rep-downvote": "Minimum reputation to downvote posts",
"downvotes-per-day": "Downvotes per day (set to 0 for unlimited downvotes)",
"downvotes-per-user-per-day": "Downvotes per user per day (set to 0 for unlimited downvotes)",
"min-rep-chat": "Minimum reputation to send chat messages",
"min-rep-flag": "Minimum reputation to flag posts",
"min-rep-website": "Minimum reputation to add \"Website\" to user profile",
"min-rep-aboutme": "Minimum reputation to add \"About me\" to user profile",
@ -18,5 +22,6 @@
"flags.limit-per-target": "Maximum number of times something can be flagged",
"flags.limit-per-target-placeholder": "Default: 0",
"flags.limit-per-target-help": "When a post or user is flagged multiple times, each additional flag is considered a &quot;report&quot; and added to the original flag. Set this option to a number other than zero to limit the number of reports an item can receive.",
"flags.auto-flag-on-downvote-threshold": "Number of downvotes to auto flag posts (Set to 0 to disable, default: 0)",
"flags.auto-resolve-on-ban": "Automatically resolve all of a user's tickets when they are banned"
}

@ -1,8 +1,8 @@
{
"posts": "Posts",
"allow-files": "Allow users to upload regular files",
"private": "Make uploaded files private",
"strip-exif-data": "Strip EXIF Data",
"preserve-orphaned-uploads": "Keep uploaded files on disk after a post is purged",
"private-extensions": "File extensions to make private",
"private-uploads-extensions-help": "Enter comma-separated list of file extensions to make private here (e.g. <code>pdf,xls,doc</code>). An empty list means all files are private.",
"resize-image-width-threshold": "Resize images if they are wider than specified width",

@ -1,12 +1,10 @@
{
"authentication": "Authentication",
"require-email-confirmation": "Require Email Confirmation",
"email-confirm-interval": "User may not resend a confirmation email until",
"email-confirm-email2": "minutes have elapsed",
"allow-login-with": "Allow login with",
"allow-login-with.username-email": "Username or Email",
"allow-login-with.username": "Username Only",
"allow-login-with.email": "Email Only",
"account-settings": "Account Settings",
"gdpr_enabled": "Enable GDPR consent collection",
"gdpr_enabled_help": "When enabled, all new registrants will be required to explicitly give consent for data collection and usage under the <a href=\"https://ec.europa.eu/info/priorities/justice-and-fundamental-rights/data-protection/2018-reform-eu-data-protection-rules/eu-data-protection-rules_en\">General Data Protection Regulation (GDPR)</a>. <strong>Note</strong>: Enabling GDPR does not force pre-existing users to provide consent. To do so, you will need to install the GDPR plugin.",

@ -48,6 +48,8 @@
"unsub.cta": "সেটিংসগুলো পরিবর্তন করতে এখানে ক্লিক করুন",
"unsubscribe": "unsubscribe",
"unsub.success": "You will no longer receive emails from the <strong>%1</strong> mailing list",
"unsub.failure.title": "Unable to unsubscribe",
"unsub.failure.message": "Unfortunately, we were not able to unsubscribe you from the mailing list, as there was an issue with the link. However, you can alter your email preferences by going to <a href=\"%2\">your user settings</a>.<br /><br />(error: <code>%1</code>)",
"banned.subject": "আপনি %1 এ নিষিদ্ধ হয়েছেন",
"banned.text1": "ব্যবহারকারি %1 %2 তে নিষিদ্ধ হয়েছেন",
"banned.text2": "This ban will last until %1.",

@ -1,6 +1,8 @@
{
"invalid-data": "ভুল তথ্য",
"invalid-json": "Invalid JSON",
"wrong-parameter-type": "A value of type %3 was expected for property `%1`, but %2 was received instead",
"required-parameters-missing": "Required parameters were missing from this API call: %1",
"not-logged-in": "আপনি লগিন করেননি",
"account-locked": "আপনার অ্যাকাউন্ট সাময়িকভাবে লক করা হয়েছে",
"search-requires-login": "Searching requires an account - please login or register.",
@ -9,6 +11,7 @@
"invalid-tid": "ভুল টপিক নাম্বার",
"invalid-pid": "ভুল পোস্ট নাম্বার",
"invalid-uid": "ভুল ব্যবহারকারী নাম্বার",
"invalid-mid": "Invalid Chat Message ID",
"invalid-date": "A valid date must be provided",
"invalid-username": "ভুল ইউজারনেম",
"invalid-email": "ভুল ইমেইল",
@ -104,6 +107,9 @@
"already-bookmarked": "You have already bookmarked this post",
"already-unbookmarked": "You have already unbookmarked this post",
"cant-ban-other-admins": "আপনি অন্য এ্যাডমিনদের নিষিদ্ধ করতে পারেন না!",
"cant-mute-other-admins": "You can't mute other admins!",
"user-muted-for-hours": "You have been muted, you will be able to post in %1 hour(s)",
"user-muted-for-minutes": "You have been muted, you will be able to post in %1 minute(s)",
"cant-make-banned-users-admin": "You can't make banned users admin.",
"cant-remove-last-admin": "You are the only administrator. Add another user as an administrator before removing yourself as admin",
"account-deletion-disabled": "Account deletion is disabled",
@ -142,7 +148,6 @@
"invalid-chat-message": "Invalid chat message",
"chat-message-too-long": "Chat messages can not be longer than %1 characters.",
"cant-edit-chat-message": "You are not allowed to edit this message",
"cant-remove-last-user": "You can't remove the last user",
"cant-delete-chat-message": "You are not allowed to delete this message",
"chat-edit-duration-expired": "You are only allowed to edit chat messages for %1 second(s) after posting",
"chat-delete-duration-expired": "You are only allowed to delete chat messages for %1 second(s) after posting",
@ -152,19 +157,23 @@
"already-voting-for-this-post": "You have already voted for this post.",
"reputation-system-disabled": "সম্মাননা ব্যাবস্থা নিস্ক্রীয় রাখা হয়েছে",
"downvoting-disabled": "ঋণাত্মক ভোট নিস্ক্রীয় রাখা হয়েছে।",
"not-enough-reputation-to-downvote": "আপনার এই পোস্ট downvote করার জন্য পর্যাপ্ত সম্মাননা নেই",
"not-enough-reputation-to-flag": "এই পোষ্টকে ফ্লাগ করার জন্য আপনার পর্যাপ্ত সম্মাননা নেই",
"not-enough-reputation-min-rep-website": "You do not have enough reputation to add a website",
"not-enough-reputation-min-rep-aboutme": "You do not have enough reputation to add an about me",
"not-enough-reputation-min-rep-signature": "You do not have enough reputation to add a signature",
"not-enough-reputation-min-rep-profile-picture": "You do not have enough reputation to add a profile picture",
"not-enough-reputation-min-rep-cover-picture": "You do not have enough reputation to add a cover picture",
"not-enough-reputation-to-chat": "You need %1 reputation to chat",
"not-enough-reputation-to-upvote": "You need %1 reputation to upvote",
"not-enough-reputation-to-downvote": "You need %1 reputation to downvote",
"not-enough-reputation-to-flag": "You need %1 reputation to flag this post",
"not-enough-reputation-min-rep-website": "You need %1 reputation to add a website",
"not-enough-reputation-min-rep-aboutme": "You need %1 reputation to add an about me",
"not-enough-reputation-min-rep-signature": "You need %1 reputation to add a signature",
"not-enough-reputation-min-rep-profile-picture": "You need %1 reputation to add a profile picture",
"not-enough-reputation-min-rep-cover-picture": "You need %1 reputation to add a cover picture",
"post-already-flagged": "You have already flagged this post",
"user-already-flagged": "You have already flagged this user",
"post-flagged-too-many-times": "This post has been flagged by others already",
"user-flagged-too-many-times": "This user has been flagged by others already",
"cant-flag-privileged": "You are not allowed to flag the profiles or content of privileged users (moderators/global moderators/admins)",
"self-vote": "You cannot vote on your own post",
"too-many-upvotes-today": "You can only upvote %1 times a day",
"too-many-upvotes-today-user": "You can only upvote a user %1 times a day",
"too-many-downvotes-today": "You can only downvote %1 times a day",
"too-many-downvotes-today-user": "You can only downvote a user %1 times a day",
"reload-failed": "\"%1\" রিলোড করতে সমস্যা হয়েছে। রিলোডের পূর্বে যা করা হয়েছিল সেটি আনডু করা সমীচীন। ",

@ -81,5 +81,6 @@
"bulk-actions": "Bulk Actions",
"bulk-resolve": "Resolve Flag(s)",
"bulk-success": "%1 flags updated",
"flagged-timeago-readable": "Flagged <span class=\"timeago\" title=\"%1\"></span> (%2)"
"flagged-timeago-readable": "Flagged <span class=\"timeago\" title=\"%1\"></span> (%2)",
"auto-flagged": "[Auto Flagged] Received %1 downvotes."
}

@ -23,7 +23,7 @@
"close": "বন্ধ",
"pagination": "পাতা নং",
"pagination.out_of": "%2 এর মাঝে %1",
"pagination.enter_index": "সূচক লিখুন",
"pagination.enter_index": "Go to post index",
"header.admin": "অ্যাডমিন",
"header.categories": "বিভাগ",
"header.recent": "সাম্প্রতিক",
@ -56,6 +56,7 @@
"posts": "পোস্টগুলি",
"x-posts": "%1 posts",
"best": "Best",
"controversial": "Controversial",
"votes": "Votes",
"x-votes": "%1 votes",
"voters": "Voters",

@ -1,7 +1,6 @@
{
"username-email": "ইউজারনেম / ইমেইল",
"username": "ইউজারনেম",
"email": "ইমেইল",
"remember_me": "মনে রাখুন",
"forgot_password": "পাসওয়ার্ড ভুলে গিয়েছেন?",
"alternative_logins": "বিকল্প প্রবেশ",

@ -1,6 +1,6 @@
{
"chat.chatting_with": "Chat with",
"chat.placeholder": "এখানে আপনার বার্তা লিখুন। পাঠানোর জন্য Enter চাপুন",
"chat.placeholder": "Type chat message here, drag & drop images, press enter to send",
"chat.scroll-up-alert": "You are looking at older messages, click here to go to most recent message.",
"chat.send": "প্রেরন করুন",
"chat.no_active": "আপনার কোন সচল কথোপকথন নেই",
@ -68,6 +68,8 @@
"bootbox.ok": "OK",
"bootbox.cancel": "Cancel",
"bootbox.confirm": "Confirm",
"bootbox.submit": "Submit",
"bootbox.send": "Send",
"cover.dragging_title": "Cover Photo Positioning",
"cover.dragging_message": "Drag the cover photo to the desired position and click \"Save\"",
"cover.saved": "Cover photo image and position saved",

@ -50,6 +50,7 @@
"users-csv-exported": "Users csv exported, click to download",
"post-queue-accepted": "Your queued post has been accepted. Click here to see your post.",
"post-queue-rejected": "Your queued post has been rejected.",
"post-queue-notify": "Queued post received a notification:<br/>\"%1\"",
"email-confirmed": "ইমেইল নিশ্চিত করা হয়েছে",
"email-confirmed-message": "আপনার ইমেইল যাচাই করার জন্য আপনাকে ধন্যবাদ। আপনার অ্যাকাউন্টটি এখন সম্পূর্ণরূপে সক্রিয়।",
"email-confirm-error-message": "আপনার ইমেল ঠিকানার বৈধতা যাচাইয়ে একটি সমস্যা হয়েছে। সম্ভবত কোডটি ভুল ছিল অথবা কোডের মেয়াদ শেষ হয়ে গিয়েছে।",

@ -54,6 +54,7 @@
"account/upvoted": "Posts upvoted by %1",
"account/downvoted": "Posts downvoted by %1",
"account/best": "Best posts made by %1",
"account/controversial": "Controversial posts made by %1",
"account/blocks": "Blocked users for %1",
"account/uploads": "Uploads by %1",
"account/sessions": "Login Sessions",

@ -14,5 +14,9 @@
"reply": "Reply",
"topic": "Topic",
"accept": "Accept",
"reject": "Reject"
"reject": "Reject",
"remove": "Remove",
"notify": "Notify",
"notify-user": "Notify User",
"confirm-reject": "Do you want to reject this post?"
}

@ -48,6 +48,7 @@
"moved-from-by": "Moved from %1 by",
"queued-by": "Post queued for approval &rarr;",
"backlink": "Referenced by",
"forked-by": "Forked by",
"bookmark_instructions": "Click here to return to the last read post in this thread.",
"flag-post": "Flag this post",
"flag-user": "Flag this user",
@ -180,5 +181,7 @@
"timeago_earlier": "%1 earlier",
"first-post": "First post",
"last-post": "Last post",
"go-to-my-next-post": "Go to my next post",
"no-more-next-post": "You don't have more posts in this topic",
"post-quick-reply": "Post quick reply"
}

@ -12,6 +12,8 @@
"ban_account": "একাউন্ট নিষিদ্ধ করুন",
"ban_account_confirm": "আপনি কি নিশ্চিত যে এই সদস্যকে নিষিদ্ধ করতে চান ?",
"unban_account": "নিষেদ্ধাজ্ঞা তুলে নিন",
"mute_account": "Mute Account",
"unmute_account": "Unmute Account",
"delete_account": "একাউন্ট মুছে ফেলুন",
"delete_account_as_admin": "Delete <strong>Account</strong>",
"delete_content": "Delete Account <strong>Content</strong>",
@ -105,7 +107,7 @@
"has_no_ignored_topics": "This user hasn't ignored any topics yet.",
"has_no_upvoted_posts": "This user hasn't upvoted any posts yet.",
"has_no_downvoted_posts": "This user hasn't downvoted any posts yet.",
"has_no_voted_posts": "This user has no voted posts",
"has_no_controversial_posts": "This user does not have any downvoted posts yet.",
"has_no_blocks": "You have blocked no users.",
"email_hidden": "ইমেইল গোপন রাখা হয়েছে",
"hidden": "গোপন করা হয়েছে",
@ -154,6 +156,7 @@
"info.banned-permanently": "Banned permanently",
"info.banned-reason-label": "Reason",
"info.banned-no-reason": "No reason given.",
"info.muted-no-reason": "No reason given.",
"info.username-history": "Username History",
"info.email-history": "Email History",
"info.moderation-note": "Moderation Note",
@ -184,6 +187,7 @@
"consent.export_posts": "Export Posts (.csv)",
"consent.export-posts-success": "Exporting posts, you will get a notification when it is complete.",
"emailUpdate.intro": "Please enter your email address below. This forum uses your email address for scheduled digest and notifications, as well as for account recovery in the event of a lost password.",
"emailUpdate.optional": "<strong>This field is optional</strong>. You are not obligated to provide your email address, but without a validated email, you will not be able to recover your account.",
"emailUpdate.optional": "<strong>This field is optional</strong>. You are not obligated to provide your email address, but without a validated email you will not be able to recover your account or login with your email.",
"emailUpdate.required": "<strong>This field is required</strong>.",
"emailUpdate.change-instructions": "A confirmation email will be sent to the entered email address with a unique link. Accessing that link will confirm your ownership of the email address and it will become active on your account. At any time, you are able to update your email on file from within your account page."
}

@ -5,6 +5,7 @@
"most_flags": "সর্বোচ্চ অভিযোগ",
"search": "খুঁজুন",
"enter_username": "ইউজারনেম এর ভিত্তিতে সার্চ করুন",
"search-user-for-chat": "Search a user to start chat",
"load_more": "আরো লোড করুন",
"users-found-search-took": "%1 জন সদস্য(দের) খুঁজে পাওয়া গেছে। খুঁজতে সময় লেগেছে %2 সেকেন্ড ",
"filter-by": "ফিল্টার করার ধরন",

@ -3,5 +3,9 @@
"alert.confirm-restart": "Jste si jist/a, že si přejete restartovat NodeBB?",
"acp-title": "Ovládací panel správce NodeBB | %1",
"settings-header-contents": "Obsah"
"settings-header-contents": "Obsah",
"changes-saved": "Changes Saved",
"changes-saved-message": "Your changes to the NodeBB configuration have been saved.",
"changes-not-saved": "Changes Not Saved",
"changes-not-saved-message": "NodeBB encountered a problem saving your changes. (%1)"
}

@ -10,6 +10,7 @@
"upload-files": "Náhrát soubory",
"signature": "Podpis",
"ban": "Blokovat",
"mute": "Mute",
"invite": "Invite",
"search-content": "Hledat obsah",
"search-users": "Hledat uživatele",

@ -18,7 +18,8 @@
"download-csv": "Stáhnout jako CSV",
"manage-groups": "Spravovat skupiny",
"add-group": "Přidat skupinu",
"invite": "Pozvat",
"create": "Create User",
"invite": "Invite by Email",
"new": "Nový uživatel",
"filter-by": "Filter by",
"pills.unvalidated": "Neověřeno",
@ -62,7 +63,7 @@
"create.password": "Heslo",
"create.password-confirm": "Potvrdit heslo",
"temp-ban.length": "Trvání zákazu",
"temp-ban.length": "Length",
"temp-ban.reason": "Důvod <span class=\"text-muted\">(volitelné)</span>",
"temp-ban.hours": "Hodiny",
"temp-ban.days": "Dny",

@ -15,6 +15,10 @@
"headers.acac": "Access-Control-Allow-Credentials",
"headers.acam": "Access-Control-Allow-Methods",
"headers.acah": "Access-Control-Allow-Headers",
"headers.coep": "Cross-Origin-Embedder-Policy",
"headers.coep-help": "When enabled (default), will set the header to <code>require-corp</code>",
"headers.coop": "Cross-Origin-Opener-Policy",
"headers.corp": "Cross-Origin-Resource-Policy",
"hsts": "Přísné zabezpečení přenosu",
"hsts.enabled": "Povolit HSTS (doporučeno)",
"hsts.maxAge": "HSTS Max Age",

@ -38,9 +38,11 @@
"subscriptions.hour-help": "Zadejte číslo odpovídající hodině, kdy mají být odeslány přehledové e-maily (tj. <code>0</code> pro půlnoc, <code>17</code> pro 5:00pm). Mějte na paměti, že tato hodina závisí na hodinách samotného serveru a nemusí tak souhlasit se systémovými hodinami. <br />Přibližný čas serveru je: <span id=\"serverTime\"></span>.<br />Další odeslání přehledů je plánováno na <span id=\"nextDigestTime\"></span>.",
"notifications.remove-images": "Remove images from email notifications",
"require-email-address": "Require new users to specify an email address",
"require-email-address-warning": "By default, users can opt-out of entering an email address. Enabling this option means they have to enter an email address in order to proceed with registration. <strong>It does not ensure user will enter a real email address, nor even an address they own.</strong>",
"require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means they have to enter an email address in order to proceed with registration. <strong>It does not ensure user will enter a real email address, nor even an address they own.</strong>",
"send-validation-email": "Send validation emails when an email is added or changed",
"include-unverified-emails": "Send emails to recipients who have not explicitly confirmed their emails",
"include-unverified-warning": "By default, users with emails associated with their account have already been verified, but there are situations where this is not the case (e.g. SSO logins, grandfathered users, etc). <strong>Enable this setting at your own risk</strong> &ndash; sending emails to unverified addresses may be a violation of regional anti-spam laws.",
"prompt": "Prompt users to enter or confirm their emails",
"prompt-help": "If a user does not have an email set, or their email is not confirmed, a warning will be shown on screen."
"prompt-help": "If a user does not have an email set, or their email is not confirmed, a warning will be shown on screen.",
"sendEmailToBanned": "Send emails to users even if they have been banned"
}

@ -4,9 +4,13 @@
"disable-down-voting": "Zakázat hlasování",
"votes-are-public": "Všechna hlasování jsou veřejná",
"thresholds": "Omezení aktivity",
"min-rep-upvote": "Minimum reputation to upvote posts",
"upvotes-per-day": "Upvotes per day (set to 0 for unlimited upvotes)",
"upvotes-per-user-per-day": "Upvotes per user per day (set to 0 for unlimited upvotes)",
"min-rep-downvote": "Minimální reputace pro vyjádření nesouhlasu s příspěvkem",
"downvotes-per-day": "Downvotes per day (set to 0 for unlimited downvotes)",
"downvotes-per-user-per-day": "Downvotes per user per day (set to 0 for unlimited downvotes)",
"min-rep-chat": "Minimum reputation to send chat messages",
"min-rep-flag": "Minimální reputace pro označení příspěvků",
"min-rep-website": "Minimální reputace pro přidání „Webové stránky” do uživatelského profilu",
"min-rep-aboutme": "Minimální reputace pro přidání „O mně” do uživatelského profilu",
@ -18,5 +22,6 @@
"flags.limit-per-target": "Maximum number of times something can be flagged",
"flags.limit-per-target-placeholder": "Default: 0",
"flags.limit-per-target-help": "When a post or user is flagged multiple times, each additional flag is considered a &quot;report&quot; and added to the original flag. Set this option to a number other than zero to limit the number of reports an item can receive.",
"flags.auto-flag-on-downvote-threshold": "Number of downvotes to auto flag posts (Set to 0 to disable, default: 0)",
"flags.auto-resolve-on-ban": "Automatically resolve all of a user's tickets when they are banned"
}

@ -1,8 +1,8 @@
{
"posts": "Příspěvky",
"allow-files": "Povolit uživatelům nahrávat normální soubory",
"private": "Nahrané soubory jsou soukromé",
"strip-exif-data": "Nepoužít data EXIF",
"preserve-orphaned-uploads": "Keep uploaded files on disk after a post is purged",
"private-extensions": "Přípona souborů je soukromá",
"private-uploads-extensions-help": "Pro nastavení soukromí, zde zadejte seznam souborů oddělený čárkou (tj. <code>pdf, xls,doc</code>). prázdný seznam znamená, že všechny soubory jsou soukromé.",
"resize-image-width-threshold": "Změnit velikost obrázků, jsou-li širší než určená šířka",

@ -1,12 +1,10 @@
{
"authentication": "Ověření",
"require-email-confirmation": "Vyžadovat potvrzení e-mailem",
"email-confirm-interval": "Uživatel nesmí požádat o znovu zaslání potvrzujícího e-mailu do",
"email-confirm-email2": "minut uplynulo",
"allow-login-with": "Povolit přihlášení pomocí",
"allow-login-with.username-email": "Uživatelské jméno nebo e-mail",
"allow-login-with.username": "Pouze uživatelské jméno",
"allow-login-with.email": "Pouze e-mail",
"account-settings": "Nastavení účtu",
"gdpr_enabled": "Povolit souhlas s GDPR",
"gdpr_enabled_help": "When enabled, all new registrants will be required to explicitly give consent for data collection and usage under the <a href=\"https://ec.europa.eu/info/priorities/justice-and-fundamental-rights/data-protection/2018-reform-eu-data-protection-rules/eu-data-protection-rules_en\">General Data Protection Regulation (GDPR)</a>. <strong>Note</strong>: Enabling GDPR does not force pre-existing users to provide consent. To do so, you will need to install the GDPR plugin.",

@ -48,6 +48,8 @@
"unsub.cta": "Chcete-li změnit tyto nastavení, klikněte zde.",
"unsubscribe": "odhlásit",
"unsub.success": "Již nebudete nadále dostávat e-maily z <strong>%1</strong>",
"unsub.failure.title": "Unable to unsubscribe",
"unsub.failure.message": "Unfortunately, we were not able to unsubscribe you from the mailing list, as there was an issue with the link. However, you can alter your email preferences by going to <a href=\"%2\">your user settings</a>.<br /><br />(error: <code>%1</code>)",
"banned.subject": "Byl jste zablokován od %1",
"banned.text1": "Uživatel %1 byl zablokován od %2",
"banned.text2": "Blokace bude trvat do %1",

@ -1,6 +1,8 @@
{
"invalid-data": "Neplatná data",
"invalid-json": "Neplatný JSON",
"wrong-parameter-type": "A value of type %3 was expected for property `%1`, but %2 was received instead",
"required-parameters-missing": "Required parameters were missing from this API call: %1",
"not-logged-in": "Zdá se, že nejste přihlášen/a",
"account-locked": "Váš účet byl dočasně uzamknut",
"search-requires-login": "Pro hledání je vyžadován účet přihlaste se nebo zaregistrujte.",
@ -9,6 +11,7 @@
"invalid-tid": "Neplatné ID tématu",
"invalid-pid": "Neplatné ID příspěvku",
"invalid-uid": "Neplatné ID uživatele",
"invalid-mid": "Invalid Chat Message ID",
"invalid-date": "A valid date must be provided",
"invalid-username": "Neplatné uživatelské jméno",
"invalid-email": "Neplatný e-mail",
@ -104,6 +107,9 @@
"already-bookmarked": "Již jste tento příspěvek zazáložkoval",
"already-unbookmarked": "Již jste u tohoto příspěvku odebral záložku",
"cant-ban-other-admins": "Nemůžete zablokovat jiné správce.",
"cant-mute-other-admins": "You can't mute other admins!",
"user-muted-for-hours": "You have been muted, you will be able to post in %1 hour(s)",
"user-muted-for-minutes": "You have been muted, you will be able to post in %1 minute(s)",
"cant-make-banned-users-admin": "You can't make banned users admin.",
"cant-remove-last-admin": "Jste jediným správcem. Před vlastním odebráním oprávnění správce nejdříve přidejte jiného uživatele jako správce",
"account-deletion-disabled": "Account deletion is disabled",
@ -142,7 +148,6 @@
"invalid-chat-message": "Neplatná konverzační zpráva",
"chat-message-too-long": "Konverzační zprávy nemohou být delší než %1 znaků.",
"cant-edit-chat-message": "Tuto zprávu nemůžete upravit",
"cant-remove-last-user": "Posledního uživatele nemůžete vyjmout",
"cant-delete-chat-message": "Tuto zprávu nemůžete odstranit",
"chat-edit-duration-expired": "Je vám umožněno upravit konverzační zprávy pod dobu %1 sekund/y po jejich odeslání",
"chat-delete-duration-expired": "Je vám umožněno odstranit konverzační zprávy pod dobu %1 sekund/y po jejich odeslání",
@ -152,19 +157,23 @@
"already-voting-for-this-post": "Již jste v tomto příspěvku hlasoval.",
"reputation-system-disabled": "Systém reputací je zakázán.",
"downvoting-disabled": "Systém nesouhlasu je zakázán",
"not-enough-reputation-to-downvote": "Nemáte dostatečnou reputaci pro vyjádření nesouhlasu u tohoto příspěvku",
"not-enough-reputation-to-flag": "Pro označení tohoto příspěvku nemáte dostatečnou reputaci",
"not-enough-reputation-min-rep-website": "Pro přidání webové stránky nemáte dostatek reputace",
"not-enough-reputation-min-rep-aboutme": "Pro přidání „O mně” nemáte dostatek reputace",
"not-enough-reputation-min-rep-signature": "Pro přidání podpisu nemáte dostatek reputace",
"not-enough-reputation-min-rep-profile-picture": "Pro přidání profilového obrázku nemáte dostatek reputace",
"not-enough-reputation-min-rep-cover-picture": "Pro přidání obrázku nemáte dostatek reputace",
"not-enough-reputation-to-chat": "You need %1 reputation to chat",
"not-enough-reputation-to-upvote": "You need %1 reputation to upvote",
"not-enough-reputation-to-downvote": "You need %1 reputation to downvote",
"not-enough-reputation-to-flag": "You need %1 reputation to flag this post",
"not-enough-reputation-min-rep-website": "You need %1 reputation to add a website",
"not-enough-reputation-min-rep-aboutme": "You need %1 reputation to add an about me",
"not-enough-reputation-min-rep-signature": "You need %1 reputation to add a signature",
"not-enough-reputation-min-rep-profile-picture": "You need %1 reputation to add a profile picture",
"not-enough-reputation-min-rep-cover-picture": "You need %1 reputation to add a cover picture",
"post-already-flagged": "You have already flagged this post",
"user-already-flagged": "You have already flagged this user",
"post-flagged-too-many-times": "This post has been flagged by others already",
"user-flagged-too-many-times": "This user has been flagged by others already",
"cant-flag-privileged": "You are not allowed to flag the profiles or content of privileged users (moderators/global moderators/admins)",
"self-vote": "U svého vlastního příspěvku nemůžete hlasovat",
"too-many-upvotes-today": "You can only upvote %1 times a day",
"too-many-upvotes-today-user": "You can only upvote a user %1 times a day",
"too-many-downvotes-today": "You can only downvote %1 times a day",
"too-many-downvotes-today-user": "You can only downvote a user %1 times a day",
"reload-failed": "Vyskytla se chyba v NodeBB při znovu načtení: \"%1\". NodeBB bude pokračovat v běhu na straně klienta, nicméně byste měl/a přenastavit zpět to, co jste udělal/a před opětovným načtením.",

@ -81,5 +81,6 @@
"bulk-actions": "Bulk Actions",
"bulk-resolve": "Resolve Flag(s)",
"bulk-success": "%1 flags updated",
"flagged-timeago-readable": "Flagged <span class=\"timeago\" title=\"%1\"></span> (%2)"
"flagged-timeago-readable": "Flagged <span class=\"timeago\" title=\"%1\"></span> (%2)",
"auto-flagged": "[Auto Flagged] Received %1 downvotes."
}

@ -23,7 +23,7 @@
"close": "Zrušit",
"pagination": "Stránkování",
"pagination.out_of": "%1 z %2",
"pagination.enter_index": "Zadejte index",
"pagination.enter_index": "Go to post index",
"header.admin": "Administrace",
"header.categories": "Kategorie",
"header.recent": "Nejnovější",
@ -56,6 +56,7 @@
"posts": "Příspěvky",
"x-posts": "%1 posts",
"best": "Nejlepší",
"controversial": "Controversial",
"votes": "Počet hlasů",
"x-votes": "%1 votes",
"voters": "Voters",

@ -1,7 +1,6 @@
{
"username-email": "Uživatelské jméno / e-mail",
"username": "Uživatel",
"email": "E-mail",
"remember_me": "Zapamatovat si mě?",
"forgot_password": "Zapomněli jste heslo?",
"alternative_logins": "Další způsoby přihlášení",

@ -1,6 +1,6 @@
{
"chat.chatting_with": "Konverzace s",
"chat.placeholder": "Konverzační zprávu napište zde, pro odeslání stiskněte klávesu Enter",
"chat.placeholder": "Type chat message here, drag & drop images, press enter to send",
"chat.scroll-up-alert": "You are looking at older messages, click here to go to most recent message.",
"chat.send": "Odeslat",
"chat.no_active": "Nemáte žádné aktivní konverzace.",
@ -68,6 +68,8 @@
"bootbox.ok": "OK",
"bootbox.cancel": "Zrušit",
"bootbox.confirm": "Potvrdit",
"bootbox.submit": "Submit",
"bootbox.send": "Send",
"cover.dragging_title": "Umístění fotografie",
"cover.dragging_message": "Přesuňte fotku na požadovanou pozici a klikněte na „Uložit”",
"cover.saved": "Fotografie a její umístění uloženo",

@ -50,6 +50,7 @@
"users-csv-exported": "Users csv exported, click to download",
"post-queue-accepted": "Your queued post has been accepted. Click here to see your post.",
"post-queue-rejected": "Your queued post has been rejected.",
"post-queue-notify": "Queued post received a notification:<br/>\"%1\"",
"email-confirmed": "E-mail potvrzen",
"email-confirmed-message": "Děkujeme za ověření vaší e-mailové adresy. Váš účet je nyní aktivní.",
"email-confirm-error-message": "Nastal problém s ověřením vaší e-mailové adresy. Kód je pravděpodobně neplatný nebo jeho platnost vypršela.",

@ -54,6 +54,7 @@
"account/upvoted": "Souhlasí s příspěvkem %1",
"account/downvoted": "Nesouhlasí s příspěvkem %1",
"account/best": "Nejlepší příspěvky od %1",
"account/controversial": "Controversial posts made by %1",
"account/blocks": "Zablokovaní uživatelé z %1",
"account/uploads": "Nahráno od %1",
"account/sessions": "Relace s přihlášením",

@ -14,5 +14,9 @@
"reply": "Reply",
"topic": "Topic",
"accept": "Accept",
"reject": "Reject"
"reject": "Reject",
"remove": "Remove",
"notify": "Notify",
"notify-user": "Notify User",
"confirm-reject": "Do you want to reject this post?"
}

@ -48,6 +48,7 @@
"moved-from-by": "Moved from %1 by",
"queued-by": "Post queued for approval &rarr;",
"backlink": "Referenced by",
"forked-by": "Forked by",
"bookmark_instructions": "Pro návrat k poslednímu čtenému příspěvku v tématu, klikněte zde.",
"flag-post": "Flag this post",
"flag-user": "Flag this user",
@ -180,5 +181,7 @@
"timeago_earlier": "%1 dříve",
"first-post": "First post",
"last-post": "Last post",
"go-to-my-next-post": "Go to my next post",
"no-more-next-post": "You don't have more posts in this topic",
"post-quick-reply": "Post quick reply"
}

@ -12,6 +12,8 @@
"ban_account": "Zablokovat účet",
"ban_account_confirm": "Opravdu chcete zablokovat tohoto uživatele?",
"unban_account": "Odblokovat účet",
"mute_account": "Mute Account",
"unmute_account": "Unmute Account",
"delete_account": "Odstranit účet",
"delete_account_as_admin": "Delete <strong>Account</strong>",
"delete_content": "Delete Account <strong>Content</strong>",
@ -105,7 +107,7 @@
"has_no_ignored_topics": "Tento uživatel ještě neignoruje žádné témata.",
"has_no_upvoted_posts": "Tento uživatel zatím nevyjádřil souhlas u žádného příspěvku.",
"has_no_downvoted_posts": "Tento uživatel zatím nevyjádřil nesouhlas u žádného příspěvku.",
"has_no_voted_posts": "Tento uživatel nemá žádné hlasovací příspěvky",
"has_no_controversial_posts": "This user does not have any downvoted posts yet.",
"has_no_blocks": "Nezablokoval/a jste žádné uživatele.",
"email_hidden": "E-mail je skryt",
"hidden": "skrytý",
@ -154,6 +156,7 @@
"info.banned-permanently": "Trvale zablokován",
"info.banned-reason-label": "Důvod",
"info.banned-no-reason": "Bez důvodu",
"info.muted-no-reason": "No reason given.",
"info.username-history": "Historie uživatelského jména",
"info.email-history": "E-mailová historie",
"info.moderation-note": "Poznámka moderace",
@ -184,6 +187,7 @@
"consent.export_posts": "Exportovat příspěvky (*.csv)",
"consent.export-posts-success": "Exporting posts, you will get a notification when it is complete.",
"emailUpdate.intro": "Please enter your email address below. This forum uses your email address for scheduled digest and notifications, as well as for account recovery in the event of a lost password.",
"emailUpdate.optional": "<strong>This field is optional</strong>. You are not obligated to provide your email address, but without a validated email, you will not be able to recover your account.",
"emailUpdate.optional": "<strong>This field is optional</strong>. You are not obligated to provide your email address, but without a validated email you will not be able to recover your account or login with your email.",
"emailUpdate.required": "<strong>This field is required</strong>.",
"emailUpdate.change-instructions": "A confirmation email will be sent to the entered email address with a unique link. Accessing that link will confirm your ownership of the email address and it will become active on your account. At any time, you are able to update your email on file from within your account page."
}

@ -5,6 +5,7 @@
"most_flags": "Nejoznačovanější",
"search": "Hledat",
"enter_username": "Zadej uživatelské jméno k hledání",
"search-user-for-chat": "Search a user to start chat",
"load_more": "Načíst další",
"users-found-search-took": "Nalezeno %1 uživatel(ů) za %2 vteřiny.",
"filter-by": "Filtrovat dle",

@ -3,5 +3,9 @@
"alert.confirm-restart": "Er du sikker på at du ønsker at genstarte NodeBB?",
"acp-title": "%1 | NodeBB Admin Kontrol Panel",
"settings-header-contents": "Indhold"
"settings-header-contents": "Indhold",
"changes-saved": "Changes Saved",
"changes-saved-message": "Your changes to the NodeBB configuration have been saved.",
"changes-not-saved": "Changes Not Saved",
"changes-not-saved-message": "NodeBB encountered a problem saving your changes. (%1)"
}

@ -10,6 +10,7 @@
"upload-files": "Upload Files",
"signature": "Signature",
"ban": "Ban",
"mute": "Mute",
"invite": "Invite",
"search-content": "Search Content",
"search-users": "Search Users",

@ -18,7 +18,8 @@
"download-csv": "Download CSV",
"manage-groups": "Manage Groups",
"add-group": "Add Group",
"invite": "Invite",
"create": "Create User",
"invite": "Invite by Email",
"new": "New User",
"filter-by": "Filter by",
"pills.unvalidated": "Not Validated",
@ -62,7 +63,7 @@
"create.password": "Password",
"create.password-confirm": "Confirm Password",
"temp-ban.length": "Ban Length",
"temp-ban.length": "Length",
"temp-ban.reason": "Reason <span class=\"text-muted\">(Optional)</span>",
"temp-ban.hours": "Hours",
"temp-ban.days": "Days",

@ -15,6 +15,10 @@
"headers.acac": "Access-Control-Allow-Credentials",
"headers.acam": "Access-Control-Allow-Methods",
"headers.acah": "Access-Control-Allow-Headers",
"headers.coep": "Cross-Origin-Embedder-Policy",
"headers.coep-help": "When enabled (default), will set the header to <code>require-corp</code>",
"headers.coop": "Cross-Origin-Opener-Policy",
"headers.corp": "Cross-Origin-Resource-Policy",
"hsts": "Strict Transport Security",
"hsts.enabled": "Enabled HSTS (recommended)",
"hsts.maxAge": "HSTS Max Age",

@ -38,9 +38,11 @@
"subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. <code>0</code> for midnight, <code>17</code> for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.<br /> The approximate server time is: <span id=\"serverTime\"></span><br /> The next daily digest is scheduled to be sent <span id=\"nextDigestTime\"></span>",
"notifications.remove-images": "Remove images from email notifications",
"require-email-address": "Require new users to specify an email address",
"require-email-address-warning": "By default, users can opt-out of entering an email address. Enabling this option means they have to enter an email address in order to proceed with registration. <strong>It does not ensure user will enter a real email address, nor even an address they own.</strong>",
"require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means they have to enter an email address in order to proceed with registration. <strong>It does not ensure user will enter a real email address, nor even an address they own.</strong>",
"send-validation-email": "Send validation emails when an email is added or changed",
"include-unverified-emails": "Send emails to recipients who have not explicitly confirmed their emails",
"include-unverified-warning": "By default, users with emails associated with their account have already been verified, but there are situations where this is not the case (e.g. SSO logins, grandfathered users, etc). <strong>Enable this setting at your own risk</strong> &ndash; sending emails to unverified addresses may be a violation of regional anti-spam laws.",
"prompt": "Prompt users to enter or confirm their emails",
"prompt-help": "If a user does not have an email set, or their email is not confirmed, a warning will be shown on screen."
"prompt-help": "If a user does not have an email set, or their email is not confirmed, a warning will be shown on screen.",
"sendEmailToBanned": "Send emails to users even if they have been banned"
}

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save