Compare commits
6 Commits
protocol-v
...
v1.8.1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ad8e121f54 | ||
|
|
e12e73e728 | ||
|
|
5662772c3d | ||
|
|
2244026e7b | ||
|
|
6ea64091dc | ||
|
|
bbcaff821f |
@@ -1,22 +1,8 @@
|
||||
# Save as .codeclimate.yml (note leading .) in project root directory
|
||||
version: "2"
|
||||
languages:
|
||||
Ruby: false
|
||||
Ruby: true
|
||||
JavaScript: true
|
||||
PHP: false
|
||||
checks:
|
||||
file-lines:
|
||||
config:
|
||||
threshold: 500
|
||||
method-lines:
|
||||
config:
|
||||
threshold: 50
|
||||
method-complexity:
|
||||
config:
|
||||
threshold: 10
|
||||
similar-code:
|
||||
config:
|
||||
threshold: 65
|
||||
PHP: true
|
||||
exclude_paths:
|
||||
- "public/vendor/*"
|
||||
- "test/*"
|
||||
@@ -18,4 +18,3 @@ logs/
|
||||
/build
|
||||
.eslintrc
|
||||
test/files
|
||||
*.min.js
|
||||
|
||||
10
.eslintrc
@@ -14,10 +14,9 @@
|
||||
"exports": "always-multiline",
|
||||
"functions": "never"
|
||||
}],
|
||||
"no-return-await": "off",
|
||||
"no-constant-condition": "off",
|
||||
"no-empty": ["error", { "allowEmptyCatch": true }],
|
||||
"no-underscore-dangle": "off",
|
||||
"newline-per-chained-call": "off",
|
||||
"no-console": "off",
|
||||
"no-mixed-operators": ["error", { "allowSamePrecedence": true }],
|
||||
"strict": ["error", "global"],
|
||||
@@ -37,13 +36,6 @@
|
||||
"no-restricted-globals": "off",
|
||||
"function-paren-newline": "off",
|
||||
"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
|
||||
"prefer-rest-params": "off",
|
||||
|
||||
6
.github/ISSUE_TEMPLATE.md
vendored
@@ -10,11 +10,9 @@
|
||||
- **NodeBB version:**
|
||||
- **NodeBB git hash:**
|
||||
<!-- (to find your git hash, execute `git rev-parse HEAD` from the main NodeBB directory) -->
|
||||
- **Installed NodeBB Plugins:**
|
||||
<!-- (to find installed plugins run ./nodebb plugins) -->
|
||||
- **Database type:** mongo, redis, or postgres
|
||||
- **Database type:** mongo or redis
|
||||
- **Database version:**
|
||||
<!-- `mongod --version`, `redis-server --version`, or `postgres --version` -->
|
||||
<!-- `mongod --version` or `redis-server --version` -->
|
||||
- **Exact steps to cause this issue:**
|
||||
<!--
|
||||
1. First I did this...
|
||||
|
||||
1
.gitignore
vendored
@@ -61,6 +61,7 @@ tx.exe
|
||||
coverage
|
||||
.nyc_output
|
||||
|
||||
build
|
||||
*.log
|
||||
test/files/normalise.jpg.png
|
||||
test/files/normalise-resized.jpg
|
||||
|
||||
@@ -4,8 +4,6 @@
|
||||
|
||||
"maxerr" : 50, // {int} Maximum error before stopping
|
||||
|
||||
"esversion": 6,
|
||||
|
||||
// Enforcing
|
||||
"bitwise" : true, // true: Prohibit bitwise operators (&, |, ^, etc.)
|
||||
"camelcase" : false, // true: Identifiers must be in camelCase
|
||||
|
||||
36
.travis.yml
@@ -1,46 +1,36 @@
|
||||
services:
|
||||
- mongodb
|
||||
- redis-server
|
||||
- postgresql
|
||||
before_install:
|
||||
- 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
|
||||
cache:
|
||||
directories:
|
||||
- node_modules
|
||||
before_script:
|
||||
- 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\\\":\\\"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/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"
|
||||
- sh -c "if [ '$DB' = 'mongodb' ]; then node app --setup=\"{\\\"url\\\":\\\"http://127.0.0.1:4567\\\",\\\"secret\\\":\\\"abcdef\\\",\\\"database\\\":\\\"mongo\\\",\\\"mongo:host\\\":\\\"127.0.0.1\\\",\\\"mongo:port\\\":27017,\\\"mongo:username\\\":\\\"\\\",\\\"mongo:password\\\":\\\"\\\",\\\"mongo:database\\\":0,\\\"redis:host\\\":\\\"127.0.0.1\\\",\\\"redis:port\\\":6379,\\\"redis:password\\\":\\\"\\\",\\\"redis:database\\\":0,\\\"admin:username\\\":\\\"admin\\\",\\\"admin:email\\\":\\\"test@example.org\\\",\\\"admin:password\\\":\\\"abcdef\\\",\\\"admin:password:confirm\\\":\\\"abcdef\\\"}\" --ci=\"{\\\"host\\\":\\\"127.0.0.1\\\",\\\"port\\\":27017,\\\"database\\\":0}\"; fi"
|
||||
- sh -c "if [ '$DB' = 'redis' ]; then node app --setup=\"{\\\"url\\\":\\\"http://127.0.0.1:4567\\\",\\\"secret\\\":\\\"abcdef\\\",\\\"database\\\":\\\"redis\\\",\\\"mongo:host\\\":\\\"127.0.0.1\\\",\\\"mongo:port\\\":27017,\\\"mongo:username\\\":\\\"\\\",\\\"mongo:password\\\":\\\"\\\",\\\"mongo:database\\\":0,\\\"redis:host\\\":\\\"127.0.0.1\\\",\\\"redis:port\\\":6379,\\\"redis:password\\\":\\\"\\\",\\\"redis:database\\\":0,\\\"admin:username\\\":\\\"admin\\\",\\\"admin:email\\\":\\\"test@example.org\\\",\\\"admin:password\\\":\\\"abcdef\\\",\\\"admin:password:confirm\\\":\\\"abcdef\\\"}\" --ci=\"{\\\"host\\\":\\\"127.0.0.1\\\",\\\"port\\\":6379,\\\"database\\\":0}\"; fi"
|
||||
after_success:
|
||||
- "npm run coveralls"
|
||||
language: node_js
|
||||
sudo: false
|
||||
dist: xenial
|
||||
dist: trusty
|
||||
env:
|
||||
global:
|
||||
- PGUSER=postgres
|
||||
- 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"
|
||||
- CXX=g++-4.8 DB=mongodb
|
||||
- CXX=g++-4.8 DB=redis
|
||||
addons:
|
||||
apt:
|
||||
sources:
|
||||
- ubuntu-toolchain-r-test
|
||||
- mongodb-4.0-xenial
|
||||
- mongodb-3.4-trusty
|
||||
packages:
|
||||
- g++-4.8
|
||||
- mongodb-org-server
|
||||
node_js:
|
||||
- "12"
|
||||
- "10"
|
||||
- "9"
|
||||
- "8"
|
||||
- "7"
|
||||
- "6"
|
||||
branches:
|
||||
only:
|
||||
- master
|
||||
|
||||
266
.tx/config
@@ -28,7 +28,6 @@ trans.it = public/language/it/category.json
|
||||
trans.ja = public/language/ja/category.json
|
||||
trans.ko = public/language/ko/category.json
|
||||
trans.lt = public/language/lt/category.json
|
||||
trans.lv = public/language/lv/category.json
|
||||
trans.ms = public/language/ms/category.json
|
||||
trans.nb = public/language/nb/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.ko = public/language/ko/login.json
|
||||
trans.lt = public/language/lt/login.json
|
||||
trans.lv = public/language/lv/login.json
|
||||
trans.ms = public/language/ms/login.json
|
||||
trans.nb = public/language/nb/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.ko = public/language/ko/recent.json
|
||||
trans.lt = public/language/lt/recent.json
|
||||
trans.lv = public/language/lv/recent.json
|
||||
trans.ms = public/language/ms/recent.json
|
||||
trans.nb = public/language/nb/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.ko = public/language/ko/unread.json
|
||||
trans.lt = public/language/lt/unread.json
|
||||
trans.lv = public/language/lv/unread.json
|
||||
trans.ms = public/language/ms/unread.json
|
||||
trans.nb = public/language/nb/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.ko = public/language/ko/modules.json
|
||||
trans.lt = public/language/lt/modules.json
|
||||
trans.lv = public/language/lv/modules.json
|
||||
trans.ms = public/language/ms/modules.json
|
||||
trans.nb = public/language/nb/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.ko = public/language/ko/register.json
|
||||
trans.lt = public/language/lt/register.json
|
||||
trans.lv = public/language/lv/register.json
|
||||
trans.ms = public/language/ms/register.json
|
||||
trans.nb = public/language/nb/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.ko = public/language/ko/user.json
|
||||
trans.lt = public/language/lt/user.json
|
||||
trans.lv = public/language/lv/user.json
|
||||
trans.ms = public/language/ms/user.json
|
||||
trans.nb = public/language/nb/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.ko = public/language/ko/global.json
|
||||
trans.lt = public/language/lt/global.json
|
||||
trans.lv = public/language/lv/global.json
|
||||
trans.ms = public/language/ms/global.json
|
||||
trans.nb = public/language/nb/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.ko = public/language/ko/notifications.json
|
||||
trans.lt = public/language/lt/notifications.json
|
||||
trans.lv = public/language/lv/notifications.json
|
||||
trans.ms = public/language/ms/notifications.json
|
||||
trans.nb = public/language/nb/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.ko = public/language/ko/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.nb = public/language/nb/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.ko = public/language/ko/users.json
|
||||
trans.lt = public/language/lt/users.json
|
||||
trans.lv = public/language/lv/users.json
|
||||
trans.ms = public/language/ms/users.json
|
||||
trans.nb = public/language/nb/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.ko = public/language/ko/language.json
|
||||
trans.lt = public/language/lt/language.json
|
||||
trans.lv = public/language/lv/language.json
|
||||
trans.ms = public/language/ms/language.json
|
||||
trans.nb = public/language/nb/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.ko = public/language/ko/pages.json
|
||||
trans.lt = public/language/lt/pages.json
|
||||
trans.lv = public/language/lv/pages.json
|
||||
trans.ms = public/language/ms/pages.json
|
||||
trans.nb = public/language/nb/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.ko = public/language/ko/topic.json
|
||||
trans.lt = public/language/lt/topic.json
|
||||
trans.lv = public/language/lv/topic.json
|
||||
trans.ms = public/language/ms/topic.json
|
||||
trans.nb = public/language/nb/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.ko = public/language/ko/success.json
|
||||
trans.lt = public/language/lt/success.json
|
||||
trans.lv = public/language/lv/success.json
|
||||
trans.ms = public/language/ms/success.json
|
||||
trans.nb = public/language/nb/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.ko = public/language/ko/error.json
|
||||
trans.lt = public/language/lt/error.json
|
||||
trans.lv = public/language/lv/error.json
|
||||
trans.ms = public/language/ms/error.json
|
||||
trans.nb = public/language/nb/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.ko = public/language/ko/flags.json
|
||||
trans.lt = public/language/lt/flags.json
|
||||
trans.lv = public/language/lv/flags.json
|
||||
trans.ms = public/language/ms/flags.json
|
||||
trans.nb = public/language/nb/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.ko = public/language/ko/tags.json
|
||||
trans.lt = public/language/lt/tags.json
|
||||
trans.lv = public/language/lv/tags.json
|
||||
trans.ms = public/language/ms/tags.json
|
||||
trans.nb = public/language/nb/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.ko = public/language/ko/email.json
|
||||
trans.lt = public/language/lt/email.json
|
||||
trans.lv = public/language/lv/email.json
|
||||
trans.ms = public/language/ms/email.json
|
||||
trans.nb = public/language/nb/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.ko = public/language/ko/search.json
|
||||
trans.lt = public/language/lt/search.json
|
||||
trans.lv = public/language/lv/search.json
|
||||
trans.ms = public/language/ms/search.json
|
||||
trans.nb = public/language/nb/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.ko = public/language/ko/groups.json
|
||||
trans.lt = public/language/lt/groups.json
|
||||
trans.lv = public/language/lv/groups.json
|
||||
trans.ms = public/language/ms/groups.json
|
||||
trans.nb = public/language/nb/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.ko = public/language/ko/uploads.json
|
||||
trans.lt = public/language/lt/uploads.json
|
||||
trans.lv = public/language/lv/uploads.json
|
||||
trans.ms = public/language/ms/uploads.json
|
||||
trans.nb = public/language/nb/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.ko = public/language/ko/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.nb = public/language/nb/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.ko = public/language/ko/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.nb = public/language/nb/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.ko = public/language/ko/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.nb = public/language/nb/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.ko = public/language/ko/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.nb = public/language/nb/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.ko = public/language/ko/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.nb = public/language/nb/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.ko = public/language/ko/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.nb = public/language/nb/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.ko = public/language/ko/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.nb = public/language/nb/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.ko = public/language/ko/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.nb = public/language/nb/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.ko = public/language/ko/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.nb = public/language/nb/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.ko = public/language/ko/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.nb = public/language/nb/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.ko = public/language/ko/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.nb = public/language/nb/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.ko = public/language/ko/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.nb = public/language/nb/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.ko = public/language/ko/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.nb = public/language/nb/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.ko = public/language/ko/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.nb = public/language/nb/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.ko = public/language/ko/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.nb = public/language/nb/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.ko = public/language/ko/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.nb = public/language/nb/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.ko = public/language/ko/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.nb = public/language/nb/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.ko = public/language/ko/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.nb = public/language/nb/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.ko = public/language/ko/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.nb = public/language/nb/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.ko = public/language/ko/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.nb = public/language/nb/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.ko = public/language/ko/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.nb = public/language/nb/admin/general/sounds.json
|
||||
trans.nl = public/language/nl/admin/general/sounds.json
|
||||
@@ -2150,56 +2107,6 @@ trans.zh_CN = public/language/zh-CN/admin/general/sounds.json
|
||||
trans.zh_TW = public/language/zh-TW/admin/general/sounds.json
|
||||
type = KEYVALUEJSON
|
||||
|
||||
[nodebb.admin-manage-admins-mods]
|
||||
file_filter = public/language/<lang>/admin/manage/admins-mods.json
|
||||
source_file = public/language/en-GB/admin/manage/admins-mods.json
|
||||
source_lang = en_GB
|
||||
trans.ar = public/language/ar/admin/manage/admins-mods.json
|
||||
trans.bg = public/language/bg/admin/manage/admins-mods.json
|
||||
trans.bn = public/language/bn/admin/manage/admins-mods.json
|
||||
trans.cs = public/language/cs/admin/manage/admins-mods.json
|
||||
trans.da = public/language/da/admin/manage/admins-mods.json
|
||||
trans.de = public/language/de/admin/manage/admins-mods.json
|
||||
trans.el = public/language/el/admin/manage/admins-mods.json
|
||||
trans.en@pirate = public/language/en-x-pirate/admin/manage/admins-mods.json
|
||||
trans.en_US = public/language/en-US/admin/manage/admins-mods.json
|
||||
trans.es = public/language/es/admin/manage/admins-mods.json
|
||||
trans.et = public/language/et/admin/manage/admins-mods.json
|
||||
trans.fa_IR = public/language/fa-IR/admin/manage/admins-mods.json
|
||||
trans.fi = public/language/fi/admin/manage/admins-mods.json
|
||||
trans.fr = public/language/fr/admin/manage/admins-mods.json
|
||||
trans.gl = public/language/gl/admin/manage/admins-mods.json
|
||||
trans.he = public/language/he/admin/manage/admins-mods.json
|
||||
trans.hr = public/language/hr/admin/manage/admins-mods.json
|
||||
trans.hu = public/language/hu/admin/manage/admins-mods.json
|
||||
trans.id = public/language/id/admin/manage/admins-mods.json
|
||||
trans.it = public/language/it/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.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.nb = public/language/nb/admin/manage/admins-mods.json
|
||||
trans.nl = public/language/nl/admin/manage/admins-mods.json
|
||||
trans.pl = public/language/pl/admin/manage/admins-mods.json
|
||||
trans.pt_BR = public/language/pt-BR/admin/manage/admins-mods.json
|
||||
trans.pt_PT = public/language/pt-PT/admin/manage/admins-mods.json
|
||||
trans.ro = public/language/ro/admin/manage/admins-mods.json
|
||||
trans.ru = public/language/ru/admin/manage/admins-mods.json
|
||||
trans.rw = public/language/rw/admin/manage/admins-mods.json
|
||||
trans.sc = public/language/sc/admin/manage/admins-mods.json
|
||||
trans.sk = public/language/sk/admin/manage/admins-mods.json
|
||||
trans.sl = public/language/sl/admin/manage/admins-mods.json
|
||||
trans.sr = public/language/sr/admin/manage/admins-mods.json
|
||||
trans.sv = public/language/sv/admin/manage/admins-mods.json
|
||||
trans.th = public/language/th/admin/manage/admins-mods.json
|
||||
trans.tr = public/language/tr/admin/manage/admins-mods.json
|
||||
trans.uk = public/language/uk/admin/manage/admins-mods.json
|
||||
trans.vi = public/language/vi/admin/manage/admins-mods.json
|
||||
trans.zh_CN = public/language/zh-CN/admin/manage/admins-mods.json
|
||||
trans.zh_TW = public/language/zh-TW/admin/manage/admins-mods.json
|
||||
type = KEYVALUEJSON
|
||||
|
||||
[nodebb.admin-manage-categories]
|
||||
file_filter = public/language/<lang>/admin/manage/categories.json
|
||||
source_file = public/language/en-GB/admin/manage/categories.json
|
||||
@@ -2227,7 +2134,6 @@ trans.it = public/language/it/admin/manage/categories.json
|
||||
trans.ja = public/language/ja/admin/manage/categories.json
|
||||
trans.ko = public/language/ko/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.nb = public/language/nb/admin/manage/categories.json
|
||||
trans.nl = public/language/nl/admin/manage/categories.json
|
||||
@@ -2277,7 +2183,6 @@ trans.it = public/language/it/admin/manage/groups.json
|
||||
trans.ja = public/language/ja/admin/manage/groups.json
|
||||
trans.ko = public/language/ko/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.nb = public/language/nb/admin/manage/groups.json
|
||||
trans.nl = public/language/nl/admin/manage/groups.json
|
||||
@@ -2327,7 +2232,6 @@ trans.it = public/language/it/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.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.nb = public/language/nb/admin/manage/ip-blacklist.json
|
||||
trans.nl = public/language/nl/admin/manage/ip-blacklist.json
|
||||
@@ -2350,56 +2254,6 @@ trans.zh_CN = public/language/zh-CN/admin/manage/ip-blacklist.json
|
||||
trans.zh_TW = public/language/zh-TW/admin/manage/ip-blacklist.json
|
||||
type = KEYVALUEJSON
|
||||
|
||||
[nodebb.admin-manage-privileges]
|
||||
file_filter = public/language/<lang>/admin/manage/privileges.json
|
||||
source_file = public/language/en-GB/admin/manage/privileges.json
|
||||
source_lang = en_GB
|
||||
trans.ar = public/language/ar/admin/manage/privileges.json
|
||||
trans.bg = public/language/bg/admin/manage/privileges.json
|
||||
trans.bn = public/language/bn/admin/manage/privileges.json
|
||||
trans.cs = public/language/cs/admin/manage/privileges.json
|
||||
trans.da = public/language/da/admin/manage/privileges.json
|
||||
trans.de = public/language/de/admin/manage/privileges.json
|
||||
trans.el = public/language/el/admin/manage/privileges.json
|
||||
trans.en@pirate = public/language/en-x-pirate/admin/manage/privileges.json
|
||||
trans.en_US = public/language/en-US/admin/manage/privileges.json
|
||||
trans.es = public/language/es/admin/manage/privileges.json
|
||||
trans.et = public/language/et/admin/manage/privileges.json
|
||||
trans.fa_IR = public/language/fa-IR/admin/manage/privileges.json
|
||||
trans.fi = public/language/fi/admin/manage/privileges.json
|
||||
trans.fr = public/language/fr/admin/manage/privileges.json
|
||||
trans.gl = public/language/gl/admin/manage/privileges.json
|
||||
trans.he = public/language/he/admin/manage/privileges.json
|
||||
trans.hr = public/language/hr/admin/manage/privileges.json
|
||||
trans.hu = public/language/hu/admin/manage/privileges.json
|
||||
trans.id = public/language/id/admin/manage/privileges.json
|
||||
trans.it = public/language/it/admin/manage/privileges.json
|
||||
trans.ja = public/language/ja/admin/manage/privileges.json
|
||||
trans.ko = public/language/ko/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.nb = public/language/nb/admin/manage/privileges.json
|
||||
trans.nl = public/language/nl/admin/manage/privileges.json
|
||||
trans.pl = public/language/pl/admin/manage/privileges.json
|
||||
trans.pt_BR = public/language/pt-BR/admin/manage/privileges.json
|
||||
trans.pt_PT = public/language/pt-PT/admin/manage/privileges.json
|
||||
trans.ro = public/language/ro/admin/manage/privileges.json
|
||||
trans.ru = public/language/ru/admin/manage/privileges.json
|
||||
trans.rw = public/language/rw/admin/manage/privileges.json
|
||||
trans.sc = public/language/sc/admin/manage/privileges.json
|
||||
trans.sk = public/language/sk/admin/manage/privileges.json
|
||||
trans.sl = public/language/sl/admin/manage/privileges.json
|
||||
trans.sr = public/language/sr/admin/manage/privileges.json
|
||||
trans.sv = public/language/sv/admin/manage/privileges.json
|
||||
trans.th = public/language/th/admin/manage/privileges.json
|
||||
trans.tr = public/language/tr/admin/manage/privileges.json
|
||||
trans.uk = public/language/uk/admin/manage/privileges.json
|
||||
trans.vi = public/language/vi/admin/manage/privileges.json
|
||||
trans.zh_CN = public/language/zh-CN/admin/manage/privileges.json
|
||||
trans.zh_TW = public/language/zh-TW/admin/manage/privileges.json
|
||||
type = KEYVALUEJSON
|
||||
|
||||
[nodebb.admin-manage-post-queue]
|
||||
file_filter = public/language/<lang>/admin/manage/post-queue.json
|
||||
source_file = public/language/en-GB/admin/manage/post-queue.json
|
||||
@@ -2427,7 +2281,6 @@ trans.it = public/language/it/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.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.nb = public/language/nb/admin/manage/post-queue.json
|
||||
trans.nl = public/language/nl/admin/manage/post-queue.json
|
||||
@@ -2477,7 +2330,6 @@ trans.it = public/language/it/admin/manage/registration.json
|
||||
trans.ja = public/language/ja/admin/manage/registration.json
|
||||
trans.ko = public/language/ko/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.nb = public/language/nb/admin/manage/registration.json
|
||||
trans.nl = public/language/nl/admin/manage/registration.json
|
||||
@@ -2527,7 +2379,6 @@ trans.it = public/language/it/admin/manage/tags.json
|
||||
trans.ja = public/language/ja/admin/manage/tags.json
|
||||
trans.ko = public/language/ko/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.nb = public/language/nb/admin/manage/tags.json
|
||||
trans.nl = public/language/nl/admin/manage/tags.json
|
||||
@@ -2550,56 +2401,6 @@ trans.zh_CN = public/language/zh-CN/admin/manage/tags.json
|
||||
trans.zh_TW = public/language/zh-TW/admin/manage/tags.json
|
||||
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]
|
||||
file_filter = public/language/<lang>/admin/manage/users.json
|
||||
source_file = public/language/en-GB/admin/manage/users.json
|
||||
@@ -2627,7 +2428,6 @@ trans.it = public/language/it/admin/manage/users.json
|
||||
trans.ja = public/language/ja/admin/manage/users.json
|
||||
trans.ko = public/language/ko/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.nb = public/language/nb/admin/manage/users.json
|
||||
trans.nl = public/language/nl/admin/manage/users.json
|
||||
@@ -2650,56 +2450,6 @@ trans.zh_CN = public/language/zh-CN/admin/manage/users.json
|
||||
trans.zh_TW = public/language/zh-TW/admin/manage/users.json
|
||||
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]
|
||||
file_filter = public/language/<lang>/admin/settings/advanced.json
|
||||
source_file = public/language/en-GB/admin/settings/advanced.json
|
||||
@@ -2727,7 +2477,6 @@ trans.it = public/language/it/admin/settings/advanced.json
|
||||
trans.ja = public/language/ja/admin/settings/advanced.json
|
||||
trans.ko = public/language/ko/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.nb = public/language/nb/admin/settings/advanced.json
|
||||
trans.nl = public/language/nl/admin/settings/advanced.json
|
||||
@@ -2777,7 +2526,6 @@ trans.it = public/language/it/admin/settings/cookies.json
|
||||
trans.ja = public/language/ja/admin/settings/cookies.json
|
||||
trans.ko = public/language/ko/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.nb = public/language/nb/admin/settings/cookies.json
|
||||
trans.nl = public/language/nl/admin/settings/cookies.json
|
||||
@@ -2827,7 +2575,6 @@ trans.it = public/language/it/admin/settings/general.json
|
||||
trans.ja = public/language/ja/admin/settings/general.json
|
||||
trans.ko = public/language/ko/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.nb = public/language/nb/admin/settings/general.json
|
||||
trans.nl = public/language/nl/admin/settings/general.json
|
||||
@@ -2877,7 +2624,6 @@ trans.it = public/language/it/admin/settings/guest.json
|
||||
trans.ja = public/language/ja/admin/settings/guest.json
|
||||
trans.ko = public/language/ko/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.nb = public/language/nb/admin/settings/guest.json
|
||||
trans.nl = public/language/nl/admin/settings/guest.json
|
||||
@@ -2927,7 +2673,6 @@ trans.it = public/language/it/admin/settings/pagination.json
|
||||
trans.ja = public/language/ja/admin/settings/pagination.json
|
||||
trans.ko = public/language/ko/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.nb = public/language/nb/admin/settings/pagination.json
|
||||
trans.nl = public/language/nl/admin/settings/pagination.json
|
||||
@@ -2977,7 +2722,6 @@ trans.it = public/language/it/admin/settings/reputation.json
|
||||
trans.ja = public/language/ja/admin/settings/reputation.json
|
||||
trans.ko = public/language/ko/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.nb = public/language/nb/admin/settings/reputation.json
|
||||
trans.nl = public/language/nl/admin/settings/reputation.json
|
||||
@@ -3027,7 +2771,6 @@ trans.it = public/language/it/admin/settings/tags.json
|
||||
trans.ja = public/language/ja/admin/settings/tags.json
|
||||
trans.ko = public/language/ko/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.nb = public/language/nb/admin/settings/tags.json
|
||||
trans.nl = public/language/nl/admin/settings/tags.json
|
||||
@@ -3077,7 +2820,6 @@ trans.it = public/language/it/admin/settings/user.json
|
||||
trans.ja = public/language/ja/admin/settings/user.json
|
||||
trans.ko = public/language/ko/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.nb = public/language/nb/admin/settings/user.json
|
||||
trans.nl = public/language/nl/admin/settings/user.json
|
||||
@@ -3127,7 +2869,6 @@ trans.it = public/language/it/admin/settings/chat.json
|
||||
trans.ja = public/language/ja/admin/settings/chat.json
|
||||
trans.ko = public/language/ko/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.nb = public/language/nb/admin/settings/chat.json
|
||||
trans.nl = public/language/nl/admin/settings/chat.json
|
||||
@@ -3177,7 +2918,6 @@ trans.it = public/language/it/admin/settings/email.json
|
||||
trans.ja = public/language/ja/admin/settings/email.json
|
||||
trans.ko = public/language/ko/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.nb = public/language/nb/admin/settings/email.json
|
||||
trans.nl = public/language/nl/admin/settings/email.json
|
||||
@@ -3227,7 +2967,6 @@ trans.it = public/language/it/admin/settings/group.json
|
||||
trans.ja = public/language/ja/admin/settings/group.json
|
||||
trans.ko = public/language/ko/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.nb = public/language/nb/admin/settings/group.json
|
||||
trans.nl = public/language/nl/admin/settings/group.json
|
||||
@@ -3277,7 +3016,6 @@ trans.it = public/language/it/admin/settings/notifications.json
|
||||
trans.ja = public/language/ja/admin/settings/notifications.json
|
||||
trans.ko = public/language/ko/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.nb = public/language/nb/admin/settings/notifications.json
|
||||
trans.nl = public/language/nl/admin/settings/notifications.json
|
||||
@@ -3327,7 +3065,6 @@ trans.it = public/language/it/admin/settings/post.json
|
||||
trans.ja = public/language/ja/admin/settings/post.json
|
||||
trans.ko = public/language/ko/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.nb = public/language/nb/admin/settings/post.json
|
||||
trans.nl = public/language/nl/admin/settings/post.json
|
||||
@@ -3377,7 +3114,6 @@ trans.it = public/language/it/admin/settings/sockets.json
|
||||
trans.ja = public/language/ja/admin/settings/sockets.json
|
||||
trans.ko = public/language/ko/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.nb = public/language/nb/admin/settings/sockets.json
|
||||
trans.nl = public/language/nl/admin/settings/sockets.json
|
||||
@@ -3427,7 +3163,6 @@ trans.it = public/language/it/admin/settings/uploads.json
|
||||
trans.ja = public/language/ja/admin/settings/uploads.json
|
||||
trans.ko = public/language/ko/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.nb = public/language/nb/admin/settings/uploads.json
|
||||
trans.nl = public/language/nl/admin/settings/uploads.json
|
||||
@@ -3477,7 +3212,6 @@ trans.it = public/language/it/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.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.nb = public/language/nb/admin/settings/web-crawler.json
|
||||
trans.nl = public/language/nl/admin/settings/web-crawler.json
|
||||
|
||||
1440
CHANGELOG.md
13
Dockerfile
@@ -1,23 +1,20 @@
|
||||
FROM node:lts
|
||||
# The base image is the latest 8.x node (LTS)
|
||||
FROM node:8.9.0
|
||||
|
||||
RUN mkdir -p /usr/src/app
|
||||
WORKDIR /usr/src/app
|
||||
|
||||
ARG NODE_ENV
|
||||
ENV NODE_ENV $NODE_ENV
|
||||
|
||||
COPY install/package.json /usr/src/app/package.json
|
||||
|
||||
RUN npm install --only=prod && \
|
||||
npm cache clean --force
|
||||
|
||||
RUN npm install && npm cache clean --force
|
||||
COPY . /usr/src/app
|
||||
|
||||
ENV NODE_ENV=production \
|
||||
daemon=false \
|
||||
silent=false
|
||||
|
||||
EXPOSE 4567
|
||||
|
||||
CMD ./nodebb start
|
||||
|
||||
# the default port for NodeBB is exposed outside the container
|
||||
EXPOSE 4567
|
||||
220
Gruntfile.js
@@ -1,7 +1,5 @@
|
||||
'use strict';
|
||||
|
||||
|
||||
var async = require('async');
|
||||
var fork = require('child_process').fork;
|
||||
var env = process.env;
|
||||
var worker;
|
||||
@@ -12,26 +10,6 @@ var running = 0;
|
||||
|
||||
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) {
|
||||
var args = [];
|
||||
var initArgs = ['--build'];
|
||||
@@ -59,7 +37,7 @@ module.exports = function (grunt) {
|
||||
// Do nothing, just restart
|
||||
}
|
||||
|
||||
if (compiling && !incomplete.includes(compiling)) {
|
||||
if (compiling && incomplete.indexOf(compiling) === -1) {
|
||||
incomplete.push(compiling);
|
||||
}
|
||||
|
||||
@@ -92,116 +70,80 @@ module.exports = function (grunt) {
|
||||
}
|
||||
|
||||
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.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';
|
||||
|
||||
if (grunt.option('skip')) {
|
||||
@@ -222,25 +164,3 @@ module.exports = function (grunt) {
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
# <img alt="NodeBB" src="http://i.imgur.com/mYxPPtB.png" />
|
||||
|
||||
[](https://gitter.im/NodeBB/NodeBB?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
||||
[](https://travis-ci.org/NodeBB/NodeBB)
|
||||
[](https://coveralls.io/github/NodeBB/NodeBB?branch=master)
|
||||
[](https://david-dm.org/nodebb/nodebb?path=install)
|
||||
[](https://codeclimate.com/github/NodeBB/NodeBB)
|
||||
[](https://readthedocs.org/projects/nodebb/?badge=latest)
|
||||
|
||||
[**NodeBB Forum Software**](https://nodebb.org) is powered by Node.js and built on either a Redis or MongoDB database. It utilizes web sockets for instant interactions and real-time notifications. NodeBB has many modern features out of the box such as social network integration and streaming discussions, while still making sure to be compatible with older browsers.
|
||||
|
||||
@@ -40,7 +42,7 @@ Our minimalist "Persona" theme gets you going right away, no coding experience r
|
||||
## 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 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.
|
||||
* 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 +50,7 @@ Our minimalist "Persona" theme gets you going right away, no coding experience r
|
||||
|
||||
NodeBB requires the following software to be installed:
|
||||
|
||||
* A version of Node.js at least 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
|
||||
* nginx, version 1.3.13 or greater (**only if** intending to use nginx to proxy requests to a NodeBB)
|
||||
|
||||
|
||||
44
app.js
@@ -19,30 +19,38 @@
|
||||
|
||||
'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({
|
||||
separator: '__',
|
||||
});
|
||||
|
||||
const winston = require('winston');
|
||||
const path = require('path');
|
||||
var async = require('async');
|
||||
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';
|
||||
|
||||
// Alternate configuration file support
|
||||
const configFile = path.resolve(__dirname, nconf.any(['config', 'CONFIG']) || 'config.json');
|
||||
var configFile = path.join(__dirname, 'config.json');
|
||||
|
||||
const configExists = file.existsSync(configFile) || (nconf.get('url') && nconf.get('secret') && nconf.get('database'));
|
||||
if (nconf.get('config')) {
|
||||
configFile = path.resolve(__dirname, nconf.get('config'));
|
||||
}
|
||||
|
||||
const prestart = require('./src/prestart');
|
||||
var configExists = file.existsSync(configFile) || (nconf.get('url') && nconf.get('secret') && nconf.get('database'));
|
||||
|
||||
var prestart = require('./src/prestart');
|
||||
prestart.loadConfig(configFile);
|
||||
prestart.setupWinston();
|
||||
prestart.versionCheck();
|
||||
winston.verbose('* using configuration stored in: %s', configFile);
|
||||
prestart.setupWinston();
|
||||
|
||||
if (!process.send) {
|
||||
// If run using `node app`, log GNU copyright info along with server info
|
||||
@@ -59,21 +67,33 @@ if (nconf.get('setup') || nconf.get('install')) {
|
||||
} else if (nconf.get('upgrade')) {
|
||||
require('./src/cli/upgrade').upgrade(true);
|
||||
} else if (nconf.get('reset')) {
|
||||
require('./src/cli/reset').reset({
|
||||
var options = {
|
||||
theme: nconf.get('t'),
|
||||
plugin: nconf.get('p'),
|
||||
widgets: nconf.get('w'),
|
||||
settings: nconf.get('s'),
|
||||
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')) {
|
||||
require('./src/cli/manage').activate(nconf.get('activate'));
|
||||
} else if (nconf.get('plugins')) {
|
||||
require('./src/cli/manage').listPlugins();
|
||||
} 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')) {
|
||||
require('./src/cli/manage').listEvents();
|
||||
} else {
|
||||
require('./src/start').start();
|
||||
}
|
||||
|
||||
|
||||
4
build/.gitignore
vendored
@@ -1,4 +0,0 @@
|
||||
*
|
||||
*/
|
||||
!export
|
||||
!.gitignore
|
||||
3
build/export/.gitignore
vendored
@@ -1,3 +0,0 @@
|
||||
.
|
||||
!.gitignore
|
||||
!README
|
||||
@@ -1,5 +0,0 @@
|
||||
This directory contains archives of user uploads that are prepared on-demand
|
||||
when a user wants to retrieve a copy of their uploaded content.
|
||||
|
||||
You can delete the files in here at will. They will just be regenerated if
|
||||
requested again.
|
||||
@@ -1,3 +0,0 @@
|
||||
'use strict';
|
||||
|
||||
module.exports = { extends: ['@commitlint/config-angular'] };
|
||||
@@ -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:
|
||||
@@ -1,132 +1,49 @@
|
||||
{
|
||||
"title": "NodeBB",
|
||||
"showSiteTitle": 1,
|
||||
"defaultLang": "en-GB",
|
||||
"loginDays": 14,
|
||||
"loginSeconds": 0,
|
||||
"loginAttempts": 5,
|
||||
"lockoutDuration": 60,
|
||||
"adminReloginDuration": 60,
|
||||
"postDelay": 10,
|
||||
"initialPostDelay": 10,
|
||||
"newbiePostDelay": 120,
|
||||
"postEditDuration": 0,
|
||||
"newbiePostEditDuration": 3600,
|
||||
"postDeleteDuration": 0,
|
||||
"enablePostHistory": 1,
|
||||
"postCacheSize": 10485760,
|
||||
"disableChat": 0,
|
||||
"chatEditDuration": 0,
|
||||
"chatDeleteDuration": 0,
|
||||
"chatMessageDelay": 200,
|
||||
"newbiePostDelayThreshold": 3,
|
||||
"postQueueReputationThreshold": 0,
|
||||
"groupsExemptFromPostQueue": ["administrators", "Global Moderators"],
|
||||
"minimumPostLength": 8,
|
||||
"maximumPostLength": 32767,
|
||||
"minimumTagsPerTopic": 0,
|
||||
"maximumTagsPerTopic": 5,
|
||||
"minimumTagLength": 3,
|
||||
"maximumTagLength": 15,
|
||||
"allowGuestSearching": 0,
|
||||
"allowTopicsThumbnail": 0,
|
||||
"registrationType": "normal",
|
||||
"registrationApprovalType": "normal",
|
||||
"allowLocalLogin": 1,
|
||||
"allowAccountDelete": 1,
|
||||
"allowFileUploads": 0,
|
||||
"privateUploads": 0,
|
||||
"allowedFileExtensions": "png,jpg,bmp",
|
||||
"allowUserHomePage": 1,
|
||||
"allowMultipleBadges": 0,
|
||||
"maximumFileSize": 2048,
|
||||
"stripEXIFData": 1,
|
||||
"resizeImageWidthThreshold": 2000,
|
||||
"resizeImageWidth": 760,
|
||||
"rejectImageWidth": 5000,
|
||||
"rejectImageHeight": 5000,
|
||||
"resizeImageQuality": 80,
|
||||
"topicThumbSize": 120,
|
||||
"minimumTitleLength": 3,
|
||||
"maximumTitleLength": 255,
|
||||
"minimumUsernameLength": 2,
|
||||
"maximumUsernameLength": 16,
|
||||
"minimumPasswordLength": 6,
|
||||
"minimumPasswordStrength": 1,
|
||||
"maximumSignatureLength": 255,
|
||||
"maximumAboutMeLength": 1000,
|
||||
"maximumUsersInChatRoom": 0,
|
||||
"maximumChatMessageLength": 1000,
|
||||
"maximumProfileImageSize": 256,
|
||||
"maximumCoverImageSize": 2048,
|
||||
"profileImageDimension": 200,
|
||||
"profile:convertProfileImageToPNG": 0,
|
||||
"profile:keepAllUserImages": 0,
|
||||
"requireEmailConfirmation": 0,
|
||||
"gdpr_enabled": 1,
|
||||
"allowProfileImageUploads": 1,
|
||||
"teaserPost": "last-reply",
|
||||
"allowPrivateGroups": 1,
|
||||
"unreadCutoff": 2,
|
||||
"bookmarkThreshold": 5,
|
||||
"topicsPerList": 20,
|
||||
"autoDetectLang": 1,
|
||||
"reputation:disabled": 0,
|
||||
"downvote:disabled": 0,
|
||||
"disableSignatures": 0,
|
||||
"min:rep:downvote": 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_new-topic": "notification",
|
||||
"notificationType_new-reply": "notification",
|
||||
"notificationType_follow": "notification",
|
||||
"notificationType_new-chat": "notification",
|
||||
"notificationType_group-invite": "notification",
|
||||
"notificationType_mention": "notification",
|
||||
"notificationType_new-register": "notification",
|
||||
"notificationType_post-queue": "notification",
|
||||
"notificationType_new-post-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
|
||||
"notificationType_group-invite": "notification"
|
||||
}
|
||||
@@ -15,7 +15,9 @@
|
||||
"iconClass": "fa-inbox",
|
||||
"textClass": "visible-xs-inline",
|
||||
"text": "[[global:header.unread]]",
|
||||
"groups": ["registered-users"]
|
||||
"properties": {
|
||||
"loggedIn": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"route": "/recent",
|
||||
@@ -64,9 +66,9 @@
|
||||
"iconClass": "fa-cogs",
|
||||
"textClass": "visible-xs-inline",
|
||||
"text": "[[global:header.admin]]",
|
||||
"groups": ["administrators"],
|
||||
"properties": {
|
||||
"targetBlank": false
|
||||
"targetBlank": false,
|
||||
"adminOnly": true
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -7,7 +7,6 @@ var winston = require('winston');
|
||||
var questions = {
|
||||
redis: require('../src/database/redis').questions,
|
||||
mongo: require('../src/database/mongo').questions,
|
||||
postgres: require('../src/database/postgres').questions,
|
||||
};
|
||||
|
||||
module.exports = function (config, callback) {
|
||||
@@ -39,12 +38,6 @@ function getDatabaseConfig(config, callback) {
|
||||
} else {
|
||||
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 {
|
||||
return callback(new Error('unknown database : ' + config.database));
|
||||
}
|
||||
@@ -76,20 +69,11 @@ function saveDatabaseConfig(config, databaseConfig, callback) {
|
||||
database: databaseConfig['mongo:database'],
|
||||
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 {
|
||||
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) {
|
||||
delete config[allQuestions[x].name];
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"name": "nodebb",
|
||||
"license": "GPL-3.0",
|
||||
"description": "NodeBB Forum",
|
||||
"version": "1.13.0",
|
||||
"version": "1.8.1",
|
||||
"homepage": "http://www.nodebb.org",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
@@ -16,142 +16,115 @@
|
||||
"test": "nyc --reporter=html --reporter=text-summary mocha",
|
||||
"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": {
|
||||
"ace-builds": "^1.2.9",
|
||||
"archiver": "^3.0.0",
|
||||
"async": "^3.0.1",
|
||||
"autoprefixer": "^9.4.6",
|
||||
"async": "2.6.0",
|
||||
"autoprefixer": "7.2.4",
|
||||
"bcryptjs": "2.4.3",
|
||||
"benchpressjs": "^2.0.0",
|
||||
"benchpressjs": "^1.2.1",
|
||||
"body-parser": "^1.18.2",
|
||||
"bootstrap": "^3.4.0",
|
||||
"bootswatch": "git://github.com/thomaspark/bootswatch.git#c41a8f066feb8950c6f9c6bcf5a3c37d1085404e",
|
||||
"bootstrap": "^3.3.7",
|
||||
"chart.js": "^2.7.1",
|
||||
"cli-graph": "^3.2.2",
|
||||
"clipboard": "^2.0.1",
|
||||
"clipboard": "1.7.1",
|
||||
"colors": "^1.1.2",
|
||||
"commander": "^3.0.0",
|
||||
"compression": "^1.7.1",
|
||||
"commander": "^2.12.2",
|
||||
"connect-ensure-login": "^0.1.1",
|
||||
"connect-flash": "^0.1.1",
|
||||
"connect-mongo": "3.2.0",
|
||||
"connect-mongo": "2.0.1",
|
||||
"connect-multiparty": "^2.1.0",
|
||||
"connect-pg-simple": "^6.0.0",
|
||||
"connect-redis": "4.0.3",
|
||||
"connect-redis": "3.3.3",
|
||||
"cookie-parser": "^1.4.3",
|
||||
"cron": "^1.3.0",
|
||||
"cropperjs": "^1.2.2",
|
||||
"csurf": "^1.9.0",
|
||||
"daemon": "^1.1.0",
|
||||
"diff": "^4.0.1",
|
||||
"diff": "^3.4.0",
|
||||
"express": "^4.16.2",
|
||||
"express-session": "^1.15.6",
|
||||
"express-useragent": "^1.0.12",
|
||||
"express-useragent": "1.0.8",
|
||||
"graceful-fs": "^4.1.11",
|
||||
"helmet": "^3.11.0",
|
||||
"html-to-text": "^5.0.0",
|
||||
"html-to-text": "3.3.0",
|
||||
"ipaddr.js": "^1.5.4",
|
||||
"jimp": "0.2.28",
|
||||
"jquery": "^3.2.1",
|
||||
"jsesc": "2.5.2",
|
||||
"json-2-csv": "^3.0.0",
|
||||
"jsonwebtoken": "^8.4.0",
|
||||
"less": "^3.10.3",
|
||||
"lodash": "^4.17.15",
|
||||
"jsesc": "2.5.1",
|
||||
"json-2-csv": "^2.1.2",
|
||||
"less": "^2.7.3",
|
||||
"lodash": "^4.17.4",
|
||||
"logrotate-stream": "^0.2.5",
|
||||
"lru-cache": "5.1.1",
|
||||
"lru-cache": "4.1.1",
|
||||
"material-design-lite": "^1.3.0",
|
||||
"mime": "^2.2.0",
|
||||
"mkdirp": "^0.5.1",
|
||||
"mongodb": "3.4.0",
|
||||
"morgan": "^1.9.1",
|
||||
"mongodb": "2.2.33",
|
||||
"morgan": "^1.9.0",
|
||||
"mousetrap": "^1.6.1",
|
||||
"mubsub-nbb": "^1.5.1",
|
||||
"nconf": "^0.10.0",
|
||||
"nodebb-plugin-composer-default": "6.3.20",
|
||||
"nodebb-plugin-dbsearch": "4.0.7",
|
||||
"nodebb-plugin-emoji": "^3.0.0",
|
||||
"mubsub": "^1.4.0",
|
||||
"nconf": "^0.9.1",
|
||||
"nodebb-plugin-composer-default": "6.0.17",
|
||||
"nodebb-plugin-dbsearch": "2.0.10",
|
||||
"nodebb-plugin-emoji": "^2.1.0",
|
||||
"nodebb-plugin-emoji-android": "2.0.0",
|
||||
"nodebb-plugin-markdown": "8.11.0",
|
||||
"nodebb-plugin-mentions": "2.7.3",
|
||||
"nodebb-plugin-markdown": "8.4.2",
|
||||
"nodebb-plugin-mentions": "2.2.4",
|
||||
"nodebb-plugin-soundpack-default": "1.0.0",
|
||||
"nodebb-plugin-spam-be-gone": "0.6.7",
|
||||
"nodebb-rewards-essentials": "0.1.2",
|
||||
"nodebb-theme-lavender": "5.0.11",
|
||||
"nodebb-theme-persona": "10.1.30",
|
||||
"nodebb-theme-slick": "1.2.28",
|
||||
"nodebb-theme-vanilla": "11.1.12",
|
||||
"nodebb-widget-essentials": "4.0.17",
|
||||
"nodemailer": "^6.0.0",
|
||||
"nodebb-plugin-spam-be-gone": "0.5.3",
|
||||
"nodebb-rewards-essentials": "0.0.11",
|
||||
"nodebb-theme-lavender": "5.0.4",
|
||||
"nodebb-theme-persona": "8.0.4",
|
||||
"nodebb-theme-slick": "1.1.5",
|
||||
"nodebb-theme-vanilla": "9.0.3",
|
||||
"nodebb-widget-essentials": "4.0.2",
|
||||
"nodemailer": "4.4.1",
|
||||
"passport": "^0.4.0",
|
||||
"passport-local": "1.0.0",
|
||||
"pg": "^7.4.0",
|
||||
"pg-cursor": "^2.0.0",
|
||||
"postcss": "7.0.21",
|
||||
"postcss": "6.0.15",
|
||||
"postcss-clean": "1.1.0",
|
||||
"promise-polyfill": "^8.0.0",
|
||||
"promise-polyfill": "^7.0.0",
|
||||
"prompt": "^1.0.0",
|
||||
"redis": "2.8.0",
|
||||
"request": "2.88.0",
|
||||
"rimraf": "3.0.0",
|
||||
"request": "2.83.0",
|
||||
"rimraf": "2.6.2",
|
||||
"rss": "^1.2.2",
|
||||
"sanitize-html": "^1.16.3",
|
||||
"semver": "^7.0.0",
|
||||
"semver": "^5.4.1",
|
||||
"serve-favicon": "^2.4.5",
|
||||
"sharp": "0.23.4",
|
||||
"sitemap": "^5.0.0",
|
||||
"socket.io": "2.3.0",
|
||||
"socket.io-adapter-cluster": "^1.0.1",
|
||||
"socket.io-adapter-mongo": "^2.0.4",
|
||||
"socket.io-adapter-postgres": "^1.2.1",
|
||||
"socket.io-client": "2.3.0",
|
||||
"sitemap": "^1.13.0",
|
||||
"socket.io": "2.0.4",
|
||||
"socket.io-adapter-mongo": "^2.0.1",
|
||||
"socket.io-client": "2.0.4",
|
||||
"socket.io-redis": "5.2.0",
|
||||
"socketio-wildcard": "2.0.0",
|
||||
"spdx-license-list": "^6.0.0",
|
||||
"spider-detector": "2.0.0",
|
||||
"textcomplete": "^0.17.1",
|
||||
"textcomplete.contenteditable": "^0.1.1",
|
||||
"spdx-license-list": "^3.0.1",
|
||||
"spider-detector": "1.0.18",
|
||||
"toobusy-js": "^0.5.1",
|
||||
"uglify-es": "^3.3.9",
|
||||
"validator": "12.1.0",
|
||||
"winston": "3.2.1",
|
||||
"uglify-js": "^3.3.4",
|
||||
"validator": "9.2.0",
|
||||
"winston": "^2.4.0",
|
||||
"xml": "^1.0.1",
|
||||
"xregexp": "^4.1.1",
|
||||
"xregexp": "3.2.0",
|
||||
"zxcvbn": "^4.4.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@commitlint/cli": "8.2.0",
|
||||
"@commitlint/config-angular": "8.2.0",
|
||||
"coveralls": "3.0.9",
|
||||
"eslint": "6.7.0",
|
||||
"eslint-config-airbnb-base": "14.0.0",
|
||||
"eslint-plugin-import": "2.18.2",
|
||||
"grunt": "1.0.4",
|
||||
"grunt-contrib-watch": "1.1.0",
|
||||
"husky": "3.1.0",
|
||||
"jsdom": "15.2.1",
|
||||
"lint-staged": "9.4.2",
|
||||
"mocha": "6.2.2",
|
||||
"mocha-lcov-reporter": "1.3.0",
|
||||
"nyc": "14.1.1",
|
||||
"smtp-server": "3.5.0"
|
||||
"coveralls": "^3.0.0",
|
||||
"eslint": "^4.14.0",
|
||||
"eslint-config-airbnb-base": "^12.1.0",
|
||||
"eslint-plugin-import": "^2.8.0",
|
||||
"grunt": "^1.0.1",
|
||||
"grunt-contrib-watch": "^1.0.0",
|
||||
"jsdom": "^11.5.1",
|
||||
"mocha": "^4.1.0",
|
||||
"mocha-lcov-reporter": "^1.3.0",
|
||||
"nyc": "^11.4.1",
|
||||
"smtp-server": "^3.4.1"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/NodeBB/NodeBB/issues"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
"node": ">=6"
|
||||
},
|
||||
"maintainers": [
|
||||
{
|
||||
|
||||
132
install/web.js
@@ -8,59 +8,36 @@ var path = require('path');
|
||||
var childProcess = require('child_process');
|
||||
var less = require('less');
|
||||
var async = require('async');
|
||||
var uglify = require('uglify-es');
|
||||
var uglify = require('uglify-js');
|
||||
var nconf = require('nconf');
|
||||
var _ = require('lodash');
|
||||
var Benchpress = require('benchpressjs');
|
||||
|
||||
var app = express();
|
||||
var server;
|
||||
|
||||
var formats = [
|
||||
winston.format.colorize(),
|
||||
];
|
||||
|
||||
const timestampFormat = winston.format((info) => {
|
||||
var dateString = new Date().toISOString() + ' [' + 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({
|
||||
winston.add(winston.transports.File, {
|
||||
filename: 'logs/webinstall.log',
|
||||
colorize: true,
|
||||
timestamp: function () {
|
||||
var date = new Date();
|
||||
return date.getDate() + '/' + (date.getMonth() + 1) + ' ' + date.toTimeString().substr(0, 5) + ' [' + global.process.pid + ']';
|
||||
},
|
||||
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 = {};
|
||||
var scripts = [
|
||||
'node_modules/jquery/dist/jquery.js',
|
||||
'public/vendor/xregexp/xregexp.js',
|
||||
'public/vendor/xregexp/unicode/unicode-base.js',
|
||||
'public/src/utils.js',
|
||||
'public/src/installer/install.js',
|
||||
'node_modules/zxcvbn/dist/zxcvbn.js',
|
||||
];
|
||||
|
||||
var installing = false;
|
||||
var success = false;
|
||||
var error = false;
|
||||
var launchUrl;
|
||||
|
||||
web.install = function (port) {
|
||||
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.engine('tpl', function (filepath, options, callback) {
|
||||
@@ -79,7 +56,7 @@ web.install = function (port) {
|
||||
extended: true,
|
||||
}));
|
||||
|
||||
async.parallel([compileLess, compileJS, copyCSS, loadDefaults], function (err) {
|
||||
async.parallel([compileLess, compileJS, copyCSS], function (err) {
|
||||
if (err) {
|
||||
winston.error(err);
|
||||
}
|
||||
@@ -108,7 +85,7 @@ function ping(req, res) {
|
||||
}
|
||||
|
||||
function welcome(req, res) {
|
||||
var dbs = ['redis', 'mongo', 'postgres'];
|
||||
var dbs = ['redis', 'mongo'];
|
||||
var databases = dbs.map(function (databaseName) {
|
||||
var questions = require('../src/database/' + databaseName).questions.filter(function (question) {
|
||||
return question && !question.hideOnWebInstall;
|
||||
@@ -123,58 +100,34 @@ function welcome(req, res) {
|
||||
var defaults = require('./data/defaults');
|
||||
|
||||
res.render('install/index', {
|
||||
url: nconf.get('url') || (req.protocol + '://' + req.get('host')),
|
||||
launchUrl: launchUrl,
|
||||
skipGeneralSetup: !!nconf.get('url'),
|
||||
databases: databases,
|
||||
skipDatabaseSetup: !!nconf.get('database'),
|
||||
error: error,
|
||||
success: success,
|
||||
error: !!res.locals.error,
|
||||
success: !!res.locals.success,
|
||||
values: req.body,
|
||||
minimumPasswordLength: defaults.minimumPasswordLength,
|
||||
minimumPasswordStrength: defaults.minimumPasswordStrength,
|
||||
installing: installing,
|
||||
});
|
||||
}
|
||||
|
||||
function install(req, res) {
|
||||
if (installing) {
|
||||
return welcome(req, res);
|
||||
}
|
||||
req.setTimeout(0);
|
||||
installing = true;
|
||||
var setupEnvVars = nconf.get();
|
||||
var setupEnvVars = _.assign({}, process.env);
|
||||
for (var i in req.body) {
|
||||
if (req.body.hasOwnProperty(i) && !process.env.hasOwnProperty(i)) {
|
||||
setupEnvVars[i.replace(':', '__')] = req.body[i];
|
||||
}
|
||||
}
|
||||
|
||||
// Flatten any objects in setupEnvVars
|
||||
const pushToRoot = function (parentKey, key) {
|
||||
setupEnvVars[parentKey + '__' + key] = setupEnvVars[parentKey][key];
|
||||
};
|
||||
for (var j in setupEnvVars) {
|
||||
if (setupEnvVars.hasOwnProperty(j) && typeof setupEnvVars[j] === 'object' && setupEnvVars[j] !== null && !Array.isArray(setupEnvVars[j])) {
|
||||
Object.keys(setupEnvVars[j]).forEach(pushToRoot.bind(null, j));
|
||||
delete setupEnvVars[j];
|
||||
} else if (Array.isArray(setupEnvVars[j])) {
|
||||
setupEnvVars[j] = JSON.stringify(setupEnvVars[j]);
|
||||
}
|
||||
}
|
||||
|
||||
winston.info('Starting setup process');
|
||||
winston.info(setupEnvVars);
|
||||
launchUrl = setupEnvVars.url;
|
||||
|
||||
var child = require('child_process').fork('app', ['--setup'], {
|
||||
env: setupEnvVars,
|
||||
});
|
||||
|
||||
child.on('close', function (data) {
|
||||
installing = false;
|
||||
success = data === 0;
|
||||
error = data !== 0;
|
||||
if (data === 0) {
|
||||
res.locals.success = true;
|
||||
} else {
|
||||
res.locals.error = true;
|
||||
}
|
||||
|
||||
welcome(req, res);
|
||||
});
|
||||
@@ -183,26 +136,16 @@ function install(req, res) {
|
||||
function launch(req, res) {
|
||||
res.json({});
|
||||
server.close();
|
||||
req.setTimeout(0);
|
||||
var child;
|
||||
|
||||
if (!nconf.get('launchCmd')) {
|
||||
child = childProcess.spawn('node', ['loader.js'], {
|
||||
detached: true,
|
||||
stdio: ['ignore', 'ignore', 'ignore'],
|
||||
});
|
||||
var child = childProcess.spawn('node', ['loader.js'], {
|
||||
detached: true,
|
||||
stdio: ['ignore', 'ignore', 'ignore'],
|
||||
});
|
||||
|
||||
console.log('\nStarting NodeBB');
|
||||
console.log(' "./nodebb stop" to stop the NodeBB server');
|
||||
console.log(' "./nodebb log" to view server output');
|
||||
console.log(' "./nodebb restart" to restart NodeBB');
|
||||
} else {
|
||||
// Use launchCmd instead, if specified
|
||||
child = childProcess.exec(nconf.get('launchCmd'), {
|
||||
detached: true,
|
||||
stdio: ['ignore', 'ignore', 'ignore'],
|
||||
});
|
||||
}
|
||||
console.log('\nStarting NodeBB');
|
||||
console.log(' "./nodebb stop" to stop the NodeBB server');
|
||||
console.log(' "./nodebb log" to view server output');
|
||||
console.log(' "./nodebb restart" to restart NodeBB');
|
||||
|
||||
var filesToDelete = [
|
||||
'installer.css',
|
||||
@@ -278,19 +221,4 @@ function copyCSS(next) {
|
||||
], next);
|
||||
}
|
||||
|
||||
function loadDefaults(next) {
|
||||
var setupDefaultsPath = path.join(__dirname, '../setup.json');
|
||||
fs.access(setupDefaultsPath, fs.constants.F_OK | fs.constants.R_OK, function (err) {
|
||||
if (err) {
|
||||
// setup.json not found or inaccessible, proceed with no defaults
|
||||
return setImmediate(next);
|
||||
}
|
||||
|
||||
winston.info('[installer] Found setup.json, populating default values');
|
||||
nconf.file({
|
||||
file: setupDefaultsPath,
|
||||
});
|
||||
|
||||
next();
|
||||
});
|
||||
}
|
||||
module.exports = web;
|
||||
|
||||
116
loader.js
@@ -7,26 +7,16 @@ var path = require('path');
|
||||
var fork = require('child_process').fork;
|
||||
var async = require('async');
|
||||
var logrotate = require('logrotate-stream');
|
||||
var mkdirp = require('mkdirp');
|
||||
|
||||
var file = require('./src/file');
|
||||
var pkg = require('./package.json');
|
||||
|
||||
var pathToConfig = path.resolve(__dirname, process.env.CONFIG || 'config.json');
|
||||
|
||||
nconf.argv().env().file({
|
||||
file: pathToConfig,
|
||||
file: path.join(__dirname, 'config.json'),
|
||||
});
|
||||
|
||||
var pidFilePath = path.join(__dirname, 'pidfile');
|
||||
|
||||
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 outputLogFilePath = path.join(__dirname, 'logs/output.log');
|
||||
var output = logrotate({ file: outputLogFilePath, size: '1m', keep: 3, compress: true });
|
||||
var silent = nconf.get('silent') === 'false' ? false : nconf.get('silent') !== false;
|
||||
var numProcs;
|
||||
@@ -45,6 +35,7 @@ Loader.init = function (callback) {
|
||||
}
|
||||
|
||||
process.on('SIGHUP', Loader.restart);
|
||||
process.on('SIGUSR2', Loader.reload);
|
||||
process.on('SIGTERM', Loader.stop);
|
||||
callback();
|
||||
};
|
||||
@@ -91,17 +82,9 @@ Loader.addWorkerEvents = function (worker) {
|
||||
console.log('[cluster] Restarting...');
|
||||
Loader.restart();
|
||||
break;
|
||||
case 'pubsub':
|
||||
workers.forEach(function (w) {
|
||||
w.send(message);
|
||||
});
|
||||
break;
|
||||
case 'socket.io':
|
||||
workers.forEach(function (w) {
|
||||
if (w !== worker) {
|
||||
w.send(message);
|
||||
}
|
||||
});
|
||||
case 'reload':
|
||||
console.log('[cluster] Reloading...');
|
||||
Loader.reload();
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -130,7 +113,7 @@ function forkWorker(index, isPrimary) {
|
||||
}
|
||||
|
||||
process.env.isPrimary = isPrimary;
|
||||
process.env.isCluster = nconf.get('isCluster') || ports.length > 1;
|
||||
process.env.isCluster = ports.length > 1;
|
||||
process.env.port = ports[index];
|
||||
|
||||
var worker = fork(appPath, args, {
|
||||
@@ -169,6 +152,7 @@ function getPorts() {
|
||||
Loader.restart = function () {
|
||||
killWorkers();
|
||||
|
||||
var pathToConfig = path.join(__dirname, '/config.json');
|
||||
nconf.remove('file');
|
||||
nconf.use('file', { file: pathToConfig });
|
||||
|
||||
@@ -191,6 +175,14 @@ Loader.restart = function () {
|
||||
});
|
||||
};
|
||||
|
||||
Loader.reload = function () {
|
||||
workers.forEach(function (worker) {
|
||||
worker.send({
|
||||
action: 'reload',
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
Loader.stop = function () {
|
||||
killWorkers();
|
||||
|
||||
@@ -207,41 +199,53 @@ function killWorkers() {
|
||||
});
|
||||
}
|
||||
|
||||
fs.open(pathToConfig, 'r', function (err) {
|
||||
if (err) {
|
||||
// No config detected, kickstart web installer
|
||||
fork('app');
|
||||
return;
|
||||
}
|
||||
|
||||
if (nconf.get('daemon') !== 'false' && nconf.get('daemon') !== false) {
|
||||
if (file.existsSync(pidFilePath)) {
|
||||
Loader.notifyWorkers = function (msg, worker_pid) {
|
||||
worker_pid = parseInt(worker_pid, 10);
|
||||
workers.forEach(function (worker) {
|
||||
if (parseInt(worker.pid, 10) !== worker_pid) {
|
||||
try {
|
||||
var pid = fs.readFileSync(pidFilePath, { encoding: 'utf-8' });
|
||||
process.kill(pid, 0);
|
||||
process.exit();
|
||||
worker.send(msg);
|
||||
} 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(path.join(__dirname, 'config.json'), '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');
|
||||
}
|
||||
});
|
||||
|
||||
@@ -1 +1 @@
|
||||
@echo off && cd %~dp0 && node ./nodebb %*
|
||||
@echo off && cd %~dp0 && node ./src/cli %*
|
||||
|
||||
BIN
public/images/emails/banneduser.png
Normal file
|
After Width: | Height: | Size: 6.1 KiB |
BIN
public/images/emails/digestheader.jpg
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
public/images/emails/emailconfirm.png
Normal file
|
After Width: | Height: | Size: 4.6 KiB |
BIN
public/images/emails/invitation.png
Normal file
|
After Width: | Height: | Size: 4.7 KiB |
BIN
public/images/emails/newtopic.png
Normal file
|
After Width: | Height: | Size: 4.9 KiB |
BIN
public/images/emails/nodebb.png
Normal file
|
After Width: | Height: | Size: 4.1 KiB |
BIN
public/images/emails/notification.png
Normal file
|
After Width: | Height: | Size: 4.6 KiB |
BIN
public/images/emails/password.png
Normal file
|
After Width: | Height: | Size: 4.9 KiB |
BIN
public/images/emails/triangularbackground.png
Normal file
|
After Width: | Height: | Size: 47 KiB |
BIN
public/images/emails/unreadpost.png
Normal file
|
After Width: | Height: | Size: 3.6 KiB |
@@ -1,3 +1,7 @@
|
||||
/*
|
||||
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;
|
||||
}
|
||||
@@ -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
@@ -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.
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"alert.confirm-rebuild-and-restart": "هل أنت متأكد إنك تريد إعادة بناء وتشغيل الـ NodeBB؟",
|
||||
"alert.confirm-reload": "هل تريد بالتأكيد إعادة تحميل NodeBB؟",
|
||||
"alert.confirm-restart": "هل تريد بالتأكيد إعادة تشغيل NodeBB؟",
|
||||
|
||||
"acp-title": "لوحة تحكم إدارة NodeBB | %1",
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"posts-in-cache": "المشاركات المخزنة مؤقتاً",
|
||||
"average-post-size": "متوسط حجم المشاركة",
|
||||
"length-to-max": "الطول / أقصى حد",
|
||||
"percent-full": "1% كاملة",
|
||||
"percent-full": "%1% Full",
|
||||
"post-cache-size": "حجم التخزين المؤقت للمشاركات",
|
||||
"items-in-cache": "العناصر في التخزين المؤقت",
|
||||
"control-panel": "لوحة التحكم",
|
||||
|
||||
@@ -18,17 +18,10 @@
|
||||
"mongo.resident-memory": "Resident Memory",
|
||||
"mongo.virtual-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.unauthorized": "NodeBB was unable to query the MongoDB database for relevant statistics. Please ensure that the user in use by NodeBB contains the "clusterMonitor" role for the "admin" database.",
|
||||
|
||||
"redis": "Redis",
|
||||
"redis.version": "Redis Version",
|
||||
"redis.keys": "Keys",
|
||||
"redis.expires": "Expires",
|
||||
"redis.avg-ttl": "Average TTL",
|
||||
"redis.connected-clients": "Connected Clients",
|
||||
"redis.connected-slaves": "Connected Slaves",
|
||||
"redis.blocked-clients": "Blocked Clients",
|
||||
@@ -37,16 +30,7 @@
|
||||
"redis.total-connections-recieved": "إجمالي الاتصالات المستلمة",
|
||||
"redis.total-commands-processed": "إجمالي الأوامر التي تمت معالجتها",
|
||||
"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-misses": "Keyspace Misses",
|
||||
"redis.raw-info": "Redis Raw Info",
|
||||
|
||||
"postgres": "Postgres",
|
||||
"postgres.version": "PostgreSQL Version",
|
||||
"postgres.raw-info": "Postgres Raw Info"
|
||||
"redis.raw-info": "Redis Raw Info"
|
||||
}
|
||||
@@ -2,10 +2,5 @@
|
||||
"events": "أحداث",
|
||||
"no-events": "لا توجد أحداث",
|
||||
"control-panel": "لوحة تحكم الأحداث",
|
||||
"filters": "Filters",
|
||||
"filters-apply": "Apply Filters",
|
||||
"filter-type": "Event Type",
|
||||
"filter-start": "Start Date",
|
||||
"filter-end": "End Date",
|
||||
"filter-perPage": "Per Page"
|
||||
"delete-events": "حذف الأحداث"
|
||||
}
|
||||
@@ -8,7 +8,7 @@
|
||||
"custom-js.enable": "تفعيل Javascript المخصصة",
|
||||
|
||||
"custom-header": "ترويسة مخصصة",
|
||||
"custom-header.description": "Enter custom HTML here (ex. Meta Tags, etc.), which will be appended to the <code><head></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><head></code> في تصميم المنتدى. يسمح باستخدام علامات النص البرمجي، ولكن سيتم تعطيلها؛ لتوفر تبويبة\n<a href=\"#custom-header\" data-toggle=\"tab\">Javascript المخصصة</a>",
|
||||
"custom-header.enable": "تفعيل الترويسة المخصصة",
|
||||
|
||||
"custom-css.livereload": "تفعيل إعادة التحميل المباشرة",
|
||||
|
||||
@@ -7,5 +7,5 @@
|
||||
"revert-confirm": "هل أنت متأكد من أنك ترغب في استعادة قااب NodeBB الافتراضي؟",
|
||||
"theme-changed": "تم تغيير القالب",
|
||||
"revert-success": "لقد قمت بنجاح بإستعادة القالب الأساسي لـNodeBB",
|
||||
"restart-to-activate": "Please rebuild and restart your NodeBB to fully activate this theme."
|
||||
"restart-to-activate": "الرجاء إعادة تشغيل NodeBB لتنشيط هذا القالب بشكل كامل"
|
||||
}
|
||||
@@ -7,8 +7,7 @@
|
||||
"online": "online",
|
||||
"git": "git",
|
||||
"memory": "memory",
|
||||
"load": "system load",
|
||||
"cpu-usage": "cpu usage",
|
||||
"load": "load",
|
||||
"uptime": "uptime",
|
||||
|
||||
"registered": "Registered",
|
||||
|
||||
@@ -9,7 +9,6 @@
|
||||
|
||||
"plugin-search": "البحث عن الإضافات",
|
||||
"plugin-search-placeholder": "جاري البحث عن الإضافات...",
|
||||
"submit-anonymous-usage": "Submit anonymous plugin usage data.",
|
||||
"reorder-plugins": "إعادة ترتيب الإضافات",
|
||||
"order-active": "ترتيب الإضافات المفعلة",
|
||||
"dev-interested": "هل انته مهتم ببرمجة إضافات لـNodeBB؟",
|
||||
@@ -30,8 +29,6 @@
|
||||
"plugin-item.more-info": "لمزيد من المعلومات:",
|
||||
"plugin-item.unknown": "غير معروف",
|
||||
"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.disabled": "الإضافة معطلة",
|
||||
@@ -40,15 +37,13 @@
|
||||
"alert.uninstalled": "تم إلغاء تنصيب الإضافة",
|
||||
"alert.activate-success": "يرجى إعادة تشغيل NodeBB لتنشيط الإضافة بشكل بالكامل",
|
||||
"alert.deactivate-success": "تم تعطيل الإضافة بنجاح",
|
||||
"alert.upgrade-success": "Please rebuild and restart your NodeBB to fully upgrade this plugin.",
|
||||
"alert.upgrade-success": "يرجى إعادة تحميل NodeBB لترقية هذه الإضافة بشكل كامل",
|
||||
"alert.install-success": "تم تثبيت الإضافة بنجاح، يرجى تفعيلها.",
|
||||
"alert.uninstall-success": "تم تعطيل الإضافة وإلغاء تنصيبها بنجاح.",
|
||||
"alert.suggest-error": "<p>NodeBB could not reach the package manager, proceed with installation of latest version?</p><div class=\"alert alert-danger\"><strong>Server returned (%1)</strong>: %2</div>",
|
||||
"alert.package-manager-unreachable": "<p>NodeBB could not reach the package manager, an upgrade is not suggested at this time.</p>",
|
||||
"alert.incompatible": "<p>Your version of NodeBB (v%1) is only cleared to upgrade to v%2 of this plugin. Please update your NodeBB if you wish to install a newer version of this plugin.</p>",
|
||||
"alert.possibly-incompatible": "<div class=\"alert alert-warning\"><p><strong>No Compatibility Information Found</strong></p><p>This plugin did not specify a specific version for installation given your NodeBB version. Full compatibility cannot be guaranteed, and may cause your NodeBB to no longer start properly.</p></div><p>In the event that NodeBB cannot boot properly:</p><pre><code>$ ./nodebb reset plugin=\"%1\"</code></pre><p>Continue installation of latest version of this plugin?</p>",
|
||||
"alert.reorder": "Plugins Re-ordered",
|
||||
"alert.reorder-success": "Please rebuild and restart your NodeBB to fully complete the process.",
|
||||
|
||||
"license.title": "معلومات ترخيص الإضافة",
|
||||
"license.intro": "The plugin <strong>%1</strong> is licensed under the %2. Please read and understand the license terms prior to activating this plugin.",
|
||||
|
||||
@@ -18,13 +18,5 @@
|
||||
"alert.update-success": "Successfully updated widgets",
|
||||
"alert.clone-success": "Successfully cloned widgets",
|
||||
|
||||
"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"
|
||||
"error.select-clone": "Please select a page to clone from"
|
||||
}
|
||||
@@ -2,7 +2,7 @@
|
||||
"forum-traffic": "Forum Traffic",
|
||||
"page-views": "مشاهدات الصفحات",
|
||||
"unique-visitors": "زائرين فريدين",
|
||||
"new-users": "New Users",
|
||||
"users": "أعضاء",
|
||||
"posts": "مشاركات",
|
||||
"topics": "مواضيع",
|
||||
"page-views-seven": "آخر 7 ايام",
|
||||
@@ -14,23 +14,19 @@
|
||||
"page-views-custom-help": "أدخل نطاقا زمنيا لمرات مشاهدة الصفحات التي ترغب في عرضها. إذا لم يظهر منتقي التاريخ، فإن التنسيق المقبول هو <code>YYYY-MM-DD</code>",
|
||||
"page-views-custom-error": "الرجاء إدخال نطاق تاريخ صالح بالتنسيق <code>YYYY-MM-DD</code>",
|
||||
|
||||
"stats.yesterday": "Yesterday",
|
||||
"stats.today": "Today",
|
||||
"stats.last-week": "Last Week",
|
||||
"stats.this-week": "This Week",
|
||||
"stats.last-month": "Last Month",
|
||||
"stats.this-month": "This Month",
|
||||
"stats.day": "يوم",
|
||||
"stats.week": "إسبوع",
|
||||
"stats.month": "شهر",
|
||||
"stats.all": "كل الوقت",
|
||||
|
||||
"updates": "تحديثات",
|
||||
"running-version": "المنتدى يعمل حاليا على <strong>NodeBB الإصدار<span id=\"version\">%1</span></strong>.",
|
||||
"keep-updated": "تأكد دائما من أن NodeBB يعمل على احدث إصدار للحصول على أحدث التصحيحات الأمنية وإصلاحات الأخطاء.",
|
||||
"up-to-date": "<p>المنتدى <strong>يعمل على أحدث إصدار</strong> <i class=\"fa fa-check\"></i></p>",
|
||||
"upgrade-available": "<p>A new version (v%1) has been released. Consider <a href=\"https://docs.nodebb.org/configuring/upgrade/\" target=\"_blank\">upgrading your NodeBB</a>.</p>",
|
||||
"prerelease-upgrade-available": "<p>This is an outdated pre-release version of NodeBB. A new version (v%1) has been released. Consider <a href=\"https://docs.nodebb.org/configuring/upgrade/\" target=\"_blank\">upgrading your NodeBB</a>.</p>",
|
||||
"upgrade-available": "<p>نسخة جديدة (الإصدار %1) تم إصدارها. خذ بعين الاعتبار <a href=\"https://docs.nodebb.org/configuring/upgrade/\">ترقية NodeBB الخاص بك</a>.</p>",
|
||||
"prerelease-upgrade-available": "<p>نسخة ما قبل الإصدار من NodeBB هذه قديمة. إصدار أحدث (الإصدار %1) تم إصداره. خذ بعين الاعتبار <a href=\"https://docs.nodebb.org/configuring/upgrade/\">ترقية NodeBB الخاص بك</a>.</p>",
|
||||
"prerelease-warning": "<p>هذه نسخة <strong>ماقبل الإصدار</strong> من NodeBB. قد تحدث أخطاء غير مقصودة. <i class=\"fa fa-exclamation-triangle\"></i></p>",
|
||||
"running-in-development": "المنتدى قيد التشغيل في وضع \"المطورين\". وقد تكون هناك ثغرات أمنية مفتوحة؛ من فضلك تواصل مع مسؤول نظامك.",
|
||||
"latest-lookup-failed": "<p>Failed to look up latest available version of NodeBB</p>",
|
||||
|
||||
"notices": "إشعارات",
|
||||
"restart-not-required": "إعادة التشغيل غير مطلوب",
|
||||
@@ -40,8 +36,8 @@
|
||||
"search-plugin-tooltip": "نصب إضافة البحث من صفحة الإضافات البرمجية لتنشيط وظيفة البحث",
|
||||
|
||||
"control-panel": "التحكم بالنظام",
|
||||
"rebuild-and-restart": "Rebuild & Restart",
|
||||
"restart": "Restart",
|
||||
"reload": "Restart",
|
||||
"restart": "Rebuild & Restart",
|
||||
"restart-warning": "Rebuilding or Restarting your NodeBB will drop all existing connections for a few seconds.",
|
||||
"restart-disabled": "Rebuilding and Restarting your NodeBB has been disabled as you do not seem to be running it via the appropriate daemon.",
|
||||
"maintenance-mode": "وضع الصيانة",
|
||||
@@ -68,12 +64,7 @@
|
||||
"high-presence-topics": "مواضيع ذات حضور قوي",
|
||||
|
||||
"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.registered-users": "مستخدمين مسجلين",
|
||||
"graphs.anonymous-users": "مستخدمين مجهولين",
|
||||
"last-restarted-by": "Last restarted by",
|
||||
"no-users-browsing": "No users browsing"
|
||||
"graphs.anonymous-users": "مستخدمين مجهولين"
|
||||
}
|
||||
|
||||
@@ -5,11 +5,13 @@
|
||||
"tooltip": "Tooltip:",
|
||||
"text": "Text:",
|
||||
"text-class": "Text Class: <small>optional</small>",
|
||||
"class": "Class: <small>optional</small>",
|
||||
"id": "ID: <small>optional</small>",
|
||||
|
||||
"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",
|
||||
|
||||
"btn.delete": "Delete",
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
{
|
||||
"administrators": "Administrators",
|
||||
"global-moderators": "Global Moderators",
|
||||
"no-global-moderators": "No Global Moderators",
|
||||
"moderators-of-category": "%1 Moderators",
|
||||
"no-moderators": "No Moderators",
|
||||
"add-administrator": "Add Administrator",
|
||||
"add-global-moderator": "Add Global Moderator",
|
||||
"add-moderator": "Add Moderator"
|
||||
}
|
||||
@@ -17,10 +17,8 @@
|
||||
"parent-category": "Parent Category",
|
||||
"optional-parent-category": "(Optional) Parent Category",
|
||||
"parent-category-none": "(None)",
|
||||
"copy-parent": "Copy Parent",
|
||||
"copy-settings": "Copy Settings From",
|
||||
"optional-clone-settings": "(Optional) Clone Settings From Category",
|
||||
"clone-children": "Clone Children Categories And Settings",
|
||||
"purge": "Purge Category",
|
||||
|
||||
"enable": "Enable",
|
||||
@@ -30,13 +28,11 @@
|
||||
"select-category": "Select 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.category-selector": "Configuring privileges for ",
|
||||
"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.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-posting": "Posting Privileges",
|
||||
"privileges.section-moderation": "Moderation Privileges",
|
||||
"privileges.section-other": "Other",
|
||||
"privileges.section-user": "User",
|
||||
"privileges.search-user": "Add User",
|
||||
"privileges.no-users": "No user-specific privileges in this category.",
|
||||
@@ -45,12 +41,7 @@
|
||||
"privileges.search-group": "Add Group",
|
||||
"privileges.copy-to-children": "Copy to Children",
|
||||
"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.copy-success": "Privileges copied!",
|
||||
|
||||
"analytics.back": "Back to Categories List",
|
||||
"analytics.title": "Analytics for \"%1\" category",
|
||||
@@ -76,6 +67,5 @@
|
||||
"alert.find-group": "Find a Group",
|
||||
"alert.group-search": "Search for a group here...",
|
||||
"collapse-all": "Collapse All",
|
||||
"expand-all": "Expand All",
|
||||
"disable-on-create": "Disable on create"
|
||||
"expand-all": "Expand All"
|
||||
}
|
||||
@@ -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: "<strong>%1</strong>"",
|
||||
"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"
|
||||
}
|
||||
@@ -1,12 +1,8 @@
|
||||
{
|
||||
"name": "اسم المجموعة",
|
||||
"badge": "Badge",
|
||||
"properties": "Properties",
|
||||
"description": "Group Description",
|
||||
"member-count": "Member Count",
|
||||
"system": "System",
|
||||
"hidden": "Hidden",
|
||||
"private": "Private",
|
||||
"system": "System Group",
|
||||
"edit": "Edit",
|
||||
"search-placeholder": "Search",
|
||||
"create": "Create Group",
|
||||
@@ -21,12 +17,10 @@
|
||||
"edit.user-title": "Title of Members",
|
||||
"edit.icon": "Group Icon",
|
||||
"edit.label-color": "Group Label Color",
|
||||
"edit.text-color": "Group Text Color",
|
||||
"edit.show-badge": "Show Badge",
|
||||
"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.disable-join": "Disable join requests",
|
||||
"edit.disable-leave": "Disallow users from leaving the group",
|
||||
"edit.disable-requests": "Disable join requests",
|
||||
"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.add-user": "Add User to Group",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"post-queue": "Post Queue",
|
||||
"description": "There are no posts in the post queue. <br> To enable this feature, go to <a href=\"%1\">Settings → Post → 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 → Post → Posting Restrictions</a> and enable <strong>Post Queue</strong>.",
|
||||
"user": "User",
|
||||
"category": "Category",
|
||||
"title": "Title",
|
||||
|
||||
@@ -1,35 +0,0 @@
|
||||
{
|
||||
"global": "Global",
|
||||
"global.no-users": "No user-specific global privileges.",
|
||||
"group-privileges": "Group Privileges",
|
||||
"user-privileges": "User Privileges",
|
||||
"chat": "Chat",
|
||||
"upload-images": "Upload Images",
|
||||
"upload-files": "Upload Files",
|
||||
"signature": "Signature",
|
||||
"ban": "Ban",
|
||||
"search-content": "Search Content",
|
||||
"search-users": "Search Users",
|
||||
"search-tags": "Search Tags",
|
||||
"view-users": "View Users",
|
||||
"view-tags": "View Tags",
|
||||
"view-groups": "View Groups",
|
||||
"allow-local-login": "Local Login",
|
||||
"allow-group-creation": "Group Create",
|
||||
"view-users-info": "View Users Info",
|
||||
"find-category": "Find Category",
|
||||
"access-category": "Access Category",
|
||||
"access-topics": "Access Topics",
|
||||
"create-topics": "Create Topics",
|
||||
"reply-to-topics": "Reply to Topics",
|
||||
"tag-topics": "Tag Topics",
|
||||
"edit-posts": "Edit Posts",
|
||||
"view-edit-history": "View Edit History",
|
||||
"delete-posts": "Delete Posts",
|
||||
"view_deleted": "View Deleted Posts",
|
||||
"upvote-posts": "Upvote Posts",
|
||||
"downvote-posts": "Downvote Posts",
|
||||
"delete-topics": "Delete Topics",
|
||||
"purge": "Purge",
|
||||
"moderate": "Moderate"
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
@@ -6,7 +6,6 @@
|
||||
"validate-email": "Validate Email",
|
||||
"send-validation-email": "Send Validation Email",
|
||||
"password-reset-email": "Send Password Reset Email",
|
||||
"force-password-reset": "Force Password Reset & Log User Out",
|
||||
"ban": "Ban User(s)",
|
||||
"temp-ban": "Ban User(s) Temporarily",
|
||||
"unban": "Unban User(s)",
|
||||
@@ -15,8 +14,6 @@
|
||||
"delete": "Delete User(s)",
|
||||
"purge": "Delete User(s) and Content",
|
||||
"download-csv": "Download CSV",
|
||||
"manage-groups": "Manage Groups",
|
||||
"add-group": "Add Group",
|
||||
"invite": "Invite",
|
||||
"new": "New User",
|
||||
|
||||
@@ -30,11 +27,6 @@
|
||||
"pills.banned": "Banned",
|
||||
"pills.search": "User Search",
|
||||
|
||||
"50-per-page": "50 per page",
|
||||
"100-per-page": "100 per page",
|
||||
"250-per-page": "250 per page",
|
||||
"500-per-page": "500 per page",
|
||||
|
||||
"search.uid": "By User ID",
|
||||
"search.uid-placeholder": "Enter a user ID to search",
|
||||
"search.username": "By User Name",
|
||||
@@ -89,9 +81,7 @@
|
||||
"alerts.confirm-remove-moderator": "Do you really want to remove this 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-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-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.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!",
|
||||
@@ -103,7 +93,7 @@
|
||||
"alerts.error-x": "<strong>Error</strong><p>%1</p>",
|
||||
"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.x-users-found": "%1 user(s) found! Search took %2 ms."
|
||||
}
|
||||
@@ -18,7 +18,6 @@
|
||||
"manage/groups": "المجموعات",
|
||||
"manage/ip-blacklist": "قائمة حظر عناوين IP",
|
||||
"manage/uploads": "Uploads",
|
||||
"manage/digest": "Digests",
|
||||
|
||||
"section-settings": "إعدادات",
|
||||
"settings/general": "عامة",
|
||||
@@ -58,14 +57,13 @@
|
||||
"section-advanced": "Advanced",
|
||||
"advanced/database": "Database",
|
||||
"advanced/events": "Events",
|
||||
"advanced/hooks": "Hooks",
|
||||
"advanced/logs": "Logs",
|
||||
"advanced/errors": "Errors",
|
||||
"advanced/cache": "Cache",
|
||||
"development/logger": "Logger",
|
||||
"development/info": "Info",
|
||||
|
||||
"rebuild-and-restart-forum": "Rebuild & Restart Forum",
|
||||
"reload-forum": "Reload Forum",
|
||||
"restart-forum": "Restart Forum",
|
||||
"logout": "Log out",
|
||||
"view-forum": "View Forum",
|
||||
@@ -76,8 +74,5 @@
|
||||
"search.keep-typing": "Type more to see results...",
|
||||
"search.start-typing": "Start typing to see results...",
|
||||
|
||||
"connection-lost": "Connection to %1 has been lost, attempting to reconnect...",
|
||||
|
||||
"alerts.version": "Running <strong>NodeBB v%1</strong>",
|
||||
"alerts.upgrade": "Upgrade to v%1"
|
||||
"connection-lost": "Connection to %1 has been lost, attempting to reconnect..."
|
||||
}
|
||||
@@ -1,23 +1,14 @@
|
||||
{
|
||||
"maintenance-mode": "Maintenance Mode",
|
||||
"maintenance-mode.help": "When the forum is in maintenance mode, all requests will be redirected to a static holding page. Administrators are exempt from this redirection, and are able to access the site normally.",
|
||||
"maintenance-mode.status": "Maintenance Mode Status Code",
|
||||
"maintenance-mode.message": "Maintenance Message",
|
||||
"headers": "Headers",
|
||||
"headers.allow-from": "Set ALLOW-FROM to Place NodeBB in an iFrame",
|
||||
"headers.powered-by": "Customise the \"Powered By\" header sent by NodeBB",
|
||||
"headers.acao": "Access-Control-Allow-Origin",
|
||||
"headers.acao-regex": "Access-Control-Allow-Origin Regular Expression",
|
||||
"headers.acao-help": "To deny access to all sites, leave empty",
|
||||
"headers.acao-regex-help": "Enter regular expressions here to match dynamic origins. To deny access to all sites, leave empty",
|
||||
"headers.acac": "Access-Control-Allow-Credentials",
|
||||
"headers.acam": "Access-Control-Allow-Methods",
|
||||
"headers.acah": "Access-Control-Allow-Headers",
|
||||
"hsts": "Strict Transport Security",
|
||||
"hsts.enabled": "Enabled HSTS (recommended)",
|
||||
"hsts.subdomains": "Include subdomains in HSTS header",
|
||||
"hsts.preload": "Allow preloading of HSTS header",
|
||||
"hsts.help": "If enabled, an HSTS header will be set for this site. You can elect to include subdomains and preloading flags in your header. If in doubt, you can leave these unchecked. <a href=\"%1\">More information <i class=\"fa fa-external-link\"></i></a>",
|
||||
"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.enable": "Enable Traffic Management",
|
||||
|
||||
@@ -6,6 +6,6 @@
|
||||
"max-length": "Maximum length of chat messages",
|
||||
"max-room-size": "Maximum number of users in chat rooms",
|
||||
"delay": "Time between chat messages in milliseconds",
|
||||
"restrictions.seconds-edit-after": "Number of seconds a chat message will remain editable. (0 disabled)",
|
||||
"restrictions.seconds-delete-after": "Number of seconds a chat message will remain deletable. (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 before users are allowed to delete chat messages after posting. (0 disabled)"
|
||||
}
|
||||
@@ -4,7 +4,6 @@
|
||||
"consent.message": "Notification message",
|
||||
"consent.acceptance": "Acceptance message",
|
||||
"consent.link-text": "Policy Link Text",
|
||||
"consent.link-url": "Policy Link URL",
|
||||
"consent.blank-localised-default": "Leave blank to use NodeBB localised defaults",
|
||||
"settings": "Settings",
|
||||
"cookie-domain": "Session cookie domain",
|
||||
|
||||
@@ -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.",
|
||||
"from": "From Name",
|
||||
"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.enabled": "Use an external email server to send emails",
|
||||
@@ -33,8 +30,8 @@
|
||||
"testing.select": "Select Email Template",
|
||||
"testing.send": "Send Test Email",
|
||||
"testing.send-help": "The test email will be sent to the currently logged in user's email address.",
|
||||
"subscriptions": "Email Digests",
|
||||
"subscriptions.disable": "Disable email digests",
|
||||
"subscriptions": "Email Subscriptions",
|
||||
"subscriptions.disable": "Disable subscriber notification emails",
|
||||
"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>"
|
||||
}
|
||||
@@ -3,9 +3,9 @@
|
||||
"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.warning": "<strong>Beware!</strong> If this option is disabled and you have private groups, they automatically become public.",
|
||||
"allow-multiple-badges-help": "This flag can be used to allow users to select multiple group badges, requires theme support.",
|
||||
"allow-creation": "Allow Group Creation",
|
||||
"allow-creation-help": "If enabled, users can create groups <em>(Default: disabled)</em>",
|
||||
"max-name-length": "Maximum Group Name Length",
|
||||
"max-title-length": "Maximum Group Title Length",
|
||||
"cover-image": "Group Cover Image",
|
||||
"default-cover": "Default Cover Images",
|
||||
"default-cover-help": "Add comma-separated default cover images for groups that don't have an uploaded cover image"
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
{
|
||||
"handles": "Guest Handles",
|
||||
"handles.enabled": "Allow guest handles",
|
||||
"handles.enabled-help": "This option exposes a new field that allows guests to pick a name to associate with each post they make. If disabled, they will simply be called \"Guest\""
|
||||
"handles.enabled-help": "This option exposes a new field that allows guests to pick a name to associate with each post they make. If disabled, they will simply be called \"Guest\"",
|
||||
"privileges": "Guest Privileges",
|
||||
"privileges.can-search": "Allow guests to search without logging in",
|
||||
"privileges.can-search-users": "Allow guests to search users without logging in"
|
||||
}
|
||||
@@ -2,6 +2,5 @@
|
||||
"notifications": "Notifications",
|
||||
"welcome-notification": "Welcome Notification",
|
||||
"welcome-notification-link": "Welcome Notification Link",
|
||||
"welcome-notification-uid": "Welcome Notification User (UID)",
|
||||
"notification-alert-timeout": "Notification Alert Timeout"
|
||||
"welcome-notification-uid": "Welcome Notification User (UID)"
|
||||
}
|
||||
@@ -6,5 +6,6 @@
|
||||
"max-posts-per-page": "Maximum posts per page",
|
||||
"categories": "Category Pagination",
|
||||
"topics-per-page": "Topics per Page",
|
||||
"max-topics-per-page": "Maximum topics per page"
|
||||
"max-topics-per-page": "Maximum topics per page",
|
||||
"initial-num-load": "Initial Number of Topics to Load on Unread, Recent, and Popular"
|
||||
}
|
||||
@@ -7,22 +7,19 @@
|
||||
"sorting.most-posts": "Most Posts",
|
||||
"sorting.topic-default": "Default Topic Sorting",
|
||||
"length": "Post Length",
|
||||
"post-queue": "Post Queue",
|
||||
"restrictions": "Posting Restrictions",
|
||||
"restrictions-new": "New User Restrictions",
|
||||
"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.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.seconds-between": "Number of seconds between posts",
|
||||
"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.seconds-between": "Seconds between posts",
|
||||
"restrictions.seconds-between-new": "Seconds between posts for new users",
|
||||
"restrictions.rep-threshold": "Reputation threshold before these restrictions are lifted",
|
||||
"restrictions.seconds-before-new": "Seconds before a new user can make their first post",
|
||||
"restrictions.seconds-edit-after": "Number of seconds a post remains editable (set to 0 to disable)",
|
||||
"restrictions.seconds-delete-after": "Number of seconds a post remains deletable (set to 0 to disable)",
|
||||
"restrictions.replies-no-delete": "Number of replies after users are disallowed to delete their own topics (set to 0 to disable)",
|
||||
"restrictions.seconds-defore-new": "Seconds before new user can post",
|
||||
"restrictions.seconds-edit-after": "Number of seconds before users are allowed to edit posts after posting. (0 disabled)",
|
||||
"restrictions.seconds-delete-after": "Number of seconds before users are allowed to delete posts after posting. (0 disabled)",
|
||||
"restrictions.replies-no-delete": "Number of replies after users are disallowed to delete their own topics. (0 disabled)",
|
||||
"restrictions.min-title-length": "Minimum Title Length",
|
||||
"restrictions.max-title-length": "Maximum Title Length",
|
||||
"restrictions.min-post-length": "Minimum Post Length",
|
||||
@@ -32,8 +29,6 @@
|
||||
"timestamp": "Timestamp",
|
||||
"timestamp.cut-off": "Date cut-off (in days)",
|
||||
"timestamp.cut-off-help": "Dates & times will be shown in a relative manner (e.g. \"3 hours ago\" / \"5 days ago\"), and localised into various\n\t\t\t\t\tlanguages. After a certain point, this text can be switched to display the localised date itself\n\t\t\t\t\t(e.g. 5 Nov 2016 15:30).<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.last-post": "Last – Show the latest post, including the original post, if no replies",
|
||||
"teaser.last-reply": "Last – Show the latest reply, or a \"No replies\" placeholder if no replies",
|
||||
|
||||
@@ -8,7 +8,5 @@
|
||||
"min-rep-flag": "Minimum reputation to flag posts",
|
||||
"min-rep-website": "Minimum reputation to add \"Website\" to user profile",
|
||||
"min-rep-aboutme": "Minimum reputation to add \"About me\" to user profile",
|
||||
"min-rep-signature": "Minimum reputation to add \"Signature\" to user profile",
|
||||
"min-rep-profile-picture": "Minimum reputation to add \"Profile Picture\" to user profile",
|
||||
"min-rep-cover-picture": "Minimum reputation to add \"Cover Picture\" to user profile"
|
||||
"min-rep-signature": "Minimum reputation to add \"Signature\" to user profile"
|
||||
}
|
||||
@@ -5,6 +5,8 @@
|
||||
"min-length": "Minimum Tag Length",
|
||||
"max-length": "Maximum Tag Length",
|
||||
"goto-manage": "Click here to visit the tag management page.",
|
||||
"privacy": "Privacy",
|
||||
"list-private": "Make the tags list private",
|
||||
"related-topics": "Related Topics",
|
||||
"max-related-topics": "Maximum related topics to display (if supported by theme)"
|
||||
}
|
||||
@@ -2,21 +2,10 @@
|
||||
"posts": "المشاركات",
|
||||
"allow-files": "السماح للأعضاء بتحميل الملفات الإعتيادية",
|
||||
"private": "جعل الملفات التي تم رفعها خاصة",
|
||||
"strip-exif-data": "Strip EXIF Data",
|
||||
"private-extensions": "File extensions to make private",
|
||||
"private-uploads-extensions-help": "Enter comma-separated list of file extensions to make private here (e.g. <code>pdf,xls,doc</code>). An empty list means all files are private.",
|
||||
"resize-image-width-threshold": "Resize images if they are wider than specified width",
|
||||
"resize-image-width-threshold-help": "(in pixels, default: 1520 pixels, set to 0 to disable)",
|
||||
"resize-image-width": "Resize images down to specified width",
|
||||
"resize-image-width-help": "(in pixels, default: 760 pixels, set to 0 to disable)",
|
||||
"resize-image-quality": "Quality to use when resizing images",
|
||||
"resize-image-quality-help": "Use a lower quality setting to reduce the file size of resized images.",
|
||||
"max-image-width": "تغيير حجم الصور إلى عرض محدد (بالبكسل)",
|
||||
"max-image-width-help": "(بالبكسل، الافتراضي: 760 بكسل، ضع إلى 0 لتعطيل الخاصية)",
|
||||
"max-file-size": "الحد الأقصى لحجم الملف (بالكيبيبايت)",
|
||||
"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": "السماح للاعضاء برفع الصور المصغرة للموضوع",
|
||||
"topic-thumb-size": "حجم الصورة المصغرة للموضوع",
|
||||
"allowed-file-extensions": "إمتدادات الملفات المسموح بها",
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
{
|
||||
"authentication": "المصادقة",
|
||||
"allow-local-login": "السماح بتسجيل الدخول المحلي",
|
||||
"require-email-confirmation": "يطلب تأكيد البريد الإلكتروني",
|
||||
"email-confirm-interval": "لا يمكن للمستخدم إعادة إرسال رسالة تأكيد البريد الالكتروني حتى مرور",
|
||||
"email-confirm-email2": "دقائق",
|
||||
@@ -8,12 +9,11 @@
|
||||
"allow-login-with.username": "اسم المستخدم فقط",
|
||||
"allow-login-with.email": "البريد الالكتروني فقط",
|
||||
"account-settings": "إعدادت الحساب",
|
||||
"gdpr_enabled": "Enable GDPR consent collection",
|
||||
"gdpr_enabled_help": "When enabled, all new registrants will be required to explicitly give consent for data collection and usage under the <a href=\"https://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-email-changes": "عدم السماح بتغيير البريد الالكتروني",
|
||||
"disable-password-changes": "عدم السماح بتغيير كلمة المرور",
|
||||
"allow-account-deletion": "السماح بحذف الحساب",
|
||||
"user-info-private": "إخفاء قائمة المستخدم والبيانات عن الزوار",
|
||||
"hide-fullname": "إخفاء الإسم الكامل عن المستخدمين",
|
||||
"hide-email": "إخفاء البريد الإلكتروني عن المستخدمين",
|
||||
"themes": "القوالب",
|
||||
@@ -26,23 +26,15 @@
|
||||
"lockout-duration": "مدة تأمين الحساب (دقائق)",
|
||||
"login-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 "Remember Me" 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-type": "نوع التسجيل",
|
||||
"registration-approval-type": "Registration Approval Type",
|
||||
"registration-type.normal": "عادي",
|
||||
"registration-type.admin-approval": "بموافقة الإدارة",
|
||||
"registration-type.admin-approval-ip": "بموافقة الإدارة لعناوين IP",
|
||||
"registration-type.invite-only": "بالدعوات فقط",
|
||||
"registration-type.admin-invite-only": "بالدعوات من قبل الإدارة فقط",
|
||||
"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-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-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.max-invites": "الحد الأقصى للدعوات لكل عضو",
|
||||
"max-invites": "الحد الأقصى للدعوات لكل عضو",
|
||||
"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",
|
||||
"follow-created-topics": "Follow topics you create",
|
||||
"follow-replied-topics": "Follow topics that you reply to",
|
||||
"default-notification-settings": "Default notification settings",
|
||||
"categoryWatchState": "Default category watch state",
|
||||
"categoryWatchState.watching": "Watching",
|
||||
"categoryWatchState.notwatching": "Not Watching",
|
||||
"categoryWatchState.ignoring": "Ignoring"
|
||||
"default-notification-settings": "Default notification settings"
|
||||
}
|
||||
@@ -7,16 +7,14 @@
|
||||
"browsing": "تصفح",
|
||||
"no_replies": "لم يرد أحد",
|
||||
"no_new_posts": "لا توجد مشاركات جديدة.",
|
||||
"share_this_category": "شارك هذا القسم",
|
||||
"watch": "تابع",
|
||||
"ignore": "تجاهل",
|
||||
"watching": "متابع",
|
||||
"not-watching": "لست متابع",
|
||||
"ignoring": "متجاهل",
|
||||
"watching.description": "أظهر المواضيع في الغير مقروء و الحديث",
|
||||
"not-watching.description": "Do not show topics in unread, show in recent",
|
||||
"ignoring.description": "Do not show topics in unread and recent",
|
||||
"watching.message": "You are now watching updates from this category and all subcategories",
|
||||
"notwatching.message": "You are not watching updates from this category and all subcategories",
|
||||
"ignoring.message": "You are now ignoring updates from this category and all subcategories",
|
||||
"watching.description": "أظهر المواضيع في غير مقروء",
|
||||
"ignoring.description": "لا تظهر المواضيع في غير مقروء",
|
||||
"watch.message": "أنت الآن تتابع التحديثات من هذا القسم وجميع الأقسام الفرعية",
|
||||
"ignore.message": "أنت الآن تتجاهل التحديثات من هذا القسم وجميع الأقسام الفرعية",
|
||||
"watched-categories": "الأقسام المُتابعة"
|
||||
}
|
||||
@@ -1,49 +1,38 @@
|
||||
{
|
||||
"test-email.subject": "Test Email",
|
||||
"password-reset-requested": "Password Reset Requested!",
|
||||
"password-reset-requested": "تم طلب إعادة تعيين كلمة المرور - %1!",
|
||||
"welcome-to": "مرحبًا بك في %1",
|
||||
"invite": "دعوة من %1",
|
||||
"greeting_no_name": "مرحبًا",
|
||||
"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.text2": "لتفعيل حسابك، نحتاج إلى التأكد من صحة عنوان البريد الإلكتروني الذي سجلت به.",
|
||||
"welcome.text3": "تم قبول نتسجيلك ، يمكنك الدخول باتسخدام اسم المستخدم و كلمة المرور.",
|
||||
"welcome.cta": "انقر هنا لتفعيل عنوان بريدك الإلكتروني",
|
||||
"invitation.text1": "%1 قام بدعوتك للانضمام لـ %2",
|
||||
"invitation.text2": "Your invitation will expire in %1 days.",
|
||||
"invitation.cta": "Click here to create your account.",
|
||||
"invitation.ctr": "إضغط هنا لإنشاء حسابك",
|
||||
"reset.text1": "لقد توصلنا بطلب إعادة تعيين كلمة المرور الخاصة بك، ربما لكونك قد نسيتها, إن لم يكن الأمر كذلك، المرجو تجاهل هذه الرسالة.",
|
||||
"reset.text2": "لمواصلة طلب إعاة تعيين كلمة المرور، الرجاء تتبع هذا الرابط.",
|
||||
"reset.cta": "انقر هنا لإعادة تعيين كلمة السر الخاصة بك.",
|
||||
"reset.notify.subject": "تم تغيير كلمة المرور بنجاح",
|
||||
"reset.notify.text1": "نحيطك علما أن كلمة مرورك قد تم تغييرها في %1",
|
||||
"reset.notify.text2": "إن لم يكن لديك علم بهذا، المرجو إشعار مدبر النظام بأسرع مايمكن.",
|
||||
"digest.notifications": "لديك تنبيهات غير مقروءة من طرف %1:",
|
||||
"digest.latest_topics": "آخر المستجدات من %1",
|
||||
"digest.cta": "انقر هنا لمشاهدة %1",
|
||||
"digest.unsub.info": "تم إرسال هذا الإشعار بآخر المستجدات وفقا لخيارات تسجيلكم.",
|
||||
"digest.no_topics": "ليس هناك مواضيع نشيطة في %1 الماضي",
|
||||
"digest.day": "يوم",
|
||||
"digest.week": "أسبوع",
|
||||
"digest.month": "شهر",
|
||||
"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.cta": "انقر هنا لمتابعة المحادثة",
|
||||
"notif.chat.unsub.info": "تم إرسال هذا الإشعار بوجودة محادثة جديدة وفقا لخيارات تسجيلك.",
|
||||
"notif.post.cta": "انقر هنا لقراءة الموضوع بأكمله",
|
||||
"notif.post.unsub.info": "تم إشعارك بهذه المشاركة بناءً على الخيارات التي سبق وأن حددتها.",
|
||||
"notif.post.unsub.one-click": "Alternatively, unsubscribe from future emails like this, by clicking",
|
||||
"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!",
|
||||
"notif.cta": "Click here to go to forum",
|
||||
"test.text1": "هذه رسالة تجريبية للتأكد من صحة إعدادت الرسائل الإلكترونية في منتدى NodeBB خاصتك.",
|
||||
"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.text1": "The user %1 has been banned from %2.",
|
||||
"banned.text2": "This ban will last until %1.",
|
||||
|
||||
@@ -11,9 +11,6 @@
|
||||
"invalid-uid": "مستخدم غير موجود",
|
||||
"invalid-username": "اسم المستخدم غير مقبول",
|
||||
"invalid-email": "البريد الاكتروني غير مقبول",
|
||||
"invalid-fullname": "Invalid Fullname",
|
||||
"invalid-location": "Invalid Location",
|
||||
"invalid-birthday": "Invalid Birthday",
|
||||
"invalid-title": "Invalid title",
|
||||
"invalid-user-data": "بيانات المستخدم غير صحيحة",
|
||||
"invalid-password": "كلمة السر غير مقبولة",
|
||||
@@ -21,23 +18,20 @@
|
||||
"invalid-username-or-password": "المرجود تحديد اسم مستخدم و كلمة مرور",
|
||||
"invalid-search-term": "كلمة البحث غير صحيحة",
|
||||
"invalid-url": "Invalid URL",
|
||||
"local-login-disabled": "Local login system has been disabled for non-privileged accounts.",
|
||||
"csrf-invalid": "لم تتمكن من تسجيل الدخول. هنالك أحتمال ان جلستك انتهت. رجاءًا حاول مرة اخرى.",
|
||||
"invalid-pagination-value": "رقم الصفحة غير صحيح ، يجب أن يكون بين %1 و %2 .",
|
||||
"username-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-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": "هذا المنتدى يستلزم تفعيل بريدك الإلكتروني، انقر هنا من فضلك لإدخاله.",
|
||||
"email-confirm-failed": "لم نستطع تفعيل بريدك الإلكتروني، المرجو المحاولة لاحقًا.",
|
||||
"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.",
|
||||
"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-long": "اسم المستخدم طويل",
|
||||
"password-too-long": "كلمة السر طويلة ",
|
||||
"reset-rate-limited": "Too many password reset requests (rate limited)",
|
||||
"user-banned": "المستخدم محظور",
|
||||
"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)",
|
||||
@@ -83,7 +77,6 @@
|
||||
"still-uploading": "الرجاء الانتظار حتى يكتمل الرفع.",
|
||||
"file-too-big": "الحد الأقصى لرفع الملفات %1 كيلو بت. رجاءًا ارفع ملف أصغر",
|
||||
"guest-upload-disabled": "خاصية رفع الملفات غير مفعلة للزوار.",
|
||||
"cors-error": "Unable to upload image due to misconfigured CORS",
|
||||
"already-bookmarked": "You have already bookmarked this post",
|
||||
"already-unbookmarked": "You have already unbookmarked this post",
|
||||
"cant-ban-other-admins": "لايمكن حظر مدبر نظام آخر.",
|
||||
@@ -93,7 +86,6 @@
|
||||
"invalid-image-type": "نوع الصورة غير مدعوم. الأنواع المدعومة هي : %1",
|
||||
"invalid-image-extension": "امتداد الصورة غير مدعوم.",
|
||||
"invalid-file-type": "صيغة الملف غير مدعومة. الأنواع المدعومة هي: %1",
|
||||
"invalid-image-dimensions": "Image dimensions are too big",
|
||||
"group-name-too-short": "اسم المجموعة قصير",
|
||||
"group-name-too-long": "اسم المجموعة طويل.",
|
||||
"group-already-exists": "المجموعة موجودة مسبقا",
|
||||
@@ -103,8 +95,6 @@
|
||||
"group-needs-owner": "هذه المجموعة تتطلب مالك واحد على اﻷقل",
|
||||
"group-already-invited": "المستخدم سبق وأن تمت دعوته",
|
||||
"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-restored": "سبق وتم إلغاء حذف هذا الرد",
|
||||
"topic-already-deleted": "سبق وتم حذف هذا الموضوع",
|
||||
@@ -127,7 +117,7 @@
|
||||
"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-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": "لقد شاركت بالتصويت ، ألا تذكر؟",
|
||||
"reputation-system-disabled": "نظام السمعة معطل",
|
||||
"downvoting-disabled": "التصويتات السلبية معطلة",
|
||||
@@ -136,8 +126,6 @@
|
||||
"not-enough-reputation-min-rep-website": "You do not have enough reputation to add a website",
|
||||
"not-enough-reputation-min-rep-aboutme": "You do not have enough reputation to add an about me",
|
||||
"not-enough-reputation-min-rep-signature": "You do not have enough reputation to add a signature",
|
||||
"not-enough-reputation-min-rep-profile-picture": "You do not have enough reputation to add a profile picture",
|
||||
"not-enough-reputation-min-rep-cover-picture": "You do not have enough reputation to add a cover picture",
|
||||
"already-flagged": "لقد بلغت عن هذه المشاركة من قبل.",
|
||||
"self-vote": "You cannot vote on your own post",
|
||||
"reload-failed": "المنتدى واجه مشكلة أثناء إعادة التحميل: \"%1\". سيواصل المنتدى خدمة العملاء السابقين لكن يجب عليك إلغاء أي تغيير قمت به قبل إعادة التحميل.",
|
||||
@@ -150,17 +138,11 @@
|
||||
"invite-maximum-met": "لقد قمت بدعوة الحد الأقصى من الأشخاص (%1 من %2)",
|
||||
"no-session-found": "لم دخول مسجل!",
|
||||
"not-in-room": "المستخدم غير موجود في الغرفة.",
|
||||
"no-users-in-room": "لا يوجد مستخدمين في الغرفة.",
|
||||
"cant-kick-self": "لا يمكنك طرد نفسك من المجموعة.",
|
||||
"no-users-selected": "لا يوجد مستخدم محدد.",
|
||||
"invalid-home-page-route": "Invalid home page route",
|
||||
"invalid-session": "Session Mismatch",
|
||||
"invalid-session-text": "يبدو أن فترة التسجيل لم تعد قائمة او هي غير مطابقة مع الخادم. يرجى إعادة تحميل هذه الصفحة.",
|
||||
"no-topics-selected": "No topics selected!",
|
||||
"cant-move-to-same-topic": "Can't move post to same topic!",
|
||||
"cannot-block-self": "You cannot block yourself!",
|
||||
"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-topics-selected": "No topics selected!"
|
||||
}
|
||||
@@ -9,7 +9,6 @@
|
||||
"updated": "Updated",
|
||||
"target-purged": "The content this flag referred to has been purged and is no longer available.",
|
||||
|
||||
"graph-label": "Daily Flags",
|
||||
"quick-filters": "Quick Filters",
|
||||
"filter-active": "There are one or more filters active in this list of flags",
|
||||
"filter-reset": "Remove Filters",
|
||||
@@ -19,7 +18,6 @@
|
||||
"filter-type": "Flag Type",
|
||||
"filter-type-all": "All Content",
|
||||
"filter-type-post": "Post",
|
||||
"filter-type-user": "User",
|
||||
"filter-state": "State",
|
||||
"filter-assignee": "Assignee UID",
|
||||
"filter-cid": "Category",
|
||||
|
||||
@@ -48,6 +48,7 @@
|
||||
"alert.banned.message": "لقد تم حظر حسابك. سيتم تسجيل الخروج.",
|
||||
"alert.unfollow": "أنت لا تتابع %1 بعد الآن!",
|
||||
"alert.follow": "أنت الآن تتابع %1!",
|
||||
"online": "المتواجدون حاليًّا",
|
||||
"users": "الأعضاء",
|
||||
"topics": "المواضيع",
|
||||
"posts": "المشاركات",
|
||||
@@ -59,8 +60,6 @@
|
||||
"downvoted": "مصوت بالسالب",
|
||||
"views": "المشاهدات",
|
||||
"reputation": "السمعة",
|
||||
"lastpost": "Last post",
|
||||
"firstpost": "First post",
|
||||
"read_more": "اقرأ المزيد",
|
||||
"more": "المزيد",
|
||||
"posted_ago_by_guest": "كتب %1 بواسطة زائر",
|
||||
@@ -78,7 +77,6 @@
|
||||
"recentposts": "آخر المشاركات",
|
||||
"recentips": "آخر عناوين ال IP التي سجلت الدخول",
|
||||
"moderator_tools": "أدوات المشرف",
|
||||
"online": "المتواجدون حاليًّا",
|
||||
"away": "غير متواجد",
|
||||
"dnd": "عدم الإزعاج",
|
||||
"invisible": "مخفي",
|
||||
@@ -87,7 +85,6 @@
|
||||
"language": "اللغة",
|
||||
"guest": "زائر",
|
||||
"guests": "الزوار",
|
||||
"former_user": "A Former User",
|
||||
"updated.title": "تم تحديث المنتدى",
|
||||
"updated.message": "لقد تم تحديث المنتدى إلى آخر نسخة للتو. إضغط هنا لإعادة تحميل الصفحة.",
|
||||
"privacy": "الخصوصية",
|
||||
@@ -100,7 +97,6 @@
|
||||
"enter_page_number": "ادخل رقم الصفحة",
|
||||
"upload_file": "ارفع ملف",
|
||||
"upload": "ارفع",
|
||||
"uploads": "Uploads",
|
||||
"allowed-file-types": "صيغ الملفات المدعومة هي 1%",
|
||||
"unsaved-changes": "لديك تغييرات لم تحفظ. هل أنت متأكد من رغبتك بمغادرة الصفحة؟",
|
||||
"reconnecting-message": "يبدو أن اتصالك لـ %1 قد فقد. رجاءًا أنتظر ثم حاول الإتصال مرة اخرى.",
|
||||
|
||||
@@ -25,11 +25,9 @@
|
||||
"details.latest_posts": "آخر المشاركات",
|
||||
"details.private": "خاص",
|
||||
"details.disableJoinRequests": "Disable join requests",
|
||||
"details.disableLeave": "Disallow users from leaving the group",
|
||||
"details.grant": "منح/سحب المِلكية",
|
||||
"details.kick": "طرد",
|
||||
"details.kick_confirm": "Are you sure you want to remove this member from the group?",
|
||||
"details.add-member": "Add Member",
|
||||
"details.owner_options": "إدارة المجموعة",
|
||||
"details.group_name": "اسم المجموعة",
|
||||
"details.member_count": "عدد اﻷعضاء",
|
||||
@@ -37,8 +35,7 @@
|
||||
"details.description": "الوصف",
|
||||
"details.badge_preview": "معاينة الوسام",
|
||||
"details.change_icon": "تغيير الأيقونة",
|
||||
"details.change_label_colour": "Change Label Colour",
|
||||
"details.change_text_colour": "Change Text Colour",
|
||||
"details.change_colour": "تغيير اللون",
|
||||
"details.badge_text": "نص الوسام",
|
||||
"details.userTitleEnabled": "إظهار الوسام",
|
||||
"details.private_help": "في حالة تفعيل الخيار، الانضمام إلى المجموعة يستلزم قبول مالكها",
|
||||
@@ -49,11 +46,9 @@
|
||||
"event.updated": "تم تحديث بيانات المجموعة",
|
||||
"event.deleted": "تم حذف المجموعة %1",
|
||||
"membership.accept-invitation": "اقبل الدعوة",
|
||||
"membership.accept.notification_title": "You are now a member of <strong>%1</strong>",
|
||||
"membership.invitation-pending": "الدعوة بانتظار القبول",
|
||||
"membership.join-group": "انظم للمجموعة",
|
||||
"membership.leave-group": "غادر المجموعة",
|
||||
"membership.leave.notification_title": "<strong>%1</strong> has left group <strong>%2</strong>",
|
||||
"membership.reject": "رفض",
|
||||
"new-group.group_name": "اسم المجموعة",
|
||||
"upload-group-cover": "Upload group cover",
|
||||
|
||||
@@ -20,23 +20,18 @@
|
||||
"chat.thirty_days": "30 يومًا",
|
||||
"chat.three_months": "3 أشهر",
|
||||
"chat.delete_message_confirm": "هل أنت متأكد من أنك تريد حذف هذه الرسالة؟",
|
||||
"chat.add-users-to-room": "Add users to room",
|
||||
"chat.retrieving-users": "Retrieving users...",
|
||||
"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.",
|
||||
"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-help": "The room name set here will be viewable by all participants in the room.",
|
||||
"chat.leave": "Leave Chat",
|
||||
"chat.leave-prompt": "Are you sure you wish to leave this chat?",
|
||||
"chat.leave-help": "Leaving this chat will remove you from future correspondence in this chat. If you are re-added in the future, you will not see any chat history from prior to your re-joining.",
|
||||
"chat.in-room": "In this room",
|
||||
"chat.kick": "Kick",
|
||||
"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.show_preview": "عرض المعاينة",
|
||||
"composer.hide_preview": "إخفاء المعاينة",
|
||||
@@ -50,7 +45,6 @@
|
||||
"composer.formatting.italic": "Italic",
|
||||
"composer.formatting.list": "List",
|
||||
"composer.formatting.strikethrough": "Strikethrough",
|
||||
"composer.formatting.code": "Code",
|
||||
"composer.formatting.link": "Link",
|
||||
"composer.formatting.picture": "Picture",
|
||||
"composer.upload-picture": "Upload Image",
|
||||
|
||||
@@ -5,20 +5,21 @@
|
||||
"mark_all_read": "اجعل كل التنبيهات مقروءة",
|
||||
"back_to_home": "عودة إلى %1",
|
||||
"outgoing_link": "رابط خارجي",
|
||||
"outgoing_link_message": "أنت تغادر اﻻن %1",
|
||||
"outgoing_link_message": "You are now leaving %1",
|
||||
"continue_to": "استمر إلى %1",
|
||||
"return_to": "عودة إى %1",
|
||||
"new_notification": "لديك تنبيه جديد",
|
||||
"new_notification": "تنبيه جديد",
|
||||
"new_notification_from": "You have a new Notification from %1",
|
||||
"you_have_unread_notifications": "لديك تنبيهات غير مقروءة.",
|
||||
"all": "الكل",
|
||||
"topics": "مواضيع",
|
||||
"replies": "ردود",
|
||||
"chat": "محادثات",
|
||||
"follows": "متابعون",
|
||||
"upvote": "الموافقين",
|
||||
"all": "All",
|
||||
"topics": "Topics",
|
||||
"replies": "Replies",
|
||||
"chat": "Chats",
|
||||
"follows": "Follows",
|
||||
"upvote": "Upvotes",
|
||||
"new-flags": "New Flags",
|
||||
"my-flags": "Flags assigned to me",
|
||||
"bans": "الحظر",
|
||||
"bans": "Bans",
|
||||
"new_message_from": "رسالة جديدة من <strong>%1</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>.",
|
||||
@@ -40,23 +41,22 @@
|
||||
"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_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",
|
||||
"email-confirmed": "تم التحقق من عنوان البريد الإلكتروني",
|
||||
"email-confirmed-message": "شكرًا على إثبات صحة عنوان بريدك الإلكتروني. صار حسابك مفعلًا بالكامل.",
|
||||
"email-confirm-error-message": "حدث خطأ أثناء التحقق من عنوان بريدك الإلكتروني. ربما رمز التفعيل خاطئ أو انتهت صلاحيته.",
|
||||
"email-confirm-sent": "تم إرسال بريد التفعيل.",
|
||||
"none": "None",
|
||||
"notification_only": "التنبيهات فقط",
|
||||
"email_only": "البريد الالكتروني فقط",
|
||||
"notification_and_email": "التنبيهات والبريد اﻻلكتروني",
|
||||
"notificationType_upvote": "عندما يوافقك احدهم على منشورك",
|
||||
"notification_only": "Notification Only",
|
||||
"email_only": "Email Only",
|
||||
"notification_and_email": "Notification & Email",
|
||||
"notificationType_upvote": "When someone upvotes your post",
|
||||
"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_follow": "When someone starts following you",
|
||||
"notificationType_new-chat": "When you receive a chat message",
|
||||
"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_post-queue": "When a new post is queued",
|
||||
"notificationType_new-post-flag": "When a post is flagged",
|
||||
|
||||
@@ -6,10 +6,7 @@
|
||||
"popular-month": "المواضيع الشائعة هذا الشهر",
|
||||
"popular-alltime": "المواضيع الشائعة منذ القدم",
|
||||
"recent": "المواضيع الحديثة",
|
||||
"top-day": "Top voted topics today",
|
||||
"top-week": "Top voted topics this week",
|
||||
"top-month": "Top voted topics this month",
|
||||
"top-alltime": "Top Voted Topics",
|
||||
"top": "Top Voted Topics",
|
||||
"moderator-tools": "Moderator Tools",
|
||||
"flagged-content": "Flagged Content",
|
||||
"ip-blacklist": "IP Blacklist",
|
||||
@@ -43,10 +40,8 @@
|
||||
"account/following": "People %1 follows",
|
||||
"account/followers": "People who follow %1",
|
||||
"account/posts": "Posts made by %1",
|
||||
"account/latest-posts": "Latest posts made by %1",
|
||||
"account/topics": "Topics created by %1",
|
||||
"account/groups": "%1's Groups",
|
||||
"account/watched_categories": "%1's Watched Categories",
|
||||
"account/bookmarks": "%1's Bookmarked Posts",
|
||||
"account/settings": "خيارات المستخدم",
|
||||
"account/watched": "Topics watched by %1",
|
||||
@@ -54,9 +49,6 @@
|
||||
"account/upvoted": "Posts upvoted by %1",
|
||||
"account/downvoted": "Posts downvoted by %1",
|
||||
"account/best": "Best posts made by %1",
|
||||
"account/blocks": "Blocked users for %1",
|
||||
"account/uploads": "Uploads by %1",
|
||||
"account/sessions": "Login Sessions",
|
||||
"confirm": "تم التحقق من عنوان البريد الإلكتروني",
|
||||
"maintenance.text": "جاري صيانة %1. المرجو العودة لاحقًا.",
|
||||
"maintenance.messageIntro": "بالإضافة إلى ذلك، قام مدبر النظام بترك هذه الرسالة:",
|
||||
|
||||
@@ -19,8 +19,5 @@
|
||||
"terms_of_use_error": "يجب عليك الموافقة على شروط الاستخدام",
|
||||
"registration-added-to-queue": "تمت إضافتك في قائمة الإنتضار. ستتلقى رسالة إلكترونية عند الموافقة على تسجيلك من قبل الإدارة.",
|
||||
"interstitial.intro": "نحتاج إلى بعض المعلومات الإضافية قبل أن نتمكن من إنشاء حسابك.",
|
||||
"interstitial.errors-found": "تعذر علينا إتمام عملية التسجيل:",
|
||||
"gdpr_agree_data": "I consent to the collection and processing of my personal information on this website.",
|
||||
"gdpr_agree_email": "I consent to receive digest and notification emails from this website.",
|
||||
"gdpr_consent_denied": "You must give consent to this site to collect/process your information, and to send you emails."
|
||||
"interstitial.errors-found": "تعذر علينا إتمام عملية التسجيل:"
|
||||
}
|
||||
@@ -9,7 +9,7 @@
|
||||
"repeat_password": "تأكيد كلمة المرور",
|
||||
"enter_email": "يرجى إدخال <strong>عنوان البريد الإلكتروني</strong> الخاص بك وسوف نرسل لك رسالة بالبريد الالكتروني مع تعليمات حول كيفية إستعادة حسابك.",
|
||||
"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": "إعادة تعيين كلمة السر أرسلت",
|
||||
"invalid_email": "بريد إلكتروني غير صالح أو غير موجود",
|
||||
"password_too_short": "كلمة المرور التي أدخلتها قصيرة، الرجاء اختر كلمة مرور مختلفة",
|
||||
"passwords_do_not_match": "كلمتا السر التي أدخلتهما غير متطابقتان",
|
||||
|
||||
@@ -5,9 +5,6 @@
|
||||
"in": "في",
|
||||
"titles": "العناوين",
|
||||
"titles-posts": "العناوين والمشاركات",
|
||||
"match-words": "Match words",
|
||||
"all": "All",
|
||||
"any": "Any",
|
||||
"posted-by": "مشاركة من طرف",
|
||||
"in-categories": "في الفئات",
|
||||
"search-child-categories": "بحث في الفئات الفرعية",
|
||||
@@ -17,7 +14,6 @@
|
||||
"at-most": "على اﻷكثر",
|
||||
"relevance": "Relevance",
|
||||
"post-time": "تاريخ المشاركة",
|
||||
"votes": "Votes",
|
||||
"newer-than": "أحدث من",
|
||||
"older-than": "أقدم من",
|
||||
"any-date": "أي وقت",
|
||||
@@ -31,7 +27,6 @@
|
||||
"sort-by": "عرض حسب",
|
||||
"last-reply-time": "تاريخ آخر رد",
|
||||
"topic-title": "عنوان الموضوع",
|
||||
"topic-votes": "Topic votes",
|
||||
"number-of-replies": "عدد الردود",
|
||||
"number-of-views": "عدد المشاهدات",
|
||||
"topic-start-date": "تاريخ بدأ الموضوع",
|
||||
@@ -43,6 +38,5 @@
|
||||
"clear-preferences": "ازالة التفضيلات",
|
||||
"search-preferences-saved": "تم حفظ تفضيلات البحث",
|
||||
"search-preferences-cleared": "تم ازالة تفضيلات البحث",
|
||||
"show-results-as": "عرض النتائج كـ",
|
||||
"see-more-results": "See more results (%1)"
|
||||
"show-results-as": "عرض النتائج كـ"
|
||||
}
|
||||
@@ -18,13 +18,11 @@
|
||||
"last_reply_time": "Last reply",
|
||||
"reply-as-topic": "رد بموضوع",
|
||||
"guest-login-reply": "يجب عليك تسجيل الدخول للرد",
|
||||
"login-to-view": "🔒 Log in to view",
|
||||
"edit": "تعديل",
|
||||
"delete": "حذف",
|
||||
"purge": "تطهير",
|
||||
"restore": "استعادة",
|
||||
"move": "نقل",
|
||||
"change-owner": "Change Owner",
|
||||
"fork": "فرع",
|
||||
"link": "رابط",
|
||||
"share": "نشر",
|
||||
@@ -64,9 +62,7 @@
|
||||
"thread_tools.lock": "أقفل الموضوع",
|
||||
"thread_tools.unlock": "إلغاء إقفال الموضوع",
|
||||
"thread_tools.move": "نقل الموضوع",
|
||||
"thread_tools.move-posts": "Move Posts",
|
||||
"thread_tools.move_all": "نقل الكل",
|
||||
"thread_tools.change_owner": "Change Owner",
|
||||
"thread_tools.select_category": "Select Category",
|
||||
"thread_tools.fork": "إنشاء فرع الموضوع",
|
||||
"thread_tools.delete": "حذف الموضوع",
|
||||
@@ -100,8 +96,6 @@
|
||||
"fork_success": "تم إنشاء فرع للموضوع بنجاح! إضغط هنا لمعاينة الفرع.",
|
||||
"delete_posts_instruction": "Click the posts you want to delete/purge",
|
||||
"merge_topics_instruction": "Click the topics you want to merge",
|
||||
"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.handle_placeholder": "اﻹسم",
|
||||
"composer.discard": "نبذ التغييرات",
|
||||
@@ -122,8 +116,8 @@
|
||||
"sort_by": "ترتيب حسب",
|
||||
"oldest_to_newest": "من الأقدم إلى الأحدث",
|
||||
"newest_to_oldest": "من الأحدث إلى الأقدم",
|
||||
"most_votes": "Most Votes",
|
||||
"most_posts": "Most Posts",
|
||||
"most_votes": "الأكثر تصويتًا",
|
||||
"most_posts": "اﻷكثر رداً",
|
||||
"stale.title": "Create new topic instead?",
|
||||
"stale.warning": "The topic you are replying to is quite old. Would you like to create a new topic instead, and reference this one in your reply?",
|
||||
"stale.create": "موضوع جديد",
|
||||
@@ -131,9 +125,5 @@
|
||||
"link_back": "رد: [%1](%2)",
|
||||
"diffs.title": "Post Edit History",
|
||||
"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.current-revision": "current revision",
|
||||
"diffs.original-revision": "original revision",
|
||||
"timeago_later": "%1 later",
|
||||
"timeago_earlier": "%1 earlier"
|
||||
"diffs.no-revisions-description": "This post has <strong>%1</strong> revisions."
|
||||
}
|
||||
@@ -2,8 +2,5 @@
|
||||
"uploading-file": "جاري رفع الملف...",
|
||||
"select-file-to-upload": "إختر ملف لرفعه!",
|
||||
"upload-success": "تم رفع الملف بنجاح!",
|
||||
"maximum-file-size": "الحجم الأقصى %1 كيلوبت",
|
||||
"no-uploads-found": "No uploads found",
|
||||
"public-uploads-info": "Uploads are public, all visitors can see them.",
|
||||
"private-uploads-info": "Uploads are private, only logged in users can see them."
|
||||
"maximum-file-size": "الحجم الأقصى %1 كيلوبت"
|
||||
}
|
||||
@@ -12,7 +12,7 @@
|
||||
"ban_account_confirm": "هل تريد حقاً حظر هاذا العضو؟",
|
||||
"unban_account": "إزالة حظر الحساب",
|
||||
"delete_account": "حذف الحساب",
|
||||
"delete_account_confirm": "Are you sure you want to delete your account? <br /><strong>This action is irreversible and you will not be able to recover any of your data</strong><br /><br />Enter your password to confirm that you wish to destroy this account.",
|
||||
"delete_account_confirm": "هل أن متأكد أنك تريد حذف حسابك؟<br /><strong> هذه العملية غير قابلة للإلغاء ولن يكون بالإمكان استعادة بياناتك</strong><br /><br />أدخل اسم المستخدم الخاص بك لتأكيد عملية الحذف",
|
||||
"delete_this_account_confirm": "هل انت متأكد من رغبتك بحذف هذا الحساب؟ <br /> <strong>هذا الإجراء لا رجعة فيه ولن تتمكن من استرداد أي بيانات</strong><br /><br />",
|
||||
"account-deleted": "تم حذف الحساب",
|
||||
"fullname": "الاسم الكامل",
|
||||
@@ -25,17 +25,10 @@
|
||||
"profile_views": "عدد المشاهدات",
|
||||
"reputation": "السمعة",
|
||||
"bookmarks": "Bookmarks",
|
||||
"watched_categories": "Watched categories",
|
||||
"change_all": "Change All",
|
||||
"watched": "متابع",
|
||||
"ignored": "تم تجاهله",
|
||||
"default-category-watch-state": "Default category watch state",
|
||||
"followers": "المتابعون",
|
||||
"following": "يتابع",
|
||||
"blocks": "Blocks",
|
||||
"block_toggle": "Toggle Block",
|
||||
"block_user": "Block User",
|
||||
"unblock_user": "Unblock User",
|
||||
"aboutme": "معلومة عنك او السيرة الذاتية",
|
||||
"signature": "توقيع",
|
||||
"birthday": "عيد ميلاد",
|
||||
@@ -50,7 +43,6 @@
|
||||
"change_picture": "تغيير الصورة",
|
||||
"change_username": "تغيير اسم المستخدم",
|
||||
"change_email": "تغيير البريد اﻹلكتروني",
|
||||
"email_same_as_password": "Please enter your current password to continue – you've entered your new email again",
|
||||
"edit": "تعديل",
|
||||
"edit-profile": "تعديل الملف الشخصي",
|
||||
"default_picture": "أيقونة افتراضية",
|
||||
@@ -61,6 +53,7 @@
|
||||
"change_password": "تغيير كلمة السر",
|
||||
"change_password_error": "كلمة سر غير صحيحة",
|
||||
"change_password_error_wrong_current": "كلمة السر الحالية ليست صحيحة",
|
||||
"change_password_error_length": "كلمة السر قصيرة",
|
||||
"change_password_error_match": "كلمة السر غير مطابقة لتأكيد كلمة السر",
|
||||
"change_password_error_privileges": "ليس لديك الصلاحيات الكافية لتغيير كلمة السر هذه.",
|
||||
"change_password_success": "تم تحديث كلمة السر خاصتك.",
|
||||
@@ -87,6 +80,7 @@
|
||||
"digest_daily": "يوميا",
|
||||
"digest_weekly": "أسبوعيًّا",
|
||||
"digest_monthly": "شهريًّا",
|
||||
"settings-require-reload": "تغيير بعض اﻹعدادات يتطلب تحديث الصفحة. إضغط هنا لتحديث الصفحة",
|
||||
"has_no_follower": "هذا المستخدم ليس لديه أية متابعين :(",
|
||||
"follows_no_one": "هذا المستخدم لا يتابع أحد :(",
|
||||
"has_no_posts": "هذا المستخدم لم يشارك حتى الآن.",
|
||||
@@ -96,7 +90,6 @@
|
||||
"has_no_upvoted_posts": "هذا المستخدم لم يقم بالتصويت للأعلى لأي مشاركة حتى الآن.",
|
||||
"has_no_downvoted_posts": "هذا المستخدم لم يقم بالتصويت للأسفل لأي مشاركة حتى الآن.",
|
||||
"has_no_voted_posts": "هذا المستخدم لا يمتلك اية مشاركات تم التصويت عليها",
|
||||
"has_no_blocks": "You have blocked no users.",
|
||||
"email_hidden": "البريد الإلكتروني مخفي",
|
||||
"hidden": "مخفي",
|
||||
"paginate_description": "عرض المواضيع والردود موزعة على صفحات عوضاً عن التمرير اللانهائي.",
|
||||
@@ -112,20 +105,19 @@
|
||||
"no-sound": "بدون صوت",
|
||||
"upvote-notif-freq": "معدل تكرار تنبيهات التصويت للأعلى",
|
||||
"upvote-notif-freq.all": "كل التصويتات للأعلى",
|
||||
"upvote-notif-freq.first": "First Per Post",
|
||||
"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.disabled": "معطل",
|
||||
"browsing": "خيارات التصفح",
|
||||
"open_links_in_new_tab": "فتح الروابط الخارجية في نافدة جديدة",
|
||||
"enable_topic_searching": "تفعيل خاصية البحث داخل المواضيع",
|
||||
"topic_search_help": "إذا قمت بتفعيل ميزة البحث في-الموضوع، سيتم تجاوز الخيار الافتراضي للمتصفح مما يؤدي للبحث بكامل الموضوع بدلا عن البحث في الجزء الظاهر في الشاشة.",
|
||||
"delay_image_loading": "تأخير عرض الصور",
|
||||
"image_load_delay_help": "إذا تم تمكينه، فلن يتم تحميل الصور في المواضيع حتى يتم تمريرها في الشاشة",
|
||||
"scroll_to_my_post": "بعد اضافة رد على المشاركة, قم بإظهار المشاركة",
|
||||
"follow_topics_you_reply_to": "متابعة المواضيع التي تقوم بالرد عليها",
|
||||
"follow_topics_you_create": "متابعة المواضيع التي تقوم بإنشائها",
|
||||
"grouptitle": "عنوان المجموعة",
|
||||
"group-order-help": "Select a group and use the arrows to order titles",
|
||||
"no-group-title": "لا يوجد عنوان للمجموعة",
|
||||
"select-skin": "إختر سمة",
|
||||
"select-homepage": "إختر الصفحة الرئيسية",
|
||||
@@ -151,26 +143,5 @@
|
||||
"info.email-history": "سجل البريد الإلكتروني",
|
||||
"info.moderation-note": "ملاحظة الإشراف",
|
||||
"info.moderation-note.success": "تم حفظ ملاحظة الإشراف",
|
||||
"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 & Consent",
|
||||
"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 & Consent page.<br /><br />If you have any questions or concerns, we encourage you to reach out to this forum's administrative team.",
|
||||
"consent.email_intro": "Occasionally, we may send emails to your registered email address in order to provide updates and/or to notify you of new activity that is pertinent to you. You can customise the frequency of the community digest (including disabling it outright), as well as select which types of notifications to receive via email, via your user settings page.",
|
||||
"consent.digest_frequency": "Unless explicitly changed in your user settings, this community delivers email digests every %1.",
|
||||
"consent.digest_off": "Unless explicitly changed in your user settings, this community does not send out email digests",
|
||||
"consent.received": "You have provided consent for this website to collect and process your information. No additional action is required.",
|
||||
"consent.not_received": "You have not provided consent for data collection and processing. At any time this website's administration may elect to delete your account in order to become compliant with the General Data Protection Regulation.",
|
||||
"consent.give": "Give consent",
|
||||
"consent.right_of_access": "You have the Right of Access",
|
||||
"consent.right_of_access_description": "You have the right to access any data collected by this website upon request. You can retrieve a copy of this data by clicking the appropriate button below.",
|
||||
"consent.right_to_rectification": "You have the Right to Rectification",
|
||||
"consent.right_to_rectification_description": "You have the right to change or update any inaccurate data provided to us. Your profile can be updated by editing your profile, and post content can always be edited. If this is not the case, please contact this site's administrative team.",
|
||||
"consent.right_to_erasure": "You have the Right to Erasure",
|
||||
"consent.right_to_erasure_description": "At any time, you are able to revoke your consent to data collection and/or processing by deleting your account. Your individual profile can be deleted, although your posted content will remain. If you wish to delete both your account <strong>and</strong> your content, please contact the administrative team for this website.",
|
||||
"consent.right_to_data_portability": "You have the Right to Data Portability",
|
||||
"consent.right_to_data_portability_description": "You may request from us a machine-readable export of any collected data about you and your account. You can do so by clicking the appropriate button below.",
|
||||
"consent.export_profile": "Export Profile (.csv)",
|
||||
"consent.export_uploads": "Export Uploaded Content (.zip)",
|
||||
"consent.export_posts": "Export Posts (.csv)"
|
||||
"info.moderation-note.add": "إضافة ملاحظة"
|
||||
}
|
||||
@@ -10,7 +10,6 @@
|
||||
"filter-by": "Filter By",
|
||||
"online-only": "المتصلون فقط",
|
||||
"invite": "دعوة",
|
||||
"prompt-email": "Emails:",
|
||||
"invitation-email-sent": "تم إرسال دعوة بالبريد الإلكتروني إلى %1",
|
||||
"user_list": "قائمة اﻷعضاء",
|
||||
"recent_topics": "أحدث المواضيع",
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"alert.confirm-rebuild-and-restart": "Наистина ли искате да изградите повторно и да рестартирате NodeBB?",
|
||||
"alert.confirm-reload": "Наистина ли искате да презаредите NodeBB?",
|
||||
"alert.confirm-restart": "Наистина ли искате да рестартирате NodeBB?",
|
||||
|
||||
"acp-title": "%1 | Контролен панел за администратори на NodeBB",
|
||||
|
||||
@@ -18,17 +18,10 @@
|
||||
"mongo.resident-memory": "Текущо активна памет",
|
||||
"mongo.virtual-memory": "Виртуална памет",
|
||||
"mongo.mapped-memory": "Заделена памет",
|
||||
"mongo.bytes-in": "Байтове ВХ",
|
||||
"mongo.bytes-out": "Байтове ИЗХ",
|
||||
"mongo.num-requests": "Брой заявки",
|
||||
"mongo.raw-info": "Сурови данни от MongoDB",
|
||||
"mongo.unauthorized": "NodeBB не успя да получи нужните статистики от MongoDB. Моля, уверете се, че потребителят, който се използва от NodeBB, включва ролята „clusterMonitor“ за базата данни „admin“.",
|
||||
|
||||
"redis": "Redis",
|
||||
"redis.version": "Версия на Redis",
|
||||
"redis.keys": "Ключове",
|
||||
"redis.expires": "Изтичания",
|
||||
"redis.avg-ttl": "Средно време на живот (TTL)",
|
||||
"redis.connected-clients": "Свързани клиенти",
|
||||
"redis.connected-slaves": "Свързани второстепенни сървъри",
|
||||
"redis.blocked-clients": "Блокирани клиенти",
|
||||
@@ -37,16 +30,7 @@
|
||||
"redis.total-connections-recieved": "Общо получени свързвания",
|
||||
"redis.total-commands-processed": "Общо обработени команди",
|
||||
"redis.iops": "Едновременни операции в секунда",
|
||||
"redis.iinput": "Едновременен вход в секунда",
|
||||
"redis.ioutput": "Едновременен изход в секунда",
|
||||
"redis.total-input": "Общ вход",
|
||||
"redis.total-output": "Общ изход",
|
||||
|
||||
"redis.keyspace-hits": "Успешни търсения на ключове",
|
||||
"redis.keyspace-misses": "Неуспешни търсения на ключове",
|
||||
"redis.raw-info": "Сурови данни от Redis",
|
||||
|
||||
"postgres": "Postgres",
|
||||
"postgres.version": "Версия на PostgreSQL",
|
||||
"postgres.raw-info": "Сурови данни от Postgres"
|
||||
"redis.raw-info": "Сурови данни от Redis"
|
||||
}
|
||||
@@ -2,10 +2,5 @@
|
||||
"events": "Събития",
|
||||
"no-events": "Няма събития",
|
||||
"control-panel": "Контролен панел за събитията",
|
||||
"filters": "Филтри",
|
||||
"filters-apply": "Прилагане на филтрите",
|
||||
"filter-type": "Вид събитие",
|
||||
"filter-start": "Начална дата",
|
||||
"filter-end": "Крайна дата",
|
||||
"filter-perPage": "На страница"
|
||||
"delete-events": "Изтриване на събитията"
|
||||
}
|
||||
@@ -8,7 +8,7 @@
|
||||
"custom-js.enable": "Включване на персонализирания код на Javascript",
|
||||
|
||||
"custom-header": "Персонализирана заглавна част",
|
||||
"custom-header.description": "Въведете своя персонализиран код HTML тук (напр. елементи „meta“ и т.н.), те ще бъдат добавени към секцията <code><head></code> в кода на Вашия форум. Ползването на елементи „script“ е позволено, но непрепоръчително, тъй като за това можете да ползвате раздела <a href=\"#custom-js\" data-toggle=\"tab\">Персонализиран код на Javascript</a>.",
|
||||
"custom-header.description": "Въведете своя персонализиран код HTML тук (напр. елементи „meta“ и т.н.), те ще бъдат добавени към секцията <code><head></code> в кода на Вашия форум. Ползването на елементи „script“ е позволено, но непрепоръчително, тъй като за това можете да ползвате раздела <a href=\"#custom-header\" data-toggle=\"tab\">Персонализиран код на Javascript</a>.",
|
||||
"custom-header.enable": "Включване на персонализирана заглавна част",
|
||||
|
||||
"custom-css.livereload": "Включване на моменталното презареждане",
|
||||
|
||||
@@ -7,5 +7,5 @@
|
||||
"revert-confirm": "Наистина ли искате да възстановите стандартната тема на NodeBB?",
|
||||
"theme-changed": "Темата е променена",
|
||||
"revert-success": "Вие възстановихте успешно стандартната тема на NodeBB.",
|
||||
"restart-to-activate": "Моля, изградете повторно и рестартирайте NodeBB, за да може тази тема да влезе в сила напълно."
|
||||
"restart-to-activate": "Моля, рестартирайте NodeBB, за да може тази тема да влезе в сила напълно."
|
||||
}
|
||||
@@ -7,8 +7,7 @@
|
||||
"online": "на линия",
|
||||
"git": "git",
|
||||
"memory": "памет",
|
||||
"load": "натоварване на системата",
|
||||
"cpu-usage": "използване на процесора",
|
||||
"load": "натоварване",
|
||||
"uptime": "активно време",
|
||||
|
||||
"registered": "Регистрирани",
|
||||
|
||||
@@ -9,7 +9,6 @@
|
||||
|
||||
"plugin-search": "Търсене на добавки",
|
||||
"plugin-search-placeholder": "Търсене на добавка…",
|
||||
"submit-anonymous-usage": "Изпращане на анонимни данни за употребата на добавката",
|
||||
"reorder-plugins": "Пренареждане на добавките",
|
||||
"order-active": "Подреждане на включените добавки",
|
||||
"dev-interested": "Искате ли да пишете добавки за NodeBB?",
|
||||
@@ -30,8 +29,6 @@
|
||||
"plugin-item.more-info": "За повече информация",
|
||||
"plugin-item.unknown": "Неизвестно",
|
||||
"plugin-item.unknown-explanation": "Състоянието на тази добавка не може да бъде определено, може би поради грешка в конфигурацията.",
|
||||
"plugin-item.compatible": "Тази добавка работи с NodeBB %1",
|
||||
"plugin-item.not-compatible": "Тази добавка няма информация за съвместимост. Уверете се, че работи, преди да я инсталирате на истинския си сървър.",
|
||||
|
||||
"alert.enabled": "Добавката е включена",
|
||||
"alert.disabled": "Добавката е изключена",
|
||||
@@ -40,15 +37,13 @@
|
||||
"alert.uninstalled": "Добавката е деинсталирана",
|
||||
"alert.activate-success": "Моля, рестартирайте NodeBB, за да включите тази добавка напълно.",
|
||||
"alert.deactivate-success": "Добавката е изключена успешно.",
|
||||
"alert.upgrade-success": "Моля, изградете повторно и презаредете NodeBB, за да обновите тази добавка напълно.",
|
||||
"alert.upgrade-success": "Моля, презаредете NodeBB, за да обновите тази добавка напълно.",
|
||||
"alert.install-success": "Добавката е инсталирана успешно, моля, включете я",
|
||||
"alert.uninstall-success": "Добавката беше изключена и деинсталирана успешно.",
|
||||
"alert.suggest-error": "<p>NodeBB не може да се свърже с пакетния мениджър. Искате ли да продължите с инсталацията на най-новата версия?</p><div class=\"alert alert-danger\"><strong>Сървърът върна (%1)</strong>: %2</div>",
|
||||
"alert.package-manager-unreachable": "<p>NodeBB не може да се свърже с пакетния мениджър. Не се препоръчва обновяване в момента.</p>",
|
||||
"alert.incompatible": "<p>Вашата версия на NodeBB (версия %1) може да използва най-много версия %2 на тази добавка. Моля, обновете NodeBB, ако искате да инсталирате по-нова версия на тази добавка.</p>",
|
||||
"alert.possibly-incompatible": "<div class=\"alert alert-warning\"><p><strong>Няма информация за съвместимостта</strong></p><p>Тази добавка не е посочила конкретна версия за инсталация, съвместима с Вашата версия на NodeBB. Не можем да гарантираме пълна съвместимост и има възможност Вашият NodeBB да не може да стартира правилно.</p></div><p>Ако NodeBB не може да стартира, използвайте следната команда:</p><pre><code>$ ./nodebb reset plugin=\"%1\"</code></pre><p>Искате ли да продължите с инсталацията на най-новата версия на тази добавка?</p>",
|
||||
"alert.reorder": "Добавките са пренаредени",
|
||||
"alert.reorder-success": "Моля, изградете повторно и рестартирайте NodeBB, за да завърши този процес напълно.",
|
||||
|
||||
"license.title": "Информация за лиценза на добавката",
|
||||
"license.intro": "Добавката „<strong>%1</strong>“ използва лиценза „%2“. Моля, прочетете условията на лиценза и се уверете, че ги разбирате, преди да включите добавката.",
|
||||
|
||||
@@ -18,13 +18,5 @@
|
||||
"alert.update-success": "Джаджите са обновени успешно",
|
||||
"alert.clone-success": "Джаджите са клонирани успешно",
|
||||
|
||||
"error.select-clone": "Изберете страница, от която да клонирате",
|
||||
|
||||
"title": "Заглавие",
|
||||
"title.placeholder": "Заглавие (показва се само в някои контейнери)",
|
||||
"container": "Контейнер",
|
||||
"container.placeholder": "Завлачете и пуснете контейнер или въведете HTML тук.",
|
||||
"show-to-groups": "Показване на групите",
|
||||
"hide-from-groups": "Скриване от групите",
|
||||
"hide-on-mobile": "Скриване на мобилни устройства"
|
||||
"error.select-clone": "Изберете страница, от която да клонирате"
|
||||
}
|
||||
@@ -2,7 +2,7 @@
|
||||
"forum-traffic": "Трафик на форума",
|
||||
"page-views": "Преглеждания на страниците",
|
||||
"unique-visitors": "Уникални посетители",
|
||||
"new-users": "Нови потребители",
|
||||
"users": "Потребители",
|
||||
"posts": "Публикации",
|
||||
"topics": "Теми",
|
||||
"page-views-seven": "Последните 7 дни",
|
||||
@@ -14,23 +14,19 @@
|
||||
"page-views-custom-help": "Въведете интервал от дати, за които искате да видите преглежданията на страниците. Ако не се появи календар за избор, можете да въведете датите във формат: <code>ГГГГ-ММ-ДД</code>",
|
||||
"page-views-custom-error": "Моля, въведете правилен интервал от дати във формата: <code>ГГГГ-ММ-ДД</code>",
|
||||
|
||||
"stats.yesterday": "Вчера",
|
||||
"stats.today": "Днес",
|
||||
"stats.last-week": "Миналата седмица",
|
||||
"stats.this-week": "Тази седмица",
|
||||
"stats.last-month": "Миналия месец",
|
||||
"stats.this-month": "Този месец",
|
||||
"stats.day": "Ден",
|
||||
"stats.week": "Седмица",
|
||||
"stats.month": "Месец",
|
||||
"stats.all": "От началото",
|
||||
|
||||
"updates": "Обновления",
|
||||
"running-version": "Вие използвате <strong>NodeBB версия <span id=\"version\">%1</span></strong>.",
|
||||
"keep-updated": "Стремете се винаги да използвате най-новата версия на NodeBB, за да се възползвате от последните подобрения на сигурността и поправки на проблеми.",
|
||||
"up-to-date": "<p>Вие използвате <strong>най-новата версия</strong> <i class=\"fa fa-check\"></i></p>",
|
||||
"upgrade-available": "<p>Има нова версия (версия %1). Ако имате възможност, <a href=\"https://docs.nodebb.org/configuring/upgrade/\" target=\"_blank\">обновете NodeBB</a>.</p>",
|
||||
"prerelease-upgrade-available": "<p>Това е остаряла предварителна версия на NodeBB. Има нова версия (версия %1). Ако имате възможност, <a href=\"https://docs.nodebb.org/configuring/upgrade/\" target=\"_blank\">обновете NodeBB</a>.</p>",
|
||||
"upgrade-available": "<p>Има нова версия (версия %1). Ако имате възможност, <a href=\"https://docs.nodebb.org/configuring/upgrade/\">обновете NodeBB</a>.</p>",
|
||||
"prerelease-upgrade-available": "<p>Това е остаряла предварителна версия на NodeBB. Има нова версия (версия %1). Ако имате възможност, <a href=\"https://docs.nodebb.org/configuring/upgrade/\">обновете NodeBB</a>.</p>",
|
||||
"prerelease-warning": "<p>Това е версия за <strong>предварителен преглед</strong> на NodeBB. Възможно е да има неочаквани неизправности. <i class=\"fa fa-exclamation-triangle\"></i></p>",
|
||||
"running-in-development": "<span>Форумът работи в режим за разработчици, така че може да бъде уязвим. Моля, свържете се със системния си администратор.</span>",
|
||||
"latest-lookup-failed": "<p>Не може да бъде извършена проверка за последната налична версия на NodeBB</p>",
|
||||
|
||||
"notices": "Забележки",
|
||||
"restart-not-required": "Не се изисква рестартиране",
|
||||
@@ -40,8 +36,8 @@
|
||||
"search-plugin-tooltip": "Инсталирайте добавка за търсене от страницата с добавките, за да включите функционалността за търсене",
|
||||
|
||||
"control-panel": "Системен контрол",
|
||||
"rebuild-and-restart": "Повторно изграждане и рестартиране",
|
||||
"restart": "Рестартиране",
|
||||
"reload": "Рестартиране",
|
||||
"restart": "Повторно изграждане и рестартиране",
|
||||
"restart-warning": "Повторното изграждане и рестартирането на NodeBB ще прекъснат всички връзки за няколко секунди.",
|
||||
"restart-disabled": "Възможностите за повторно изграждане и рестартиране на NodeBB са изключени, тъй като изглежда, че NodeBB не се изпълнява чрез подходящия демон.",
|
||||
"maintenance-mode": "Режим на профилактика",
|
||||
@@ -68,12 +64,7 @@
|
||||
"high-presence-topics": "Теми с най-голяма присъственост",
|
||||
|
||||
"graphs.page-views": "Преглеждания на страниците",
|
||||
"graphs.page-views-registered": "Преглеждания на страниците от регистрирани потребители",
|
||||
"graphs.page-views-guest": "Преглеждания на страниците от гости",
|
||||
"graphs.page-views-bot": "Преглеждания на страниците от ботове",
|
||||
"graphs.unique-visitors": "Уникални посетители",
|
||||
"graphs.registered-users": "Регистрирани потребители",
|
||||
"graphs.anonymous-users": "Анонимни потребители",
|
||||
"last-restarted-by": "Последно рестартиране от",
|
||||
"no-users-browsing": "Няма разглеждащи потребители"
|
||||
"graphs.anonymous-users": "Анонимни потребители"
|
||||
}
|
||||
|
||||
@@ -5,11 +5,13 @@
|
||||
"tooltip": "Подсказка:",
|
||||
"text": "Текст:",
|
||||
"text-class": "Текстов клас: <small>незадължително</small>",
|
||||
"class": "Клас: <small>незадължително</small>",
|
||||
"id": "Идентификатор: <small>незадължително</small>",
|
||||
|
||||
"properties": "Свойства:",
|
||||
"groups": "Групи:",
|
||||
"only-admins": "Да е видимо само за администраторите",
|
||||
"only-global-mods-and-admins": "Да е видимо само за глобалните модератори и администраторите",
|
||||
"only-logged-in": "Да е видимо само за вписаните потребители",
|
||||
"only-guest": "Да е видимо само за гостите",
|
||||
"open-new-window": "Отваряне в нов прозорец",
|
||||
|
||||
"btn.delete": "Изтриване",
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
{
|
||||
"administrators": "Администратори",
|
||||
"global-moderators": "Глобални модератори",
|
||||
"no-global-moderators": "Няма глобални модератори",
|
||||
"moderators-of-category": "%1 модератори",
|
||||
"no-moderators": "Няма модератори",
|
||||
"add-administrator": "Добавяне на администратор",
|
||||
"add-global-moderator": "Добавяне на глобален модератор",
|
||||
"add-moderator": "Добавяне на модератор"
|
||||
}
|
||||
@@ -17,10 +17,8 @@
|
||||
"parent-category": "Базова категория",
|
||||
"optional-parent-category": "(Незадължително) Базова категория",
|
||||
"parent-category-none": "(Няма)",
|
||||
"copy-parent": "Копиране на базовата",
|
||||
"copy-settings": "Копиране на настройките от",
|
||||
"optional-clone-settings": "(Незадължително) Копиране на настройките от категория",
|
||||
"clone-children": "Клониране на дъщерните категории и настройки",
|
||||
"purge": "Изтриване на категорията",
|
||||
|
||||
"enable": "Включване",
|
||||
@@ -30,13 +28,11 @@
|
||||
"select-category": "Изберете категория",
|
||||
"set-parent-category": "Задайте базова категория",
|
||||
|
||||
"privileges.description": "В тази секция можете да настроите правомощията за достъп до различните части на уеб сайта Правомощията могат да бъдат давани на отделни потребители или на цели групи. Изберете обхвата на приложение от падащото меню по-долу.",
|
||||
"privileges.category-selector": "Настройване на правомощията за ",
|
||||
"privileges.description": "В тази секция можете да настроите правомощията за достъп до тази категория. Правомощията могат да бъдат давани на отделни потребители или на цели групи. Можете да добавите нов потребител в тази таблица като го потърсите чрез формуляра по-долу.",
|
||||
"privileges.warning": "<strong>Забележка</strong>: Настройките за правомощията влизат в сила моментално. Не е нужно да запазвате категорията след като промените тези настройки.",
|
||||
"privileges.section-viewing": "Правомощия за преглед",
|
||||
"privileges.section-posting": "Правомощия за публикуване",
|
||||
"privileges.section-moderation": "Правомощия за модериране",
|
||||
"privileges.section-other": "Други",
|
||||
"privileges.section-user": "Потребител",
|
||||
"privileges.search-user": "Добавяне на потребител",
|
||||
"privileges.no-users": "В тази категория няма правомощия за отделни потребители.",
|
||||
@@ -45,12 +41,7 @@
|
||||
"privileges.search-group": "Добавяне на група",
|
||||
"privileges.copy-to-children": "Копиране в наследниците",
|
||||
"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.copy-success": "Правомощията са копирани!",
|
||||
|
||||
"analytics.back": "Назад към списъка с категориите",
|
||||
"analytics.title": "Аналитични данни за категорията „%1“",
|
||||
@@ -76,6 +67,5 @@
|
||||
"alert.find-group": "Търсене на група",
|
||||
"alert.group-search": "Потърсете група тук…",
|
||||
"collapse-all": "Свиване на всички",
|
||||
"expand-all": "Разгъване на всички",
|
||||
"disable-on-create": "Изключване при създаване"
|
||||
"expand-all": "Разгъване на всички"
|
||||
}
|
||||
@@ -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": "Няма данни за доставката"
|
||||
}
|
||||