Compare commits

..

3 Commits

Author SHA1 Message Date
Barış Soner Uşaklı
5e6d72552e backport plugin install fix #6620
https://github.com/NodeBB/NodeBB/issues/6620
2018-07-02 21:37:36 -04:00
Barış Soner Uşaklı
e0d642c78a backport fix runJobs 2018-06-29 15:51:09 -04:00
Misty (Bot)
134c74358e Incremented version number - v1.10.0 2018-06-27 18:28:46 +00:00
2664 changed files with 45166 additions and 58784 deletions

View File

@@ -1,22 +1,8 @@
# Save as .codeclimate.yml (note leading .) in project root directory # Save as .codeclimate.yml (note leading .) in project root directory
version: "2"
languages: languages:
Ruby: false Ruby: true
JavaScript: true JavaScript: true
PHP: false PHP: true
checks:
file-lines:
config:
threshold: 500
method-lines:
config:
threshold: 50
method-complexity:
config:
threshold: 10
similar-code:
config:
threshold: 65
exclude_paths: exclude_paths:
- "public/vendor/*" - "public/vendor/*"
- "test/*" - "test/*"

View File

@@ -14,10 +14,9 @@
"exports": "always-multiline", "exports": "always-multiline",
"functions": "never" "functions": "never"
}], }],
"no-return-await": "off",
"no-constant-condition": "off",
"no-empty": ["error", { "allowEmptyCatch": true }], "no-empty": ["error", { "allowEmptyCatch": true }],
"no-underscore-dangle": "off", "no-underscore-dangle": "off",
"newline-per-chained-call": "off",
"no-console": "off", "no-console": "off",
"no-mixed-operators": ["error", { "allowSamePrecedence": true }], "no-mixed-operators": ["error", { "allowSamePrecedence": true }],
"strict": ["error", "global"], "strict": ["error", "global"],
@@ -37,13 +36,6 @@
"no-restricted-globals": "off", "no-restricted-globals": "off",
"function-paren-newline": "off", "function-paren-newline": "off",
"import/no-unresolved": "error", "import/no-unresolved": "error",
"quotes": ["error", "single", {
"avoidEscape": true,
"allowTemplateLiterals": true
}],
"no-else-return": [ "error", { "allowElseIf": true } ],
"operator-linebreak": [ "error", "after" ],
"arrow-parens": ["error", "as-needed", { "requireForBlockBody": true }],
// ES6 // ES6
"prefer-rest-params": "off", "prefer-rest-params": "off",

View File

@@ -10,11 +10,9 @@
- **NodeBB version:** - **NodeBB version:**
- **NodeBB git hash:** - **NodeBB git hash:**
<!-- (to find your git hash, execute `git rev-parse HEAD` from the main NodeBB directory) --> <!-- (to find your git hash, execute `git rev-parse HEAD` from the main NodeBB directory) -->
- **Installed NodeBB Plugins:** - **Database type:** mongo or redis
<!-- (to find installed plugins run ./nodebb plugins) -->
- **Database type:** mongo, redis, or postgres
- **Database version:** - **Database version:**
<!-- `mongod --version`, `redis-server --version`, or `postgres --version` --> <!-- `mongod --version` or `redis-server --version` -->
- **Exact steps to cause this issue:** - **Exact steps to cause this issue:**
<!-- <!--
1. First I did this... 1. First I did this...

View File

@@ -4,8 +4,6 @@
"maxerr" : 50, // {int} Maximum error before stopping "maxerr" : 50, // {int} Maximum error before stopping
"esversion": 6,
// Enforcing // Enforcing
"bitwise" : true, // true: Prohibit bitwise operators (&, |, ^, etc.) "bitwise" : true, // true: Prohibit bitwise operators (&, |, ^, etc.)
"camelcase" : false, // true: Identifiers must be in camelCase "camelcase" : false, // true: Identifiers must be in camelCase

View File

@@ -1,46 +1,32 @@
services: services:
- mongodb - mongodb
- redis-server - redis-server
- postgresql
before_install: before_install:
- cp install/package.json package.json - cp install/package.json package.json
- sudo apt-get update
- sudo apt-get --yes remove postgresql\*
- sudo apt-get install -y postgresql-12 postgresql-client-12
- sudo cp /etc/postgresql/{9.6,12}/main/pg_hba.conf
- sudo service postgresql restart 12
before_script: before_script:
- sleep 15 # wait for mongodb to be ready - sleep 15 # wait for mongodb to be ready
- "mongo mydb_test --eval 'db.createUser({user:\"travis\", pwd: \"test\", roles: []});'" - sh -c "if [ '$DB' = 'mongodb' ]; then node app --setup=\"{\\\"url\\\":\\\"http://127.0.0.1:4567\\\",\\\"secret\\\":\\\"abcdef\\\",\\\"database\\\":\\\"mongo\\\",\\\"mongo:host\\\":\\\"127.0.0.1\\\",\\\"mongo:port\\\":27017,\\\"mongo:username\\\":\\\"\\\",\\\"mongo:password\\\":\\\"\\\",\\\"mongo:database\\\":0,\\\"admin:username\\\":\\\"admin\\\",\\\"admin:email\\\":\\\"test@example.org\\\",\\\"admin:password\\\":\\\"abcdef\\\",\\\"admin:password:confirm\\\":\\\"abcdef\\\"}\" --ci=\"{\\\"host\\\":\\\"127.0.0.1\\\",\\\"port\\\":27017,\\\"database\\\":0}\"; fi"
- sh -c "if [ '$DB' = 'mongodb' ]; then node app --setup=\"{\\\"url\\\":\\\"http://127.0.0.1:4567\\\",\\\"secret\\\":\\\"abcdef\\\",\\\"database\\\":\\\"mongo\\\",\\\"mongo:host\\\":\\\"127.0.0.1\\\",\\\"mongo:port\\\":27017,\\\"mongo:username\\\":\\\"\\\",\\\"mongo:password\\\":\\\"\\\",\\\"mongo:database\\\":0,\\\"admin:username\\\":\\\"admin\\\",\\\"admin:email\\\":\\\"test@example.org\\\",\\\"admin:password\\\":\\\"hAN3Eg8W\\\",\\\"admin:password:confirm\\\":\\\"hAN3Eg8W\\\"}\" --ci=\"{\\\"host\\\":\\\"127.0.0.1\\\",\\\"port\\\":27017,\\\"database\\\":\\\"travis_ci_test\\\"}\"; fi" - sh -c "if [ '$DB' = 'redis' ]; then node app --setup=\"{\\\"url\\\":\\\"http://127.0.0.1:4567\\\",\\\"secret\\\":\\\"abcdef\\\",\\\"database\\\":\\\"redis\\\",\\\"redis:host\\\":\\\"127.0.0.1\\\",\\\"redis:port\\\":6379,\\\"redis:password\\\":\\\"\\\",\\\"redis:database\\\":0,\\\"admin:username\\\":\\\"admin\\\",\\\"admin:email\\\":\\\"test@example.org\\\",\\\"admin:password\\\":\\\"abcdef\\\",\\\"admin:password:confirm\\\":\\\"abcdef\\\"}\" --ci=\"{\\\"host\\\":\\\"127.0.0.1\\\",\\\"port\\\":6379,\\\"database\\\":0}\"; fi"
- sh -c "if [ '$DB' = 'redis' ]; then node app --setup=\"{\\\"url\\\":\\\"http://127.0.0.1:4567/forum\\\",\\\"secret\\\":\\\"abcdef\\\",\\\"database\\\":\\\"redis\\\",\\\"redis:host\\\":\\\"127.0.0.1\\\",\\\"redis:port\\\":6379,\\\"redis:password\\\":\\\"\\\",\\\"redis:database\\\":0,\\\"admin:username\\\":\\\"admin\\\",\\\"admin:email\\\":\\\"test@example.org\\\",\\\"admin:password\\\":\\\"hAN3Eg8W\\\",\\\"admin:password:confirm\\\":\\\"hAN3Eg8W\\\"}\" --ci=\"{\\\"host\\\":\\\"127.0.0.1\\\",\\\"port\\\":6379,\\\"database\\\":1}\"; fi"
- sh -c "if [ '$DB' = 'postgres' ]; then psql -c 'create database nodebb;' -U postgres; psql -c 'create database travis_ci_test;' -U postgres; node app --setup=\"{\\\"url\\\":\\\"http://127.0.0.1:4567\\\",\\\"secret\\\":\\\"abcdef\\\",\\\"database\\\":\\\"postgres\\\",\\\"postgres:host\\\":\\\"127.0.0.1\\\",\\\"postgres:port\\\":5432,\\\"postgres:password\\\":\\\"\\\",\\\"postgres:database\\\":\\\"nodebb\\\",\\\"admin:username\\\":\\\"admin\\\",\\\"admin:email\\\":\\\"test@example.org\\\",\\\"admin:password\\\":\\\"hAN3Eg8W\\\",\\\"admin:password:confirm\\\":\\\"hAN3Eg8W\\\"}\" --ci=\"{\\\"host\\\":\\\"127.0.0.1\\\",\\\"port\\\":5432,\\\"username\\\":\\\"postgres\\\",\\\"database\\\":\\\"travis_ci_test\\\"}\"; fi"
after_success: after_success:
- "npm run coveralls" - "npm run coveralls"
language: node_js language: node_js
sudo: false sudo: false
dist: xenial dist: trusty
env: env:
global: - CXX=g++-4.8 DB=mongodb
- PGUSER=postgres - CXX=g++-4.8 DB=redis
- PGPORT=5432
- CXX=g++-4.8
jobs:
- "DB=mongodb TEST_ENV=production"
- "DB=mongodb TEST_ENV=development"
- "DB=redis TEST_ENV=production"
- "DB=postgres TEST_ENV=production"
addons: addons:
apt: apt:
sources: sources:
- ubuntu-toolchain-r-test - ubuntu-toolchain-r-test
- mongodb-4.0-xenial - mongodb-3.4-trusty
packages: packages:
- g++-4.8 - g++-4.8
- mongodb-org-server - mongodb-org-server
node_js: node_js:
- "12"
- "10" - "10"
- "8"
- "6"
branches: branches:
only: only:
- master - master

View File

@@ -28,7 +28,6 @@ trans.it = public/language/it/category.json
trans.ja = public/language/ja/category.json trans.ja = public/language/ja/category.json
trans.ko = public/language/ko/category.json trans.ko = public/language/ko/category.json
trans.lt = public/language/lt/category.json trans.lt = public/language/lt/category.json
trans.lv = public/language/lv/category.json
trans.ms = public/language/ms/category.json trans.ms = public/language/ms/category.json
trans.nb = public/language/nb/category.json trans.nb = public/language/nb/category.json
trans.nl = public/language/nl/category.json trans.nl = public/language/nl/category.json
@@ -78,7 +77,6 @@ trans.it = public/language/it/login.json
trans.ja = public/language/ja/login.json trans.ja = public/language/ja/login.json
trans.ko = public/language/ko/login.json trans.ko = public/language/ko/login.json
trans.lt = public/language/lt/login.json trans.lt = public/language/lt/login.json
trans.lv = public/language/lv/login.json
trans.ms = public/language/ms/login.json trans.ms = public/language/ms/login.json
trans.nb = public/language/nb/login.json trans.nb = public/language/nb/login.json
trans.nl = public/language/nl/login.json trans.nl = public/language/nl/login.json
@@ -128,7 +126,6 @@ trans.it = public/language/it/recent.json
trans.ja = public/language/ja/recent.json trans.ja = public/language/ja/recent.json
trans.ko = public/language/ko/recent.json trans.ko = public/language/ko/recent.json
trans.lt = public/language/lt/recent.json trans.lt = public/language/lt/recent.json
trans.lv = public/language/lv/recent.json
trans.ms = public/language/ms/recent.json trans.ms = public/language/ms/recent.json
trans.nb = public/language/nb/recent.json trans.nb = public/language/nb/recent.json
trans.nl = public/language/nl/recent.json trans.nl = public/language/nl/recent.json
@@ -178,7 +175,6 @@ trans.it = public/language/it/unread.json
trans.ja = public/language/ja/unread.json trans.ja = public/language/ja/unread.json
trans.ko = public/language/ko/unread.json trans.ko = public/language/ko/unread.json
trans.lt = public/language/lt/unread.json trans.lt = public/language/lt/unread.json
trans.lv = public/language/lv/unread.json
trans.ms = public/language/ms/unread.json trans.ms = public/language/ms/unread.json
trans.nb = public/language/nb/unread.json trans.nb = public/language/nb/unread.json
trans.nl = public/language/nl/unread.json trans.nl = public/language/nl/unread.json
@@ -228,7 +224,6 @@ trans.it = public/language/it/modules.json
trans.ja = public/language/ja/modules.json trans.ja = public/language/ja/modules.json
trans.ko = public/language/ko/modules.json trans.ko = public/language/ko/modules.json
trans.lt = public/language/lt/modules.json trans.lt = public/language/lt/modules.json
trans.lv = public/language/lv/modules.json
trans.ms = public/language/ms/modules.json trans.ms = public/language/ms/modules.json
trans.nb = public/language/nb/modules.json trans.nb = public/language/nb/modules.json
trans.nl = public/language/nl/modules.json trans.nl = public/language/nl/modules.json
@@ -278,7 +273,6 @@ trans.it = public/language/it/register.json
trans.ja = public/language/ja/register.json trans.ja = public/language/ja/register.json
trans.ko = public/language/ko/register.json trans.ko = public/language/ko/register.json
trans.lt = public/language/lt/register.json trans.lt = public/language/lt/register.json
trans.lv = public/language/lv/register.json
trans.ms = public/language/ms/register.json trans.ms = public/language/ms/register.json
trans.nb = public/language/nb/register.json trans.nb = public/language/nb/register.json
trans.nl = public/language/nl/register.json trans.nl = public/language/nl/register.json
@@ -328,7 +322,6 @@ trans.it = public/language/it/user.json
trans.ja = public/language/ja/user.json trans.ja = public/language/ja/user.json
trans.ko = public/language/ko/user.json trans.ko = public/language/ko/user.json
trans.lt = public/language/lt/user.json trans.lt = public/language/lt/user.json
trans.lv = public/language/lv/user.json
trans.ms = public/language/ms/user.json trans.ms = public/language/ms/user.json
trans.nb = public/language/nb/user.json trans.nb = public/language/nb/user.json
trans.nl = public/language/nl/user.json trans.nl = public/language/nl/user.json
@@ -378,7 +371,6 @@ trans.it = public/language/it/global.json
trans.ja = public/language/ja/global.json trans.ja = public/language/ja/global.json
trans.ko = public/language/ko/global.json trans.ko = public/language/ko/global.json
trans.lt = public/language/lt/global.json trans.lt = public/language/lt/global.json
trans.lv = public/language/lv/global.json
trans.ms = public/language/ms/global.json trans.ms = public/language/ms/global.json
trans.nb = public/language/nb/global.json trans.nb = public/language/nb/global.json
trans.nl = public/language/nl/global.json trans.nl = public/language/nl/global.json
@@ -428,7 +420,6 @@ trans.it = public/language/it/notifications.json
trans.ja = public/language/ja/notifications.json trans.ja = public/language/ja/notifications.json
trans.ko = public/language/ko/notifications.json trans.ko = public/language/ko/notifications.json
trans.lt = public/language/lt/notifications.json trans.lt = public/language/lt/notifications.json
trans.lv = public/language/lv/notifications.json
trans.ms = public/language/ms/notifications.json trans.ms = public/language/ms/notifications.json
trans.nb = public/language/nb/notifications.json trans.nb = public/language/nb/notifications.json
trans.nl = public/language/nl/notifications.json trans.nl = public/language/nl/notifications.json
@@ -478,7 +469,6 @@ trans.it = public/language/it/reset_password.json
trans.ja = public/language/ja/reset_password.json trans.ja = public/language/ja/reset_password.json
trans.ko = public/language/ko/reset_password.json trans.ko = public/language/ko/reset_password.json
trans.lt = public/language/lt/reset_password.json trans.lt = public/language/lt/reset_password.json
trans.lv = public/language/lv/reset_password.json
trans.ms = public/language/ms/reset_password.json trans.ms = public/language/ms/reset_password.json
trans.nb = public/language/nb/reset_password.json trans.nb = public/language/nb/reset_password.json
trans.nl = public/language/nl/reset_password.json trans.nl = public/language/nl/reset_password.json
@@ -528,7 +518,6 @@ trans.it = public/language/it/users.json
trans.ja = public/language/ja/users.json trans.ja = public/language/ja/users.json
trans.ko = public/language/ko/users.json trans.ko = public/language/ko/users.json
trans.lt = public/language/lt/users.json trans.lt = public/language/lt/users.json
trans.lv = public/language/lv/users.json
trans.ms = public/language/ms/users.json trans.ms = public/language/ms/users.json
trans.nb = public/language/nb/users.json trans.nb = public/language/nb/users.json
trans.nl = public/language/nl/users.json trans.nl = public/language/nl/users.json
@@ -578,7 +567,6 @@ trans.it = public/language/it/language.json
trans.ja = public/language/ja/language.json trans.ja = public/language/ja/language.json
trans.ko = public/language/ko/language.json trans.ko = public/language/ko/language.json
trans.lt = public/language/lt/language.json trans.lt = public/language/lt/language.json
trans.lv = public/language/lv/language.json
trans.ms = public/language/ms/language.json trans.ms = public/language/ms/language.json
trans.nb = public/language/nb/language.json trans.nb = public/language/nb/language.json
trans.nl = public/language/nl/language.json trans.nl = public/language/nl/language.json
@@ -628,7 +616,6 @@ trans.it = public/language/it/pages.json
trans.ja = public/language/ja/pages.json trans.ja = public/language/ja/pages.json
trans.ko = public/language/ko/pages.json trans.ko = public/language/ko/pages.json
trans.lt = public/language/lt/pages.json trans.lt = public/language/lt/pages.json
trans.lv = public/language/lv/pages.json
trans.ms = public/language/ms/pages.json trans.ms = public/language/ms/pages.json
trans.nb = public/language/nb/pages.json trans.nb = public/language/nb/pages.json
trans.nl = public/language/nl/pages.json trans.nl = public/language/nl/pages.json
@@ -678,7 +665,6 @@ trans.it = public/language/it/topic.json
trans.ja = public/language/ja/topic.json trans.ja = public/language/ja/topic.json
trans.ko = public/language/ko/topic.json trans.ko = public/language/ko/topic.json
trans.lt = public/language/lt/topic.json trans.lt = public/language/lt/topic.json
trans.lv = public/language/lv/topic.json
trans.ms = public/language/ms/topic.json trans.ms = public/language/ms/topic.json
trans.nb = public/language/nb/topic.json trans.nb = public/language/nb/topic.json
trans.nl = public/language/nl/topic.json trans.nl = public/language/nl/topic.json
@@ -728,7 +714,6 @@ trans.it = public/language/it/success.json
trans.ja = public/language/ja/success.json trans.ja = public/language/ja/success.json
trans.ko = public/language/ko/success.json trans.ko = public/language/ko/success.json
trans.lt = public/language/lt/success.json trans.lt = public/language/lt/success.json
trans.lv = public/language/lv/success.json
trans.ms = public/language/ms/success.json trans.ms = public/language/ms/success.json
trans.nb = public/language/nb/success.json trans.nb = public/language/nb/success.json
trans.nl = public/language/nl/success.json trans.nl = public/language/nl/success.json
@@ -778,7 +763,6 @@ trans.it = public/language/it/error.json
trans.ja = public/language/ja/error.json trans.ja = public/language/ja/error.json
trans.ko = public/language/ko/error.json trans.ko = public/language/ko/error.json
trans.lt = public/language/lt/error.json trans.lt = public/language/lt/error.json
trans.lv = public/language/lv/error.json
trans.ms = public/language/ms/error.json trans.ms = public/language/ms/error.json
trans.nb = public/language/nb/error.json trans.nb = public/language/nb/error.json
trans.nl = public/language/nl/error.json trans.nl = public/language/nl/error.json
@@ -828,7 +812,6 @@ trans.it = public/language/it/flags.json
trans.ja = public/language/ja/flags.json trans.ja = public/language/ja/flags.json
trans.ko = public/language/ko/flags.json trans.ko = public/language/ko/flags.json
trans.lt = public/language/lt/flags.json trans.lt = public/language/lt/flags.json
trans.lv = public/language/lv/flags.json
trans.ms = public/language/ms/flags.json trans.ms = public/language/ms/flags.json
trans.nb = public/language/nb/flags.json trans.nb = public/language/nb/flags.json
trans.nl = public/language/nl/flags.json trans.nl = public/language/nl/flags.json
@@ -877,7 +860,6 @@ trans.it = public/language/it/tags.json
trans.ja = public/language/ja/tags.json trans.ja = public/language/ja/tags.json
trans.ko = public/language/ko/tags.json trans.ko = public/language/ko/tags.json
trans.lt = public/language/lt/tags.json trans.lt = public/language/lt/tags.json
trans.lv = public/language/lv/tags.json
trans.ms = public/language/ms/tags.json trans.ms = public/language/ms/tags.json
trans.nb = public/language/nb/tags.json trans.nb = public/language/nb/tags.json
trans.nl = public/language/nl/tags.json trans.nl = public/language/nl/tags.json
@@ -927,7 +909,6 @@ trans.it = public/language/it/email.json
trans.ja = public/language/ja/email.json trans.ja = public/language/ja/email.json
trans.ko = public/language/ko/email.json trans.ko = public/language/ko/email.json
trans.lt = public/language/lt/email.json trans.lt = public/language/lt/email.json
trans.lv = public/language/lv/email.json
trans.ms = public/language/ms/email.json trans.ms = public/language/ms/email.json
trans.nb = public/language/nb/email.json trans.nb = public/language/nb/email.json
trans.nl = public/language/nl/email.json trans.nl = public/language/nl/email.json
@@ -977,7 +958,6 @@ trans.it = public/language/it/search.json
trans.ja = public/language/ja/search.json trans.ja = public/language/ja/search.json
trans.ko = public/language/ko/search.json trans.ko = public/language/ko/search.json
trans.lt = public/language/lt/search.json trans.lt = public/language/lt/search.json
trans.lv = public/language/lv/search.json
trans.ms = public/language/ms/search.json trans.ms = public/language/ms/search.json
trans.nb = public/language/nb/search.json trans.nb = public/language/nb/search.json
trans.nl = public/language/nl/search.json trans.nl = public/language/nl/search.json
@@ -1027,7 +1007,6 @@ trans.it = public/language/it/groups.json
trans.ja = public/language/ja/groups.json trans.ja = public/language/ja/groups.json
trans.ko = public/language/ko/groups.json trans.ko = public/language/ko/groups.json
trans.lt = public/language/lt/groups.json trans.lt = public/language/lt/groups.json
trans.lv = public/language/lv/groups.json
trans.ms = public/language/ms/groups.json trans.ms = public/language/ms/groups.json
trans.nb = public/language/nb/groups.json trans.nb = public/language/nb/groups.json
trans.nl = public/language/nl/groups.json trans.nl = public/language/nl/groups.json
@@ -1077,7 +1056,6 @@ trans.it = public/language/it/uploads.json
trans.ja = public/language/ja/uploads.json trans.ja = public/language/ja/uploads.json
trans.ko = public/language/ko/uploads.json trans.ko = public/language/ko/uploads.json
trans.lt = public/language/lt/uploads.json trans.lt = public/language/lt/uploads.json
trans.lv = public/language/lv/uploads.json
trans.ms = public/language/ms/uploads.json trans.ms = public/language/ms/uploads.json
trans.nb = public/language/nb/uploads.json trans.nb = public/language/nb/uploads.json
trans.nl = public/language/nl/uploads.json trans.nl = public/language/nl/uploads.json
@@ -1127,7 +1105,6 @@ trans.it = public/language/it/admin/admin.json
trans.ja = public/language/ja/admin/admin.json trans.ja = public/language/ja/admin/admin.json
trans.ko = public/language/ko/admin/admin.json trans.ko = public/language/ko/admin/admin.json
trans.lt = public/language/lt/admin/admin.json trans.lt = public/language/lt/admin/admin.json
trans.lv = public/language/lv/admin/admin.json
trans.ms = public/language/ms/admin/admin.json trans.ms = public/language/ms/admin/admin.json
trans.nb = public/language/nb/admin/admin.json trans.nb = public/language/nb/admin/admin.json
trans.nl = public/language/nl/admin/admin.json trans.nl = public/language/nl/admin/admin.json
@@ -1177,7 +1154,6 @@ trans.it = public/language/it/admin/menu.json
trans.ja = public/language/ja/admin/menu.json trans.ja = public/language/ja/admin/menu.json
trans.ko = public/language/ko/admin/menu.json trans.ko = public/language/ko/admin/menu.json
trans.lt = public/language/lt/admin/menu.json trans.lt = public/language/lt/admin/menu.json
trans.lv = public/language/lv/admin/menu.json
trans.ms = public/language/ms/admin/menu.json trans.ms = public/language/ms/admin/menu.json
trans.nb = public/language/nb/admin/menu.json trans.nb = public/language/nb/admin/menu.json
trans.nl = public/language/nl/admin/menu.json trans.nl = public/language/nl/admin/menu.json
@@ -1227,7 +1203,6 @@ trans.it = public/language/it/admin/advanced/cache.json
trans.ja = public/language/ja/admin/advanced/cache.json trans.ja = public/language/ja/admin/advanced/cache.json
trans.ko = public/language/ko/admin/advanced/cache.json trans.ko = public/language/ko/admin/advanced/cache.json
trans.lt = public/language/lt/admin/advanced/cache.json trans.lt = public/language/lt/admin/advanced/cache.json
trans.lv = public/language/lv/admin/advanced/cache.json
trans.ms = public/language/ms/admin/advanced/cache.json trans.ms = public/language/ms/admin/advanced/cache.json
trans.nb = public/language/nb/admin/advanced/cache.json trans.nb = public/language/nb/admin/advanced/cache.json
trans.nl = public/language/nl/admin/advanced/cache.json trans.nl = public/language/nl/admin/advanced/cache.json
@@ -1277,7 +1252,6 @@ trans.it = public/language/it/admin/advanced/database.json
trans.ja = public/language/ja/admin/advanced/database.json trans.ja = public/language/ja/admin/advanced/database.json
trans.ko = public/language/ko/admin/advanced/database.json trans.ko = public/language/ko/admin/advanced/database.json
trans.lt = public/language/lt/admin/advanced/database.json trans.lt = public/language/lt/admin/advanced/database.json
trans.lv = public/language/lv/admin/advanced/database.json
trans.ms = public/language/ms/admin/advanced/database.json trans.ms = public/language/ms/admin/advanced/database.json
trans.nb = public/language/nb/admin/advanced/database.json trans.nb = public/language/nb/admin/advanced/database.json
trans.nl = public/language/nl/admin/advanced/database.json trans.nl = public/language/nl/admin/advanced/database.json
@@ -1327,7 +1301,6 @@ trans.it = public/language/it/admin/advanced/errors.json
trans.ja = public/language/ja/admin/advanced/errors.json trans.ja = public/language/ja/admin/advanced/errors.json
trans.ko = public/language/ko/admin/advanced/errors.json trans.ko = public/language/ko/admin/advanced/errors.json
trans.lt = public/language/lt/admin/advanced/errors.json trans.lt = public/language/lt/admin/advanced/errors.json
trans.lv = public/language/lv/admin/advanced/errors.json
trans.ms = public/language/ms/admin/advanced/errors.json trans.ms = public/language/ms/admin/advanced/errors.json
trans.nb = public/language/nb/admin/advanced/errors.json trans.nb = public/language/nb/admin/advanced/errors.json
trans.nl = public/language/nl/admin/advanced/errors.json trans.nl = public/language/nl/admin/advanced/errors.json
@@ -1377,7 +1350,6 @@ trans.it = public/language/it/admin/advanced/events.json
trans.ja = public/language/ja/admin/advanced/events.json trans.ja = public/language/ja/admin/advanced/events.json
trans.ko = public/language/ko/admin/advanced/events.json trans.ko = public/language/ko/admin/advanced/events.json
trans.lt = public/language/lt/admin/advanced/events.json trans.lt = public/language/lt/admin/advanced/events.json
trans.lv = public/language/lv/admin/advanced/events.json
trans.ms = public/language/ms/admin/advanced/events.json trans.ms = public/language/ms/admin/advanced/events.json
trans.nb = public/language/nb/admin/advanced/events.json trans.nb = public/language/nb/admin/advanced/events.json
trans.nl = public/language/nl/admin/advanced/events.json trans.nl = public/language/nl/admin/advanced/events.json
@@ -1427,7 +1399,6 @@ trans.it = public/language/it/admin/advanced/logs.json
trans.ja = public/language/ja/admin/advanced/logs.json trans.ja = public/language/ja/admin/advanced/logs.json
trans.ko = public/language/ko/admin/advanced/logs.json trans.ko = public/language/ko/admin/advanced/logs.json
trans.lt = public/language/lt/admin/advanced/logs.json trans.lt = public/language/lt/admin/advanced/logs.json
trans.lv = public/language/lv/admin/advanced/logs.json
trans.ms = public/language/ms/admin/advanced/logs.json trans.ms = public/language/ms/admin/advanced/logs.json
trans.nb = public/language/nb/admin/advanced/logs.json trans.nb = public/language/nb/admin/advanced/logs.json
trans.nl = public/language/nl/admin/advanced/logs.json trans.nl = public/language/nl/admin/advanced/logs.json
@@ -1477,7 +1448,6 @@ trans.it = public/language/it/admin/appearance/customise.json
trans.ja = public/language/ja/admin/appearance/customise.json trans.ja = public/language/ja/admin/appearance/customise.json
trans.ko = public/language/ko/admin/appearance/customise.json trans.ko = public/language/ko/admin/appearance/customise.json
trans.lt = public/language/lt/admin/appearance/customise.json trans.lt = public/language/lt/admin/appearance/customise.json
trans.lv = public/language/lv/admin/appearance/customise.json
trans.ms = public/language/ms/admin/appearance/customise.json trans.ms = public/language/ms/admin/appearance/customise.json
trans.nb = public/language/nb/admin/appearance/customise.json trans.nb = public/language/nb/admin/appearance/customise.json
trans.nl = public/language/nl/admin/appearance/customise.json trans.nl = public/language/nl/admin/appearance/customise.json
@@ -1527,7 +1497,6 @@ trans.it = public/language/it/admin/appearance/skins.json
trans.ja = public/language/ja/admin/appearance/skins.json trans.ja = public/language/ja/admin/appearance/skins.json
trans.ko = public/language/ko/admin/appearance/skins.json trans.ko = public/language/ko/admin/appearance/skins.json
trans.lt = public/language/lt/admin/appearance/skins.json trans.lt = public/language/lt/admin/appearance/skins.json
trans.lv = public/language/lv/admin/appearance/skins.json
trans.ms = public/language/ms/admin/appearance/skins.json trans.ms = public/language/ms/admin/appearance/skins.json
trans.nb = public/language/nb/admin/appearance/skins.json trans.nb = public/language/nb/admin/appearance/skins.json
trans.nl = public/language/nl/admin/appearance/skins.json trans.nl = public/language/nl/admin/appearance/skins.json
@@ -1577,7 +1546,6 @@ trans.it = public/language/it/admin/appearance/themes.json
trans.ja = public/language/ja/admin/appearance/themes.json trans.ja = public/language/ja/admin/appearance/themes.json
trans.ko = public/language/ko/admin/appearance/themes.json trans.ko = public/language/ko/admin/appearance/themes.json
trans.lt = public/language/lt/admin/appearance/themes.json trans.lt = public/language/lt/admin/appearance/themes.json
trans.lv = public/language/lv/admin/appearance/themes.json
trans.ms = public/language/ms/admin/appearance/themes.json trans.ms = public/language/ms/admin/appearance/themes.json
trans.nb = public/language/nb/admin/appearance/themes.json trans.nb = public/language/nb/admin/appearance/themes.json
trans.nl = public/language/nl/admin/appearance/themes.json trans.nl = public/language/nl/admin/appearance/themes.json
@@ -1627,7 +1595,6 @@ trans.it = public/language/it/admin/development/info.json
trans.ja = public/language/ja/admin/development/info.json trans.ja = public/language/ja/admin/development/info.json
trans.ko = public/language/ko/admin/development/info.json trans.ko = public/language/ko/admin/development/info.json
trans.lt = public/language/lt/admin/development/info.json trans.lt = public/language/lt/admin/development/info.json
trans.lv = public/language/lv/admin/development/info.json
trans.ms = public/language/ms/admin/development/info.json trans.ms = public/language/ms/admin/development/info.json
trans.nb = public/language/nb/admin/development/info.json trans.nb = public/language/nb/admin/development/info.json
trans.nl = public/language/nl/admin/development/info.json trans.nl = public/language/nl/admin/development/info.json
@@ -1677,7 +1644,6 @@ trans.it = public/language/it/admin/development/logger.json
trans.ja = public/language/ja/admin/development/logger.json trans.ja = public/language/ja/admin/development/logger.json
trans.ko = public/language/ko/admin/development/logger.json trans.ko = public/language/ko/admin/development/logger.json
trans.lt = public/language/lt/admin/development/logger.json trans.lt = public/language/lt/admin/development/logger.json
trans.lv = public/language/lv/admin/development/logger.json
trans.ms = public/language/ms/admin/development/logger.json trans.ms = public/language/ms/admin/development/logger.json
trans.nb = public/language/nb/admin/development/logger.json trans.nb = public/language/nb/admin/development/logger.json
trans.nl = public/language/nl/admin/development/logger.json trans.nl = public/language/nl/admin/development/logger.json
@@ -1727,7 +1693,6 @@ trans.it = public/language/it/admin/extend/plugins.json
trans.ja = public/language/ja/admin/extend/plugins.json trans.ja = public/language/ja/admin/extend/plugins.json
trans.ko = public/language/ko/admin/extend/plugins.json trans.ko = public/language/ko/admin/extend/plugins.json
trans.lt = public/language/lt/admin/extend/plugins.json trans.lt = public/language/lt/admin/extend/plugins.json
trans.lv = public/language/lv/admin/extend/plugins.json
trans.ms = public/language/ms/admin/extend/plugins.json trans.ms = public/language/ms/admin/extend/plugins.json
trans.nb = public/language/nb/admin/extend/plugins.json trans.nb = public/language/nb/admin/extend/plugins.json
trans.nl = public/language/nl/admin/extend/plugins.json trans.nl = public/language/nl/admin/extend/plugins.json
@@ -1777,7 +1742,6 @@ trans.it = public/language/it/admin/extend/rewards.json
trans.ja = public/language/ja/admin/extend/rewards.json trans.ja = public/language/ja/admin/extend/rewards.json
trans.ko = public/language/ko/admin/extend/rewards.json trans.ko = public/language/ko/admin/extend/rewards.json
trans.lt = public/language/lt/admin/extend/rewards.json trans.lt = public/language/lt/admin/extend/rewards.json
trans.lv = public/language/lv/admin/extend/rewards.json
trans.ms = public/language/ms/admin/extend/rewards.json trans.ms = public/language/ms/admin/extend/rewards.json
trans.nb = public/language/nb/admin/extend/rewards.json trans.nb = public/language/nb/admin/extend/rewards.json
trans.nl = public/language/nl/admin/extend/rewards.json trans.nl = public/language/nl/admin/extend/rewards.json
@@ -1827,7 +1791,6 @@ trans.it = public/language/it/admin/extend/widgets.json
trans.ja = public/language/ja/admin/extend/widgets.json trans.ja = public/language/ja/admin/extend/widgets.json
trans.ko = public/language/ko/admin/extend/widgets.json trans.ko = public/language/ko/admin/extend/widgets.json
trans.lt = public/language/lt/admin/extend/widgets.json trans.lt = public/language/lt/admin/extend/widgets.json
trans.lv = public/language/lv/admin/extend/widgets.json
trans.ms = public/language/ms/admin/extend/widgets.json trans.ms = public/language/ms/admin/extend/widgets.json
trans.nb = public/language/nb/admin/extend/widgets.json trans.nb = public/language/nb/admin/extend/widgets.json
trans.nl = public/language/nl/admin/extend/widgets.json trans.nl = public/language/nl/admin/extend/widgets.json
@@ -1877,7 +1840,6 @@ trans.it = public/language/it/admin/general/dashboard.json
trans.ja = public/language/ja/admin/general/dashboard.json trans.ja = public/language/ja/admin/general/dashboard.json
trans.ko = public/language/ko/admin/general/dashboard.json trans.ko = public/language/ko/admin/general/dashboard.json
trans.lt = public/language/lt/admin/general/dashboard.json trans.lt = public/language/lt/admin/general/dashboard.json
trans.lv = public/language/lv/admin/general/dashboard.json
trans.ms = public/language/ms/admin/general/dashboard.json trans.ms = public/language/ms/admin/general/dashboard.json
trans.nb = public/language/nb/admin/general/dashboard.json trans.nb = public/language/nb/admin/general/dashboard.json
trans.nl = public/language/nl/admin/general/dashboard.json trans.nl = public/language/nl/admin/general/dashboard.json
@@ -1927,7 +1889,6 @@ trans.it = public/language/it/admin/general/homepage.json
trans.ja = public/language/ja/admin/general/homepage.json trans.ja = public/language/ja/admin/general/homepage.json
trans.ko = public/language/ko/admin/general/homepage.json trans.ko = public/language/ko/admin/general/homepage.json
trans.lt = public/language/lt/admin/general/homepage.json trans.lt = public/language/lt/admin/general/homepage.json
trans.lv = public/language/lv/admin/general/homepage.json
trans.ms = public/language/ms/admin/general/homepage.json trans.ms = public/language/ms/admin/general/homepage.json
trans.nb = public/language/nb/admin/general/homepage.json trans.nb = public/language/nb/admin/general/homepage.json
trans.nl = public/language/nl/admin/general/homepage.json trans.nl = public/language/nl/admin/general/homepage.json
@@ -1977,7 +1938,6 @@ trans.it = public/language/it/admin/general/languages.json
trans.ja = public/language/ja/admin/general/languages.json trans.ja = public/language/ja/admin/general/languages.json
trans.ko = public/language/ko/admin/general/languages.json trans.ko = public/language/ko/admin/general/languages.json
trans.lt = public/language/lt/admin/general/languages.json trans.lt = public/language/lt/admin/general/languages.json
trans.lv = public/language/lv/admin/general/languages.json
trans.ms = public/language/ms/admin/general/languages.json trans.ms = public/language/ms/admin/general/languages.json
trans.nb = public/language/nb/admin/general/languages.json trans.nb = public/language/nb/admin/general/languages.json
trans.nl = public/language/nl/admin/general/languages.json trans.nl = public/language/nl/admin/general/languages.json
@@ -2027,7 +1987,6 @@ trans.it = public/language/it/admin/general/navigation.json
trans.ja = public/language/ja/admin/general/navigation.json trans.ja = public/language/ja/admin/general/navigation.json
trans.ko = public/language/ko/admin/general/navigation.json trans.ko = public/language/ko/admin/general/navigation.json
trans.lt = public/language/lt/admin/general/navigation.json trans.lt = public/language/lt/admin/general/navigation.json
trans.lv = public/language/lv/admin/general/navigation.json
trans.ms = public/language/ms/admin/general/navigation.json trans.ms = public/language/ms/admin/general/navigation.json
trans.nb = public/language/nb/admin/general/navigation.json trans.nb = public/language/nb/admin/general/navigation.json
trans.nl = public/language/nl/admin/general/navigation.json trans.nl = public/language/nl/admin/general/navigation.json
@@ -2077,7 +2036,6 @@ trans.it = public/language/it/admin/general/social.json
trans.ja = public/language/ja/admin/general/social.json trans.ja = public/language/ja/admin/general/social.json
trans.ko = public/language/ko/admin/general/social.json trans.ko = public/language/ko/admin/general/social.json
trans.lt = public/language/lt/admin/general/social.json trans.lt = public/language/lt/admin/general/social.json
trans.lv = public/language/lv/admin/general/social.json
trans.ms = public/language/ms/admin/general/social.json trans.ms = public/language/ms/admin/general/social.json
trans.nb = public/language/nb/admin/general/social.json trans.nb = public/language/nb/admin/general/social.json
trans.nl = public/language/nl/admin/general/social.json trans.nl = public/language/nl/admin/general/social.json
@@ -2127,7 +2085,6 @@ trans.it = public/language/it/admin/general/sounds.json
trans.ja = public/language/ja/admin/general/sounds.json trans.ja = public/language/ja/admin/general/sounds.json
trans.ko = public/language/ko/admin/general/sounds.json trans.ko = public/language/ko/admin/general/sounds.json
trans.lt = public/language/lt/admin/general/sounds.json trans.lt = public/language/lt/admin/general/sounds.json
trans.lv = public/language/lv/admin/general/sounds.json
trans.ms = public/language/ms/admin/general/sounds.json trans.ms = public/language/ms/admin/general/sounds.json
trans.nb = public/language/nb/admin/general/sounds.json trans.nb = public/language/nb/admin/general/sounds.json
trans.nl = public/language/nl/admin/general/sounds.json trans.nl = public/language/nl/admin/general/sounds.json
@@ -2177,7 +2134,6 @@ trans.it = public/language/it/admin/manage/admins-mods.json
trans.ja = public/language/ja/admin/manage/admins-mods.json trans.ja = public/language/ja/admin/manage/admins-mods.json
trans.ko = public/language/ko/admin/manage/admins-mods.json trans.ko = public/language/ko/admin/manage/admins-mods.json
trans.lt = public/language/lt/admin/manage/admins-mods.json trans.lt = public/language/lt/admin/manage/admins-mods.json
trans.lv = public/language/lv/admin/manage/admins-mods.json
trans.ms = public/language/ms/admin/manage/admins-mods.json trans.ms = public/language/ms/admin/manage/admins-mods.json
trans.nb = public/language/nb/admin/manage/admins-mods.json trans.nb = public/language/nb/admin/manage/admins-mods.json
trans.nl = public/language/nl/admin/manage/admins-mods.json trans.nl = public/language/nl/admin/manage/admins-mods.json
@@ -2227,7 +2183,6 @@ trans.it = public/language/it/admin/manage/categories.json
trans.ja = public/language/ja/admin/manage/categories.json trans.ja = public/language/ja/admin/manage/categories.json
trans.ko = public/language/ko/admin/manage/categories.json trans.ko = public/language/ko/admin/manage/categories.json
trans.lt = public/language/lt/admin/manage/categories.json trans.lt = public/language/lt/admin/manage/categories.json
trans.lv = public/language/lv/admin/manage/categories.json
trans.ms = public/language/ms/admin/manage/categories.json trans.ms = public/language/ms/admin/manage/categories.json
trans.nb = public/language/nb/admin/manage/categories.json trans.nb = public/language/nb/admin/manage/categories.json
trans.nl = public/language/nl/admin/manage/categories.json trans.nl = public/language/nl/admin/manage/categories.json
@@ -2277,7 +2232,6 @@ trans.it = public/language/it/admin/manage/groups.json
trans.ja = public/language/ja/admin/manage/groups.json trans.ja = public/language/ja/admin/manage/groups.json
trans.ko = public/language/ko/admin/manage/groups.json trans.ko = public/language/ko/admin/manage/groups.json
trans.lt = public/language/lt/admin/manage/groups.json trans.lt = public/language/lt/admin/manage/groups.json
trans.lv = public/language/lv/admin/manage/groups.json
trans.ms = public/language/ms/admin/manage/groups.json trans.ms = public/language/ms/admin/manage/groups.json
trans.nb = public/language/nb/admin/manage/groups.json trans.nb = public/language/nb/admin/manage/groups.json
trans.nl = public/language/nl/admin/manage/groups.json trans.nl = public/language/nl/admin/manage/groups.json
@@ -2327,7 +2281,6 @@ trans.it = public/language/it/admin/manage/ip-blacklist.json
trans.ja = public/language/ja/admin/manage/ip-blacklist.json trans.ja = public/language/ja/admin/manage/ip-blacklist.json
trans.ko = public/language/ko/admin/manage/ip-blacklist.json trans.ko = public/language/ko/admin/manage/ip-blacklist.json
trans.lt = public/language/lt/admin/manage/ip-blacklist.json trans.lt = public/language/lt/admin/manage/ip-blacklist.json
trans.lv = public/language/lv/admin/manage/ip-blacklist.json
trans.ms = public/language/ms/admin/manage/ip-blacklist.json trans.ms = public/language/ms/admin/manage/ip-blacklist.json
trans.nb = public/language/nb/admin/manage/ip-blacklist.json trans.nb = public/language/nb/admin/manage/ip-blacklist.json
trans.nl = public/language/nl/admin/manage/ip-blacklist.json trans.nl = public/language/nl/admin/manage/ip-blacklist.json
@@ -2377,7 +2330,6 @@ trans.it = public/language/it/admin/manage/privileges.json
trans.ja = public/language/ja/admin/manage/privileges.json trans.ja = public/language/ja/admin/manage/privileges.json
trans.ko = public/language/ko/admin/manage/privileges.json trans.ko = public/language/ko/admin/manage/privileges.json
trans.lt = public/language/lt/admin/manage/privileges.json trans.lt = public/language/lt/admin/manage/privileges.json
trans.lv = public/language/lv/admin/manage/privileges.json
trans.ms = public/language/ms/admin/manage/privileges.json trans.ms = public/language/ms/admin/manage/privileges.json
trans.nb = public/language/nb/admin/manage/privileges.json trans.nb = public/language/nb/admin/manage/privileges.json
trans.nl = public/language/nl/admin/manage/privileges.json trans.nl = public/language/nl/admin/manage/privileges.json
@@ -2427,7 +2379,6 @@ trans.it = public/language/it/admin/manage/post-queue.json
trans.ja = public/language/ja/admin/manage/post-queue.json trans.ja = public/language/ja/admin/manage/post-queue.json
trans.ko = public/language/ko/admin/manage/post-queue.json trans.ko = public/language/ko/admin/manage/post-queue.json
trans.lt = public/language/lt/admin/manage/post-queue.json trans.lt = public/language/lt/admin/manage/post-queue.json
trans.lv = public/language/lv/admin/manage/post-queue.json
trans.ms = public/language/ms/admin/manage/post-queue.json trans.ms = public/language/ms/admin/manage/post-queue.json
trans.nb = public/language/nb/admin/manage/post-queue.json trans.nb = public/language/nb/admin/manage/post-queue.json
trans.nl = public/language/nl/admin/manage/post-queue.json trans.nl = public/language/nl/admin/manage/post-queue.json
@@ -2477,7 +2428,6 @@ trans.it = public/language/it/admin/manage/registration.json
trans.ja = public/language/ja/admin/manage/registration.json trans.ja = public/language/ja/admin/manage/registration.json
trans.ko = public/language/ko/admin/manage/registration.json trans.ko = public/language/ko/admin/manage/registration.json
trans.lt = public/language/lt/admin/manage/registration.json trans.lt = public/language/lt/admin/manage/registration.json
trans.lv = public/language/lv/admin/manage/registration.json
trans.ms = public/language/ms/admin/manage/registration.json trans.ms = public/language/ms/admin/manage/registration.json
trans.nb = public/language/nb/admin/manage/registration.json trans.nb = public/language/nb/admin/manage/registration.json
trans.nl = public/language/nl/admin/manage/registration.json trans.nl = public/language/nl/admin/manage/registration.json
@@ -2527,7 +2477,6 @@ trans.it = public/language/it/admin/manage/tags.json
trans.ja = public/language/ja/admin/manage/tags.json trans.ja = public/language/ja/admin/manage/tags.json
trans.ko = public/language/ko/admin/manage/tags.json trans.ko = public/language/ko/admin/manage/tags.json
trans.lt = public/language/lt/admin/manage/tags.json trans.lt = public/language/lt/admin/manage/tags.json
trans.lv = public/language/lv/admin/manage/tags.json
trans.ms = public/language/ms/admin/manage/tags.json trans.ms = public/language/ms/admin/manage/tags.json
trans.nb = public/language/nb/admin/manage/tags.json trans.nb = public/language/nb/admin/manage/tags.json
trans.nl = public/language/nl/admin/manage/tags.json trans.nl = public/language/nl/admin/manage/tags.json
@@ -2550,56 +2499,6 @@ trans.zh_CN = public/language/zh-CN/admin/manage/tags.json
trans.zh_TW = public/language/zh-TW/admin/manage/tags.json trans.zh_TW = public/language/zh-TW/admin/manage/tags.json
type = KEYVALUEJSON type = KEYVALUEJSON
[nodebb.admin-manage-uploads]
file_filter = public/language/<lang>/admin/manage/uploads.json
source_file = public/language/en-GB/admin/manage/uploads.json
source_lang = en_GB
trans.ar = public/language/ar/admin/manage/uploads.json
trans.bg = public/language/bg/admin/manage/uploads.json
trans.bn = public/language/bn/admin/manage/uploads.json
trans.cs = public/language/cs/admin/manage/uploads.json
trans.da = public/language/da/admin/manage/uploads.json
trans.de = public/language/de/admin/manage/uploads.json
trans.el = public/language/el/admin/manage/uploads.json
trans.en@pirate = public/language/en-x-pirate/admin/manage/uploads.json
trans.en_US = public/language/en-US/admin/manage/uploads.json
trans.es = public/language/es/admin/manage/uploads.json
trans.et = public/language/et/admin/manage/uploads.json
trans.fa_IR = public/language/fa-IR/admin/manage/uploads.json
trans.fi = public/language/fi/admin/manage/uploads.json
trans.fr = public/language/fr/admin/manage/uploads.json
trans.gl = public/language/gl/admin/manage/uploads.json
trans.he = public/language/he/admin/manage/uploads.json
trans.hr = public/language/hr/admin/manage/uploads.json
trans.hu = public/language/hu/admin/manage/uploads.json
trans.id = public/language/id/admin/manage/uploads.json
trans.it = public/language/it/admin/manage/uploads.json
trans.ja = public/language/ja/admin/manage/uploads.json
trans.ko = public/language/ko/admin/manage/uploads.json
trans.lt = public/language/lt/admin/manage/uploads.json
trans.lv = public/language/lv/admin/manage/uploads.json
trans.ms = public/language/ms/admin/manage/uploads.json
trans.nb = public/language/nb/admin/manage/uploads.json
trans.nl = public/language/nl/admin/manage/uploads.json
trans.pl = public/language/pl/admin/manage/uploads.json
trans.pt_BR = public/language/pt-BR/admin/manage/uploads.json
trans.pt_PT = public/language/pt-PT/admin/manage/uploads.json
trans.ro = public/language/ro/admin/manage/uploads.json
trans.ru = public/language/ru/admin/manage/uploads.json
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.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
trans.tr = public/language/tr/admin/manage/uploads.json
trans.uk = public/language/uk/admin/manage/uploads.json
trans.vi = public/language/vi/admin/manage/uploads.json
trans.zh_CN = public/language/zh-CN/admin/manage/uploads.json
trans.zh_TW = public/language/zh-TW/admin/manage/uploads.json
type = KEYVALUEJSON
[nodebb.admin-manage-users] [nodebb.admin-manage-users]
file_filter = public/language/<lang>/admin/manage/users.json file_filter = public/language/<lang>/admin/manage/users.json
source_file = public/language/en-GB/admin/manage/users.json source_file = public/language/en-GB/admin/manage/users.json
@@ -2627,7 +2526,6 @@ trans.it = public/language/it/admin/manage/users.json
trans.ja = public/language/ja/admin/manage/users.json trans.ja = public/language/ja/admin/manage/users.json
trans.ko = public/language/ko/admin/manage/users.json trans.ko = public/language/ko/admin/manage/users.json
trans.lt = public/language/lt/admin/manage/users.json trans.lt = public/language/lt/admin/manage/users.json
trans.lv = public/language/lv/admin/manage/users.json
trans.ms = public/language/ms/admin/manage/users.json trans.ms = public/language/ms/admin/manage/users.json
trans.nb = public/language/nb/admin/manage/users.json trans.nb = public/language/nb/admin/manage/users.json
trans.nl = public/language/nl/admin/manage/users.json trans.nl = public/language/nl/admin/manage/users.json
@@ -2650,56 +2548,6 @@ trans.zh_CN = public/language/zh-CN/admin/manage/users.json
trans.zh_TW = public/language/zh-TW/admin/manage/users.json trans.zh_TW = public/language/zh-TW/admin/manage/users.json
type = KEYVALUEJSON type = KEYVALUEJSON
[nodebb.admin-manage-digest]
file_filter = public/language/<lang>/admin/manage/digest.json
source_file = public/language/en-GB/admin/manage/digest.json
source_lang = en_GB
trans.ar = public/language/ar/admin/manage/digest.json
trans.bg = public/language/bg/admin/manage/digest.json
trans.bn = public/language/bn/admin/manage/digest.json
trans.cs = public/language/cs/admin/manage/digest.json
trans.da = public/language/da/admin/manage/digest.json
trans.de = public/language/de/admin/manage/digest.json
trans.el = public/language/el/admin/manage/digest.json
trans.en@pirate = public/language/en-x-pirate/admin/manage/digest.json
trans.en_US = public/language/en-US/admin/manage/digest.json
trans.es = public/language/es/admin/manage/digest.json
trans.et = public/language/et/admin/manage/digest.json
trans.fa_IR = public/language/fa-IR/admin/manage/digest.json
trans.fi = public/language/fi/admin/manage/digest.json
trans.fr = public/language/fr/admin/manage/digest.json
trans.gl = public/language/gl/admin/manage/digest.json
trans.he = public/language/he/admin/manage/digest.json
trans.hr = public/language/hr/admin/manage/digest.json
trans.hu = public/language/hu/admin/manage/digest.json
trans.id = public/language/id/admin/manage/digest.json
trans.it = public/language/it/admin/manage/digest.json
trans.ja = public/language/ja/admin/manage/digest.json
trans.ko = public/language/ko/admin/manage/digest.json
trans.lt = public/language/lt/admin/manage/digest.json
trans.lv = public/language/lv/admin/manage/digest.json
trans.ms = public/language/ms/admin/manage/digest.json
trans.nb = public/language/nb/admin/manage/digest.json
trans.nl = public/language/nl/admin/manage/digest.json
trans.pl = public/language/pl/admin/manage/digest.json
trans.pt_BR = public/language/pt-BR/admin/manage/digest.json
trans.pt_PT = public/language/pt-PT/admin/manage/digest.json
trans.ro = public/language/ro/admin/manage/digest.json
trans.ru = public/language/ru/admin/manage/digest.json
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.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
trans.tr = public/language/tr/admin/manage/digest.json
trans.uk = public/language/uk/admin/manage/digest.json
trans.vi = public/language/vi/admin/manage/digest.json
trans.zh_CN = public/language/zh-CN/admin/manage/digest.json
trans.zh_TW = public/language/zh-TW/admin/manage/digest.json
type = KEYVALUEJSON
[nodebb.admin-settings-advanced] [nodebb.admin-settings-advanced]
file_filter = public/language/<lang>/admin/settings/advanced.json file_filter = public/language/<lang>/admin/settings/advanced.json
source_file = public/language/en-GB/admin/settings/advanced.json source_file = public/language/en-GB/admin/settings/advanced.json
@@ -2727,7 +2575,6 @@ trans.it = public/language/it/admin/settings/advanced.json
trans.ja = public/language/ja/admin/settings/advanced.json trans.ja = public/language/ja/admin/settings/advanced.json
trans.ko = public/language/ko/admin/settings/advanced.json trans.ko = public/language/ko/admin/settings/advanced.json
trans.lt = public/language/lt/admin/settings/advanced.json trans.lt = public/language/lt/admin/settings/advanced.json
trans.lv = public/language/lv/admin/settings/advanced.json
trans.ms = public/language/ms/admin/settings/advanced.json trans.ms = public/language/ms/admin/settings/advanced.json
trans.nb = public/language/nb/admin/settings/advanced.json trans.nb = public/language/nb/admin/settings/advanced.json
trans.nl = public/language/nl/admin/settings/advanced.json trans.nl = public/language/nl/admin/settings/advanced.json
@@ -2777,7 +2624,6 @@ trans.it = public/language/it/admin/settings/cookies.json
trans.ja = public/language/ja/admin/settings/cookies.json trans.ja = public/language/ja/admin/settings/cookies.json
trans.ko = public/language/ko/admin/settings/cookies.json trans.ko = public/language/ko/admin/settings/cookies.json
trans.lt = public/language/lt/admin/settings/cookies.json trans.lt = public/language/lt/admin/settings/cookies.json
trans.lv = public/language/lv/admin/settings/cookies.json
trans.ms = public/language/ms/admin/settings/cookies.json trans.ms = public/language/ms/admin/settings/cookies.json
trans.nb = public/language/nb/admin/settings/cookies.json trans.nb = public/language/nb/admin/settings/cookies.json
trans.nl = public/language/nl/admin/settings/cookies.json trans.nl = public/language/nl/admin/settings/cookies.json
@@ -2827,7 +2673,6 @@ trans.it = public/language/it/admin/settings/general.json
trans.ja = public/language/ja/admin/settings/general.json trans.ja = public/language/ja/admin/settings/general.json
trans.ko = public/language/ko/admin/settings/general.json trans.ko = public/language/ko/admin/settings/general.json
trans.lt = public/language/lt/admin/settings/general.json trans.lt = public/language/lt/admin/settings/general.json
trans.lv = public/language/lv/admin/settings/general.json
trans.ms = public/language/ms/admin/settings/general.json trans.ms = public/language/ms/admin/settings/general.json
trans.nb = public/language/nb/admin/settings/general.json trans.nb = public/language/nb/admin/settings/general.json
trans.nl = public/language/nl/admin/settings/general.json trans.nl = public/language/nl/admin/settings/general.json
@@ -2877,7 +2722,6 @@ trans.it = public/language/it/admin/settings/guest.json
trans.ja = public/language/ja/admin/settings/guest.json trans.ja = public/language/ja/admin/settings/guest.json
trans.ko = public/language/ko/admin/settings/guest.json trans.ko = public/language/ko/admin/settings/guest.json
trans.lt = public/language/lt/admin/settings/guest.json trans.lt = public/language/lt/admin/settings/guest.json
trans.lv = public/language/lv/admin/settings/guest.json
trans.ms = public/language/ms/admin/settings/guest.json trans.ms = public/language/ms/admin/settings/guest.json
trans.nb = public/language/nb/admin/settings/guest.json trans.nb = public/language/nb/admin/settings/guest.json
trans.nl = public/language/nl/admin/settings/guest.json trans.nl = public/language/nl/admin/settings/guest.json
@@ -2927,7 +2771,6 @@ trans.it = public/language/it/admin/settings/pagination.json
trans.ja = public/language/ja/admin/settings/pagination.json trans.ja = public/language/ja/admin/settings/pagination.json
trans.ko = public/language/ko/admin/settings/pagination.json trans.ko = public/language/ko/admin/settings/pagination.json
trans.lt = public/language/lt/admin/settings/pagination.json trans.lt = public/language/lt/admin/settings/pagination.json
trans.lv = public/language/lv/admin/settings/pagination.json
trans.ms = public/language/ms/admin/settings/pagination.json trans.ms = public/language/ms/admin/settings/pagination.json
trans.nb = public/language/nb/admin/settings/pagination.json trans.nb = public/language/nb/admin/settings/pagination.json
trans.nl = public/language/nl/admin/settings/pagination.json trans.nl = public/language/nl/admin/settings/pagination.json
@@ -2977,7 +2820,6 @@ trans.it = public/language/it/admin/settings/reputation.json
trans.ja = public/language/ja/admin/settings/reputation.json trans.ja = public/language/ja/admin/settings/reputation.json
trans.ko = public/language/ko/admin/settings/reputation.json trans.ko = public/language/ko/admin/settings/reputation.json
trans.lt = public/language/lt/admin/settings/reputation.json trans.lt = public/language/lt/admin/settings/reputation.json
trans.lv = public/language/lv/admin/settings/reputation.json
trans.ms = public/language/ms/admin/settings/reputation.json trans.ms = public/language/ms/admin/settings/reputation.json
trans.nb = public/language/nb/admin/settings/reputation.json trans.nb = public/language/nb/admin/settings/reputation.json
trans.nl = public/language/nl/admin/settings/reputation.json trans.nl = public/language/nl/admin/settings/reputation.json
@@ -3027,7 +2869,6 @@ trans.it = public/language/it/admin/settings/tags.json
trans.ja = public/language/ja/admin/settings/tags.json trans.ja = public/language/ja/admin/settings/tags.json
trans.ko = public/language/ko/admin/settings/tags.json trans.ko = public/language/ko/admin/settings/tags.json
trans.lt = public/language/lt/admin/settings/tags.json trans.lt = public/language/lt/admin/settings/tags.json
trans.lv = public/language/lv/admin/settings/tags.json
trans.ms = public/language/ms/admin/settings/tags.json trans.ms = public/language/ms/admin/settings/tags.json
trans.nb = public/language/nb/admin/settings/tags.json trans.nb = public/language/nb/admin/settings/tags.json
trans.nl = public/language/nl/admin/settings/tags.json trans.nl = public/language/nl/admin/settings/tags.json
@@ -3077,7 +2918,6 @@ trans.it = public/language/it/admin/settings/user.json
trans.ja = public/language/ja/admin/settings/user.json trans.ja = public/language/ja/admin/settings/user.json
trans.ko = public/language/ko/admin/settings/user.json trans.ko = public/language/ko/admin/settings/user.json
trans.lt = public/language/lt/admin/settings/user.json trans.lt = public/language/lt/admin/settings/user.json
trans.lv = public/language/lv/admin/settings/user.json
trans.ms = public/language/ms/admin/settings/user.json trans.ms = public/language/ms/admin/settings/user.json
trans.nb = public/language/nb/admin/settings/user.json trans.nb = public/language/nb/admin/settings/user.json
trans.nl = public/language/nl/admin/settings/user.json trans.nl = public/language/nl/admin/settings/user.json
@@ -3127,7 +2967,6 @@ trans.it = public/language/it/admin/settings/chat.json
trans.ja = public/language/ja/admin/settings/chat.json trans.ja = public/language/ja/admin/settings/chat.json
trans.ko = public/language/ko/admin/settings/chat.json trans.ko = public/language/ko/admin/settings/chat.json
trans.lt = public/language/lt/admin/settings/chat.json trans.lt = public/language/lt/admin/settings/chat.json
trans.lv = public/language/lv/admin/settings/chat.json
trans.ms = public/language/ms/admin/settings/chat.json trans.ms = public/language/ms/admin/settings/chat.json
trans.nb = public/language/nb/admin/settings/chat.json trans.nb = public/language/nb/admin/settings/chat.json
trans.nl = public/language/nl/admin/settings/chat.json trans.nl = public/language/nl/admin/settings/chat.json
@@ -3177,7 +3016,6 @@ trans.it = public/language/it/admin/settings/email.json
trans.ja = public/language/ja/admin/settings/email.json trans.ja = public/language/ja/admin/settings/email.json
trans.ko = public/language/ko/admin/settings/email.json trans.ko = public/language/ko/admin/settings/email.json
trans.lt = public/language/lt/admin/settings/email.json trans.lt = public/language/lt/admin/settings/email.json
trans.lv = public/language/lv/admin/settings/email.json
trans.ms = public/language/ms/admin/settings/email.json trans.ms = public/language/ms/admin/settings/email.json
trans.nb = public/language/nb/admin/settings/email.json trans.nb = public/language/nb/admin/settings/email.json
trans.nl = public/language/nl/admin/settings/email.json trans.nl = public/language/nl/admin/settings/email.json
@@ -3227,7 +3065,6 @@ trans.it = public/language/it/admin/settings/group.json
trans.ja = public/language/ja/admin/settings/group.json trans.ja = public/language/ja/admin/settings/group.json
trans.ko = public/language/ko/admin/settings/group.json trans.ko = public/language/ko/admin/settings/group.json
trans.lt = public/language/lt/admin/settings/group.json trans.lt = public/language/lt/admin/settings/group.json
trans.lv = public/language/lv/admin/settings/group.json
trans.ms = public/language/ms/admin/settings/group.json trans.ms = public/language/ms/admin/settings/group.json
trans.nb = public/language/nb/admin/settings/group.json trans.nb = public/language/nb/admin/settings/group.json
trans.nl = public/language/nl/admin/settings/group.json trans.nl = public/language/nl/admin/settings/group.json
@@ -3277,7 +3114,6 @@ trans.it = public/language/it/admin/settings/notifications.json
trans.ja = public/language/ja/admin/settings/notifications.json trans.ja = public/language/ja/admin/settings/notifications.json
trans.ko = public/language/ko/admin/settings/notifications.json trans.ko = public/language/ko/admin/settings/notifications.json
trans.lt = public/language/lt/admin/settings/notifications.json trans.lt = public/language/lt/admin/settings/notifications.json
trans.lv = public/language/lv/admin/settings/notifications.json
trans.ms = public/language/ms/admin/settings/notifications.json trans.ms = public/language/ms/admin/settings/notifications.json
trans.nb = public/language/nb/admin/settings/notifications.json trans.nb = public/language/nb/admin/settings/notifications.json
trans.nl = public/language/nl/admin/settings/notifications.json trans.nl = public/language/nl/admin/settings/notifications.json
@@ -3327,7 +3163,6 @@ trans.it = public/language/it/admin/settings/post.json
trans.ja = public/language/ja/admin/settings/post.json trans.ja = public/language/ja/admin/settings/post.json
trans.ko = public/language/ko/admin/settings/post.json trans.ko = public/language/ko/admin/settings/post.json
trans.lt = public/language/lt/admin/settings/post.json trans.lt = public/language/lt/admin/settings/post.json
trans.lv = public/language/lv/admin/settings/post.json
trans.ms = public/language/ms/admin/settings/post.json trans.ms = public/language/ms/admin/settings/post.json
trans.nb = public/language/nb/admin/settings/post.json trans.nb = public/language/nb/admin/settings/post.json
trans.nl = public/language/nl/admin/settings/post.json trans.nl = public/language/nl/admin/settings/post.json
@@ -3377,7 +3212,6 @@ trans.it = public/language/it/admin/settings/sockets.json
trans.ja = public/language/ja/admin/settings/sockets.json trans.ja = public/language/ja/admin/settings/sockets.json
trans.ko = public/language/ko/admin/settings/sockets.json trans.ko = public/language/ko/admin/settings/sockets.json
trans.lt = public/language/lt/admin/settings/sockets.json trans.lt = public/language/lt/admin/settings/sockets.json
trans.lv = public/language/lv/admin/settings/sockets.json
trans.ms = public/language/ms/admin/settings/sockets.json trans.ms = public/language/ms/admin/settings/sockets.json
trans.nb = public/language/nb/admin/settings/sockets.json trans.nb = public/language/nb/admin/settings/sockets.json
trans.nl = public/language/nl/admin/settings/sockets.json trans.nl = public/language/nl/admin/settings/sockets.json
@@ -3427,7 +3261,6 @@ trans.it = public/language/it/admin/settings/uploads.json
trans.ja = public/language/ja/admin/settings/uploads.json trans.ja = public/language/ja/admin/settings/uploads.json
trans.ko = public/language/ko/admin/settings/uploads.json trans.ko = public/language/ko/admin/settings/uploads.json
trans.lt = public/language/lt/admin/settings/uploads.json trans.lt = public/language/lt/admin/settings/uploads.json
trans.lv = public/language/lv/admin/settings/uploads.json
trans.ms = public/language/ms/admin/settings/uploads.json trans.ms = public/language/ms/admin/settings/uploads.json
trans.nb = public/language/nb/admin/settings/uploads.json trans.nb = public/language/nb/admin/settings/uploads.json
trans.nl = public/language/nl/admin/settings/uploads.json trans.nl = public/language/nl/admin/settings/uploads.json
@@ -3477,7 +3310,6 @@ trans.it = public/language/it/admin/settings/web-crawler.json
trans.ja = public/language/ja/admin/settings/web-crawler.json trans.ja = public/language/ja/admin/settings/web-crawler.json
trans.ko = public/language/ko/admin/settings/web-crawler.json trans.ko = public/language/ko/admin/settings/web-crawler.json
trans.lt = public/language/lt/admin/settings/web-crawler.json trans.lt = public/language/lt/admin/settings/web-crawler.json
trans.lv = public/language/lv/admin/settings/web-crawler.json
trans.ms = public/language/ms/admin/settings/web-crawler.json trans.ms = public/language/ms/admin/settings/web-crawler.json
trans.nb = public/language/nb/admin/settings/web-crawler.json trans.nb = public/language/nb/admin/settings/web-crawler.json
trans.nl = public/language/nl/admin/settings/web-crawler.json trans.nl = public/language/nl/admin/settings/web-crawler.json

File diff suppressed because it is too large Load Diff

View File

@@ -1,23 +1,20 @@
FROM node:lts # The base image is the latest 8.x node (LTS)
FROM node:8.11.3@sha256:625d0b446f63b2d051c7b2a468f6cee63536dec716f09afcf9ae1c575d9b953a
RUN mkdir -p /usr/src/app RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app WORKDIR /usr/src/app
ARG NODE_ENV ARG NODE_ENV
ENV NODE_ENV $NODE_ENV ENV NODE_ENV $NODE_ENV
COPY install/package.json /usr/src/app/package.json COPY install/package.json /usr/src/app/package.json
RUN npm install && npm cache clean --force
RUN npm install --only=prod && \
npm cache clean --force
COPY . /usr/src/app COPY . /usr/src/app
ENV NODE_ENV=production \ ENV NODE_ENV=production \
daemon=false \ daemon=false \
silent=false silent=false
EXPOSE 4567
CMD ./nodebb start CMD ./nodebb start
# the default port for NodeBB is exposed outside the container
EXPOSE 4567

View File

@@ -1,7 +1,5 @@
'use strict'; 'use strict';
var async = require('async');
var fork = require('child_process').fork; var fork = require('child_process').fork;
var env = process.env; var env = process.env;
var worker; var worker;
@@ -12,26 +10,6 @@ var running = 0;
env.NODE_ENV = env.NODE_ENV || 'development'; env.NODE_ENV = env.NODE_ENV || 'development';
var nconf = require('nconf');
nconf.file({
file: 'config.json',
});
nconf.defaults({
base_dir: __dirname,
views_dir: './build/public/templates',
});
var winston = require('winston');
winston.configure({
transports: [
new winston.transports.Console({
handleExceptions: true,
}),
],
});
var db = require('./src/database');
module.exports = function (grunt) { module.exports = function (grunt) {
var args = []; var args = [];
var initArgs = ['--build']; var initArgs = ['--build'];
@@ -59,7 +37,7 @@ module.exports = function (grunt) {
// Do nothing, just restart // Do nothing, just restart
} }
if (compiling && !incomplete.includes(compiling)) { if (compiling && incomplete.indexOf(compiling) === -1) {
incomplete.push(compiling); incomplete.push(compiling);
} }
@@ -92,116 +70,80 @@ module.exports = function (grunt) {
} }
grunt.initConfig({ grunt.initConfig({
watch: {}, watch: {
lessUpdated_Client: {
files: [
'public/less/*.less',
'!public/less/admin/**/*.less',
'node_modules/nodebb-*/**/*.less',
'!node_modules/nodebb-*/node_modules/**',
'!node_modules/nodebb-*/.git/**',
],
options: {
interval: 1000,
},
},
lessUpdated_Admin: {
files: [
'public/less/admin/**/*.less',
'node_modules/nodebb-*/**/*.less',
'!node_modules/nodebb-*/node_modules/**',
'!node_modules/nodebb-*/.git/**',
],
options: {
interval: 1000,
},
},
clientUpdated: {
files: [
'public/src/**/*.js',
'node_modules/nodebb-*/**/*.js',
'!node_modules/nodebb-*/node_modules/**',
'node_modules/benchpressjs/build/benchpress.js',
'!node_modules/nodebb-*/.git/**',
],
options: {
interval: 1000,
},
},
serverUpdated: {
files: ['*.js', 'install/*.js', 'src/**/*.js'],
options: {
interval: 1000,
},
},
templatesUpdated: {
files: [
'src/views/**/*.tpl',
'node_modules/nodebb-*/**/*.tpl',
'!node_modules/nodebb-*/node_modules/**',
'!node_modules/nodebb-*/.git/**',
],
options: {
interval: 1000,
},
},
langUpdated: {
files: [
'public/language/en-GB/*.json',
'public/language/en-GB/**/*.json',
'node_modules/nodebb-*/**/*.json',
'!node_modules/nodebb-*/node_modules/**',
'!node_modules/nodebb-*/.git/**',
'!node_modules/nodebb-*/plugin.json',
'!node_modules/nodebb-*/package.json',
'!node_modules/nodebb-*/theme.json',
],
options: {
interval: 1000,
},
},
},
}); });
grunt.loadNpmTasks('grunt-contrib-watch'); grunt.loadNpmTasks('grunt-contrib-watch');
grunt.registerTask('default', ['watch']); grunt.registerTask('default', ['watch']);
grunt.registerTask('init', function () {
var done = this.async();
async.waterfall([
function (next) {
db.init(next);
},
function (next) {
db.getSortedSetRange('plugins:active', 0, -1, next);
},
function (plugins, next) {
addBaseThemes(plugins, next);
},
function (plugins, next) {
if (!plugins.includes('nodebb-plugin-composer-default')) {
plugins.push('nodebb-plugin-composer-default');
}
if (process.argv.includes('--core')) {
plugins = [];
}
const lessUpdated_Client = plugins.map(p => 'node_modules/' + p + '/**/*.less');
const lessUpdated_Admin = plugins.map(p => 'node_modules/' + p + '/**/*.less');
const clientUpdated = plugins.map(p => 'node_modules/' + p + '/**/*.js');
const templatesUpdated = plugins.map(p => 'node_modules/' + p + '/**/*.tpl');
const langUpdated = plugins.map(p => 'node_modules/' + p + '/**/*.json');
grunt.config(['watch'], {
lessUpdated_Client: {
files: [
'public/less/*.less',
'!public/less/admin/**/*.less',
...lessUpdated_Client,
'!node_modules/nodebb-*/node_modules/**',
'!node_modules/nodebb-*/.git/**',
],
options: {
interval: 1000,
},
},
lessUpdated_Admin: {
files: [
'public/less/admin/**/*.less',
...lessUpdated_Admin,
'!node_modules/nodebb-*/node_modules/**',
'!node_modules/nodebb-*/.git/**',
],
options: {
interval: 1000,
},
},
clientUpdated: {
files: [
'public/src/**/*.js',
...clientUpdated,
'!node_modules/nodebb-*/node_modules/**',
'node_modules/benchpressjs/build/benchpress.js',
'!node_modules/nodebb-*/.git/**',
],
options: {
interval: 1000,
},
},
serverUpdated: {
files: ['*.js', 'install/*.js', 'src/**/*.js', '!src/upgrades/**'],
options: {
interval: 1000,
},
},
templatesUpdated: {
files: [
'src/views/**/*.tpl',
...templatesUpdated,
'!node_modules/nodebb-*/node_modules/**',
'!node_modules/nodebb-*/.git/**',
],
options: {
interval: 1000,
},
},
langUpdated: {
files: [
'public/language/en-GB/*.json',
'public/language/en-GB/**/*.json',
...langUpdated,
'!node_modules/nodebb-*/node_modules/**',
'!node_modules/nodebb-*/.git/**',
'!node_modules/nodebb-*/plugin.json',
'!node_modules/nodebb-*/package.json',
'!node_modules/nodebb-*/theme.json',
],
options: {
interval: 1000,
},
},
});
next();
},
], done);
});
grunt.task.run('init');
env.NODE_ENV = 'development'; env.NODE_ENV = 'development';
if (grunt.option('skip')) { if (grunt.option('skip')) {
@@ -222,25 +164,3 @@ module.exports = function (grunt) {
grunt.event.on('watch', update); grunt.event.on('watch', update);
}; };
function addBaseThemes(plugins, callback) {
const themeId = plugins.find(p => p.startsWith('nodebb-theme-'));
if (!themeId) {
return setImmediate(callback, null, plugins);
}
function getBaseRecursive(themeId) {
try {
const baseTheme = require(themeId + '/theme').baseTheme;
if (baseTheme) {
plugins.push(baseTheme);
getBaseRecursive(baseTheme);
}
} catch (err) {
console.log(err);
}
}
getBaseRecursive(themeId);
callback(null, plugins);
}

View File

@@ -40,7 +40,7 @@ Our minimalist "Persona" theme gets you going right away, no coding experience r
## How can I follow along/contribute? ## How can I follow along/contribute?
* If you are a developer, feel free to check out the source and submit pull requests. We also have a wide array of [plugins](http://community.nodebb.org/category/7/nodebb-plugins) which would be a great starting point for learning the codebase. * If you are a developer, feel free to check out the source and submit pull requests. We also have a wide array of [plugins](http://community.nodebb.org/category/7/nodebb-plugins) which would be a great starting point for learning the codebase.
* If you are a designer, [NodeBB needs themes](http://community.nodebb.org/category/10/nodebb-themes)! NodeBB's theming system allows extension of the base templates as well as styling via LESS or CSS. NodeBB's base theme utilizes [Bootstrap 3](http://getbootstrap.com/) but themes can choose to use a different framework altogether. * If you are a designer, [NodeBB needs themes](http://community.nodebb.org/category/10/nodebb-themes)! NodeBB's theming system allows extention of the base templates as well as styling via LESS or CSS. NodeBB's base theme utilizes [Bootstrap 3](http://getbootstrap.com/) but themes can choose to use a different framework altogether.
* If you know languages other than English you can help us translate NodeBB. We use [Transifex](https://www.transifex.com/projects/p/nodebb/) for internationalization. * If you know languages other than English you can help us translate NodeBB. We use [Transifex](https://www.transifex.com/projects/p/nodebb/) for internationalization.
* Please don't forget to **like**, **follow**, and **star our repo**! Join our growing [community](http://community.nodebb.org) to keep up to date with the latest NodeBB development. * Please don't forget to **like**, **follow**, and **star our repo**! Join our growing [community](http://community.nodebb.org) to keep up to date with the latest NodeBB development.
@@ -48,7 +48,7 @@ Our minimalist "Persona" theme gets you going right away, no coding experience r
NodeBB requires the following software to be installed: NodeBB requires the following software to be installed:
* A version of Node.js at least 8 or greater ([installation/upgrade instructions](https://github.com/nodesource/distributions)) * A version of Node.js at least 6 or greater ([installation/upgrade instructions](https://github.com/nodesource/distributions))
* Redis, version 2.8.9 or greater **or** MongoDB, version 2.6 or greater * Redis, version 2.8.9 or greater **or** MongoDB, version 2.6 or greater
* nginx, version 1.3.13 or greater (**only if** intending to use nginx to proxy requests to a NodeBB) * nginx, version 1.3.13 or greater (**only if** intending to use nginx to proxy requests to a NodeBB)

40
app.js
View File

@@ -19,30 +19,34 @@
'use strict'; 'use strict';
require('./require-main'); if (require.main !== module) {
require.main.require = function (path) {
return require(path);
};
}
const nconf = require('nconf'); var nconf = require('nconf');
nconf.argv().env({ nconf.argv().env({
separator: '__', separator: '__',
}); });
const winston = require('winston'); var async = require('async');
const path = require('path'); var winston = require('winston');
var path = require('path');
const file = require('./src/file'); var file = require('./src/file');
global.env = process.env.NODE_ENV || 'production'; global.env = process.env.NODE_ENV || 'production';
// Alternate configuration file support // Alternate configuration file support
const configFile = path.resolve(__dirname, nconf.any(['config', 'CONFIG']) || 'config.json'); var configFile = path.resolve(__dirname, nconf.any(['config', 'CONFIG']) || 'config.json');
const configExists = file.existsSync(configFile) || (nconf.get('url') && nconf.get('secret') && nconf.get('database')); var configExists = file.existsSync(configFile) || (nconf.get('url') && nconf.get('secret') && nconf.get('database'));
const prestart = require('./src/prestart'); var prestart = require('./src/prestart');
prestart.loadConfig(configFile); prestart.loadConfig(configFile);
prestart.setupWinston();
prestart.versionCheck(); prestart.versionCheck();
winston.verbose('* using configuration stored in: %s', configFile); prestart.setupWinston();
if (!process.send) { if (!process.send) {
// If run using `node app`, log GNU copyright info along with server info // If run using `node app`, log GNU copyright info along with server info
@@ -59,21 +63,33 @@ if (nconf.get('setup') || nconf.get('install')) {
} else if (nconf.get('upgrade')) { } else if (nconf.get('upgrade')) {
require('./src/cli/upgrade').upgrade(true); require('./src/cli/upgrade').upgrade(true);
} else if (nconf.get('reset')) { } else if (nconf.get('reset')) {
require('./src/cli/reset').reset({ var options = {
theme: nconf.get('t'), theme: nconf.get('t'),
plugin: nconf.get('p'), plugin: nconf.get('p'),
widgets: nconf.get('w'), widgets: nconf.get('w'),
settings: nconf.get('s'), settings: nconf.get('s'),
all: nconf.get('a'), all: nconf.get('a'),
};
async.series([
async.apply(require('./src/cli/reset').reset, options),
require('./src/meta/build').buildAll,
], function (err) {
if (err) {
throw err;
}
process.exit(0);
}); });
} else if (nconf.get('activate')) { } else if (nconf.get('activate')) {
require('./src/cli/manage').activate(nconf.get('activate')); require('./src/cli/manage').activate(nconf.get('activate'));
} else if (nconf.get('plugins')) { } else if (nconf.get('plugins')) {
require('./src/cli/manage').listPlugins(); require('./src/cli/manage').listPlugins();
} else if (nconf.get('build')) { } else if (nconf.get('build')) {
require('./src/cli/manage').build(nconf.get('build')); require('./src/meta/build').build(nconf.get('build'));
} else if (nconf.get('events')) { } else if (nconf.get('events')) {
require('./src/cli/manage').listEvents(); require('./src/cli/manage').listEvents();
} else { } else {
require('./src/start').start(); require('./src/start').start();
} }

View File

@@ -1,3 +0,0 @@
'use strict';
module.exports = { extends: ['@commitlint/config-angular'] };

View File

@@ -1,24 +0,0 @@
version: '3.5'
services:
node:
build: .
restart: unless-stopped
depends_on:
- db
expose:
- 4567 # use a reverse proxy like Traefik
db:
image: mongo:bionic
restart: unless-stopped
expose:
- 27017
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: root
volumes:
- mongo:/data/db
volumes:
mongo:

View File

@@ -1,27 +1,10 @@
{ {
"title": "NodeBB", "title": "NodeBB",
"showSiteTitle": 1, "showSiteTitle": 1,
"defaultLang": "en-GB",
"loginDays": 14,
"loginSeconds": 0,
"loginAttempts": 5,
"lockoutDuration": 60,
"adminReloginDuration": 60,
"postDelay": 10, "postDelay": 10,
"initialPostDelay": 10, "initialPostDelay": 10,
"newbiePostDelay": 120, "newbiePostDelay": 120,
"postEditDuration": 0,
"newbiePostEditDuration": 3600,
"postDeleteDuration": 0,
"enablePostHistory": 1,
"postCacheSize": 10485760,
"disableChat": 0,
"chatEditDuration": 0,
"chatDeleteDuration": 0,
"chatMessageDelay": 200,
"newbiePostDelayThreshold": 3, "newbiePostDelayThreshold": 3,
"postQueueReputationThreshold": 0,
"groupsExemptFromPostQueue": ["administrators", "Global Moderators"],
"minimumPostLength": 8, "minimumPostLength": 8,
"maximumPostLength": 32767, "maximumPostLength": 32767,
"minimumTagsPerTopic": 0, "minimumTagsPerTopic": 0,
@@ -30,54 +13,32 @@
"maximumTagLength": 15, "maximumTagLength": 15,
"allowTopicsThumbnail": 0, "allowTopicsThumbnail": 0,
"registrationType": "normal", "registrationType": "normal",
"registrationApprovalType": "normal", "allowLocalLogin": 1,
"allowAccountDelete": 1, "allowAccountDelete": 1,
"allowFileUploads": 0, "allowFileUploads": 0,
"privateUploads": 0,
"allowedFileExtensions": "png,jpg,bmp", "allowedFileExtensions": "png,jpg,bmp",
"allowUserHomePage": 1, "allowUserHomePage": 1,
"allowMultipleBadges": 0,
"maximumFileSize": 2048, "maximumFileSize": 2048,
"stripEXIFData": 1,
"resizeImageWidthThreshold": 2000,
"resizeImageWidth": 760,
"rejectImageWidth": 5000,
"rejectImageHeight": 5000,
"resizeImageQuality": 80,
"topicThumbSize": 120,
"minimumTitleLength": 3, "minimumTitleLength": 3,
"maximumTitleLength": 255, "maximumTitleLength": 255,
"minimumUsernameLength": 2, "minimumUsernameLength": 2,
"maximumUsernameLength": 16, "maximumUsernameLength": 16,
"minimumPasswordLength": 6, "minimumPasswordLength": 6,
"minimumPasswordStrength": 1,
"maximumSignatureLength": 255, "maximumSignatureLength": 255,
"maximumAboutMeLength": 1000, "maximumAboutMeLength": 1000,
"maximumUsersInChatRoom": 0,
"maximumChatMessageLength": 1000, "maximumChatMessageLength": 1000,
"maximumProfileImageSize": 256, "maximumProfileImageSize": 256,
"maximumCoverImageSize": 2048, "maximumCoverImageSize": 2048,
"profileImageDimension": 200, "profileImageDimension": 200,
"profile:convertProfileImageToPNG": 0,
"profile:keepAllUserImages": 0,
"requireEmailConfirmation": 0, "requireEmailConfirmation": 0,
"gdpr_enabled": 1,
"allowProfileImageUploads": 1, "allowProfileImageUploads": 1,
"teaserPost": "last-reply", "teaserPost": "last-reply",
"allowPrivateGroups": 1, "allowPrivateGroups": 1,
"unreadCutoff": 2, "unreadCutoff": 2,
"bookmarkThreshold": 5, "bookmarkThreshold": 5,
"topicsPerList": 20,
"autoDetectLang": 1, "autoDetectLang": 1,
"reputation:disabled": 0,
"downvote:disabled": 0,
"disableSignatures": 0,
"min:rep:downvote": 0,
"min:rep:flag": 0, "min:rep:flag": 0,
"min:rep:profile-picture": 0,
"min:rep:cover-picture": 0,
"min:rep:website": 0,
"min:rep:aboutme": 0,
"min:rep:signature": 0,
"notificationType_upvote": "notification", "notificationType_upvote": "notification",
"notificationType_new-topic": "notification", "notificationType_new-topic": "notification",
"notificationType_new-reply": "notification", "notificationType_new-reply": "notification",
@@ -86,47 +47,7 @@
"notificationType_group-invite": "notification", "notificationType_group-invite": "notification",
"notificationType_mention": "notification", "notificationType_mention": "notification",
"notificationType_new-register": "notification", "notificationType_new-register": "notification",
"notificationType_post-queue": "notification", "notificationType_post-queue": "notification",
"notificationType_new-post-flag": "notification", "notificationType_new-post-flag": "notification",
"notificationType_new-user-flag": "notification", "notificationType_new-user-flag": "notification"
"topicStaleDays": 60,
"maxTopicsPerPage": 20,
"maxPostsPerPage": 20,
"topicsPerPage": 20,
"postsPerPage": 20,
"userSearchResultsPerPage": 50,
"maximumGroupNameLength": 255,
"maximumGroupTitleLength": 40,
"preventTopicDeleteAfterReplies": 0,
"feeds:disableSitemap": 0,
"sitemapTopics": 500,
"maintenanceMode": 0,
"maintenanceModeStatus": 503,
"votesArePublic": 0,
"maximumInvites": 0,
"username:disableEdit": 0,
"email:disableEdit": 0,
"email:sendmail:rateLimit": 2,
"email:sendmail:rateDelta": 1000,
"hideFullname": 0,
"allowGuestHandles": 0,
"disableRecentCategoryFilter": 0,
"maximumRelatedTopics": 0,
"disableEmailSubscriptions": 0,
"emailConfirmInterval": 10,
"inviteExpiration": 7,
"digestHour": 17,
"passwordExpiryDays": 0,
"hsts-maxage": 31536000,
"hsts-subdomains": 0,
"hsts-preload": 0,
"hsts-enabled": 0,
"eventLoopCheckEnabled": 1,
"eventLoopLagThreshold": 100,
"eventLoopInterval": 500,
"onlineCutoff": 30,
"timeagoCutoff": 30,
"necroThreshold": 7,
"categoryWatchState": "watching",
"submitPluginUsage": 1
} }

View File

@@ -15,7 +15,9 @@
"iconClass": "fa-inbox", "iconClass": "fa-inbox",
"textClass": "visible-xs-inline", "textClass": "visible-xs-inline",
"text": "[[global:header.unread]]", "text": "[[global:header.unread]]",
"groups": ["registered-users"] "properties": {
"loggedIn": true
}
}, },
{ {
"route": "/recent", "route": "/recent",
@@ -64,9 +66,9 @@
"iconClass": "fa-cogs", "iconClass": "fa-cogs",
"textClass": "visible-xs-inline", "textClass": "visible-xs-inline",
"text": "[[global:header.admin]]", "text": "[[global:header.admin]]",
"groups": ["administrators"],
"properties": { "properties": {
"targetBlank": false "targetBlank": false,
"adminOnly": true
} }
} }
] ]

View File

@@ -7,7 +7,6 @@ var winston = require('winston');
var questions = { var questions = {
redis: require('../src/database/redis').questions, redis: require('../src/database/redis').questions,
mongo: require('../src/database/mongo').questions, mongo: require('../src/database/mongo').questions,
postgres: require('../src/database/postgres').questions,
}; };
module.exports = function (config, callback) { module.exports = function (config, callback) {
@@ -39,12 +38,6 @@ function getDatabaseConfig(config, callback) {
} else { } else {
prompt.get(questions.mongo, callback); prompt.get(questions.mongo, callback);
} }
} else if (config.database === 'postgres') {
if (config['postgres:host'] && config['postgres:port']) {
callback(null, config);
} else {
prompt.get(questions.postgres, callback);
}
} else { } else {
return callback(new Error('unknown database : ' + config.database)); return callback(new Error('unknown database : ' + config.database));
} }
@@ -76,20 +69,11 @@ function saveDatabaseConfig(config, databaseConfig, callback) {
database: databaseConfig['mongo:database'], database: databaseConfig['mongo:database'],
uri: databaseConfig['mongo:uri'], uri: databaseConfig['mongo:uri'],
}; };
} else if (config.database === 'postgres') {
config.postgres = {
host: databaseConfig['postgres:host'],
port: databaseConfig['postgres:port'],
username: databaseConfig['postgres:username'],
password: databaseConfig['postgres:password'],
database: databaseConfig['postgres:database'],
ssl: databaseConfig['postgres:ssl'],
};
} else { } else {
return callback(new Error('unknown database : ' + config.database)); return callback(new Error('unknown database : ' + config.database));
} }
var allQuestions = questions.redis.concat(questions.mongo).concat(questions.postgres); var allQuestions = questions.redis.concat(questions.mongo);
for (var x = 0; x < allQuestions.length; x += 1) { for (var x = 0; x < allQuestions.length; x += 1) {
delete config[allQuestions[x].name]; delete config[allQuestions[x].name];
} }

View File

@@ -2,7 +2,7 @@
"name": "nodebb", "name": "nodebb",
"license": "GPL-3.0", "license": "GPL-3.0",
"description": "NodeBB Forum", "description": "NodeBB Forum",
"version": "1.13.0", "version": "1.10.0",
"homepage": "http://www.nodebb.org", "homepage": "http://www.nodebb.org",
"repository": { "repository": {
"type": "git", "type": "git",
@@ -16,142 +16,117 @@
"test": "nyc --reporter=html --reporter=text-summary mocha", "test": "nyc --reporter=html --reporter=text-summary mocha",
"coveralls": "nyc report --reporter=text-lcov | coveralls && rm -r coverage" "coveralls": "nyc report --reporter=text-lcov | coveralls && rm -r coverage"
}, },
"husky": {
"hooks": {
"pre-commit": "lint-staged",
"commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
}
},
"lint-staged": {
"*.js": [
"eslint --fix",
"git add"
]
},
"dependencies": { "dependencies": {
"ace-builds": "^1.2.9", "ace-builds": "^1.2.9",
"archiver": "^3.0.0", "archiver": "^2.1.1",
"async": "^3.0.1", "async": "2.6.1",
"autoprefixer": "^9.4.6", "autoprefixer": "^8.5.2",
"bcryptjs": "2.4.3", "bcryptjs": "2.4.3",
"benchpressjs": "^2.0.0", "benchpressjs": "^1.2.2",
"body-parser": "^1.18.2", "body-parser": "^1.18.2",
"bootstrap": "^3.4.0", "bootstrap": "^3.3.7",
"bootswatch": "git://github.com/thomaspark/bootswatch.git#c41a8f066feb8950c6f9c6bcf5a3c37d1085404e",
"chart.js": "^2.7.1", "chart.js": "^2.7.1",
"cli-graph": "^3.2.2", "cli-graph": "^3.2.2",
"clipboard": "^2.0.1", "clipboard": "^2.0.1",
"colors": "^1.1.2", "colors": "^1.1.2",
"commander": "^3.0.0",
"compression": "^1.7.1", "compression": "^1.7.1",
"commander": "^2.12.2",
"connect-ensure-login": "^0.1.1", "connect-ensure-login": "^0.1.1",
"connect-flash": "^0.1.1", "connect-flash": "^0.1.1",
"connect-mongo": "3.2.0", "connect-mongo": "2.0.1",
"connect-multiparty": "^2.1.0", "connect-multiparty": "^2.1.0",
"connect-pg-simple": "^6.0.0", "connect-redis": "3.3.3",
"connect-redis": "4.0.3",
"cookie-parser": "^1.4.3", "cookie-parser": "^1.4.3",
"cron": "^1.3.0", "cron": "^1.3.0",
"cropperjs": "^1.2.2", "cropperjs": "^1.2.2",
"csurf": "^1.9.0", "csurf": "^1.9.0",
"daemon": "^1.1.0", "daemon": "^1.1.0",
"diff": "^4.0.1", "diff": "^3.4.0",
"express": "^4.16.2", "express": "^4.16.2",
"express-session": "^1.15.6", "express-session": "^1.15.6",
"express-useragent": "^1.0.12", "express-useragent": "^1.0.12",
"graceful-fs": "^4.1.11", "graceful-fs": "^4.1.11",
"helmet": "^3.11.0", "helmet": "^3.11.0",
"html-to-text": "^5.0.0", "html-to-text": "^4.0.0",
"ipaddr.js": "^1.5.4", "ipaddr.js": "^1.5.4",
"jimp": "0.2.28",
"jquery": "^3.2.1", "jquery": "^3.2.1",
"jsesc": "2.5.2", "jsesc": "2.5.1",
"json-2-csv": "^3.0.0", "json-2-csv": "^2.1.2",
"jsonwebtoken": "^8.4.0", "less": "^2.7.3",
"less": "^3.10.3", "lodash": "^4.17.10",
"lodash": "^4.17.15",
"logrotate-stream": "^0.2.5", "logrotate-stream": "^0.2.5",
"lru-cache": "5.1.1", "lru-cache": "4.1.3",
"material-design-lite": "^1.3.0", "material-design-lite": "^1.3.0",
"mime": "^2.2.0", "mime": "^2.2.0",
"mkdirp": "^0.5.1", "mkdirp": "^0.5.1",
"mongodb": "3.4.0", "mongodb": "3.0.8",
"morgan": "^1.9.1", "morgan": "^1.9.0",
"mousetrap": "^1.6.1", "mousetrap": "^1.6.1",
"mubsub-nbb": "^1.5.1", "mubsub-nbb": "^1.5.0",
"nconf": "^0.10.0", "nconf": "^0.10.0",
"nodebb-plugin-composer-default": "6.3.20", "nodebb-plugin-composer-default": "6.0.28",
"nodebb-plugin-dbsearch": "4.0.7", "nodebb-plugin-dbsearch": "2.0.19",
"nodebb-plugin-emoji": "^3.0.0", "nodebb-plugin-emoji": "^2.2.2",
"nodebb-plugin-emoji-android": "2.0.0", "nodebb-plugin-emoji-android": "2.0.0",
"nodebb-plugin-markdown": "8.11.0", "nodebb-plugin-markdown": "8.4.4",
"nodebb-plugin-mentions": "2.7.3", "nodebb-plugin-mentions": "2.2.8",
"nodebb-plugin-soundpack-default": "1.0.0", "nodebb-plugin-soundpack-default": "1.0.0",
"nodebb-plugin-spam-be-gone": "0.6.7", "nodebb-plugin-spam-be-gone": "0.5.4",
"nodebb-rewards-essentials": "0.1.2", "nodebb-rewards-essentials": "0.0.11",
"nodebb-theme-lavender": "5.0.11", "nodebb-theme-lavender": "5.0.5",
"nodebb-theme-persona": "10.1.30", "nodebb-theme-persona": "9.0.17",
"nodebb-theme-slick": "1.2.28", "nodebb-theme-slick": "1.2.5",
"nodebb-theme-vanilla": "11.1.12", "nodebb-theme-vanilla": "10.0.15",
"nodebb-widget-essentials": "4.0.17", "nodebb-widget-essentials": "4.0.7",
"nodemailer": "^6.0.0", "nodemailer": "^4.6.5",
"passport": "^0.4.0", "passport": "^0.4.0",
"passport-local": "1.0.0", "passport-local": "1.0.0",
"pg": "^7.4.0", "postcss": "6.0.22",
"pg-cursor": "^2.0.0",
"postcss": "7.0.21",
"postcss-clean": "1.1.0", "postcss-clean": "1.1.0",
"promise-polyfill": "^8.0.0", "promise-polyfill": "^8.0.0",
"prompt": "^1.0.0", "prompt": "^1.0.0",
"redis": "2.8.0", "redis": "2.8.0",
"request": "2.88.0", "request": "2.87.0",
"rimraf": "3.0.0", "rimraf": "2.6.2",
"rss": "^1.2.2", "rss": "^1.2.2",
"sanitize-html": "^1.16.3", "sanitize-html": "^1.16.3",
"semver": "^7.0.0", "semver": "^5.4.1",
"serve-favicon": "^2.4.5", "serve-favicon": "^2.4.5",
"sharp": "0.23.4", "sitemap": "^1.13.0",
"sitemap": "^5.0.0", "socket.io": "2.1.1",
"socket.io": "2.3.0", "socket.io-adapter-mongo": "^2.0.1",
"socket.io-adapter-cluster": "^1.0.1", "socket.io-client": "2.1.1",
"socket.io-adapter-mongo": "^2.0.4",
"socket.io-adapter-postgres": "^1.2.1",
"socket.io-client": "2.3.0",
"socket.io-redis": "5.2.0", "socket.io-redis": "5.2.0",
"socketio-wildcard": "2.0.0", "socketio-wildcard": "2.0.0",
"spdx-license-list": "^6.0.0", "spdx-license-list": "^4.0.0",
"spider-detector": "2.0.0", "spider-detector": "1.0.18",
"textcomplete": "^0.17.1",
"textcomplete.contenteditable": "^0.1.1",
"toobusy-js": "^0.5.1", "toobusy-js": "^0.5.1",
"uglify-es": "^3.3.9", "uglify-es": "^3.3.9",
"validator": "12.1.0", "validator": "10.4.0",
"winston": "3.2.1", "winston": "^2.4.0",
"xml": "^1.0.1", "xml": "^1.0.1",
"xregexp": "^4.1.1", "xregexp": "^4.1.1",
"zxcvbn": "^4.4.2" "zxcvbn": "^4.4.2"
}, },
"devDependencies": { "devDependencies": {
"@commitlint/cli": "8.2.0", "coveralls": "3.0.1",
"@commitlint/config-angular": "8.2.0", "eslint": "4.19.1",
"coveralls": "3.0.9", "eslint-config-airbnb-base": "12.1.0",
"eslint": "6.7.0", "eslint-plugin-import": "2.12.0",
"eslint-config-airbnb-base": "14.0.0", "grunt": "1.0.3",
"eslint-plugin-import": "2.18.2",
"grunt": "1.0.4",
"grunt-contrib-watch": "1.1.0", "grunt-contrib-watch": "1.1.0",
"husky": "3.1.0", "jsdom": "11.11.0",
"jsdom": "15.2.1", "mocha": "4.1.0",
"lint-staged": "9.4.2",
"mocha": "6.2.2",
"mocha-lcov-reporter": "1.3.0", "mocha-lcov-reporter": "1.3.0",
"nyc": "14.1.1", "nyc": "11.9.0",
"smtp-server": "3.5.0" "smtp-server": "3.4.6"
}, },
"bugs": { "bugs": {
"url": "https://github.com/NodeBB/NodeBB/issues" "url": "https://github.com/NodeBB/NodeBB/issues"
}, },
"engines": { "engines": {
"node": ">=8" "node": ">=6"
}, },
"maintainers": [ "maintainers": [
{ {

View File

@@ -15,31 +15,14 @@ var Benchpress = require('benchpressjs');
var app = express(); var app = express();
var server; var server;
var formats = [ winston.add(winston.transports.File, {
winston.format.colorize(), filename: 'logs/webinstall.log',
]; colorize: true,
timestamp: function () {
const timestampFormat = winston.format((info) => { var date = new Date();
var dateString = new Date().toISOString() + ' [' + global.process.pid + ']'; return date.getDate() + '/' + (date.getMonth() + 1) + ' ' + date.toTimeString().substr(0, 5) + ' [' + global.process.pid + ']';
info.level = dateString + ' - ' + info.level; },
return info;
});
formats.push(timestampFormat());
formats.push(winston.format.splat());
formats.push(winston.format.simple());
winston.configure({
level: 'verbose', level: 'verbose',
format: winston.format.combine.apply(null, formats),
transports: [
new winston.transports.Console({
handleExceptions: true,
}),
new winston.transports.File({
filename: 'logs/webinstall.log',
handleExceptions: true,
}),
],
}); });
var web = module.exports; var web = module.exports;
@@ -50,7 +33,6 @@ var scripts = [
'public/vendor/xregexp/unicode/unicode-base.js', 'public/vendor/xregexp/unicode/unicode-base.js',
'public/src/utils.js', 'public/src/utils.js',
'public/src/installer/install.js', 'public/src/installer/install.js',
'node_modules/zxcvbn/dist/zxcvbn.js',
]; ];
var installing = false; var installing = false;
@@ -60,7 +42,7 @@ var launchUrl;
web.install = function (port) { web.install = function (port) {
port = port || 4567; port = port || 4567;
winston.info('Launching web installer on port ' + port); winston.info('Launching web installer on port', port);
app.use(express.static('public', {})); app.use(express.static('public', {}));
app.engine('tpl', function (filepath, options, callback) { app.engine('tpl', function (filepath, options, callback) {
@@ -108,7 +90,7 @@ function ping(req, res) {
} }
function welcome(req, res) { function welcome(req, res) {
var dbs = ['redis', 'mongo', 'postgres']; var dbs = ['redis', 'mongo'];
var databases = dbs.map(function (databaseName) { var databases = dbs.map(function (databaseName) {
var questions = require('../src/database/' + databaseName).questions.filter(function (question) { var questions = require('../src/database/' + databaseName).questions.filter(function (question) {
return question && !question.hideOnWebInstall; return question && !question.hideOnWebInstall;
@@ -132,7 +114,6 @@ function welcome(req, res) {
success: success, success: success,
values: req.body, values: req.body,
minimumPasswordLength: defaults.minimumPasswordLength, minimumPasswordLength: defaults.minimumPasswordLength,
minimumPasswordStrength: defaults.minimumPasswordStrength,
installing: installing, installing: installing,
}); });
} }
@@ -183,7 +164,7 @@ function install(req, res) {
function launch(req, res) { function launch(req, res) {
res.json({}); res.json({});
server.close(); server.close();
req.setTimeout(0);
var child; var child;
if (!nconf.get('launchCmd')) { if (!nconf.get('launchCmd')) {

109
loader.js
View File

@@ -7,7 +7,6 @@ var path = require('path');
var fork = require('child_process').fork; var fork = require('child_process').fork;
var async = require('async'); var async = require('async');
var logrotate = require('logrotate-stream'); var logrotate = require('logrotate-stream');
var mkdirp = require('mkdirp');
var file = require('./src/file'); var file = require('./src/file');
var pkg = require('./package.json'); var pkg = require('./package.json');
@@ -19,14 +18,7 @@ nconf.argv().env().file({
}); });
var pidFilePath = path.join(__dirname, 'pidfile'); var pidFilePath = path.join(__dirname, 'pidfile');
var outputLogFilePath = path.join(__dirname, 'logs/output.log');
var outputLogFilePath = path.join(__dirname, nconf.get('logFile') || 'logs/output.log');
var logDir = path.dirname(outputLogFilePath);
if (!fs.existsSync(logDir)) {
mkdirp.sync(path.dirname(outputLogFilePath));
}
var output = logrotate({ file: outputLogFilePath, size: '1m', keep: 3, compress: true }); var output = logrotate({ file: outputLogFilePath, size: '1m', keep: 3, compress: true });
var silent = nconf.get('silent') === 'false' ? false : nconf.get('silent') !== false; var silent = nconf.get('silent') === 'false' ? false : nconf.get('silent') !== false;
var numProcs; var numProcs;
@@ -45,6 +37,7 @@ Loader.init = function (callback) {
} }
process.on('SIGHUP', Loader.restart); process.on('SIGHUP', Loader.restart);
process.on('SIGUSR2', Loader.reload);
process.on('SIGTERM', Loader.stop); process.on('SIGTERM', Loader.stop);
callback(); callback();
}; };
@@ -91,17 +84,9 @@ Loader.addWorkerEvents = function (worker) {
console.log('[cluster] Restarting...'); console.log('[cluster] Restarting...');
Loader.restart(); Loader.restart();
break; break;
case 'pubsub': case 'reload':
workers.forEach(function (w) { console.log('[cluster] Reloading...');
w.send(message); Loader.reload();
});
break;
case 'socket.io':
workers.forEach(function (w) {
if (w !== worker) {
w.send(message);
}
});
break; break;
} }
} }
@@ -191,6 +176,14 @@ Loader.restart = function () {
}); });
}; };
Loader.reload = function () {
workers.forEach(function (worker) {
worker.send({
action: 'reload',
});
});
};
Loader.stop = function () { Loader.stop = function () {
killWorkers(); killWorkers();
@@ -207,41 +200,53 @@ function killWorkers() {
}); });
} }
fs.open(pathToConfig, 'r', function (err) { Loader.notifyWorkers = function (msg, worker_pid) {
if (err) { worker_pid = parseInt(worker_pid, 10);
// No config detected, kickstart web installer workers.forEach(function (worker) {
fork('app'); if (parseInt(worker.pid, 10) !== worker_pid) {
return;
}
if (nconf.get('daemon') !== 'false' && nconf.get('daemon') !== false) {
if (file.existsSync(pidFilePath)) {
try { try {
var pid = fs.readFileSync(pidFilePath, { encoding: 'utf-8' }); worker.send(msg);
process.kill(pid, 0);
process.exit();
} catch (e) { } catch (e) {
fs.unlinkSync(pidFilePath); console.log('[cluster/notifyWorkers] Failed to reach pid ' + worker_pid);
} }
} }
require('daemon')({
stdout: process.stdout,
stderr: process.stderr,
cwd: process.cwd(),
});
fs.writeFileSync(pidFilePath, process.pid);
}
async.series([
Loader.init,
Loader.displayStartupMessages,
Loader.start,
], function (err) {
if (err) {
console.error('[loader] Error during startup');
throw err;
}
}); });
};
fs.open(pathToConfig, 'r', function (err) {
if (!err) {
if (nconf.get('daemon') !== 'false' && nconf.get('daemon') !== false) {
if (file.existsSync(pidFilePath)) {
try {
var pid = fs.readFileSync(pidFilePath, { encoding: 'utf-8' });
process.kill(pid, 0);
process.exit();
} catch (e) {
fs.unlinkSync(pidFilePath);
}
}
require('daemon')({
stdout: process.stdout,
stderr: process.stderr,
cwd: process.cwd(),
});
fs.writeFileSync(pidFilePath, process.pid);
}
async.series([
Loader.init,
Loader.displayStartupMessages,
Loader.start,
], function (err) {
if (err) {
console.error('[loader] Error during startup');
throw err;
}
});
} else {
// No config detected, kickstart web installer
fork('app');
}
}); });

View File

@@ -1 +1 @@
@echo off && cd %~dp0 && node ./nodebb %* @echo off && cd %~dp0 && node ./src/cli %*

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

@@ -1,3 +1,7 @@
/* /*
The following stylesheet is only included on pages that can execute javascript The following stylesheet is only included on pages that can execute javascript
*/ */
.page-topic [component="post/content"] img:not(.not-responsive):not([data-state]) {
display: none !important;
}

View File

@@ -1,14 +0,0 @@
# Important note about localising NodeBB
The files here are read-only and overwritten daily (if there are changes) by the
helper bot [Misty](https://github.com/nodebb-misty).
Our localisation efforts are handled via [our Transifex Project](https://www.transifex.com/nodebb/nodebb/),
and any pull requests made to this directory will be automatically closed because
localisations can go out-of-sync when edited directly.
If there are non-localised strings and you cannot find them in Transifex, please
[open a new issue on our bug tracker](https://github.com/NodeBB/NodeBB/issues/new)
so we can take a look.
Thank you for helping localise NodeBB!

3
public/language/TODO Normal file
View File

@@ -0,0 +1,3 @@
NPM INSTALL
For now, language packs will be stored here. Eventually, will be moved to server side to allow for npm install-ability.
When that happens, server code will generate compressed JSON language files in this folder.

View File

@@ -1,5 +1,5 @@
{ {
"alert.confirm-rebuild-and-restart": "هل أنت متأكد إنك تريد إعادة بناء وتشغيل الـ NodeBB؟", "alert.confirm-rebuild-and-restart": "Are you sure you wish to rebuild and restart NodeBB?",
"alert.confirm-restart": "هل تريد بالتأكيد إعادة تشغيل NodeBB؟", "alert.confirm-restart": "هل تريد بالتأكيد إعادة تشغيل NodeBB؟",
"acp-title": "لوحة تحكم إدارة NodeBB | %1", "acp-title": "لوحة تحكم إدارة NodeBB | %1",

View File

@@ -3,7 +3,7 @@
"posts-in-cache": "المشاركات المخزنة مؤقتاً", "posts-in-cache": "المشاركات المخزنة مؤقتاً",
"average-post-size": "متوسط ​​حجم المشاركة", "average-post-size": "متوسط ​​حجم المشاركة",
"length-to-max": "الطول / أقصى حد", "length-to-max": "الطول / أقصى حد",
"percent-full": "1% كاملة", "percent-full": "%1% Full",
"post-cache-size": "حجم التخزين المؤقت للمشاركات", "post-cache-size": "حجم التخزين المؤقت للمشاركات",
"items-in-cache": "العناصر في التخزين المؤقت", "items-in-cache": "العناصر في التخزين المؤقت",
"control-panel": "لوحة التحكم", "control-panel": "لوحة التحكم",

View File

@@ -18,17 +18,10 @@
"mongo.resident-memory": "Resident Memory", "mongo.resident-memory": "Resident Memory",
"mongo.virtual-memory": "الذاكرة الإفتراضية", "mongo.virtual-memory": "الذاكرة الإفتراضية",
"mongo.mapped-memory": "Mapped Memory", "mongo.mapped-memory": "Mapped Memory",
"mongo.bytes-in": "Bytes In",
"mongo.bytes-out": "Bytes Out",
"mongo.num-requests": "Number of Requests",
"mongo.raw-info": "MongoDB Raw Info", "mongo.raw-info": "MongoDB Raw Info",
"mongo.unauthorized": "NodeBB was unable to query the MongoDB database for relevant statistics. Please ensure that the user in use by NodeBB contains the &quot;clusterMonitor&quot; role for the &quot;admin&quot; database.",
"redis": "Redis", "redis": "Redis",
"redis.version": "Redis Version", "redis.version": "Redis Version",
"redis.keys": "Keys",
"redis.expires": "Expires",
"redis.avg-ttl": "Average TTL",
"redis.connected-clients": "Connected Clients", "redis.connected-clients": "Connected Clients",
"redis.connected-slaves": "Connected Slaves", "redis.connected-slaves": "Connected Slaves",
"redis.blocked-clients": "Blocked Clients", "redis.blocked-clients": "Blocked Clients",
@@ -37,16 +30,7 @@
"redis.total-connections-recieved": "إجمالي الاتصالات المستلمة", "redis.total-connections-recieved": "إجمالي الاتصالات المستلمة",
"redis.total-commands-processed": "إجمالي الأوامر التي تمت معالجتها", "redis.total-commands-processed": "إجمالي الأوامر التي تمت معالجتها",
"redis.iops": "Instantaneous Ops. Per Second", "redis.iops": "Instantaneous Ops. Per Second",
"redis.iinput": "Instantaneous Input Per Second",
"redis.ioutput": "Instantaneous Output Per Second",
"redis.total-input": "Total Input",
"redis.total-output": "Total Ouput",
"redis.keyspace-hits": "Keyspace Hits", "redis.keyspace-hits": "Keyspace Hits",
"redis.keyspace-misses": "Keyspace Misses", "redis.keyspace-misses": "Keyspace Misses",
"redis.raw-info": "Redis Raw Info", "redis.raw-info": "Redis Raw Info"
"postgres": "Postgres",
"postgres.version": "PostgreSQL Version",
"postgres.raw-info": "Postgres Raw Info"
} }

View File

@@ -2,10 +2,5 @@
"events": "أحداث", "events": "أحداث",
"no-events": "لا توجد أحداث", "no-events": "لا توجد أحداث",
"control-panel": "لوحة تحكم الأحداث", "control-panel": "لوحة تحكم الأحداث",
"filters": "Filters", "delete-events": "حذف الأحداث"
"filters-apply": "Apply Filters",
"filter-type": "Event Type",
"filter-start": "Start Date",
"filter-end": "End Date",
"filter-perPage": "Per Page"
} }

View File

@@ -8,7 +8,7 @@
"custom-js.enable": "تفعيل Javascript المخصصة", "custom-js.enable": "تفعيل Javascript المخصصة",
"custom-header": "ترويسة مخصصة", "custom-header": "ترويسة مخصصة",
"custom-header.description": "Enter custom HTML here (ex. Meta Tags, etc.), which will be appended to the <code>&lt;head&gt;</code> section of your forum's markup. Script tags are allowed, but are discouraged, as the <a href=\"#custom-js\" data-toggle=\"tab\">Custom Javascript</a> tab is available.", "custom-header.description": "أدخل HTML الخاصة بك هنا (مثل العلامات الوصفية، وما إلى ذلك)، والتي سيتم إلحاقها الى<code>&lt;head&gt;</code> في تصميم المنتدى. يسمح باستخدام علامات النص البرمجي، ولكن سيتم تعطيلها؛ لتوفر تبويبة\n<a href=\"#custom-header\" data-toggle=\"tab\">Javascript المخصصة</a>",
"custom-header.enable": "تفعيل الترويسة المخصصة", "custom-header.enable": "تفعيل الترويسة المخصصة",
"custom-css.livereload": "تفعيل إعادة التحميل المباشرة", "custom-css.livereload": "تفعيل إعادة التحميل المباشرة",

View File

@@ -7,8 +7,7 @@
"online": "online", "online": "online",
"git": "git", "git": "git",
"memory": "memory", "memory": "memory",
"load": "system load", "load": "load",
"cpu-usage": "cpu usage",
"uptime": "uptime", "uptime": "uptime",
"registered": "Registered", "registered": "Registered",

View File

@@ -9,7 +9,6 @@
"plugin-search": "البحث عن الإضافات", "plugin-search": "البحث عن الإضافات",
"plugin-search-placeholder": "جاري البحث عن الإضافات...", "plugin-search-placeholder": "جاري البحث عن الإضافات...",
"submit-anonymous-usage": "Submit anonymous plugin usage data.",
"reorder-plugins": "إعادة ترتيب الإضافات", "reorder-plugins": "إعادة ترتيب الإضافات",
"order-active": "ترتيب الإضافات المفعلة", "order-active": "ترتيب الإضافات المفعلة",
"dev-interested": "هل انته مهتم ببرمجة إضافات لـNodeBB؟", "dev-interested": "هل انته مهتم ببرمجة إضافات لـNodeBB؟",
@@ -30,8 +29,6 @@
"plugin-item.more-info": "لمزيد من المعلومات:", "plugin-item.more-info": "لمزيد من المعلومات:",
"plugin-item.unknown": "غير معروف", "plugin-item.unknown": "غير معروف",
"plugin-item.unknown-explanation": "تعذر تحديد حالة هذه الإضافة، ربما بسبب خطأ في الإعدادات.", "plugin-item.unknown-explanation": "تعذر تحديد حالة هذه الإضافة، ربما بسبب خطأ في الإعدادات.",
"plugin-item.compatible": "This plugin works on NodeBB %1",
"plugin-item.not-compatible": "This plugin has no compatibility data, make sure it works before installing on your production environment.",
"alert.enabled": "الإضافة مفعلة", "alert.enabled": "الإضافة مفعلة",
"alert.disabled": "الإضافة معطلة", "alert.disabled": "الإضافة معطلة",

View File

@@ -18,13 +18,5 @@
"alert.update-success": "Successfully updated widgets", "alert.update-success": "Successfully updated widgets",
"alert.clone-success": "Successfully cloned widgets", "alert.clone-success": "Successfully cloned widgets",
"error.select-clone": "Please select a page to clone from", "error.select-clone": "Please select a page to clone from"
"title": "Title",
"title.placeholder": "Title (only shown on some containers)",
"container": "Container",
"container.placeholder": "Drag and drop a container or enter HTML here.",
"show-to-groups": "Show to groups",
"hide-from-groups": "Hide from groups",
"hide-on-mobile": "Hide on mobile"
} }

View File

@@ -2,7 +2,7 @@
"forum-traffic": "Forum Traffic", "forum-traffic": "Forum Traffic",
"page-views": "مشاهدات الصفحات", "page-views": "مشاهدات الصفحات",
"unique-visitors": "زائرين فريدين", "unique-visitors": "زائرين فريدين",
"new-users": "New Users", "users": "أعضاء",
"posts": "مشاركات", "posts": "مشاركات",
"topics": "مواضيع", "topics": "مواضيع",
"page-views-seven": "آخر 7 ايام", "page-views-seven": "آخر 7 ايام",
@@ -14,12 +14,9 @@
"page-views-custom-help": "أدخل نطاقا زمنيا لمرات مشاهدة الصفحات التي ترغب في عرضها. إذا لم يظهر منتقي التاريخ، فإن التنسيق المقبول هو <code>YYYY-MM-DD</code>", "page-views-custom-help": "أدخل نطاقا زمنيا لمرات مشاهدة الصفحات التي ترغب في عرضها. إذا لم يظهر منتقي التاريخ، فإن التنسيق المقبول هو <code>YYYY-MM-DD</code>",
"page-views-custom-error": "الرجاء إدخال نطاق تاريخ صالح بالتنسيق <code>YYYY-MM-DD</code>", "page-views-custom-error": "الرجاء إدخال نطاق تاريخ صالح بالتنسيق <code>YYYY-MM-DD</code>",
"stats.yesterday": "Yesterday", "stats.day": "يوم",
"stats.today": "Today", "stats.week": "إسبوع",
"stats.last-week": "Last Week", "stats.month": "شهر",
"stats.this-week": "This Week",
"stats.last-month": "Last Month",
"stats.this-month": "This Month",
"stats.all": "كل الوقت", "stats.all": "كل الوقت",
"updates": "تحديثات", "updates": "تحديثات",
@@ -68,9 +65,6 @@
"high-presence-topics": "مواضيع ذات حضور قوي", "high-presence-topics": "مواضيع ذات حضور قوي",
"graphs.page-views": "مشاهدات الصفحة", "graphs.page-views": "مشاهدات الصفحة",
"graphs.page-views-registered": "Page Views Registered",
"graphs.page-views-guest": "Page Views Guest",
"graphs.page-views-bot": "Page Views Bot",
"graphs.unique-visitors": "زوار فريدين", "graphs.unique-visitors": "زوار فريدين",
"graphs.registered-users": "مستخدمين مسجلين", "graphs.registered-users": "مستخدمين مسجلين",
"graphs.anonymous-users": "مستخدمين مجهولين", "graphs.anonymous-users": "مستخدمين مجهولين",

View File

@@ -5,11 +5,13 @@
"tooltip": "Tooltip:", "tooltip": "Tooltip:",
"text": "Text:", "text": "Text:",
"text-class": "Text Class: <small>optional</small>", "text-class": "Text Class: <small>optional</small>",
"class": "Class: <small>optional</small>",
"id": "ID: <small>optional</small>", "id": "ID: <small>optional</small>",
"properties": "Properties:", "properties": "Properties:",
"groups": "Groups:", "only-admins": "Only display to Admins",
"only-global-mods-and-admins": "Only display to Global Moderators and Admins",
"only-logged-in": "Only display to logged in users",
"only-guest": "Only display to guests",
"open-new-window": "Open in a new window", "open-new-window": "Open in a new window",
"btn.delete": "Delete", "btn.delete": "Delete",

View File

@@ -17,10 +17,8 @@
"parent-category": "Parent Category", "parent-category": "Parent Category",
"optional-parent-category": "(Optional) Parent Category", "optional-parent-category": "(Optional) Parent Category",
"parent-category-none": "(None)", "parent-category-none": "(None)",
"copy-parent": "Copy Parent",
"copy-settings": "Copy Settings From", "copy-settings": "Copy Settings From",
"optional-clone-settings": "(Optional) Clone Settings From Category", "optional-clone-settings": "(Optional) Clone Settings From Category",
"clone-children": "Clone Children Categories And Settings",
"purge": "Purge Category", "purge": "Purge Category",
"enable": "Enable", "enable": "Enable",
@@ -30,13 +28,11 @@
"select-category": "Select Category", "select-category": "Select Category",
"set-parent-category": "Set Parent Category", "set-parent-category": "Set Parent Category",
"privileges.description": "You can configure the access control privileges for portions of the site in this section. Privileges can be granted on a per-user or a per-group basis. Select the domain of effect from the dropdown below.", "privileges.description": "You can configure the access control privileges for this category in this section. Privileges can be granted on a per-user or a per-group basis. You can add a new user to this table by searching for them in the form below.",
"privileges.category-selector": "Configuring privileges for ",
"privileges.warning": "<strong>Note</strong>: Privilege settings take effect immediately. It is not necessary to save the category after adjusting these settings.", "privileges.warning": "<strong>Note</strong>: Privilege settings take effect immediately. It is not necessary to save the category after adjusting these settings.",
"privileges.section-viewing": "Viewing Privileges", "privileges.section-viewing": "Viewing Privileges",
"privileges.section-posting": "Posting Privileges", "privileges.section-posting": "Posting Privileges",
"privileges.section-moderation": "Moderation Privileges", "privileges.section-moderation": "Moderation Privileges",
"privileges.section-other": "Other",
"privileges.section-user": "User", "privileges.section-user": "User",
"privileges.search-user": "Add User", "privileges.search-user": "Add User",
"privileges.no-users": "No user-specific privileges in this category.", "privileges.no-users": "No user-specific privileges in this category.",
@@ -45,12 +41,7 @@
"privileges.search-group": "Add Group", "privileges.search-group": "Add Group",
"privileges.copy-to-children": "Copy to Children", "privileges.copy-to-children": "Copy to Children",
"privileges.copy-from-category": "Copy from Category", "privileges.copy-from-category": "Copy from Category",
"privileges.copy-privileges-to-all-categories": "Copy to All Categories",
"privileges.copy-group-privileges-to-children": "Copy this group's privileges to the children of this category.",
"privileges.copy-group-privileges-to-all-categories": "Copy this group's privileges to all categories.",
"privileges.copy-group-privileges-from": "Copy this group's privileges from another category.",
"privileges.inherit": "If the <code>registered-users</code> group is granted a specific privilege, all other groups receive an <strong>implicit privilege</strong>, even if they are not explicitly defined/checked. This implicit privilege is shown to you because all users are part of the <code>registered-users</code> user group, and so, privileges for additional groups need not be explicitly granted.", "privileges.inherit": "If the <code>registered-users</code> group is granted a specific privilege, all other groups receive an <strong>implicit privilege</strong>, even if they are not explicitly defined/checked. This implicit privilege is shown to you because all users are part of the <code>registered-users</code> user group, and so, privileges for additional groups need not be explicitly granted.",
"privileges.copy-success": "Privileges copied!",
"analytics.back": "Back to Categories List", "analytics.back": "Back to Categories List",
"analytics.title": "Analytics for \"%1\" category", "analytics.title": "Analytics for \"%1\" category",
@@ -76,6 +67,5 @@
"alert.find-group": "Find a Group", "alert.find-group": "Find a Group",
"alert.group-search": "Search for a group here...", "alert.group-search": "Search for a group here...",
"collapse-all": "Collapse All", "collapse-all": "Collapse All",
"expand-all": "Expand All", "expand-all": "Expand All"
"disable-on-create": "Disable on create"
} }

View File

@@ -1,21 +0,0 @@
{
"lead": "A listing of digest delivery stats and times is displayed below.",
"disclaimer": "Please be advised that email delivery is not guaranteed, due to the nature of email technology. Many variables factor into whether an email sent to the recipient server is ultimately delivered into the user's inbox, including server reputation, blacklisted IP addresses, and whether DKIM/SPF/DMARC is configured.",
"disclaimer-continued": "A successful delivery means the message was sent successfully by NodeBB and acknowledged by the recipient server. It does not mean the email landed in the inbox. For best results, we recommend using a third-party email delivery service such as <a href=\"https://sendgrid.com/why-sendgrid/\">SendGrid</a>.",
"user": "User",
"subscription": "Subscription Type",
"last-delivery": "Last successful delivery",
"default": "System default",
"default-help": "<em>System default</em> means the user has not explicitly overridden the global forum setting for digests, which is currently: &quot;<strong>%1</strong>&quot;",
"resend": "Resend Digest",
"resend-all-confirm": "Are you sure you wish to mnually execute this digest run?",
"resent-single": "Manual digest resend completed",
"resent-day": "Daily digest resent",
"resent-week": "Weekly digest resent",
"resent-month": "Monthly digest resent",
"null": "<em>Never</em>",
"manual-run": "Manual digest run:",
"no-delivery-data": "No delivery data found"
}

View File

@@ -1,12 +1,8 @@
{ {
"name": "اسم المجموعة", "name": "اسم المجموعة",
"badge": "Badge",
"properties": "Properties",
"description": "Group Description", "description": "Group Description",
"member-count": "Member Count", "member-count": "Member Count",
"system": "System", "system": "System Group",
"hidden": "Hidden",
"private": "Private",
"edit": "Edit", "edit": "Edit",
"search-placeholder": "Search", "search-placeholder": "Search",
"create": "Create Group", "create": "Create Group",
@@ -21,12 +17,10 @@
"edit.user-title": "Title of Members", "edit.user-title": "Title of Members",
"edit.icon": "Group Icon", "edit.icon": "Group Icon",
"edit.label-color": "Group Label Color", "edit.label-color": "Group Label Color",
"edit.text-color": "Group Text Color",
"edit.show-badge": "Show Badge", "edit.show-badge": "Show Badge",
"edit.private-details": "If enabled, joining of groups requires approval from a group owner.", "edit.private-details": "If enabled, joining of groups requires approval from a group owner.",
"edit.private-override": "Warning: Private groups is disabled at system level, which overrides this option.", "edit.private-override": "Warning: Private groups is disabled at system level, which overrides this option.",
"edit.disable-join": "Disable join requests", "edit.disable-requests": "Disable join requests",
"edit.disable-leave": "Disallow users from leaving the group",
"edit.hidden": "Hidden", "edit.hidden": "Hidden",
"edit.hidden-details": "If enabled, this group will not be found in the groups listing, and users will have to be invited manually", "edit.hidden-details": "If enabled, this group will not be found in the groups listing, and users will have to be invited manually",
"edit.add-user": "Add User to Group", "edit.add-user": "Add User to Group",

View File

@@ -1,6 +1,6 @@
{ {
"post-queue": "Post Queue", "post-queue": "Post Queue",
"description": "There are no posts in the post queue. <br> To enable this feature, go to <a href=\"%1\">Settings &rarr; Post &rarr; Post Queue</a> and enable <strong>Post Queue</strong>.", "description": "There are no posts in the post queue. <br> To enable this feature, go to <a href=\"%1\">Settings &rarr; Post &rarr; Posting Restrictions</a> and enable <strong>Post Queue</strong>.",
"user": "User", "user": "User",
"category": "Category", "category": "Category",
"title": "Title", "title": "Title",

View File

@@ -1,8 +1,7 @@
{ {
"global": "Global", "global": "Global",
"global.no-users": "No user-specific global privileges.", "global.no-users": "No user-specific global privileges.",
"group-privileges": "Group Privileges",
"user-privileges": "User Privileges",
"chat": "Chat", "chat": "Chat",
"upload-images": "Upload Images", "upload-images": "Upload Images",
"upload-files": "Upload Files", "upload-files": "Upload Files",
@@ -11,12 +10,7 @@
"search-content": "Search Content", "search-content": "Search Content",
"search-users": "Search Users", "search-users": "Search Users",
"search-tags": "Search Tags", "search-tags": "Search Tags",
"view-users": "View Users",
"view-tags": "View Tags",
"view-groups": "View Groups",
"allow-local-login": "Local Login",
"allow-group-creation": "Group Create",
"view-users-info": "View Users Info",
"find-category": "Find Category", "find-category": "Find Category",
"access-category": "Access Category", "access-category": "Access Category",
"access-topics": "Access Topics", "access-topics": "Access Topics",

View File

@@ -1,9 +0,0 @@
{
"upload-file": "Upload File",
"filename": "Filename",
"usage": "Post Usage",
"orphaned": "Orphaned",
"size/filecount": "Size / Filecount",
"confirm-delete": "Do you really want to delete this file?",
"filecount": "%1 files"
}

View File

@@ -6,7 +6,6 @@
"validate-email": "Validate Email", "validate-email": "Validate Email",
"send-validation-email": "Send Validation Email", "send-validation-email": "Send Validation Email",
"password-reset-email": "Send Password Reset Email", "password-reset-email": "Send Password Reset Email",
"force-password-reset": "Force Password Reset & Log User Out",
"ban": "Ban User(s)", "ban": "Ban User(s)",
"temp-ban": "Ban User(s) Temporarily", "temp-ban": "Ban User(s) Temporarily",
"unban": "Unban User(s)", "unban": "Unban User(s)",
@@ -15,8 +14,6 @@
"delete": "Delete User(s)", "delete": "Delete User(s)",
"purge": "Delete User(s) and Content", "purge": "Delete User(s) and Content",
"download-csv": "Download CSV", "download-csv": "Download CSV",
"manage-groups": "Manage Groups",
"add-group": "Add Group",
"invite": "Invite", "invite": "Invite",
"new": "New User", "new": "New User",
@@ -30,11 +27,6 @@
"pills.banned": "Banned", "pills.banned": "Banned",
"pills.search": "User Search", "pills.search": "User Search",
"50-per-page": "50 per page",
"100-per-page": "100 per page",
"250-per-page": "250 per page",
"500-per-page": "500 per page",
"search.uid": "By User ID", "search.uid": "By User ID",
"search.uid-placeholder": "Enter a user ID to search", "search.uid-placeholder": "Enter a user ID to search",
"search.username": "By User Name", "search.username": "By User Name",
@@ -89,9 +81,7 @@
"alerts.confirm-remove-moderator": "Do you really want to remove this moderator?", "alerts.confirm-remove-moderator": "Do you really want to remove this moderator?",
"alerts.remove-moderator-success": "User is no longer moderator.", "alerts.remove-moderator-success": "User is no longer moderator.",
"alerts.confirm-validate-email": "Do you want to validate email(s) of these user(s)?", "alerts.confirm-validate-email": "Do you want to validate email(s) of these user(s)?",
"alerts.confirm-force-password-reset": "Are you sure you want to force the password reset and log out these user(s)?",
"alerts.validate-email-success": "Emails validated", "alerts.validate-email-success": "Emails validated",
"alerts.validate-force-password-reset-success": "User(s) passwords have been reset and their existing sessions have been revoked.",
"alerts.password-reset-confirm": "Do you want to send password reset email(s) to these user(s)?", "alerts.password-reset-confirm": "Do you want to send password reset email(s) to these user(s)?",
"alerts.confirm-delete": "<b>Warning!</b><br/>Do you really want to delete user(s)?<br/> This action is not reversable! Only the user account will be deleted, their posts and topics will remain.", "alerts.confirm-delete": "<b>Warning!</b><br/>Do you really want to delete user(s)?<br/> This action is not reversable! Only the user account will be deleted, their posts and topics will remain.",
"alerts.delete-success": "User(s) Deleted!", "alerts.delete-success": "User(s) Deleted!",
@@ -103,7 +93,7 @@
"alerts.error-x": "<strong>Error</strong><p>%1</p>", "alerts.error-x": "<strong>Error</strong><p>%1</p>",
"alerts.create-success": "User created!", "alerts.create-success": "User created!",
"alerts.prompt-email": "Emails: ", "alerts.prompt-email": "Email: ",
"alerts.email-sent-to": "An invitation email has been sent to %1", "alerts.email-sent-to": "An invitation email has been sent to %1",
"alerts.x-users-found": "%1 user(s) found! Search took %2 ms." "alerts.x-users-found": "%1 user(s) found! Search took %2 ms."
} }

View File

@@ -18,7 +18,6 @@
"manage/groups": "المجموعات", "manage/groups": "المجموعات",
"manage/ip-blacklist": "قائمة حظر عناوين IP", "manage/ip-blacklist": "قائمة حظر عناوين IP",
"manage/uploads": "Uploads", "manage/uploads": "Uploads",
"manage/digest": "Digests",
"section-settings": "إعدادات", "section-settings": "إعدادات",
"settings/general": "عامة", "settings/general": "عامة",
@@ -58,7 +57,6 @@
"section-advanced": "Advanced", "section-advanced": "Advanced",
"advanced/database": "Database", "advanced/database": "Database",
"advanced/events": "Events", "advanced/events": "Events",
"advanced/hooks": "Hooks",
"advanced/logs": "Logs", "advanced/logs": "Logs",
"advanced/errors": "Errors", "advanced/errors": "Errors",
"advanced/cache": "Cache", "advanced/cache": "Cache",

View File

@@ -1,7 +1,6 @@
{ {
"maintenance-mode": "Maintenance Mode", "maintenance-mode": "Maintenance Mode",
"maintenance-mode.help": "When the forum is in maintenance mode, all requests will be redirected to a static holding page. Administrators are exempt from this redirection, and are able to access the site normally.", "maintenance-mode.help": "When the forum is in maintenance mode, all requests will be redirected to a static holding page. Administrators are exempt from this redirection, and are able to access the site normally.",
"maintenance-mode.status": "Maintenance Mode Status Code",
"maintenance-mode.message": "Maintenance Message", "maintenance-mode.message": "Maintenance Message",
"headers": "Headers", "headers": "Headers",
"headers.allow-from": "Set ALLOW-FROM to Place NodeBB in an iFrame", "headers.allow-from": "Set ALLOW-FROM to Place NodeBB in an iFrame",
@@ -13,11 +12,6 @@
"headers.acac": "Access-Control-Allow-Credentials", "headers.acac": "Access-Control-Allow-Credentials",
"headers.acam": "Access-Control-Allow-Methods", "headers.acam": "Access-Control-Allow-Methods",
"headers.acah": "Access-Control-Allow-Headers", "headers.acah": "Access-Control-Allow-Headers",
"hsts": "Strict Transport Security",
"hsts.enabled": "Enabled HSTS (recommended)",
"hsts.subdomains": "Include subdomains in HSTS header",
"hsts.preload": "Allow preloading of HSTS header",
"hsts.help": "If enabled, an HSTS header will be set for this site. You can elect to include subdomains and preloading flags in your header. If in doubt, you can leave these unchecked. <a href=\"%1\">More information <i class=\"fa fa-external-link\"></i></a>",
"traffic-management": "Traffic Management", "traffic-management": "Traffic Management",
"traffic.help": "NodeBB deploys equipped with a module that automatically denies requests in high-traffic situations. You can tune these settings here, although the defaults are a good starting point.", "traffic.help": "NodeBB deploys equipped with a module that automatically denies requests in high-traffic situations. You can tune these settings here, although the defaults are a good starting point.",
"traffic.enable": "Enable Traffic Management", "traffic.enable": "Enable Traffic Management",

View File

@@ -6,6 +6,6 @@
"max-length": "Maximum length of chat messages", "max-length": "Maximum length of chat messages",
"max-room-size": "Maximum number of users in chat rooms", "max-room-size": "Maximum number of users in chat rooms",
"delay": "Time between chat messages in milliseconds", "delay": "Time between chat messages in milliseconds",
"restrictions.seconds-edit-after": "Number of seconds a chat message will remain editable. (0 disabled)", "restrictions.seconds-edit-after": "Number of seconds before users are allowed to edit chat messages after posting. (0 disabled)",
"restrictions.seconds-delete-after": "Number of seconds a chat message will remain deletable. (0 disabled)" "restrictions.seconds-delete-after": "Number of seconds before users are allowed to delete chat messages after posting. (0 disabled)"
} }

View File

@@ -4,7 +4,6 @@
"consent.message": "Notification message", "consent.message": "Notification message",
"consent.acceptance": "Acceptance message", "consent.acceptance": "Acceptance message",
"consent.link-text": "Policy Link Text", "consent.link-text": "Policy Link Text",
"consent.link-url": "Policy Link URL",
"consent.blank-localised-default": "Leave blank to use NodeBB localised defaults", "consent.blank-localised-default": "Leave blank to use NodeBB localised defaults",
"settings": "Settings", "settings": "Settings",
"cookie-domain": "Session cookie domain", "cookie-domain": "Session cookie domain",

View File

@@ -4,9 +4,6 @@
"address-help": "The following email address refers to the email that the recipient will see in the \"From\" and \"Reply To\" fields.", "address-help": "The following email address refers to the email that the recipient will see in the \"From\" and \"Reply To\" fields.",
"from": "From Name", "from": "From Name",
"from-help": "The from name to display in the email.", "from-help": "The from name to display in the email.",
"sendmail-rate-limit": "Send <em>X</em> emails...",
"sendmail-rate-delta": "... every <em>X</em> milliseconds",
"sendmail-rate-help": "Instructs the NodeBB mailer to limit the number of messages sent at once in order to not overwhelm email receiving services. These options do not apply if SMTP Transport is enabled (below).",
"smtp-transport": "SMTP Transport", "smtp-transport": "SMTP Transport",
"smtp-transport.enabled": "Use an external email server to send emails", "smtp-transport.enabled": "Use an external email server to send emails",
@@ -33,8 +30,8 @@
"testing.select": "Select Email Template", "testing.select": "Select Email Template",
"testing.send": "Send Test Email", "testing.send": "Send Test Email",
"testing.send-help": "The test email will be sent to the currently logged in user's email address.", "testing.send-help": "The test email will be sent to the currently logged in user's email address.",
"subscriptions": "Email Digests", "subscriptions": "Email Subscriptions",
"subscriptions.disable": "Disable email digests", "subscriptions.disable": "Disable subscriber notification emails",
"subscriptions.hour": "Digest Hour", "subscriptions.hour": "Digest Hour",
"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>" "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>"
} }

View File

@@ -3,9 +3,10 @@
"private-groups": "Private Groups", "private-groups": "Private Groups",
"private-groups.help": "If enabled, joining of groups requires the approval of the group owner <em>(Default: enabled)</em>", "private-groups.help": "If enabled, joining of groups requires the approval of the group owner <em>(Default: enabled)</em>",
"private-groups.warning": "<strong>Beware!</strong> If this option is disabled and you have private groups, they automatically become public.", "private-groups.warning": "<strong>Beware!</strong> If this option is disabled and you have private groups, they automatically become public.",
"allow-creation": "Allow Group Creation",
"allow-creation-help": "If enabled, users can create groups <em>(Default: disabled)</em>",
"allow-multiple-badges-help": "This flag can be used to allow users to select multiple group badges, requires theme support.", "allow-multiple-badges-help": "This flag can be used to allow users to select multiple group badges, requires theme support.",
"max-name-length": "Maximum Group Name Length", "max-name-length": "Maximum Group Name Length",
"max-title-length": "Maximum Group Title Length",
"cover-image": "Group Cover Image", "cover-image": "Group Cover Image",
"default-cover": "Default Cover Images", "default-cover": "Default Cover Images",
"default-cover-help": "Add comma-separated default cover images for groups that don't have an uploaded cover image" "default-cover-help": "Add comma-separated default cover images for groups that don't have an uploaded cover image"

View File

@@ -6,5 +6,6 @@
"max-posts-per-page": "Maximum posts per page", "max-posts-per-page": "Maximum posts per page",
"categories": "Category Pagination", "categories": "Category Pagination",
"topics-per-page": "Topics per Page", "topics-per-page": "Topics per Page",
"max-topics-per-page": "Maximum topics per page" "max-topics-per-page": "Maximum topics per page",
"initial-num-load": "Initial Number of Topics to Load on Unread, Recent, and Popular"
} }

View File

@@ -7,22 +7,19 @@
"sorting.most-posts": "Most Posts", "sorting.most-posts": "Most Posts",
"sorting.topic-default": "Default Topic Sorting", "sorting.topic-default": "Default Topic Sorting",
"length": "Post Length", "length": "Post Length",
"post-queue": "Post Queue",
"restrictions": "Posting Restrictions", "restrictions": "Posting Restrictions",
"restrictions-new": "New User Restrictions", "restrictions-new": "New User Restrictions",
"restrictions.post-queue": "Enable post queue", "restrictions.post-queue": "Enable post queue",
"restrictions.post-queue-rep-threshold": "Reputation required to bypass post queue",
"restrictions.groups-exempt-from-post-queue": "Select groups that should be exempt from the post queue",
"restrictions-new.post-queue": "Enable new user restrictions", "restrictions-new.post-queue": "Enable new user restrictions",
"restrictions.post-queue-help": "Enabling post queue will put the posts of new users in a queue for approval", "restrictions.post-queue-help": "Enabling post queue will put the posts of new users in a queue for approval.",
"restrictions-new.post-queue-help": "Enabling new user restrictions will set restrictions on posts created by new users", "restrictions-new.post-queue-help": "Enabling new user restrictions will set restrictions on posts created by new users.",
"restrictions.seconds-between": "Number of seconds between posts", "restrictions.seconds-between": "Seconds between posts",
"restrictions.seconds-between-new": "Seconds between posts for new users", "restrictions.seconds-between-new": "Seconds between posts for new users",
"restrictions.rep-threshold": "Reputation threshold before these restrictions are lifted", "restrictions.rep-threshold": "Reputation threshold before these restrictions are lifted",
"restrictions.seconds-before-new": "Seconds before a new user can make their first post", "restrictions.seconds-defore-new": "Seconds before new user can post",
"restrictions.seconds-edit-after": "Number of seconds a post remains editable (set to 0 to disable)", "restrictions.seconds-edit-after": "Number of seconds before users are allowed to edit posts after posting. (0 disabled)",
"restrictions.seconds-delete-after": "Number of seconds a post remains deletable (set to 0 to disable)", "restrictions.seconds-delete-after": "Number of seconds before users are allowed to delete posts after posting. (0 disabled)",
"restrictions.replies-no-delete": "Number of replies after users are disallowed to delete their own topics (set to 0 to disable)", "restrictions.replies-no-delete": "Number of replies after users are disallowed to delete their own topics. (0 disabled)",
"restrictions.min-title-length": "Minimum Title Length", "restrictions.min-title-length": "Minimum Title Length",
"restrictions.max-title-length": "Maximum Title Length", "restrictions.max-title-length": "Maximum Title Length",
"restrictions.min-post-length": "Minimum Post Length", "restrictions.min-post-length": "Minimum Post Length",
@@ -32,8 +29,6 @@
"timestamp": "Timestamp", "timestamp": "Timestamp",
"timestamp.cut-off": "Date cut-off (in days)", "timestamp.cut-off": "Date cut-off (in days)",
"timestamp.cut-off-help": "Dates &amp; times will be shown in a relative manner (e.g. \"3 hours ago\" / \"5 days ago\"), and localised into various\n\t\t\t\t\tlanguages. After a certain point, this text can be switched to display the localised date itself\n\t\t\t\t\t(e.g. 5 Nov 2016 15:30).<br /><em>(Default: <code>30</code>, or one month). Set to 0 to always display dates, leave blank to always display relative times.</em>", "timestamp.cut-off-help": "Dates &amp; times will be shown in a relative manner (e.g. \"3 hours ago\" / \"5 days ago\"), and localised into various\n\t\t\t\t\tlanguages. After a certain point, this text can be switched to display the localised date itself\n\t\t\t\t\t(e.g. 5 Nov 2016 15:30).<br /><em>(Default: <code>30</code>, or one month). Set to 0 to always display dates, leave blank to always display relative times.</em>",
"timestamp.necro-threshold": "Necro Threshold (in days)",
"timestamp.necro-threshold-help": "A message will be shown between posts if the time between them is longer than the necro threshold. (Default: <code>7</code>, or one week). Set to 0 to disable.</em>",
"teaser": "Teaser Post", "teaser": "Teaser Post",
"teaser.last-post": "Last &ndash; Show the latest post, including the original post, if no replies", "teaser.last-post": "Last &ndash; Show the latest post, including the original post, if no replies",
"teaser.last-reply": "Last &ndash; Show the latest reply, or a \"No replies\" placeholder if no replies", "teaser.last-reply": "Last &ndash; Show the latest reply, or a \"No replies\" placeholder if no replies",

View File

@@ -5,6 +5,8 @@
"min-length": "Minimum Tag Length", "min-length": "Minimum Tag Length",
"max-length": "Maximum Tag Length", "max-length": "Maximum Tag Length",
"goto-manage": "Click here to visit the tag management page.", "goto-manage": "Click here to visit the tag management page.",
"privacy": "Privacy",
"list-private": "Make the tags list private",
"related-topics": "Related Topics", "related-topics": "Related Topics",
"max-related-topics": "Maximum related topics to display (if supported by theme)" "max-related-topics": "Maximum related topics to display (if supported by theme)"
} }

View File

@@ -2,21 +2,12 @@
"posts": "المشاركات", "posts": "المشاركات",
"allow-files": "السماح للأعضاء بتحميل الملفات الإعتيادية", "allow-files": "السماح للأعضاء بتحميل الملفات الإعتيادية",
"private": "جعل الملفات التي تم رفعها خاصة", "private": "جعل الملفات التي تم رفعها خاصة",
"strip-exif-data": "Strip EXIF Data", "max-image-width": "تغيير حجم الصور إلى عرض محدد (بالبكسل)",
"private-extensions": "File extensions to make private", "max-image-width-help": "(بالبكسل، الافتراضي: 760 بكسل، ضع إلى 0 لتعطيل الخاصية)",
"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",
"resize-image-width-threshold-help": "(in pixels, default: 1520 pixels, set to 0 to disable)",
"resize-image-width": "Resize images down to specified width",
"resize-image-width-help": "(in pixels, default: 760 pixels, set to 0 to disable)",
"resize-image-quality": "Quality to use when resizing images", "resize-image-quality": "Quality to use when resizing images",
"resize-image-quality-help": "Use a lower quality setting to reduce the file size of resized images.", "resize-image-quality-help": "Use a lower quality setting to reduce the file size of resized images.",
"max-file-size": "الحد الأقصى لحجم الملف (بالكيبيبايت)", "max-file-size": "الحد الأقصى لحجم الملف (بالكيبيبايت)",
"max-file-size-help": "(بالكيبيبايت، الافتراضي: 2048)", "max-file-size-help": "(بالكيبيبايت، الافتراضي: 2048)",
"reject-image-width": "Maximum Image Width (in pixels)",
"reject-image-width-help": "Images wider than this value will be rejected.",
"reject-image-height": "Maximum Image Height (in pixels)",
"reject-image-height-help": "Images taller than this value will be rejected.",
"allow-topic-thumbnails": "السماح للاعضاء برفع الصور المصغرة للموضوع", "allow-topic-thumbnails": "السماح للاعضاء برفع الصور المصغرة للموضوع",
"topic-thumb-size": "حجم الصورة المصغرة للموضوع", "topic-thumb-size": "حجم الصورة المصغرة للموضوع",
"allowed-file-extensions": "إمتدادات الملفات المسموح بها", "allowed-file-extensions": "إمتدادات الملفات المسموح بها",

View File

@@ -1,5 +1,6 @@
{ {
"authentication": "المصادقة", "authentication": "المصادقة",
"allow-local-login": "السماح بتسجيل الدخول المحلي",
"require-email-confirmation": "يطلب تأكيد البريد الإلكتروني", "require-email-confirmation": "يطلب تأكيد البريد الإلكتروني",
"email-confirm-interval": "لا يمكن للمستخدم إعادة إرسال رسالة تأكيد البريد الالكتروني حتى مرور", "email-confirm-interval": "لا يمكن للمستخدم إعادة إرسال رسالة تأكيد البريد الالكتروني حتى مرور",
"email-confirm-email2": "دقائق", "email-confirm-email2": "دقائق",
@@ -8,12 +9,11 @@
"allow-login-with.username": "اسم المستخدم فقط", "allow-login-with.username": "اسم المستخدم فقط",
"allow-login-with.email": "البريد الالكتروني فقط", "allow-login-with.email": "البريد الالكتروني فقط",
"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://eugdpr.org/the-regulation/gdpr-faqs/\">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.",
"disable-username-changes": "عدم السماح بتغيير اسم المستخدم", "disable-username-changes": "عدم السماح بتغيير اسم المستخدم",
"disable-email-changes": "عدم السماح بتغيير البريد الالكتروني", "disable-email-changes": "عدم السماح بتغيير البريد الالكتروني",
"disable-password-changes": "عدم السماح بتغيير كلمة المرور", "disable-password-changes": "عدم السماح بتغيير كلمة المرور",
"allow-account-deletion": "السماح بحذف الحساب", "allow-account-deletion": "السماح بحذف الحساب",
"user-info-private": "إخفاء قائمة المستخدم والبيانات عن الزوار",
"hide-fullname": "إخفاء الإسم الكامل عن المستخدمين", "hide-fullname": "إخفاء الإسم الكامل عن المستخدمين",
"hide-email": "إخفاء البريد الإلكتروني عن المستخدمين", "hide-email": "إخفاء البريد الإلكتروني عن المستخدمين",
"themes": "القوالب", "themes": "القوالب",
@@ -26,23 +26,15 @@
"lockout-duration": "مدة تأمين الحساب (دقائق)", "lockout-duration": "مدة تأمين الحساب (دقائق)",
"login-days": "عدد الأيام لتذكر جلسات تسجيل دخول المستخدم", "login-days": "عدد الأيام لتذكر جلسات تسجيل دخول المستخدم",
"password-expiry-days": "فرض عملية تغيير كلمة المرور بعد مرور عدد محدد من الأيام", "password-expiry-days": "فرض عملية تغيير كلمة المرور بعد مرور عدد محدد من الأيام",
"session-time": "Session Time",
"session-time-days": "Days",
"session-time-seconds": "Seconds",
"session-time-help": "These values are used to govern how long a user stays logged in when they check &quot;Remember Me&quot; on login. Note that only one of these values will be used. If there is no <i>seconds</i> value we fall back to <i>days</i>. If there is no <i>days</i> value we default to <i>14 days</i>.",
"online-cutoff": "Minutes after user is considered inactive",
"online-cutoff-help": "If user performs no actions for this duration, they are considered inactive and they do not receive realtime updates.",
"registration": "تسجيل المستخدم", "registration": "تسجيل المستخدم",
"registration-type": "نوع التسجيل", "registration-type": "نوع التسجيل",
"registration-approval-type": "Registration Approval Type",
"registration-type.normal": "عادي", "registration-type.normal": "عادي",
"registration-type.admin-approval": "بموافقة الإدارة", "registration-type.admin-approval": "بموافقة الإدارة",
"registration-type.admin-approval-ip": "بموافقة الإدارة لعناوين IP", "registration-type.admin-approval-ip": "بموافقة الإدارة لعناوين IP",
"registration-type.invite-only": "بالدعوات فقط", "registration-type.invite-only": "بالدعوات فقط",
"registration-type.admin-invite-only": "بالدعوات من قبل الإدارة فقط", "registration-type.admin-invite-only": "بالدعوات من قبل الإدارة فقط",
"registration-type.disabled": "لا يوجد تسجيل", "registration-type.disabled": "لا يوجد تسجيل",
"registration-type.help": "Normal - Users can register from the /register page.<br/>\nInvite Only - Users can invite others from the <a href=\"%1/users\" target=\"_blank\">users</a> page.<br/>\nAdmin Invite Only - Only administrators can invite others from <a href=\"%1/users\" target=\"_blank\">users</a> and <a href=\"%1/admin/manage/users\">admin/manage/users</a> pages.<br/>\nNo registration - No user registration.<br/>", "registration-type.help": "عادي - بإمكان المستخدمين التسجيل من خلال صفحة /التسجيل.<br/>\nبموافقة الإدارة - يتم وضع قائمة تسجيلات المستخدمين في <a href=\"%1/admin/manage/registration\">قائمة إنتظار موافقة</a> الإدارة.<br/>\nبموافقة الإدارة لعناوين IP - عادي بالنسبة للمستخدمين الجدد، ويتطلب موافقة الإدارة للتسجيل من عناوين IP تم التسجيل بإستخدامها مسبقاً.<br/>\nبالدعوات فقط - بإمكان المستخدمين إرسال دعوات من خلال صفحة <a href=\"%1/users\" target=\"_blank\">الأعضاء</a>.<br/>\nبالدعوات من قبل الإدارة فقط - فقط المراء بإمكانهم إرسال الدعوات من خلال صفحة <a href=\"%1/users\" target=\"_blank\">الأعضاء</a> و صفحات <a href=\"%1/admin/manage/users\">الإدارة/المشرفين/الأعضاء</a>.<br/>\nلا يوجد تسجيل - إغلاق خيار التسجيل بالكامل.<br/>",
"registration-approval-type.help": "Normal - Users are registered immediately.<br/>\nAdmin Approval - User registrations are placed in an <a href=\"%1/admin/manage/registration\">approval queue</a> for administrators.<br/>\nAdmin Approval for IPs - Normal for new users, Admin Approval for IP addresses that already have an account.<br/>",
"registration.max-invites": "الحد الأقصى للدعوات لكل عضو", "registration.max-invites": "الحد الأقصى للدعوات لكل عضو",
"max-invites": "الحد الأقصى للدعوات لكل عضو", "max-invites": "الحد الأقصى للدعوات لكل عضو",
"max-invites-help": "0 لعدم تحديد قيود، الإدارة تحصل على دعوات لامحدودة <br> هذا الخيار يعمل فقط عند تحديد خيار \"بالدعوات فقط\"", "max-invites-help": "0 لعدم تحديد قيود، الإدارة تحصل على دعوات لامحدودة <br> هذا الخيار يعمل فقط عند تحديد خيار \"بالدعوات فقط\"",
@@ -71,9 +63,5 @@
"email-post-notif": "Send an email when replies are made to topics I am subscribed to", "email-post-notif": "Send an email when replies are made to topics I am subscribed to",
"follow-created-topics": "Follow topics you create", "follow-created-topics": "Follow topics you create",
"follow-replied-topics": "Follow topics that you reply to", "follow-replied-topics": "Follow topics that you reply to",
"default-notification-settings": "Default notification settings", "default-notification-settings": "Default notification settings"
"categoryWatchState": "Default category watch state",
"categoryWatchState.watching": "Watching",
"categoryWatchState.notwatching": "Not Watching",
"categoryWatchState.ignoring": "Ignoring"
} }

View File

@@ -7,16 +7,14 @@
"browsing": "تصفح", "browsing": "تصفح",
"no_replies": "لم يرد أحد", "no_replies": "لم يرد أحد",
"no_new_posts": "لا توجد مشاركات جديدة.", "no_new_posts": "لا توجد مشاركات جديدة.",
"share_this_category": "شارك هذا القسم",
"watch": "تابع", "watch": "تابع",
"ignore": "تجاهل", "ignore": "تجاهل",
"watching": "متابع", "watching": "متابع",
"not-watching": "لست متابع",
"ignoring": "متجاهل", "ignoring": "متجاهل",
"watching.description": "أظهر المواضيع في الغير مقروء و الحديث", "watching.description": "أظهر المواضيع في غير مقروء",
"not-watching.description": "Do not show topics in unread, show in recent", "ignoring.description": "لا تظهر المواضيع في غير مقروء",
"ignoring.description": "Do not show topics in unread and recent", "watch.message": "أنت الآن تتابع التحديثات من هذا القسم وجميع الأقسام الفرعية",
"watching.message": "You are now watching updates from this category and all subcategories", "ignore.message": "أنت الآن تتجاهل التحديثات من هذا القسم وجميع الأقسام الفرعية",
"notwatching.message": "You are not watching updates from this category and all subcategories",
"ignoring.message": "You are now ignoring updates from this category and all subcategories",
"watched-categories": "الأقسام المُتابعة" "watched-categories": "الأقسام المُتابعة"
} }

View File

@@ -1,49 +1,39 @@
{ {
"test-email.subject": "Test Email", "password-reset-requested": "تم طلب إعادة تعيين كلمة المرور - %1!",
"password-reset-requested": "Password Reset Requested!",
"welcome-to": "مرحبًا بك في %1", "welcome-to": "مرحبًا بك في %1",
"invite": "دعوة من %1", "invite": "دعوة من %1",
"greeting_no_name": "مرحبًا", "greeting_no_name": "مرحبًا",
"greeting_with_name": "مرحبًا بك يا %1", "greeting_with_name": "مرحبًا بك يا %1",
"email.verify-your-email.subject": "Please verify your email",
"email.verify.text1": "Your email address has changed!",
"welcome.text1": "شكرًا على تسجيلك في %1!", "welcome.text1": "شكرًا على تسجيلك في %1!",
"welcome.text2": "لتفعيل حسابك، نحتاج إلى التأكد من صحة عنوان البريد الإلكتروني الذي سجلت به.", "welcome.text2": "لتفعيل حسابك، نحتاج إلى التأكد من صحة عنوان البريد الإلكتروني الذي سجلت به.",
"welcome.text3": "تم قبول نتسجيلك ، يمكنك الدخول باتسخدام اسم المستخدم و كلمة المرور.", "welcome.text3": "تم قبول نتسجيلك ، يمكنك الدخول باتسخدام اسم المستخدم و كلمة المرور.",
"welcome.cta": "انقر هنا لتفعيل عنوان بريدك الإلكتروني", "welcome.cta": "انقر هنا لتفعيل عنوان بريدك الإلكتروني",
"invitation.text1": "%1 قام بدعوتك للانضمام لـ %2", "invitation.text1": "%1 قام بدعوتك للانضمام لـ %2",
"invitation.text2": "Your invitation will expire in %1 days.", "invitation.text2": "Your invitation will expire in %1 days.",
"invitation.cta": "Click here to create your account.", "invitation.ctr": "إضغط هنا لإنشاء حسابك",
"reset.text1": "لقد توصلنا بطلب إعادة تعيين كلمة المرور الخاصة بك، ربما لكونك قد نسيتها, إن لم يكن الأمر كذلك، المرجو تجاهل هذه الرسالة.", "reset.text1": "لقد توصلنا بطلب إعادة تعيين كلمة المرور الخاصة بك، ربما لكونك قد نسيتها, إن لم يكن الأمر كذلك، المرجو تجاهل هذه الرسالة.",
"reset.text2": "لمواصلة طلب إعاة تعيين كلمة المرور، الرجاء تتبع هذا الرابط.", "reset.text2": "لمواصلة طلب إعاة تعيين كلمة المرور، الرجاء تتبع هذا الرابط.",
"reset.cta": "انقر هنا لإعادة تعيين كلمة السر الخاصة بك.", "reset.cta": "انقر هنا لإعادة تعيين كلمة السر الخاصة بك.",
"reset.notify.subject": "تم تغيير كلمة المرور بنجاح", "reset.notify.subject": "تم تغيير كلمة المرور بنجاح",
"reset.notify.text1": "نحيطك علما أن كلمة مرورك قد تم تغييرها في %1", "reset.notify.text1": "نحيطك علما أن كلمة مرورك قد تم تغييرها في %1",
"reset.notify.text2": "إن لم يكن لديك علم بهذا، المرجو إشعار مدبر النظام بأسرع مايمكن.", "reset.notify.text2": "إن لم يكن لديك علم بهذا، المرجو إشعار مدبر النظام بأسرع مايمكن.",
"digest.notifications": "لديك تنبيهات غير مقروءة من طرف %1:",
"digest.latest_topics": "آخر المستجدات من %1", "digest.latest_topics": "آخر المستجدات من %1",
"digest.cta": "انقر هنا لمشاهدة %1", "digest.cta": "انقر هنا لمشاهدة %1",
"digest.unsub.info": "تم إرسال هذا الإشعار بآخر المستجدات وفقا لخيارات تسجيلكم.", "digest.unsub.info": "تم إرسال هذا الإشعار بآخر المستجدات وفقا لخيارات تسجيلكم.",
"digest.no_topics": "ليس هناك مواضيع نشيطة في %1 الماضي",
"digest.day": "يوم", "digest.day": "يوم",
"digest.week": "أسبوع", "digest.week": "أسبوع",
"digest.month": "شهر", "digest.month": "شهر",
"digest.subject": "إستهلاك ل", "digest.subject": "إستهلاك ل",
"digest.title.day": "Your Daily Digest",
"digest.title.week": "Your Weekly Digest",
"digest.title.month": "Your Monthly Digest",
"notif.chat.subject": "هناك محادثة جديدة من %1", "notif.chat.subject": "هناك محادثة جديدة من %1",
"notif.chat.cta": "انقر هنا لمتابعة المحادثة", "notif.chat.cta": "انقر هنا لمتابعة المحادثة",
"notif.chat.unsub.info": "تم إرسال هذا الإشعار بوجودة محادثة جديدة وفقا لخيارات تسجيلك.", "notif.chat.unsub.info": "تم إرسال هذا الإشعار بوجودة محادثة جديدة وفقا لخيارات تسجيلك.",
"notif.post.cta": "انقر هنا لقراءة الموضوع بأكمله",
"notif.post.unsub.info": "تم إشعارك بهذه المشاركة بناءً على الخيارات التي سبق وأن حددتها.", "notif.post.unsub.info": "تم إشعارك بهذه المشاركة بناءً على الخيارات التي سبق وأن حددتها.",
"notif.post.unsub.one-click": "Alternatively, unsubscribe from future emails like this, by clicking", "notif.cta": "Click here to go to forum",
"notif.cta": "To the forum",
"notif.cta-new-reply": "View Post",
"notif.cta-new-chat": "View Chat",
"notif.test.short": "Testing Notifications",
"notif.test.long": "This is a test of the notifications email. Send help!",
"test.text1": "هذه رسالة تجريبية للتأكد من صحة إعدادت الرسائل الإلكترونية في منتدى NodeBB خاصتك.", "test.text1": "هذه رسالة تجريبية للتأكد من صحة إعدادت الرسائل الإلكترونية في منتدى NodeBB خاصتك.",
"unsub.cta": "انقر هنا لتغيير تلك الإعدادات", "unsub.cta": "انقر هنا لتغيير تلك الإعدادات",
"unsubscribe": "unsubscribe",
"unsub.success": "You will no longer receive emails from the <strong>%1</strong> mailing list",
"banned.subject": "You have been banned from %1", "banned.subject": "You have been banned from %1",
"banned.text1": "The user %1 has been banned from %2.", "banned.text1": "The user %1 has been banned from %2.",
"banned.text2": "This ban will last until %1.", "banned.text2": "This ban will last until %1.",

View File

@@ -11,9 +11,6 @@
"invalid-uid": "مستخدم غير موجود", "invalid-uid": "مستخدم غير موجود",
"invalid-username": "اسم المستخدم غير مقبول", "invalid-username": "اسم المستخدم غير مقبول",
"invalid-email": "البريد الاكتروني غير مقبول", "invalid-email": "البريد الاكتروني غير مقبول",
"invalid-fullname": "Invalid Fullname",
"invalid-location": "Invalid Location",
"invalid-birthday": "Invalid Birthday",
"invalid-title": "Invalid title", "invalid-title": "Invalid title",
"invalid-user-data": "بيانات المستخدم غير صحيحة", "invalid-user-data": "بيانات المستخدم غير صحيحة",
"invalid-password": "كلمة السر غير مقبولة", "invalid-password": "كلمة السر غير مقبولة",
@@ -26,18 +23,16 @@
"invalid-pagination-value": "رقم الصفحة غير صحيح ، يجب أن يكون بين %1 و %2 .", "invalid-pagination-value": "رقم الصفحة غير صحيح ، يجب أن يكون بين %1 و %2 .",
"username-taken": "اسم المستخدم مأخوذ", "username-taken": "اسم المستخدم مأخوذ",
"email-taken": "البريد الالكتروني مأخوذ", "email-taken": "البريد الالكتروني مأخوذ",
"email-not-confirmed": "You are unable to post until your email is confirmed, please click here to confirm your email.", "email-not-confirmed": "عنوان بريدك الإلكتروني غير مفعل بعد. انقر هنا لتفعيله من فضلك.",
"email-not-confirmed-chat": "لا يمكنك الدردشة حتى تقوم بتأكيد بريدك الإلكتروني، الرجاء إضغط هنا لتأكيد بريدك اﻹلكتروني.", "email-not-confirmed-chat": "لا يمكنك الدردشة حتى تقوم بتأكيد بريدك الإلكتروني، الرجاء إضغط هنا لتأكيد بريدك اﻹلكتروني.",
"email-not-confirmed-email-sent": "Your email has not been confirmed yet, please check your inbox for the confirmation email. You won't be able to post or chat until your email is confirmed.", "email-not-confirmed-email-sent": "بريدك الإلكتروني غير مفعل. رجاءًا تفحص صندوق البريد عن رسالة التفعيل.",
"no-email-to-confirm": "هذا المنتدى يستلزم تفعيل بريدك الإلكتروني، انقر هنا من فضلك لإدخاله.", "no-email-to-confirm": "هذا المنتدى يستلزم تفعيل بريدك الإلكتروني، انقر هنا من فضلك لإدخاله.",
"email-confirm-failed": "لم نستطع تفعيل بريدك الإلكتروني، المرجو المحاولة لاحقًا.", "email-confirm-failed": "لم نستطع تفعيل بريدك الإلكتروني، المرجو المحاولة لاحقًا.",
"confirm-email-already-sent": "لقد تم ارسال بريد التأكيد، الرجاء اﻹنتظار 1% دقائق لإعادة اﻹرسال", "confirm-email-already-sent": "لقد تم ارسال بريد التأكيد، الرجاء اﻹنتظار 1% دقائق لإعادة اﻹرسال",
"sendmail-not-found": "The sendmail executable could not be found, please ensure it is installed and executable by the user running NodeBB.", "sendmail-not-found": "The sendmail executable could not be found, please ensure it is installed and executable by the user running NodeBB.",
"digest-not-enabled": "This user does not have digests enabled, or the system default is not configured to send digests",
"username-too-short": "اسم المستخدم قصير.", "username-too-short": "اسم المستخدم قصير.",
"username-too-long": "اسم المستخدم طويل", "username-too-long": "اسم المستخدم طويل",
"password-too-long": "كلمة السر طويلة ", "password-too-long": "كلمة السر طويلة ",
"reset-rate-limited": "Too many password reset requests (rate limited)",
"user-banned": "المستخدم محظور", "user-banned": "المستخدم محظور",
"user-banned-reason": "Sorry, this account has been banned (Reason: %1)", "user-banned-reason": "Sorry, this account has been banned (Reason: %1)",
"user-banned-reason-until": "Sorry, this account has been banned until %1 (Reason: %2)", "user-banned-reason-until": "Sorry, this account has been banned until %1 (Reason: %2)",
@@ -83,7 +78,6 @@
"still-uploading": "الرجاء الانتظار حتى يكتمل الرفع.", "still-uploading": "الرجاء الانتظار حتى يكتمل الرفع.",
"file-too-big": "الحد الأقصى لرفع الملفات %1 كيلو بت. رجاءًا ارفع ملف أصغر", "file-too-big": "الحد الأقصى لرفع الملفات %1 كيلو بت. رجاءًا ارفع ملف أصغر",
"guest-upload-disabled": "خاصية رفع الملفات غير مفعلة للزوار.", "guest-upload-disabled": "خاصية رفع الملفات غير مفعلة للزوار.",
"cors-error": "Unable to upload image due to misconfigured CORS",
"already-bookmarked": "You have already bookmarked this post", "already-bookmarked": "You have already bookmarked this post",
"already-unbookmarked": "You have already unbookmarked this post", "already-unbookmarked": "You have already unbookmarked this post",
"cant-ban-other-admins": "لايمكن حظر مدبر نظام آخر.", "cant-ban-other-admins": "لايمكن حظر مدبر نظام آخر.",
@@ -93,7 +87,6 @@
"invalid-image-type": "نوع الصورة غير مدعوم. الأنواع المدعومة هي : %1", "invalid-image-type": "نوع الصورة غير مدعوم. الأنواع المدعومة هي : %1",
"invalid-image-extension": "امتداد الصورة غير مدعوم.", "invalid-image-extension": "امتداد الصورة غير مدعوم.",
"invalid-file-type": "صيغة الملف غير مدعومة. الأنواع المدعومة هي: %1", "invalid-file-type": "صيغة الملف غير مدعومة. الأنواع المدعومة هي: %1",
"invalid-image-dimensions": "Image dimensions are too big",
"group-name-too-short": "اسم المجموعة قصير", "group-name-too-short": "اسم المجموعة قصير",
"group-name-too-long": "اسم المجموعة طويل.", "group-name-too-long": "اسم المجموعة طويل.",
"group-already-exists": "المجموعة موجودة مسبقا", "group-already-exists": "المجموعة موجودة مسبقا",
@@ -103,8 +96,6 @@
"group-needs-owner": "هذه المجموعة تتطلب مالك واحد على اﻷقل", "group-needs-owner": "هذه المجموعة تتطلب مالك واحد على اﻷقل",
"group-already-invited": "المستخدم سبق وأن تمت دعوته", "group-already-invited": "المستخدم سبق وأن تمت دعوته",
"group-already-requested": "سبق وتم تسجيل طلب العضوية", "group-already-requested": "سبق وتم تسجيل طلب العضوية",
"group-join-disabled": "You are not able to join this group at this time",
"group-leave-disabled": "You are not able to leave this group at this time",
"post-already-deleted": "سبق وتم حذف هذا الرد", "post-already-deleted": "سبق وتم حذف هذا الرد",
"post-already-restored": "سبق وتم إلغاء حذف هذا الرد", "post-already-restored": "سبق وتم إلغاء حذف هذا الرد",
"topic-already-deleted": "سبق وتم حذف هذا الموضوع", "topic-already-deleted": "سبق وتم حذف هذا الموضوع",
@@ -127,7 +118,7 @@
"chat-edit-duration-expired": "You are only allowed to edit chat messages for %1 second(s) after posting", "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", "chat-delete-duration-expired": "You are only allowed to delete chat messages for %1 second(s) after posting",
"chat-deleted-already": "This chat message has already been deleted.", "chat-deleted-already": "This chat message has already been deleted.",
"chat-restored-already": "This chat message has already been restored.", "chat-restored'already": "This chat message has already been restored.",
"already-voting-for-this-post": "لقد شاركت بالتصويت ، ألا تذكر؟", "already-voting-for-this-post": "لقد شاركت بالتصويت ، ألا تذكر؟",
"reputation-system-disabled": "نظام السمعة معطل", "reputation-system-disabled": "نظام السمعة معطل",
"downvoting-disabled": "التصويتات السلبية معطلة", "downvoting-disabled": "التصويتات السلبية معطلة",
@@ -150,6 +141,7 @@
"invite-maximum-met": "لقد قمت بدعوة الحد الأقصى من الأشخاص (%1 من %2)", "invite-maximum-met": "لقد قمت بدعوة الحد الأقصى من الأشخاص (%1 من %2)",
"no-session-found": "لم دخول مسجل!", "no-session-found": "لم دخول مسجل!",
"not-in-room": "المستخدم غير موجود في الغرفة.", "not-in-room": "المستخدم غير موجود في الغرفة.",
"no-users-in-room": "لا يوجد مستخدمين في الغرفة.",
"cant-kick-self": "لا يمكنك طرد نفسك من المجموعة.", "cant-kick-self": "لا يمكنك طرد نفسك من المجموعة.",
"no-users-selected": "لا يوجد مستخدم محدد.", "no-users-selected": "لا يوجد مستخدم محدد.",
"invalid-home-page-route": "Invalid home page route", "invalid-home-page-route": "Invalid home page route",
@@ -159,8 +151,5 @@
"cant-move-to-same-topic": "Can't move post to same topic!", "cant-move-to-same-topic": "Can't move post to same topic!",
"cannot-block-self": "You cannot block yourself!", "cannot-block-self": "You cannot block yourself!",
"cannot-block-privileged": "You cannot block administrators or global moderators", "cannot-block-privileged": "You cannot block administrators or global moderators",
"cannot-block-guest": "Guest are not able to block other users",
"already-blocked": "This user is already blocked",
"already-unblocked": "This user is already unblocked",
"no-connection": "There seems to be a problem with your internet connection" "no-connection": "There seems to be a problem with your internet connection"
} }

View File

@@ -9,7 +9,6 @@
"updated": "Updated", "updated": "Updated",
"target-purged": "The content this flag referred to has been purged and is no longer available.", "target-purged": "The content this flag referred to has been purged and is no longer available.",
"graph-label": "Daily Flags",
"quick-filters": "Quick Filters", "quick-filters": "Quick Filters",
"filter-active": "There are one or more filters active in this list of flags", "filter-active": "There are one or more filters active in this list of flags",
"filter-reset": "Remove Filters", "filter-reset": "Remove Filters",

View File

@@ -48,6 +48,7 @@
"alert.banned.message": "لقد تم حظر حسابك. سيتم تسجيل الخروج.", "alert.banned.message": "لقد تم حظر حسابك. سيتم تسجيل الخروج.",
"alert.unfollow": "أنت لا تتابع %1 بعد الآن!", "alert.unfollow": "أنت لا تتابع %1 بعد الآن!",
"alert.follow": "أنت الآن تتابع %1!", "alert.follow": "أنت الآن تتابع %1!",
"online": "المتواجدون حاليًّا",
"users": "الأعضاء", "users": "الأعضاء",
"topics": "المواضيع", "topics": "المواضيع",
"posts": "المشاركات", "posts": "المشاركات",
@@ -59,8 +60,6 @@
"downvoted": "مصوت بالسالب", "downvoted": "مصوت بالسالب",
"views": "المشاهدات", "views": "المشاهدات",
"reputation": "السمعة", "reputation": "السمعة",
"lastpost": "Last post",
"firstpost": "First post",
"read_more": "اقرأ المزيد", "read_more": "اقرأ المزيد",
"more": "المزيد", "more": "المزيد",
"posted_ago_by_guest": "كتب %1 بواسطة زائر", "posted_ago_by_guest": "كتب %1 بواسطة زائر",
@@ -78,7 +77,6 @@
"recentposts": "آخر المشاركات", "recentposts": "آخر المشاركات",
"recentips": "آخر عناوين ال IP التي سجلت الدخول", "recentips": "آخر عناوين ال IP التي سجلت الدخول",
"moderator_tools": "أدوات المشرف", "moderator_tools": "أدوات المشرف",
"online": "المتواجدون حاليًّا",
"away": "غير متواجد", "away": "غير متواجد",
"dnd": "عدم الإزعاج", "dnd": "عدم الإزعاج",
"invisible": "مخفي", "invisible": "مخفي",
@@ -87,7 +85,6 @@
"language": "اللغة", "language": "اللغة",
"guest": "زائر", "guest": "زائر",
"guests": "الزوار", "guests": "الزوار",
"former_user": "A Former User",
"updated.title": "تم تحديث المنتدى", "updated.title": "تم تحديث المنتدى",
"updated.message": "لقد تم تحديث المنتدى إلى آخر نسخة للتو. إضغط هنا لإعادة تحميل الصفحة.", "updated.message": "لقد تم تحديث المنتدى إلى آخر نسخة للتو. إضغط هنا لإعادة تحميل الصفحة.",
"privacy": "الخصوصية", "privacy": "الخصوصية",

View File

@@ -25,11 +25,9 @@
"details.latest_posts": "آخر المشاركات", "details.latest_posts": "آخر المشاركات",
"details.private": "خاص", "details.private": "خاص",
"details.disableJoinRequests": "Disable join requests", "details.disableJoinRequests": "Disable join requests",
"details.disableLeave": "Disallow users from leaving the group",
"details.grant": "منح/سحب المِلكية", "details.grant": "منح/سحب المِلكية",
"details.kick": "طرد", "details.kick": "طرد",
"details.kick_confirm": "Are you sure you want to remove this member from the group?", "details.kick_confirm": "Are you sure you want to remove this member from the group?",
"details.add-member": "Add Member",
"details.owner_options": "إدارة المجموعة", "details.owner_options": "إدارة المجموعة",
"details.group_name": "اسم المجموعة", "details.group_name": "اسم المجموعة",
"details.member_count": "عدد اﻷعضاء", "details.member_count": "عدد اﻷعضاء",
@@ -37,8 +35,7 @@
"details.description": "الوصف", "details.description": "الوصف",
"details.badge_preview": "معاينة الوسام", "details.badge_preview": "معاينة الوسام",
"details.change_icon": "تغيير الأيقونة", "details.change_icon": "تغيير الأيقونة",
"details.change_label_colour": "Change Label Colour", "details.change_colour": "تغيير اللون",
"details.change_text_colour": "Change Text Colour",
"details.badge_text": "نص الوسام", "details.badge_text": "نص الوسام",
"details.userTitleEnabled": "إظهار الوسام", "details.userTitleEnabled": "إظهار الوسام",
"details.private_help": "في حالة تفعيل الخيار، الانضمام إلى المجموعة يستلزم قبول مالكها", "details.private_help": "في حالة تفعيل الخيار، الانضمام إلى المجموعة يستلزم قبول مالكها",
@@ -49,11 +46,9 @@
"event.updated": "تم تحديث بيانات المجموعة", "event.updated": "تم تحديث بيانات المجموعة",
"event.deleted": "تم حذف المجموعة %1", "event.deleted": "تم حذف المجموعة %1",
"membership.accept-invitation": "اقبل الدعوة", "membership.accept-invitation": "اقبل الدعوة",
"membership.accept.notification_title": "You are now a member of <strong>%1</strong>",
"membership.invitation-pending": "الدعوة بانتظار القبول", "membership.invitation-pending": "الدعوة بانتظار القبول",
"membership.join-group": "انظم للمجموعة", "membership.join-group": "انظم للمجموعة",
"membership.leave-group": "غادر المجموعة", "membership.leave-group": "غادر المجموعة",
"membership.leave.notification_title": "<strong>%1</strong> has left group <strong>%2</strong>",
"membership.reject": "رفض", "membership.reject": "رفض",
"new-group.group_name": "اسم المجموعة", "new-group.group_name": "اسم المجموعة",
"upload-group-cover": "Upload group cover", "upload-group-cover": "Upload group cover",

View File

@@ -22,7 +22,7 @@
"chat.delete_message_confirm": "هل أنت متأكد من أنك تريد حذف هذه الرسالة؟", "chat.delete_message_confirm": "هل أنت متأكد من أنك تريد حذف هذه الرسالة؟",
"chat.retrieving-users": "Retrieving users...", "chat.retrieving-users": "Retrieving users...",
"chat.manage-room": "Manage Chat Room", "chat.manage-room": "Manage Chat Room",
"chat.add-user-help": "Search for users here. When selected, the user will be added to the chat. The new user will not be able to see chat messages written before they were added to the conversation. Only room owners (<i class=\"fa fa-star text-warning\"></i>) may remove users from chat rooms.", "chat.add-user-help": "Search for users here. When selected, the user will be added to the chat. The new user will not be able to see chat messages written before they were added to the conversation. Only room owners may remove users from chat rooms.",
"chat.confirm-chat-with-dnd-user": "This user has set their status to DnD(Do not disturb). Do you still want to chat with them?", "chat.confirm-chat-with-dnd-user": "This user has set their status to DnD(Do not disturb). Do you still want to chat with them?",
"chat.rename-room": "Rename Room", "chat.rename-room": "Rename Room",
"chat.rename-placeholder": "Enter your room name here", "chat.rename-placeholder": "Enter your room name here",
@@ -33,10 +33,6 @@
"chat.in-room": "In this room", "chat.in-room": "In this room",
"chat.kick": "Kick", "chat.kick": "Kick",
"chat.show-ip": "Show IP", "chat.show-ip": "Show IP",
"chat.owner": "Room Owner",
"chat.system.user-join": "%1 has joined the room",
"chat.system.user-leave": "%1 has left the room",
"chat.system.room-rename": "%2 has renamed this room: %1",
"composer.compose": "اكتب", "composer.compose": "اكتب",
"composer.show_preview": "عرض المعاينة", "composer.show_preview": "عرض المعاينة",
"composer.hide_preview": "إخفاء المعاينة", "composer.hide_preview": "إخفاء المعاينة",
@@ -50,7 +46,6 @@
"composer.formatting.italic": "Italic", "composer.formatting.italic": "Italic",
"composer.formatting.list": "List", "composer.formatting.list": "List",
"composer.formatting.strikethrough": "Strikethrough", "composer.formatting.strikethrough": "Strikethrough",
"composer.formatting.code": "Code",
"composer.formatting.link": "Link", "composer.formatting.link": "Link",
"composer.formatting.picture": "Picture", "composer.formatting.picture": "Picture",
"composer.upload-picture": "Upload Image", "composer.upload-picture": "Upload Image",

View File

@@ -5,20 +5,21 @@
"mark_all_read": "اجعل كل التنبيهات مقروءة", "mark_all_read": "اجعل كل التنبيهات مقروءة",
"back_to_home": "عودة إلى %1", "back_to_home": "عودة إلى %1",
"outgoing_link": "رابط خارجي", "outgoing_link": "رابط خارجي",
"outgoing_link_message": "أنت تغادر اﻻن %1", "outgoing_link_message": "You are now leaving %1",
"continue_to": "استمر إلى %1", "continue_to": "استمر إلى %1",
"return_to": "عودة إى %1", "return_to": "عودة إى %1",
"new_notification": "لديك تنبيه جديد", "new_notification": "تنبيه جديد",
"new_notification_from": "You have a new Notification from %1",
"you_have_unread_notifications": "لديك تنبيهات غير مقروءة.", "you_have_unread_notifications": "لديك تنبيهات غير مقروءة.",
"all": "الكل", "all": "All",
"topics": "مواضيع", "topics": "Topics",
"replies": "ردود", "replies": "Replies",
"chat": "محادثات", "chat": "Chats",
"follows": "متابعون", "follows": "Follows",
"upvote": "الموافقين", "upvote": "Upvotes",
"new-flags": "New Flags", "new-flags": "New Flags",
"my-flags": "Flags assigned to me", "my-flags": "Flags assigned to me",
"bans": "الحظر", "bans": "Bans",
"new_message_from": "رسالة جديدة من <strong>%1</strong>", "new_message_from": "رسالة جديدة من <strong>%1</strong>",
"upvoted_your_post_in": "<strong>%1</strong> أضاف صوتًا إيجابيا إلى مشاركتك في <strong>%2</strong>.", "upvoted_your_post_in": "<strong>%1</strong> أضاف صوتًا إيجابيا إلى مشاركتك في <strong>%2</strong>.",
"upvoted_your_post_in_dual": "<strong>%1</strong> and <strong>%2</strong> have upvoted your post in <strong>%3</strong>.", "upvoted_your_post_in_dual": "<strong>%1</strong> and <strong>%2</strong> have upvoted your post in <strong>%3</strong>.",
@@ -40,23 +41,22 @@
"user_started_following_you_multiple": "<strong>%1</strong> and %2 others started following you.", "user_started_following_you_multiple": "<strong>%1</strong> and %2 others started following you.",
"new_register": "<strong>%1</strong> sent a registration request.", "new_register": "<strong>%1</strong> sent a registration request.",
"new_register_multiple": "There are <strong>%1</strong> registration requests awaiting review.", "new_register_multiple": "There are <strong>%1</strong> registration requests awaiting review.",
"flag_assigned_to_you": "تم تخصيص العلامة 1% لك", "flag_assigned_to_you": "<strong>Flag %1</strong> has been assigned to you",
"post_awaiting_review": "Post awaiting review", "post_awaiting_review": "Post awaiting review",
"email-confirmed": "تم التحقق من عنوان البريد الإلكتروني", "email-confirmed": "تم التحقق من عنوان البريد الإلكتروني",
"email-confirmed-message": "شكرًا على إثبات صحة عنوان بريدك الإلكتروني. صار حسابك مفعلًا بالكامل.", "email-confirmed-message": "شكرًا على إثبات صحة عنوان بريدك الإلكتروني. صار حسابك مفعلًا بالكامل.",
"email-confirm-error-message": "حدث خطأ أثناء التحقق من عنوان بريدك الإلكتروني. ربما رمز التفعيل خاطئ أو انتهت صلاحيته.", "email-confirm-error-message": "حدث خطأ أثناء التحقق من عنوان بريدك الإلكتروني. ربما رمز التفعيل خاطئ أو انتهت صلاحيته.",
"email-confirm-sent": "تم إرسال بريد التفعيل.", "email-confirm-sent": "تم إرسال بريد التفعيل.",
"none": "None", "none": "None",
"notification_only": "التنبيهات فقط", "notification_only": "Notification Only",
"email_only": "البريد الالكتروني فقط", "email_only": "Email Only",
"notification_and_email": "التنبيهات والبريد اﻻلكتروني", "notification_and_email": "Notification & Email",
"notificationType_upvote": "عندما يوافقك احدهم على منشورك", "notificationType_upvote": "When someone upvotes your post",
"notificationType_new-topic": "When someone you follow posts a topic", "notificationType_new-topic": "When someone you follow posts a topic",
"notificationType_new-reply": "When a new reply is posted in a topic you are watching", "notificationType_new-reply": "When a new reply is posted in a topic you are watching",
"notificationType_follow": "When someone starts following you", "notificationType_follow": "When someone starts following you",
"notificationType_new-chat": "When you receive a chat message", "notificationType_new-chat": "When you receive a chat message",
"notificationType_group-invite": "When you receive a group invite", "notificationType_group-invite": "When you receive a group invite",
"notificationType_group-request-membership": "When someone requests to join a group you own",
"notificationType_new-register": "When someone gets added to registration queue", "notificationType_new-register": "When someone gets added to registration queue",
"notificationType_post-queue": "When a new post is queued", "notificationType_post-queue": "When a new post is queued",
"notificationType_new-post-flag": "When a post is flagged", "notificationType_new-post-flag": "When a post is flagged",

View File

@@ -6,10 +6,7 @@
"popular-month": "المواضيع الشائعة هذا الشهر", "popular-month": "المواضيع الشائعة هذا الشهر",
"popular-alltime": "المواضيع الشائعة منذ القدم", "popular-alltime": "المواضيع الشائعة منذ القدم",
"recent": "المواضيع الحديثة", "recent": "المواضيع الحديثة",
"top-day": "Top voted topics today", "top": "Top Voted Topics",
"top-week": "Top voted topics this week",
"top-month": "Top voted topics this month",
"top-alltime": "Top Voted Topics",
"moderator-tools": "Moderator Tools", "moderator-tools": "Moderator Tools",
"flagged-content": "Flagged Content", "flagged-content": "Flagged Content",
"ip-blacklist": "IP Blacklist", "ip-blacklist": "IP Blacklist",
@@ -43,10 +40,8 @@
"account/following": "People %1 follows", "account/following": "People %1 follows",
"account/followers": "People who follow %1", "account/followers": "People who follow %1",
"account/posts": "Posts made by %1", "account/posts": "Posts made by %1",
"account/latest-posts": "Latest posts made by %1",
"account/topics": "Topics created by %1", "account/topics": "Topics created by %1",
"account/groups": "%1's Groups", "account/groups": "%1's Groups",
"account/watched_categories": "%1's Watched Categories",
"account/bookmarks": "%1's Bookmarked Posts", "account/bookmarks": "%1's Bookmarked Posts",
"account/settings": "خيارات المستخدم", "account/settings": "خيارات المستخدم",
"account/watched": "Topics watched by %1", "account/watched": "Topics watched by %1",
@@ -56,7 +51,6 @@
"account/best": "Best posts made by %1", "account/best": "Best posts made by %1",
"account/blocks": "Blocked users for %1", "account/blocks": "Blocked users for %1",
"account/uploads": "Uploads by %1", "account/uploads": "Uploads by %1",
"account/sessions": "Login Sessions",
"confirm": "تم التحقق من عنوان البريد الإلكتروني", "confirm": "تم التحقق من عنوان البريد الإلكتروني",
"maintenance.text": "جاري صيانة %1. المرجو العودة لاحقًا.", "maintenance.text": "جاري صيانة %1. المرجو العودة لاحقًا.",
"maintenance.messageIntro": "بالإضافة إلى ذلك، قام مدبر النظام بترك هذه الرسالة:", "maintenance.messageIntro": "بالإضافة إلى ذلك، قام مدبر النظام بترك هذه الرسالة:",

View File

@@ -9,7 +9,7 @@
"repeat_password": "تأكيد كلمة المرور", "repeat_password": "تأكيد كلمة المرور",
"enter_email": "يرجى إدخال <strong>عنوان البريد الإلكتروني</strong> الخاص بك وسوف نرسل لك رسالة بالبريد الالكتروني مع تعليمات حول كيفية إستعادة حسابك.", "enter_email": "يرجى إدخال <strong>عنوان البريد الإلكتروني</strong> الخاص بك وسوف نرسل لك رسالة بالبريد الالكتروني مع تعليمات حول كيفية إستعادة حسابك.",
"enter_email_address": "ادخل عنوان البريد الإلكتروني", "enter_email_address": "ادخل عنوان البريد الإلكتروني",
"password_reset_sent": "If the specified address corresponds to an existing user account, a password reset email was sent. Please note that only one email will be sent per minute.", "password_reset_sent": "A password reset email has been sent to the specified address. Please note that only one email will be sent per minute.",
"invalid_email": "بريد إلكتروني غير صالح أو غير موجود", "invalid_email": "بريد إلكتروني غير صالح أو غير موجود",
"password_too_short": "كلمة المرور التي أدخلتها قصيرة، الرجاء اختر كلمة مرور مختلفة", "password_too_short": "كلمة المرور التي أدخلتها قصيرة، الرجاء اختر كلمة مرور مختلفة",
"passwords_do_not_match": "كلمتا السر التي أدخلتهما غير متطابقتان", "passwords_do_not_match": "كلمتا السر التي أدخلتهما غير متطابقتان",

View File

@@ -17,7 +17,6 @@
"at-most": "على اﻷكثر", "at-most": "على اﻷكثر",
"relevance": "Relevance", "relevance": "Relevance",
"post-time": "تاريخ المشاركة", "post-time": "تاريخ المشاركة",
"votes": "Votes",
"newer-than": "أحدث من", "newer-than": "أحدث من",
"older-than": "أقدم من", "older-than": "أقدم من",
"any-date": "أي وقت", "any-date": "أي وقت",
@@ -31,7 +30,6 @@
"sort-by": "عرض حسب", "sort-by": "عرض حسب",
"last-reply-time": "تاريخ آخر رد", "last-reply-time": "تاريخ آخر رد",
"topic-title": "عنوان الموضوع", "topic-title": "عنوان الموضوع",
"topic-votes": "Topic votes",
"number-of-replies": "عدد الردود", "number-of-replies": "عدد الردود",
"number-of-views": "عدد المشاهدات", "number-of-views": "عدد المشاهدات",
"topic-start-date": "تاريخ بدأ الموضوع", "topic-start-date": "تاريخ بدأ الموضوع",
@@ -43,6 +41,5 @@
"clear-preferences": "ازالة التفضيلات", "clear-preferences": "ازالة التفضيلات",
"search-preferences-saved": "تم حفظ تفضيلات البحث", "search-preferences-saved": "تم حفظ تفضيلات البحث",
"search-preferences-cleared": "تم ازالة تفضيلات البحث", "search-preferences-cleared": "تم ازالة تفضيلات البحث",
"show-results-as": "عرض النتائج كـ", "show-results-as": "عرض النتائج كـ"
"see-more-results": "See more results (%1)"
} }

View File

@@ -18,13 +18,11 @@
"last_reply_time": "Last reply", "last_reply_time": "Last reply",
"reply-as-topic": "رد بموضوع", "reply-as-topic": "رد بموضوع",
"guest-login-reply": "يجب عليك تسجيل الدخول للرد", "guest-login-reply": "يجب عليك تسجيل الدخول للرد",
"login-to-view": "🔒 Log in to view",
"edit": "تعديل", "edit": "تعديل",
"delete": "حذف", "delete": "حذف",
"purge": "تطهير", "purge": "تطهير",
"restore": "استعادة", "restore": "استعادة",
"move": "نقل", "move": "نقل",
"change-owner": "Change Owner",
"fork": "فرع", "fork": "فرع",
"link": "رابط", "link": "رابط",
"share": "نشر", "share": "نشر",
@@ -66,7 +64,6 @@
"thread_tools.move": "نقل الموضوع", "thread_tools.move": "نقل الموضوع",
"thread_tools.move-posts": "Move Posts", "thread_tools.move-posts": "Move Posts",
"thread_tools.move_all": "نقل الكل", "thread_tools.move_all": "نقل الكل",
"thread_tools.change_owner": "Change Owner",
"thread_tools.select_category": "Select Category", "thread_tools.select_category": "Select Category",
"thread_tools.fork": "إنشاء فرع الموضوع", "thread_tools.fork": "إنشاء فرع الموضوع",
"thread_tools.delete": "حذف الموضوع", "thread_tools.delete": "حذف الموضوع",
@@ -101,7 +98,6 @@
"delete_posts_instruction": "Click the posts you want to delete/purge", "delete_posts_instruction": "Click the posts you want to delete/purge",
"merge_topics_instruction": "Click the topics you want to merge", "merge_topics_instruction": "Click the topics you want to merge",
"move_posts_instruction": "Click the posts you want to move", "move_posts_instruction": "Click the posts you want to move",
"change_owner_instruction": "Click the posts you want to assign to another user",
"composer.title_placeholder": "أدخل عنوان موضوعك هنا...", "composer.title_placeholder": "أدخل عنوان موضوعك هنا...",
"composer.handle_placeholder": "اﻹسم", "composer.handle_placeholder": "اﻹسم",
"composer.discard": "نبذ التغييرات", "composer.discard": "نبذ التغييرات",
@@ -133,7 +129,5 @@
"diffs.description": "This post has <strong>%1</strong> revisions. Click one of the revisions below to see the post content at that point in time.", "diffs.description": "This post has <strong>%1</strong> revisions. Click one of the revisions below to see the post content at that point in time.",
"diffs.no-revisions-description": "This post has <strong>%1</strong> revisions.", "diffs.no-revisions-description": "This post has <strong>%1</strong> revisions.",
"diffs.current-revision": "current revision", "diffs.current-revision": "current revision",
"diffs.original-revision": "original revision", "diffs.original-revision": "original revision"
"timeago_later": "%1 later",
"timeago_earlier": "%1 earlier"
} }

View File

@@ -25,17 +25,12 @@
"profile_views": "عدد المشاهدات", "profile_views": "عدد المشاهدات",
"reputation": "السمعة", "reputation": "السمعة",
"bookmarks": "Bookmarks", "bookmarks": "Bookmarks",
"watched_categories": "Watched categories",
"change_all": "Change All",
"watched": "متابع", "watched": "متابع",
"ignored": "تم تجاهله", "ignored": "تم تجاهله",
"default-category-watch-state": "Default category watch state",
"followers": "المتابعون", "followers": "المتابعون",
"following": "يتابع", "following": "يتابع",
"blocks": "Blocks", "blocks": "Blocks",
"block_toggle": "Toggle Block", "block_toggle": "Toggle Block",
"block_user": "Block User",
"unblock_user": "Unblock User",
"aboutme": "معلومة عنك او السيرة الذاتية", "aboutme": "معلومة عنك او السيرة الذاتية",
"signature": "توقيع", "signature": "توقيع",
"birthday": "عيد ميلاد", "birthday": "عيد ميلاد",
@@ -50,7 +45,6 @@
"change_picture": "تغيير الصورة", "change_picture": "تغيير الصورة",
"change_username": "تغيير اسم المستخدم", "change_username": "تغيير اسم المستخدم",
"change_email": "تغيير البريد اﻹلكتروني", "change_email": "تغيير البريد اﻹلكتروني",
"email_same_as_password": "Please enter your current password to continue &ndash; you've entered your new email again",
"edit": "تعديل", "edit": "تعديل",
"edit-profile": "تعديل الملف الشخصي", "edit-profile": "تعديل الملف الشخصي",
"default_picture": "أيقونة افتراضية", "default_picture": "أيقونة افتراضية",
@@ -87,6 +81,7 @@
"digest_daily": "يوميا", "digest_daily": "يوميا",
"digest_weekly": "أسبوعيًّا", "digest_weekly": "أسبوعيًّا",
"digest_monthly": "شهريًّا", "digest_monthly": "شهريًّا",
"settings-require-reload": "تغيير بعض اﻹعدادات يتطلب تحديث الصفحة. إضغط هنا لتحديث الصفحة",
"has_no_follower": "هذا المستخدم ليس لديه أية متابعين :(", "has_no_follower": "هذا المستخدم ليس لديه أية متابعين :(",
"follows_no_one": "هذا المستخدم لا يتابع أحد :(", "follows_no_one": "هذا المستخدم لا يتابع أحد :(",
"has_no_posts": "هذا المستخدم لم يشارك حتى الآن.", "has_no_posts": "هذا المستخدم لم يشارك حتى الآن.",
@@ -112,20 +107,19 @@
"no-sound": "بدون صوت", "no-sound": "بدون صوت",
"upvote-notif-freq": "معدل تكرار تنبيهات التصويت للأعلى", "upvote-notif-freq": "معدل تكرار تنبيهات التصويت للأعلى",
"upvote-notif-freq.all": "كل التصويتات للأعلى", "upvote-notif-freq.all": "كل التصويتات للأعلى",
"upvote-notif-freq.first": "First Per Post",
"upvote-notif-freq.everyTen": "كل عشر تصويتات للأعلى", "upvote-notif-freq.everyTen": "كل عشر تصويتات للأعلى",
"upvote-notif-freq.threshold": "On 1, 5, 10, 25, 50, 100, 150, 200...",
"upvote-notif-freq.logarithmic": "On 10, 100, 1000...", "upvote-notif-freq.logarithmic": "On 10, 100, 1000...",
"upvote-notif-freq.disabled": "معطل", "upvote-notif-freq.disabled": "معطل",
"browsing": "خيارات التصفح", "browsing": "خيارات التصفح",
"open_links_in_new_tab": "فتح الروابط الخارجية في نافدة جديدة", "open_links_in_new_tab": "فتح الروابط الخارجية في نافدة جديدة",
"enable_topic_searching": "تفعيل خاصية البحث داخل المواضيع", "enable_topic_searching": "تفعيل خاصية البحث داخل المواضيع",
"topic_search_help": "إذا قمت بتفعيل ميزة البحث في-الموضوع، سيتم تجاوز الخيار الافتراضي للمتصفح مما يؤدي للبحث بكامل الموضوع بدلا عن البحث في الجزء الظاهر في الشاشة.", "topic_search_help": "إذا قمت بتفعيل ميزة البحث في-الموضوع، سيتم تجاوز الخيار الافتراضي للمتصفح مما يؤدي للبحث بكامل الموضوع بدلا عن البحث في الجزء الظاهر في الشاشة.",
"delay_image_loading": "تأخير عرض الصور",
"image_load_delay_help": "إذا تم تمكينه، فلن يتم تحميل الصور في المواضيع حتى يتم تمريرها في الشاشة",
"scroll_to_my_post": "بعد اضافة رد على المشاركة, قم بإظهار المشاركة", "scroll_to_my_post": "بعد اضافة رد على المشاركة, قم بإظهار المشاركة",
"follow_topics_you_reply_to": "متابعة المواضيع التي تقوم بالرد عليها", "follow_topics_you_reply_to": "متابعة المواضيع التي تقوم بالرد عليها",
"follow_topics_you_create": "متابعة المواضيع التي تقوم بإنشائها", "follow_topics_you_create": "متابعة المواضيع التي تقوم بإنشائها",
"grouptitle": "عنوان المجموعة", "grouptitle": "عنوان المجموعة",
"group-order-help": "Select a group and use the arrows to order titles",
"no-group-title": "لا يوجد عنوان للمجموعة", "no-group-title": "لا يوجد عنوان للمجموعة",
"select-skin": "إختر سمة", "select-skin": "إختر سمة",
"select-homepage": "إختر الصفحة الرئيسية", "select-homepage": "إختر الصفحة الرئيسية",
@@ -152,7 +146,6 @@
"info.moderation-note": "ملاحظة الإشراف", "info.moderation-note": "ملاحظة الإشراف",
"info.moderation-note.success": "تم حفظ ملاحظة الإشراف", "info.moderation-note.success": "تم حفظ ملاحظة الإشراف",
"info.moderation-note.add": "إضافة ملاحظة", "info.moderation-note.add": "إضافة ملاحظة",
"sessions.description": "This page allows you to view any active sessions on this forum and revoke them if necessary. You can revoke your own session by logging out of your account.",
"consent.title": "Your Rights &amp; Consent", "consent.title": "Your Rights &amp; Consent",
"consent.lead": "This community forum collects and processes your personal information.", "consent.lead": "This community forum collects and processes your personal information.",
"consent.intro": "We use this information strictly to personalise your experience in this community, as well as to associate the posts you make to your user account. During the registration step you were asked to provide a username and email address, you can also optionally provide additional information to complete your user profile on this website.<br /><br />We retain this information for the life of your user account, and you are able to withdraw consent at any time by deleting your account. At any time you may request a copy of your contribution to this website, via your Rights &amp; Consent page.<br /><br />If you have any questions or concerns, we encourage you to reach out to this forum's administrative team.", "consent.intro": "We use this information strictly to personalise your experience in this community, as well as to associate the posts you make to your user account. During the registration step you were asked to provide a username and email address, you can also optionally provide additional information to complete your user profile on this website.<br /><br />We retain this information for the life of your user account, and you are able to withdraw consent at any time by deleting your account. At any time you may request a copy of your contribution to this website, via your Rights &amp; Consent page.<br /><br />If you have any questions or concerns, we encourage you to reach out to this forum's administrative team.",

View File

@@ -10,7 +10,6 @@
"filter-by": "Filter By", "filter-by": "Filter By",
"online-only": "المتصلون فقط", "online-only": "المتصلون فقط",
"invite": "دعوة", "invite": "دعوة",
"prompt-email": "Emails:",
"invitation-email-sent": "تم إرسال دعوة بالبريد الإلكتروني إلى %1", "invitation-email-sent": "تم إرسال دعوة بالبريد الإلكتروني إلى %1",
"user_list": "قائمة اﻷعضاء", "user_list": "قائمة اﻷعضاء",
"recent_topics": "أحدث المواضيع", "recent_topics": "أحدث المواضيع",

View File

@@ -18,17 +18,10 @@
"mongo.resident-memory": "Текущо активна памет", "mongo.resident-memory": "Текущо активна памет",
"mongo.virtual-memory": "Виртуална памет", "mongo.virtual-memory": "Виртуална памет",
"mongo.mapped-memory": "Заделена памет", "mongo.mapped-memory": "Заделена памет",
"mongo.bytes-in": "Байтове ВХ",
"mongo.bytes-out": "Байтове ИЗХ",
"mongo.num-requests": "Брой заявки",
"mongo.raw-info": "Сурови данни от MongoDB", "mongo.raw-info": "Сурови данни от MongoDB",
"mongo.unauthorized": "NodeBB не успя да получи нужните статистики от MongoDB. Моля, уверете се, че потребителят, който се използва от NodeBB, включва ролята „clusterMonitor“ за базата данни „admin“.",
"redis": "Redis", "redis": "Redis",
"redis.version": "Версия на Redis", "redis.version": "Версия на Redis",
"redis.keys": "Ключове",
"redis.expires": "Изтичания",
"redis.avg-ttl": "Средно време на живот (TTL)",
"redis.connected-clients": "Свързани клиенти", "redis.connected-clients": "Свързани клиенти",
"redis.connected-slaves": "Свързани второстепенни сървъри", "redis.connected-slaves": "Свързани второстепенни сървъри",
"redis.blocked-clients": "Блокирани клиенти", "redis.blocked-clients": "Блокирани клиенти",
@@ -37,16 +30,7 @@
"redis.total-connections-recieved": "Общо получени свързвания", "redis.total-connections-recieved": "Общо получени свързвания",
"redis.total-commands-processed": "Общо обработени команди", "redis.total-commands-processed": "Общо обработени команди",
"redis.iops": "Едновременни операции в секунда", "redis.iops": "Едновременни операции в секунда",
"redis.iinput": "Едновременен вход в секунда",
"redis.ioutput": "Едновременен изход в секунда",
"redis.total-input": "Общ вход",
"redis.total-output": "Общ изход",
"redis.keyspace-hits": "Успешни търсения на ключове", "redis.keyspace-hits": "Успешни търсения на ключове",
"redis.keyspace-misses": "Неуспешни търсения на ключове", "redis.keyspace-misses": "Неуспешни търсения на ключове",
"redis.raw-info": "Сурови данни от Redis", "redis.raw-info": "Сурови данни от Redis"
"postgres": "Postgres",
"postgres.version": "Версия на PostgreSQL",
"postgres.raw-info": "Сурови данни от Postgres"
} }

View File

@@ -2,10 +2,5 @@
"events": "Събития", "events": "Събития",
"no-events": "Няма събития", "no-events": "Няма събития",
"control-panel": "Контролен панел за събитията", "control-panel": "Контролен панел за събитията",
"filters": "Филтри", "delete-events": "Изтриване на събитията"
"filters-apply": "Прилагане на филтрите",
"filter-type": "Вид събитие",
"filter-start": "Начална дата",
"filter-end": "Крайна дата",
"filter-perPage": "На страница"
} }

View File

@@ -8,7 +8,7 @@
"custom-js.enable": "Включване на персонализирания код на Javascript", "custom-js.enable": "Включване на персонализирания код на Javascript",
"custom-header": "Персонализирана заглавна част", "custom-header": "Персонализирана заглавна част",
"custom-header.description": "Въведете своя персонализиран код HTML тук (напр. елементи „meta“ и т.н.), те ще бъдат добавени към секцията <code>&lt;head&gt;</code> в кода на Вашия форум. Ползването на елементи „script“ е позволено, но непрепоръчително, тъй като за това можете да ползвате раздела <a href=\"#custom-js\" data-toggle=\"tab\">Персонализиран код на Javascript</a>.", "custom-header.description": "Въведете своя персонализиран код HTML тук (напр. елементи „meta“ и т.н.), те ще бъдат добавени към секцията <code>&lt;head&gt;</code> в кода на Вашия форум. Ползването на елементи „script“ е позволено, но непрепоръчително, тъй като за това можете да ползвате раздела <a href=\"#custom-header\" data-toggle=\"tab\">Персонализиран код на Javascript</a>.",
"custom-header.enable": "Включване на персонализирана заглавна част", "custom-header.enable": "Включване на персонализирана заглавна част",
"custom-css.livereload": "Включване на моменталното презареждане", "custom-css.livereload": "Включване на моменталното презареждане",

View File

@@ -7,8 +7,7 @@
"online": "на линия", "online": "на линия",
"git": "git", "git": "git",
"memory": "памет", "memory": "памет",
"load": "натоварване на системата", "load": "натоварване",
"cpu-usage": "използване на процесора",
"uptime": "активно време", "uptime": "активно време",
"registered": "Регистрирани", "registered": "Регистрирани",

View File

@@ -9,7 +9,6 @@
"plugin-search": "Търсене на добавки", "plugin-search": "Търсене на добавки",
"plugin-search-placeholder": "Търсене на добавка…", "plugin-search-placeholder": "Търсене на добавка…",
"submit-anonymous-usage": "Изпращане на анонимни данни за употребата на добавката",
"reorder-plugins": "Пренареждане на добавките", "reorder-plugins": "Пренареждане на добавките",
"order-active": "Подреждане на включените добавки", "order-active": "Подреждане на включените добавки",
"dev-interested": "Искате ли да пишете добавки за NodeBB?", "dev-interested": "Искате ли да пишете добавки за NodeBB?",
@@ -30,8 +29,6 @@
"plugin-item.more-info": "За повече информация", "plugin-item.more-info": "За повече информация",
"plugin-item.unknown": "Неизвестно", "plugin-item.unknown": "Неизвестно",
"plugin-item.unknown-explanation": "Състоянието на тази добавка не може да бъде определено, може би поради грешка в конфигурацията.", "plugin-item.unknown-explanation": "Състоянието на тази добавка не може да бъде определено, може би поради грешка в конфигурацията.",
"plugin-item.compatible": "Тази добавка работи с NodeBB %1",
"plugin-item.not-compatible": "Тази добавка няма информация за съвместимост. Уверете се, че работи, преди да я инсталирате на истинския си сървър.",
"alert.enabled": "Добавката е включена", "alert.enabled": "Добавката е включена",
"alert.disabled": "Добавката е изключена", "alert.disabled": "Добавката е изключена",

View File

@@ -18,13 +18,5 @@
"alert.update-success": "Джаджите са обновени успешно", "alert.update-success": "Джаджите са обновени успешно",
"alert.clone-success": "Джаджите са клонирани успешно", "alert.clone-success": "Джаджите са клонирани успешно",
"error.select-clone": "Изберете страница, от която да клонирате", "error.select-clone": "Изберете страница, от която да клонирате"
"title": "Заглавие",
"title.placeholder": "Заглавие (показва се само в някои контейнери)",
"container": "Контейнер",
"container.placeholder": "Завлачете и пуснете контейнер или въведете HTML тук.",
"show-to-groups": "Показване на групите",
"hide-from-groups": "Скриване от групите",
"hide-on-mobile": "Скриване на мобилни устройства"
} }

View File

@@ -2,7 +2,7 @@
"forum-traffic": "Трафик на форума", "forum-traffic": "Трафик на форума",
"page-views": "Преглеждания на страниците", "page-views": "Преглеждания на страниците",
"unique-visitors": "Уникални посетители", "unique-visitors": "Уникални посетители",
"new-users": "Нови потребители", "users": "Потребители",
"posts": "Публикации", "posts": "Публикации",
"topics": "Теми", "topics": "Теми",
"page-views-seven": "Последните 7 дни", "page-views-seven": "Последните 7 дни",
@@ -14,12 +14,9 @@
"page-views-custom-help": "Въведете интервал от дати, за които искате да видите преглежданията на страниците. Ако не се появи календар за избор, можете да въведете датите във формат: <code>ГГГГ-ММ-ДД</code>", "page-views-custom-help": "Въведете интервал от дати, за които искате да видите преглежданията на страниците. Ако не се появи календар за избор, можете да въведете датите във формат: <code>ГГГГ-ММ-ДД</code>",
"page-views-custom-error": "Моля, въведете правилен интервал от дати във формата: <code>ГГГГ-ММ-ДД</code>", "page-views-custom-error": "Моля, въведете правилен интервал от дати във формата: <code>ГГГГ-ММ-ДД</code>",
"stats.yesterday": "Вчера", "stats.day": "Ден",
"stats.today": "Днес", "stats.week": "Седмица",
"stats.last-week": "Миналата седмица", "stats.month": "Месец",
"stats.this-week": "Тази седмица",
"stats.last-month": "Миналия месец",
"stats.this-month": "Този месец",
"stats.all": "От началото", "stats.all": "От началото",
"updates": "Обновления", "updates": "Обновления",
@@ -68,9 +65,6 @@
"high-presence-topics": "Теми с най-голяма присъственост", "high-presence-topics": "Теми с най-голяма присъственост",
"graphs.page-views": "Преглеждания на страниците", "graphs.page-views": "Преглеждания на страниците",
"graphs.page-views-registered": "Преглеждания на страниците от регистрирани потребители",
"graphs.page-views-guest": "Преглеждания на страниците от гости",
"graphs.page-views-bot": "Преглеждания на страниците от ботове",
"graphs.unique-visitors": "Уникални посетители", "graphs.unique-visitors": "Уникални посетители",
"graphs.registered-users": "Регистрирани потребители", "graphs.registered-users": "Регистрирани потребители",
"graphs.anonymous-users": "Анонимни потребители", "graphs.anonymous-users": "Анонимни потребители",

View File

@@ -5,11 +5,13 @@
"tooltip": "Подсказка:", "tooltip": "Подсказка:",
"text": "Текст:", "text": "Текст:",
"text-class": "Текстов клас: <small>незадължително</small>", "text-class": "Текстов клас: <small>незадължително</small>",
"class": "Клас: <small>незадължително</small>",
"id": "Идентификатор: <small>незадължително</small>", "id": "Идентификатор: <small>незадължително</small>",
"properties": "Свойства:", "properties": "Свойства:",
"groups": "Групи:", "only-admins": "Да е видимо само за администраторите",
"only-global-mods-and-admins": "Да е видимо само за глобалните модератори и администраторите",
"only-logged-in": "Да е видимо само за вписаните потребители",
"only-guest": "Да е видимо само за гостите",
"open-new-window": "Отваряне в нов прозорец", "open-new-window": "Отваряне в нов прозорец",
"btn.delete": "Изтриване", "btn.delete": "Изтриване",

View File

@@ -17,10 +17,8 @@
"parent-category": "Базова категория", "parent-category": "Базова категория",
"optional-parent-category": "(Незадължително) Базова категория", "optional-parent-category": "(Незадължително) Базова категория",
"parent-category-none": "(Няма)", "parent-category-none": "(Няма)",
"copy-parent": "Копиране на базовата",
"copy-settings": "Копиране на настройките от", "copy-settings": "Копиране на настройките от",
"optional-clone-settings": "(Незадължително) Копиране на настройките от категория", "optional-clone-settings": "(Незадължително) Копиране на настройките от категория",
"clone-children": "Клониране на дъщерните категории и настройки",
"purge": "Изтриване на категорията", "purge": "Изтриване на категорията",
"enable": "Включване", "enable": "Включване",
@@ -30,13 +28,11 @@
"select-category": "Изберете категория", "select-category": "Изберете категория",
"set-parent-category": "Задайте базова категория", "set-parent-category": "Задайте базова категория",
"privileges.description": "В тази секция можете да настроите правомощията за достъп до различните части на уеб сайта Правомощията могат да бъдат давани на отделни потребители или на цели групи. Изберете обхвата на приложение от падащото меню по-долу.", "privileges.description": "В тази секция можете да настроите правомощията за достъп до тази категория. Правомощията могат да бъдат давани на отделни потребители или на цели групи. Можете да добавите нов потребител в тази таблица като го потърсите чрез формуляра по-долу.",
"privileges.category-selector": "Настройване на правомощията за ",
"privileges.warning": "<strong>Забележка</strong>: Настройките за правомощията влизат в сила моментално. Не е нужно да запазвате категорията след като промените тези настройки.", "privileges.warning": "<strong>Забележка</strong>: Настройките за правомощията влизат в сила моментално. Не е нужно да запазвате категорията след като промените тези настройки.",
"privileges.section-viewing": "Правомощия за преглед", "privileges.section-viewing": "Правомощия за преглед",
"privileges.section-posting": "Правомощия за публикуване", "privileges.section-posting": "Правомощия за публикуване",
"privileges.section-moderation": "Правомощия за модериране", "privileges.section-moderation": "Правомощия за модериране",
"privileges.section-other": "Други",
"privileges.section-user": "Потребител", "privileges.section-user": "Потребител",
"privileges.search-user": "Добавяне на потребител", "privileges.search-user": "Добавяне на потребител",
"privileges.no-users": "В тази категория няма правомощия за отделни потребители.", "privileges.no-users": "В тази категория няма правомощия за отделни потребители.",
@@ -45,12 +41,7 @@
"privileges.search-group": "Добавяне на група", "privileges.search-group": "Добавяне на група",
"privileges.copy-to-children": "Копиране в наследниците", "privileges.copy-to-children": "Копиране в наследниците",
"privileges.copy-from-category": "Копиране от категория", "privileges.copy-from-category": "Копиране от категория",
"privileges.copy-privileges-to-all-categories": "Копиране във всички категории",
"privileges.copy-group-privileges-to-children": "Копиране на правомощията на тази група в поделементите на тази категория.",
"privileges.copy-group-privileges-to-all-categories": "Копиране на правомощията на тази група във всички категории.",
"privileges.copy-group-privileges-from": "Копиране на правомощията на тази група от друга категория.",
"privileges.inherit": "Ако групата на <code>регистрираните потребители</code> получи дадено правомощие, всички останали групи го получават като <strong>подразбиращо се правомощие</strong>, дори то да не им е специално дадено. Вие виждате това подразбиращо се правомощие, защото всички потребители са членове на групата на <code>регистрираните потребители</code>, така че няма нужда да се дават едни и същи правомощия на още групи.", "privileges.inherit": "Ако групата на <code>регистрираните потребители</code> получи дадено правомощие, всички останали групи го получават като <strong>подразбиращо се правомощие</strong>, дори то да не им е специално дадено. Вие виждате това подразбиращо се правомощие, защото всички потребители са членове на групата на <code>регистрираните потребители</code>, така че няма нужда да се дават едни и същи правомощия на още групи.",
"privileges.copy-success": "Правомощията са копирани!",
"analytics.back": "Назад към списъка с категориите", "analytics.back": "Назад към списъка с категориите",
"analytics.title": "Аналитични данни за категорията „%1“", "analytics.title": "Аналитични данни за категорията „%1“",
@@ -76,6 +67,5 @@
"alert.find-group": "Търсене на група", "alert.find-group": "Търсене на група",
"alert.group-search": "Потърсете група тук…", "alert.group-search": "Потърсете група тук…",
"collapse-all": "Свиване на всички", "collapse-all": "Свиване на всички",
"expand-all": "Разгъване на всички", "expand-all": "Разгъване на всички"
"disable-on-create": "Изключване при създаване"
} }

View File

@@ -1,21 +0,0 @@
{
"lead": "По-долу са показани статистики и времена за разпращането на резюмета.",
"disclaimer": "Имайте предвид, че при доставката на е-поща няма гаранции, поради същността на технологията за е-пощата. Много неща влияят на това дали едно изпратено е-писмо настина достига до получателя си, като: репутация на сървъра, блокирани IP адреси или това дали е настроено DKIM/SPF/DMARC.",
"disclaimer-continued": "Успешната доставка означава, че съобщението е изпратено успешно от NodeBB и потвърдено от сървъра на получателя. Това не означава, че писмото е достигнало до входящата кутия на получателя. За да имате по-добри резултати, препоръчвам използването на специализирана услуга за изпращане на е-писма, като <a href=\"https://sendgrid.com/why-sendgrid/\">SendGrid</a>.",
"user": "Потребител",
"subscription": "Вид на абонамента",
"last-delivery": "Последна успешна доставка",
"default": "По подразбиране за системата",
"default-help": "<em>По подразбиране за системата</em> означава, че потребителят не е избрал ръчно друга настройка за глобалния форум за резюметата, която в момента е;„%1</strong>“",
"resend": "Повторно изпращане на резюмето",
"resend-all-confirm": "Наистина ли искате да предизвикате ръчно изпращането на резюмето?",
"resent-single": "Ръчното повторно разпращане на резюмето е завършено",
"resent-day": "Дневното резюме беше изпратено повторно",
"resent-week": "Седмичното резюме беше изпратено повторно",
"resent-month": "Месечното резюме беше изпратено повторно",
"null": "<em>Никога</em>",
"manual-run": "Ръчно разпращане на резюмето:",
"no-delivery-data": "Няма данни за доставката"
}

View File

@@ -1,12 +1,8 @@
{ {
"name": "Име на групата", "name": "Име на групата",
"badge": "Емблема",
"properties": "Свойства",
"description": "Описание на групата", "description": "Описание на групата",
"member-count": "Брой на членовете", "member-count": "Брой на членовете",
"system": "Системна", "system": "Системна група",
"hidden": "Скрита",
"private": "Частна",
"edit": "Редактиране", "edit": "Редактиране",
"search-placeholder": "Търсене", "search-placeholder": "Търсене",
"create": "Създаване на група", "create": "Създаване на група",
@@ -21,12 +17,10 @@
"edit.user-title": "Звание на членовете", "edit.user-title": "Звание на членовете",
"edit.icon": "Иконка на групата", "edit.icon": "Иконка на групата",
"edit.label-color": "Цвята за етикета на групата", "edit.label-color": "Цвята за етикета на групата",
"edit.text-color": "Цвята за текста на групата",
"edit.show-badge": "Показване на емблема", "edit.show-badge": "Показване на емблема",
"edit.private-details": "Ако е включено, присъединяването към група ще изисква одобрение от собственик на групата.", "edit.private-details": "Ако е включено, присъединяването към група ще изисква одобрение от собственик на групата.",
"edit.private-override": "Внимание: Частните групи са изключени на системно ниво, това пренебрегва тази настройка.", "edit.private-override": "Внимание: Частните групи са изключени на системно ниво, това пренебрегва тази настройка.",
"edit.disable-join": "Забраняване на заявките за присъединяване", "edit.disable-requests": "Изключване на заявките за присъединяване",
"edit.disable-leave": "Забраняване на потребители да напускат групата",
"edit.hidden": "Скрита", "edit.hidden": "Скрита",
"edit.hidden-details": "Ако е включено, групата няма да е видима в списъка с групи и ще трябва потребителите да бъдат поканени специално.", "edit.hidden-details": "Ако е включено, групата няма да е видима в списъка с групи и ще трябва потребителите да бъдат поканени специално.",
"edit.add-user": "Добавяне на потребител към групата", "edit.add-user": "Добавяне на потребител към групата",

View File

@@ -1,6 +1,6 @@
{ {
"post-queue": "Опашка за публикации", "post-queue": "Опашка за публикации",
"description": "Няма публикации в опашката. <br> За да включите тази функционалност, идете в <a href=\"%1\">Настройки &rarr; Публикуване &rarr; Опашка за публикации</a> и включете <strong>Опашката за публикации</strong>.", "description": "Няма публикации в опашката. <br> За да включите тази функционалност, идете в <a href=\"%1\">Настройки &rarr; Публикуване &rarr; Ограничения за публикуването</a> и включете <strong>Опашката за публикации</strong>.",
"user": "Потребител", "user": "Потребител",
"category": "Категория", "category": "Категория",
"title": "Заглавие", "title": "Заглавие",

View File

@@ -1,8 +1,7 @@
{ {
"global": "Глобални", "global": "Глобални",
"global.no-users": "Няма глобални правомощия за отделни потребители.", "global.no-users": "Няма глобални правомощия за отделни потребители.",
"group-privileges": "Правомощия за групите",
"user-privileges": "Правомощия за потребителите",
"chat": "Разговор", "chat": "Разговор",
"upload-images": "Качване на изображения", "upload-images": "Качване на изображения",
"upload-files": "Качване на файлове", "upload-files": "Качване на файлове",
@@ -11,12 +10,7 @@
"search-content": "Търсене на съдържание", "search-content": "Търсене на съдържание",
"search-users": "Търсене на потребители", "search-users": "Търсене на потребители",
"search-tags": "Търсене на етикети", "search-tags": "Търсене на етикети",
"view-users": "Преглед на потребителите",
"view-tags": "Преглед на етикетите",
"view-groups": "Преглед на групите",
"allow-local-login": "Локално вписване",
"allow-group-creation": "Създаване на групи",
"view-users-info": "Преглед на информацията за потребителите",
"find-category": "Търсене на категория", "find-category": "Търсене на категория",
"access-category": "Достъп до категория", "access-category": "Достъп до категория",
"access-topics": "Достъп до теми", "access-topics": "Достъп до теми",
@@ -26,7 +20,7 @@
"edit-posts": "Редактиране на публикации", "edit-posts": "Редактиране на публикации",
"view-edit-history": "Преглед на историята на редакциите", "view-edit-history": "Преглед на историята на редакциите",
"delete-posts": "Изтриване на публикации", "delete-posts": "Изтриване на публикации",
"view_deleted": "Преглед на изтритите публикации", "view_deleted": "View Deleted Posts",
"upvote-posts": "Положително гласуване за публикации", "upvote-posts": "Положително гласуване за публикации",
"downvote-posts": "Отрицателно гласуване за публикации", "downvote-posts": "Отрицателно гласуване за публикации",
"delete-topics": "Изтриване на теми", "delete-topics": "Изтриване на теми",

View File

@@ -1,9 +0,0 @@
{
"upload-file": "Качване на файл",
"filename": "Име на файла",
"usage": "Използване в публикации",
"orphaned": "Без ползвания",
"size/filecount": "Размер / брой файлове",
"confirm-delete": "Наистина ли искате да изтриете този файл?",
"filecount": "%1 файла"
}

View File

@@ -6,7 +6,6 @@
"validate-email": "Проверка на е-пощата", "validate-email": "Проверка на е-пощата",
"send-validation-email": "Изпращане на е-писмо за потвърждение", "send-validation-email": "Изпращане на е-писмо за потвърждение",
"password-reset-email": "Изпращане на е-писмо за възстановяване на паролата", "password-reset-email": "Изпращане на е-писмо за възстановяване на паролата",
"force-password-reset": "Принудително подновяване на паролата и отписване на потребителя",
"ban": "Блокиране на потребителя/ите", "ban": "Блокиране на потребителя/ите",
"temp-ban": "Блокиране на потребителя/ите временно", "temp-ban": "Блокиране на потребителя/ите временно",
"unban": "Деблокиране на потребителя/ите", "unban": "Деблокиране на потребителя/ите",
@@ -15,8 +14,6 @@
"delete": "Изтриване на потребителя/ите", "delete": "Изтриване на потребителя/ите",
"purge": "Изтриване на потребителя/ите и съдържанието", "purge": "Изтриване на потребителя/ите и съдържанието",
"download-csv": "Сваляне във формат „CSV“", "download-csv": "Сваляне във формат „CSV“",
"manage-groups": "Управление на групите",
"add-group": "Добавяне на група",
"invite": "Покана", "invite": "Покана",
"new": "Нов потребител", "new": "Нов потребител",
@@ -30,11 +27,6 @@
"pills.banned": "Блокиран", "pills.banned": "Блокиран",
"pills.search": "Търсене на потребители", "pills.search": "Търсене на потребители",
"50-per-page": "50 на страница",
"100-per-page": "100 на страница",
"250-per-page": "250 на страница",
"500-per-page": "500 на страница",
"search.uid": "По потребителски идентификатор", "search.uid": "По потребителски идентификатор",
"search.uid-placeholder": "Въведете потребителски идентификатор, който да потърсите", "search.uid-placeholder": "Въведете потребителски идентификатор, който да потърсите",
"search.username": "По име на потребител", "search.username": "По име на потребител",
@@ -89,9 +81,7 @@
"alerts.confirm-remove-moderator": "Наистина ли искате да премахнете този модератор?", "alerts.confirm-remove-moderator": "Наистина ли искате да премахнете този модератор?",
"alerts.remove-moderator-success": "Потребителят вече няма да бъде модератор.", "alerts.remove-moderator-success": "Потребителят вече няма да бъде модератор.",
"alerts.confirm-validate-email": "Искате ли да проверите е-пощата/ите на този/тези потребител(и)?", "alerts.confirm-validate-email": "Искате ли да проверите е-пощата/ите на този/тези потребител(и)?",
"alerts.confirm-force-password-reset": "Наистина ли искате принудително да подновите паролата и да отпишете потребителя или потребителите?",
"alerts.validate-email-success": "Е-пощите са проверени", "alerts.validate-email-success": "Е-пощите са проверени",
"alerts.validate-force-password-reset-success": "Паролата на потребителя (или паролите на потребителите) беше подновена и сесията му беше прекратена.",
"alerts.password-reset-confirm": "Искате ли да изпратите е-писмо/а за възстановяване на паролата на този/тези потребител(и)?", "alerts.password-reset-confirm": "Искате ли да изпратите е-писмо/а за възстановяване на паролата на този/тези потребител(и)?",
"alerts.confirm-delete": "<b>ВНИМАНИЕ!</b><br/>Наистина ли искате да изтриете потребителя/ите?<br/> Това действие е необратимо! Ще бъде изтрит само профилът на потребителя/ите, неговите/техните публикациите и теми ще останат.", "alerts.confirm-delete": "<b>ВНИМАНИЕ!</b><br/>Наистина ли искате да изтриете потребителя/ите?<br/> Това действие е необратимо! Ще бъде изтрит само профилът на потребителя/ите, неговите/техните публикациите и теми ще останат.",
"alerts.delete-success": "Потребителят/ите е/са изтрит(и)!", "alerts.delete-success": "Потребителят/ите е/са изтрит(и)!",
@@ -103,7 +93,7 @@
"alerts.error-x": "<strong>Грешка</strong><p>%1</p>", "alerts.error-x": "<strong>Грешка</strong><p>%1</p>",
"alerts.create-success": "Потребителят е създаден!", "alerts.create-success": "Потребителят е създаден!",
"alerts.prompt-email": "Е-пощи: ", "alerts.prompt-email": "Е-поща:",
"alerts.email-sent-to": "Беше изпратено е-писмо за потвърждение до %1", "alerts.email-sent-to": "Беше изпратено е-писмо за потвърждение до %1",
"alerts.x-users-found": "Намерени потребители: %1! Търсенето отне %2 милисекунди." "alerts.x-users-found": "Намерени потребители: %1! Търсенето отне %2 милисекунди."
} }

View File

@@ -18,7 +18,6 @@
"manage/groups": "Групи", "manage/groups": "Групи",
"manage/ip-blacklist": "Черен списък за IP адреси", "manage/ip-blacklist": "Черен списък за IP адреси",
"manage/uploads": "Качвания", "manage/uploads": "Качвания",
"manage/digest": "Резюмета",
"section-settings": "Настройки", "section-settings": "Настройки",
"settings/general": "Общи", "settings/general": "Общи",
@@ -58,7 +57,6 @@
"section-advanced": "Разширени", "section-advanced": "Разширени",
"advanced/database": "База данни", "advanced/database": "База данни",
"advanced/events": "Събития", "advanced/events": "Събития",
"advanced/hooks": "Куки",
"advanced/logs": "Журнали", "advanced/logs": "Журнали",
"advanced/errors": "Грешки", "advanced/errors": "Грешки",
"advanced/cache": "Кеш", "advanced/cache": "Кеш",

View File

@@ -1,23 +1,17 @@
{ {
"maintenance-mode": "Режим на профилактика", "maintenance-mode": "Режим на профилактика",
"maintenance-mode.help": "Когато форумът е в режим на профилактика, всички заявки ще бъдат пренасочвани към статична страница за изчакване, с изключение на администраторите, които ще могат да използват уеб сайта нормално.", "maintenance-mode.help": "Когато форумът е в режим на профилактика, всички заявки ще бъдат пренасочвани към статична страница за изчакване, с изключение на администраторите, които ще могат да използват уеб сайта нормално.",
"maintenance-mode.status": "Код на състоянието за режима на профилактика",
"maintenance-mode.message": "Съобщение за профилактиката", "maintenance-mode.message": "Съобщение за профилактиката",
"headers": "Заглавни части", "headers": "Заглавни части",
"headers.allow-from": "Задайте „ALLOW-FROM“, за да поставите NodeBB в „iFrame“", "headers.allow-from": "Задайте „ALLOW-FROM“, за да поставите NodeBB в „iFrame“",
"headers.powered-by": "Персонализиране на заглавната част „Захранван от“, която се изпраща от NodeBB", "headers.powered-by": "Персонализиране на заглавната част „Захранван от“, която се изпраща от NodeBB",
"headers.acao": "Произход за разрешаване на управлението на достъпа", "headers.acao": "Произход за разрешаване на управлението на достъпа",
"headers.acao-regex": "Регулярен израз за произхода за разрешаване на управлението на достъпа", "headers.acao-regex": "Access-Control-Allow-Origin Regular Expression",
"headers.acao-help": "За да забраните достъпа до всички уеб сайтове, оставете празно", "headers.acao-help": "За да забраните достъпа до всички уеб сайтове, оставете празно",
"headers.acao-regex-help": "Въведете регулярен израз за съвпадение с динамичните произходи. За да забраните достъпа на всички уеб сайтове, оставете това празно.", "headers.acao-regex-help": "Enter regular expressions here to match dynamic origins. To deny access to all sites, leave empty",
"headers.acac": "Удостоверителни данни за разрешаване на управлението на достъпа", "headers.acac": "Удостоверителни данни за разрешаване на управлението на достъпа",
"headers.acam": "Методи за разрешаване на управлението на достъпа", "headers.acam": "Методи за разрешаване на управлението на достъпа",
"headers.acah": "Заглавки за разрешаване на управлението на достъпа", "headers.acah": "Заглавки за разрешаване на управлението на достъпа",
"hsts": "Стриктна транспортна сигурност",
"hsts.enabled": "Включване на HSTS (препоръчително)",
"hsts.subdomains": "Включване на поддомейните в заглавката на HSTS",
"hsts.preload": "Позволяване на предварителното зареждане на заглавката на HSTS",
"hsts.help": "Ако това е включено, за този уеб ще бъде настроена заглавка за HSTS. Можете да изберете дали да включите поддомейните и дали за заредите предварително флаговете в заглавката си. Ако не знаете какво да направите, най-добре не избирайте нищо. <a href=\"%1\">Още информация<i class=\"fa fa-external-link\"></i></a>",
"traffic-management": "Управление на трафика", "traffic-management": "Управление на трафика",
"traffic.help": "NodeBB има вграден модул, който автоматично отказва заявките в натоварените моменти. Можете да настроите поведението тук, въпреки че стойностите по подразбиране са добра отправна точка.", "traffic.help": "NodeBB има вграден модул, който автоматично отказва заявките в натоварените моменти. Можете да настроите поведението тук, въпреки че стойностите по подразбиране са добра отправна точка.",
"traffic.enable": "Включване на управлението на трафика", "traffic.enable": "Включване на управлението на трафика",

View File

@@ -6,6 +6,6 @@
"max-length": "Максимална дължина на съобщенията в разговорите", "max-length": "Максимална дължина на съобщенията в разговорите",
"max-room-size": "Максимален брой потребители в стая за разговор", "max-room-size": "Максимален брой потребители в стая за разговор",
"delay": "Време между съобщеният в разговорите (в милисекунди)", "delay": "Време между съобщеният в разговорите (в милисекунди)",
"restrictions.seconds-edit-after": "Брой секунди, през които съобщенията в разговор могат да бъдат редактирани. (0 = изключено)", "restrictions.seconds-edit-after": "Брой секунди, в които потребителите не могат да редактират съобщенията си в разговорите след публикуването им. (0 = изключено)",
"restrictions.seconds-delete-after": "Брой секунди, през които съобщенията в разговор могат да бъдат изтривани. (0 = изключено)" "restrictions.seconds-delete-after": "Брой секунди, в които потребителите не могат да изтрият съобщенията си в разговорите след публикуването им. (0 = изключено)"
} }

View File

@@ -4,7 +4,6 @@
"consent.message": "Съобщение за известие", "consent.message": "Съобщение за известие",
"consent.acceptance": "Съобщение за приемане", "consent.acceptance": "Съобщение за приемане",
"consent.link-text": "Връзка към текста на политиката", "consent.link-text": "Връзка към текста на политиката",
"consent.link-url": "Връзка към адреса на политиката",
"consent.blank-localised-default": "Оставете това празно, за да използвате данните по подразбиране на NodeBB, които са преведени", "consent.blank-localised-default": "Оставете това празно, за да използвате данните по подразбиране на NodeBB, които са преведени",
"settings": "Настройки", "settings": "Настройки",
"cookie-domain": "Домейн на бисквитката за сесията", "cookie-domain": "Домейн на бисквитката за сесията",

View File

@@ -4,9 +4,6 @@
"address-help": "Следният адрес на е-поща е този, който получателят ще види в полетата „От“ и “Отговор до“.", "address-help": "Следният адрес на е-поща е този, който получателят ще види в полетата „От“ и “Отговор до“.",
"from": "Име за полето „От“", "from": "Име за полето „От“",
"from-help": "Името на изпращача, което да бъде показано в е-писмото.", "from-help": "Името на изпращача, което да бъде показано в е-писмото.",
"sendmail-rate-limit": "Изпращане на <em>X</em> е-писма…",
"sendmail-rate-delta": "…на всеки <em>X</em> милисекунди",
"sendmail-rate-help": "Задава на програмата за изпращане на е-писма на NodeBB да ограничи броя едновременно изпращани съобщения, за да не се претоварват пощенските сървъри. Тези настройки не се вземат предвид, ако е включена настройката „Транспорт чрез SMTP“ (по-долу).",
"smtp-transport": "Транспорт чрез SMTP", "smtp-transport": "Транспорт чрез SMTP",
"smtp-transport.enabled": "Използване на външен сървър за е-поща за изпращане на е-писма", "smtp-transport.enabled": "Използване на външен сървър за е-поща за изпращане на е-писма",
@@ -33,8 +30,8 @@
"testing.select": "Изберете шаблон за е-писма", "testing.select": "Изберете шаблон за е-писма",
"testing.send": "Изпращане на пробно е-писмо", "testing.send": "Изпращане на пробно е-писмо",
"testing.send-help": "Пробното е-писмо ще бъде изпратено до е-пощата на текущо вписания потребител.", "testing.send-help": "Пробното е-писмо ще бъде изпратено до е-пощата на текущо вписания потребител.",
"subscriptions": "Резюмета по е-поща", "subscriptions": "Абонаменти за е-писма",
"subscriptions.disable": "Изключване на резюметата по е-пощата", "subscriptions.disable": "Изключване на известията по е-поща за абонати",
"subscriptions.hour": "Време за разпращане", "subscriptions.hour": "Време за разпращане",
"subscriptions.hour-help": "Моля, въведете число, представляващо часа, в който да се разпращат е-писма с подготвеното резюме (напр.. <code>0</code> за полунощ, <code>17</code> за 5 следобед). Имайте предвид, че този час е според часовата зона на сървъра и може да не съвпада с часовника на системата Ви.<br /> Приблизителното време на сървъра е: <span id=\"serverTime\"></span><br /> Изпращането на следващия ежедневен бюлетин е планирано за <span id=\"nextDigestTime\"></span>" "subscriptions.hour-help": "Моля, въведете число, представляващо часа, в който да се разпращат е-писма с подготвеното резюме (напр.. <code>0</code> за полунощ, <code>17</code> за 5 следобед). Имайте предвид, че този час е според часовата зона на сървъра и може да не съвпада с часовника на системата Ви.<br /> Приблизителното време на сървъра е: <span id=\"serverTime\"></span><br /> Изпращането на следващия ежедневен бюлетин е планирано за <span id=\"nextDigestTime\"></span>"
} }

View File

@@ -3,9 +3,10 @@
"private-groups": "Частни групи", "private-groups": "Частни групи",
"private-groups.help": "Ако е включено, присъединяването към групи ще изисква одобрение от собственик на групата. <em>(По подразбиране: включено)</em>", "private-groups.help": "Ако е включено, присъединяването към групи ще изисква одобрение от собственик на групата. <em>(По подразбиране: включено)</em>",
"private-groups.warning": "<strong>Внимание!</strong> Ако това е изключено и имате частни групи, те автоматично ще станат публични.", "private-groups.warning": "<strong>Внимание!</strong> Ако това е изключено и имате частни групи, те автоматично ще станат публични.",
"allow-creation": "Позволяване на създаването на групи",
"allow-creation-help": "Ако е включено, потребителите ще могат да създават групи. <em>(По подразбиране: изключено)</em>",
"allow-multiple-badges-help": "Това може да се използва, за да позволи на потребителите да избират множество значки за групите. Изисква поддържа на теми.", "allow-multiple-badges-help": "Това може да се използва, за да позволи на потребителите да избират множество значки за групите. Изисква поддържа на теми.",
"max-name-length": "Минимална дължина на името на група", "max-name-length": "Минимална дължина на името на група",
"max-title-length": "Максимална дължина на заглавието на група",
"cover-image": "Изображение на корицата за групата", "cover-image": "Изображение на корицата за групата",
"default-cover": "Стандартни изображения на корицата", "default-cover": "Стандартни изображения на корицата",
"default-cover-help": "Добавете стандартни изображения на корицата (разделени със запетаи) за групите, които нямат качено такова." "default-cover-help": "Добавете стандартни изображения на корицата (разделени със запетаи) за групите, които нямат качено такова."

View File

@@ -6,5 +6,6 @@
"max-posts-per-page": "Максимален брой публикации на страница", "max-posts-per-page": "Максимален брой публикации на страница",
"categories": "Странициране на категориите", "categories": "Странициране на категориите",
"topics-per-page": "Теми на страница", "topics-per-page": "Теми на страница",
"max-topics-per-page": "Максимален брой теми на страница" "max-topics-per-page": "Максимален брой теми на страница",
"initial-num-load": "Начален брой теми, които да бъдат заредени за „непрочетени“, „скорошни“ и „популярни“"
} }

View File

@@ -7,21 +7,18 @@
"sorting.most-posts": "Първо тези с най-много публикации", "sorting.most-posts": "Първо тези с най-много публикации",
"sorting.topic-default": "Подредба по подразбиране на темите", "sorting.topic-default": "Подредба по подразбиране на темите",
"length": "Дължина на публикациите", "length": "Дължина на публикациите",
"post-queue": "Опашка за публикации",
"restrictions": "Ограничения за публикуването", "restrictions": "Ограничения за публикуването",
"restrictions-new": "Ограничения за новите потребители", "restrictions-new": "Ограничения за новите потребители",
"restrictions.post-queue": "Включване на опашката за публикации", "restrictions.post-queue": "Включване на опашката за публикации",
"restrictions.post-queue-rep-threshold": "Нужна репутация за пропускане на опашката за публикации",
"restrictions.groups-exempt-from-post-queue": "Избиране на групи, които да пропускат опашката за публикации",
"restrictions-new.post-queue": "Включване на ограниченията за новите потребители", "restrictions-new.post-queue": "Включване на ограниченията за новите потребители",
"restrictions.post-queue-help": "Ако опашката за публикации е включена, публикациите на новите потребители ще бъдат добавяни в опашка за одобрение", "restrictions.post-queue-help": "Ако опашката за публикации е включена, публикациите на новите потребители ще бъдат добавяни в опашка за одобрение.",
"restrictions-new.post-queue-help": "Ако ограниченията за новите потребители са включени, това ще зададе някои ограничения за публикациите създадени от новите потребители", "restrictions-new.post-queue-help": "Ако ограниченията за новите потребители са включени, това ще зададе някои ограничения за публикациите създадени от новите потребители.",
"restrictions.seconds-between": "Брой секунди между публикациите", "restrictions.seconds-between": "Брой секунди между публикациите",
"restrictions.seconds-between-new": "Брой секунди между публикациите за нови потребители", "restrictions.seconds-between-new": "Брой секунди между публикациите за нови потребители",
"restrictions.rep-threshold": "Необходима репутация за премахване на това ограничение", "restrictions.rep-threshold": "Необходима репутация за премахване на това ограничение",
"restrictions.seconds-before-new": "Брой секунди преди новите потребители да могат да публикуват за пръв път", "restrictions.seconds-defore-new": "Брой секунди преди новите потребители да могат да публикуват",
"restrictions.seconds-edit-after": "Брой секунди, през които публикациите могат да бъдат редактирани. (0 = изключено)", "restrictions.seconds-edit-after": "Брой секунди, в които потребителите не могат да редактират публикациите си след публикуването им. (0 = изключено)",
"restrictions.seconds-delete-after": "Брой секунди, през които публикациите могат да бъдат изтрити. (0 = изключено)", "restrictions.seconds-delete-after": "Брой секунди, в които потребителите не могат да изтрият публикациите си след публикуването им. (0 = изключено)",
"restrictions.replies-no-delete": "Брой отговори, след които потребителите вече не могат да изтриват собствените си теми. (0 = изключено)", "restrictions.replies-no-delete": "Брой отговори, след които потребителите вече не могат да изтриват собствените си теми. (0 = изключено)",
"restrictions.min-title-length": "Минимална дължина на заглавието", "restrictions.min-title-length": "Минимална дължина на заглавието",
"restrictions.max-title-length": "Максимална дължина на заглавието", "restrictions.max-title-length": "Максимална дължина на заглавието",
@@ -32,8 +29,6 @@
"timestamp": "Време", "timestamp": "Време",
"timestamp.cut-off": "Използване на дата след (в брой дни)", "timestamp.cut-off": "Използване на дата след (в брой дни)",
"timestamp.cut-off-help": "Датите и времената ще бъдат показвани относително (напр. „преди 3 часа“ или „преди 5 дни“), и преведени на множество\n\\t\\t\\t\\t\\tезици. След определено време, този текст ще започне да показва самите дата и час, според езика на потребителя\n\\t\\t\\t\\t\\t(напр. „5 ноември 2016 15:30“).<br /><em>(По подразбиране: <code>30</code>, тоест един месец). Ако зададете 0, винаги ще се изписват дати, а ако оставите полето празно, времето ще бъде винаги относително.</em>", "timestamp.cut-off-help": "Датите и времената ще бъдат показвани относително (напр. „преди 3 часа“ или „преди 5 дни“), и преведени на множество\n\\t\\t\\t\\t\\tезици. След определено време, този текст ще започне да показва самите дата и час, според езика на потребителя\n\\t\\t\\t\\t\\t(напр. „5 ноември 2016 15:30“).<br /><em>(По подразбиране: <code>30</code>, тоест един месец). Ако зададете 0, винаги ще се изписват дати, а ако оставите полето празно, времето ще бъде винаги относително.</em>",
"timestamp.necro-threshold": "Мъртва граница (в дни)",
"timestamp.necro-threshold-help": "Между публикациите ще бъде показано съобщение, ако времето между тях е по-дълго от мъртвата граница. (По подразбиране: <code>7</code>, или една седмица). Задайте 0 за изключване.</em>",
"teaser": "Представителна публикация", "teaser": "Представителна публикация",
"teaser.last-post": "Последната &ndash; Показване на последната публикация, или първоначалната такава, ако няма отговори.", "teaser.last-post": "Последната &ndash; Показване на последната публикация, или първоначалната такава, ако няма отговори.",
"teaser.last-reply": "Последната &ndash; Показване на последния отговор, или „Няма отговори“, ако все още няма такива.", "teaser.last-reply": "Последната &ndash; Показване на последния отговор, или „Няма отговори“, ако все още няма такива.",

View File

@@ -5,6 +5,8 @@
"min-length": "Минимална дължина на етикетите", "min-length": "Минимална дължина на етикетите",
"max-length": "Максимална дължина на етикетите", "max-length": "Максимална дължина на етикетите",
"goto-manage": "Щракнете тук, за да отворите страницата за управление на етикетите.", "goto-manage": "Щракнете тук, за да отворите страницата за управление на етикетите.",
"privacy": "Поверителност",
"list-private": "Списъкът с етикети да бъде частен",
"related-topics": "Свързани теми", "related-topics": "Свързани теми",
"max-related-topics": "Максимален брой свързани теми, които да бъдат показвани (ако това се поддържа от темата)" "max-related-topics": "Максимален брой свързани теми, които да бъдат показвани (ако това се поддържа от темата)"
} }

View File

@@ -2,21 +2,12 @@
"posts": "Публикации", "posts": "Публикации",
"allow-files": "Позволяване на потребителите да качват обикновени файлове", "allow-files": "Позволяване на потребителите да качват обикновени файлове",
"private": "Качените файлове да бъдат частни", "private": "Качените файлове да бъдат частни",
"strip-exif-data": "Премахване на данните EXIF", "max-image-width": "Намаляване на размера на изображенията до определена ширина (в пиксели)",
"private-extensions": "Файлови разширения, които да бъдат частни", "max-image-width-help": "(в пиксели; по подразбиране: 760 пиксела. 0 = изключено)",
"private-uploads-extensions-help": "Въведете списък от файлови разширения, разделени със запетаи, които искате да бъдат частни (например <code>pdf,xls,doc</code>). Ако оставите това поле празно, всички файлове ще бъдат частни.",
"resize-image-width-threshold": "Преоразмеряване на изображенията, ако са по-широки от определената ширина",
"resize-image-width-threshold-help": "(в пиксели; по подразбиране: 1520 пиксела. 0 = изключено)",
"resize-image-width": "Намаляване на размера на изображенията до определена ширина",
"resize-image-width-help": "(в пиксели; по подразбиране: 760 пиксела. 0 = изключено)",
"resize-image-quality": "Качество при преоразмеряване на изображенията", "resize-image-quality": "Качество при преоразмеряване на изображенията",
"resize-image-quality-help": "Използване на по-ниско качество за намаляване на размера на файловете за преоразмерените изображения.", "resize-image-quality-help": "Използване на по-ниско качество за намаляване на размера на файловете за преоразмерените изображения.",
"max-file-size": "Максимален размер на файловете (в КиБ)", "max-file-size": "Максимален размер на файловете (в КиБ)",
"max-file-size-help": "(в кибибайтове; по подразбиране: 2048 КиБ)", "max-file-size-help": "(в кибибайтове; по подразбиране: 2048 КиБ)",
"reject-image-width": "Максимална ширина на изображенията (в пиксели)",
"reject-image-width-help": "Изображенията, чиято ширина е по-голяма от тази стойност, ще бъдат отхвърляни.",
"reject-image-height": "Максимална височина на изображенията (в пиксели)",
"reject-image-height-help": "Изображенията, чиято височина е по-голяма от тази стойност, ще бъдат отхвърляни.",
"allow-topic-thumbnails": "Позволяване на потребителите да качват миниатюрни изображения за темите", "allow-topic-thumbnails": "Позволяване на потребителите да качват миниатюрни изображения за темите",
"topic-thumb-size": "Размер на миниатюрите за темите", "topic-thumb-size": "Размер на миниатюрите за темите",
"allowed-file-extensions": "Разрешени файлови разширения", "allowed-file-extensions": "Разрешени файлови разширения",

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