mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-12-17 22:10:23 +01:00
Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
accee7d05b | ||
|
|
f403a297b4 | ||
|
|
73e7da6f03 | ||
|
|
9c1b24c963 |
@@ -1,8 +0,0 @@
|
||||
# Save as .codeclimate.yml (note leading .) in project root directory
|
||||
languages:
|
||||
Ruby: true
|
||||
JavaScript: true
|
||||
PHP: true
|
||||
exclude_paths:
|
||||
- "public/vendor/*"
|
||||
- "tests/*"
|
||||
@@ -1,6 +1,6 @@
|
||||
root = true
|
||||
|
||||
[{*.js, *.css, *.tpl, *.json}]
|
||||
[*.js, *.css, *.tpl, *.json]
|
||||
indent_style = tab
|
||||
end_of_line = lf
|
||||
charset = utf-8
|
||||
|
||||
13
.gitattributes
vendored
13
.gitattributes
vendored
@@ -1,13 +0,0 @@
|
||||
# These files are text and should be normalized (convert crlf => lf)
|
||||
*.json text
|
||||
*.css text
|
||||
*.less text
|
||||
*.tpl text
|
||||
*.html text
|
||||
*.js text
|
||||
*.md text
|
||||
|
||||
# Images should be treated as binary
|
||||
# (binary is a macro for -text -diff)
|
||||
*.png binary
|
||||
*.jpg binary
|
||||
12
.github/ISSUE_TEMPLATE.md
vendored
12
.github/ISSUE_TEMPLATE.md
vendored
@@ -1,12 +0,0 @@
|
||||
Please include the following information when submitting a bug report/issue:
|
||||
|
||||
* NodeBB version and git hash (to find your git hash, execute `git rev-parse HEAD` from the main NodeBB directory)
|
||||
* Exact steps to cause this issue
|
||||
1. First I did this...
|
||||
2. Then, I clicked on this item...
|
||||
* What you expected
|
||||
* e.g. I expected *abc* to *xyz*
|
||||
* What happened instead
|
||||
* e.g. Instead, I got *zyx* and NodeBB set fire to my house
|
||||
|
||||
Thank you!
|
||||
25
.gitignore
vendored
25
.gitignore
vendored
@@ -8,6 +8,7 @@ public/css/*.css
|
||||
*.sublime-project
|
||||
*.sublime-workspace
|
||||
.project
|
||||
.idea
|
||||
*.swp
|
||||
Vagrantfile
|
||||
.vagrant
|
||||
@@ -22,32 +23,12 @@ pidfile
|
||||
|
||||
# templates
|
||||
/public/templates
|
||||
/public/sounds
|
||||
|
||||
/public/uploads
|
||||
/public/sounds
|
||||
|
||||
# compiled files
|
||||
/public/stylesheet.css
|
||||
/public/admin.css
|
||||
/public/nodebb.min.js
|
||||
/public/nodebb.min.js.map
|
||||
/public/acp.min.js
|
||||
/public/acp.min.js.map
|
||||
|
||||
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio
|
||||
*.iml
|
||||
|
||||
## Directory-based project format:
|
||||
.idea/
|
||||
.vscode/
|
||||
|
||||
## File-based project format:
|
||||
*.ipr
|
||||
*.iws
|
||||
|
||||
## Transifex
|
||||
tx.exe
|
||||
.transifexrc
|
||||
|
||||
##Coverage output
|
||||
coverage
|
||||
/public/nodebb.min.js.map
|
||||
@@ -24,7 +24,7 @@
|
||||
// "single" : require single quotes
|
||||
// "double" : require double quotes
|
||||
"undef" : true, // true: Require all non-global variables to be declared (prevents global leaks)
|
||||
"unused" : true, // true: Require all defined variables be used
|
||||
"unused" : false, // true: Require all defined variables be used TODO: Set this to true, update codebase.
|
||||
"strict" : true, // true: Requires all functions run in ES5 Strict Mode
|
||||
"trailing" : false, // true: Prohibit trailing whitespaces
|
||||
"maxparams" : false, // {int} Max number of formal params allowed per function
|
||||
|
||||
19
.travis.yml
19
.travis.yml
@@ -1,27 +1,10 @@
|
||||
services:
|
||||
- redis-server
|
||||
before_install:
|
||||
- "sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10"
|
||||
- "echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list"
|
||||
- "sudo apt-get update"
|
||||
- "sudo apt-get install mongodb-org-server"
|
||||
- npm i --production
|
||||
- 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}"
|
||||
before_script:
|
||||
- "until nc -z localhost 27017; do echo Waiting for MongoDB; sleep 1; done"
|
||||
- node app --setup="{\"url\":\"http://127.0.0.1:4567/\",\"secret\":\"abcdef\",\"database\":\"redis\",\"redis:host\":\"127.0.0.1\",\"redis:port\":6379,\"redis:password\":\"\",\"redis:database\":0,\"admin:username\":\"admin\",\"admin:email\":\"test@example.org\",\"admin:password\":\"abcdef\",\"admin:password:confirm\":\"abcdef\"}" --ci="{\"host\":\"127.0.0.1\",\"port\":6379,\"database\":0}"
|
||||
language: node_js
|
||||
env:
|
||||
- CXX=g++-4.8
|
||||
addons:
|
||||
apt:
|
||||
sources:
|
||||
- ubuntu-toolchain-r-test
|
||||
packages:
|
||||
- g++-4.8
|
||||
node_js:
|
||||
- "4.2"
|
||||
- "4.1"
|
||||
- "4.0"
|
||||
- "0.11"
|
||||
- "0.10"
|
||||
branches:
|
||||
|
||||
206
.tx/config
206
.tx/config
@@ -7,9 +7,7 @@ source_file = public/language/en_GB/category.json
|
||||
source_lang = en_GB
|
||||
trans.ar = public/language/ar/category.json
|
||||
trans.bn = public/language/bn/category.json
|
||||
trans.bg = public/language/bg/category.json
|
||||
trans.cs = public/language/cs/category.json
|
||||
trans.da = public/language/da/category.json
|
||||
trans.de = public/language/de/category.json
|
||||
trans.el = public/language/el/category.json
|
||||
trans.en_US = public/language/en_US/category.json
|
||||
@@ -19,10 +17,8 @@ trans.et = public/language/et/category.json
|
||||
trans.fa_IR = public/language/fa_IR/category.json
|
||||
trans.fi = public/language/fi/category.json
|
||||
trans.fr = public/language/fr/category.json
|
||||
trans.gl = public/language/gl/category.json
|
||||
trans.he = public/language/he/category.json
|
||||
trans.hu = public/language/hu/category.json
|
||||
trans.id = public/language/id/category.json
|
||||
trans.it = public/language/it/category.json
|
||||
trans.ja = public/language/ja/category.json
|
||||
trans.ko = public/language/ko/category.json
|
||||
@@ -34,11 +30,8 @@ trans.pl = public/language/pl/category.json
|
||||
trans.pt_BR = public/language/pt_BR/category.json
|
||||
trans.ru = public/language/ru/category.json
|
||||
trans.ro = public/language/ro/category.json
|
||||
trans.rw = public/language/rw/category.json
|
||||
trans.sc = public/language/sc/category.json
|
||||
trans.sk = public/language/sk/category.json
|
||||
trans.sl = public/language/sl/category.json
|
||||
trans.sr = public/language/sr/category.json
|
||||
trans.sv = public/language/sv/category.json
|
||||
trans.th = public/language/th/category.json
|
||||
trans.tr = public/language/tr/category.json
|
||||
@@ -53,9 +46,7 @@ source_file = public/language/en_GB/login.json
|
||||
source_lang = en_GB
|
||||
trans.ar = public/language/ar/login.json
|
||||
trans.bn = public/language/bn/login.json
|
||||
trans.bg = public/language/bg/login.json
|
||||
trans.cs = public/language/cs/login.json
|
||||
trans.da = public/language/da/login.json
|
||||
trans.de = public/language/de/login.json
|
||||
trans.el = public/language/el/login.json
|
||||
trans.en_US = public/language/en_US/login.json
|
||||
@@ -65,10 +56,8 @@ trans.et = public/language/et/login.json
|
||||
trans.fa_IR = public/language/fa_IR/login.json
|
||||
trans.fi = public/language/fi/login.json
|
||||
trans.fr = public/language/fr/login.json
|
||||
trans.gl = public/language/gl/login.json
|
||||
trans.he = public/language/he/login.json
|
||||
trans.hu = public/language/hu/login.json
|
||||
trans.id = public/language/id/login.json
|
||||
trans.it = public/language/it/login.json
|
||||
trans.ja = public/language/ja/login.json
|
||||
trans.ko = public/language/ko/login.json
|
||||
@@ -80,11 +69,8 @@ trans.pl = public/language/pl/login.json
|
||||
trans.pt_BR = public/language/pt_BR/login.json
|
||||
trans.ru = public/language/ru/login.json
|
||||
trans.ro = public/language/ro/login.json
|
||||
trans.rw = public/language/rw/login.json
|
||||
trans.sc = public/language/sc/login.json
|
||||
trans.sk = public/language/sk/login.json
|
||||
trans.sl = public/language/sl/login.json
|
||||
trans.sr = public/language/sr/login.json
|
||||
trans.sv = public/language/sv/login.json
|
||||
trans.th = public/language/th/login.json
|
||||
trans.tr = public/language/tr/login.json
|
||||
@@ -94,14 +80,11 @@ trans.zh_TW = public/language/zh_TW/login.json
|
||||
type = KEYVALUEJSON
|
||||
|
||||
[nodebb.recent]
|
||||
file_filter = public/language/<lang>/recent.json
|
||||
source_file = public/language/en_GB/recent.json
|
||||
source_lang = en_GB
|
||||
trans.ar = public/language/ar/recent.json
|
||||
trans.bn = public/language/bn/recent.json
|
||||
trans.bg = public/language/bg/recent.json
|
||||
trans.cs = public/language/cs/recent.json
|
||||
trans.da = public/language/da/recent.json
|
||||
trans.de = public/language/de/recent.json
|
||||
trans.el = public/language/el/recent.json
|
||||
trans.en_US = public/language/en_US/recent.json
|
||||
@@ -111,10 +94,8 @@ trans.et = public/language/et/recent.json
|
||||
trans.fa_IR = public/language/fa_IR/recent.json
|
||||
trans.fi = public/language/fi/recent.json
|
||||
trans.fr = public/language/fr/recent.json
|
||||
trans.gl = public/language/gl/recent.json
|
||||
trans.he = public/language/he/recent.json
|
||||
trans.hu = public/language/hu/recent.json
|
||||
trans.id = public/language/id/recent.json
|
||||
trans.it = public/language/it/recent.json
|
||||
trans.ja = public/language/ja/recent.json
|
||||
trans.ko = public/language/ko/recent.json
|
||||
@@ -126,11 +107,8 @@ trans.pl = public/language/pl/recent.json
|
||||
trans.pt_BR = public/language/pt_BR/recent.json
|
||||
trans.ru = public/language/ru/recent.json
|
||||
trans.ro = public/language/ro/recent.json
|
||||
trans.rw = public/language/rw/recent.json
|
||||
trans.sc = public/language/sc/recent.json
|
||||
trans.sk = public/language/sk/recent.json
|
||||
trans.sl = public/language/sl/recent.json
|
||||
trans.sr = public/language/sr/recent.json
|
||||
trans.sv = public/language/sv/recent.json
|
||||
trans.th = public/language/th/recent.json
|
||||
trans.tr = public/language/tr/recent.json
|
||||
@@ -140,14 +118,11 @@ trans.zh_TW = public/language/zh_TW/recent.json
|
||||
type = KEYVALUEJSON
|
||||
|
||||
[nodebb.unread]
|
||||
file_filter = public/language/<lang>/unread.json
|
||||
source_file = public/language/en_GB/unread.json
|
||||
source_lang = en_GB
|
||||
trans.ar = public/language/ar/unread.json
|
||||
trans.bn = public/language/bn/unread.json
|
||||
trans.bg = public/language/bg/unread.json
|
||||
trans.cs = public/language/cs/unread.json
|
||||
trans.da = public/language/da/unread.json
|
||||
trans.de = public/language/de/unread.json
|
||||
trans.el = public/language/el/unread.json
|
||||
trans.en_US = public/language/en_US/unread.json
|
||||
@@ -157,10 +132,8 @@ trans.et = public/language/et/unread.json
|
||||
trans.fa_IR = public/language/fa_IR/unread.json
|
||||
trans.fi = public/language/fi/unread.json
|
||||
trans.fr = public/language/fr/unread.json
|
||||
trans.gl = public/language/gl/unread.json
|
||||
trans.he = public/language/he/unread.json
|
||||
trans.hu = public/language/hu/unread.json
|
||||
trans.id = public/language/id/unread.json
|
||||
trans.it = public/language/it/unread.json
|
||||
trans.ja = public/language/ja/unread.json
|
||||
trans.ko = public/language/ko/unread.json
|
||||
@@ -172,11 +145,8 @@ trans.pl = public/language/pl/unread.json
|
||||
trans.pt_BR = public/language/pt_BR/unread.json
|
||||
trans.ru = public/language/ru/unread.json
|
||||
trans.ro = public/language/ro/unread.json
|
||||
trans.rw = public/language/rw/unread.json
|
||||
trans.sc = public/language/sc/unread.json
|
||||
trans.sk = public/language/sk/unread.json
|
||||
trans.sl = public/language/sl/unread.json
|
||||
trans.sr = public/language/sr/unread.json
|
||||
trans.sv = public/language/sv/unread.json
|
||||
trans.th = public/language/th/unread.json
|
||||
trans.tr = public/language/tr/unread.json
|
||||
@@ -186,14 +156,11 @@ trans.zh_TW = public/language/zh_TW/unread.json
|
||||
type = KEYVALUEJSON
|
||||
|
||||
[nodebb.modules]
|
||||
file_filter = public/language/<lang>/modules.json
|
||||
source_file = public/language/en_GB/modules.json
|
||||
source_lang = en_GB
|
||||
trans.ar = public/language/ar/modules.json
|
||||
trans.bn = public/language/bn/modules.json
|
||||
trans.bg = public/language/bg/modules.json
|
||||
trans.cs = public/language/cs/modules.json
|
||||
trans.da = public/language/da/modules.json
|
||||
trans.de = public/language/de/modules.json
|
||||
trans.el = public/language/el/modules.json
|
||||
trans.en_US = public/language/en_US/modules.json
|
||||
@@ -203,10 +170,8 @@ trans.et = public/language/et/modules.json
|
||||
trans.fa_IR = public/language/fa_IR/modules.json
|
||||
trans.fi = public/language/fi/modules.json
|
||||
trans.fr = public/language/fr/modules.json
|
||||
trans.gl = public/language/gl/modules.json
|
||||
trans.he = public/language/he/modules.json
|
||||
trans.hu = public/language/hu/modules.json
|
||||
trans.id = public/language/id/modules.json
|
||||
trans.it = public/language/it/modules.json
|
||||
trans.ja = public/language/ja/modules.json
|
||||
trans.ko = public/language/ko/modules.json
|
||||
@@ -218,11 +183,8 @@ trans.pl = public/language/pl/modules.json
|
||||
trans.pt_BR = public/language/pt_BR/modules.json
|
||||
trans.ru = public/language/ru/modules.json
|
||||
trans.ro = public/language/ro/modules.json
|
||||
trans.rw = public/language/rw/modules.json
|
||||
trans.sc = public/language/sc/modules.json
|
||||
trans.sk = public/language/sk/modules.json
|
||||
trans.sl = public/language/sl/modules.json
|
||||
trans.sr = public/language/sr/modules.json
|
||||
trans.sv = public/language/sv/modules.json
|
||||
trans.th = public/language/th/modules.json
|
||||
trans.tr = public/language/tr/modules.json
|
||||
@@ -232,14 +194,11 @@ trans.zh_TW = public/language/zh_TW/modules.json
|
||||
type = KEYVALUEJSON
|
||||
|
||||
[nodebb.register]
|
||||
file_filter = public/language/<lang>/register.json
|
||||
source_file = public/language/en_GB/register.json
|
||||
source_lang = en_GB
|
||||
trans.ar = public/language/ar/register.json
|
||||
trans.bn = public/language/bn/register.json
|
||||
trans.bg = public/language/bg/register.json
|
||||
trans.cs = public/language/cs/register.json
|
||||
trans.da = public/language/da/register.json
|
||||
trans.de = public/language/de/register.json
|
||||
trans.el = public/language/el/register.json
|
||||
trans.en_US = public/language/en_US/register.json
|
||||
@@ -249,10 +208,8 @@ trans.et = public/language/et/register.json
|
||||
trans.fa_IR = public/language/fa_IR/register.json
|
||||
trans.fi = public/language/fi/register.json
|
||||
trans.fr = public/language/fr/register.json
|
||||
trans.gl = public/language/gl/register.json
|
||||
trans.he = public/language/he/register.json
|
||||
trans.hu = public/language/hu/register.json
|
||||
trans.id = public/language/id/register.json
|
||||
trans.it = public/language/it/register.json
|
||||
trans.ja = public/language/ja/register.json
|
||||
trans.ko = public/language/ko/register.json
|
||||
@@ -264,11 +221,8 @@ trans.pl = public/language/pl/register.json
|
||||
trans.pt_BR = public/language/pt_BR/register.json
|
||||
trans.ru = public/language/ru/register.json
|
||||
trans.ro = public/language/ro/register.json
|
||||
trans.rw = public/language/rw/register.json
|
||||
trans.sc = public/language/sc/register.json
|
||||
trans.sk = public/language/sk/register.json
|
||||
trans.sl = public/language/sl/register.json
|
||||
trans.sr = public/language/sr/register.json
|
||||
trans.sv = public/language/sv/register.json
|
||||
trans.th = public/language/th/register.json
|
||||
trans.tr = public/language/tr/register.json
|
||||
@@ -278,14 +232,11 @@ trans.zh_TW = public/language/zh_TW/register.json
|
||||
type = KEYVALUEJSON
|
||||
|
||||
[nodebb.user]
|
||||
file_filter = public/language/<lang>/user.json
|
||||
source_file = public/language/en_GB/user.json
|
||||
source_lang = en_GB
|
||||
trans.ar = public/language/ar/user.json
|
||||
trans.bn = public/language/bn/user.json
|
||||
trans.bg = public/language/bg/user.json
|
||||
trans.cs = public/language/cs/user.json
|
||||
trans.da = public/language/da/user.json
|
||||
trans.de = public/language/de/user.json
|
||||
trans.el = public/language/el/user.json
|
||||
trans.en_US = public/language/en_US/user.json
|
||||
@@ -295,10 +246,8 @@ trans.et = public/language/et/user.json
|
||||
trans.fa_IR = public/language/fa_IR/user.json
|
||||
trans.fi = public/language/fi/user.json
|
||||
trans.fr = public/language/fr/user.json
|
||||
trans.gl = public/language/gl/user.json
|
||||
trans.he = public/language/he/user.json
|
||||
trans.hu = public/language/hu/user.json
|
||||
trans.id = public/language/id/user.json
|
||||
trans.it = public/language/it/user.json
|
||||
trans.ja = public/language/ja/user.json
|
||||
trans.ko = public/language/ko/user.json
|
||||
@@ -310,11 +259,8 @@ trans.pl = public/language/pl/user.json
|
||||
trans.pt_BR = public/language/pt_BR/user.json
|
||||
trans.ru = public/language/ru/user.json
|
||||
trans.ro = public/language/ro/user.json
|
||||
trans.rw = public/language/rw/user.json
|
||||
trans.sc = public/language/sc/user.json
|
||||
trans.sk = public/language/sk/user.json
|
||||
trans.sl = public/language/sl/user.json
|
||||
trans.sr = public/language/sr/user.json
|
||||
trans.sv = public/language/sv/user.json
|
||||
trans.th = public/language/th/user.json
|
||||
trans.tr = public/language/tr/user.json
|
||||
@@ -324,14 +270,11 @@ trans.zh_TW = public/language/zh_TW/user.json
|
||||
type = KEYVALUEJSON
|
||||
|
||||
[nodebb.global]
|
||||
file_filter = public/language/<lang>/global.json
|
||||
source_file = public/language/en_GB/global.json
|
||||
source_lang = en_GB
|
||||
trans.ar = public/language/ar/global.json
|
||||
trans.bn = public/language/bn/global.json
|
||||
trans.bg = public/language/bg/global.json
|
||||
trans.cs = public/language/cs/global.json
|
||||
trans.da = public/language/da/global.json
|
||||
trans.de = public/language/de/global.json
|
||||
trans.el = public/language/el/global.json
|
||||
trans.en_US = public/language/en_US/global.json
|
||||
@@ -341,10 +284,8 @@ trans.et = public/language/et/global.json
|
||||
trans.fa_IR = public/language/fa_IR/global.json
|
||||
trans.fi = public/language/fi/global.json
|
||||
trans.fr = public/language/fr/global.json
|
||||
trans.gl = public/language/gl/global.json
|
||||
trans.he = public/language/he/global.json
|
||||
trans.hu = public/language/hu/global.json
|
||||
trans.id = public/language/id/global.json
|
||||
trans.it = public/language/it/global.json
|
||||
trans.ja = public/language/ja/global.json
|
||||
trans.ko = public/language/ko/global.json
|
||||
@@ -356,11 +297,8 @@ trans.pl = public/language/pl/global.json
|
||||
trans.pt_BR = public/language/pt_BR/global.json
|
||||
trans.ru = public/language/ru/global.json
|
||||
trans.ro = public/language/ro/global.json
|
||||
trans.rw = public/language/rw/global.json
|
||||
trans.sc = public/language/sc/global.json
|
||||
trans.sk = public/language/sk/global.json
|
||||
trans.sl = public/language/sl/global.json
|
||||
trans.sr = public/language/sr/global.json
|
||||
trans.sv = public/language/sv/global.json
|
||||
trans.th = public/language/th/global.json
|
||||
trans.tr = public/language/tr/global.json
|
||||
@@ -370,14 +308,11 @@ trans.zh_TW = public/language/zh_TW/global.json
|
||||
type = KEYVALUEJSON
|
||||
|
||||
[nodebb.notifications]
|
||||
file_filter = public/language/<lang>/notifications.json
|
||||
source_file = public/language/en_GB/notifications.json
|
||||
source_lang = en_GB
|
||||
trans.ar = public/language/ar/notifications.json
|
||||
trans.bn = public/language/bn/notifications.json
|
||||
trans.bg = public/language/bg/notifications.json
|
||||
trans.cs = public/language/cs/notifications.json
|
||||
trans.da = public/language/da/notifications.json
|
||||
trans.de = public/language/de/notifications.json
|
||||
trans.el = public/language/el/notifications.json
|
||||
trans.en_US = public/language/en_US/notifications.json
|
||||
@@ -387,10 +322,8 @@ trans.et = public/language/et/notifications.json
|
||||
trans.fa_IR = public/language/fa_IR/notifications.json
|
||||
trans.fi = public/language/fi/notifications.json
|
||||
trans.fr = public/language/fr/notifications.json
|
||||
trans.gl = public/language/gl/notifications.json
|
||||
trans.he = public/language/he/notifications.json
|
||||
trans.hu = public/language/hu/notifications.json
|
||||
trans.id = public/language/id/notifications.json
|
||||
trans.it = public/language/it/notifications.json
|
||||
trans.ja = public/language/ja/notifications.json
|
||||
trans.ko = public/language/ko/notifications.json
|
||||
@@ -402,11 +335,8 @@ trans.pl = public/language/pl/notifications.json
|
||||
trans.pt_BR = public/language/pt_BR/notifications.json
|
||||
trans.ru = public/language/ru/notifications.json
|
||||
trans.ro = public/language/ro/notifications.json
|
||||
trans.rw = public/language/rw/notifications.json
|
||||
trans.sc = public/language/sc/notifications.json
|
||||
trans.sk = public/language/sk/notifications.json
|
||||
trans.sl = public/language/sl/notifications.json
|
||||
trans.sr = public/language/sr/notifications.json
|
||||
trans.sv = public/language/sv/notifications.json
|
||||
trans.th = public/language/th/notifications.json
|
||||
trans.tr = public/language/tr/notifications.json
|
||||
@@ -416,14 +346,11 @@ trans.zh_TW = public/language/zh_TW/notifications.json
|
||||
type = KEYVALUEJSON
|
||||
|
||||
[nodebb.reset_password]
|
||||
file_filter = public/language/<lang>/reset_password.json
|
||||
source_file = public/language/en_GB/reset_password.json
|
||||
source_lang = en_GB
|
||||
trans.ar = public/language/ar/reset_password.json
|
||||
trans.bn = public/language/bn/reset_password.json
|
||||
trans.bg = public/language/bg/reset_password.json
|
||||
trans.cs = public/language/cs/reset_password.json
|
||||
trans.da = public/language/da/reset_password.json
|
||||
trans.de = public/language/de/reset_password.json
|
||||
trans.el = public/language/el/reset_password.json
|
||||
trans.en_US = public/language/en_US/reset_password.json
|
||||
@@ -433,10 +360,8 @@ trans.et = public/language/et/reset_password.json
|
||||
trans.fa_IR = public/language/fa_IR/reset_password.json
|
||||
trans.fi = public/language/fi/reset_password.json
|
||||
trans.fr = public/language/fr/reset_password.json
|
||||
trans.gl = public/language/gl/reset_password.json
|
||||
trans.he = public/language/he/reset_password.json
|
||||
trans.hu = public/language/hu/reset_password.json
|
||||
trans.id = public/language/id/reset_password.json
|
||||
trans.it = public/language/it/reset_password.json
|
||||
trans.ja = public/language/ja/reset_password.json
|
||||
trans.ko = public/language/ko/reset_password.json
|
||||
@@ -448,11 +373,8 @@ trans.pl = public/language/pl/reset_password.json
|
||||
trans.pt_BR = public/language/pt_BR/reset_password.json
|
||||
trans.ru = public/language/ru/reset_password.json
|
||||
trans.ro = public/language/ro/reset_password.json
|
||||
trans.rw = public/language/rw/reset_password.json
|
||||
trans.sc = public/language/sc/reset_password.json
|
||||
trans.sk = public/language/sk/reset_password.json
|
||||
trans.sl = public/language/sl/reset_password.json
|
||||
trans.sr = public/language/sr/reset_password.json
|
||||
trans.sv = public/language/sv/reset_password.json
|
||||
trans.th = public/language/th/reset_password.json
|
||||
trans.tr = public/language/tr/reset_password.json
|
||||
@@ -462,14 +384,11 @@ trans.zh_TW = public/language/zh_TW/reset_password.json
|
||||
type = KEYVALUEJSON
|
||||
|
||||
[nodebb.users]
|
||||
file_filter = public/language/<lang>/users.json
|
||||
source_file = public/language/en_GB/users.json
|
||||
source_lang = en_GB
|
||||
trans.ar = public/language/ar/users.json
|
||||
trans.bn = public/language/bn/users.json
|
||||
trans.bg = public/language/bg/users.json
|
||||
trans.cs = public/language/cs/users.json
|
||||
trans.da = public/language/da/users.json
|
||||
trans.de = public/language/de/users.json
|
||||
trans.el = public/language/el/users.json
|
||||
trans.en_US = public/language/en_US/users.json
|
||||
@@ -479,10 +398,8 @@ trans.et = public/language/et/users.json
|
||||
trans.fa_IR = public/language/fa_IR/users.json
|
||||
trans.fi = public/language/fi/users.json
|
||||
trans.fr = public/language/fr/users.json
|
||||
trans.gl = public/language/gl/users.json
|
||||
trans.he = public/language/he/users.json
|
||||
trans.hu = public/language/hu/users.json
|
||||
trans.id = public/language/id/users.json
|
||||
trans.it = public/language/it/users.json
|
||||
trans.ja = public/language/ja/users.json
|
||||
trans.ko = public/language/ko/users.json
|
||||
@@ -494,11 +411,8 @@ trans.pl = public/language/pl/users.json
|
||||
trans.pt_BR = public/language/pt_BR/users.json
|
||||
trans.ru = public/language/ru/users.json
|
||||
trans.ro = public/language/ro/users.json
|
||||
trans.rw = public/language/rw/users.json
|
||||
trans.sc = public/language/sc/users.json
|
||||
trans.sk = public/language/sk/users.json
|
||||
trans.sl = public/language/sl/users.json
|
||||
trans.sr = public/language/sr/users.json
|
||||
trans.sv = public/language/sv/users.json
|
||||
trans.th = public/language/th/users.json
|
||||
trans.tr = public/language/tr/users.json
|
||||
@@ -507,15 +421,12 @@ trans.zh_CN = public/language/zh_CN/users.json
|
||||
trans.zh_TW = public/language/zh_TW/users.json
|
||||
type = KEYVALUEJSON
|
||||
|
||||
[nodebb.language-1]
|
||||
file_filter = public/language/<lang>/language.json
|
||||
[nodebb.language]
|
||||
source_file = public/language/en_GB/language.json
|
||||
source_lang = en_GB
|
||||
trans.ar = public/language/ar/language.json
|
||||
trans.bn = public/language/bn/language.json
|
||||
trans.bg = public/language/bg/language.json
|
||||
trans.cs = public/language/cs/language.json
|
||||
trans.da = public/language/da/language.json
|
||||
trans.de = public/language/de/language.json
|
||||
trans.el = public/language/el/language.json
|
||||
trans.en_US = public/language/en_US/language.json
|
||||
@@ -525,10 +436,8 @@ trans.et = public/language/et/language.json
|
||||
trans.fa_IR = public/language/fa_IR/language.json
|
||||
trans.fi = public/language/fi/language.json
|
||||
trans.fr = public/language/fr/language.json
|
||||
trans.gl = public/language/gl/language.json
|
||||
trans.he = public/language/he/language.json
|
||||
trans.hu = public/language/hu/language.json
|
||||
trans.id = public/language/id/language.json
|
||||
trans.it = public/language/it/language.json
|
||||
trans.ja = public/language/ja/language.json
|
||||
trans.ko = public/language/ko/language.json
|
||||
@@ -540,11 +449,8 @@ trans.pl = public/language/pl/language.json
|
||||
trans.pt_BR = public/language/pt_BR/language.json
|
||||
trans.ru = public/language/ru/language.json
|
||||
trans.ro = public/language/ro/language.json
|
||||
trans.rw = public/language/rw/language.json
|
||||
trans.sc = public/language/sc/language.json
|
||||
trans.sk = public/language/sk/language.json
|
||||
trans.sl = public/language/sl/language.json
|
||||
trans.sr = public/language/sr/language.json
|
||||
trans.sv = public/language/sv/language.json
|
||||
trans.th = public/language/th/language.json
|
||||
trans.tr = public/language/tr/language.json
|
||||
@@ -554,14 +460,11 @@ trans.zh_TW = public/language/zh_TW/language.json
|
||||
type = KEYVALUEJSON
|
||||
|
||||
[nodebb.pages]
|
||||
file_filter = public/language/<lang>/pages.json
|
||||
source_file = public/language/en_GB/pages.json
|
||||
source_lang = en_GB
|
||||
trans.ar = public/language/ar/pages.json
|
||||
trans.bn = public/language/bn/pages.json
|
||||
trans.bg = public/language/bg/pages.json
|
||||
trans.cs = public/language/cs/pages.json
|
||||
trans.da = public/language/da/pages.json
|
||||
trans.de = public/language/de/pages.json
|
||||
trans.el = public/language/el/pages.json
|
||||
trans.en_US = public/language/en_US/pages.json
|
||||
@@ -571,10 +474,8 @@ trans.et = public/language/et/pages.json
|
||||
trans.fa_IR = public/language/fa_IR/pages.json
|
||||
trans.fi = public/language/fi/pages.json
|
||||
trans.fr = public/language/fr/pages.json
|
||||
trans.gl = public/language/gl/pages.json
|
||||
trans.he = public/language/he/pages.json
|
||||
trans.hu = public/language/hu/pages.json
|
||||
trans.id = public/language/id/pages.json
|
||||
trans.it = public/language/it/pages.json
|
||||
trans.ja = public/language/ja/pages.json
|
||||
trans.ko = public/language/ko/pages.json
|
||||
@@ -586,11 +487,8 @@ trans.pl = public/language/pl/pages.json
|
||||
trans.pt_BR = public/language/pt_BR/pages.json
|
||||
trans.ru = public/language/ru/pages.json
|
||||
trans.ro = public/language/ro/pages.json
|
||||
trans.rw = public/language/rw/pages.json
|
||||
trans.sc = public/language/sc/pages.json
|
||||
trans.sk = public/language/sk/pages.json
|
||||
trans.sl = public/language/sl/pages.json
|
||||
trans.sr = public/language/sr/pages.json
|
||||
trans.sv = public/language/sv/pages.json
|
||||
trans.th = public/language/th/pages.json
|
||||
trans.tr = public/language/tr/pages.json
|
||||
@@ -600,14 +498,11 @@ trans.zh_TW = public/language/zh_TW/pages.json
|
||||
type = KEYVALUEJSON
|
||||
|
||||
[nodebb.topic]
|
||||
file_filter = public/language/<lang>/topic.json
|
||||
source_file = public/language/en_GB/topic.json
|
||||
source_lang = en_GB
|
||||
trans.ar = public/language/ar/topic.json
|
||||
trans.bn = public/language/bn/topic.json
|
||||
trans.bg = public/language/bg/topic.json
|
||||
trans.cs = public/language/cs/topic.json
|
||||
trans.da = public/language/da/topic.json
|
||||
trans.de = public/language/de/topic.json
|
||||
trans.el = public/language/el/topic.json
|
||||
trans.en_US = public/language/en_US/topic.json
|
||||
@@ -617,10 +512,8 @@ trans.et = public/language/et/topic.json
|
||||
trans.fa_IR = public/language/fa_IR/topic.json
|
||||
trans.fi = public/language/fi/topic.json
|
||||
trans.fr = public/language/fr/topic.json
|
||||
trans.gl = public/language/gl/topic.json
|
||||
trans.he = public/language/he/topic.json
|
||||
trans.hu = public/language/hu/topic.json
|
||||
trans.id = public/language/id/topic.json
|
||||
trans.it = public/language/it/topic.json
|
||||
trans.ja = public/language/ja/topic.json
|
||||
trans.ko = public/language/ko/topic.json
|
||||
@@ -632,11 +525,8 @@ trans.pl = public/language/pl/topic.json
|
||||
trans.pt_BR = public/language/pt_BR/topic.json
|
||||
trans.ru = public/language/ru/topic.json
|
||||
trans.ro = public/language/ro/topic.json
|
||||
trans.rw = public/language/rw/topic.json
|
||||
trans.sc = public/language/sc/topic.json
|
||||
trans.sk = public/language/sk/topic.json
|
||||
trans.sl = public/language/sl/topic.json
|
||||
trans.sr = public/language/sr/topic.json
|
||||
trans.sv = public/language/sv/topic.json
|
||||
trans.th = public/language/th/topic.json
|
||||
trans.tr = public/language/tr/topic.json
|
||||
@@ -646,14 +536,11 @@ trans.zh_TW = public/language/zh_TW/topic.json
|
||||
type = KEYVALUEJSON
|
||||
|
||||
[nodebb.success]
|
||||
file_filter = public/language/<lang>/success.json
|
||||
source_file = public/language/en_GB/success.json
|
||||
source_lang = en_GB
|
||||
trans.ar = public/language/ar/success.json
|
||||
trans.bn = public/language/bn/success.json
|
||||
trans.bg = public/language/bg/success.json
|
||||
trans.cs = public/language/cs/success.json
|
||||
trans.da = public/language/da/success.json
|
||||
trans.de = public/language/de/success.json
|
||||
trans.el = public/language/el/success.json
|
||||
trans.en_US = public/language/en_US/success.json
|
||||
@@ -663,10 +550,8 @@ trans.et = public/language/et/success.json
|
||||
trans.fa_IR = public/language/fa_IR/success.json
|
||||
trans.fi = public/language/fi/success.json
|
||||
trans.fr = public/language/fr/success.json
|
||||
trans.gl = public/language/gl/success.json
|
||||
trans.he = public/language/he/success.json
|
||||
trans.hu = public/language/hu/success.json
|
||||
trans.id = public/language/id/success.json
|
||||
trans.it = public/language/it/success.json
|
||||
trans.ja = public/language/ja/success.json
|
||||
trans.ko = public/language/ko/success.json
|
||||
@@ -678,11 +563,8 @@ trans.pl = public/language/pl/success.json
|
||||
trans.pt_BR = public/language/pt_BR/success.json
|
||||
trans.ru = public/language/ru/success.json
|
||||
trans.ro = public/language/ro/success.json
|
||||
trans.rw = public/language/rw/success.json
|
||||
trans.sc = public/language/sc/success.json
|
||||
trans.sk = public/language/sk/success.json
|
||||
trans.sl = public/language/sl/success.json
|
||||
trans.sr = public/language/sr/success.json
|
||||
trans.sv = public/language/sv/success.json
|
||||
trans.th = public/language/th/success.json
|
||||
trans.tr = public/language/tr/success.json
|
||||
@@ -692,14 +574,11 @@ trans.zh_TW = public/language/zh_TW/success.json
|
||||
type = KEYVALUEJSON
|
||||
|
||||
[nodebb.error]
|
||||
file_filter = public/language/<lang>/error.json
|
||||
source_file = public/language/en_GB/error.json
|
||||
source_lang = en_GB
|
||||
trans.ar = public/language/ar/error.json
|
||||
trans.bn = public/language/bn/error.json
|
||||
trans.bg = public/language/bg/error.json
|
||||
trans.cs = public/language/cs/error.json
|
||||
trans.da = public/language/da/error.json
|
||||
trans.de = public/language/de/error.json
|
||||
trans.el = public/language/el/error.json
|
||||
trans.en_US = public/language/en_US/error.json
|
||||
@@ -709,10 +588,8 @@ trans.et = public/language/et/error.json
|
||||
trans.fa_IR = public/language/fa_IR/error.json
|
||||
trans.fi = public/language/fi/error.json
|
||||
trans.fr = public/language/fr/error.json
|
||||
trans.gl = public/language/gl/error.json
|
||||
trans.he = public/language/he/error.json
|
||||
trans.hu = public/language/hu/error.json
|
||||
trans.id = public/language/id/error.json
|
||||
trans.it = public/language/it/error.json
|
||||
trans.ja = public/language/ja/error.json
|
||||
trans.ko = public/language/ko/error.json
|
||||
@@ -724,11 +601,8 @@ trans.pl = public/language/pl/error.json
|
||||
trans.pt_BR = public/language/pt_BR/error.json
|
||||
trans.ru = public/language/ru/error.json
|
||||
trans.ro = public/language/ro/error.json
|
||||
trans.rw = public/language/rw/error.json
|
||||
trans.sc = public/language/sc/error.json
|
||||
trans.sk = public/language/sk/error.json
|
||||
trans.sl = public/language/sl/error.json
|
||||
trans.sr = public/language/sr/error.json
|
||||
trans.sv = public/language/sv/error.json
|
||||
trans.th = public/language/th/error.json
|
||||
trans.tr = public/language/tr/error.json
|
||||
@@ -738,14 +612,11 @@ trans.zh_TW = public/language/zh_TW/error.json
|
||||
type = KEYVALUEJSON
|
||||
|
||||
[nodebb.tags]
|
||||
file_filter = public/language/<lang>/tags.json
|
||||
source_file = public/language/en_GB/tags.json
|
||||
source_lang = en_GB
|
||||
trans.ar = public/language/ar/tags.json
|
||||
trans.bn = public/language/bn/tags.json
|
||||
trans.bg = public/language/bg/tags.json
|
||||
trans.cs = public/language/cs/tags.json
|
||||
trans.da = public/language/da/tags.json
|
||||
trans.de = public/language/de/tags.json
|
||||
trans.el = public/language/el/tags.json
|
||||
trans.en_US = public/language/en_US/tags.json
|
||||
@@ -755,10 +626,8 @@ trans.et = public/language/et/tags.json
|
||||
trans.fa_IR = public/language/fa_IR/tags.json
|
||||
trans.fi = public/language/fi/tags.json
|
||||
trans.fr = public/language/fr/tags.json
|
||||
trans.gl = public/language/gl/tags.json
|
||||
trans.he = public/language/he/tags.json
|
||||
trans.hu = public/language/hu/tags.json
|
||||
trans.id = public/language/id/tags.json
|
||||
trans.it = public/language/it/tags.json
|
||||
trans.ja = public/language/ja/tags.json
|
||||
trans.ko = public/language/ko/tags.json
|
||||
@@ -770,11 +639,8 @@ trans.pl = public/language/pl/tags.json
|
||||
trans.pt_BR = public/language/pt_BR/tags.json
|
||||
trans.ru = public/language/ru/tags.json
|
||||
trans.ro = public/language/ro/tags.json
|
||||
trans.rw = public/language/rw/tags.json
|
||||
trans.sc = public/language/sc/tags.json
|
||||
trans.sk = public/language/sk/tags.json
|
||||
trans.sl = public/language/sl/tags.json
|
||||
trans.sr = public/language/sr/tags.json
|
||||
trans.sv = public/language/sv/tags.json
|
||||
trans.th = public/language/th/tags.json
|
||||
trans.tr = public/language/tr/tags.json
|
||||
@@ -784,14 +650,11 @@ trans.zh_TW = public/language/zh_TW/tags.json
|
||||
type = KEYVALUEJSON
|
||||
|
||||
[nodebb.email]
|
||||
file_filter = public/language/<lang>/email.json
|
||||
source_file = public/language/en_GB/email.json
|
||||
source_lang = en_GB
|
||||
trans.ar = public/language/ar/email.json
|
||||
trans.bn = public/language/bn/email.json
|
||||
trans.bg = public/language/bg/email.json
|
||||
trans.cs = public/language/cs/email.json
|
||||
trans.da = public/language/da/email.json
|
||||
trans.de = public/language/de/email.json
|
||||
trans.el = public/language/el/email.json
|
||||
trans.en_US = public/language/en_US/email.json
|
||||
@@ -801,10 +664,8 @@ trans.et = public/language/et/email.json
|
||||
trans.fa_IR = public/language/fa_IR/email.json
|
||||
trans.fi = public/language/fi/email.json
|
||||
trans.fr = public/language/fr/email.json
|
||||
trans.gl = public/language/gl/email.json
|
||||
trans.he = public/language/he/email.json
|
||||
trans.hu = public/language/hu/email.json
|
||||
trans.id = public/language/id/email.json
|
||||
trans.it = public/language/it/email.json
|
||||
trans.ja = public/language/ja/email.json
|
||||
trans.ko = public/language/ko/email.json
|
||||
@@ -816,11 +677,8 @@ trans.pl = public/language/pl/email.json
|
||||
trans.pt_BR = public/language/pt_BR/email.json
|
||||
trans.ru = public/language/ru/email.json
|
||||
trans.ro = public/language/ro/email.json
|
||||
trans.rw = public/language/rw/email.json
|
||||
trans.sc = public/language/sc/email.json
|
||||
trans.sk = public/language/sk/email.json
|
||||
trans.sl = public/language/sl/email.json
|
||||
trans.sr = public/language/sr/email.json
|
||||
trans.sv = public/language/sv/email.json
|
||||
trans.th = public/language/th/email.json
|
||||
trans.tr = public/language/tr/email.json
|
||||
@@ -830,14 +688,11 @@ trans.zh_TW = public/language/zh_TW/email.json
|
||||
type = KEYVALUEJSON
|
||||
|
||||
[nodebb.search]
|
||||
file_filter = public/language/<lang>/search.json
|
||||
source_file = public/language/en_GB/search.json
|
||||
source_lang = en_GB
|
||||
trans.ar = public/language/ar/search.json
|
||||
trans.bn = public/language/bn/search.json
|
||||
trans.bg = public/language/bg/search.json
|
||||
trans.cs = public/language/cs/search.json
|
||||
trans.da = public/language/da/search.json
|
||||
trans.de = public/language/de/search.json
|
||||
trans.el = public/language/el/search.json
|
||||
trans.en_US = public/language/en_US/search.json
|
||||
@@ -847,10 +702,8 @@ trans.et = public/language/et/search.json
|
||||
trans.fa_IR = public/language/fa_IR/search.json
|
||||
trans.fi = public/language/fi/search.json
|
||||
trans.fr = public/language/fr/search.json
|
||||
trans.gl = public/language/gl/search.json
|
||||
trans.he = public/language/he/search.json
|
||||
trans.hu = public/language/hu/search.json
|
||||
trans.id = public/language/id/search.json
|
||||
trans.it = public/language/it/search.json
|
||||
trans.ja = public/language/ja/search.json
|
||||
trans.ko = public/language/ko/search.json
|
||||
@@ -862,11 +715,8 @@ trans.pl = public/language/pl/search.json
|
||||
trans.pt_BR = public/language/pt_BR/search.json
|
||||
trans.ru = public/language/ru/search.json
|
||||
trans.ro = public/language/ro/search.json
|
||||
trans.rw = public/language/rw/search.json
|
||||
trans.sc = public/language/sc/search.json
|
||||
trans.sk = public/language/sk/search.json
|
||||
trans.sl = public/language/sl/search.json
|
||||
trans.sr = public/language/sr/search.json
|
||||
trans.sv = public/language/sv/search.json
|
||||
trans.th = public/language/th/search.json
|
||||
trans.tr = public/language/tr/search.json
|
||||
@@ -876,14 +726,11 @@ trans.zh_TW = public/language/zh_TW/search.json
|
||||
type = KEYVALUEJSON
|
||||
|
||||
[nodebb.groups]
|
||||
file_filter = public/language/<lang>/groups.json
|
||||
source_file = public/language/en_GB/groups.json
|
||||
source_lang = en_GB
|
||||
trans.ar = public/language/ar/groups.json
|
||||
trans.bn = public/language/bn/groups.json
|
||||
trans.bg = public/language/bg/groups.json
|
||||
trans.cs = public/language/cs/groups.json
|
||||
trans.da = public/language/da/groups.json
|
||||
trans.de = public/language/de/groups.json
|
||||
trans.el = public/language/el/groups.json
|
||||
trans.en_US = public/language/en_US/groups.json
|
||||
@@ -893,10 +740,8 @@ trans.et = public/language/et/groups.json
|
||||
trans.fa_IR = public/language/fa_IR/groups.json
|
||||
trans.fi = public/language/fi/groups.json
|
||||
trans.fr = public/language/fr/groups.json
|
||||
trans.gl = public/language/gl/groups.json
|
||||
trans.he = public/language/he/groups.json
|
||||
trans.hu = public/language/hu/groups.json
|
||||
trans.id = public/language/id/groups.json
|
||||
trans.it = public/language/it/groups.json
|
||||
trans.ja = public/language/ja/groups.json
|
||||
trans.ko = public/language/ko/groups.json
|
||||
@@ -908,61 +753,12 @@ trans.pl = public/language/pl/groups.json
|
||||
trans.pt_BR = public/language/pt_BR/groups.json
|
||||
trans.ru = public/language/ru/groups.json
|
||||
trans.ro = public/language/ro/groups.json
|
||||
trans.rw = public/language/rw/groups.json
|
||||
trans.sc = public/language/sc/groups.json
|
||||
trans.sk = public/language/sk/groups.json
|
||||
trans.sl = public/language/sl/groups.json
|
||||
trans.sr = public/language/sr/groups.json
|
||||
trans.sv = public/language/sv/groups.json
|
||||
trans.th = public/language/th/groups.json
|
||||
trans.tr = public/language/tr/groups.json
|
||||
trans.vi = public/language/vi/groups.json
|
||||
trans.zh_CN = public/language/zh_CN/groups.json
|
||||
trans.zh_TW = public/language/zh_TW/groups.json
|
||||
type = KEYVALUEJSON
|
||||
|
||||
[nodebb.uploads]
|
||||
file_filter = public/language/<lang>/uploads.json
|
||||
source_file = public/language/en_GB/uploads.json
|
||||
source_lang = en_GB
|
||||
trans.ar = public/language/ar/uploads.json
|
||||
trans.bn = public/language/bn/uploads.json
|
||||
trans.bg = public/language/bg/uploads.json
|
||||
trans.cs = public/language/cs/uploads.json
|
||||
trans.da = public/language/da/uploads.json
|
||||
trans.de = public/language/de/uploads.json
|
||||
trans.el = public/language/el/uploads.json
|
||||
trans.en_US = public/language/en_US/uploads.json
|
||||
trans.en@pirate = public/language/en@pirate/uploads.json
|
||||
trans.es = public/language/es/uploads.json
|
||||
trans.et = public/language/et/uploads.json
|
||||
trans.fa_IR = public/language/fa_IR/uploads.json
|
||||
trans.fi = public/language/fi/uploads.json
|
||||
trans.fr = public/language/fr/uploads.json
|
||||
trans.gl = public/language/gl/uploads.json
|
||||
trans.he = public/language/he/uploads.json
|
||||
trans.hu = public/language/hu/uploads.json
|
||||
trans.id = public/language/id/uploads.json
|
||||
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.ms = public/language/ms/uploads.json
|
||||
trans.nb = public/language/nb/uploads.json
|
||||
trans.nl = public/language/nl/uploads.json
|
||||
trans.pl = public/language/pl/uploads.json
|
||||
trans.pt_BR = public/language/pt_BR/uploads.json
|
||||
trans.ru = public/language/ru/uploads.json
|
||||
trans.ro = public/language/ro/uploads.json
|
||||
trans.rw = public/language/rw/uploads.json
|
||||
trans.sc = public/language/sc/uploads.json
|
||||
trans.sk = public/language/sk/uploads.json
|
||||
trans.sl = public/language/sl/uploads.json
|
||||
trans.sr = public/language/sr/uploads.json
|
||||
trans.sv = public/language/sv/uploads.json
|
||||
trans.th = public/language/th/uploads.json
|
||||
trans.tr = public/language/tr/uploads.json
|
||||
trans.vi = public/language/vi/uploads.json
|
||||
trans.zh_CN = public/language/zh_CN/uploads.json
|
||||
trans.zh_TW = public/language/zh_TW/uploads.json
|
||||
type = KEYVALUEJSON
|
||||
@@ -1,23 +1,7 @@
|
||||
# Submitting a Pull Request to NodeBB?
|
||||
|
||||
First of all, thank you! Please consider this [style guide](https://docs.nodebb.org/en/latest/contributing/style-guide.html) when submitting your changes. Also, please join our [community](https://community.nodebb.org) to meet other NodeBB developers and designers :)
|
||||
|
||||
## Contributor License Agreement
|
||||
|
||||
Thank you for considering contributing to NodeBB. **Before you are able to submit a pull request, please take a moment to read our [contributor license agreement](https://gist.github.com/psychobunny/65946d7aa8854b12fab9)** and agree to it on the pull request page on GitHub. In summary, signing this document means that 1) you own the code that you are contributing and 2) you give permission to NodeBB Inc. to license the code to others. This agreement applies to any repository under the NodeBB organization.
|
||||
|
||||
If you are writing contributions as part of employment from another company / individual, then your employer will need to sign a separate agreement. Please [contact us](mailto:accounts@nodebb.org) so that we can send this additional agreement to your employer.
|
||||
|
||||
|
||||
# Having problems installing NodeBB?
|
||||
|
||||
Chances are somebody has run into this problem before. After consulting our [documentation](https://docs.nodebb.org/en/latest/installing/os.html), please head over to our [community support forum](https://community.nodebb.org) for advice.
|
||||
|
||||
# Found a Security Vulnerability?
|
||||
|
||||
If you believe you have identified a security vulnerability with NodeBB, report it as soon as possible via email to **security@nodebb.org**.
|
||||
A member of the NodeBB security team will respond to the issue.
|
||||
Please do not post it to the public bug tracker.
|
||||
|
||||
# Issues & Bugs
|
||||
|
||||
@@ -25,6 +9,11 @@ Thanks for reporting an issue with NodeBB! Please follow these guidelines in ord
|
||||
|
||||
In general, if we can't reproduce it, we can't fix it!
|
||||
|
||||
> #### **Important**
|
||||
> If you believe you have identified a security vulnerability with NodeBB, report it as soon as possible via email to **security@nodebb.org**.
|
||||
> A member of the NodeBB security team will respond to the issue.
|
||||
> Please do not post it to the public bug tracker.
|
||||
|
||||
## Try the latest version of NodeBB
|
||||
|
||||
There is a chance that the issue you are experiencing may have already been fixed.
|
||||
@@ -50,17 +39,8 @@ $ git rev-parse HEAD
|
||||
|
||||
If you have downloaded the `.zip` or `.tar.gz` packages from GitHub (or elsewhere), please let us know.
|
||||
|
||||
## Provide theme versions if issue is related to the theme/display
|
||||
|
||||
``` bash
|
||||
$ npm ls nodebb-theme-vanilla nodebb-theme-lavender
|
||||
nodebb@0.7.0-dev /home/julian/Projects/nodebb/forum
|
||||
├── nodebb-theme-lavender@0.2.13
|
||||
└── nodebb-theme-vanilla@0.2.35
|
||||
```
|
||||
|
||||
## Attempt to use `git bisect`
|
||||
|
||||
If you have installed NodeBB via GitHub clone, are familiar with utilising git, and are willing to help us narrow down the specific commit that causes a bug, consider running `git bisect`.
|
||||
|
||||
A full guide can be found here: [Debugging with Git/Binary Search](http://git-scm.com/book/en/Git-Tools-Debugging-with-Git#Binary-Search)
|
||||
A full guide can be found here: [Debugging with Git/Binary Search](http://git-scm.com/book/en/Git-Tools-Debugging-with-Git#Binary-Search)
|
||||
15
Dockerfile
15
Dockerfile
@@ -1,15 +0,0 @@
|
||||
# The base image is the latest 4.x node (LTS) on jessie (debian)
|
||||
# -onbuild will install the node dependencies found in the project package.json
|
||||
# and copy its content in /usr/src/app, its WORKDIR
|
||||
FROM node:4-onbuild
|
||||
|
||||
ENV NODE_ENV=production \
|
||||
daemon=false \
|
||||
silent=false
|
||||
|
||||
# nodebb setup will ask you for connection information to a redis (default), mongodb then run the forum
|
||||
# nodebb upgrade is not included and might be desired
|
||||
CMD node app --setup && npm start
|
||||
|
||||
# the default port for NodeBB is exposed outside the container
|
||||
EXPOSE 4567
|
||||
107
Gruntfile.js
107
Gruntfile.js
@@ -1,107 +0,0 @@
|
||||
"use strict";
|
||||
|
||||
var fork = require('child_process').fork,
|
||||
env = process.env,
|
||||
worker,
|
||||
incomplete = [];
|
||||
|
||||
|
||||
module.exports = function(grunt) {
|
||||
var args = [];
|
||||
if (!grunt.option('verbose')) {
|
||||
args.push('--log-level=info');
|
||||
}
|
||||
|
||||
function update(action, filepath, target) {
|
||||
var updateArgs = args.slice(),
|
||||
fromFile = '',
|
||||
compiling = '',
|
||||
time = Date.now();
|
||||
|
||||
if (target === 'lessUpdated_Client') {
|
||||
fromFile = ['js', 'tpl', 'acpLess'];
|
||||
compiling = 'clientLess';
|
||||
} else if (target === 'lessUpdated_Admin') {
|
||||
fromFile = ['js', 'tpl', 'clientLess'];
|
||||
compiling = 'acpLess';
|
||||
} else if (target === 'clientUpdated') {
|
||||
fromFile = ['clientLess', 'acpLess', 'tpl'];
|
||||
compiling = 'js';
|
||||
} else if (target === 'templatesUpdated') {
|
||||
fromFile = ['js', 'clientLess', 'acpLess'];
|
||||
compiling = 'tpl';
|
||||
} else if (target === 'serverUpdated') {
|
||||
fromFile = ['clientLess', 'acpLess', 'js', 'tpl'];
|
||||
}
|
||||
|
||||
fromFile = fromFile.filter(function(ext) {
|
||||
return incomplete.indexOf(ext) === -1;
|
||||
});
|
||||
|
||||
updateArgs.push('--from-file=' + fromFile.join(','));
|
||||
incomplete.push(compiling);
|
||||
|
||||
worker.kill();
|
||||
worker = fork('app.js', updateArgs, { env: env });
|
||||
|
||||
worker.on('message', function() {
|
||||
if (incomplete.length) {
|
||||
incomplete = [];
|
||||
|
||||
if (grunt.option('verbose')) {
|
||||
grunt.log.writeln('NodeBB restarted in ' + (Date.now() - time) + ' ms');
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
grunt.initConfig({
|
||||
watch: {
|
||||
lessUpdated_Client: {
|
||||
files: [
|
||||
'public/*.less',
|
||||
'node_modules/nodebb-*/*.less', 'node_modules/nodebb-*/**/*.less',
|
||||
'!node_modules/nodebb-*/node_modules/**',
|
||||
'!node_modules/nodebb-*/.git/**'
|
||||
]
|
||||
},
|
||||
lessUpdated_Admin: {
|
||||
files: ['public/**/*.less']
|
||||
},
|
||||
clientUpdated: {
|
||||
files: [
|
||||
'public/src/**/*.js',
|
||||
'node_modules/nodebb-*/*.js', 'node_modules/nodebb-*/**/*.js',
|
||||
'!node_modules/nodebb-*/node_modules/**',
|
||||
'node_modules/templates.js/lib/templates.js',
|
||||
'!node_modules/nodebb-*/.git/**'
|
||||
]
|
||||
},
|
||||
serverUpdated: {
|
||||
files: ['*.js', 'install/*.js', 'src/**/*.js']
|
||||
},
|
||||
templatesUpdated: {
|
||||
files: [
|
||||
'src/views/**/*.tpl',
|
||||
'node_modules/nodebb-*/*.tpl', 'node_modules/nodebb-*/**/*.tpl',
|
||||
'!node_modules/nodebb-*/node_modules/**',
|
||||
'!node_modules/nodebb-*/.git/**'
|
||||
]
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
grunt.loadNpmTasks('grunt-contrib-watch');
|
||||
|
||||
if (grunt.option('skip')) {
|
||||
grunt.registerTask('default', ['watch:serverUpdated']);
|
||||
} else {
|
||||
grunt.registerTask('default', ['watch']);
|
||||
}
|
||||
|
||||
|
||||
env.NODE_ENV = 'development';
|
||||
|
||||
worker = fork('app.js', args, { env: env });
|
||||
grunt.event.on('watch', update);
|
||||
};
|
||||
137
README.md
137
README.md
@@ -1,75 +1,66 @@
|
||||
# <img alt="NodeBB" src="http://i.imgur.com/mYxPPtB.png" />
|
||||
# <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://david-dm.org/nodebb/nodebb)
|
||||
[](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.
|
||||
|
||||
Additional functionality is enabled through the use of third-party plugins.
|
||||
|
||||
* [Get NodeBB](http://www.nodebb.org/ "NodeBB")
|
||||
* [Demo & Meta Discussion](http://community.nodebb.org)
|
||||
* [Documentation & Installation Instructions](http://docs.nodebb.org)
|
||||
* [Help translate NodeBB](https://www.transifex.com/projects/p/nodebb/)
|
||||
* [NodeBB Blog](http://blog.nodebb.org)
|
||||
* [Join us on IRC](https://kiwiirc.com/client/irc.freenode.net/nodebb) - #nodebb on Freenode
|
||||
* [Follow us on Twitter](http://www.twitter.com/NodeBB/ "NodeBB Twitter")
|
||||
* [Like us on Facebook](http://www.facebook.com/NodeBB/ "NodeBB Facebook")
|
||||
|
||||
## Screenshots
|
||||
|
||||
[](http://i.imgur.com/VCoOFyq.png)
|
||||
[](http://i.imgur.com/FLOUuIq.png)
|
||||
[](http://i.imgur.com/Ud1LrfI.png)
|
||||
[](http://i.imgur.com/h6yZ66s.png)
|
||||
[](http://i.imgur.com/o90kVPi.png)
|
||||
[](http://i.imgur.com/AaRRrU2.png)
|
||||
[](http://i.imgur.com/LmHtPho.png)
|
||||
[](http://i.imgur.com/paiJPJk.jpg)
|
||||
|
||||
[](http://i.imgur.com/8OLssij.png)
|
||||
[](http://i.imgur.com/JKOc0LZ.png)
|
||||
|
||||
## How can I follow along/contribute?
|
||||
|
||||
* Our feature roadmap is hosted on the project wiki's [Version History / Roadmap](https://github.com/NodeBB/NodeBB/wiki/Version-History-%26-Roadmap)
|
||||
* 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 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.
|
||||
|
||||
## Requirements
|
||||
|
||||
NodeBB requires the following software to be installed:
|
||||
|
||||
* A version of Node.js at least 0.10 or greater
|
||||
* Redis, version 2.8.9 or greater **or** MongoDB, version 2.6 or greater
|
||||
* nginx, version 1.3.13 or greater (**only if** intending to use nginx to proxy requests to a NodeBB)
|
||||
|
||||
## Installation
|
||||
|
||||
[Please refer to platform-specific installation documentation](http://docs.nodebb.org/en/latest/installing/os.html)
|
||||
|
||||
## Securing NodeBB
|
||||
|
||||
It is important to ensure that your NodeBB and database servers are secured. Bear these points in mind:
|
||||
|
||||
1. While some distributions set up Redis with a more restrictive configuration, Redis by default listens to all interfaces, which is especially dangerous when a server is open to the public. Some suggestions:
|
||||
* Set `bind_address` to `127.0.0.1` so as to restrict access to the local machine only
|
||||
* Use `requirepass` to secure Redis behind a password (preferably a long one)
|
||||
* Familiarise yourself with [Redis Security](http://redis.io/topics/security)
|
||||
2. Use `iptables` to secure your server from unintended open ports. In Ubuntu, `ufw` provides a friendlier interface to working with `iptables`.
|
||||
* e.g. If your NodeBB is proxied, no ports should be open except 80 (and possibly 22, for SSH access)
|
||||
|
||||
## Upgrading NodeBB
|
||||
|
||||
Detailed upgrade instructions are listed in [Upgrading NodeBB](https://docs.nodebb.org/en/latest/upgrading/index.html)
|
||||
|
||||
## License
|
||||
|
||||
NodeBB is licensed under the **GNU General Public License v3 (GPL-3)** (http://www.gnu.org/copyleft/gpl.html).
|
||||
|
||||
Interested in a sublicense agreement for use of NodeBB in a non-free/restrictive environment? Contact us at sales@nodebb.org.
|
||||
[](https://travis-ci.org/NodeBB/NodeBB)
|
||||
[](https://david-dm.org/nodebb/nodebb)
|
||||
[](https://codeclimate.com/github/NodeBB/NodeBB)
|
||||
[](https://readthedocs.org/projects/nodebb/?badge=latest)
|
||||
|
||||
**NodeBB Forum Software** is powered by Node.js and built on a Redis database. It utilizes web sockets for instant interactions and real-time notifications. NodeBB is compatible down to IE8 and has many modern features out of the box such as social network integration and streaming discussions.
|
||||
|
||||
* [Get NodeBB](http://www.nodebb.org/ "NodeBB")
|
||||
* [Demo & Meta Discussion](http://community.nodebb.org)
|
||||
* [NodeBB Blog](http://blog.nodebb.org)
|
||||
* [Documentation & Installation Instructions](http://docs.nodebb.org)
|
||||
* [Join us on IRC](https://kiwiirc.com/client/irc.freenode.net/nodebb) - #nodebb on Freenode
|
||||
* [Follow us on Twitter](http://www.twitter.com/NodeBB/ "NodeBB Twitter")
|
||||
* [Like us on Facebook](http://www.facebook.com/NodeBB/ "NodeBB Facebook")
|
||||
* [Get Plugins](http://community.nodebb.org/category/7/nodebb-plugins "NodeBB Plugins")
|
||||
* [Get Themes](http://community.nodebb.org/category/10/nodebb-themes "NodeBB Themes")
|
||||
* [Help translate NodeBB](https://www.transifex.com/projects/p/nodebb/)
|
||||
|
||||
## Screenshots
|
||||
|
||||
[<img src="http://i.imgur.com/FLOUuIqb.png" />](http://i.imgur.com/FLOUuIq.png) [<img src="http://i.imgur.com/Ud1LrfIb.png" />](http://i.imgur.com/Ud1LrfI.png) [<img src="http://i.imgur.com/ZC8W39ab.png" />](http://i.imgur.com/ZC8W39a.png) [<img src="http://i.imgur.com/o90kVPib.png" />](http://i.imgur.com/o90kVPi.png) [<img src="http://i.imgur.com/AaRRrU2b.png" />](http://i.imgur.com/AaRRrU2.png) [<img src="http://i.imgur.com/LmHtPhob.png" />](http://i.imgur.com/LmHtPho.png) [<img src="http://i.imgur.com/paiJPJkb.jpg" />](http://i.imgur.com/paiJPJk.jpg) [<img src="http://i.imgur.com/ZfavPHDb.png" />](http://i.imgur.com/ZfavPHD.png) [<img src="http://i.imgur.com/8OLssij.png" />](http://i.imgur.com/8OLssij.png) [<img src="http://i.imgur.com/JKOc0LZ.png"/>](http://i.imgur.com/JKOc0LZ.png)
|
||||
|
||||
Credit: [Convoe](http://www.convoe.com), [Kano](http://www.kano.me), [Manchester United Forum](http://manutdforums.com/).
|
||||
|
||||
|
||||
## How can I follow along/contribute?
|
||||
|
||||
* Our feature roadmap is hosted on the project wiki's [Version History / Roadmap](https://github.com/NodeBB/NodeBB/wiki/Version-History-%26-Roadmap)
|
||||
* 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 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.
|
||||
|
||||
## Requirements
|
||||
|
||||
NodeBB requires the following software to be installed:
|
||||
|
||||
* A version of Node.js at least 0.10 or greater
|
||||
* Redis, version 2.6 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)
|
||||
|
||||
## Installation
|
||||
|
||||
[Please refer to platform-specific installation documentation](http://docs.nodebb.org/en/latest/installing/os.html)
|
||||
|
||||
## Securing NodeBB
|
||||
|
||||
It is important to ensure that your NodeBB and database servers are secured. Bear these points in mind:
|
||||
|
||||
1. While some distributions set up Redis with a more restrictive configuration, Redis by default listens to all interfaces, which is especially dangerous when a server is open to the public. Some suggestions:
|
||||
* Set `bind_address` to `127.0.0.1` so as to restrict access to the local machine only
|
||||
* Use `requirepass` to secure Redis behind a password (preferably a long one)
|
||||
* Familiarise yourself with [Redis Security](http://redis.io/topics/security)
|
||||
2. Use `iptables` to secure your server from unintended open ports. In Ubuntu, `ufw` provides a friendlier interface to working with `iptables`.
|
||||
* e.g. If your NodeBB is proxied, no ports should be open except 80 (and possibly 22, for SSH access)
|
||||
|
||||
## Upgrading NodeBB
|
||||
|
||||
Detailed upgrade instructions are listed in [Upgrading NodeBB](https://docs.nodebb.org/en/latest/upgrading/index.html)
|
||||
|
||||
## License
|
||||
|
||||
NodeBB is licensed under the **GNU General Public License v3 (GPL-3)** (http://www.gnu.org/copyleft/gpl.html)
|
||||
|
||||
721
app.js
721
app.js
@@ -1,330 +1,391 @@
|
||||
/*
|
||||
NodeBB - A better forum platform for the modern web
|
||||
https://github.com/NodeBB/NodeBB/
|
||||
Copyright (C) 2013-2014 NodeBB Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
"use strict";
|
||||
/*global require, global, process*/
|
||||
|
||||
var nconf = require('nconf');
|
||||
nconf.argv().env('__');
|
||||
|
||||
var url = require('url'),
|
||||
async = require('async'),
|
||||
winston = require('winston'),
|
||||
colors = require('colors'),
|
||||
path = require('path'),
|
||||
pkg = require('./package.json'),
|
||||
file = require('./src/file');
|
||||
|
||||
global.env = process.env.NODE_ENV || 'production';
|
||||
|
||||
winston.remove(winston.transports.Console);
|
||||
winston.add(winston.transports.Console, {
|
||||
colorize: true,
|
||||
timestamp: function() {
|
||||
var date = new Date();
|
||||
return date.getDate() + '/' + (date.getMonth() + 1) + ' ' + date.toTimeString().substr(0,5) + ' [' + global.process.pid + ']';
|
||||
},
|
||||
level: nconf.get('log-level') || (global.env === 'production' ? 'info' : 'verbose')
|
||||
});
|
||||
|
||||
|
||||
// Alternate configuration file support
|
||||
var configFile = path.join(__dirname, '/config.json');
|
||||
|
||||
if (nconf.get('config')) {
|
||||
configFile = path.resolve(__dirname, nconf.get('config'));
|
||||
}
|
||||
|
||||
var configExists = file.existsSync(configFile) || (nconf.get('url') && nconf.get('secret') && nconf.get('database'));
|
||||
|
||||
loadConfig();
|
||||
|
||||
if (!process.send) {
|
||||
// If run using `node app`, log GNU copyright info along with server info
|
||||
winston.info('NodeBB v' + nconf.get('version') + ' Copyright (C) 2013-2014 NodeBB Inc.');
|
||||
winston.info('This program comes with ABSOLUTELY NO WARRANTY.');
|
||||
winston.info('This is free software, and you are welcome to redistribute it under certain conditions.');
|
||||
winston.info('');
|
||||
}
|
||||
|
||||
|
||||
if (nconf.get('setup') || nconf.get('install')) {
|
||||
setup();
|
||||
} else if (!configExists) {
|
||||
require('./install/web').install(nconf.get('port'));
|
||||
} else if (nconf.get('upgrade')) {
|
||||
upgrade();
|
||||
} else if (nconf.get('reset')) {
|
||||
require('./src/reset').reset();
|
||||
} else if (nconf.get('activate')) {
|
||||
activate();
|
||||
} else if (nconf.get('plugins')) {
|
||||
listPlugins();
|
||||
} else {
|
||||
start();
|
||||
}
|
||||
|
||||
function loadConfig() {
|
||||
winston.verbose('* using configuration stored in: %s', configFile);
|
||||
|
||||
nconf.file({
|
||||
file: configFile
|
||||
});
|
||||
|
||||
nconf.defaults({
|
||||
base_dir: __dirname,
|
||||
themes_path: path.join(__dirname, 'node_modules'),
|
||||
views_dir: path.join(__dirname, 'public/templates'),
|
||||
version: pkg.version
|
||||
});
|
||||
|
||||
if (!nconf.get('isCluster')) {
|
||||
nconf.set('isPrimary', 'true');
|
||||
nconf.set('isCluster', 'false');
|
||||
}
|
||||
|
||||
// Ensure themes_path is a full filepath
|
||||
nconf.set('themes_path', path.resolve(__dirname, nconf.get('themes_path')));
|
||||
nconf.set('core_templates_path', path.join(__dirname, 'src/views'));
|
||||
nconf.set('base_templates_path', path.join(nconf.get('themes_path'), 'nodebb-theme-persona/templates'));
|
||||
}
|
||||
|
||||
|
||||
function start() {
|
||||
var db = require('./src/database');
|
||||
|
||||
// nconf defaults, if not set in config
|
||||
if (!nconf.get('upload_path')) {
|
||||
nconf.set('upload_path', '/public/uploads');
|
||||
}
|
||||
// Parse out the relative_url and other goodies from the configured URL
|
||||
var urlObject = url.parse(nconf.get('url'));
|
||||
var relativePath = urlObject.pathname !== '/' ? urlObject.pathname : '';
|
||||
nconf.set('base_url', urlObject.protocol + '//' + urlObject.host);
|
||||
nconf.set('secure', urlObject.protocol === 'https:');
|
||||
nconf.set('use_port', !!urlObject.port);
|
||||
nconf.set('relative_path', relativePath);
|
||||
nconf.set('port', urlObject.port || nconf.get('port') || nconf.get('PORT') || 4567);
|
||||
nconf.set('upload_url', nconf.get('upload_path').replace(/^\/public/, ''));
|
||||
|
||||
if (nconf.get('isPrimary') === 'true') {
|
||||
winston.info('Time: %s', (new Date()).toString());
|
||||
winston.info('Initializing NodeBB v%s', nconf.get('version'));
|
||||
|
||||
|
||||
var host = nconf.get(nconf.get('database') + ':host'),
|
||||
storeLocation = host ? 'at ' + host + (host.indexOf('/') === -1 ? ':' + nconf.get(nconf.get('database') + ':port') : '') : '';
|
||||
|
||||
winston.verbose('* using %s store %s', nconf.get('database'), storeLocation);
|
||||
winston.verbose('* using themes stored in: %s', nconf.get('themes_path'));
|
||||
}
|
||||
|
||||
process.on('SIGTERM', shutdown);
|
||||
process.on('SIGINT', shutdown);
|
||||
process.on('SIGHUP', restart);
|
||||
process.on('message', function(message) {
|
||||
if (typeof message !== 'object') {
|
||||
return;
|
||||
}
|
||||
var meta = require('./src/meta');
|
||||
var emitter = require('./src/emitter');
|
||||
switch (message.action) {
|
||||
case 'reload':
|
||||
meta.reload();
|
||||
break;
|
||||
case 'js-propagate':
|
||||
meta.js.target = message.data;
|
||||
emitter.emit('meta:js.compiled');
|
||||
winston.verbose('[cluster] Client-side javascript and mapping propagated to worker %s', process.pid);
|
||||
break;
|
||||
case 'css-propagate':
|
||||
meta.css.cache = message.cache;
|
||||
meta.css.acpCache = message.acpCache;
|
||||
emitter.emit('meta:css.compiled');
|
||||
winston.verbose('[cluster] Stylesheets propagated to worker %s', process.pid);
|
||||
break;
|
||||
case 'templates:compiled':
|
||||
emitter.emit('templates:compiled');
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
process.on('uncaughtException', function(err) {
|
||||
winston.error(err.stack);
|
||||
console.log(err.stack);
|
||||
|
||||
require('./src/meta').js.killMinifier();
|
||||
shutdown(1);
|
||||
});
|
||||
|
||||
async.waterfall([
|
||||
async.apply(db.init),
|
||||
async.apply(db.checkCompatibility),
|
||||
function(next) {
|
||||
require('./src/meta').configs.init(next);
|
||||
},
|
||||
function(next) {
|
||||
if (nconf.get('dep-check') === undefined || nconf.get('dep-check') !== false) {
|
||||
require('./src/meta').dependencies.check(next);
|
||||
} else {
|
||||
winston.warn('[init] Dependency checking skipped!');
|
||||
setImmediate(next);
|
||||
}
|
||||
},
|
||||
function(next) {
|
||||
require('./src/upgrade').check(next);
|
||||
},
|
||||
function(next) {
|
||||
var webserver = require('./src/webserver');
|
||||
require('./src/socket.io').init(webserver.server);
|
||||
|
||||
if (nconf.get('isPrimary') === 'true' && !nconf.get('jobsDisabled')) {
|
||||
require('./src/notifications').init();
|
||||
require('./src/user').startJobs();
|
||||
}
|
||||
|
||||
webserver.listen();
|
||||
}
|
||||
], function(err) {
|
||||
if (err) {
|
||||
switch(err.message) {
|
||||
case 'schema-out-of-date':
|
||||
winston.warn('Your NodeBB schema is out-of-date. Please run the following command to bring your dataset up to spec:');
|
||||
winston.warn(' ./nodebb upgrade');
|
||||
break;
|
||||
case 'dependencies-out-of-date':
|
||||
winston.warn('One or more of NodeBB\'s dependent packages are out-of-date. Please run the following command to update them:');
|
||||
winston.warn(' ./nodebb upgrade');
|
||||
break;
|
||||
case 'dependencies-missing':
|
||||
winston.warn('One or more of NodeBB\'s dependent packages are missing. Please run the following command to update them:');
|
||||
winston.warn(' ./nodebb upgrade');
|
||||
break;
|
||||
default:
|
||||
if (err.stacktrace !== false) {
|
||||
winston.error(err.stack);
|
||||
} else {
|
||||
winston.error(err.message);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
// Either way, bad stuff happened. Abort start.
|
||||
process.exit();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function setup() {
|
||||
winston.info('NodeBB Setup Triggered via Command Line');
|
||||
|
||||
var install = require('./src/install');
|
||||
|
||||
process.stdout.write('\nWelcome to NodeBB!\n');
|
||||
process.stdout.write('\nThis looks like a new installation, so you\'ll have to answer a few questions about your environment before we can proceed.\n');
|
||||
process.stdout.write('Press enter to accept the default setting (shown in brackets).\n');
|
||||
|
||||
install.setup(function (err, data) {
|
||||
var separator = ' ';
|
||||
if (process.stdout.columns > 10) {
|
||||
for(var x=0,cols=process.stdout.columns-10;x<cols;x++) {
|
||||
separator += '=';
|
||||
}
|
||||
}
|
||||
process.stdout.write('\n' + separator + '\n\n');
|
||||
|
||||
if (err) {
|
||||
winston.error('There was a problem completing NodeBB setup: ', err.message);
|
||||
} else {
|
||||
if (data.hasOwnProperty('password')) {
|
||||
process.stdout.write('An administrative user was automatically created for you:\n');
|
||||
process.stdout.write(' Username: ' + data.username + '\n');
|
||||
process.stdout.write(' Password: ' + data.password + '\n');
|
||||
process.stdout.write('\n');
|
||||
}
|
||||
process.stdout.write('NodeBB Setup Completed. Run \'./nodebb start\' to manually start your NodeBB server.\n');
|
||||
|
||||
// If I am a child process, notify the parent of the returned data before exiting (useful for notifying
|
||||
// hosts of auto-generated username/password during headless setups)
|
||||
if (process.send) {
|
||||
process.send(data);
|
||||
}
|
||||
}
|
||||
|
||||
process.exit();
|
||||
});
|
||||
}
|
||||
|
||||
function upgrade() {
|
||||
require('./src/database').init(function(err) {
|
||||
if (err) {
|
||||
winston.error(err.stack);
|
||||
process.exit();
|
||||
}
|
||||
require('./src/meta').configs.init(function () {
|
||||
require('./src/upgrade').upgrade();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function activate() {
|
||||
require('./src/database').init(function(err) {
|
||||
var plugin = nconf.get('_')[1] ? nconf.get('_')[1] : nconf.get('activate'),
|
||||
db = require('./src/database');
|
||||
|
||||
winston.info('Activating plugin %s', plugin);
|
||||
|
||||
db.sortedSetAdd('plugins:active', 0, plugin, start);
|
||||
});
|
||||
}
|
||||
|
||||
function listPlugins() {
|
||||
require('./src/database').init(function(err) {
|
||||
var db = require('./src/database');
|
||||
|
||||
db.getSortedSetRange('plugins:active', 0, -1, function(err, plugins) {
|
||||
winston.info('Active plugins: \n\t - ' + plugins.join('\n\t - '));
|
||||
process.exit();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
function shutdown(code) {
|
||||
winston.info('[app] Shutdown (SIGTERM/SIGINT) Initialised.');
|
||||
require('./src/database').close();
|
||||
winston.info('[app] Database connection closed.');
|
||||
require('./src/webserver').server.close();
|
||||
winston.info('[app] Web server closed to connections.');
|
||||
|
||||
winston.info('[app] Shutdown complete.');
|
||||
process.exit(code || 0);
|
||||
}
|
||||
|
||||
function restart() {
|
||||
if (process.send) {
|
||||
winston.info('[app] Restarting...');
|
||||
process.send({
|
||||
action: 'restart'
|
||||
});
|
||||
} else {
|
||||
winston.error('[app] Could not restart server. Shutting down.');
|
||||
shutdown(1);
|
||||
}
|
||||
}
|
||||
/*
|
||||
NodeBB - A better forum platform for the modern web
|
||||
https://github.com/NodeBB/NodeBB/
|
||||
Copyright (C) 2013-2014 NodeBB Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
"use strict";
|
||||
/*global require, global, process*/
|
||||
|
||||
var nconf = require('nconf');
|
||||
nconf.argv().env();
|
||||
|
||||
var fs = require('fs'),
|
||||
os = require('os'),
|
||||
url = require('url'),
|
||||
async = require('async'),
|
||||
semver = require('semver'),
|
||||
winston = require('winston'),
|
||||
path = require('path'),
|
||||
pkg = require('./package.json'),
|
||||
utils = require('./public/src/utils.js');
|
||||
|
||||
|
||||
global.env = process.env.NODE_ENV || 'production';
|
||||
|
||||
winston.remove(winston.transports.Console);
|
||||
winston.add(winston.transports.Console, {
|
||||
colorize: true,
|
||||
timestamp: function() {
|
||||
var date = new Date();
|
||||
return date.getDate() + '/' + (date.getMonth() + 1) + ' ' + date.toTimeString().substr(0,5) + ' [' + global.process.pid + ']';
|
||||
},
|
||||
level: global.env === 'production' ? 'info' : 'verbose'
|
||||
});
|
||||
|
||||
// TODO: remove once https://github.com/flatiron/winston/issues/280 is fixed
|
||||
winston.err = function (err) {
|
||||
winston.error(err.stack);
|
||||
};
|
||||
|
||||
if(os.platform() === 'linux') {
|
||||
require('child_process').exec('/usr/bin/which convert', function(err, stdout, stderr) {
|
||||
if(err || !stdout) {
|
||||
winston.warn('Couldn\'t find convert. Did you install imagemagick?');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if (!process.send) {
|
||||
// If run using `node app`, log GNU copyright info along with server info
|
||||
winston.info('NodeBB v' + pkg.version + ' Copyright (C) 2013-2014 NodeBB Inc.');
|
||||
winston.info('This program comes with ABSOLUTELY NO WARRANTY.');
|
||||
winston.info('This is free software, and you are welcome to redistribute it under certain conditions.');
|
||||
winston.info('');
|
||||
}
|
||||
|
||||
// Alternate configuration file support
|
||||
var configFile = path.join(__dirname, '/config.json'),
|
||||
configExists;
|
||||
|
||||
if (nconf.get('config')) {
|
||||
configFile = path.resolve(__dirname, nconf.get('config'));
|
||||
}
|
||||
configExists = fs.existsSync(configFile);
|
||||
|
||||
if (!nconf.get('setup') && !nconf.get('install') && !nconf.get('upgrade') && !nconf.get('reset') && configExists) {
|
||||
start();
|
||||
} else if (nconf.get('setup') || nconf.get('install') || !configExists) {
|
||||
setup();
|
||||
} else if (nconf.get('upgrade')) {
|
||||
upgrade();
|
||||
} else if (nconf.get('reset')) {
|
||||
reset();
|
||||
}
|
||||
|
||||
function loadConfig() {
|
||||
nconf.file({
|
||||
file: configFile
|
||||
});
|
||||
|
||||
nconf.defaults({
|
||||
base_dir: __dirname,
|
||||
themes_path: path.join(__dirname, 'node_modules'),
|
||||
views_dir: path.join(__dirname, 'public/templates')
|
||||
});
|
||||
|
||||
if (!nconf.get('isCluster')) {
|
||||
nconf.set('isPrimary', 'true');
|
||||
nconf.set('isCluster', 'false');
|
||||
}
|
||||
|
||||
// Ensure themes_path is a full filepath
|
||||
nconf.set('themes_path', path.resolve(__dirname, nconf.get('themes_path')));
|
||||
nconf.set('core_templates_path', path.join(__dirname, 'src/views'));
|
||||
nconf.set('base_templates_path', path.join(nconf.get('themes_path'), 'nodebb-theme-vanilla/templates'));
|
||||
}
|
||||
|
||||
function start() {
|
||||
loadConfig();
|
||||
|
||||
// nconf defaults, if not set in config
|
||||
if (!nconf.get('upload_path')) {
|
||||
nconf.set('upload_path', '/public/uploads');
|
||||
}
|
||||
// Parse out the relative_url and other goodies from the configured URL
|
||||
var urlObject = url.parse(nconf.get('url'));
|
||||
var relativePath = urlObject.pathname !== '/' ? urlObject.pathname : '';
|
||||
nconf.set('use_port', !!urlObject.port);
|
||||
nconf.set('relative_path', relativePath);
|
||||
nconf.set('port', urlObject.port || nconf.get('port') || nconf.get('PORT') || 4567);
|
||||
nconf.set('upload_url', relativePath + '/uploads/');
|
||||
|
||||
if (nconf.get('isPrimary') === 'true') {
|
||||
winston.info('Time: %s', (new Date()).toString());
|
||||
winston.info('Initializing NodeBB v%s', pkg.version);
|
||||
winston.verbose('* using configuration stored in: %s', configFile);
|
||||
|
||||
var host = nconf.get(nconf.get('database') + ':host'),
|
||||
storeLocation = host ? 'at ' + host + (host.indexOf('/') === -1 ? ':' + nconf.get(nconf.get('database') + ':port') : '') : '';
|
||||
|
||||
winston.verbose('* using %s store %s', nconf.get('database'), storeLocation);
|
||||
winston.verbose('* using themes stored in: %s', nconf.get('themes_path'));
|
||||
}
|
||||
|
||||
|
||||
var webserver = require('./src/webserver');
|
||||
|
||||
require('./src/database').init(function(err) {
|
||||
if (err) {
|
||||
winston.error(err.stack);
|
||||
process.exit();
|
||||
}
|
||||
var meta = require('./src/meta');
|
||||
meta.configs.init(function () {
|
||||
var templates = require('templates.js'),
|
||||
sockets = require('./src/socket.io'),
|
||||
plugins = require('./src/plugins'),
|
||||
upgrade = require('./src/upgrade');
|
||||
|
||||
templates.setGlobal('relative_path', nconf.get('relative_path'));
|
||||
|
||||
upgrade.check(function(schema_ok) {
|
||||
if (schema_ok || nconf.get('check-schema') === false) {
|
||||
webserver.init();
|
||||
sockets.init(webserver.server);
|
||||
|
||||
if (nconf.get('isPrimary') === 'true' && !nconf.get('jobsDisabled')) {
|
||||
require('./src/notifications').init();
|
||||
require('./src/user').startJobs();
|
||||
}
|
||||
|
||||
async.waterfall([
|
||||
async.apply(meta.themes.setupPaths),
|
||||
async.apply(plugins.ready),
|
||||
async.apply(meta.templates.compile),
|
||||
async.apply(webserver.listen)
|
||||
], function(err) {
|
||||
if (err) {
|
||||
winston.error(err.stack);
|
||||
process.exit();
|
||||
}
|
||||
|
||||
if (process.send) {
|
||||
process.send({
|
||||
action: 'ready'
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
process.on('SIGTERM', shutdown);
|
||||
process.on('SIGINT', shutdown);
|
||||
process.on('SIGHUP', restart);
|
||||
process.on('message', function(message) {
|
||||
switch(message.action) {
|
||||
case 'reload':
|
||||
meta.reload();
|
||||
break;
|
||||
case 'js-propagate':
|
||||
meta.js.cache = message.cache;
|
||||
meta.js.map = message.map;
|
||||
meta.js.hash = message.hash;
|
||||
winston.verbose('[cluster] Client-side javascript and mapping propagated to worker %s', process.pid);
|
||||
break;
|
||||
case 'css-propagate':
|
||||
meta.css.cache = message.cache;
|
||||
meta.css.acpCache = message.acpCache;
|
||||
meta.css.hash = message.hash;
|
||||
winston.verbose('[cluster] Stylesheets propagated to worker %s', process.pid);
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
process.on('uncaughtException', function(err) {
|
||||
winston.error(err.stack);
|
||||
console.log(err.stack);
|
||||
|
||||
meta.js.killMinifier();
|
||||
shutdown(1);
|
||||
});
|
||||
} else {
|
||||
winston.warn('Your NodeBB schema is out-of-date. Please run the following command to bring your dataset up to spec:');
|
||||
winston.warn(' ./nodebb upgrade');
|
||||
process.exit();
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function setup() {
|
||||
loadConfig();
|
||||
|
||||
if (nconf.get('setup')) {
|
||||
winston.info('NodeBB Setup Triggered via Command Line');
|
||||
} else {
|
||||
winston.warn('Configuration not found, starting NodeBB setup');
|
||||
}
|
||||
|
||||
var install = require('./src/install');
|
||||
|
||||
winston.info('Welcome to NodeBB!');
|
||||
winston.info('This looks like a new installation, so you\'ll have to answer a few questions about your environment before we can proceed.');
|
||||
winston.info('Press enter to accept the default setting (shown in brackets).');
|
||||
|
||||
install.setup(function (err) {
|
||||
if (err) {
|
||||
winston.error('There was a problem completing NodeBB setup: ', err.message);
|
||||
} else {
|
||||
winston.info('NodeBB Setup Completed. Run \'./nodebb start\' to manually start your NodeBB server.');
|
||||
}
|
||||
|
||||
process.exit();
|
||||
});
|
||||
}
|
||||
|
||||
function upgrade() {
|
||||
loadConfig();
|
||||
|
||||
require('./src/database').init(function(err) {
|
||||
if (err) {
|
||||
winston.error(err.stack);
|
||||
process.exit();
|
||||
}
|
||||
require('./src/meta').configs.init(function () {
|
||||
require('./src/upgrade').upgrade();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function reset() {
|
||||
loadConfig();
|
||||
|
||||
require('./src/database').init(function(err) {
|
||||
if (err) {
|
||||
winston.error(err.message);
|
||||
process.exit();
|
||||
}
|
||||
|
||||
if (nconf.get('theme')) {
|
||||
resetThemes();
|
||||
} else if (nconf.get('plugin')) {
|
||||
resetPlugin(nconf.get('plugin'));
|
||||
} else if (nconf.get('plugins')) {
|
||||
resetPlugins();
|
||||
} else if (nconf.get('widgets')) {
|
||||
resetWidgets();
|
||||
} else if (nconf.get('settings')) {
|
||||
resetSettings();
|
||||
} else if (nconf.get('all')) {
|
||||
require('async').series([resetWidgets, resetThemes, resetPlugins, resetSettings], function(err) {
|
||||
if (!err) {
|
||||
winston.info('[reset] Reset complete.');
|
||||
} else {
|
||||
winston.error('[reset] Errors were encountered while resetting your forum settings: %s', err.message);
|
||||
}
|
||||
process.exit();
|
||||
});
|
||||
} else {
|
||||
winston.warn('[reset] Nothing reset.');
|
||||
winston.info('Use ./nodebb reset {theme|plugins|widgets|settings|all}');
|
||||
winston.info(' or');
|
||||
winston.info('Use ./nodebb reset plugin="nodebb-plugin-pluginName"');
|
||||
process.exit();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function resetSettings(callback) {
|
||||
var meta = require('./src/meta');
|
||||
meta.configs.set('allowLocalLogin', 1, function(err) {
|
||||
winston.info('[reset] Settings reset to default');
|
||||
if (typeof callback === 'function') {
|
||||
callback(err);
|
||||
} else {
|
||||
process.exit();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function resetThemes(callback) {
|
||||
var meta = require('./src/meta');
|
||||
|
||||
meta.themes.set({
|
||||
type: 'local',
|
||||
id: 'nodebb-theme-vanilla'
|
||||
}, function(err) {
|
||||
winston.info('[reset] Theme reset to Vanilla');
|
||||
if (typeof callback === 'function') {
|
||||
callback(err);
|
||||
} else {
|
||||
process.exit();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function resetPlugin(pluginId) {
|
||||
var db = require('./src/database');
|
||||
db.setRemove('plugins:active', pluginId, function(err, result) {
|
||||
if (err || result !== 1) {
|
||||
winston.error('[reset] Could not disable plugin: %s', pluginId);
|
||||
if (err) {
|
||||
winston.error('[reset] Encountered error: %s', err.message);
|
||||
} else {
|
||||
winston.info('[reset] Perhaps it has already been disabled?');
|
||||
}
|
||||
} else {
|
||||
winston.info('[reset] Plugin `%s` disabled', pluginId);
|
||||
}
|
||||
|
||||
process.exit();
|
||||
});
|
||||
}
|
||||
|
||||
function resetPlugins(callback) {
|
||||
var db = require('./src/database');
|
||||
db.delete('plugins:active', function(err) {
|
||||
winston.info('[reset] All Plugins De-activated');
|
||||
if (typeof callback === 'function') {
|
||||
callback(err);
|
||||
} else {
|
||||
process.exit();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function resetWidgets(callback) {
|
||||
require('./src/widgets').reset(function(err) {
|
||||
winston.info('[reset] All Widgets moved to Draft Zone');
|
||||
if (typeof callback === 'function') {
|
||||
callback(err);
|
||||
} else {
|
||||
process.exit();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function shutdown(code) {
|
||||
winston.info('[app] Shutdown (SIGTERM/SIGINT) Initialised.');
|
||||
require('./src/database').close();
|
||||
winston.info('[app] Database connection closed.');
|
||||
require('./src/webserver').server.close();
|
||||
winston.info('[app] Web server closed to connections.');
|
||||
|
||||
winston.info('[app] Shutdown complete.');
|
||||
process.exit(code || 0);
|
||||
}
|
||||
|
||||
function restart() {
|
||||
if (process.send) {
|
||||
winston.info('[app] Restarting...');
|
||||
process.send({
|
||||
action: 'restart'
|
||||
});
|
||||
} else {
|
||||
winston.error('[app] Could not restart server. Shutting down.');
|
||||
shutdown(1);
|
||||
}
|
||||
}
|
||||
27
bcrypt.js
27
bcrypt.js
@@ -9,7 +9,7 @@ process.on('message', function(msg) {
|
||||
if (msg.type === 'hash') {
|
||||
hashPassword(msg.password, msg.rounds);
|
||||
} else if (msg.type === 'compare') {
|
||||
bcrypt.compare(msg.password, msg.hash, done);
|
||||
compare(msg.password, msg.hash);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -21,14 +21,23 @@ function hashPassword(password, rounds) {
|
||||
function(salt, next) {
|
||||
bcrypt.hash(password, salt, next);
|
||||
}
|
||||
], done);
|
||||
], function(err, hash) {
|
||||
if (err) {
|
||||
process.send({err: err.message});
|
||||
return process.disconnect();
|
||||
}
|
||||
process.send({result: hash});
|
||||
process.disconnect();
|
||||
});
|
||||
}
|
||||
|
||||
function done(err, result) {
|
||||
if (err) {
|
||||
process.send({err: err.message});
|
||||
return process.disconnect();
|
||||
}
|
||||
process.send({result: result});
|
||||
process.disconnect();
|
||||
function compare(password, hash) {
|
||||
bcrypt.compare(password, hash, function(err, res) {
|
||||
if (err) {
|
||||
process.send({err: err.message});
|
||||
return process.disconnect();
|
||||
}
|
||||
process.send({result: res});
|
||||
process.disconnect();
|
||||
});
|
||||
}
|
||||
@@ -1,38 +1,34 @@
|
||||
[
|
||||
{
|
||||
"name": "Announcements",
|
||||
"description": "Announcements regarding our community",
|
||||
"descriptionParsed": "<p>Announcements regarding our community</p>\n",
|
||||
"bgColor": "#fda34b",
|
||||
"color": "#fff",
|
||||
"icon" : "fa-bullhorn",
|
||||
"order": 1
|
||||
},
|
||||
{
|
||||
"name": "General Discussion",
|
||||
"description": "A place to talk about whatever you want",
|
||||
"descriptionParsed": "<p>A place to talk about whatever you want</p>\n",
|
||||
"bgColor": "#59b3d0",
|
||||
"color": "#fff",
|
||||
"icon" : "fa-comments-o",
|
||||
"order": 2
|
||||
},
|
||||
{
|
||||
"name": "Blogs",
|
||||
"description": "Blog posts from individual members",
|
||||
"descriptionParsed": "<p>Blog posts from individual members</p>\n",
|
||||
"bgColor": "#86ba4b",
|
||||
"color": "#fff",
|
||||
"icon" : "fa-newspaper-o",
|
||||
"order": 4
|
||||
},
|
||||
{
|
||||
"name": "Comments & Feedback",
|
||||
"description": "Got a question? Ask away!",
|
||||
"descriptionParsed": "<p>Got a question? Ask away!</p>\n",
|
||||
"bgColor": "#e95c5a",
|
||||
"color": "#fff",
|
||||
"icon" : "fa-question",
|
||||
"order": 3
|
||||
}
|
||||
[
|
||||
{
|
||||
"name": "Announcements",
|
||||
"description": "Announcements regarding our community",
|
||||
"bgColor": "#fda34b",
|
||||
"color": "#fff",
|
||||
"icon" : "fa-bullhorn",
|
||||
"order": 1
|
||||
},
|
||||
{
|
||||
"name": "General Discussion",
|
||||
"description": "A place to talk about whateeeever you want",
|
||||
"bgColor": "#59b3d0",
|
||||
"color": "#fff",
|
||||
"icon" : "fa-comments-o",
|
||||
"order": 2
|
||||
},
|
||||
{
|
||||
"name": "Blogs",
|
||||
"description": "Blog posts from individual members",
|
||||
"bgColor": "#86ba4b",
|
||||
"color": "#fff",
|
||||
"icon" : "fa-newspaper-o",
|
||||
"order": 4
|
||||
},
|
||||
{
|
||||
"name": "Comments & Feedback",
|
||||
"description": "Got a question? Ask away!",
|
||||
"bgColor": "#e95c5a",
|
||||
"color": "#fff",
|
||||
"icon" : "fa-question",
|
||||
"order": 3
|
||||
}
|
||||
]
|
||||
@@ -1,39 +1,94 @@
|
||||
{
|
||||
"title": "NodeBB",
|
||||
"showSiteTitle": 1,
|
||||
"postDelay": 10,
|
||||
"initialPostDelay": 10,
|
||||
"newbiePostDelay": 120,
|
||||
"newbiePostDelayThreshold": 3,
|
||||
"minimumPostLength": 8,
|
||||
"maximumPostLength": 32767,
|
||||
"minimumTagsPerTopic": 0,
|
||||
"maximumTagsPerTopic": 5,
|
||||
"minimumTagLength": 3,
|
||||
"maximumTagLength": 15,
|
||||
"allowGuestSearching": 0,
|
||||
"allowTopicsThumbnail": 0,
|
||||
"registrationType": "normal",
|
||||
"allowLocalLogin": 1,
|
||||
"allowAccountDelete": 1,
|
||||
"allowFileUploads": 0,
|
||||
"allowUserHomePage": 1,
|
||||
"maximumFileSize": 2048,
|
||||
"minimumTitleLength": 3,
|
||||
"maximumTitleLength": 255,
|
||||
"minimumUsernameLength": 2,
|
||||
"maximumUsernameLength": 16,
|
||||
"minimumPasswordLength": 6,
|
||||
"maximumSignatureLength": 255,
|
||||
"maximumAboutMeLength": 1000,
|
||||
"maximumProfileImageSize": 256,
|
||||
"maximumCoverImageSize": 2048,
|
||||
"profileImageDimension": 128,
|
||||
"requireEmailConfirmation": 0,
|
||||
"allowProfileImageUploads": 1,
|
||||
"teaserPost": "last-reply",
|
||||
"allowPrivateGroups": 1,
|
||||
"unreadCutoff": 2,
|
||||
"bookmarkThreshold": 5,
|
||||
"topicsPerList": 20
|
||||
}
|
||||
[
|
||||
{
|
||||
"field": "title",
|
||||
"value": "NodeBB"
|
||||
},
|
||||
{
|
||||
"field": "showSiteTitle",
|
||||
"value": "1"
|
||||
},
|
||||
{
|
||||
"field": "postDelay",
|
||||
"value": 10
|
||||
},
|
||||
{
|
||||
"field": "initialPostDelay",
|
||||
"value": 10
|
||||
},
|
||||
{
|
||||
"field": "newbiePostDelay",
|
||||
"value": 120
|
||||
},
|
||||
{
|
||||
"field": "newbiePostDelayThreshold",
|
||||
"value": 3
|
||||
},
|
||||
{
|
||||
"field": "minimumPostLength",
|
||||
"value": 8
|
||||
},
|
||||
{
|
||||
"field": "allowGuestSearching",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"field": "allowTopicsThumbnail",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"field": "allowRegistration",
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"field": "allowLocalLogin",
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"field": "allowAccountDelete",
|
||||
"value": 1
|
||||
},
|
||||
{
|
||||
"field": "allowFileUploads",
|
||||
"value": 0
|
||||
},
|
||||
{
|
||||
"field": "maximumFileSize",
|
||||
"value": 2048
|
||||
},
|
||||
{
|
||||
"field": "minimumTitleLength",
|
||||
"value": 3
|
||||
},
|
||||
{
|
||||
"field": "maximumTitleLength",
|
||||
"value": 255
|
||||
},
|
||||
{
|
||||
"field": "minimumUsernameLength",
|
||||
"value": 2
|
||||
},
|
||||
{
|
||||
"field": "maximumUsernameLength",
|
||||
"value": 16
|
||||
},
|
||||
{
|
||||
"field": "minimumPasswordLength",
|
||||
"value": 6
|
||||
},
|
||||
{
|
||||
"field": "maximumSignatureLength",
|
||||
"value": 255
|
||||
},
|
||||
{
|
||||
"field": "maximumProfileImageSize",
|
||||
"value": 256
|
||||
},
|
||||
{
|
||||
"field": "profileImageDimension",
|
||||
"value": 128
|
||||
},
|
||||
{
|
||||
"field": "requireEmailConfirmation",
|
||||
"value": 0
|
||||
}
|
||||
]
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
[
|
||||
{
|
||||
"widget": "html",
|
||||
"data" : {
|
||||
"html": "<footer id=\"footer\" class=\"container footer\">\r\n\t<div class=\"copyright\">\r\n\t\tCopyright © 2016 <a target=\"_blank\" href=\"https://nodebb.org\">NodeBB Forums</a> | <a target=\"_blank\" href=\"//github.com/NodeBB/NodeBB/graphs/contributors\">Contributors</a>\r\n\t</div>\r\n</footer>",
|
||||
"title":"",
|
||||
"container":""
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -1,85 +0,0 @@
|
||||
[
|
||||
{
|
||||
"route": "/categories",
|
||||
"title": "\\[\\[global:header.categories\\]\\]",
|
||||
"enabled": true,
|
||||
"iconClass": "fa-list",
|
||||
"textClass": "visible-xs-inline",
|
||||
"text": "\\[\\[global:header.categories\\]\\]"
|
||||
},
|
||||
{
|
||||
"id": "unread-count",
|
||||
"route": "/unread",
|
||||
"title": "\\[\\[global:header.unread\\]\\]",
|
||||
"enabled": true,
|
||||
"iconClass": "fa-inbox",
|
||||
"textClass": "visible-xs-inline",
|
||||
"text": "\\[\\[global:header.unread\\]\\]",
|
||||
"properties": {
|
||||
"loggedIn": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"route": "/recent",
|
||||
"title": "\\[\\[global:header.recent\\]\\]",
|
||||
"enabled": true,
|
||||
"iconClass": "fa-clock-o",
|
||||
"textClass": "visible-xs-inline",
|
||||
"text": "\\[\\[global:header.recent\\]\\]"
|
||||
},
|
||||
{
|
||||
"route": "/tags",
|
||||
"title": "\\[\\[global:header.tags\\]\\]",
|
||||
"enabled": true,
|
||||
"iconClass": "fa-tags",
|
||||
"textClass": "visible-xs-inline",
|
||||
"text": "\\[\\[global:header.tags\\]\\]"
|
||||
},
|
||||
{
|
||||
"route": "/popular",
|
||||
"title": "\\[\\[global:header.popular\\]\\]",
|
||||
"enabled": true,
|
||||
"iconClass": "fa-fire",
|
||||
"textClass": "visible-xs-inline",
|
||||
"text": "\\[\\[global:header.popular\\]\\]"
|
||||
},
|
||||
{
|
||||
"route": "/users",
|
||||
"title": "\\[\\[global:header.users\\]\\]",
|
||||
"enabled": true,
|
||||
"iconClass": "fa-user",
|
||||
"textClass": "visible-xs-inline",
|
||||
"text": "\\[\\[global:header.users\\]\\]"
|
||||
},
|
||||
{
|
||||
"route": "/groups",
|
||||
"title": "\\[\\[global:header.groups\\]\\]",
|
||||
"enabled": true,
|
||||
"iconClass": "fa-group",
|
||||
"textClass": "visible-xs-inline",
|
||||
"text": "\\[\\[global:header.groups\\]\\]"
|
||||
},
|
||||
{
|
||||
"route": "/admin",
|
||||
"title": "\\[\\[global:header.admin\\]\\]",
|
||||
"enabled": true,
|
||||
"iconClass": "fa-cogs",
|
||||
"textClass": "visible-xs-inline",
|
||||
"text": "\\[\\[global:header.admin\\]\\]",
|
||||
"properties": {
|
||||
"targetBlank": false,
|
||||
"adminOnly": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"route": "/search",
|
||||
"title": "\\[\\[global:header.search\\]\\]",
|
||||
"enabled": true,
|
||||
"iconClass": "fa-search",
|
||||
"textClass": "visible-xs-inline",
|
||||
"text": "\\[\\[global:header.search\\]\\]",
|
||||
"properties": {
|
||||
"searchInstalled": true
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -1,10 +0,0 @@
|
||||
# Welcome to your brand new NodeBB forum!
|
||||
|
||||
This is what a topic and post looks like. As an administrator, you can edit the post\'s title and content.
|
||||
To customise your forum, go to the [Administrator Control Panel](../../admin). You can modify all aspects of your forum there, including installation of third-party plugins.
|
||||
|
||||
## Additional Resources
|
||||
|
||||
* [NodeBB Documentation](https://docs.nodebb.org)
|
||||
* [Community Support Forum](https://community.nodebb.org)
|
||||
* [Project repository](https://github.com/nodebb/nodebb)
|
||||
@@ -1,82 +1,104 @@
|
||||
"use strict";
|
||||
|
||||
var async = require('async');
|
||||
var prompt = require('prompt');
|
||||
var winston = require('winston');
|
||||
var async = require('async'),
|
||||
prompt = require('prompt'),
|
||||
nconf = require('nconf'),
|
||||
winston = require('winston'),
|
||||
|
||||
var questions = {
|
||||
redis: require('../src/database/redis').questions,
|
||||
mongo: require('../src/database/mongo').questions
|
||||
};
|
||||
questions = {};
|
||||
|
||||
module.exports = function(config, callback) {
|
||||
async.waterfall([
|
||||
function (next) {
|
||||
process.stdout.write('\n');
|
||||
winston.info('Now configuring ' + config.database + ' database:');
|
||||
getDatabaseConfig(config, next);
|
||||
},
|
||||
function (databaseConfig, next) {
|
||||
saveDatabaseConfig(config, databaseConfig, next);
|
||||
}
|
||||
], callback);
|
||||
};
|
||||
|
||||
function getDatabaseConfig(config, callback) {
|
||||
function success(err, config, callback) {
|
||||
if (!config) {
|
||||
return callback(new Error('aborted'));
|
||||
}
|
||||
|
||||
if (config.database === 'redis') {
|
||||
if (config['redis:host'] && config['redis:port']) {
|
||||
callback(null, config);
|
||||
} else {
|
||||
prompt.get(questions.redis, callback);
|
||||
var database = (config.redis || config.mongo) ? config.secondary_database : config.database;
|
||||
|
||||
function dbQuestionsSuccess(err, databaseConfig) {
|
||||
if (!databaseConfig) {
|
||||
return callback(new Error('aborted'));
|
||||
}
|
||||
} else if (config.database === 'mongo') {
|
||||
if (config['mongo:host'] && config['mongo:port']) {
|
||||
callback(null, config);
|
||||
|
||||
// Translate redis properties into redis object
|
||||
if(database === 'redis') {
|
||||
config.redis = {
|
||||
host: databaseConfig['redis:host'],
|
||||
port: databaseConfig['redis:port'],
|
||||
password: databaseConfig['redis:password'],
|
||||
database: databaseConfig['redis:database']
|
||||
};
|
||||
|
||||
if (config.redis.host.slice(0, 1) === '/') {
|
||||
delete config.redis.port;
|
||||
}
|
||||
} else if (database === 'mongo') {
|
||||
config.mongo = {
|
||||
host: databaseConfig['mongo:host'],
|
||||
port: databaseConfig['mongo:port'],
|
||||
username: databaseConfig['mongo:username'],
|
||||
password: databaseConfig['mongo:password'],
|
||||
database: databaseConfig['mongo:database']
|
||||
};
|
||||
} else {
|
||||
prompt.get(questions.mongo, callback);
|
||||
return callback(new Error('unknown database : ' + database));
|
||||
}
|
||||
|
||||
var allQuestions = questions.redis.concat(questions.mongo);
|
||||
for(var x=0;x<allQuestions.length;x++) {
|
||||
delete config[allQuestions[x].name];
|
||||
}
|
||||
|
||||
callback(err, config);
|
||||
}
|
||||
|
||||
if(database === 'redis') {
|
||||
if (config['redis:host'] && config['redis:port']) {
|
||||
dbQuestionsSuccess(null, config);
|
||||
} else {
|
||||
prompt.get(questions.redis, dbQuestionsSuccess);
|
||||
}
|
||||
} else if(database === 'mongo') {
|
||||
if (config['mongo:host'] && config['mongo:port']) {
|
||||
dbQuestionsSuccess(null, config);
|
||||
} else {
|
||||
prompt.get(questions.mongo, dbQuestionsSuccess);
|
||||
}
|
||||
} else {
|
||||
return callback(new Error('unknown database : ' + config.database));
|
||||
return callback(new Error('unknown database : ' + database));
|
||||
}
|
||||
}
|
||||
|
||||
function saveDatabaseConfig(config, databaseConfig, callback) {
|
||||
if (!databaseConfig) {
|
||||
return callback(new Error('aborted'));
|
||||
}
|
||||
function getSecondaryDatabaseModules(config, next) {
|
||||
prompt.get({
|
||||
"name": "secondary_db_modules",
|
||||
"description": "Which database modules should " + config.secondary_database + " store?",
|
||||
"default": nconf.get('secondary_db_modules') || "hash, list, sets, sorted"
|
||||
}, function(err, db) {
|
||||
config.secondary_db_modules = db.secondary_db_modules;
|
||||
success(err, config, next);
|
||||
});
|
||||
}
|
||||
|
||||
// Translate redis properties into redis object
|
||||
if (config.database === 'redis') {
|
||||
config.redis = {
|
||||
host: databaseConfig['redis:host'],
|
||||
port: databaseConfig['redis:port'],
|
||||
password: databaseConfig['redis:password'],
|
||||
database: databaseConfig['redis:database']
|
||||
};
|
||||
module.exports = function(err, config, databases, callback) {
|
||||
var allowedDBs = Object.keys(databases);
|
||||
|
||||
if (config.redis.host.slice(0, 1) === '/') {
|
||||
delete config.redis.port;
|
||||
allowedDBs.forEach(function(db) {
|
||||
questions[db] = require('./../src/database/' + db).questions;
|
||||
});
|
||||
|
||||
async.waterfall([
|
||||
function(next) {
|
||||
process.stdout.write('\n');
|
||||
winston.info('Now configuring ' + config.database + ' database:');
|
||||
success(err, config, next);
|
||||
},
|
||||
function(config, next) {
|
||||
if (config.secondary_database && allowedDBs.indexOf(config.secondary_database) !== -1) {
|
||||
winston.info('Now configuring ' + config.secondary_database + ' database:');
|
||||
getSecondaryDatabaseModules(config, next);
|
||||
} else {
|
||||
next(err, config);
|
||||
}
|
||||
}
|
||||
} else if (config.database === 'mongo') {
|
||||
config.mongo = {
|
||||
host: databaseConfig['mongo:host'],
|
||||
port: databaseConfig['mongo:port'],
|
||||
username: databaseConfig['mongo:username'],
|
||||
password: databaseConfig['mongo:password'],
|
||||
database: databaseConfig['mongo:database']
|
||||
};
|
||||
} else {
|
||||
return callback(new Error('unknown database : ' + config.database));
|
||||
}
|
||||
|
||||
var allQuestions = questions.redis.concat(questions.mongo);
|
||||
for (var x=0; x<allQuestions.length; x++) {
|
||||
delete config[allQuestions[x].name];
|
||||
}
|
||||
|
||||
callback(null, config);
|
||||
}
|
||||
], callback);
|
||||
};
|
||||
158
install/web.js
158
install/web.js
@@ -1,158 +0,0 @@
|
||||
"use strict";
|
||||
|
||||
var winston = require('winston'),
|
||||
express = require('express'),
|
||||
bodyParser = require('body-parser'),
|
||||
fs = require('fs'),
|
||||
path = require('path'),
|
||||
less = require('less'),
|
||||
async = require('async'),
|
||||
uglify = require('uglify-js'),
|
||||
nconf = require('nconf'),
|
||||
app = express(),
|
||||
server;
|
||||
|
||||
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'
|
||||
});
|
||||
|
||||
var web = {},
|
||||
scripts = [
|
||||
'public/vendor/xregexp/xregexp.js',
|
||||
'public/vendor/xregexp/unicode/unicode-base.js',
|
||||
'public/src/utils.js',
|
||||
'public/src/installer/install.js'
|
||||
];
|
||||
|
||||
web.install = function(port) {
|
||||
port = port || 4567;
|
||||
winston.info('Launching web installer on port', port);
|
||||
|
||||
app.use(express.static('public', {}));
|
||||
app.engine('tpl', require('templates.js').__express);
|
||||
app.set('view engine', 'tpl');
|
||||
app.set('views', path.join(__dirname, '../src/views'));
|
||||
app.use(bodyParser.urlencoded({
|
||||
extended: true
|
||||
}));
|
||||
|
||||
async.parallel([compileLess, compileJS], function() {
|
||||
setupRoutes();
|
||||
launchExpress(port);
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
function launchExpress(port) {
|
||||
server = app.listen(port, function() {
|
||||
winston.info('Web installer listening on http://%s:%s', '0.0.0.0', port);
|
||||
});
|
||||
}
|
||||
|
||||
function setupRoutes() {
|
||||
app.get('/', welcome);
|
||||
app.post('/', install);
|
||||
app.post('/launch', launch);
|
||||
}
|
||||
|
||||
function welcome(req, res) {
|
||||
var dbs = ['redis', 'mongo'],
|
||||
databases = [];
|
||||
|
||||
dbs.forEach(function(el) {
|
||||
databases.push({
|
||||
name: el,
|
||||
questions: require('../src/database/' + el).questions
|
||||
});
|
||||
});
|
||||
|
||||
res.render('install/index', {
|
||||
databases: databases,
|
||||
skipDatabaseSetup: !!nconf.get('database'),
|
||||
error: res.locals.error ? true : false,
|
||||
success: res.locals.success ? true : false,
|
||||
values: req.body
|
||||
});
|
||||
}
|
||||
|
||||
function install(req, res) {
|
||||
for (var i in req.body) {
|
||||
if (req.body.hasOwnProperty(i) && !process.env.hasOwnProperty(i)) {
|
||||
process.env[i.replace(':', '__')] = req.body[i];
|
||||
}
|
||||
}
|
||||
|
||||
var child = require('child_process').fork('app', ['--setup'], {
|
||||
env: process.env
|
||||
});
|
||||
|
||||
child.on('close', function(data) {
|
||||
if (data === 0) {
|
||||
res.locals.success = true;
|
||||
} else {
|
||||
res.locals.error = true;
|
||||
}
|
||||
|
||||
welcome(req, res);
|
||||
});
|
||||
}
|
||||
|
||||
function launch(req, res) {
|
||||
var pidFilePath = __dirname + '../pidfile';
|
||||
res.json({});
|
||||
server.close();
|
||||
|
||||
var child = require('child_process').spawn('node', ['loader.js'], {
|
||||
detached: true,
|
||||
stdio: ['ignore', 'ignore', 'ignore']
|
||||
});
|
||||
|
||||
process.stdout.write('\nStarting NodeBB\n');
|
||||
process.stdout.write(' "./nodebb stop" to stop the NodeBB server\n');
|
||||
process.stdout.write(' "./nodebb log" to view server output\n');
|
||||
process.stdout.write(' "./nodebb restart" to restart NodeBB\n');
|
||||
|
||||
child.unref();
|
||||
process.exit(0);
|
||||
|
||||
}
|
||||
|
||||
function compileLess(callback) {
|
||||
if ((nconf.get('from-file') || '').indexOf('less') !== -1) {
|
||||
winston.info('LESS compilation skipped');
|
||||
return callback(false);
|
||||
}
|
||||
|
||||
fs.readFile(path.join(__dirname, '../public/less/install.less'), function(err, style) {
|
||||
less.render(style.toString(), function(err, css) {
|
||||
if(err) {
|
||||
return winston.error('Unable to compile LESS: ', err);
|
||||
}
|
||||
|
||||
fs.writeFile(path.join(__dirname, '../public/stylesheet.css'), css.css, callback);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function compileJS(callback) {
|
||||
if ((nconf.get('from-file') || '').indexOf('js') !== -1) {
|
||||
winston.info('Client-side JS compilation skipped');
|
||||
return callback(false);
|
||||
}
|
||||
|
||||
var scriptPath = path.join(__dirname, '..'),
|
||||
result = uglify.minify(scripts.map(function(script) {
|
||||
return path.join(scriptPath, script);
|
||||
}));
|
||||
|
||||
|
||||
fs.writeFile(path.join(__dirname, '../public/nodebb.min.js'), result.code, callback);
|
||||
}
|
||||
|
||||
module.exports = web;
|
||||
133
loader.js
133
loader.js
@@ -8,36 +8,31 @@ var nconf = require('nconf'),
|
||||
|
||||
async = require('async'),
|
||||
logrotate = require('logrotate-stream'),
|
||||
file = require('./src/file'),
|
||||
pkg = require('./package.json');
|
||||
|
||||
nconf.argv().env().file({
|
||||
file: path.join(__dirname, '/config.json')
|
||||
});
|
||||
pkg = require('./package.json'),
|
||||
|
||||
var pidFilePath = __dirname + '/pidfile',
|
||||
pidFilePath = __dirname + '/pidfile',
|
||||
output = logrotate({ file: __dirname + '/logs/output.log', size: '1m', keep: 3, compress: true }),
|
||||
silent = nconf.get('silent') === 'false' ? false : nconf.get('silent') !== false,
|
||||
silent = process.env.NODE_ENV !== 'development',
|
||||
numProcs,
|
||||
workers = [],
|
||||
|
||||
Loader = {
|
||||
timesStarted: 0,
|
||||
js: {
|
||||
target: {}
|
||||
cache: undefined,
|
||||
map: undefined
|
||||
},
|
||||
css: {
|
||||
cache: undefined,
|
||||
acpCache: undefined
|
||||
},
|
||||
templatesCompiled: false
|
||||
}
|
||||
};
|
||||
|
||||
Loader.init = function(callback) {
|
||||
if (silent) {
|
||||
console.log = function() {
|
||||
var args = Array.prototype.slice.call(arguments);
|
||||
output.write(args.join(' ') + '\n');
|
||||
console.log = function(value) {
|
||||
output.write(value + '\n');
|
||||
};
|
||||
}
|
||||
|
||||
@@ -87,28 +82,23 @@ Loader.addWorkerEvents = function(worker) {
|
||||
if (message && typeof message === 'object' && message.action) {
|
||||
switch (message.action) {
|
||||
case 'ready':
|
||||
if (Loader.js.target['nodebb.min.js'] && Loader.js.target['acp.min.js'] && !worker.isPrimary) {
|
||||
if (Loader.js.cache) {
|
||||
worker.send({
|
||||
action: 'js-propagate',
|
||||
data: Loader.js.target
|
||||
cache: Loader.js.cache,
|
||||
map: Loader.js.map,
|
||||
hash: Loader.js.hash
|
||||
});
|
||||
}
|
||||
|
||||
if (Loader.css.cache && !worker.isPrimary) {
|
||||
if (Loader.css.cache) {
|
||||
worker.send({
|
||||
action: 'css-propagate',
|
||||
cache: Loader.css.cache,
|
||||
acpCache: Loader.css.acpCache
|
||||
acpCache: Loader.css.acpCache,
|
||||
hash: Loader.css.hash
|
||||
});
|
||||
}
|
||||
|
||||
if (Loader.templatesCompiled && !worker.isPrimary) {
|
||||
worker.send({
|
||||
action: 'templates:compiled'
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
break;
|
||||
case 'restart':
|
||||
console.log('[cluster] Restarting...');
|
||||
@@ -119,28 +109,27 @@ Loader.addWorkerEvents = function(worker) {
|
||||
Loader.reload();
|
||||
break;
|
||||
case 'js-propagate':
|
||||
Loader.js.target = message.data;
|
||||
Loader.js.cache = message.cache;
|
||||
Loader.js.map = message.map;
|
||||
Loader.js.hash = message.hash;
|
||||
|
||||
Loader.notifyWorkers({
|
||||
action: 'js-propagate',
|
||||
data: message.data
|
||||
cache: message.cache,
|
||||
map: message.map,
|
||||
hash: message.hash
|
||||
}, worker.pid);
|
||||
break;
|
||||
case 'css-propagate':
|
||||
Loader.css.cache = message.cache;
|
||||
Loader.css.acpCache = message.acpCache;
|
||||
Loader.css.hash = message.hash;
|
||||
|
||||
Loader.notifyWorkers({
|
||||
action: 'css-propagate',
|
||||
cache: message.cache,
|
||||
acpCache: message.acpCache
|
||||
}, worker.pid);
|
||||
break;
|
||||
case 'templates:compiled':
|
||||
Loader.templatesCompiled = true;
|
||||
|
||||
Loader.notifyWorkers({
|
||||
action: 'templates:compiled',
|
||||
acpCache: message.acpCache,
|
||||
hash: message.hash
|
||||
}, worker.pid);
|
||||
break;
|
||||
}
|
||||
@@ -169,7 +158,7 @@ function forkWorker(index, isPrimary) {
|
||||
}
|
||||
|
||||
process.env.isPrimary = isPrimary;
|
||||
process.env.isCluster = ports.length > 1 ? true : false;
|
||||
process.env.isCluster = true;
|
||||
process.env.port = ports[index];
|
||||
|
||||
var worker = fork('app.js', [], {
|
||||
@@ -192,12 +181,7 @@ function forkWorker(index, isPrimary) {
|
||||
}
|
||||
|
||||
function getPorts() {
|
||||
var _url = nconf.get('url');
|
||||
if (!_url) {
|
||||
console.log('[cluster] url is undefined, please check your config.json');
|
||||
process.exit();
|
||||
}
|
||||
var urlObject = url.parse(_url);
|
||||
var urlObject = url.parse(nconf.get('url'));
|
||||
var port = nconf.get('port') || nconf.get('PORT') || urlObject.port || 4567;
|
||||
if (!Array.isArray(port)) {
|
||||
port = [port];
|
||||
@@ -246,38 +230,35 @@ Loader.notifyWorkers = function(msg, worker_pid) {
|
||||
});
|
||||
};
|
||||
|
||||
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
|
||||
});
|
||||
|
||||
fs.writeFile(__dirname + '/pidfile', process.pid);
|
||||
}
|
||||
|
||||
async.series([
|
||||
Loader.init,
|
||||
Loader.displayStartupMessages,
|
||||
Loader.start
|
||||
], function(err) {
|
||||
if (err) {
|
||||
console.log('[loader] Error during startup: ' + err.message);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
// No config detected, kickstart web installer
|
||||
var child = require('child_process').fork('app');
|
||||
}
|
||||
nconf.argv().file({
|
||||
file: path.join(__dirname, '/config.json')
|
||||
});
|
||||
|
||||
if (nconf.get('daemon') !== false) {
|
||||
if (fs.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
|
||||
});
|
||||
|
||||
fs.writeFile(__dirname + '/pidfile', process.pid);
|
||||
}
|
||||
|
||||
async.series([
|
||||
Loader.init,
|
||||
Loader.displayStartupMessages,
|
||||
Loader.start
|
||||
], function(err) {
|
||||
if (err) {
|
||||
console.log('[loader] Error during startup: ' + err.message);
|
||||
}
|
||||
});
|
||||
63
minifier.js
63
minifier.js
@@ -1,44 +1,37 @@
|
||||
"use strict";
|
||||
|
||||
var uglifyjs = require('uglify-js');
|
||||
var async = require('async');
|
||||
var fs = require('fs');
|
||||
var file = require('./src/file');
|
||||
var uglifyjs = require('uglify-js'),
|
||||
less = require('less'),
|
||||
async = require('async'),
|
||||
fs = require('fs'),
|
||||
path = require('path'),
|
||||
crypto = require('crypto'),
|
||||
|
||||
var Minifier = {
|
||||
js: {}
|
||||
};
|
||||
Minifier = {
|
||||
js: {}
|
||||
};
|
||||
|
||||
/* Javascript */
|
||||
Minifier.js.minify = function (scripts, minify, callback) {
|
||||
|
||||
scripts = scripts.filter(function(file) {
|
||||
return file && file.endsWith('.js');
|
||||
return fs.existsSync(file);
|
||||
});
|
||||
|
||||
async.filter(scripts, function(script, next) {
|
||||
file.exists(script, function(exists) {
|
||||
if (!exists) {
|
||||
console.warn('[minifier] file not found, ' + script);
|
||||
}
|
||||
next(exists);
|
||||
if (minify) {
|
||||
minifyScripts(scripts, function() {
|
||||
callback.apply(this, arguments);
|
||||
});
|
||||
}, function(scripts) {
|
||||
if (minify) {
|
||||
minifyScripts(scripts, callback);
|
||||
} else {
|
||||
concatenateScripts(scripts, callback);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
concatenateScripts(scripts, callback);
|
||||
}
|
||||
};
|
||||
|
||||
process.on('message', function(payload) {
|
||||
switch(payload.action) {
|
||||
case 'js':
|
||||
Minifier.js.minify(payload.scripts, payload.minify, function(minified/*, sourceMap*/) {
|
||||
Minifier.js.minify(payload.scripts, payload.minify, function(minified) {
|
||||
process.send({
|
||||
type: 'end',
|
||||
// sourceMap: sourceMap,
|
||||
minified: minified
|
||||
});
|
||||
});
|
||||
@@ -47,19 +40,26 @@ process.on('message', function(payload) {
|
||||
});
|
||||
|
||||
function minifyScripts(scripts, callback) {
|
||||
// The portions of code involving the source map are commented out as they're broken in UglifyJS2
|
||||
// Follow along here: https://github.com/mishoo/UglifyJS2/issues/700
|
||||
try {
|
||||
var minified = uglifyjs.minify(scripts, {
|
||||
// outSourceMap: "nodebb.min.js.map",
|
||||
compress: false
|
||||
});
|
||||
}),
|
||||
hasher = crypto.createHash('md5'),
|
||||
hash;
|
||||
|
||||
callback(minified.code/*, minified.map*/);
|
||||
// Calculate js hash
|
||||
hasher.update(minified.code, 'utf-8');
|
||||
hash = hasher.digest('hex');
|
||||
process.send({
|
||||
type: 'hash',
|
||||
payload: hash.slice(0, 8)
|
||||
});
|
||||
|
||||
callback(minified.code);
|
||||
} catch(err) {
|
||||
process.send({
|
||||
type: 'error',
|
||||
message: err.message
|
||||
payload: err.message
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -69,9 +69,8 @@ function concatenateScripts(scripts, callback) {
|
||||
if (err) {
|
||||
process.send({
|
||||
type: 'error',
|
||||
message: err.message
|
||||
payload: err
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
scripts = scripts.join(require('os').EOL + ';');
|
||||
|
||||
491
nodebb
491
nodebb
@@ -1,387 +1,136 @@
|
||||
#!/usr/bin/env node
|
||||
#!/bin/bash
|
||||
|
||||
try {
|
||||
var colors = require('colors'),
|
||||
cproc = require('child_process'),
|
||||
argv = require('minimist')(process.argv.slice(2)),
|
||||
fs = require('fs'),
|
||||
path = require('path'),
|
||||
request = require('request'),
|
||||
semver = require('semver'),
|
||||
prompt = require('prompt'),
|
||||
async = require('async');
|
||||
} catch (e) {
|
||||
if (e.code === 'MODULE_NOT_FOUND') {
|
||||
process.stdout.write('NodeBB could not be started because it\'s dependencies have not been installed.\n');
|
||||
process.stdout.write('Please ensure that you have executed "npm install --production" prior to running NodeBB.\n\n');
|
||||
process.stdout.write('For more information, please see: https://docs.nodebb.org/en/latest/installing/os.html\n\n');
|
||||
process.stdout.write('Could not start: ' + e.code + '\n');
|
||||
# $0 script path
|
||||
# $1 action
|
||||
# $2 subaction
|
||||
|
||||
process.exit(1);
|
||||
}
|
||||
node="$(which nodejs 2>/dev/null)";
|
||||
if [ $? -gt 0 ];
|
||||
then node="$(which node)";
|
||||
fi
|
||||
|
||||
function pidExists() {
|
||||
if [ -e "pidfile" ];
|
||||
then
|
||||
if ps -p $(cat pidfile) > /dev/null
|
||||
then return 1;
|
||||
else
|
||||
rm ./pidfile;
|
||||
return 0;
|
||||
fi
|
||||
else
|
||||
return 0;
|
||||
fi
|
||||
}
|
||||
|
||||
var getRunningPid = function(callback) {
|
||||
fs.readFile(__dirname + '/pidfile', {
|
||||
encoding: 'utf-8'
|
||||
}, function(err, pid) {
|
||||
if (err) {
|
||||
return callback(err);
|
||||
}
|
||||
case "$1" in
|
||||
start)
|
||||
echo "Starting NodeBB";
|
||||
echo " \"./nodebb stop\" to stop the NodeBB server";
|
||||
echo " \"./nodebb log\" to view server output";
|
||||
|
||||
try {
|
||||
process.kill(parseInt(pid, 10), 0);
|
||||
callback(null, parseInt(pid, 10));
|
||||
} catch(e) {
|
||||
callback(e);
|
||||
}
|
||||
});
|
||||
},
|
||||
getCurrentVersion = function(callback) {
|
||||
fs.readFile(path.join(__dirname, 'package.json'), { encoding: 'utf-8' }, function(err, pkg) {
|
||||
try {
|
||||
pkg = JSON.parse(pkg);
|
||||
return callback(null, pkg.version);
|
||||
} catch(err) {
|
||||
return callback(err);
|
||||
}
|
||||
})
|
||||
},
|
||||
fork = function (args) {
|
||||
cproc.fork('app.js', args, {
|
||||
cwd: __dirname,
|
||||
silent: false
|
||||
});
|
||||
},
|
||||
getInstalledPlugins = function(callback) {
|
||||
async.parallel({
|
||||
files: async.apply(fs.readdir, path.join(__dirname, 'node_modules')),
|
||||
deps: async.apply(fs.readFile, path.join(__dirname, 'package.json'), { encoding: 'utf-8' })
|
||||
}, function(err, payload) {
|
||||
var isNbbModule = /^nodebb-(?:plugin|theme|widget|rewards)-[\w\-]+$/,
|
||||
moduleName, isGitRepo;
|
||||
# Start the loader daemon
|
||||
"$node" loader "$@"
|
||||
;;
|
||||
|
||||
payload.files = payload.files.filter(function(file) {
|
||||
return isNbbModule.test(file);
|
||||
});
|
||||
stop)
|
||||
pidExists;
|
||||
if [ 0 -eq $? ];
|
||||
then
|
||||
echo "NodeBB is already stopped.";
|
||||
else
|
||||
echo "Stopping NodeBB. Goodbye!";
|
||||
kill $(cat pidfile);
|
||||
fi
|
||||
;;
|
||||
|
||||
try {
|
||||
payload.deps = JSON.parse(payload.deps).dependencies;
|
||||
payload.bundled = [];
|
||||
payload.installed = [];
|
||||
} catch (err) {
|
||||
return callback(err);
|
||||
}
|
||||
restart)
|
||||
pidExists;
|
||||
if [ 0 -eq $? ];
|
||||
then
|
||||
echo "NodeBB could not be restarted, as a running instance could not be found.";
|
||||
else
|
||||
echo "Restarting NodeBB.";
|
||||
kill -1 $(cat pidfile);
|
||||
fi
|
||||
;;
|
||||
|
||||
for (moduleName in payload.deps) {
|
||||
if (isNbbModule.test(moduleName)) {
|
||||
payload.bundled.push(moduleName);
|
||||
}
|
||||
}
|
||||
reload)
|
||||
pidExists;
|
||||
if [ 0 -eq $? ];
|
||||
then
|
||||
echo "NodeBB could not be reloaded, as a running instance could not be found.";
|
||||
else
|
||||
echo "Reloading NodeBB.";
|
||||
kill -12 $(cat pidfile);
|
||||
fi
|
||||
;;
|
||||
|
||||
// Whittle down deps to send back only extraneously installed plugins/themes/etc
|
||||
payload.files.forEach(function(moduleName) {
|
||||
try {
|
||||
fs.accessSync(path.join(__dirname, 'node_modules/' + moduleName, '.git'));
|
||||
isGitRepo = true;
|
||||
} catch(e) {
|
||||
isGitRepo = false;
|
||||
}
|
||||
status)
|
||||
pidExists;
|
||||
if [ 0 -eq $? ];
|
||||
then
|
||||
echo "NodeBB is not running";
|
||||
echo " \"./nodebb start\" to launch the NodeBB server";
|
||||
else
|
||||
echo "NodeBB Running (pid $(cat pidfile))";
|
||||
echo " \"./nodebb stop\" to stop the NodeBB server";
|
||||
echo " \"./nodebb log\" to view server output";
|
||||
echo " \"./nodebb restart\" to restart NodeBB";
|
||||
fi
|
||||
;;
|
||||
|
||||
if (
|
||||
payload.files.indexOf(moduleName) !== -1 // found in `node_modules/`
|
||||
&& payload.bundled.indexOf(moduleName) === -1 // not found in `package.json`
|
||||
&& !fs.lstatSync(path.join(__dirname, 'node_modules/' + moduleName)).isSymbolicLink() // is not a symlink
|
||||
&& !isGitRepo // .git/ does not exist, so it is not a git repository
|
||||
) {
|
||||
payload.installed.push(moduleName);
|
||||
}
|
||||
});
|
||||
log)
|
||||
clear;
|
||||
tail -F ./logs/output.log;
|
||||
;;
|
||||
|
||||
getModuleVersions(payload.installed, callback);
|
||||
});
|
||||
},
|
||||
getModuleVersions = function(modules, callback) {
|
||||
var versionHash = {};
|
||||
upgrade)
|
||||
npm install
|
||||
# ls -d node_modules/nodebb* | xargs -n1 basename | xargs npm install
|
||||
# ls -d node_modules/nodebb* | xargs -n1 basename | xargs npm update
|
||||
npm i nodebb-theme-vanilla nodebb-theme-lavender nodebb-widget-essentials
|
||||
"$node" app --upgrade
|
||||
touch package.json
|
||||
;;
|
||||
|
||||
async.eachLimit(modules, 50, function(module, next) {
|
||||
fs.readFile(path.join(__dirname, 'node_modules/' + module + '/package.json'), { encoding: 'utf-8' }, function(err, pkg) {
|
||||
try {
|
||||
pkg = JSON.parse(pkg);
|
||||
versionHash[module] = pkg.version;
|
||||
next();
|
||||
} catch (err) {
|
||||
next(err);
|
||||
}
|
||||
});
|
||||
}, function(err) {
|
||||
callback(err, versionHash);
|
||||
});
|
||||
},
|
||||
checkPlugins = function(standalone, callback) {
|
||||
if (standalone) {
|
||||
process.stdout.write('Checking installed plugins and themes for updates... ');
|
||||
}
|
||||
setup)
|
||||
"$node" app --setup "$@"
|
||||
;;
|
||||
|
||||
async.waterfall([
|
||||
async.apply(async.parallel, {
|
||||
plugins: async.apply(getInstalledPlugins),
|
||||
version: async.apply(getCurrentVersion)
|
||||
}),
|
||||
function(payload, next) {
|
||||
var toCheck = Object.keys(payload.plugins);
|
||||
reset)
|
||||
"$node" app --reset --$2
|
||||
;;
|
||||
|
||||
if (!toCheck.length) {
|
||||
process.stdout.write('OK'.green + '\n'.reset);
|
||||
return next(null, []); // no extraneous plugins installed
|
||||
}
|
||||
dev)
|
||||
echo "Launching NodeBB in \"development\" mode."
|
||||
echo "To run the production build of NodeBB, please use \"forever\"."
|
||||
echo "More Information: https://docs.nodebb.org/en/latest/running/index.html"
|
||||
NODE_ENV=development "$node" loader --no-daemon "$@"
|
||||
;;
|
||||
|
||||
request({
|
||||
method: 'GET',
|
||||
url: 'https://packages.nodebb.org/api/v1/suggest?version=' + payload.version + '&package[]=' + toCheck.join('&package[]='),
|
||||
json: true
|
||||
}, function(err, res, body) {
|
||||
if (err) {
|
||||
process.stdout.write('error'.red + '\n'.reset);
|
||||
return next(err);
|
||||
}
|
||||
process.stdout.write('OK'.green + '\n'.reset);
|
||||
watch)
|
||||
echo "Launching NodeBB in \"development\" mode."
|
||||
echo "To run the production build of NodeBB, please use \"forever\"."
|
||||
echo "More Information: https://docs.nodebb.org/en/latest/running/index.html"
|
||||
NODE_ENV=development supervisor -q --ignore public/templates,public/nodebb.min.js,public/nodebb.min.js.map --extensions 'node|js|tpl|less' -- app "$@"
|
||||
;;
|
||||
|
||||
if (!Array.isArray(body) && toCheck.length === 1) {
|
||||
body = [body];
|
||||
}
|
||||
|
||||
var current, suggested,
|
||||
upgradable = body.map(function(suggestObj) {
|
||||
current = payload.plugins[suggestObj.package];
|
||||
suggested = suggestObj.version;
|
||||
|
||||
if (suggestObj.code === 'match-found' && semver.gt(suggested, current)) {
|
||||
return {
|
||||
name: suggestObj.package,
|
||||
current: current,
|
||||
suggested: suggested
|
||||
}
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}).filter(Boolean);
|
||||
|
||||
next(null, upgradable);
|
||||
})
|
||||
}
|
||||
], callback);
|
||||
},
|
||||
upgradePlugins = function(callback) {
|
||||
var standalone = false;
|
||||
if (typeof callback !== 'function') {
|
||||
callback = function() {};
|
||||
standalone = true;
|
||||
};
|
||||
|
||||
checkPlugins(standalone, function(err, found) {
|
||||
if (err) {
|
||||
process.stdout.write('\Warning'.yellow + ': An unexpected error occured when attempting to verify plugin upgradability\n'.reset);
|
||||
return callback(err);
|
||||
}
|
||||
|
||||
if (found && found.length) {
|
||||
process.stdout.write('\nA total of ' + new String(found.length).bold + ' package(s) can be upgraded:\n');
|
||||
found.forEach(function(suggestObj) {
|
||||
process.stdout.write(' * '.yellow + suggestObj.name.reset + ' (' + suggestObj.current.yellow + ' -> '.reset + suggestObj.suggested.green + ')\n'.reset);
|
||||
});
|
||||
process.stdout.write('\n');
|
||||
} else {
|
||||
if (standalone) {
|
||||
process.stdout.write('\nAll packages up-to-date!'.green + '\n'.reset);
|
||||
}
|
||||
return callback();
|
||||
}
|
||||
|
||||
prompt.message = '';
|
||||
prompt.delimiter = '';
|
||||
|
||||
prompt.start();
|
||||
prompt.get({
|
||||
name: 'upgrade',
|
||||
description: 'Proceed with upgrade (y|n)?'.reset,
|
||||
type: 'string'
|
||||
}, function(err, result) {
|
||||
if (['y', 'Y', 'yes', 'YES'].indexOf(result.upgrade) !== -1) {
|
||||
process.stdout.write('\nUpgrading packages...');
|
||||
var args = ['npm', 'i'];
|
||||
found.forEach(function(suggestObj) {
|
||||
args.push(suggestObj.name + '@' + suggestObj.suggested);
|
||||
});
|
||||
|
||||
require('child_process').execFile('/usr/bin/env', args, { stdio: 'ignore' }, function(err) {
|
||||
if (!err) {
|
||||
process.stdout.write(' OK\n'.green);
|
||||
}
|
||||
|
||||
callback(err);
|
||||
});
|
||||
} else {
|
||||
process.stdout.write('\nPackage upgrades skipped'.yellow + '. Check for upgrades at any time by running "'.reset + './nodebb upgrade-plugins'.green + '".\n'.reset);
|
||||
callback();
|
||||
}
|
||||
})
|
||||
});
|
||||
};
|
||||
|
||||
switch(process.argv[2]) {
|
||||
case 'status':
|
||||
getRunningPid(function(err, pid) {
|
||||
if (!err) {
|
||||
process.stdout.write('\nNodeBB Running '.bold + '(pid '.cyan + pid.toString().cyan + ')\n'.cyan);
|
||||
process.stdout.write('\t"' + './nodebb stop'.yellow + '" to stop the NodeBB server\n');
|
||||
process.stdout.write('\t"' + './nodebb log'.yellow + '" to view server output\n');
|
||||
process.stdout.write('\t"' + './nodebb restart'.yellow + '" to restart NodeBB\n\n');
|
||||
} else {
|
||||
process.stdout.write('\nNodeBB is not running\n'.bold);
|
||||
process.stdout.write('\t"' + './nodebb start'.yellow + '" to launch the NodeBB server\n\n'.reset);
|
||||
}
|
||||
})
|
||||
break;
|
||||
|
||||
case 'start':
|
||||
process.stdout.write('\nStarting NodeBB\n'.bold);
|
||||
process.stdout.write(' "' + './nodebb stop'.yellow + '" to stop the NodeBB server\n');
|
||||
process.stdout.write(' "' + './nodebb log'.yellow + '" to view server output\n');
|
||||
process.stdout.write(' "' + './nodebb restart'.yellow + '" to restart NodeBB\n\n'.reset);
|
||||
|
||||
// Spawn a new NodeBB process
|
||||
cproc.fork(__dirname + '/loader.js', {
|
||||
env: process.env
|
||||
});
|
||||
break;
|
||||
|
||||
case 'stop':
|
||||
getRunningPid(function(err, pid) {
|
||||
if (!err) {
|
||||
process.kill(pid, 'SIGTERM');
|
||||
process.stdout.write('Stopping NodeBB. Goodbye!\n')
|
||||
} else {
|
||||
process.stdout.write('NodeBB is already stopped.\n');
|
||||
}
|
||||
});
|
||||
break;
|
||||
|
||||
case 'restart':
|
||||
getRunningPid(function(err, pid) {
|
||||
if (!err) {
|
||||
process.kill(pid, 'SIGHUP');
|
||||
process.stdout.write('\nRestarting NodeBB\n'.bold);
|
||||
} else {
|
||||
process.stdout.write('NodeBB could not be restarted, as a running instance could not be found.\n');
|
||||
}
|
||||
});
|
||||
break;
|
||||
|
||||
case 'reload':
|
||||
getRunningPid(function(err, pid) {
|
||||
if (!err) {
|
||||
process.kill(pid, 'SIGUSR2');
|
||||
} else {
|
||||
process.stdout.write('NodeBB could not be reloaded, as a running instance could not be found.\n');
|
||||
}
|
||||
});
|
||||
break;
|
||||
|
||||
case 'dev':
|
||||
process.env.NODE_ENV = 'development';
|
||||
cproc.fork(__dirname + '/loader.js', ['--no-daemon', '--no-silent'], {
|
||||
env: process.env
|
||||
});
|
||||
break;
|
||||
|
||||
case 'log':
|
||||
process.stdout.write('\nType '.red + 'Ctrl-C '.bold + 'to exit'.red);
|
||||
process.stdout.write('\n\n'.reset);
|
||||
cproc.spawn('tail', ['-F', './logs/output.log'], {
|
||||
cwd: __dirname,
|
||||
stdio: 'inherit'
|
||||
});
|
||||
break;
|
||||
|
||||
case 'setup':
|
||||
cproc.fork('app.js', ['--setup'], {
|
||||
cwd: __dirname,
|
||||
silent: false
|
||||
});
|
||||
break;
|
||||
|
||||
case 'reset':
|
||||
var args = process.argv.slice(0);
|
||||
args.unshift('--reset');
|
||||
fork(args);
|
||||
break;
|
||||
|
||||
case 'activate':
|
||||
var args = process.argv.slice(0);
|
||||
args.unshift('--activate');
|
||||
fork(args);
|
||||
break;
|
||||
|
||||
case 'plugins':
|
||||
var args = process.argv.slice(0);
|
||||
args.unshift('--plugins');
|
||||
fork(args);
|
||||
break;
|
||||
|
||||
case 'upgrade-plugins':
|
||||
upgradePlugins();
|
||||
break;
|
||||
|
||||
case 'upgrade':
|
||||
async.series([
|
||||
function(next) {
|
||||
process.stdout.write('1. '.bold + 'Bringing base dependencies up to date... '.yellow);
|
||||
require('child_process').execFile('/usr/bin/env', ['npm', 'i', '--production'], { stdio: 'ignore' }, next);
|
||||
},
|
||||
function(next) {
|
||||
process.stdout.write('OK\n'.green);
|
||||
process.stdout.write('2. '.bold + 'Checking installed plugins for updates... '.yellow);
|
||||
upgradePlugins(next);
|
||||
},
|
||||
function(next) {
|
||||
process.stdout.write('3. '.bold + 'Updating NodeBB data store schema...\n'.yellow);
|
||||
var upgradeProc = cproc.fork('app.js', ['--upgrade'], {
|
||||
cwd: __dirname,
|
||||
silent: false
|
||||
});
|
||||
|
||||
upgradeProc.on('close', next)
|
||||
}
|
||||
], function(err) {
|
||||
if (err) {
|
||||
process.stdout.write('\nError'.red + ': ' + err.message + '\n');
|
||||
} else {
|
||||
var message = 'NodeBB Upgrade Complete!';
|
||||
// some consoles will return undefined/zero columns, so just use 2 spaces in upgrade script if we can't get our column count
|
||||
var columns = process.stdout.columns;
|
||||
var spaces = columns ? new Array(Math.floor(columns / 2) - (message.length / 2) + 1).join(' ') : " ";
|
||||
|
||||
process.stdout.write('OK\n'.green);
|
||||
process.stdout.write('\n' + spaces + message.green.bold + '\n\n'.reset);
|
||||
}
|
||||
});
|
||||
break;
|
||||
|
||||
default:
|
||||
process.stdout.write('\nWelcome to NodeBB\n\n'.bold);
|
||||
process.stdout.write('Usage: ./nodebb {start|stop|reload|restart|log|setup|reset|upgrade|dev}\n\n');
|
||||
process.stdout.write('\t' + 'start'.yellow + '\tStart the NodeBB server\n');
|
||||
process.stdout.write('\t' + 'stop'.yellow + '\tStops the NodeBB server\n');
|
||||
process.stdout.write('\t' + 'reload'.yellow + '\tRestarts NodeBB\n');
|
||||
process.stdout.write('\t' + 'restart'.yellow + '\tRestarts NodeBB\n');
|
||||
process.stdout.write('\t' + 'log'.yellow + '\tOpens the logging interface (useful for debugging)\n');
|
||||
process.stdout.write('\t' + 'setup'.yellow + '\tRuns the NodeBB setup script\n');
|
||||
process.stdout.write('\t' + 'reset'.yellow + '\tDisables all plugins, restores the default theme.\n');
|
||||
process.stdout.write('\t' + 'activate'.yellow + '\tActivate a plugin on start up.\n');
|
||||
process.stdout.write('\t' + 'plugins'.yellow + '\tList all plugins that have been installed.\n');
|
||||
process.stdout.write('\t' + 'upgrade'.yellow + '\tRun NodeBB upgrade scripts, ensure packages are up-to-date\n');
|
||||
process.stdout.write('\t' + 'dev'.yellow + '\tStart NodeBB in interactive development mode\n');
|
||||
process.stdout.write('\n'.reset);
|
||||
break;
|
||||
}
|
||||
*)
|
||||
echo "Welcome to NodeBB"
|
||||
echo $"Usage: $0 {start|stop|reload|restart|log|setup|reset|upgrade|dev|watch}"
|
||||
echo ''
|
||||
column -s ' ' -t <<< '
|
||||
start Start the NodeBB server
|
||||
stop Stops the NodeBB server
|
||||
reload Restarts NodeBB
|
||||
restart Restarts NodeBB
|
||||
log Opens the logging interface (useful for debugging)
|
||||
setup Runs the NodeBB setup script
|
||||
reset Disables all plugins, restores the default theme.
|
||||
upgrade Run NodeBB upgrade scripts, ensure packages are up-to-date
|
||||
dev Start NodeBB in interactive development mode
|
||||
watch Start NodeBB in development mode and watch for changes
|
||||
'
|
||||
exit 1
|
||||
esac
|
||||
|
||||
122
nodebb.bat
122
nodebb.bat
@@ -1,122 +0,0 @@
|
||||
@echo off
|
||||
|
||||
rem %1 action
|
||||
rem %2 subaction
|
||||
|
||||
setlocal enabledelayedexpansion
|
||||
2>nul call :CASE_%1
|
||||
if ERRORLEVEL 1 call :DEFAULT_CASE
|
||||
|
||||
exit /B
|
||||
|
||||
:CASE_start
|
||||
echo Starting NodeBB
|
||||
echo "nodebb.bat stop" to stop the NodeBB server
|
||||
echo "nodebb.bat log" to view server output
|
||||
|
||||
rem Start the loader daemon
|
||||
node loader %*
|
||||
|
||||
goto END_CASE
|
||||
|
||||
:CASE_stop
|
||||
call :pidexists
|
||||
if %_result%==0 (
|
||||
echo NodeBB is already stopped.
|
||||
) else (
|
||||
echo Stopping NodeBB. Goodbye!
|
||||
|
||||
rem Doing this forcefully is probably not the best method
|
||||
taskkill /PID !_pid! /f>nul
|
||||
)
|
||||
|
||||
goto END_CASE
|
||||
|
||||
:CASE_restart
|
||||
echo Unsupported
|
||||
|
||||
goto END_CASE
|
||||
|
||||
:CASE_reload
|
||||
echo Unsupported
|
||||
|
||||
goto END_CASE
|
||||
|
||||
:CASE_status
|
||||
call :pidexists
|
||||
if %_result%==0 (
|
||||
echo NodeBB is not running
|
||||
echo "nodebb.bat start" to launch the NodeBB server
|
||||
) else (
|
||||
echo NodeBB Running ^(pid !_pid!^)
|
||||
echo "nodebb.bat stop" to stop the NodeBB server
|
||||
echo "nodebb.bat log" to view server output
|
||||
echo "nodebb.bat restart" to restart NodeBB
|
||||
)
|
||||
|
||||
goto END_CASE
|
||||
|
||||
:CASE_log
|
||||
cls
|
||||
type .\logs\output.log
|
||||
|
||||
goto END_CASE
|
||||
|
||||
:CASE_upgrade
|
||||
call npm install
|
||||
call npm i nodebb-theme-vanilla nodebb-theme-lavender nodebb-widget-essentials
|
||||
node app --upgrade
|
||||
copy /b package.json +,,>nul
|
||||
|
||||
goto END_CASE
|
||||
|
||||
:CASE_setup
|
||||
node app --setup %*
|
||||
|
||||
goto END_CASE
|
||||
|
||||
:CASE_reset
|
||||
node app --reset --%2
|
||||
|
||||
goto END_CASE
|
||||
|
||||
:CASE_dev
|
||||
echo Launching NodeBB in "development" mode.
|
||||
echo To run the production build of NodeBB, please use "forever".
|
||||
echo More Information: https://docs.nodebb.org/en/latest/running/index.html
|
||||
set NODE_ENV=development
|
||||
node loader --no-daemon %*
|
||||
|
||||
goto END_CASE
|
||||
|
||||
:CASE_watch
|
||||
echo Not supported
|
||||
|
||||
goto END_CASE
|
||||
|
||||
:DEFAULT_CASE
|
||||
echo Welcome to NodeBB
|
||||
echo Usage: nodebb.bat ^{start^|stop^|reload^|restart^|log^|setup^|reset^|upgrade^|dev^|watch^}
|
||||
|
||||
goto END_CASE
|
||||
|
||||
:END_CASE
|
||||
endlocal
|
||||
VER > NUL
|
||||
goto :EOF
|
||||
|
||||
:pidexists
|
||||
if exist %~dp0pidfile (
|
||||
set /p _pid=<pidfile
|
||||
|
||||
for /f "usebackq" %%Z in (`tasklist /nh /fi "PID eq !_pid!"`) do (
|
||||
if %%Z==INFO: (
|
||||
del pidfile
|
||||
set _result=0
|
||||
) else (
|
||||
set _result=1
|
||||
)
|
||||
)
|
||||
) else (
|
||||
set _result=0
|
||||
)
|
||||
2610
npm-shrinkwrap.json
generated
Normal file
2610
npm-shrinkwrap.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
105
package.json
105
package.json
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"name": "nodebb",
|
||||
"license": "GPL-3.0",
|
||||
"license": "GPLv3 or later",
|
||||
"description": "NodeBB Forum",
|
||||
"version": "1.1.2",
|
||||
"version": "0.6.0",
|
||||
"homepage": "http://www.nodebb.org",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
@@ -10,88 +10,63 @@
|
||||
},
|
||||
"main": "app.js",
|
||||
"scripts": {
|
||||
"start": "node loader.js",
|
||||
"test": "./node_modules/.bin/istanbul cover ./node_modules/.bin/_mocha -- ./tests -t 10000"
|
||||
"start": "./nodebb start",
|
||||
"stop": "./nodebb stop",
|
||||
"test": "mocha ./tests -t 10000"
|
||||
},
|
||||
"dependencies": {
|
||||
"async": "~1.5.0",
|
||||
"autoprefixer": "^6.2.3",
|
||||
"bcryptjs": "~2.3.0",
|
||||
"async": "~0.9.0",
|
||||
"bcryptjs": "~2.1.0",
|
||||
"body-parser": "^1.9.0",
|
||||
"chart.js": "^2.1.0",
|
||||
"colors": "^1.1.0",
|
||||
"compression": "^1.1.0",
|
||||
"connect-ensure-login": "^0.1.1",
|
||||
"connect-flash": "^0.1.1",
|
||||
"connect-mongo": "~1.1.0",
|
||||
"connect-multiparty": "^2.0.0",
|
||||
"connect-redis": "~3.0.2",
|
||||
"connect-multiparty": "^1.2.4",
|
||||
"cookie-parser": "^1.3.3",
|
||||
"cron": "^1.0.5",
|
||||
"csurf": "^1.6.1",
|
||||
"daemon": "~1.1.0",
|
||||
"express": "^4.9.5",
|
||||
"express-session": "^1.8.2",
|
||||
"express-useragent": "0.2.4",
|
||||
"html-to-text": "2.0.0",
|
||||
"ip": "1.1.2",
|
||||
"jimp": "0.2.21",
|
||||
"json-2-csv": "^2.0.22",
|
||||
"gm": "1.17.0",
|
||||
"gravatar": "^1.1.0",
|
||||
"heapdump": "^0.3.0",
|
||||
"less": "^2.0.0",
|
||||
"logrotate-stream": "^0.2.3",
|
||||
"lru-cache": "4.0.0",
|
||||
"mime": "^1.3.4",
|
||||
"minimist": "^1.1.1",
|
||||
"mkdirp": "~0.5.0",
|
||||
"mongodb": "~2.1.3",
|
||||
"morgan": "^1.3.2",
|
||||
"mousetrap": "^1.5.3",
|
||||
"nconf": "~0.8.2",
|
||||
"nodebb-plugin-composer-default": "4.1.7",
|
||||
"nodebb-plugin-dbsearch": "1.0.2",
|
||||
"nodebb-plugin-emoji-extended": "1.1.1",
|
||||
"nodebb-plugin-emoji-one": "1.1.5",
|
||||
"nodebb-plugin-markdown": "6.0.2",
|
||||
"nodebb-plugin-mentions": "1.1.3",
|
||||
"nodebb-plugin-soundpack-default": "0.1.6",
|
||||
"nodebb-plugin-spam-be-gone": "0.4.9",
|
||||
"nodebb-rewards-essentials": "0.0.9",
|
||||
"nodebb-theme-lavender": "3.0.13",
|
||||
"nodebb-theme-persona": "4.1.19",
|
||||
"nodebb-theme-vanilla": "5.1.9",
|
||||
"nodebb-widget-essentials": "2.0.10",
|
||||
"nodemailer": "2.0.0",
|
||||
"nodemailer-sendmail-transport": "1.0.0",
|
||||
"nodemailer-smtp-transport": "^2.4.1",
|
||||
"passport": "^0.3.0",
|
||||
"nconf": "~0.7.1",
|
||||
"nodebb-plugin-dbsearch": "^0.1.0",
|
||||
"nodebb-plugin-markdown": "^0.8.0",
|
||||
"nodebb-plugin-mentions": "^0.7.0",
|
||||
"nodebb-plugin-soundpack-default": "~0.1.1",
|
||||
"nodebb-plugin-spam-be-gone": "^0.4.0",
|
||||
"nodebb-theme-lavender": "^0.2.0",
|
||||
"nodebb-theme-vanilla": "^0.2.0",
|
||||
"nodebb-widget-essentials": "~0.2.0",
|
||||
"npm": "^2.1.4",
|
||||
"passport": "^0.2.1",
|
||||
"passport-local": "1.0.0",
|
||||
"postcss": "^5.0.13",
|
||||
"prompt": "^1.0.0",
|
||||
"redis": "~2.4.2",
|
||||
"prompt": "^0.2.14",
|
||||
"request": "^2.44.0",
|
||||
"rimraf": "~2.5.0",
|
||||
"rimraf": "~2.2.6",
|
||||
"rss": "^1.0.0",
|
||||
"semver": "^5.1.0",
|
||||
"semver": "^4.0.3",
|
||||
"serve-favicon": "^2.1.5",
|
||||
"sitemap": "^1.4.0",
|
||||
"socket.io": "^1.4.0",
|
||||
"socket.io-client": "^1.4.0",
|
||||
"socket.io-redis": "^1.0.0",
|
||||
"socketio-wildcard": "~0.3.0",
|
||||
"sitemap": "^0.7.4",
|
||||
"socket.io": "^1.2.1",
|
||||
"socket.io-client": "^1.2.1",
|
||||
"socket.io-redis": "^0.1.3",
|
||||
"socketio-wildcard": "~0.1.1",
|
||||
"string": "^3.0.0",
|
||||
"templates.js": "0.3.4",
|
||||
"toobusy-js": "^0.4.2",
|
||||
"uglify-js": "^2.6.0",
|
||||
"underscore": "^1.8.3",
|
||||
"underscore.deep": "^0.5.1",
|
||||
"validator": "^5.0.0",
|
||||
"winston": "^2.1.0",
|
||||
"xregexp": "~3.1.0"
|
||||
"templates.js": "0.1.9",
|
||||
"uglify-js": "git+https://github.com/julianlam/UglifyJS2.git",
|
||||
"underscore": "~1.7.0",
|
||||
"validator": "~3.26.0",
|
||||
"winston": "^0.8.1",
|
||||
"xregexp": "~2.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"grunt": "~0.4.5",
|
||||
"grunt-contrib-watch": "^1.0.0",
|
||||
"istanbul": "^0.4.2",
|
||||
"mocha": "~1.13.0"
|
||||
},
|
||||
"bugs": {
|
||||
@@ -103,18 +78,18 @@
|
||||
"maintainers": [
|
||||
{
|
||||
"name": "Andrew Rodrigues",
|
||||
"email": "andrew@nodebb.org",
|
||||
"email": "andrew@designcreateplay.com",
|
||||
"url": "https://github.com/psychobunny"
|
||||
},
|
||||
{
|
||||
"name": "Julian Lam",
|
||||
"email": "julian@nodebb.org",
|
||||
"email": "julian@designcreateplay.com",
|
||||
"url": "https://github.com/julianlam"
|
||||
},
|
||||
{
|
||||
"name": "Barış Soner Uşaklı",
|
||||
"email": "baris@nodebb.org",
|
||||
"email": "baris@designcreateplay.com",
|
||||
"url": "https://github.com/barisusakli"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
177
public/503.html
177
public/503.html
@@ -1,177 +0,0 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>Excessive Load Warning</title>
|
||||
<link href='http://fonts.googleapis.com/css?family=Ubuntu:400,500,700' rel='stylesheet' type='text/css'>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<style type="text/css">
|
||||
body {
|
||||
background: #00A9EA;
|
||||
color: white;
|
||||
font-family: 'Ubuntu', sans-serif;
|
||||
text-align: center;
|
||||
-webkit-transform-style: preserve-3d;
|
||||
-moz-transform-style: preserve-3d;
|
||||
transform-style: preserve-3d;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 250px;
|
||||
color: #fff;
|
||||
opacity: 0.5;
|
||||
margin: 10px;
|
||||
cursor: pointer;
|
||||
-moz-user-select: none;
|
||||
-khtml-user-select: none;
|
||||
-webkit-user-select: none;
|
||||
}
|
||||
|
||||
p {
|
||||
font-size: 20px;
|
||||
}
|
||||
|
||||
p strong {
|
||||
font-size: 28px;
|
||||
}
|
||||
|
||||
@media (max-width: 640px) {
|
||||
h1 {
|
||||
font-size: 125px;
|
||||
}
|
||||
|
||||
p {
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
p strong {
|
||||
font-size: 20px;
|
||||
}
|
||||
}
|
||||
|
||||
.center {
|
||||
position: relative;
|
||||
top: 50%;
|
||||
-webkit-transform: translateY(50%);
|
||||
-ms-transform: translateY(50%);
|
||||
transform: translateY(50%);
|
||||
}
|
||||
|
||||
@-webkit-keyframes bounce {
|
||||
0%, 20%, 53%, 80%, 100% {
|
||||
-webkit-transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
|
||||
transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
|
||||
-webkit-transform: translate3d(0,0,0);
|
||||
transform: translate3d(0,0,0);
|
||||
}
|
||||
|
||||
40%, 43% {
|
||||
-webkit-transition-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
|
||||
transition-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
|
||||
-webkit-transform: translate3d(0, -30px, 0);
|
||||
transform: translate3d(0, -30px, 0);
|
||||
}
|
||||
|
||||
70% {
|
||||
-webkit-transition-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
|
||||
transition-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
|
||||
-webkit-transform: translate3d(0, -15px, 0);
|
||||
transform: translate3d(0, -15px, 0);
|
||||
}
|
||||
|
||||
90% {
|
||||
-webkit-transform: translate3d(0,-4px,0);
|
||||
transform: translate3d(0,-4px,0);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes bounce {
|
||||
0%, 20%, 53%, 80%, 100% {
|
||||
-webkit-transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
|
||||
transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
|
||||
-webkit-transform: translate3d(0,0,0);
|
||||
transform: translate3d(0,0,0);
|
||||
}
|
||||
|
||||
40%, 43% {
|
||||
-webkit-transition-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
|
||||
transition-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
|
||||
-webkit-transform: translate3d(0, -30px, 0);
|
||||
transform: translate3d(0, -30px, 0);
|
||||
}
|
||||
|
||||
70% {
|
||||
-webkit-transition-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
|
||||
transition-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
|
||||
-webkit-transform: translate3d(0, -15px, 0);
|
||||
transform: translate3d(0, -15px, 0);
|
||||
}
|
||||
|
||||
90% {
|
||||
-webkit-transform: translate3d(0,-4px,0);
|
||||
transform: translate3d(0,-4px,0);
|
||||
}
|
||||
}
|
||||
|
||||
.bounce {
|
||||
-webkit-animation-name: bounce;
|
||||
animation-name: bounce;
|
||||
-webkit-transform-origin: center bottom;
|
||||
-ms-transform-origin: center bottom;
|
||||
transform-origin: center bottom;
|
||||
}
|
||||
|
||||
.animated {
|
||||
-webkit-animation-duration: 1s;
|
||||
animation-duration: 1s;
|
||||
-webkit-animation-fill-mode: both;
|
||||
animation-fill-mode: both;
|
||||
}
|
||||
|
||||
.animated.infinite {
|
||||
-webkit-animation-iteration-count: infinite;
|
||||
animation-iteration-count: infinite;
|
||||
}
|
||||
|
||||
.animated.hinge {
|
||||
-webkit-animation-duration: 2s;
|
||||
animation-duration: 2s;
|
||||
}
|
||||
|
||||
.hide {
|
||||
display: none;
|
||||
}
|
||||
</style>
|
||||
<script type="text/javascript">
|
||||
window.onload = function() {
|
||||
var count = 0,
|
||||
bounce = document.getElementById('click-me');
|
||||
bounce.onclick = function() {
|
||||
count++;
|
||||
bounce.className = '';
|
||||
setTimeout(function() {
|
||||
bounce.className = 'animated bounce';
|
||||
}, 50);
|
||||
|
||||
if (count > 5) {
|
||||
document.getElementById('hide').className = '';
|
||||
}
|
||||
};
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="wrapper">
|
||||
<div class="center">
|
||||
<h1 id="click-me" class="animated bounce">503</h1>
|
||||
<p>
|
||||
<strong>This forum is temporarily unavailable due to excessive load.</strong>
|
||||
</p>
|
||||
<p>
|
||||
We shouldn't be down for long. Please check back shortly. Sorry for the inconvenience!
|
||||
</p>
|
||||
<p>
|
||||
<small id="hide" class="hide">Alright. You can stop clicking... it's not going to make the site come back sooner!</small>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 33 KiB |
@@ -1,7 +0,0 @@
|
||||
/*
|
||||
The following stylesheet is only included on pages that can execute javascript
|
||||
*/
|
||||
|
||||
[component="post/content"] img:not(.not-responsive):not([data-state]) {
|
||||
display: none !important;
|
||||
}
|
||||
@@ -1,20 +1,8 @@
|
||||
{
|
||||
"category": "فئة",
|
||||
"subcategories": "فئة فرعية",
|
||||
"new_topic_button": "موضوع جديد",
|
||||
"guest-login-post": "سجل بالدخول للرد",
|
||||
"no_topics": "<strong>لا توجد مواضيع في هذه الفئة</strong>لم لا تحاول إنشاء موضوع؟<br />",
|
||||
"browsing": "تصفح",
|
||||
"no_replies": "لم يرد أحد",
|
||||
"no_new_posts": "لا يوجد مشاركات جديدة.",
|
||||
"share_this_category": "انشر هذه الفئة",
|
||||
"watch": "تابع",
|
||||
"ignore": "تجاهل",
|
||||
"watching": "متابع",
|
||||
"ignoring": "متجاهل",
|
||||
"watching.description": "أظهر المواضيع في غير مقروء",
|
||||
"ignoring.description": "لا تظهر المواضيع في غير مقروء",
|
||||
"watch.message": "أنت اﻷن تتابع تحديثات هذه الفئة",
|
||||
"ignore.message": "أنت اﻷن تتجاهل تحديثات هذه الفئة",
|
||||
"watched-categories": "الفئات المتابعة"
|
||||
"ignore": "تجاهل"
|
||||
}
|
||||
@@ -1,35 +1,22 @@
|
||||
{
|
||||
"password-reset-requested": "تم طلب إعادة تعيين كلمة المرور - %1!",
|
||||
"password-reset-requested": "تم طلب إعادة تعيين كلمة السر - %1!",
|
||||
"welcome-to": "مرحبًا بك في %1",
|
||||
"invite": "دعوة من %1",
|
||||
"greeting_no_name": "مرحبًا",
|
||||
"greeting_with_name": "مرحبًا بك يا %1",
|
||||
"welcome.text1": "شكرًا على تسجيلك في %1!",
|
||||
"welcome.text2": "لتفعيل حسابك، نحتاج إلى التأكد من صحة عنوان البريد الإلكتروني الذي سجلت به.",
|
||||
"welcome.text3": "تم قبول نتسجيلك ، يمكنك الدخول باتسخدام اسم المستخدم و كلمة المرور.",
|
||||
"welcome.text2": "لتفعيل حسابك، نحتاج إلى التأكد من صحة عنوان البريد الإلكتروني الذي تسجلت به.",
|
||||
"welcome.cta": "انقر هنا لتفعيل عنوان بريدك الإلكتروني",
|
||||
"invitation.text1": "%1 قام بدعوتك للانضمام لـ %2",
|
||||
"invitation.ctr": "إضغط هنا لإنشاء حسابك",
|
||||
"reset.text1": "لقد توصلنا بطلب إعادة تعيين كلمة المرور الخاصة بك، ربما لكونك قد نسيتها, إن لم يكن الأمر كذلك، المرجو تجاهل هذه الرسالة.",
|
||||
"reset.text2": "لمواصلة طلب إعاة تعيين كلمة المرور، الرجاء تتبع هذا الرابط.",
|
||||
"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": "إستهلاك ل",
|
||||
"notif.chat.subject": "هناك محادثة جديدة من %1",
|
||||
"notif.chat.cta": "انقر هنا لمتابعة المحادثة",
|
||||
"notif.chat.unsub.info": "تم إرسال هذا الإشعار بوجودة محادثة جديدة وفقا لخيارات تسجيلك.",
|
||||
"notif.post.cta": "انقر هنا لقراءة الموضوع بأكمله",
|
||||
"notif.post.unsub.info": "تم إشعارك بهذه المشاركة بناءً على الخيارات التي سبق وأن حددتها.",
|
||||
"test.text1": "هذه رسالة تجريبية للتأكد من صحة إعدادت الرسائل الإلكترونية في منتدى NodeBB خاصتك.",
|
||||
"unsub.cta": "انقر هنا لتغيير تلك الإعدادات",
|
||||
"closing": "شكرًا لك!"
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"invalid-data": "بيانات غير صحيحة",
|
||||
"invalid-data": "بيانات غير صالحة",
|
||||
"not-logged-in": "لم تقم بتسجيل الدخول",
|
||||
"account-locked": "تم حظر حسابك مؤقتًا.",
|
||||
"search-requires-login": "البحث في المنتدى يتطلب حساب - الرجاء تسجيل الدخول أو التسجيل",
|
||||
"account-locked": "تم إقفال حسابكم مؤقتًا.",
|
||||
"search-requires-login": "البحث في المنتدى يستلزم توفرك على حساب! المرجو تسجيل دخولك أو إنشاء حساب!",
|
||||
"invalid-cid": "قائمة غير موجودة",
|
||||
"invalid-tid": "موضوع غير متواجد",
|
||||
"invalid-pid": "رد غير موجود",
|
||||
@@ -14,23 +14,14 @@
|
||||
"invalid-password": "كلمة السر غير مقبولة",
|
||||
"invalid-username-or-password": "المرجود تحديد اسم مستخدم و كلمة مرور",
|
||||
"invalid-search-term": "كلمة البحث غير صحيحة",
|
||||
"csrf-invalid": "We were unable to log you in, likely due to an expired session. Please try again",
|
||||
"invalid-pagination-value": "Invalid pagination value, must be at least %1 and at most %2",
|
||||
"invalid-pagination-value": "رقم الصفحة غير موجود",
|
||||
"username-taken": "اسم المستخدم مأخوذ",
|
||||
"email-taken": "البريد الالكتروني مأخوذ",
|
||||
"email-not-confirmed": "عنوان بريدك الإلكتروني غير مفعل بعد. انقر هنا لتفعيله من فضلك.",
|
||||
"email-not-confirmed-chat": "لا يمكنك الدردشة حتى تقوم بتأكيد بريدك الإلكتروني، الرجاء إضغط هنا لتأكيد بريدك اﻹلكتروني.",
|
||||
"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.",
|
||||
"username-too-short": "اسم المستخدم قصير.",
|
||||
"username-too-long": "اسم المستخدم طويل",
|
||||
"password-too-long": "Password too long",
|
||||
"user-banned": "المستخدم محظور",
|
||||
"user-too-new": "عذرا, يجب أن تنتظر 1% ثواني قبل قيامك بأول مشاركة",
|
||||
"blacklisted-ip": "Sorry, your IP address has been banned from this community. If you feel this is in error, please contact an administrator.",
|
||||
"ban-expiry-missing": "Please provide an end date for this ban",
|
||||
"user-too-new": "عذرًا، يجب الانتظار %1 ثواني قبل إضافة ردك الأول.",
|
||||
"no-category": "قائمة غير موجودة",
|
||||
"no-topic": "موضوع غير موجود",
|
||||
"no-post": "رد غير موجود",
|
||||
@@ -38,87 +29,39 @@
|
||||
"no-user": "اسم مستخدم غير موجود",
|
||||
"no-teaser": "مقتطف غير موجود",
|
||||
"no-privileges": "لاتملك الصلاحيات اللازمة للقيام بهذه العملية",
|
||||
"no-emailers-configured": "لا يمكن إرسال رسالة إلكترونية تجريبية لعدم وجود قوالب خاصة بالرسائل الإلكترونية،",
|
||||
"category-disabled": "قائمة معطلة",
|
||||
"topic-locked": "الموضوع مقفول",
|
||||
"post-edit-duration-expired": "You are only allowed to edit posts for %1 second(s) after posting",
|
||||
"post-edit-duration-expired-minutes": "You are only allowed to edit posts for %1 minute(s) after posting",
|
||||
"post-edit-duration-expired-minutes-seconds": "You are only allowed to edit posts for %1 minute(s) %2 second(s) after posting",
|
||||
"post-edit-duration-expired-hours": "You are only allowed to edit posts for %1 hour(s) after posting",
|
||||
"post-edit-duration-expired-hours-minutes": "You are only allowed to edit posts for %1 hour(s) %2 minute(s) after posting",
|
||||
"post-edit-duration-expired-days": "You are only allowed to edit posts for %1 day(s) after posting",
|
||||
"post-edit-duration-expired-days-hours": "You are only allowed to edit posts for %1 day(s) %2 hour(s) after posting",
|
||||
"post-delete-duration-expired": "You are only allowed to delete posts for %1 second(s) after posting",
|
||||
"post-delete-duration-expired-minutes": "You are only allowed to delete posts for %1 minute(s) after posting",
|
||||
"post-delete-duration-expired-minutes-seconds": "You are only allowed to delete posts for %1 minute(s) %2 second(s) after posting",
|
||||
"post-delete-duration-expired-hours": "You are only allowed to delete posts for %1 hour(s) after posting",
|
||||
"post-delete-duration-expired-hours-minutes": "You are only allowed to delete posts for %1 hour(s) %2 minute(s) after posting",
|
||||
"post-delete-duration-expired-days": "You are only allowed to delete posts for %1 day(s) after posting",
|
||||
"post-delete-duration-expired-days-hours": "You are only allowed to delete posts for %1 day(s) %2 hour(s) after posting",
|
||||
"content-too-short": "Please enter a longer post. Posts should contain at least %1 character(s).",
|
||||
"content-too-long": "Please enter a shorter post. Posts can't be longer than %1 character(s).",
|
||||
"title-too-short": "Please enter a longer title. Titles should contain at least %1 character(s).",
|
||||
"title-too-long": "Please enter a shorter title. Titles can't be longer than %1 character(s).",
|
||||
"too-many-posts": "You can only post once every %1 second(s) - please wait before posting again",
|
||||
"too-many-posts-newbie": "As a new user, you can only post once every %1 second(s) until you have earned %2 reputation - please wait before posting again",
|
||||
"tag-too-short": "Please enter a longer tag. Tags should contain at least %1 character(s)",
|
||||
"tag-too-long": "Please enter a shorter tag. Tags can't be longer than %1 character(s)",
|
||||
"not-enough-tags": "Not enough tags. Topics must have at least %1 tag(s)",
|
||||
"too-many-tags": "Too many tags. Topics can't have more than %1 tag(s)",
|
||||
"still-uploading": "الرجاء انتظار الرفع",
|
||||
"file-too-big": "Maximum allowed file size is %1 kB - please upload a smaller file",
|
||||
"guest-upload-disabled": "Guest uploading has been disabled",
|
||||
"already-favourited": "You have already bookmarked this post",
|
||||
"already-unfavourited": "You have already unbookmarked this post",
|
||||
"content-too-short": "المرجو إدخال موضوع أطول من هذا. يجب أن تتوفر المواضيع على %1 حروف على الأقل.",
|
||||
"title-too-short": "المرجو إدخال عنوان أطول من هذا. يجب أن تتوفر العناوين على %1 حروف على الأقل.",
|
||||
"title-too-long": "المرجو إدخال عنوان أقصر من هذا. يجب ألا تتجاوز العناوين %1 حرفًا.",
|
||||
"too-many-posts": "يمكنك إنشاء المواضيع بمعدل موضوع واحد كل %1 ثانية - المرجو الانتظار قليلا.",
|
||||
"too-many-posts-newbie": "بصفتك مستخدمًا جديدًا، يمكنك إنشاء المواضيع بمعدل موضوع واحد كل %1 ثانية حتى تحصل على سمعة %2 - المرجو الانتظار قليلا.",
|
||||
"file-too-big": "حجم الملفات الأقصى المسموح به هو %1 كب - المرجو رفع ملف أقل حجمًا",
|
||||
"cant-vote-self-post": "لايمكنك التصويت لردك",
|
||||
"already-favourited": "لقد سبق وأضفت هذا الرد إلى المفضلة",
|
||||
"already-unfavourited": "لقد سبق وحذفت هذا الرد من المفضلة",
|
||||
"cant-ban-other-admins": "لايمكن حظر مدبر نظام آخر.",
|
||||
"cant-remove-last-admin": "You are the only administrator. Add another user as an administrator before removing yourself as admin",
|
||||
"cant-delete-admin": "Remove administrator privileges from this account before attempting to delete it.",
|
||||
"invalid-image-type": "Invalid image type. Allowed types are: %1",
|
||||
"invalid-image-extension": "Invalid image extension",
|
||||
"invalid-file-type": "Invalid file type. Allowed types are: %1",
|
||||
"invalid-image-type": "نوع الصورة ممنوع",
|
||||
"group-name-too-short": "اسم المجموعة قصير",
|
||||
"group-name-too-long": "Group name too long",
|
||||
"group-already-exists": "المجموعة موجودة مسبقا",
|
||||
"group-name-change-not-allowed": "لايسمح بتغيير أسماء المجموعات",
|
||||
"group-already-member": "Already part of this group",
|
||||
"group-not-member": "Not a member of this group",
|
||||
"group-needs-owner": "هذه المجموعة تتطلب مالك واحد على اﻷقل",
|
||||
"group-already-invited": "This user has already been invited",
|
||||
"group-already-requested": "Your membership request has already been submitted",
|
||||
"post-already-deleted": "سبق وتم حذف هذا الرد",
|
||||
"post-already-restored": "سبق وتم إلغاء حذف هذا الرد",
|
||||
"topic-already-deleted": "سبق وتم حذف هذا الموضوع",
|
||||
"topic-already-restored": "سبق وتم إلغاء حذف هذا الرد",
|
||||
"cant-purge-main-post": "You can't purge the main post, please delete the topic instead",
|
||||
"topic-thumbnails-are-disabled": "الصور المصغرة غير مفعلة.",
|
||||
"invalid-file": "ملف غير مقبول",
|
||||
"uploads-are-disabled": "رفع الملفات غير مفعل",
|
||||
"signature-too-long": "عذرا، توقيعك يجب ألا يتجاوز %1 حرفًا.",
|
||||
"about-me-too-long": "Sorry, your about me cannot be longer than %1 character(s).",
|
||||
"upload-error": "مشكلة في الرفع: 1%",
|
||||
"signature-too-long": "عذرا، توقيعك يجب ألا يتجاوز %1 حرفًا",
|
||||
"cant-chat-with-yourself": "لايمكنك فتح محادثة مع نفسك",
|
||||
"chat-restricted": "هذا المستخدم عطل المحادثات الواردة عليه. يجب أن يتبعك حتى تتمكن من فتح محادثة معه.",
|
||||
"chat-disabled": "Chat system disabled",
|
||||
"too-many-messages": "لقد أرسلت الكثير من الرسائل، الرجاء اﻹنتظار قليلاً",
|
||||
"invalid-chat-message": "Invalid chat message",
|
||||
"chat-message-too-long": "Chat message is too long",
|
||||
"cant-edit-chat-message": "You are not allowed to edit this message",
|
||||
"cant-remove-last-user": "You can't remove the last user",
|
||||
"cant-delete-chat-message": "You are not allowed to delete this message",
|
||||
"already-voting-for-this-post": "You have already voted for this post.",
|
||||
"reputation-system-disabled": "نظام السمعة معطل",
|
||||
"downvoting-disabled": "التصويتات السلبية معطلة",
|
||||
"not-enough-reputation-to-downvote": "ليس لديك سمعة تكفي لإضافة صوت سلبي لهذا الموضوع",
|
||||
"not-enough-reputation-to-flag": "ليس لديك سمعة تكفي للإشعار بموضوع مخل",
|
||||
"already-flagged": "You have already flagged this post",
|
||||
"reload-failed": "المنتدى واجه مشكلة أثناء إعادة التحميل: \"%1\". سيواصل المنتدى خدمة العملاء السابقين لكن يجب عليك إلغاء أي تغيير قمت به قبل إعادة التحميل.",
|
||||
"registration-error": "حدث خطأ أثناء التسجيل",
|
||||
"parse-error": "حدث خطأ ما أثناء تحليل استجابة الخادم",
|
||||
"wrong-login-type-email": "الرجاء استعمال بريدك اﻹلكتروني للدخول",
|
||||
"wrong-login-type-username": "الرجاء استعمال اسم المستخدم الخاص بك للدخول",
|
||||
"invite-maximum-met": "You have invited the maximum amount of people (%1 out of %2).",
|
||||
"no-session-found": "No login session found!",
|
||||
"not-in-room": "User not in room",
|
||||
"no-users-in-room": "No users in this room",
|
||||
"cant-kick-self": "You can't kick yourself from the group",
|
||||
"no-users-selected": "No user(s) selected",
|
||||
"invalid-home-page-route": "Invalid home page route"
|
||||
"registration-error": "حدث خطأ أثناء التسجيل"
|
||||
}
|
||||
@@ -3,10 +3,9 @@
|
||||
"search": "بحث",
|
||||
"buttons.close": "أغلق",
|
||||
"403.title": "غير مسموح بالدخول",
|
||||
"403.message": "يبدو أنك قد تعثرت على صفحة لا تمتلك الصلاحية للدخول إليها",
|
||||
"403.login": "Perhaps you should <a href='%1/login'>try logging in</a>?",
|
||||
"403.message": "يبدو أنك قد تعثر على الصفحة التي لم يكن لديك الوصول إليها. ربما يجب عليك <a href='/login'> تسجيل الدخول </a> ",
|
||||
"404.title": "لم يتم العثور",
|
||||
"404.message": "You seem to have stumbled upon a page that does not exist. Return to the <a href='%1/'>home page</a>.",
|
||||
"404.message": "يبدو أنك قد تعثرت على صفحة غير موجودة. عودة إلى الصفحة الرئيسية.",
|
||||
"500.title": "خطأ داخلي.",
|
||||
"500.message": "عفوا! يبدو وكأنه شيء ذهب على نحو خاطئ!",
|
||||
"register": "تسجيل",
|
||||
@@ -22,18 +21,15 @@
|
||||
"pagination.out_of": "%1 من %2",
|
||||
"pagination.enter_index": "أدخل الرقم التسلسلي",
|
||||
"header.admin": "مدبر نظام",
|
||||
"header.categories": "الفئات",
|
||||
"header.recent": "حديث",
|
||||
"header.unread": "غير مقروء",
|
||||
"header.tags": "وسم",
|
||||
"header.popular": "الأكثر شهرة",
|
||||
"header.users": "المستخدمين",
|
||||
"header.groups": "المجموعات",
|
||||
"header.chats": "المحادثات",
|
||||
"header.notifications": "التنبيهات",
|
||||
"header.search": "بحث",
|
||||
"header.profile": "ملف",
|
||||
"header.navigation": "Navigation",
|
||||
"notifications.loading": "تحميل التبليغات",
|
||||
"chats.loading": "تحميل الدردشات",
|
||||
"motd.welcome": "مرحبا بكم NodeBB، منصة مناقشة المستقبل",
|
||||
@@ -49,31 +45,25 @@
|
||||
"users": "الأعضاء",
|
||||
"topics": "المواضيع",
|
||||
"posts": "المشاركات",
|
||||
"best": "Best",
|
||||
"upvoters": "Upvoters",
|
||||
"upvoted": "Upvoted",
|
||||
"downvoters": "Downvoters",
|
||||
"downvoted": "Downvoted",
|
||||
"views": "المشاهدات",
|
||||
"reputation": "السمعة",
|
||||
"read_more": "اقرأ المزيد",
|
||||
"more": "المزيد",
|
||||
"posted_ago_by_guest": "كتب %1 من طرف زائر",
|
||||
"posted_ago_by": "كتب %1 من طرف %2",
|
||||
"posted_ago": "كتب %1",
|
||||
"posted_in": "posted in %1",
|
||||
"posted_in_by": "posted in %1 by %2",
|
||||
"posted_in_ago": "كتب في %1 %2",
|
||||
"posted_in_ago_by_guest": "كتب في %1 %2 من طرف زائر",
|
||||
"posted_in_ago_by": "كتب في %1 %2 من طرف %3",
|
||||
"posted_in_ago": "كتب في %1 %2",
|
||||
"replied_ago": "رد %1",
|
||||
"user_posted_ago": "%1 كتب %2",
|
||||
"guest_posted_ago": "كتب زائر %1",
|
||||
"last_edited_by": "last edited by %1",
|
||||
"last_edited_by_ago": "آخر تعديل من طرف %1 %2",
|
||||
"norecentposts": "لاوجود لمشاركات جديدة",
|
||||
"norecenttopics": "لاوجود لمواضيع جديدة",
|
||||
"recentposts": "آخر المشاركات",
|
||||
"recentips": "آخر عناوين ال IP التي سجلت الدخول",
|
||||
"away": "غير متواجد",
|
||||
"dnd": "Do not disturb",
|
||||
"dnd": "المرجو عدم الإزعاج",
|
||||
"invisible": "مخفي",
|
||||
"offline": "غير متصل",
|
||||
"email": "عنوان البريد الإلكتروني",
|
||||
@@ -83,14 +73,5 @@
|
||||
"updated.title": "تم تحديث المنتدى",
|
||||
"updated.message": "لقد تم تحديث المنتدى إلى آخر نسخة للتو. المرجو إعادة تحميل الصفحة.",
|
||||
"privacy": "الخصوصية",
|
||||
"follow": "متابعة",
|
||||
"unfollow": "إلغاء المتابعة",
|
||||
"delete_all": "حذف الكل",
|
||||
"map": "Map",
|
||||
"sessions": "Login Sessions",
|
||||
"ip_address": "IP Address",
|
||||
"enter_page_number": "Enter page number",
|
||||
"upload_file": "Upload file",
|
||||
"upload": "Upload",
|
||||
"allowed-file-types": "Allowed file types are %1"
|
||||
"delete_all": "حذف الكل"
|
||||
}
|
||||
@@ -1,54 +1,8 @@
|
||||
{
|
||||
"groups": "المجموعات",
|
||||
"view_group": "معاينة المجموعة",
|
||||
"owner": "مالك المجموعة",
|
||||
"new_group": "أنشئ مجموعة جديدة",
|
||||
"no_groups_found": "لاوجدود لمجموعات يمكن معاينتها",
|
||||
"pending.accept": "موافق",
|
||||
"pending.reject": "رفض",
|
||||
"pending.accept_all": "قبول الكل",
|
||||
"pending.reject_all": "رفض الكل",
|
||||
"pending.none": "لايوجد أعضاء ينتظرون التفعيل حالياً",
|
||||
"invited.none": "لايوجد أعضاء مدعوون في حالياً",
|
||||
"invited.uninvite": "إلغ الدعوة",
|
||||
"invited.search": "ابحث عن أعضاء لدعوتهم للمجموعة",
|
||||
"invited.notification_title": "You have been invited to join <strong>%1</strong>",
|
||||
"request.notification_title": "Group Membership Request from <strong>%1</strong>",
|
||||
"request.notification_text": "<strong>%1</strong> has requested to become a member of <strong>%2</strong>",
|
||||
"cover-save": "حفظ",
|
||||
"cover-saving": "جاري الحفظ",
|
||||
"details.title": "تفاصيل المجموعة",
|
||||
"details.members": "لائحة الأعضاء",
|
||||
"details.pending": "المستخدمون في الانتظار",
|
||||
"details.invited": "اﻷعضار المدعوون",
|
||||
"details.has_no_posts": "أعضاء هذه المجموعة لم يضيفوا أية مشاركة",
|
||||
"details.latest_posts": "آخر المشاركات",
|
||||
"details.private": "خاص",
|
||||
"details.disableJoinRequests": "Disable join requests",
|
||||
"details.grant": "منح/سحب المِلكية",
|
||||
"details.kick": "طرد",
|
||||
"details.owner_options": "إدارة المجموعة",
|
||||
"details.group_name": "اسم المجموعة",
|
||||
"details.member_count": "عدد اﻷعضاء",
|
||||
"details.creation_date": "تاريخ الإنشاء",
|
||||
"details.description": "الوصف",
|
||||
"details.badge_preview": "معاينة الوسام",
|
||||
"details.change_icon": "تغيير الأيقونة",
|
||||
"details.change_colour": "تغيير اللون",
|
||||
"details.badge_text": "نص الوسام",
|
||||
"details.userTitleEnabled": "إظهار الوسام",
|
||||
"details.private_help": "في حالة تفعيل الخيار، الانضمام إلى المجموعة يستلزم قبول مالكها",
|
||||
"details.hidden": "مخفي",
|
||||
"details.hidden_help": "في حالة تفعيل الخيار، لن تظهر المجموعة للعموم والإنضمام إليها سيتلزم دعوة.",
|
||||
"details.delete_group": "حذف المجموعة",
|
||||
"details.private_system_help": "Private groups is disabled at system level, this option does not do anything",
|
||||
"event.updated": "تم تحديث بيانات المجموعة",
|
||||
"event.deleted": "تم حذف المجموعة %1",
|
||||
"membership.accept-invitation": "اقبل الدعوة",
|
||||
"membership.invitation-pending": "الدعوة بانتظار القبول",
|
||||
"membership.join-group": "انظم للمجموعة",
|
||||
"membership.leave-group": "غادر المجموعة",
|
||||
"membership.reject": "رفض",
|
||||
"new-group.group_name": "اسم المجموعة",
|
||||
"upload-group-cover": "Upload group cover"
|
||||
"details.latest_posts": "آخر المشاركات"
|
||||
}
|
||||
@@ -1,12 +1,9 @@
|
||||
{
|
||||
"username-email": "اسم المستخدم / البريد الإلكتروني",
|
||||
"username": "اسم المستخدم",
|
||||
"email": "البريد الإلكتروني",
|
||||
"username": "اسم المستخدم / عنوان البريد الإلكتروني",
|
||||
"remember_me": "تذكرني؟",
|
||||
"forgot_password": "نسيت كلمة المرور؟",
|
||||
"alternative_logins": "تسجيلات الدخول البديلة",
|
||||
"failed_login_attempt": "Login Unsuccessful",
|
||||
"failed_login_attempt": "فشلت محاولة تسجيل الدخول، يرجى المحاولة مرة أخرى.",
|
||||
"login_successful": "قمت بتسجيل الدخول بنجاح!",
|
||||
"dont_have_account": "لا تملك حساب؟",
|
||||
"logged-out-due-to-inactivity": "You have been logged out of the Admin Control Panel due to inactivity"
|
||||
"dont_have_account": "لم تفتح حسابك بعد؟"
|
||||
}
|
||||
@@ -5,10 +5,8 @@
|
||||
"chat.no_active": "لا يوجد لديك دردشات نشطة.",
|
||||
"chat.user_typing": "%1 يكتب رسالة...",
|
||||
"chat.user_has_messaged_you": "%1 أرسل لك رسالة.",
|
||||
"chat.see_all": "عرض كل المحادثات",
|
||||
"chat.mark_all_read": "Mark all chats read",
|
||||
"chat.see_all": "معاينة كل الدردشات",
|
||||
"chat.no-messages": "المرجو اختيار مرسل إليه لمعاينة تاريخ الدردشات",
|
||||
"chat.no-users-in-room": "No users in this room",
|
||||
"chat.recent-chats": "آخر الدردشات",
|
||||
"chat.contacts": "الأصدقاء",
|
||||
"chat.message-history": "تاريخ الرسائل",
|
||||
@@ -17,30 +15,7 @@
|
||||
"chat.seven_days": "7 أيام",
|
||||
"chat.thirty_days": "30 يومًا",
|
||||
"chat.three_months": "3 أشهر",
|
||||
"chat.delete_message_confirm": "هل أنت متأكد من أنك تريد حذف هذه الرسالة؟",
|
||||
"chat.roomname": "Chat Room %1",
|
||||
"chat.add-users-to-room": "Add users to room",
|
||||
"composer.compose": "اكتب",
|
||||
"composer.show_preview": "عرض المعاينة",
|
||||
"composer.hide_preview": "إخفاء المعاينة",
|
||||
"composer.user_said_in": "%1 كتب في %2",
|
||||
"composer.user_said": "%1 كتب:",
|
||||
"composer.discard": "هل أنت متأكد أنك تريد التخلي عن التغييرات؟",
|
||||
"composer.submit_and_lock": "Submit and Lock",
|
||||
"composer.toggle_dropdown": "Toggle Dropdown",
|
||||
"composer.uploading": "Uploading %1",
|
||||
"composer.formatting.bold": "Bold",
|
||||
"composer.formatting.italic": "Italic",
|
||||
"composer.formatting.list": "List",
|
||||
"composer.formatting.strikethrough": "Strikethrough",
|
||||
"composer.formatting.link": "Link",
|
||||
"composer.formatting.picture": "Picture",
|
||||
"composer.upload-picture": "Upload Image",
|
||||
"composer.upload-file": "Upload File",
|
||||
"bootbox.ok": "OK",
|
||||
"bootbox.cancel": "إلغاء",
|
||||
"bootbox.confirm": "تأكيد",
|
||||
"cover.dragging_title": "Cover Photo Positioning",
|
||||
"cover.dragging_message": "Drag the cover photo to the desired position and click \"Save\"",
|
||||
"cover.saved": "Cover photo image and position saved"
|
||||
"composer.discard": "هل أنت متأكد أنك تريد التخلي عن التغييرات؟"
|
||||
}
|
||||
@@ -1,35 +1,27 @@
|
||||
{
|
||||
"title": "التنبيهات",
|
||||
"title": "تنبيهات",
|
||||
"no_notifs": "ليس لديك أية تنبيهات جديدة",
|
||||
"see_all": "عرض كل التنبيهات",
|
||||
"mark_all_read": "اجعل كل التنبيهات مقروءة",
|
||||
"see_all": "معاينة كل التنبيهات",
|
||||
"back_to_home": "عودة إلى %1",
|
||||
"outgoing_link": "رابط خارجي",
|
||||
"outgoing_link_message": "You are now leaving %1",
|
||||
"outgoing_link_message": "أنت تغادر %1 حاليا.",
|
||||
"continue_to": "استمر إلى %1",
|
||||
"return_to": "عودة إى %1",
|
||||
"new_notification": "تنبيه جديد",
|
||||
"you_have_unread_notifications": "لديك تنبيهات غير مقروءة.",
|
||||
"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>.",
|
||||
"upvoted_your_post_in_multiple": "<strong>%1</strong> and %2 others have upvoted your post in <strong>%3</strong>.",
|
||||
"moved_your_post": "<strong>%1</strong> has moved your post to <strong>%2</strong>",
|
||||
"moved_your_topic": "<strong>%1</strong> has moved <strong>%2</strong>",
|
||||
"moved_your_post": "<strong>%1</strong> نقل مشاركتك.",
|
||||
"moved_your_topic": "<strong>%1</strong> نقل موضوعك.",
|
||||
"favourited_your_post_in": "<strong>%1</strong> أضاف مشاركتك في <strong>%2</strong> إلى مفضلته.",
|
||||
"user_flagged_post_in": "<strong>%1</strong> أشعَرَ بمشاركة مخلة في <strong>%2</strong>",
|
||||
"user_flagged_post_in_dual": "<strong>%1</strong> and <strong>%2</strong> flagged a post in <strong>%3</strong>",
|
||||
"user_flagged_post_in_multiple": "<strong>%1</strong> and %2 others flagged a post in <strong>%3</strong>",
|
||||
"user_posted_to": "<strong>%1</strong> أضاف ردا إلى: <strong>%2</strong>",
|
||||
"user_posted_to_dual": "<strong>%1</strong> and <strong>%2</strong> have posted replies to: <strong>%3</strong>",
|
||||
"user_posted_to_multiple": "<strong>%1</strong> and %2 others have posted replies to: <strong>%3</strong>",
|
||||
"user_posted_topic": "<strong>%1</strong> أنشأ موضوعًا جديدًا: <strong>%2</strong>",
|
||||
"user_mentioned_you_in": "<strong>%1</strong> ذكرَ اسمك في <strong>%2</strong>",
|
||||
"user_started_following_you": "<strong>%1</strong> صار يتابعك.",
|
||||
"user_started_following_you_dual": "<strong>%1</strong> and <strong>%2</strong> started following you.",
|
||||
"user_started_following_you_multiple": "<strong>%1</strong> and %2 others started following you.",
|
||||
"new_register": "<strong>%1</strong> sent a registration request.",
|
||||
"new_register_multiple": "There are <strong>%1</strong> registration requests awaiting review.",
|
||||
"email-confirmed": "تم التحقق من عنوان البريد الإلكتروني",
|
||||
"email-confirmed-message": "شكرًا على إثبات صحة عنوان بريدك الإلكتروني. صار حسابك مفعلًا بالكامل.",
|
||||
"email-confirm-error": "حدث خطأ ما...",
|
||||
"email-confirm-error-message": "حدث خطأ أثناء التحقق من عنوان بريدك الإلكتروني. ربما رمز التفعيل خاطئ أو انتهت صلاحيته.",
|
||||
"email-confirm-sent": "تم إرسال بريد التفعيل."
|
||||
}
|
||||
@@ -1,48 +1,18 @@
|
||||
{
|
||||
"home": "الصفحة الرئيسية",
|
||||
"unread": "المواضيع الغير مقروءة",
|
||||
"popular-day": "Popular topics today",
|
||||
"popular-week": "Popular topics this week",
|
||||
"popular-month": "Popular topics this month",
|
||||
"popular-alltime": "All time popular topics",
|
||||
"unread": "المواضيع غير المقروءة",
|
||||
"popular": "المواضيع الأكثر شهرة",
|
||||
"recent": "المواضيع الحديثة",
|
||||
"flagged-posts": "Flagged Posts",
|
||||
"users/online": "اﻷعضاء المتصلون",
|
||||
"users/latest": "أحدث اﻷعضاء",
|
||||
"users/sort-posts": "Users with the most posts",
|
||||
"users/sort-reputation": "Users with the most reputation",
|
||||
"users/banned": "Banned Users",
|
||||
"users/most-flags": "Most flagged users",
|
||||
"users/search": "User Search",
|
||||
"users": "المستخدمون المسجلون",
|
||||
"notifications": "التنبيهات",
|
||||
"tags": "الكلمات الدلالية",
|
||||
"tag": "Topics tagged under \"%1\"",
|
||||
"register": "تسجيل حساب",
|
||||
"login": "Login to your account",
|
||||
"reset": "إعادة تعيين كلمة مرور حسابك",
|
||||
"categories": "الفئات",
|
||||
"groups": "المجموعات",
|
||||
"group": "%1 group",
|
||||
"chats": "Chats",
|
||||
"chat": "Chatting with %1",
|
||||
"account/edit": "Editing \"%1\"",
|
||||
"account/edit/password": "Editing password of \"%1\"",
|
||||
"account/edit/username": "Editing username of \"%1\"",
|
||||
"account/edit/email": "Editing email of \"%1\"",
|
||||
"account/info": "Account Info",
|
||||
"account/following": "People %1 follows",
|
||||
"account/followers": "People who follow %1",
|
||||
"account/posts": "Posts made by %1",
|
||||
"account/topics": "Topics created by %1",
|
||||
"account/groups": "%1's Groups",
|
||||
"account/favourites": "%1's Bookmarked Posts",
|
||||
"account/settings": "User Settings",
|
||||
"account/watched": "Topics watched by %1",
|
||||
"account/upvoted": "Posts upvoted by %1",
|
||||
"account/downvoted": "Posts downvoted by %1",
|
||||
"account/best": "Best posts made by %1",
|
||||
"confirm": "تم التحقق من عنوان البريد الإلكتروني",
|
||||
"tags": "المواضيع المرتبطة بالوسم %1",
|
||||
"user.edit": "تعديل \"%1\"",
|
||||
"user.following": "المستخدمون الذين يتبعهم %1",
|
||||
"user.followers": "المستخدمون الذين يتبعون %1",
|
||||
"user.posts": "ردود %1",
|
||||
"user.topics": "مواضيع %1",
|
||||
"user.favourites": "مفضلات %1",
|
||||
"user.settings": "خيارات المستخدم",
|
||||
"maintenance.text": "جاري صيانة %1. المرجو العودة لاحقًا.",
|
||||
"maintenance.messageIntro": "بالإضافة إلى ذلك، قام مدبر النظام بترك هذه الرسالة:",
|
||||
"throttled.text": "%1 is currently unavailable due to excessive load. Please come back another time."
|
||||
"maintenance.messageIntro": "بالإضافة إلى ذلك، قام مدبر النظام بترك هذه الرسالة:"
|
||||
}
|
||||
@@ -5,15 +5,5 @@
|
||||
"month": "شهر",
|
||||
"year": "سنة",
|
||||
"alltime": "دائمًا",
|
||||
"no_recent_topics": "لايوجد مواضيع جديدة",
|
||||
"no_popular_topics": "There are no popular topics.",
|
||||
"there-is-a-new-topic": "يوجد موضوع جديد",
|
||||
"there-is-a-new-topic-and-a-new-post": "يوجد موضوع جديد و رد جديد",
|
||||
"there-is-a-new-topic-and-new-posts": "يوجد موضوع جديد و %1 ردود جديدة ",
|
||||
"there-are-new-topics": "يوجد %1 مواضيع جديدة",
|
||||
"there-are-new-topics-and-a-new-post": "يوجد %1 مواضيع جديدة و رد جديد",
|
||||
"there-are-new-topics-and-new-posts": "يوجد %1 مواضيع جديدة و %2 مشاركات جديدة",
|
||||
"there-is-a-new-post": "يوجد مشاركة جديدة",
|
||||
"there-are-new-posts": "يوجد %1 مشاركات جديدة",
|
||||
"click-here-to-reload": "إضغط هنا لإعادة التحميل"
|
||||
"no_recent_topics": "لاوجود لمشاركات جديدة"
|
||||
}
|
||||
@@ -1,23 +1,18 @@
|
||||
{
|
||||
"register": "تسجيل",
|
||||
"cancel_registration": "إلغاء التسجيل",
|
||||
"help.email": "افتراضيا، سيتم إخفاء بريدك الإلكتروني من العامة.",
|
||||
"help.email": "افتراضيا، سيتم إخفاء بريدك الإلكتروني من الجمهور.",
|
||||
"help.username_restrictions": "اسم مستخدم فريدة من نوعها بين1% و2% حرفا. يمكن للآخرين ذكرك @ <'span id='your-username> اسم المستخدم </span>.",
|
||||
"help.minimum_password_length": "كلمة المرور يجب أن تكون على الأقل بها 1% أحرف",
|
||||
"help.minimum_password_length": "كلمتك السر يجب أن تكون على الأقل متألفة من 1% أحرف",
|
||||
"email_address": "عنوان البريد الإلكتروني",
|
||||
"email_address_placeholder": "ادخل عنوان البريد الإلكتروني",
|
||||
"username": "اسم المستخدم",
|
||||
"username_placeholder": "أدخل اسم المستخدم",
|
||||
"password": "كلمة المرور",
|
||||
"password_placeholder": "أدخل كلمة المرور",
|
||||
"confirm_password": "تأكيد كلمة المرور",
|
||||
"confirm_password_placeholder": "تأكيد كلمة المرور",
|
||||
"password": "كلمة السر",
|
||||
"password_placeholder": "أدخل كلمة السر",
|
||||
"confirm_password": "تأكيد كلمة السر",
|
||||
"confirm_password_placeholder": "تأكيد كلمة السر",
|
||||
"register_now_button": "قم بالتسجيل الآن",
|
||||
"alternative_registration": "طريقة تسجيل بديلة",
|
||||
"terms_of_use": "شروط الاستخدام",
|
||||
"agree_to_terms_of_use": "أوافق على شروط الاستخدام",
|
||||
"terms_of_use_error": "You must agree to the Terms of Use",
|
||||
"registration-added-to-queue": "Your registration has been added to the approval queue. You will receive an email when it is accepted by an administrator.",
|
||||
"interstitial.intro": "We require some additional information before we can create your account.",
|
||||
"interstitial.errors-found": "We could not complete your registration:"
|
||||
"terms_of_use": "قوانين الاستخدام",
|
||||
"agree_to_terms_of_use": "أوافق على قوانين الاستخدام"
|
||||
}
|
||||
@@ -1,17 +1,14 @@
|
||||
{
|
||||
"reset_password": "إعادة تعيين كلمة المرور",
|
||||
"update_password": "تحديث كلمة المرور",
|
||||
"password_changed.title": "تم تغير كلمة المرور",
|
||||
"password_changed.message": "<p>تم تغير كلمة المرور بنجاح، الرجاء <a href='/login'>إعادة الدخول</a></p>",
|
||||
"reset_password": "إعادة تعيين كلمة السر",
|
||||
"update_password": "تحديث كلمة السر",
|
||||
"password_changed.title": "تم تغير كلمة السر",
|
||||
"password_changed.message": "<p>تم تغير كلمة السر بنجاح. يرجى <a href='/login'>إعادة الدخول</a></p>",
|
||||
"wrong_reset_code.title": "رمز إعادة التعيين غير صحيح",
|
||||
"wrong_reset_code.message": "رمز إعادة التعين غير صحيح، يرجى المحاولة مرة أخرى أو <a href='/reset'>اطلب رمزا جديدا</a>",
|
||||
"new_password": "كلمة المرور الجديدة",
|
||||
"repeat_password": "تأكيد كلمة المرور",
|
||||
"new_password": "كلمة السر الجديدة",
|
||||
"repeat_password": "تأكيد كلمة السر",
|
||||
"enter_email": "يرجى إدخال <strong>عنوان البريد الإلكتروني</strong> الخاص بك وسوف نرسل لك رسالة بالبريد الالكتروني مع تعليمات حول كيفية إستعادة حسابك.",
|
||||
"enter_email_address": "ادخل عنوان البريد الإلكتروني",
|
||||
"password_reset_sent": "إعادة تعيين كلمة السر أرسلت",
|
||||
"invalid_email": "بريد إلكتروني غير صالح أو غير موجود",
|
||||
"password_too_short": "كلمة المرور التي أدخلتها قصيرة، الرجاء اختر كلمة مرور مختلفة",
|
||||
"passwords_do_not_match": "كلمتا السر التي أدخلتهما غير متطابقتان",
|
||||
"password_expired": "لقد انتهت صلاحية كلمة المرور الخاصة بك، الرجاء اختيار كلمة مرور جديدة"
|
||||
"invalid_email": "بريد إلكتروني غير صالح أو غير موجود"
|
||||
}
|
||||
@@ -1,40 +1,4 @@
|
||||
{
|
||||
"results_matching": "%1 نتيجة (نتائج) موافقة لـ \"%2\", (%3 ثواني)",
|
||||
"no-matches": "لم يتم العثور على نتائج.",
|
||||
"advanced-search": "بحث متقدم",
|
||||
"in": "في",
|
||||
"titles": "العناوين",
|
||||
"titles-posts": "العناوين والمشاركات",
|
||||
"posted-by": "مشاركة من طرف",
|
||||
"in-categories": "في الفئات",
|
||||
"search-child-categories": "بحث في الفئات الفرعية",
|
||||
"reply-count": "عدد المشاركات",
|
||||
"at-least": "على اﻷقل",
|
||||
"at-most": "على اﻷكثر",
|
||||
"post-time": "تاريخ المشاركة",
|
||||
"newer-than": "أحدث من",
|
||||
"older-than": "أقدم من",
|
||||
"any-date": "أي وقت",
|
||||
"yesterday": "أمس",
|
||||
"one-week": "أسبوع",
|
||||
"two-weeks": "أسبوعان",
|
||||
"one-month": "شهر",
|
||||
"three-months": "ثلاثة أشهر",
|
||||
"six-months": "ستة أشهر",
|
||||
"one-year": "عام",
|
||||
"sort-by": "عرض حسب",
|
||||
"last-reply-time": "تاريخ آخر رد",
|
||||
"topic-title": "عنوان الموضوع",
|
||||
"number-of-replies": "عدد الردود",
|
||||
"number-of-views": "عدد المشاهدات",
|
||||
"topic-start-date": "تاريخ بدأ الموضوع",
|
||||
"username": "اسم المستخدم",
|
||||
"category": "فئة",
|
||||
"descending": "في ترتيب تنازلي",
|
||||
"ascending": "في ترتيب تصاعدي",
|
||||
"save-preferences": "حفظ التفضيلات",
|
||||
"clear-preferences": "ازالة التفضيلات",
|
||||
"search-preferences-saved": "تم حفظ تفضيلات البحث",
|
||||
"search-preferences-cleared": "تم ازالة تفضيلات البحث",
|
||||
"show-results-as": "عرض النتائج كـ"
|
||||
"results_matching": "%1 نتيجة (نتائج) موافقة ل \"%2\", (%3 ثواني)",
|
||||
"no-matches": "لم يتم إيجاد أية مشاركات"
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"no_tag_topics": "لا يوجد مواضيع بهذه الكلمة الدلالية.",
|
||||
"tags": "الكلمات الدلالية",
|
||||
"enter_tags_here": "Enter tags here, between %1 and %2 characters each.",
|
||||
"enter_tags_here_short": "أدخل الكلمات الدلالية...",
|
||||
"no_tags": "لا يوجد كلمات دلالية بعد."
|
||||
"no_tag_topics": "لاوجود لمواضيع تحمل هذا الوسم.",
|
||||
"tags": "بطاقات",
|
||||
"enter_tags_here": "أدخل البطاقات هنا. اضغط ENTER بعد كل بطاقة.",
|
||||
"enter_tags_here_short": "أدخل البطاقات...",
|
||||
"no_tags": "لاتوجد هناك بطاقات بعد."
|
||||
}
|
||||
@@ -5,7 +5,6 @@
|
||||
"no_topics_found": "لا توجد مواضيع !",
|
||||
"no_posts_found": "لا توجد مشاركات!",
|
||||
"post_is_deleted": "هذه المشاركة محذوفة!",
|
||||
"topic_is_deleted": "هذا الموضوع محذوف",
|
||||
"profile": "الملف الشخصي",
|
||||
"posted_by": "كتب من طرف %1",
|
||||
"posted_by_guest": "كتب من طرف زائر",
|
||||
@@ -13,43 +12,31 @@
|
||||
"notify_me": "تلق تنبيهات بالردود الجديدة في هذا الموضوع",
|
||||
"quote": "اقتبس",
|
||||
"reply": "رد",
|
||||
"reply-as-topic": "Reply as topic",
|
||||
"guest-login-reply": "يجب عليك تسجيل الدخول للرد",
|
||||
"edit": "تعديل",
|
||||
"delete": "حذف",
|
||||
"purge": "تطهير",
|
||||
"restore": "استعادة",
|
||||
"move": "نقل",
|
||||
"move": "انقل",
|
||||
"fork": "فرع",
|
||||
"link": "رابط",
|
||||
"share": "نشر",
|
||||
"tools": "أدوات",
|
||||
"flag": "تبليغ",
|
||||
"flag": "اشعار بمشاركة مخلة",
|
||||
"locked": "مقفل",
|
||||
"pinned": "Pinned",
|
||||
"moved": "Moved",
|
||||
"bookmark_instructions": "Click here to return to the last read post in this thread.",
|
||||
"bookmark_instructions": "انقر هنا للإكمال أو أغلق للإلغاء.",
|
||||
"flag_title": "إشعار بمشاركة مخلة.",
|
||||
"flag_confirm": "هل تريد حقًّا أن تشعر بهذه المشاركة على أنها مخلة؟",
|
||||
"flag_success": "تم الإشعار بهذه المشاركة على أنها مخلة",
|
||||
"deleted_message": "هذه المشاركة محذوفة. فقط من لهم صلاحية الإشراف على ا لمشاركات يمكنهم معاينتها.",
|
||||
"following_topic.message": "ستستلم تنبيها عند كل مشاركة جديدة في هذا الموضوع.",
|
||||
"not_following_topic.message": "You will see this topic in the unread topics list, but you will not receive notifications when somebody posts to this topic.",
|
||||
"ignoring_topic.message": "You will no longer see this topic in the unread topics list. You will be notified when you are mentioned or your post is up voted.",
|
||||
"not_following_topic.message": "لن تستلم أي تنبيه بخصوص عذا الموضوع بعد الآن.",
|
||||
"login_to_subscribe": "المرجو إنشاء حساب أو تسجيل الدخول حتى يمكنك متابعة هذا الموضوع.",
|
||||
"markAsUnreadForAll.success": "تم تحديد الموضوع على أنه غير مقروء.",
|
||||
"mark_unread": "Mark unread",
|
||||
"mark_unread.success": "Topic marked as unread.",
|
||||
"watch": "مراقبة",
|
||||
"unwatch": "الغاء المراقبة",
|
||||
"watch.title": "استلم تنبيها بالردود الجديدة في هذا الموضوع",
|
||||
"unwatch.title": "ألغ مراقبة هذا الموضوع",
|
||||
"share_this_post": "انشر هذا الموضوع",
|
||||
"watching": "Watching",
|
||||
"not-watching": "Not Watching",
|
||||
"ignoring": "Ignoring",
|
||||
"watching.description": "Notify me of new replies.<br/>Show topic in unread.",
|
||||
"not-watching.description": "Do not notify me of new replies.<br/>Show topic in unread if category is not ignored.",
|
||||
"ignoring.description": "Do not notify me of new replies.<br/>Do not show topic in unread.",
|
||||
"thread_tools.title": "أدوات الموضوع",
|
||||
"thread_tools.markAsUnreadForAll": "علم غير مقروء",
|
||||
"thread_tools.pin": "علق الموضوع",
|
||||
@@ -60,7 +47,6 @@
|
||||
"thread_tools.move_all": "نقل الكل",
|
||||
"thread_tools.fork": "إنشاء فرع الموضوع",
|
||||
"thread_tools.delete": "حذف الموضوع",
|
||||
"thread_tools.delete-posts": "Delete Posts",
|
||||
"thread_tools.delete_confirm": "هل أنت متأكد أنك تريد حذف هذا الموضوع؟",
|
||||
"thread_tools.restore": "استعادة الموضوع",
|
||||
"thread_tools.restore_confirm": "هل أنت متأكد أنك تريد استعادة هذا الموضوع؟",
|
||||
@@ -74,9 +60,9 @@
|
||||
"disabled_categories_note": "الفئات المعطلة رمادية",
|
||||
"confirm_move": "انقل",
|
||||
"confirm_fork": "فرع",
|
||||
"favourite": "Bookmark",
|
||||
"favourites": "Bookmarks",
|
||||
"favourites.has_no_favourites": "You haven't bookmarked any posts yet.",
|
||||
"favourite": "إضافة إلى المفضلة",
|
||||
"favourites": "المفضلة",
|
||||
"favourites.has_no_favourites": "ليس لديك أي ردود مفضلة. أضف بعض المشاركات إلى المفضلة لرؤيتهم هنا",
|
||||
"loading_more_posts": "تحميل المزيد من المشاركات",
|
||||
"move_topic": "نقل الموضوع",
|
||||
"move_topics": "نقل المواضيع",
|
||||
@@ -87,9 +73,7 @@
|
||||
"fork_topic_instruction": "إضغط على المشاركات التي تريد تفريعها",
|
||||
"fork_no_pids": "لم تختر أي مشاركة",
|
||||
"fork_success": "تم إنشاء فرع للموضوع بنجاح! إضغط هنا لمعاينة الفرع.",
|
||||
"delete_posts_instruction": "Click the posts you want to delete/purge",
|
||||
"composer.title_placeholder": "أدخل عنوان موضوعك هنا...",
|
||||
"composer.handle_placeholder": "اﻹسم",
|
||||
"composer.discard": "نبذ التغييرات",
|
||||
"composer.submit": "حفظ",
|
||||
"composer.replying_to": "الرد على %1",
|
||||
@@ -108,14 +92,5 @@
|
||||
"sort_by": "ترتيب حسب",
|
||||
"oldest_to_newest": "من الأقدم إلى الأحدث",
|
||||
"newest_to_oldest": "من الأحدث إلى الأقدم",
|
||||
"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": "Create a new topic",
|
||||
"stale.reply_anyway": "Reply to this topic anyway",
|
||||
"link_back": "Re: [%1](%2)",
|
||||
"spam": "Spam",
|
||||
"offensive": "Offensive",
|
||||
"custom-flag-reason": "Enter a flagging reason"
|
||||
"most_votes": "الأكثر تصويتًا"
|
||||
}
|
||||
@@ -3,11 +3,7 @@
|
||||
"no_unread_topics": "ليس هناك أي موضوع غير مقروء",
|
||||
"load_more": "حمل المزيد",
|
||||
"mark_as_read": "حدد غير مقروء",
|
||||
"selected": "المحددة",
|
||||
"selected": "المختارة",
|
||||
"all": "الكل",
|
||||
"all_categories": "كل الفئات",
|
||||
"topics_marked_as_read.success": "تم تحديد المواضيع على أنها مقروءة!",
|
||||
"all-topics": "كل المواضيع",
|
||||
"new-topics": "مواضيع جديدة",
|
||||
"watched-topics": "المواضيع المتابعة"
|
||||
"topics_marked_as_read.success": "تم تحديد المواضيع على أنها مقروءة!"
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
{
|
||||
"uploading-file": "جاري رفع الملف...",
|
||||
"select-file-to-upload": "Select a file to upload!",
|
||||
"upload-success": "تم رفع الملف بنجاح!",
|
||||
"maximum-file-size": "Maximum %1 kb"
|
||||
}
|
||||
@@ -1,19 +1,11 @@
|
||||
{
|
||||
"banned": "محظور",
|
||||
"offline": "غير متصل",
|
||||
"offline": "ليس موجود حالياً",
|
||||
"username": "إسم المستخدم",
|
||||
"joindate": "تاريخ الإنضمام",
|
||||
"postcount": "عدد المشاركات",
|
||||
"email": "البريد الإلكتروني",
|
||||
"confirm_email": "تأكيد عنوان البريد الإلكتروني",
|
||||
"account_info": "معلومات الحساب",
|
||||
"ban_account": "Ban Account",
|
||||
"ban_account_confirm": "هل تريد حقاً حظر هاذا العضو؟",
|
||||
"unban_account": "Unban Account",
|
||||
"delete_account": "حذف الحساب",
|
||||
"delete_account_confirm": "هل أن متأكد أنك تريد حذف حسابك؟<br /><strong> هذه العملية غير قابلة للإلغاء ولن يكون بالإمكان استعادة بياناتك</strong><br /><br />أدخل اسم المستخدم الخاص بك لتأكيد عملية الحذف",
|
||||
"delete_this_account_confirm": "Are you sure you want to delete this account? <br /><strong>This action is irreversible and you will not be able to recover any data</strong><br /><br />",
|
||||
"account-deleted": "Account deleted",
|
||||
"fullname": "الاسم الكامل",
|
||||
"website": "الموقع الإلكتروني",
|
||||
"location": "الموقع",
|
||||
@@ -21,30 +13,23 @@
|
||||
"joined": "تاريخ التسجيل",
|
||||
"lastonline": "تاريخ آخر دخول",
|
||||
"profile": "الملف الشخصي",
|
||||
"profile_views": "عدد المشاهدات",
|
||||
"profile_views": "عدد مشاهدات الملف الشخصي",
|
||||
"reputation": "السمعة",
|
||||
"favourites": "Bookmarks",
|
||||
"watched": "متابع",
|
||||
"favourites": "المفضلات",
|
||||
"followers": "المتابعون",
|
||||
"following": "يتابع",
|
||||
"aboutme": "معلومة عنك او السيرة الذاتية",
|
||||
"signature": "توقيع",
|
||||
"gravatar": "Gravatar",
|
||||
"birthday": "عيد ميلاد",
|
||||
"chat": "محادثة",
|
||||
"chat_with": "Chat with %1",
|
||||
"follow": "تابع",
|
||||
"unfollow": "إلغاء المتابعة",
|
||||
"more": "المزيد",
|
||||
"profile_update_success": "تم تحديث الملف الشخصي بنجاح",
|
||||
"change_picture": "تغيير الصورة",
|
||||
"change_username": "تغيير اسم المستخدم",
|
||||
"change_email": "تغيير البريد اﻹلكتروني",
|
||||
"edit": "تعديل",
|
||||
"edit-profile": "تعديل الملف الشخصي",
|
||||
"default_picture": "Default Icon",
|
||||
"uploaded_picture": "الصورة المرفوعة",
|
||||
"upload_new_picture": "رفع صورة جديدة",
|
||||
"upload_new_picture_from_url": "رفع صورة جديدة من رابط",
|
||||
"upload_new_picture_from_url": "رفع صورة جديدة بواسطة رابط",
|
||||
"current_password": "كلمة السر الحالية",
|
||||
"change_password": "تغيير كلمة السر",
|
||||
"change_password_error": "كلمة سر غير صحيحة",
|
||||
@@ -56,12 +41,10 @@
|
||||
"confirm_password": "تأكيد كلمة السر",
|
||||
"password": "كلمة السر",
|
||||
"username_taken_workaround": "اسم المستخدم الذي اخترته سبق أخذه، لذا تم تغييره قليلا. أن الآن مسجل تحت الاسم <strong>%1</strong>",
|
||||
"password_same_as_username": "Your password is the same as your username, please select another password.",
|
||||
"password_same_as_email": "Your password is the same as your email, please select another password.",
|
||||
"upload_picture": "ارفع الصورة",
|
||||
"upload_a_picture": "رفع صورة",
|
||||
"remove_uploaded_picture": "Remove Uploaded Picture",
|
||||
"upload_cover_picture": "Upload cover picture",
|
||||
"image_spec": "لايمكنك رفع إلا الصور ذات الصيغ PNG أو JPG أو GIF.",
|
||||
"max": "الحد الأقصى",
|
||||
"settings": "خيارات",
|
||||
"show_email": "أظهر بريدي الإلكتروني",
|
||||
"show_fullname": "أظهر اسمي الكامل",
|
||||
@@ -73,46 +56,20 @@
|
||||
"digest_weekly": "أسبوعيًّا",
|
||||
"digest_monthly": "شهريًّا",
|
||||
"send_chat_notifications": "استلام رسالة إلكترونية عند ورود محادثة وأنا غير متصل.",
|
||||
"send_post_notifications": "Send an email when replies are made to topics I am subscribed to",
|
||||
"settings-require-reload": "تغيير بعض اﻹعدادات يتطلب تحديث الصفحة. إضغط هنا لتحديث الصفحة",
|
||||
"has_no_follower": "هذا المستخدم ليس لديه أي متابع :(",
|
||||
"follows_no_one": "هذا المستخدم لا يتابع أحد :(",
|
||||
"has_no_posts": "This user hasn't posted anything yet.",
|
||||
"has_no_topics": "This user hasn't posted any topics yet.",
|
||||
"has_no_watched_topics": "This user hasn't watched any topics yet.",
|
||||
"has_no_upvoted_posts": "This user hasn't upvoted any posts yet.",
|
||||
"has_no_downvoted_posts": "This user hasn't downvoted any posts yet.",
|
||||
"has_no_voted_posts": "This user has no voted posts",
|
||||
"has_no_posts": "هذا المستخدم لم يكتب أي شيء بعد.",
|
||||
"has_no_topics": "هذا المستخدم لم ينشئ أي موضوع بعد.",
|
||||
"email_hidden": "البريد الإلكتروني مخفي",
|
||||
"hidden": "مخفي",
|
||||
"paginate_description": "Paginate topics and posts instead of using infinite scroll",
|
||||
"paginate_description": "عرض المواضيع والردود موزعة على صفحات عوض صفحة واحدة.",
|
||||
"topics_per_page": "المواضيع في كل صفحة",
|
||||
"posts_per_page": "الردود في كل صفحة",
|
||||
"notification_sounds": "تشغيل صوت عند تلقي تنبيه",
|
||||
"notification_sounds": "تشغيل ملف صوتي عند استلام التنبيهات.",
|
||||
"browsing": "خيارات التصفح",
|
||||
"open_links_in_new_tab": "فتح الروابط الخارجية في نافدة جديدة",
|
||||
"open_links_in_new_tab": "فتح الروابط الخارجية في تبويب جديد؟",
|
||||
"enable_topic_searching": "تفعيل خاصية البحث داخل المواضيع",
|
||||
"topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen",
|
||||
"delay_image_loading": "Delay Image Loading",
|
||||
"image_load_delay_help": "If enabled, images in topics will not load until they are scrolled into view",
|
||||
"scroll_to_my_post": "After posting a reply, show the new post",
|
||||
"follow_topics_you_reply_to": "Watch topics that you reply to",
|
||||
"follow_topics_you_create": "Watch topics you create",
|
||||
"grouptitle": "عنوان المجموعة",
|
||||
"no-group-title": "لا يوجد عنوان للمجموعة",
|
||||
"select-skin": "Select a Skin",
|
||||
"select-homepage": "Select a Homepage",
|
||||
"homepage": "الصفحة الرئيسية",
|
||||
"homepage_description": "Select a page to use as the forum homepage or 'None' to use the default homepage.",
|
||||
"custom_route": "Custom Homepage Route",
|
||||
"custom_route_help": "Enter a route name here, without any preceding slash (e.g. \"recent\", or \"popular\")",
|
||||
"sso.title": "Single Sign-on Services",
|
||||
"sso.associated": "Associated with",
|
||||
"sso.not-associated": "Click here to associate with",
|
||||
"info.latest-flags": "Latest Flags",
|
||||
"info.no-flags": "No Flagged Posts Found",
|
||||
"info.ban-history": "Recent Ban History",
|
||||
"info.no-ban-history": "This user has never been banned",
|
||||
"info.banned-until": "Banned until %1",
|
||||
"info.banned-permanently": "Banned permanently"
|
||||
"topic_search_help": "في حالة تفعيلها، ستعوض خاصيةُ البحث داخل المواضيع خاصيةَ البحث الخاصة بالمتصفح، فتمكنك بالتالي بالبحث في الموضوع بأكمله دون الاقتصار على مايظهر في الشاشة فحسب.",
|
||||
"follow_topics_you_reply_to": "متابعة المشاركات التي ترد عليها",
|
||||
"follow_topics_you_create": "متابعة المشاركات التي تكتبها"
|
||||
}
|
||||
@@ -1,21 +1,9 @@
|
||||
{
|
||||
"latest_users": "أحدث الأعضاء",
|
||||
"top_posters": "اﻷكثر مشاركة",
|
||||
"latest_users": "أحدث المستخدمين",
|
||||
"top_posters": "أكثر المشتركين",
|
||||
"most_reputation": "أعلى سمعة",
|
||||
"most_flags": "Most Flags",
|
||||
"search": "بحث",
|
||||
"enter_username": "أدخل اسم مستخدم للبحث",
|
||||
"load_more": "حمل المزيد",
|
||||
"users-found-search-took": "تم إيجاد %1 مستخدمـ(ين)! استغرق البحث %2 ثانية.",
|
||||
"filter-by": "Filter By",
|
||||
"online-only": "المتصلون فقط",
|
||||
"invite": "دعوة",
|
||||
"invitation-email-sent": "An invitation email has been sent to %1",
|
||||
"user_list": "قائمة اﻷعضاء",
|
||||
"recent_topics": "أحدث المواضيع",
|
||||
"popular_topics": "Popular Topics",
|
||||
"unread_topics": "المواضيع الغير مقروءة",
|
||||
"categories": "الفئات",
|
||||
"tags": "الكلمات الدلالية",
|
||||
"no-users-found": "No users found!"
|
||||
"users-found-search-took": "تم إيجاد %1 مستخدمـ(ين)! استغرق البحث %2 ميليثانية."
|
||||
}
|
||||
@@ -1,20 +0,0 @@
|
||||
{
|
||||
"category": "Категория",
|
||||
"subcategories": "Подкатегории",
|
||||
"new_topic_button": "Нова тема",
|
||||
"guest-login-post": "Влезте, за да можете да публикувате",
|
||||
"no_topics": "<strong>Все още няма теми в тази категория.</strong><br />Защо не създадеш една?",
|
||||
"browsing": "Разглежда",
|
||||
"no_replies": "Все още никой не е отговорил",
|
||||
"no_new_posts": "Няма нови публикации.",
|
||||
"share_this_category": "Споделяне на тази категория",
|
||||
"watch": "Следене",
|
||||
"ignore": "Игнориране",
|
||||
"watching": "Наблюдавате",
|
||||
"ignoring": "Пренебрегвате",
|
||||
"watching.description": "Темите ще се показват в непрочетените",
|
||||
"ignoring.description": "Темите няма да се показват в непрочетените",
|
||||
"watch.message": "Вече следите обновленията в тази категория",
|
||||
"ignore.message": "Вече не следите обновленията в тази категория",
|
||||
"watched-categories": "Наблюдавани категории"
|
||||
}
|
||||
@@ -1,36 +0,0 @@
|
||||
{
|
||||
"password-reset-requested": "Изпратена е заявка за подновяване на паролата – %1!",
|
||||
"welcome-to": "Добре дошли в %1",
|
||||
"invite": "Покана от %1",
|
||||
"greeting_no_name": "Здравейте",
|
||||
"greeting_with_name": "Здравейте, %1",
|
||||
"welcome.text1": "Благодарим Ви, че се регистрирахте с %1",
|
||||
"welcome.text2": "За да активирате напълно Вашия акаунт, трябва да потвърдите е-пощата, с която сте се регистрирали.",
|
||||
"welcome.text3": "Вашата заявка за регистрация беше приета от администратор. Вече можете да се впишете с Вашето потребителско име и парола.",
|
||||
"welcome.cta": "Натиснете тук, за да потвърдите Вашата е-поща.",
|
||||
"invitation.text1": "%1 Ви покани да се присъедините към %2",
|
||||
"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": "Резюме за %1",
|
||||
"notif.chat.subject": "Получено е ново съобщение от %1",
|
||||
"notif.chat.cta": "Натиснете тук, за да продължите разговора",
|
||||
"notif.chat.unsub.info": "Това известие за разговор беше изпратено до Вас поради настройките Ви за абонаментите.",
|
||||
"notif.post.cta": "Натиснете тук, за да прочетете цялата тема",
|
||||
"notif.post.unsub.info": "Това известие за публикация беше изпратено до Вас поради настройките Ви за абонаментите.",
|
||||
"test.text1": "Това е пробно е-писмо, за да потвърдим, че изпращачът на е-поща е правилно настроен за Вашия NodeBB.",
|
||||
"unsub.cta": "Натиснете тук, за да промените тези настройки",
|
||||
"closing": "Благодарим Ви!"
|
||||
}
|
||||
@@ -1,124 +0,0 @@
|
||||
{
|
||||
"invalid-data": "Грешни данни",
|
||||
"not-logged-in": "Изглежда не сте влезли в системата.",
|
||||
"account-locked": "Вашият акаунт беше заключен временно",
|
||||
"search-requires-login": "Търсенето изисква акаунт – моля, влезте или се регистрирайте.",
|
||||
"invalid-cid": "Грешен идентификатор на категория",
|
||||
"invalid-tid": "Грешен идентификатор на тема",
|
||||
"invalid-pid": "Грешен идентификатор на публикация",
|
||||
"invalid-uid": "Грешен идентификатор на потребител",
|
||||
"invalid-username": "Грешно потребителско име",
|
||||
"invalid-email": "Грешна е-поща",
|
||||
"invalid-title": "Грешно заглавие!",
|
||||
"invalid-user-data": "Грешни потребителски данни",
|
||||
"invalid-password": "Грешна парола",
|
||||
"invalid-username-or-password": "Моля, посочете потребителско име и парола",
|
||||
"invalid-search-term": "Грешен текст за търсене",
|
||||
"csrf-invalid": "Не успяхме да Ви впишем, най-вероятно защото сесията Ви е изтекла. Моля, опитайте отново",
|
||||
"invalid-pagination-value": "Грешен номер на страница, трябва да бъде между %1 и %2",
|
||||
"username-taken": "Потребителското име е заето",
|
||||
"email-taken": "Е-пощата е заета",
|
||||
"email-not-confirmed": "Вашата е-поща все още не е потвърдена. Моля, натиснете тук, за да потвърдите е-пощата си.",
|
||||
"email-not-confirmed-chat": "Няма да можете да пишете в разговори, докато е-пощата Ви не бъде потвърдена. Моля, натиснете тук, за да потвърдите е-пощата си.",
|
||||
"no-email-to-confirm": "Този форум изисква потвърдена е-поща. Моля, натиснете тук, за да въведете е-поща",
|
||||
"email-confirm-failed": "Не успяхме да потвърдим е-пощата Ви. Моля, опитайте отново по-късно.",
|
||||
"confirm-email-already-sent": "Е-писмото за потвърждение вече е изпратено. Моля, почакайте още %1 минута/и, преди да изпратите ново.",
|
||||
"sendmail-not-found": "Изпълнимият файл на „sendmail“ не може да бъде намерен. Моля, уверете се, че е инсталиран и изпълним за потребителя, чрез който е пуснат NodeBB.",
|
||||
"username-too-short": "Потребителското име е твърде кратко",
|
||||
"username-too-long": "Потребителското име е твърде дълго",
|
||||
"password-too-long": "Паролата е твърде дълга",
|
||||
"user-banned": "Потребителят е блокиран",
|
||||
"user-too-new": "Съжаляваме, но трябва да изчакате поне %1 секунда/и, преди да направите първата си публикация",
|
||||
"blacklisted-ip": "Съжаляваме, но Вашият IP адрес е забранен за ползване в тази общност. Ако смятате, че това е грешка, моля, свържете се с администратор.",
|
||||
"ban-expiry-missing": "Моля, задайте крайна дата за това блокиране",
|
||||
"no-category": "Категорията не съществува",
|
||||
"no-topic": "Темата не съществува",
|
||||
"no-post": "Публикацията не съществува",
|
||||
"no-group": "Групата не съществува",
|
||||
"no-user": "Потребителят не съществува",
|
||||
"no-teaser": "Резюмето не съществува",
|
||||
"no-privileges": "Нямате достатъчно права за това действие.",
|
||||
"category-disabled": "Категорията е изключена",
|
||||
"topic-locked": "Темата е заключена",
|
||||
"post-edit-duration-expired": "Можете да редактирате публикациите си до %1 секунда/и, след като ги пуснете",
|
||||
"post-edit-duration-expired-minutes": "Можете да редактирате публикациите си до %1 минута/и, след като ги пуснете",
|
||||
"post-edit-duration-expired-minutes-seconds": "Можете да редактирате публикациите си до %1 минута/и и %2 секунда/и, след като ги пуснете",
|
||||
"post-edit-duration-expired-hours": "Можете да редактирате публикациите си до %1 час(а), след като ги пуснете",
|
||||
"post-edit-duration-expired-hours-minutes": "Можете да редактирате публикациите си до %1 час(а) и %2 минута/и, след като ги пуснете",
|
||||
"post-edit-duration-expired-days": "Можете да редактирате публикациите си до %1 ден(а), след като ги пуснете",
|
||||
"post-edit-duration-expired-days-hours": "Можете да редактирате публикациите си до %1 ден(а) и %2 час(а), след като ги пуснете",
|
||||
"post-delete-duration-expired": "Можете да изтривате публикациите си до %1 секунда/и, след като ги пуснете",
|
||||
"post-delete-duration-expired-minutes": "Можете да изтривате публикациите си до %1 минута/и, след като ги пуснете",
|
||||
"post-delete-duration-expired-minutes-seconds": "Можете да изтривате публикациите си до %1 минута/и и %2 секунда/и, след като ги пуснете",
|
||||
"post-delete-duration-expired-hours": "Можете да изтривате публикациите си до %1 час(а), след като ги пуснете",
|
||||
"post-delete-duration-expired-hours-minutes": "Можете да изтривате публикациите си до %1 час(а) и %2 минута/и, след като ги пуснете",
|
||||
"post-delete-duration-expired-days": "Можете да изтривате публикациите си до %1 ден(а), след като ги пуснете",
|
||||
"post-delete-duration-expired-days-hours": "Можете да изтривате публикациите си до %1 ден(а) и %2 час(а), след като ги пуснете",
|
||||
"content-too-short": "Моля, въведете по-дълъг текст на публикацията. Публикациите трябва да съдържат поне %1 символ(а).",
|
||||
"content-too-long": "Моля, въведете по-кратък текст на публикацията. Публикациите трябва да съдържат не повече от %1 символ(а).",
|
||||
"title-too-short": "Моля, въведете по-дълго заглавие. Заглавията трябва да съдържат поне %1 символ(а).",
|
||||
"title-too-long": "Моля, въведете по-кратко заглавие. Заглавията трябва да съдържат не повече от %1 символ(а).",
|
||||
"too-many-posts": "Можете да публикувате веднъж на %1 секунда/и – моля, изчакайте малко, преди да опитате да публикувате отново",
|
||||
"too-many-posts-newbie": "Като нов потребител, Вие можете да публикувате веднъж на %1 секунда/и, докато не натрупате %2 репутация – моля, изчакайте малко, преди да опитате да публикувате отново",
|
||||
"tag-too-short": "Моля, въведете по-дълъг етикет. Етикетите трябва да съдържат поне %1 символ(а)",
|
||||
"tag-too-long": "Моля, въведете по-кратък етикет. Етикетите трябва да съдържат не повече от %1 символ(а)",
|
||||
"not-enough-tags": "Недостатъчно етикети. Темите трябва да имат поне %1 етикет(а)",
|
||||
"too-many-tags": "Твърде много етикети. Темите не могат да имат повече от %1 етикет(а)",
|
||||
"still-uploading": "Моля, изчакайте качването да приключи.",
|
||||
"file-too-big": "Максималният разрешен размер на файл е %1 КБ – моля, качете по-малък файл",
|
||||
"guest-upload-disabled": "Качването не е разрешено за гости",
|
||||
"already-favourited": "Вече имате отметка към тази публикация",
|
||||
"already-unfavourited": "Вече сте премахнали отметката си към тази публикация",
|
||||
"cant-ban-other-admins": "Не можете да блокирате другите администратори!",
|
||||
"cant-remove-last-admin": "Вие сте единственият администратор. Добавете друг потребител като администратор, преди да премахнете себе си като администратор",
|
||||
"cant-delete-admin": "Премахнете администраторските права от този акаунт, преди да го изтриете.",
|
||||
"invalid-image-type": "Грешен тип на изображение. Позволените типове са: %1",
|
||||
"invalid-image-extension": "Грешно разширение на изображението",
|
||||
"invalid-file-type": "Грешен тип на файл. Позволените типове са: %1",
|
||||
"group-name-too-short": "Името на групата е твърде кратко",
|
||||
"group-name-too-long": "Името на групата е твърде дълго",
|
||||
"group-already-exists": "Вече съществува такава група",
|
||||
"group-name-change-not-allowed": "Промяната на името на групата не е разрешено",
|
||||
"group-already-member": "Потребителят вече членува в тази група",
|
||||
"group-not-member": "Потребителят не членува в тази група",
|
||||
"group-needs-owner": "Тази група се нуждае от поне един собственик",
|
||||
"group-already-invited": "Този потребител вече е бил поканен",
|
||||
"group-already-requested": "Вашата заявка за членство вече е била изпратена",
|
||||
"post-already-deleted": "Тази публикация вече е изтрита",
|
||||
"post-already-restored": "Тази публикация вече е възстановена",
|
||||
"topic-already-deleted": "Тази тема вече е изтрита",
|
||||
"topic-already-restored": "Тази тема вече е възстановена",
|
||||
"cant-purge-main-post": "Не можете да изчистите първоначалната публикация. Моля, вместо това изтрийте темата.",
|
||||
"topic-thumbnails-are-disabled": "Иконките на темите са изключени.",
|
||||
"invalid-file": "Грешен файл",
|
||||
"uploads-are-disabled": "Качването не е разрешено",
|
||||
"signature-too-long": "Съжаляваме, но подписът Ви трябва да съдържа не повече от %1 символ(а).",
|
||||
"about-me-too-long": "Съжаляваме, но информацията за Вас трябва да съдържа не повече от %1 символ(а).",
|
||||
"cant-chat-with-yourself": "Не можете да пишете съобщение на себе си!",
|
||||
"chat-restricted": "Този потребител е ограничил съобщенията до себе си. Той трябва първо да Ви последва, преди да можете да си пишете с него.",
|
||||
"chat-disabled": "Системата за разговори е изключена",
|
||||
"too-many-messages": "Изпратили сте твърде много съобщения. Моля, изчакайте малко.",
|
||||
"invalid-chat-message": "Неправилно съобщение",
|
||||
"chat-message-too-long": "Съобщението е твърде дълго",
|
||||
"cant-edit-chat-message": "Нямате право да редактирате това съобщение",
|
||||
"cant-remove-last-user": "Не можете да премахнете последния потребител",
|
||||
"cant-delete-chat-message": "Нямате право да изтриете това съобщение",
|
||||
"already-voting-for-this-post": "Вече сте дали глас за тази публикация.",
|
||||
"reputation-system-disabled": "Системата за репутация е изключена.",
|
||||
"downvoting-disabled": "Отрицателното гласуване е изключено",
|
||||
"not-enough-reputation-to-downvote": "Нямате достатъчно репутация, за да гласувате отрицателно за тази публикация",
|
||||
"not-enough-reputation-to-flag": "Нямате достатъчно репутация, за да докладвате тази публикация",
|
||||
"already-flagged": "Вече сте докладвали тази публикация",
|
||||
"reload-failed": "NodeBB срещна проблем при презареждането: „%1“. NodeBB ще продължи да поддържа съществуващите клиентски ресурси, но Вие трябва да отмените последните си действия преди презареждането.",
|
||||
"registration-error": "Грешка при регистрацията",
|
||||
"parse-error": "Нещо се обърка при прочитането на отговора на сървъра",
|
||||
"wrong-login-type-email": "Моля, използвайте е-пощата си, за да влезете",
|
||||
"wrong-login-type-username": "Моля, използвайте потребителското си име, за да влезете",
|
||||
"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": "Грешен път към началната страница"
|
||||
}
|
||||
@@ -1,96 +0,0 @@
|
||||
{
|
||||
"home": "Начало",
|
||||
"search": "Търсене",
|
||||
"buttons.close": "Затваряне",
|
||||
"403.title": "Достъпът е отказан",
|
||||
"403.message": "Изглежда сте посетили страница, до която нямате достъп.",
|
||||
"403.login": "Може би трябва да <a href='%1/login'>опитате да влезете</a>?",
|
||||
"404.title": "Не е открита",
|
||||
"404.message": "Изглежда сте се опитали да посетите страница, която не съществува. Върнете се към <a href='%1/'>началната страница</a>.",
|
||||
"500.title": "Вътрешна грешка.",
|
||||
"500.message": "Опа! Изглежда нещо се обърка!",
|
||||
"register": "Регистрация",
|
||||
"login": "Вход",
|
||||
"please_log_in": "Моля, влезте",
|
||||
"logout": "Изход",
|
||||
"posting_restriction_info": "Публикуването в момента е позволено само за регистрираните потребители. Натиснете тук, за да влезете.",
|
||||
"welcome_back": "Добре дошли отново",
|
||||
"you_have_successfully_logged_in": "Вие влязохте успешно",
|
||||
"save_changes": "Запазване на промените",
|
||||
"close": "Затваряне",
|
||||
"pagination": "Страници",
|
||||
"pagination.out_of": "%1 от %2",
|
||||
"pagination.enter_index": "Въведете номер",
|
||||
"header.admin": "Администратор",
|
||||
"header.categories": "Категории",
|
||||
"header.recent": "Скорошни",
|
||||
"header.unread": "Непрочетени",
|
||||
"header.tags": "Етикети",
|
||||
"header.popular": "Популярни",
|
||||
"header.users": "Потребители",
|
||||
"header.groups": "Групи",
|
||||
"header.chats": "Разговори",
|
||||
"header.notifications": "Известия",
|
||||
"header.search": "Търсене",
|
||||
"header.profile": "Профил",
|
||||
"header.navigation": "Навигация",
|
||||
"notifications.loading": "Зареждане на известията",
|
||||
"chats.loading": "Зареждане на разговорите",
|
||||
"motd.welcome": "Добре дошли в NodeBB, системата за дискусии на бъдещето.",
|
||||
"previouspage": "Предишна страница",
|
||||
"nextpage": "Следваща страница",
|
||||
"alert.success": "Готово",
|
||||
"alert.error": "Грешка",
|
||||
"alert.banned": "Блокиран",
|
||||
"alert.banned.message": "Вие току-що бяхте блокиран. Сега ще излезете от системата.",
|
||||
"alert.unfollow": "Вие вече не следвате %1!",
|
||||
"alert.follow": "Вие следвате %1!",
|
||||
"online": "На линия",
|
||||
"users": "Потребители",
|
||||
"topics": "Теми",
|
||||
"posts": "Публ.",
|
||||
"best": "Най-добри",
|
||||
"upvoters": "Гласували положително",
|
||||
"upvoted": "С положителни гласове",
|
||||
"downvoters": "Гласували отрицателно",
|
||||
"downvoted": "С отрицателни гласове",
|
||||
"views": "Прегл.",
|
||||
"reputation": "Репутация",
|
||||
"read_more": "още",
|
||||
"more": "Още",
|
||||
"posted_ago_by_guest": "публикувано %1 от гост",
|
||||
"posted_ago_by": "публикувано %1 от %2",
|
||||
"posted_ago": "публикувано %1",
|
||||
"posted_in": "публикувано в %1",
|
||||
"posted_in_by": "публикувано в %1 от %2",
|
||||
"posted_in_ago": "публикувано в %1 %2",
|
||||
"posted_in_ago_by": "публикувано в %1 %2 от %3",
|
||||
"user_posted_ago": "%1 публикува %2",
|
||||
"guest_posted_ago": "гост публикува %1",
|
||||
"last_edited_by": "последно редактирано от %1",
|
||||
"norecentposts": "Няма скорошни публикации",
|
||||
"norecenttopics": "Няма скорошни теми",
|
||||
"recentposts": "Скорошни публикации",
|
||||
"recentips": "Наскоро ползвани IP адреси",
|
||||
"away": "Отсъстващ",
|
||||
"dnd": "Отпочиващ",
|
||||
"invisible": "Невидим",
|
||||
"offline": "Извън линия",
|
||||
"email": "Е-поща",
|
||||
"language": "Език",
|
||||
"guest": "Гост",
|
||||
"guests": "Гости",
|
||||
"updated.title": "Форумът е актуализиран",
|
||||
"updated.message": "Този форум току-що беше актуализиран до най-новата версия. Натиснете тук, за да опресните страницата.",
|
||||
"privacy": "Поверителност",
|
||||
"follow": "Следване",
|
||||
"unfollow": "Прекратяване на следването",
|
||||
"delete_all": "Изтриване на всичко",
|
||||
"map": "Карта",
|
||||
"sessions": "Сесии за вход",
|
||||
"ip_address": "IP адрес",
|
||||
"enter_page_number": "Въведете номер на страница",
|
||||
"upload_file": "Качване на файл",
|
||||
"upload": "Качване",
|
||||
"allowed-file-types": "Разрешените файлови типове са: %1"
|
||||
}
|
||||
@@ -1,54 +0,0 @@
|
||||
{
|
||||
"groups": "Групи",
|
||||
"view_group": "Преглед на групата",
|
||||
"owner": "Собственик на групата",
|
||||
"new_group": "Създаване на нова група",
|
||||
"no_groups_found": "Няма групи",
|
||||
"pending.accept": "Приемане",
|
||||
"pending.reject": "Отхвърляне",
|
||||
"pending.accept_all": "Приемане на всички",
|
||||
"pending.reject_all": "Отхвърляне на всички",
|
||||
"pending.none": "В момента няма чакащи членове",
|
||||
"invited.none": "В момента няма поканени членове",
|
||||
"invited.uninvite": "Отмяна на поканата",
|
||||
"invited.search": "Потърсете потребител, когото да поканите в тази група",
|
||||
"invited.notification_title": "Вие бяхте поканен/а да се присъедините към <strong>%1</strong>",
|
||||
"request.notification_title": "Заявка за членство в групата от <strong>%1</strong>",
|
||||
"request.notification_text": "<strong>%1</strong> поиска да стане член на <strong>%2</strong>",
|
||||
"cover-save": "Запазване",
|
||||
"cover-saving": "Запазване",
|
||||
"details.title": "Подробности за групата",
|
||||
"details.members": "Списък на членовете",
|
||||
"details.pending": "Кандидатстващи членове",
|
||||
"details.invited": "Поканени членове",
|
||||
"details.has_no_posts": "Членовете на тази група не са публикували нищо.",
|
||||
"details.latest_posts": "Скорошни публикации",
|
||||
"details.private": "Частна",
|
||||
"details.disableJoinRequests": "Забраняване на заявките за присъединяване",
|
||||
"details.grant": "Даване/отнемане на собственост",
|
||||
"details.kick": "Изгонване",
|
||||
"details.owner_options": "Администрация на групата",
|
||||
"details.group_name": "Име на групата",
|
||||
"details.member_count": "Брой на членовете",
|
||||
"details.creation_date": "Дата на създаване",
|
||||
"details.description": "Описание",
|
||||
"details.badge_preview": "Преглед на емблемата",
|
||||
"details.change_icon": "Промяна на иконката",
|
||||
"details.change_colour": "Промяна на цвета",
|
||||
"details.badge_text": "Текст на емблемата",
|
||||
"details.userTitleEnabled": "Показване на емблемата",
|
||||
"details.private_help": "Ако е включено, присъединяването към група изисква одобрението на собственика ѝ",
|
||||
"details.hidden": "Скрита",
|
||||
"details.hidden_help": "Ако е включено, тази група няма да бъде извеждана в списъка от групи и потребителите ще трябва да бъдат поканени лично",
|
||||
"details.delete_group": "Изтриване на групата",
|
||||
"details.private_system_help": "Частните групи са забранени на системно ниво; тази възможност не върши нищо",
|
||||
"event.updated": "Подробностите за групата бяха обновени",
|
||||
"event.deleted": "Групата „%1“ беше изтрита",
|
||||
"membership.accept-invitation": "Приемане на поканата",
|
||||
"membership.invitation-pending": "Чакаща покана",
|
||||
"membership.join-group": "Присъединяване към групата",
|
||||
"membership.leave-group": "Напускане на групата",
|
||||
"membership.reject": "Отхвърляне",
|
||||
"new-group.group_name": "Име на групата:",
|
||||
"upload-group-cover": "Качване на снимка за показване на групата"
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
{
|
||||
"name": "Български",
|
||||
"code": "bg",
|
||||
"dir": "ltr"
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
{
|
||||
"username-email": "Потребителско име / е-поща",
|
||||
"username": "Потребителско име",
|
||||
"email": "Е-поща",
|
||||
"remember_me": "Запомнете ме?",
|
||||
"forgot_password": "Забравена парола?",
|
||||
"alternative_logins": "Други начини за влизане",
|
||||
"failed_login_attempt": "Влизането беше неуспешно",
|
||||
"login_successful": "Вие влязохте успешно!",
|
||||
"dont_have_account": "Нямате акаунт?",
|
||||
"logged-out-due-to-inactivity": "Вие излязохте автоматично от администраторския контролен панел, поради бездействие."
|
||||
}
|
||||
@@ -1,46 +0,0 @@
|
||||
{
|
||||
"chat.chatting_with": "Разговор с <span id=\"chat-with-name\"></span>",
|
||||
"chat.placeholder": "Въведете съобщението тук и натиснете Ентер за изпращане",
|
||||
"chat.send": "Изпращане",
|
||||
"chat.no_active": "Нямате текущи разговори.",
|
||||
"chat.user_typing": "%1 пише...",
|
||||
"chat.user_has_messaged_you": "%1 Ви написа съобщение.",
|
||||
"chat.see_all": "Вижте всички разговори",
|
||||
"chat.mark_all_read": "Отбелязване на всички разговори като прочетени",
|
||||
"chat.no-messages": "Моля, изберете получател, за да видите историята на съобщенията",
|
||||
"chat.no-users-in-room": "Няма потребители в тази стая",
|
||||
"chat.recent-chats": "Скорошни разговори",
|
||||
"chat.contacts": "Контакти",
|
||||
"chat.message-history": "История на съобщенията",
|
||||
"chat.pop-out": "Отделяне на разговора в прозорец",
|
||||
"chat.maximize": "Уголемяване",
|
||||
"chat.seven_days": "7 дни",
|
||||
"chat.thirty_days": "30 дни",
|
||||
"chat.three_months": "3 месеца",
|
||||
"chat.delete_message_confirm": "Наистина ли искате да изтриете това съобщение?",
|
||||
"chat.roomname": "Стая за разговори %1",
|
||||
"chat.add-users-to-room": "Добавяне на потребители към стаята",
|
||||
"composer.compose": "Писане",
|
||||
"composer.show_preview": "Показване на прегледа",
|
||||
"composer.hide_preview": "Скриване на прегледа",
|
||||
"composer.user_said_in": "%1 каза в %2:",
|
||||
"composer.user_said": "%1 каза:",
|
||||
"composer.discard": "Наистина ли искате да отхвърлите тази публикация?",
|
||||
"composer.submit_and_lock": "Публикуване и заключване",
|
||||
"composer.toggle_dropdown": "Превключване на падащото меню",
|
||||
"composer.uploading": "Качване на %1",
|
||||
"composer.formatting.bold": "Получер",
|
||||
"composer.formatting.italic": "Курсив",
|
||||
"composer.formatting.list": "Списък",
|
||||
"composer.formatting.strikethrough": "Зачертан",
|
||||
"composer.formatting.link": "Връзка",
|
||||
"composer.formatting.picture": "Снимка",
|
||||
"composer.upload-picture": "Качване на изображение",
|
||||
"composer.upload-file": "Качване на файл",
|
||||
"bootbox.ok": "Добре",
|
||||
"bootbox.cancel": "Отказ",
|
||||
"bootbox.confirm": "Потвърждаване",
|
||||
"cover.dragging_title": "Наместване на снимката",
|
||||
"cover.dragging_message": "Преместете снимката на желаното положение и натиснете „Запазване“",
|
||||
"cover.saved": "Снимката и мястото ѝ бяха запазени"
|
||||
}
|
||||
@@ -1,35 +0,0 @@
|
||||
{
|
||||
"title": "Известия",
|
||||
"no_notifs": "Нямате нови известия",
|
||||
"see_all": "Вижте всички известия",
|
||||
"mark_all_read": "Отбелязване на всички известия като прочетени",
|
||||
"back_to_home": "Назад към %1",
|
||||
"outgoing_link": "Външна връзка",
|
||||
"outgoing_link_message": "Напускате %1",
|
||||
"continue_to": "Продължаване към %1",
|
||||
"return_to": "Връщане към %1",
|
||||
"new_notification": "Ново известие",
|
||||
"you_have_unread_notifications": "Имате непрочетени известия",
|
||||
"new_message_from": "Ново съобщение от <strong>%1</strong>",
|
||||
"upvoted_your_post_in": "<strong>%1</strong> гласува положително за Ваша публикация в <strong>%2</strong>.",
|
||||
"upvoted_your_post_in_dual": "<strong>%1</strong> и <strong>%2</strong> гласуваха положително за Ваша публикация в <strong>%3</strong>.",
|
||||
"upvoted_your_post_in_multiple": "<strong>%1</strong> и %2 други гласуваха положително за Ваша публикация в <strong>%3</strong>.",
|
||||
"moved_your_post": "<strong>%1</strong> премести публикацията Ви в <strong>%2</strong>",
|
||||
"moved_your_topic": "<strong>%1</strong> премести <strong>%2</strong>",
|
||||
"user_flagged_post_in": "<strong>%1</strong> докладва Ваша публикация в <strong>%2</strong>",
|
||||
"user_flagged_post_in_dual": "<strong>%1</strong> и <strong>%2</strong> докладваха Ваша публикация в <strong>%3</strong>",
|
||||
"user_flagged_post_in_multiple": "<strong>%1</strong> и %2 други докладваха Ваша публикация в <strong>%3</strong>",
|
||||
"user_posted_to": "<strong>%1</strong> публикува отговор на: <strong>%2</strong>",
|
||||
"user_posted_to_dual": "<strong>%1</strong> и <strong>%2</strong> публикуваха отговори на: <strong>%3</strong>",
|
||||
"user_posted_to_multiple": "<strong>%1</strong> и %2 други публикуваха отговори на: <strong>%3</strong>",
|
||||
"user_posted_topic": "<strong>%1</strong> публикува нова тема: <strong>%2</strong>",
|
||||
"user_started_following_you": "<strong>%1</strong> започна да Ви следва.",
|
||||
"user_started_following_you_dual": "<strong>%1</strong> и <strong>%2</strong> започнаха да Ви следват.",
|
||||
"user_started_following_you_multiple": "<strong>%1</strong> и %2 започнаха да Ви следват.",
|
||||
"new_register": "<strong>%1</strong> изпрати заявка за регистрация.",
|
||||
"new_register_multiple": "Има <strong>%1</strong> заявки за регистрация, които очакват да бъдат прегледани.",
|
||||
"email-confirmed": "Е-пощата беше потвърдена",
|
||||
"email-confirmed-message": "Благодарим Ви, че потвърдихте е-пощата си. Акаунтът Ви е вече напълно активиран.",
|
||||
"email-confirm-error-message": "Възникна проблем при потвърждаването на е-пощата Ви. Може кодът да е грешен или давността му да е изтекла.",
|
||||
"email-confirm-sent": "Изпратено е е-писмо за потвърждение."
|
||||
}
|
||||
@@ -1,48 +0,0 @@
|
||||
{
|
||||
"home": "Начало",
|
||||
"unread": "Непрочетени теми",
|
||||
"popular-day": "Популярните теми днес",
|
||||
"popular-week": "Популярните теми тази седмица",
|
||||
"popular-month": "Популярните теми този месец",
|
||||
"popular-alltime": "Популярните теми за всички времена",
|
||||
"recent": "Скорошни теми",
|
||||
"flagged-posts": "Докладвани публикации",
|
||||
"users/online": "Потребители на линия",
|
||||
"users/latest": "Последни потребители",
|
||||
"users/sort-posts": "Потребители с най-много публикации",
|
||||
"users/sort-reputation": "Потребители с най-висока репутация",
|
||||
"users/banned": "Блокирани потребители",
|
||||
"users/most-flags": "Най-докладвани потребители",
|
||||
"users/search": "Търсене на потребители",
|
||||
"notifications": "Известия",
|
||||
"tags": "Етикети",
|
||||
"tag": "Теми, отбелязани като „%1“",
|
||||
"register": "Регистрирайте акаунт",
|
||||
"login": "Влезте в акаунта си",
|
||||
"reset": "Подновете паролата за акаунта си",
|
||||
"categories": "Категории",
|
||||
"groups": "Групи",
|
||||
"group": "Група %1",
|
||||
"chats": "Разговори",
|
||||
"chat": "Разговаря с %1",
|
||||
"account/edit": "Редактиране на „%1“",
|
||||
"account/edit/password": "Редактиране на паролата на „%1“",
|
||||
"account/edit/username": "Редактиране на потребителското име на „%1“",
|
||||
"account/edit/email": "Редактиране на е-пощата на „%1“",
|
||||
"account/info": "Информация за акаунта",
|
||||
"account/following": "Хора, които %1 следва",
|
||||
"account/followers": "Хора, които следват %1",
|
||||
"account/posts": "Публикации от %1",
|
||||
"account/topics": "Теми, създадени от %1",
|
||||
"account/groups": "Групите на %1",
|
||||
"account/favourites": "Отметнатите публикации на %1",
|
||||
"account/settings": "Потребителски настройки",
|
||||
"account/watched": "Теми, наблюдавани от %1",
|
||||
"account/upvoted": "Публикации, получили положителен глас от %1",
|
||||
"account/downvoted": "Публикации, получили отрицателен глас от %1",
|
||||
"account/best": "Най-добрите публикации от %1",
|
||||
"confirm": "Е-пощата е потвърдена",
|
||||
"maintenance.text": "%1 в момента е в профилактика. Моля, върнете се по-късно.",
|
||||
"maintenance.messageIntro": "В допълнение, администраторът е оставил това съобщение:",
|
||||
"throttled.text": "%1 в момента е недостъпен, поради прекомерно натоварване. Моля, върнете се отново по-късно."
|
||||
}
|
||||
@@ -1,19 +0,0 @@
|
||||
{
|
||||
"title": "Скорошни",
|
||||
"day": "Ден",
|
||||
"week": "Седмица",
|
||||
"month": "Месец",
|
||||
"year": "Година",
|
||||
"alltime": "Цялото време",
|
||||
"no_recent_topics": "Няма скорошни теми.",
|
||||
"no_popular_topics": "Няма популярни теми.",
|
||||
"there-is-a-new-topic": "Има нова тема.",
|
||||
"there-is-a-new-topic-and-a-new-post": "Има нова тема и нова публикация.",
|
||||
"there-is-a-new-topic-and-new-posts": "Има нова тема и %1 нови публикации.",
|
||||
"there-are-new-topics": "Има %1 нови теми.",
|
||||
"there-are-new-topics-and-a-new-post": "Има %1 нови теми и нова публикация.",
|
||||
"there-are-new-topics-and-new-posts": "Има %1 нови теми и %2 нови публикации.",
|
||||
"there-is-a-new-post": "Има нова публикация",
|
||||
"there-are-new-posts": "Има %1 нови публикации.",
|
||||
"click-here-to-reload": "Натиснете тук, за да презаредите."
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
{
|
||||
"register": "Регистрация",
|
||||
"cancel_registration": "Отказване на регистрацията",
|
||||
"help.email": "По подразбиране, Вашата е-поща ще бъде скрита за останалите.",
|
||||
"help.username_restrictions": "Уникално потребителско име с дължина между %1 и %2 символа. Другите ще могат да Ви споменават чрез @<span id='yourUsername'>потребител</span>.",
|
||||
"help.minimum_password_length": "Дължината на паролата Ви трябва да е поне %1 символа.",
|
||||
"email_address": "Е-поща",
|
||||
"email_address_placeholder": "Въведете адрес на е-поща",
|
||||
"username": "Потребителско име",
|
||||
"username_placeholder": "Въведете потребителско име",
|
||||
"password": "Парола",
|
||||
"password_placeholder": "Въведете парола",
|
||||
"confirm_password": "Потвърдете паролата",
|
||||
"confirm_password_placeholder": "Потвърдете паролата",
|
||||
"register_now_button": "Регистриране",
|
||||
"alternative_registration": "Друг начин за регистриране",
|
||||
"terms_of_use": "Условия за ползване",
|
||||
"agree_to_terms_of_use": "Съгласен съм с условията за ползване",
|
||||
"terms_of_use_error": "Трябва да се съгласите с условията за ползване",
|
||||
"registration-added-to-queue": "Вашата регистрация беше добавена в опашката за одобрение. Ще получите е-писмо, когато тя бъде одобрена от администратор.",
|
||||
"interstitial.intro": "Нуждаем се от малко допълнителна информация, преди да можем да създадем акаунта Ви.",
|
||||
"interstitial.errors-found": "Не можем да завършим Вашата регистрация:"
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
{
|
||||
"reset_password": "Подновяване на паролата",
|
||||
"update_password": "Обновяване на паролата",
|
||||
"password_changed.title": "Паролата беше променена",
|
||||
"password_changed.message": "<p>Паролата беше подновена. Моля, <a href=\"/login\">влезте отново</a>.",
|
||||
"wrong_reset_code.title": "Грешен код за подновяване",
|
||||
"wrong_reset_code.message": "Полученият код за подновяване беше грешен. Моля, опитайте отново или <a href=\"/reset\">поискайте нов код за подновяване</a>.",
|
||||
"new_password": "Нова парола",
|
||||
"repeat_password": "Потвърдете паролата",
|
||||
"enter_email": "Моля, въведете Вашата <strong>е-поща</strong> и ние ще Ви изпратим е-писмо с инструкции за това как да достъпите акаунта си.",
|
||||
"enter_email_address": "Въведете адрес на е-поща",
|
||||
"password_reset_sent": "Информацията за подновяване на паролата беше изпратена",
|
||||
"invalid_email": "Грешна е-поща / е-пощата не съществува!",
|
||||
"password_too_short": "Паролата е твърде кратка. Моля, изберете друга парола.",
|
||||
"passwords_do_not_match": "Двете пароли, които въведохте, са различни.",
|
||||
"password_expired": "Паролата Ви е с изтекла давност. Моля, изберете нова парола"
|
||||
}
|
||||
@@ -1,40 +0,0 @@
|
||||
{
|
||||
"results_matching": "%1 резултат(а), отговарящи на „%2“, (%3 секунди)",
|
||||
"no-matches": "Няма съвпадения",
|
||||
"advanced-search": "Разширено търсене",
|
||||
"in": "В",
|
||||
"titles": "Заглавия",
|
||||
"titles-posts": "Заглавия и публикации",
|
||||
"posted-by": "Публикувано от",
|
||||
"in-categories": "В категории",
|
||||
"search-child-categories": "Претърсване на подкатегориите",
|
||||
"reply-count": "Брой на отговорите",
|
||||
"at-least": "Поне",
|
||||
"at-most": "Най-много",
|
||||
"post-time": "Време на публикуване",
|
||||
"newer-than": "По-нови от",
|
||||
"older-than": "По-стари от",
|
||||
"any-date": "Която и да е дата",
|
||||
"yesterday": "Вчера",
|
||||
"one-week": "Една седмица",
|
||||
"two-weeks": "Две седмици",
|
||||
"one-month": "Един месец",
|
||||
"three-months": "Три месеца",
|
||||
"six-months": "Шест месеца",
|
||||
"one-year": "Една година",
|
||||
"sort-by": "Подреждане по",
|
||||
"last-reply-time": "Време на последния отговор",
|
||||
"topic-title": "Заглавие на темата",
|
||||
"number-of-replies": "Брой на отговорите",
|
||||
"number-of-views": "Брой на преглежданията",
|
||||
"topic-start-date": "Начална дата на темата",
|
||||
"username": "Потребителско име",
|
||||
"category": "Категория",
|
||||
"descending": "В низходящ ред",
|
||||
"ascending": "Във възходящ ред",
|
||||
"save-preferences": "Запазване на предпочитанията",
|
||||
"clear-preferences": "Изчистване на предпочитанията",
|
||||
"search-preferences-saved": "Предпочитанията за търсене бяха запазени",
|
||||
"search-preferences-cleared": "Предпочитанията за търсене бяха изчистени",
|
||||
"show-results-as": "Показване на резултатите като"
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
{
|
||||
"success": "Готово",
|
||||
"topic-post": "Вие публикувахте успешно.",
|
||||
"authentication-successful": "Успешно удостоверяване",
|
||||
"settings-saved": "Настройките са записани!"
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
{
|
||||
"no_tag_topics": "Няма теми с този етикет.",
|
||||
"tags": "Етикети",
|
||||
"enter_tags_here": "Въведете етикетите тук, всеки може да е с дължина между %1 и %2 символа.",
|
||||
"enter_tags_here_short": "Въведете етикети...",
|
||||
"no_tags": "Все още няма етикети."
|
||||
}
|
||||
@@ -1,121 +0,0 @@
|
||||
{
|
||||
"topic": "Тема",
|
||||
"topic_id": "Идентификатора на темата",
|
||||
"topic_id_placeholder": "Въведете идентификатор на темата",
|
||||
"no_topics_found": "Няма открити теми!",
|
||||
"no_posts_found": "Няма открити публикации!",
|
||||
"post_is_deleted": "Тази публикация е изтрита!",
|
||||
"topic_is_deleted": "Тази тема е изтрита!",
|
||||
"profile": "Профил",
|
||||
"posted_by": "Публикувано от %1",
|
||||
"posted_by_guest": "Публикувано от гост",
|
||||
"chat": "Разговор",
|
||||
"notify_me": "Получавайте известия за новите отговори в тази тема",
|
||||
"quote": "Цитат",
|
||||
"reply": "Отговор",
|
||||
"reply-as-topic": "Отговор в нова тема",
|
||||
"guest-login-reply": "Влезте, за да отговорите",
|
||||
"edit": "Редактиране",
|
||||
"delete": "Изтриване",
|
||||
"purge": "Изчистване",
|
||||
"restore": "Възстановяване",
|
||||
"move": "Преместване",
|
||||
"fork": "Разделяне",
|
||||
"link": "Връзка",
|
||||
"share": "Споделяне",
|
||||
"tools": "Инструменти",
|
||||
"flag": "Докладване",
|
||||
"locked": "Заключена",
|
||||
"pinned": "Закачена",
|
||||
"moved": "Преместена",
|
||||
"bookmark_instructions": "Щракнете тук, за да се върнете към последно прочетената публикация в тази тема.",
|
||||
"flag_title": "Докладване на тази публикация до модератор",
|
||||
"flag_success": "Тази публикация е била докладвана до модератор.",
|
||||
"deleted_message": "Тази тема е била изтрита. Само потребители с права за управление на темите могат да я видят.",
|
||||
"following_topic.message": "Вече ще получавате известия когато някой публикува коментар в тази тема.",
|
||||
"not_following_topic.message": "Ще виждате тази тема в списъка с непрочетени теми, но няма да получавате известия, когато хората публикуват нещо в нея.",
|
||||
"ignoring_topic.message": "Вече няма да виждате тази тема в списъка с непрочетени теми. Ще получите известие, когато някой Ви спомене или гласува положително за Ваша публикация.",
|
||||
"login_to_subscribe": "Моля, регистрирайте се или влезте, за да се абонирате за тази тема.",
|
||||
"markAsUnreadForAll.success": "Темата е отбелязана като непрочетена за всички.",
|
||||
"mark_unread": "Отбелязване като непрочетена",
|
||||
"mark_unread.success": "Темата е отбелязана като непрочетена.",
|
||||
"watch": "Наблюдаване",
|
||||
"unwatch": "Спиране на наблюдаването",
|
||||
"watch.title": "Получавайте известия за новите отговори в тази тема",
|
||||
"unwatch.title": "Спрете да наблюдавате тази тема",
|
||||
"share_this_post": "Споделете тази публикация",
|
||||
"watching": "Наблюдавате",
|
||||
"not-watching": "Не наблюдавате",
|
||||
"ignoring": "Пренебрегвате",
|
||||
"watching.description": "Ще получавате известия за новите отговори.<br/>Темата ще се показва в списъка с непрочетени.",
|
||||
"not-watching.description": "Няма да получавате известия за новите отговори.<br/>Темата ще се показва в списъка с непрочетени, само ако категорията не се пренебрегва.",
|
||||
"ignoring.description": "Няма да получавате известия за новите отговори.<br/>Темата няма да се показва в списъка с непрочетени.",
|
||||
"thread_tools.title": "Инструменти за темата",
|
||||
"thread_tools.markAsUnreadForAll": "Отбелязване като непрочетена",
|
||||
"thread_tools.pin": "Закачане на темата",
|
||||
"thread_tools.unpin": "Откачане на темата",
|
||||
"thread_tools.lock": "Заключване на темата",
|
||||
"thread_tools.unlock": "Отключване на темата",
|
||||
"thread_tools.move": "Преместване на темата",
|
||||
"thread_tools.move_all": "Преместване на всички",
|
||||
"thread_tools.fork": "Разделяне на темата",
|
||||
"thread_tools.delete": "Изтриване на темата",
|
||||
"thread_tools.delete-posts": "Изтриване на публикациите",
|
||||
"thread_tools.delete_confirm": "Наистина ли искате да изтриете тази тема?",
|
||||
"thread_tools.restore": "Възстановяване на темата",
|
||||
"thread_tools.restore_confirm": "Наистина ли искате да възстановите тази тема?",
|
||||
"thread_tools.purge": "Изчистване на темата",
|
||||
"thread_tools.purge_confirm": "Наистина ли искате да изчистите тази тема?",
|
||||
"topic_move_success": "Темата беше преместена успешно в %1",
|
||||
"post_delete_confirm": "Наистина ли искате да изтриете тази публикация?",
|
||||
"post_restore_confirm": "Наистина ли искате да възстановите тази публикация?",
|
||||
"post_purge_confirm": "Наистина ли искате да изчистите тази публикация?",
|
||||
"load_categories": "Зареждане на категориите",
|
||||
"disabled_categories_note": "Изключените категории са засивени",
|
||||
"confirm_move": "Преместване",
|
||||
"confirm_fork": "Разделяне",
|
||||
"favourite": "Отметка",
|
||||
"favourites": "Отметки",
|
||||
"favourites.has_no_favourites": "Все още не сте си запазвали отметки към никакви публикации.",
|
||||
"loading_more_posts": "Зареждане на още публикации",
|
||||
"move_topic": "Преместване на темата",
|
||||
"move_topics": "Преместване на темите",
|
||||
"move_post": "Преместване на публикацията",
|
||||
"post_moved": "Публикацията беше преместена!",
|
||||
"fork_topic": "Разделяне на темата",
|
||||
"topic_will_be_moved_to": "Тази тема ще бъде преместена в категорията",
|
||||
"fork_topic_instruction": "Натиснете публикациите, които искате да отделите",
|
||||
"fork_no_pids": "Няма избрани публикации!",
|
||||
"fork_success": "Темата е разделена успешно! Натиснете тук, за да преминете към отделената тема.",
|
||||
"delete_posts_instruction": "Натиснете публикациите, които искате да изтриете/изчистите",
|
||||
"composer.title_placeholder": "Въведете заглавието на темата си тук...",
|
||||
"composer.handle_placeholder": "Име",
|
||||
"composer.discard": "Отхвърляне",
|
||||
"composer.submit": "Публикуване",
|
||||
"composer.replying_to": "Отговор на %1",
|
||||
"composer.new_topic": "Нова тема",
|
||||
"composer.uploading": "качване...",
|
||||
"composer.thumb_url_label": "Поставете адреса на иконка за темата",
|
||||
"composer.thumb_title": "Добавете иконка към тази тема",
|
||||
"composer.thumb_url_placeholder": "http://example.com/thumb.png",
|
||||
"composer.thumb_file_label": "Или качете файл",
|
||||
"composer.thumb_remove": "Изчистване на полетата",
|
||||
"composer.drag_and_drop_images": "Плъзнете снимките тук",
|
||||
"more_users_and_guests": "Още %1 потребител(и) и %2 гост(и)",
|
||||
"more_users": "Още %1 потребител(и)",
|
||||
"more_guests": "Още %1 гост(и)",
|
||||
"users_and_others": "%1 и %2 други",
|
||||
"sort_by": "Подреждане по",
|
||||
"oldest_to_newest": "Първо най-старите",
|
||||
"newest_to_oldest": "Първо най-новите",
|
||||
"most_votes": "Най-много гласове",
|
||||
"most_posts": "Най-много публикации",
|
||||
"stale.title": "Създаване на нова тема вместо това?",
|
||||
"stale.warning": "Темата, в която отговаряте, е доста стара. Искате ли вместо това да създадете нова и да направите препратка към тази в отговора си?",
|
||||
"stale.create": "Създаване на нова тема",
|
||||
"stale.reply_anyway": "Отговаряне в тази тема въпреки това",
|
||||
"link_back": "Отговор: [%1](%2)",
|
||||
"spam": "Спам",
|
||||
"offensive": "Обидно",
|
||||
"custom-flag-reason": "Изберете причина за докладване"
|
||||
}
|
||||
@@ -1,13 +0,0 @@
|
||||
{
|
||||
"title": "Непрочетени",
|
||||
"no_unread_topics": "Няма непрочетени теми.",
|
||||
"load_more": "Зареждане на още",
|
||||
"mark_as_read": "Отбелязване като прочетени",
|
||||
"selected": "Избраните",
|
||||
"all": "Всички",
|
||||
"all_categories": "Всички категории",
|
||||
"topics_marked_as_read.success": "Темите бяха отбелязани като прочетени!",
|
||||
"all-topics": "Всички теми",
|
||||
"new-topics": "Нови теми",
|
||||
"watched-topics": "Наблюдавани теми"
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
{
|
||||
"uploading-file": "Качване на файла…",
|
||||
"select-file-to-upload": "Изберете файл за качване!",
|
||||
"upload-success": "Файлът е качен успешно!",
|
||||
"maximum-file-size": "Най-много %1 КБ"
|
||||
}
|
||||
@@ -1,118 +0,0 @@
|
||||
{
|
||||
"banned": "Блокиран",
|
||||
"offline": "Извън линия",
|
||||
"username": "Потребителско име",
|
||||
"joindate": "Дата на присъединяване",
|
||||
"postcount": "Брой публикации",
|
||||
"email": "Е-поща",
|
||||
"confirm_email": "Потвърдете е-пощата",
|
||||
"account_info": "Информация за акаунта",
|
||||
"ban_account": "Блокиране на акаунта",
|
||||
"ban_account_confirm": "Наистина ли искате да блокирате този потребител?",
|
||||
"unban_account": "Отблокиране на акаунта",
|
||||
"delete_account": "Изтриване на акаунта",
|
||||
"delete_account_confirm": "Наистина ли искате да изтриете акаунта си? <br /><strong>Това действие е необратимо и няма да можете да възстановите нищо от данните си</strong><br /><br />Въведете потребителското си име, за да потвърдите, че искате да унищожите този акаунт.",
|
||||
"delete_this_account_confirm": "Наистина ли искате да изтриете този акаунт? <br /><strong>Това действие е необратимо и няма да можете да възстановите нищо от данните</strong><br /><br />",
|
||||
"account-deleted": "Акаунтът е изтрит",
|
||||
"fullname": "Цяло име",
|
||||
"website": "Уеб сайт",
|
||||
"location": "Местоположение",
|
||||
"age": "Възраст",
|
||||
"joined": "Присъединил се",
|
||||
"lastonline": "Последно на линия",
|
||||
"profile": "Профил",
|
||||
"profile_views": "Преглеждания на профила",
|
||||
"reputation": "Репутация",
|
||||
"favourites": "Отметки",
|
||||
"watched": "Наблюдавани",
|
||||
"followers": "Последователи",
|
||||
"following": "Следва",
|
||||
"aboutme": "За мен",
|
||||
"signature": "Подпис",
|
||||
"birthday": "Рождена дата",
|
||||
"chat": "Разговор",
|
||||
"chat_with": "Разговор с %1",
|
||||
"follow": "Следване",
|
||||
"unfollow": "Спиране на следването",
|
||||
"more": "Още",
|
||||
"profile_update_success": "Профилът беше обновен успешно!",
|
||||
"change_picture": "Промяна на снимката",
|
||||
"change_username": "Промяна на потребителското име",
|
||||
"change_email": "Промяна на е-пощата",
|
||||
"edit": "Редактиране",
|
||||
"edit-profile": "Редактиране на профила",
|
||||
"default_picture": "Иконка по подразбиране",
|
||||
"uploaded_picture": "Качена снимка",
|
||||
"upload_new_picture": "Качване на нова снимка",
|
||||
"upload_new_picture_from_url": "Качване на нова снимка от адрес",
|
||||
"current_password": "Текуща парола",
|
||||
"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": "Паролата ви е обновена!",
|
||||
"confirm_password": "Потвърдете паролата",
|
||||
"password": "Парола",
|
||||
"username_taken_workaround": "Потребителското име, което искате, е заето и затова ние го променихме малко. Вие ще се наричате <strong>%1</strong>",
|
||||
"password_same_as_username": "Паролата е същата като потребителското Ви име. Моля, изберете друга парола.",
|
||||
"password_same_as_email": "Паролата е същата като е-пощата Ви. Моля, изберете друга парола.",
|
||||
"upload_picture": "Качване на снимка",
|
||||
"upload_a_picture": "Качване на снимка",
|
||||
"remove_uploaded_picture": "Премахване на качената снимка",
|
||||
"upload_cover_picture": "Качване на снимка за показване",
|
||||
"settings": "Настройки",
|
||||
"show_email": "Да се показва е-пощата ми",
|
||||
"show_fullname": "Да се показва цялото ми име",
|
||||
"restrict_chats": "Разрешаване на съобщенията само от потребители, които следвам",
|
||||
"digest_label": "Абониране за резюмета",
|
||||
"digest_description": "Абониране за новини по е-пощата относно този форум (нови известия и теми) според избрания график",
|
||||
"digest_off": "Изключено",
|
||||
"digest_daily": "Ежедневно",
|
||||
"digest_weekly": "Ежеседмично",
|
||||
"digest_monthly": "Ежемесечно",
|
||||
"send_chat_notifications": "Изпращане на е-писмо, ако получа ново съобщение в разговор, а не съм на линия",
|
||||
"send_post_notifications": "Изпращане на е-писмо, когато се появи отговор в темите, за които съм абониран/а.",
|
||||
"settings-require-reload": "Някои промени в настройките изискват презареждане. Натиснете тук, за да презаредите страницата.",
|
||||
"has_no_follower": "Този потребител няма последователи :(",
|
||||
"follows_no_one": "Този потребител не следва никого :(",
|
||||
"has_no_posts": "Този потребител не е публикувал нищо досега.",
|
||||
"has_no_topics": "Този потребител не е създавал теми досега.",
|
||||
"has_no_watched_topics": "Този потребител не е наблюдавал нито една тема досега.",
|
||||
"has_no_upvoted_posts": "Този потребител не е гласувал положително досега.",
|
||||
"has_no_downvoted_posts": "Този потребител не е гласувал отрицателно досега.",
|
||||
"has_no_voted_posts": "Този потребител не е гласувал досега.",
|
||||
"email_hidden": "Е-пощата е скрита",
|
||||
"hidden": "скрито",
|
||||
"paginate_description": "Разделяне на темите и публикациите на страници, вместо да се превърта безкрайно",
|
||||
"topics_per_page": "Теми на страница",
|
||||
"posts_per_page": "Публикации на страница",
|
||||
"notification_sounds": "Изпълняване на звук, когато получите известие",
|
||||
"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": "Заглавие на групата",
|
||||
"no-group-title": "Няма заглавие на група",
|
||||
"select-skin": "Изберете облик",
|
||||
"select-homepage": "Изберете начална страница",
|
||||
"homepage": "Начална страница",
|
||||
"homepage_description": "Изберете страница, която да използвате като начална за форума, или „Нищо“, за да използвате тази по подразбиране.",
|
||||
"custom_route": "Път до персонализираната начална страница",
|
||||
"custom_route_help": "Въведете името на пътя тук, без наклонена черта пред него (пример: „recent“ или „popular“)",
|
||||
"sso.title": "Услуги за еднократно вписване",
|
||||
"sso.associated": "Свързан с",
|
||||
"sso.not-associated": "Натиснете тук, за да свържете с",
|
||||
"info.latest-flags": "Последни доклади",
|
||||
"info.no-flags": "Не са открити докладвани публикации",
|
||||
"info.ban-history": "Скорошна история на блокиранията",
|
||||
"info.no-ban-history": "Този потребител никога не е бил блокиран",
|
||||
"info.banned-until": "Блокиран до %1",
|
||||
"info.banned-permanently": "Блокиран за постоянно"
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
{
|
||||
"latest_users": "Последни потребители",
|
||||
"top_posters": "С най-много публикации",
|
||||
"most_reputation": "С най-много репутация",
|
||||
"most_flags": "С най-много доклади",
|
||||
"search": "Търсене",
|
||||
"enter_username": "Въведете потребителско име, което да потърсите",
|
||||
"load_more": "Зареждане на още",
|
||||
"users-found-search-took": "Намерени са %1 потребител(и)! Търсенето отне %2 секунди.",
|
||||
"filter-by": "Филтриране",
|
||||
"online-only": "Само тези на линия",
|
||||
"invite": "Канене",
|
||||
"invitation-email-sent": "Беше изпратено е-писмо за потвърждение до %1",
|
||||
"user_list": "Списък от потребители",
|
||||
"recent_topics": "Скорошни теми",
|
||||
"popular_topics": "Популярни теми",
|
||||
"unread_topics": "Непрочетени теми",
|
||||
"categories": "Категории",
|
||||
"tags": "Етикети",
|
||||
"no-users-found": "Няма открити потребители!"
|
||||
}
|
||||
@@ -1,20 +1,8 @@
|
||||
{
|
||||
"category": "বিভাগ",
|
||||
"subcategories": "উপবিভাগ",
|
||||
"new_topic_button": "নতুন টপিক",
|
||||
"guest-login-post": "উত্তর দিতে লগিন করুন",
|
||||
"no_topics": "<strong>এই বিভাগে কোন আলোচনা নেই! </strong><br /> আপনি চাইলে নতুন আলোচনা শুরু করতে পারেন।",
|
||||
"browsing": "ব্রাউজিং",
|
||||
"no_topics": "<strong>এই বিভাগে কোন টপিক নেই! </strong><br /> আপনি চাইলে একটি পোষ্ট করতে পারেন।",
|
||||
"browsing": "browsing",
|
||||
"no_replies": "কোন রিপ্লাই নেই",
|
||||
"no_new_posts": "নতুন কোন পোস্ট নাই",
|
||||
"share_this_category": "এই বিভাগটি অন্যের সাথে ভাগাভাগি করুন",
|
||||
"watch": "নজর রাখুন",
|
||||
"ignore": "উপেক্ষা করুন",
|
||||
"watching": "Watching",
|
||||
"ignoring": "Ignoring",
|
||||
"watching.description": "Show topics in unread",
|
||||
"ignoring.description": "Do not show topics in unread",
|
||||
"watch.message": "আপনি এই বিভাগটিতে নজর রাখছেন",
|
||||
"ignore.message": "আপনি এই বিভাগটির উপেক্ষা করছেন ",
|
||||
"watched-categories": "প্রেক্ষিত বিভাগসমূহ"
|
||||
"ignore": "উপেক্ষা করুন"
|
||||
}
|
||||
@@ -1,36 +1,23 @@
|
||||
{
|
||||
"password-reset-requested": "পাসওয়ার্ড রিসেটের জন্য অনুরোধ করা হয়েছে - %1!",
|
||||
"welcome-to": "%1 এ স্বাগতম",
|
||||
"invite": "%1 থেকে আমন্ত্রণ",
|
||||
"greeting_no_name": "স্বাগতম",
|
||||
"greeting_with_name": "স্বাগতম %1",
|
||||
"password-reset-requested": "Password Reset Requested - %1!",
|
||||
"welcome-to": "Welcome to %1",
|
||||
"greeting_no_name": "Hello",
|
||||
"greeting_with_name": "Hello %1",
|
||||
"welcome.text1": "%1 এ নিবন্ধন করার জন্য আপনাকে ধন্যবাদ!",
|
||||
"welcome.text2": "আপনার একাউন্ট এ্যাক্টিভেট করার জন্য, আপনি যে ইমেইল এড্রেস ব্যাবহার করে নিবন্ধন করেছেন তা যাচাই করতে হবে",
|
||||
"welcome.text3": "An administrator has accepted your registration application. You can login with your username/password now.",
|
||||
"welcome.cta": "আপনার ইমেইল এড্রেস নিশ্চিত করার জন্য এখানে ক্লিক করুন",
|
||||
"invitation.text1": "%1 আপনাকে %2 তে যোগ দিতে আমন্ত্রণ জানিয়েছেন ",
|
||||
"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": "day",
|
||||
"digest.week": "week",
|
||||
"digest.month": "month",
|
||||
"digest.subject": "Digest for %1",
|
||||
"notif.chat.subject": "%1 এর থেকে নতুন মেসেজ এসেছে।",
|
||||
"notif.chat.cta": "কথপোকথন চালিয়ে যেতে এখানে ক্লিক করুন",
|
||||
"notif.chat.unsub.info": "আপনার সাবস্ক্রীপশন সেটিংসের কারনে আপনার এই নোটিফিকেশন পাঠানো হয়েছে",
|
||||
"notif.post.cta": "পুরো বিষয়টি পড়তে এখানে ক্লিক করুন",
|
||||
"notif.post.unsub.info": "আপনার সাবস্ক্রিপশন সেটিংসের কারনে আপনার এই বার্তাটি পাঠানো হয়েছে",
|
||||
"test.text1": "আপনি সঠিকভাবে নোডবিবির জন্য মেইলার সেটাপ করেছেন কিনা নিশ্চিত করার জন্য এই টেষ্ট ইমেইল পাঠানো হয়েছে",
|
||||
"unsub.cta": "সেটিংসগুলো পরিবর্তন করতে এখানে ক্লিক করুন",
|
||||
"closing": "ধন্যবাদ!"
|
||||
"digest.notifications": "You have unread notifications from %1:",
|
||||
"digest.latest_topics": "Latest topics from %1",
|
||||
"digest.cta": "Click here to visit %1",
|
||||
"digest.unsub.info": "This digest was sent to you due to your subscription settings.",
|
||||
"digest.no_topics": "There have been no active topics in the past %1",
|
||||
"notif.chat.subject": "New chat message received from %1",
|
||||
"notif.chat.cta": "Click here to continue the conversation",
|
||||
"notif.chat.unsub.info": "This chat notification was sent to you due to your subscription settings.",
|
||||
"test.text1": "This is a test email to verify that the emailer is set up correctly for your NodeBB.",
|
||||
"unsub.cta": "Click here to alter those settings",
|
||||
"closing": "Thanks!"
|
||||
}
|
||||
@@ -2,7 +2,7 @@
|
||||
"invalid-data": "ভুল তথ্য",
|
||||
"not-logged-in": "আপনি লগিন করেননি",
|
||||
"account-locked": "আপনার অ্যাকাউন্ট সাময়িকভাবে লক করা হয়েছে",
|
||||
"search-requires-login": "Searching requires an account - please login or register.",
|
||||
"search-requires-login": "অনুসন্ধান করার জন্য একটি অ্যাকাউন্ট প্রয়োজন! অনুগ্রহপূর্বক প্রবেশ করুন অথবা নিবন্ধন করুন!",
|
||||
"invalid-cid": "ভুল বিভাগ নাম্বার",
|
||||
"invalid-tid": "ভুল টপিক নাম্বার",
|
||||
"invalid-pid": "ভুল পোস্ট নাম্বার",
|
||||
@@ -14,23 +14,14 @@
|
||||
"invalid-password": "ভুল পাসওয়ার্ড",
|
||||
"invalid-username-or-password": "অনুগ্রহ পূর্বক ইউজারনেম এবং পাসওয়ার্ড উভয়ই প্রদান করুন",
|
||||
"invalid-search-term": "অগ্রহনযোগ্য সার্চ টার্ম",
|
||||
"csrf-invalid": "We were unable to log you in, likely due to an expired session. Please try again",
|
||||
"invalid-pagination-value": "Invalid pagination value, must be at least %1 and at most %2",
|
||||
"invalid-pagination-value": "ভুল পৃষ্ঠা নাম্বার",
|
||||
"username-taken": "ইউজারনেম আগেই ব্যবহৃত",
|
||||
"email-taken": "ইমেইল আগেই ব্যবহৃত",
|
||||
"email-not-confirmed": "আপনার ইমেইল এড্রেস নিশ্চিত করা হয় নি, নিশ্চিত করতে এখানে ক্লিক করুন।",
|
||||
"email-not-confirmed-chat": "You are unable to chat until your email is confirmed, please click here to confirm your email.",
|
||||
"no-email-to-confirm": "This forum requires email confirmation, please click here to enter an email",
|
||||
"email-confirm-failed": "We could not confirm your email, please try again later.",
|
||||
"confirm-email-already-sent": "Confirmation email already sent, please wait %1 minute(s) to send another one.",
|
||||
"sendmail-not-found": "The sendmail executable could not be found, please ensure it is installed and executable by the user running NodeBB.",
|
||||
"username-too-short": "খুব ছোট ইউজারনেম",
|
||||
"username-too-long": "ইউজারনেম বড় হয়ে গিয়েছে",
|
||||
"password-too-long": "Password too long",
|
||||
"user-banned": "ব্যবহারকারী নিষিদ্ধ",
|
||||
"user-too-new": "Sorry, you are required to wait %1 second(s) before making your first post",
|
||||
"blacklisted-ip": "Sorry, your IP address has been banned from this community. If you feel this is in error, please contact an administrator.",
|
||||
"ban-expiry-missing": "Please provide an end date for this ban",
|
||||
"user-too-new": "দুঃখিত! প্রথম পোষ্ট করার জন্য আপনাকে %1 সেকেন্ড অপেক্ষা করতে হবে।",
|
||||
"no-category": "বিভাগটি খুজে পাওয়া যায় নি",
|
||||
"no-topic": "এই টপিক নেই",
|
||||
"no-post": "এই পোষ্ট নেই",
|
||||
@@ -38,87 +29,39 @@
|
||||
"no-user": "এই নামে কোন সদস্য নেই",
|
||||
"no-teaser": "টিজারটি খুজে পাওয়া যায় নি",
|
||||
"no-privileges": "এই কাজটির জন্য আপনার পর্যাপ্ত অধিকার নেই",
|
||||
"no-emailers-configured": "কোন ইমেল প্লাগইন লোড করা নেই, কাজেই টেস্ট মেইল পাঠানো সম্ভব হচ্ছে না",
|
||||
"category-disabled": "বিভাগটি নিষ্ক্রিয়",
|
||||
"topic-locked": "টপিক বন্ধ",
|
||||
"post-edit-duration-expired": "You are only allowed to edit posts for %1 second(s) after posting",
|
||||
"post-edit-duration-expired-minutes": "You are only allowed to edit posts for %1 minute(s) after posting",
|
||||
"post-edit-duration-expired-minutes-seconds": "You are only allowed to edit posts for %1 minute(s) %2 second(s) after posting",
|
||||
"post-edit-duration-expired-hours": "You are only allowed to edit posts for %1 hour(s) after posting",
|
||||
"post-edit-duration-expired-hours-minutes": "You are only allowed to edit posts for %1 hour(s) %2 minute(s) after posting",
|
||||
"post-edit-duration-expired-days": "You are only allowed to edit posts for %1 day(s) after posting",
|
||||
"post-edit-duration-expired-days-hours": "You are only allowed to edit posts for %1 day(s) %2 hour(s) after posting",
|
||||
"post-delete-duration-expired": "You are only allowed to delete posts for %1 second(s) after posting",
|
||||
"post-delete-duration-expired-minutes": "You are only allowed to delete posts for %1 minute(s) after posting",
|
||||
"post-delete-duration-expired-minutes-seconds": "You are only allowed to delete posts for %1 minute(s) %2 second(s) after posting",
|
||||
"post-delete-duration-expired-hours": "You are only allowed to delete posts for %1 hour(s) after posting",
|
||||
"post-delete-duration-expired-hours-minutes": "You are only allowed to delete posts for %1 hour(s) %2 minute(s) after posting",
|
||||
"post-delete-duration-expired-days": "You are only allowed to delete posts for %1 day(s) after posting",
|
||||
"post-delete-duration-expired-days-hours": "You are only allowed to delete posts for %1 day(s) %2 hour(s) after posting",
|
||||
"content-too-short": "Please enter a longer post. Posts should contain at least %1 character(s).",
|
||||
"content-too-long": "Please enter a shorter post. Posts can't be longer than %1 character(s).",
|
||||
"title-too-short": "Please enter a longer title. Titles should contain at least %1 character(s).",
|
||||
"title-too-long": "Please enter a shorter title. Titles can't be longer than %1 character(s).",
|
||||
"too-many-posts": "You can only post once every %1 second(s) - please wait before posting again",
|
||||
"too-many-posts-newbie": "As a new user, you can only post once every %1 second(s) until you have earned %2 reputation - please wait before posting again",
|
||||
"tag-too-short": "Please enter a longer tag. Tags should contain at least %1 character(s)",
|
||||
"tag-too-long": "Please enter a shorter tag. Tags can't be longer than %1 character(s)",
|
||||
"not-enough-tags": "Not enough tags. Topics must have at least %1 tag(s)",
|
||||
"too-many-tags": "Too many tags. Topics can't have more than %1 tag(s)",
|
||||
"still-uploading": "আপলোড সম্পূর্ণ জন্য অনুগ্রহ করে অপেক্ষা করুন",
|
||||
"file-too-big": "Maximum allowed file size is %1 kB - please upload a smaller file",
|
||||
"guest-upload-disabled": "Guest uploading has been disabled",
|
||||
"already-favourited": "You have already bookmarked this post",
|
||||
"already-unfavourited": "You have already unbookmarked this post",
|
||||
"content-too-short": "অনুগ্রহকরে অপেক্ষকৃত বড় পোষ্ট করুন। একটি পোষ্টে নূন্যতম %1 অক্ষর থাকতে হবে।",
|
||||
"title-too-short": "অনুগ্রহপূর্বক বড় শিরোনাম ব্যাবহার করুন। শিরোনামের জন্য নূন্যতম %1 অক্ষর ব্যাবহার করতে হবে।",
|
||||
"title-too-long": "অনুগ্রহ করে সংক্ষিপ্ত শিরোনাম লিখুন। শিরোনাম %1 অক্ষরের বেশি হতে পারবে না।",
|
||||
"too-many-posts": "আপনি প্রতি %1 সেকেন্ডে একবার পোষ্ট করতে পারবেন। পরবর্তী পোষ্ট করার জন্য অপেক্ষা করুন। ",
|
||||
"too-many-posts-newbie": "নতুন সদস্য হিসাবে %2 সন্মানণা পাওয়া পর্যন্ত আপনি প্রতি %1 সেকেন্ডে একবার পোষ্ট করতে পারবেন। পরবর্তী পোষ্ট করার জন্য অপেক্ষা করুন। ",
|
||||
"file-too-big": "সর্বোচ্চ গৃহীত ফাইলসাইজ হচ্ছে %1 kb - অনুগ্রহপূর্বক ছোট ফাইল আপলোড করুন",
|
||||
"cant-vote-self-post": "আপনি নিজের পোস্টে ভোট দিতে পারবেন না।",
|
||||
"already-favourited": "আপনি ইতিমধ্যে এই পোষ্টটি পছন্দের তালিকায় যোগ করেছেন",
|
||||
"already-unfavourited": "আপনি ইতিমধ্যে এই পোষ্টটি আপনার পছন্দের তালিকা থেকে সরিয়ে ফেলেছেন",
|
||||
"cant-ban-other-admins": "আপনি অন্য এ্যাডমিনদের নিষিদ্ধ করতে পারেন না!",
|
||||
"cant-remove-last-admin": "You are the only administrator. Add another user as an administrator before removing yourself as admin",
|
||||
"cant-delete-admin": "Remove administrator privileges from this account before attempting to delete it.",
|
||||
"invalid-image-type": "Invalid image type. Allowed types are: %1",
|
||||
"invalid-image-extension": "Invalid image extension",
|
||||
"invalid-file-type": "Invalid file type. Allowed types are: %1",
|
||||
"invalid-image-type": "ভুল ছবির টাইপ",
|
||||
"group-name-too-short": "গ্রুপের নাম খুব ছোট",
|
||||
"group-name-too-long": "Group name too long",
|
||||
"group-already-exists": "গ্রুপ ইতিমধ্যেই বিদ্যমান",
|
||||
"group-name-change-not-allowed": "গ্রুপের নাম পরিবর্তনের অনুমতি নেই",
|
||||
"group-already-member": "Already part of this group",
|
||||
"group-not-member": "Not a member of this group",
|
||||
"group-needs-owner": "This group requires at least one owner",
|
||||
"group-already-invited": "This user has already been invited",
|
||||
"group-already-requested": "Your membership request has already been submitted",
|
||||
"post-already-deleted": "এই পোস্টটি ইতিমধ্যে ডিলিট করা হয়ে গিয়েছে",
|
||||
"post-already-restored": "এই পোষ্টটি ইতিমধ্যে পুনরোদ্ধার করা হয়েছে",
|
||||
"topic-already-deleted": "এই টপিকটি ইতিমধ্যে ডিলিট করা হয়েছে",
|
||||
"topic-already-restored": "এই টপিকটি ইতিমধ্যে পুনরোদ্ধার করা হয়েছে",
|
||||
"cant-purge-main-post": "You can't purge the main post, please delete the topic instead",
|
||||
"topic-thumbnails-are-disabled": "টপিক থাম্বনেল নিষ্ক্রিয় করা। ",
|
||||
"invalid-file": "ভুল ফাইল",
|
||||
"uploads-are-disabled": "আপলোড নিষ্ক্রিয় করা",
|
||||
"signature-too-long": "Sorry, your signature cannot be longer than %1 character(s).",
|
||||
"about-me-too-long": "Sorry, your about me cannot be longer than %1 character(s).",
|
||||
"upload-error": "আপলোড ত্রুটিঃ %1",
|
||||
"signature-too-long": "দুঃখিত, আপনার সাক্ষর %1 অক্ষরের বেশী হতে পারবে না। ",
|
||||
"cant-chat-with-yourself": "আপনি নিজের সাথে চ্যাট করতে পারবেন না!",
|
||||
"chat-restricted": "এই সদস্য তার বার্তালাপ সংরক্ষিত রেখেছেন। এই সদস্য আপনাকে ফলো করার পরই কেবলমাত্র আপনি তার সাথে চ্যাট করতে পারবেন",
|
||||
"chat-disabled": "Chat system disabled",
|
||||
"too-many-messages": "You have sent too many messages, please wait awhile.",
|
||||
"invalid-chat-message": "Invalid chat message",
|
||||
"chat-message-too-long": "Chat message is too long",
|
||||
"cant-edit-chat-message": "You are not allowed to edit this message",
|
||||
"cant-remove-last-user": "You can't remove the last user",
|
||||
"cant-delete-chat-message": "You are not allowed to delete this message",
|
||||
"already-voting-for-this-post": "You have already voted for this post.",
|
||||
"reputation-system-disabled": "সম্মাননা ব্যাবস্থা নিস্ক্রীয় রাখা হয়েছে",
|
||||
"downvoting-disabled": "ঋণাত্মক ভোট নিস্ক্রীয় রাখা হয়েছে।",
|
||||
"not-enough-reputation-to-downvote": "আপনার এই পোস্ট downvote করার জন্য পর্যাপ্ত সম্মাননা নেই",
|
||||
"not-enough-reputation-to-flag": "এই পোষ্টকে ফ্লাগ করার জন্য আপনার পর্যাপ্ত সম্মাননা নেই",
|
||||
"already-flagged": "You have already flagged this post",
|
||||
"reload-failed": "\"%1\" রিলোড করতে সমস্যা হয়েছে। রিলোডের পূর্বে যা করা হয়েছিল সেটি আনডু করা সমীচীন। ",
|
||||
"registration-error": "নিবন্ধন এরর!",
|
||||
"parse-error": "Something went wrong while parsing server response",
|
||||
"wrong-login-type-email": "Please use your email to login",
|
||||
"wrong-login-type-username": "Please use your username to login",
|
||||
"invite-maximum-met": "You have invited the maximum amount of people (%1 out of %2).",
|
||||
"no-session-found": "No login session found!",
|
||||
"not-in-room": "User not in room",
|
||||
"no-users-in-room": "No users in this room",
|
||||
"cant-kick-self": "You can't kick yourself from the group",
|
||||
"no-users-selected": "No user(s) selected",
|
||||
"invalid-home-page-route": "Invalid home page route"
|
||||
"reload-failed": "NodeBB encountered a problem while reloading: \"%1\". NodeBB will continue to serve the existing client-side assets, although you should undo what you did just prior to reloading.",
|
||||
"registration-error": "নিবন্ধন এরর!"
|
||||
}
|
||||
@@ -3,10 +3,9 @@
|
||||
"search": "অনুসন্ধান",
|
||||
"buttons.close": "বন্ধ",
|
||||
"403.title": "প্রবেশাধিকার প্রত্যাখ্যাত",
|
||||
"403.message": "You seem to have stumbled upon a page that you do not have access to.",
|
||||
"403.login": "Perhaps you should <a href='%1/login'>try logging in</a>?",
|
||||
"403.message": "আপনি এমন একটি পাতায় যাওয়ার চেষ্টা করছেন যেখানে আপনার প্রবেশাধিকার নেই। আপনি কি <a href='/login'>প্রবেশ করে</a> আবার চেষ্টা করবেন?",
|
||||
"404.title": "পাওয়া যায়নি",
|
||||
"404.message": "You seem to have stumbled upon a page that does not exist. Return to the <a href='%1/'>home page</a>.",
|
||||
"404.message": "আপনি এমন একটি পাতায় যাওয়ার চেষ্টা করছেন যার অস্তিত্ব নেই। <a href='/'>নীড়পাতায়</a> ফিরে যান। ",
|
||||
"500.title": "অভ্যন্তরীণ ত্রুটি।",
|
||||
"500.message": "ওহো! কিছু ভুল হয়েছে মনে হচ্ছে!",
|
||||
"register": "নিবন্ধন",
|
||||
@@ -22,18 +21,15 @@
|
||||
"pagination.out_of": "%2 এর মাঝে %1",
|
||||
"pagination.enter_index": "সূচক লিখুন",
|
||||
"header.admin": "অ্যাডমিন",
|
||||
"header.categories": "বিভাগ",
|
||||
"header.recent": "সাম্প্রতিক",
|
||||
"header.unread": "অপঠিত",
|
||||
"header.tags": "ট্যাগ",
|
||||
"header.popular": "জনপ্রিয়",
|
||||
"header.users": "ব্যবহারকারীগণ",
|
||||
"header.groups": "Groups",
|
||||
"header.chats": "কথোপকথন",
|
||||
"header.notifications": "বিজ্ঞপ্তি",
|
||||
"header.search": "অনুসন্ধান",
|
||||
"header.profile": "প্রোফাইল",
|
||||
"header.navigation": "Navigation",
|
||||
"notifications.loading": "বিজ্ঞপ্তিগুলি লোড হচ্ছে",
|
||||
"chats.loading": "কথোপকথনগুলি লোড হচ্ছে ",
|
||||
"motd.welcome": "ভবিষ্যতের আলোচনার প্লাটফর্ম, NodeBB তে স্বাগতম।",
|
||||
@@ -49,31 +45,25 @@
|
||||
"users": "ব্যবহারকারীগণ",
|
||||
"topics": "টপিক",
|
||||
"posts": "পোস্টগুলি",
|
||||
"best": "Best",
|
||||
"upvoters": "Upvoters",
|
||||
"upvoted": "Upvoted",
|
||||
"downvoters": "Downvoters",
|
||||
"downvoted": "Downvoted",
|
||||
"views": "দেখেছেন",
|
||||
"reputation": "সন্মাননা",
|
||||
"read_more": "আরো পড়ুন",
|
||||
"more": "আরো...",
|
||||
"posted_ago_by_guest": "অতিথি পোস্ট করেছেন %1",
|
||||
"posted_ago_by": " %1 %2 দ্বারা পোস্টকৃত",
|
||||
"posted_ago": "পোস্ট করেছেন %1",
|
||||
"posted_in": "posted in %1",
|
||||
"posted_in_by": "posted in %1 by %2",
|
||||
"posted_in_ago": "%1 বিভাগে পোস্ট করা হয়েছে %2 আগে",
|
||||
"posted_in_ago_by_guest": "%1 বিভাগে অতিথি পোস্ট করেছেন %2",
|
||||
"posted_in_ago_by": "%3 %1 বিভাগে পোস্ট করেছেন %2",
|
||||
"posted_in_ago": "%1 বিভাগে পোস্ট করা হয়েছে %2 আগে",
|
||||
"replied_ago": "উত্তর দেয়া হয়েছে %1 ",
|
||||
"user_posted_ago": "%1 পোস্ট করেছেন %2",
|
||||
"guest_posted_ago": "অতিথি পোস্ট করেছেন %1",
|
||||
"last_edited_by": "last edited by %1",
|
||||
"last_edited_by_ago": "সর্বশেষ সম্পাদনা করেছেন %1 %2",
|
||||
"norecentposts": "কোনও সাম্প্রতিক পোস্ট নেই",
|
||||
"norecenttopics": "কোনও সাম্প্রতিক টপিক নেই",
|
||||
"recentposts": "সাম্প্রতিক পোস্ট",
|
||||
"recentips": "সাম্প্রতিক প্রবেশকৃত আইপি সমুহ",
|
||||
"away": "দূরে",
|
||||
"dnd": "Do not disturb",
|
||||
"dnd": "বিরক্ত করবেন না",
|
||||
"invisible": "অদৃশ্য",
|
||||
"offline": "অফলাইন",
|
||||
"email": "ইমেইল",
|
||||
@@ -83,14 +73,5 @@
|
||||
"updated.title": "ফোরাম আপডেট করা হয়েছে",
|
||||
"updated.message": "এই ফোরামে এইমাত্র সর্বশেষ সংস্করণে আপডেট করা হয়েছে। পৃষ্ঠাটি রিফ্রেশ করতে এখানে ক্লিক করুন।",
|
||||
"privacy": "নিরাপত্তা",
|
||||
"follow": "Follow",
|
||||
"unfollow": "Unfollow",
|
||||
"delete_all": "সব মুছে ফেলুন",
|
||||
"map": "ম্যাপ",
|
||||
"sessions": "Login Sessions",
|
||||
"ip_address": "IP Address",
|
||||
"enter_page_number": "Enter page number",
|
||||
"upload_file": "Upload file",
|
||||
"upload": "Upload",
|
||||
"allowed-file-types": "Allowed file types are %1"
|
||||
"delete_all": "সব মুছে ফেলুন"
|
||||
}
|
||||
@@ -1,54 +1,8 @@
|
||||
{
|
||||
"groups": "গ্রুপসমূহ",
|
||||
"view_group": "গ্রুপ দেখুন",
|
||||
"owner": "Group Owner",
|
||||
"new_group": "Create New Group",
|
||||
"no_groups_found": "There are no groups to see",
|
||||
"pending.accept": "Accept",
|
||||
"pending.reject": "Reject",
|
||||
"pending.accept_all": "Accept All",
|
||||
"pending.reject_all": "Reject All",
|
||||
"pending.none": "There are no pending members at this time",
|
||||
"invited.none": "There are no invited members at this time",
|
||||
"invited.uninvite": "Rescind Invitation",
|
||||
"invited.search": "Search for a user to invite to this group",
|
||||
"invited.notification_title": "You have been invited to join <strong>%1</strong>",
|
||||
"request.notification_title": "Group Membership Request from <strong>%1</strong>",
|
||||
"request.notification_text": "<strong>%1</strong> has requested to become a member of <strong>%2</strong>",
|
||||
"cover-save": "Save",
|
||||
"cover-saving": "Saving",
|
||||
"details.title": "গ্রুপের বিস্তারিত",
|
||||
"details.members": "সদস্য তালিকা",
|
||||
"details.pending": "Pending Members",
|
||||
"details.invited": "Invited Members",
|
||||
"details.has_no_posts": "এই গ্রুপের সদস্যরা এখনো কোন পোষ্ট করেন নি",
|
||||
"details.latest_posts": "সর্বশেষ পোষ্টসমূহ",
|
||||
"details.private": "Private",
|
||||
"details.disableJoinRequests": "Disable join requests",
|
||||
"details.grant": "Grant/Rescind Ownership",
|
||||
"details.kick": "Kick",
|
||||
"details.owner_options": "Group Administration",
|
||||
"details.group_name": "Group Name",
|
||||
"details.member_count": "Member Count",
|
||||
"details.creation_date": "Creation Date",
|
||||
"details.description": "Description",
|
||||
"details.badge_preview": "Badge Preview",
|
||||
"details.change_icon": "Change Icon",
|
||||
"details.change_colour": "Change Colour",
|
||||
"details.badge_text": "Badge Text",
|
||||
"details.userTitleEnabled": "Show Badge",
|
||||
"details.private_help": "If enabled, joining of groups requires approval from a group owner",
|
||||
"details.hidden": "Hidden",
|
||||
"details.hidden_help": "If enabled, this group will not be found in the groups listing, and users will have to be invited manually",
|
||||
"details.delete_group": "Delete Group",
|
||||
"details.private_system_help": "Private groups is disabled at system level, this option does not do anything",
|
||||
"event.updated": "Group details have been updated",
|
||||
"event.deleted": "The group \"%1\" has been deleted",
|
||||
"membership.accept-invitation": "Accept Invitation",
|
||||
"membership.invitation-pending": "Invitation Pending",
|
||||
"membership.join-group": "Join Group",
|
||||
"membership.leave-group": "Leave Group",
|
||||
"membership.reject": "Reject",
|
||||
"new-group.group_name": "Group Name:",
|
||||
"upload-group-cover": "Upload group cover"
|
||||
"groups": "Groups",
|
||||
"view_group": "View Group",
|
||||
"details.title": "Group Details",
|
||||
"details.members": "Member List",
|
||||
"details.has_no_posts": "This group's members have not made any posts.",
|
||||
"details.latest_posts": "Latest Posts"
|
||||
}
|
||||
@@ -1,12 +1,9 @@
|
||||
{
|
||||
"username-email": "ইউজারনেম / ইমেইল",
|
||||
"username": "ইউজারনেম",
|
||||
"email": "ইমেইল",
|
||||
"username": "ইউজারনেম / ইমেইল",
|
||||
"remember_me": "মনে রাখুন",
|
||||
"forgot_password": "পাসওয়ার্ড ভুলে গিয়েছেন?",
|
||||
"alternative_logins": "বিকল্প প্রবেশ",
|
||||
"failed_login_attempt": "Login Unsuccessful",
|
||||
"failed_login_attempt": "ব্যর্থ প্রবেশের প্রচেষ্টা, আবার চেষ্টা করুন।",
|
||||
"login_successful": "আপনি সফলভাবে প্রবেশ করেছেন!",
|
||||
"dont_have_account": "কোন একাউন্ট নেই?",
|
||||
"logged-out-due-to-inactivity": "You have been logged out of the Admin Control Panel due to inactivity"
|
||||
"dont_have_account": "কোন একাউন্ট নেই?"
|
||||
}
|
||||
@@ -1,46 +1,21 @@
|
||||
{
|
||||
"chat.chatting_with": "<span id=\"chat-with-name\"></span> এর সাথে কথোপকথন",
|
||||
"chat.placeholder": "এখানে আপনার বার্তা লিখুন। পাঠানোর জন্য Enter চাপুন",
|
||||
"chat.placeholder": "Type chat message here, press enter to send",
|
||||
"chat.send": "প্রেরন করুন",
|
||||
"chat.no_active": "আপনার কোন সচল কথোপকথন নেই",
|
||||
"chat.user_typing": "%1 লিখছেন",
|
||||
"chat.user_has_messaged_you": "%1 আপনাকে বার্তা পাঠিয়েছেন",
|
||||
"chat.see_all": "See all chats",
|
||||
"chat.mark_all_read": "Mark all chats read",
|
||||
"chat.no-messages": "মেসেজ হিস্টোরী দেখতে প্রাপক নির্বাচন করুন",
|
||||
"chat.no-users-in-room": "No users in this room",
|
||||
"chat.recent-chats": "সাম্প্রতিক চ্যাটসমূহ",
|
||||
"chat.contacts": "কন্টাক্টস",
|
||||
"chat.message-history": "মেসেজ হিস্টোরী",
|
||||
"chat.pop-out": "চ্যাট উইন্ডো আলাদা করুন",
|
||||
"chat.maximize": "ম্যাক্সিমাইজ",
|
||||
"chat.seven_days": "৭ দিন",
|
||||
"chat.thirty_days": "৩০ দিন",
|
||||
"chat.three_months": "৩ মাস",
|
||||
"chat.delete_message_confirm": "Are you sure you wish to delete this message?",
|
||||
"chat.roomname": "Chat Room %1",
|
||||
"chat.add-users-to-room": "Add users to room",
|
||||
"composer.compose": "Compose",
|
||||
"composer.show_preview": "Show Preview",
|
||||
"composer.hide_preview": "Hide Preview",
|
||||
"chat.see_all": "সকল কথোপকথন দেখুন",
|
||||
"chat.no-messages": "Please select a recipient to view chat message history",
|
||||
"chat.recent-chats": "Recent Chats",
|
||||
"chat.contacts": "Contacts",
|
||||
"chat.message-history": "Message History",
|
||||
"chat.pop-out": "Pop out chat",
|
||||
"chat.maximize": "Maximize",
|
||||
"chat.seven_days": "7 Days",
|
||||
"chat.thirty_days": "30 Days",
|
||||
"chat.three_months": "3 Months",
|
||||
"composer.user_said_in": "%1 বলেছেন %2:",
|
||||
"composer.user_said": "%1 বলেছেনঃ",
|
||||
"composer.discard": "আপনি কি নিশ্চিত যে আপনি এই পোস্ট বাতিল করতে ইচ্ছুক?",
|
||||
"composer.submit_and_lock": "Submit and Lock",
|
||||
"composer.toggle_dropdown": "Toggle Dropdown",
|
||||
"composer.uploading": "Uploading %1",
|
||||
"composer.formatting.bold": "Bold",
|
||||
"composer.formatting.italic": "Italic",
|
||||
"composer.formatting.list": "List",
|
||||
"composer.formatting.strikethrough": "Strikethrough",
|
||||
"composer.formatting.link": "Link",
|
||||
"composer.formatting.picture": "Picture",
|
||||
"composer.upload-picture": "Upload Image",
|
||||
"composer.upload-file": "Upload File",
|
||||
"bootbox.ok": "OK",
|
||||
"bootbox.cancel": "Cancel",
|
||||
"bootbox.confirm": "Confirm",
|
||||
"cover.dragging_title": "Cover Photo Positioning",
|
||||
"cover.dragging_message": "Drag the cover photo to the desired position and click \"Save\"",
|
||||
"cover.saved": "Cover photo image and position saved"
|
||||
"composer.discard": "আপনি কি নিশ্চিত যে আপনি এই পোস্ট বাতিল করতে ইচ্ছুক?"
|
||||
}
|
||||
@@ -1,35 +1,27 @@
|
||||
{
|
||||
"title": "বিজ্ঞপ্তিগুলো",
|
||||
"no_notifs": "আপনার নতুন কোন বিজ্ঞপ্তি নেই",
|
||||
"see_all": "See all notifications",
|
||||
"mark_all_read": "Mark all notifications read",
|
||||
"see_all": "সকল বিজ্ঞপ্তিগুলো দেখুন",
|
||||
"back_to_home": "ফিরুন %1",
|
||||
"outgoing_link": "বহির্গামী লিঙ্ক",
|
||||
"outgoing_link_message": "You are now leaving %1",
|
||||
"continue_to": "%1 তে আগান",
|
||||
"return_to": "%1 এ ফেরত যান",
|
||||
"outgoing_link_message": "You are now leaving %1.",
|
||||
"continue_to": "Continue to %1",
|
||||
"return_to": "Return to %1",
|
||||
"new_notification": "নতুন বিজ্ঞপ্তি",
|
||||
"you_have_unread_notifications": "আপনার অপঠিত বিজ্ঞপ্তি আছে।",
|
||||
"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>.",
|
||||
"upvoted_your_post_in_multiple": "<strong>%1</strong> and %2 others have upvoted your post in <strong>%3</strong>.",
|
||||
"moved_your_post": "<strong>%1</strong> has moved your post to <strong>%2</strong>",
|
||||
"moved_your_topic": "<strong>%1</strong> has moved <strong>%2</strong>",
|
||||
"upvoted_your_post_in": "<strong>%1</strong> has upvoted your post in <strong>%2</strong>.",
|
||||
"moved_your_post": "<strong>%1</strong> has moved your post.",
|
||||
"moved_your_topic": "<strong>%1</strong> has moved your topic.",
|
||||
"favourited_your_post_in": "<strong>%1</strong> has favourited your post in <strong>%2</strong>.",
|
||||
"user_flagged_post_in": "<strong>%1</strong> flagged a post in <strong>%2</strong>",
|
||||
"user_flagged_post_in_dual": "<strong>%1</strong> and <strong>%2</strong> flagged a post in <strong>%3</strong>",
|
||||
"user_flagged_post_in_multiple": "<strong>%1</strong> and %2 others flagged a post in <strong>%3</strong>",
|
||||
"user_posted_to": "<strong>%1</strong> একটি উত্তর দিয়েছেন: <strong>%2</strong>",
|
||||
"user_posted_to_dual": "<strong>%1</strong> and <strong>%2</strong> have posted replies to: <strong>%3</strong>",
|
||||
"user_posted_to_multiple": "<strong>%1</strong> and %2 others have posted replies to: <strong>%3</strong>",
|
||||
"user_posted_topic": "<strong>%1</strong> has posted a new topic: <strong>%2</strong>",
|
||||
"user_started_following_you": "<strong>%1</strong> আপনাকে অনুসরন করা শুরু করেছেন।",
|
||||
"user_started_following_you_dual": "<strong>%1</strong> and <strong>%2</strong> started following you.",
|
||||
"user_started_following_you_multiple": "<strong>%1</strong> and %2 others started following you.",
|
||||
"new_register": "<strong>%1</strong> sent a registration request.",
|
||||
"new_register_multiple": "There are <strong>%1</strong> registration requests awaiting review.",
|
||||
"user_mentioned_you_in": "<strong>%1</strong>, <strong>%2</strong> এ আপনার নাম উল্লেখ করেছেন",
|
||||
"user_started_following_you": "<strong>%1</strong> started following you.",
|
||||
"email-confirmed": "ইমেইল নিশ্চিত করা হয়েছে",
|
||||
"email-confirmed-message": "আপনার ইমেইল যাচাই করার জন্য আপনাকে ধন্যবাদ। আপনার অ্যাকাউন্টটি এখন সম্পূর্ণরূপে সক্রিয়।",
|
||||
"email-confirm-error": "একটি ত্রুটি ঘটেছে...",
|
||||
"email-confirm-error-message": "আপনার ইমেল ঠিকানার বৈধতা যাচাইয়ে একটি সমস্যা হয়েছে। সম্ভবত কোডটি ভুল ছিল অথবা কোডের মেয়াদ শেষ হয়ে গিয়েছে।",
|
||||
"email-confirm-sent": "নিশ্চিতকরণ ইমেইল পাঠানো হয়েছে।"
|
||||
}
|
||||
@@ -1,48 +1,18 @@
|
||||
{
|
||||
"home": "নীড়পাতা",
|
||||
"unread": "অপঠিত টপিক",
|
||||
"popular-day": "Popular topics today",
|
||||
"popular-week": "Popular topics this week",
|
||||
"popular-month": "Popular topics this month",
|
||||
"popular-alltime": "All time popular topics",
|
||||
"popular": "জনপ্রিয় টপিক",
|
||||
"recent": "সাম্প্রতিক টপিক",
|
||||
"flagged-posts": "Flagged Posts",
|
||||
"users/online": "Online Users",
|
||||
"users/latest": "Latest Users",
|
||||
"users/sort-posts": "Users with the most posts",
|
||||
"users/sort-reputation": "Users with the most reputation",
|
||||
"users/banned": "Banned Users",
|
||||
"users/most-flags": "Most flagged users",
|
||||
"users/search": "User Search",
|
||||
"users": "নিবন্ধিত সদস্যগণ",
|
||||
"notifications": "বিজ্ঞপ্তি",
|
||||
"tags": "ট্যাগসমূহ",
|
||||
"tag": "Topics tagged under \"%1\"",
|
||||
"register": "Register an account",
|
||||
"login": "Login to your account",
|
||||
"reset": "Reset your account password",
|
||||
"categories": "বিভাগ",
|
||||
"groups": "Groups",
|
||||
"group": "%1 group",
|
||||
"chats": "Chats",
|
||||
"chat": "Chatting with %1",
|
||||
"account/edit": "Editing \"%1\"",
|
||||
"account/edit/password": "Editing password of \"%1\"",
|
||||
"account/edit/username": "Editing username of \"%1\"",
|
||||
"account/edit/email": "Editing email of \"%1\"",
|
||||
"account/info": "Account Info",
|
||||
"account/following": "People %1 follows",
|
||||
"account/followers": "People who follow %1",
|
||||
"account/posts": "Posts made by %1",
|
||||
"account/topics": "Topics created by %1",
|
||||
"account/groups": "%1's Groups",
|
||||
"account/favourites": "%1's Bookmarked Posts",
|
||||
"account/settings": "User Settings",
|
||||
"account/watched": "Topics watched by %1",
|
||||
"account/upvoted": "Posts upvoted by %1",
|
||||
"account/downvoted": "Posts downvoted by %1",
|
||||
"account/best": "Best posts made by %1",
|
||||
"confirm": "Email Confirmed",
|
||||
"tags": "Topics tagged under \"%1\"",
|
||||
"user.edit": "সম্পাদনা \"%1\"",
|
||||
"user.following": "%1 যাদের অনুসরণ করেন",
|
||||
"user.followers": "যারা %1 কে অনুসরণ করেন",
|
||||
"user.posts": "%1 এর পোস্ট সমুহ",
|
||||
"user.topics": "%1 এর টপিক সমুহ",
|
||||
"user.favourites": "%1'র প্রিয় পোস্টগুলো",
|
||||
"user.settings": "সদস্য সেটিংস",
|
||||
"maintenance.text": "%1 is currently undergoing maintenance. Please come back another time.",
|
||||
"maintenance.messageIntro": "Additionally, the administrator has left this message:",
|
||||
"throttled.text": "%1 is currently unavailable due to excessive load. Please come back another time."
|
||||
"maintenance.messageIntro": "Additionally, the administrator has left this message:"
|
||||
}
|
||||
@@ -5,15 +5,5 @@
|
||||
"month": "মাস",
|
||||
"year": "বছর",
|
||||
"alltime": "সবসময় ",
|
||||
"no_recent_topics": "কোন সাম্প্রতিক টপিক নেই। ",
|
||||
"no_popular_topics": "There are no popular topics.",
|
||||
"there-is-a-new-topic": "There is a new topic.",
|
||||
"there-is-a-new-topic-and-a-new-post": "There is a new topic and a new post.",
|
||||
"there-is-a-new-topic-and-new-posts": "There is a new topic and %1 new posts.",
|
||||
"there-are-new-topics": "There are %1 new topics.",
|
||||
"there-are-new-topics-and-a-new-post": "There are %1 new topics and a new post.",
|
||||
"there-are-new-topics-and-new-posts": "There are %1 new topics and %2 new posts.",
|
||||
"there-is-a-new-post": "There is a new post.",
|
||||
"there-are-new-posts": "There are %1 new posts.",
|
||||
"click-here-to-reload": "Click here to reload."
|
||||
"no_recent_topics": "কোন সাম্প্রতিক টপিক নেই। "
|
||||
}
|
||||
@@ -1,6 +1,5 @@
|
||||
{
|
||||
"register": "নিবন্ধন",
|
||||
"cancel_registration": "Cancel Registration",
|
||||
"help.email": "ডিফল্টভাবে, আপনার ইমেইল সর্বসাধারণ থেকে লুকানো থাকবে।",
|
||||
"help.username_restrictions": "%1 এবং %2 অক্ষরের মাঝে একটি অনন্য সদস্য নাম। বাকিরা আপনাকে @<span id='yourUsername'>নাম</span> দিয়ে উল্লেখ করতে পারবেন।",
|
||||
"help.minimum_password_length": "আপনার পাসওয়ার্ড এর দৈর্ঘ্য অন্তত %1 অক্ষরের হতে হবে।",
|
||||
@@ -15,9 +14,5 @@
|
||||
"register_now_button": "নিবন্ধন করুন",
|
||||
"alternative_registration": "বিকল্প নিবন্ধন",
|
||||
"terms_of_use": "নিয়মাবলী",
|
||||
"agree_to_terms_of_use": "আমি নিয়মাবলী মেনে চলতে সম্মতি জানালাম",
|
||||
"terms_of_use_error": "You must agree to the Terms of Use",
|
||||
"registration-added-to-queue": "আপনার নিবন্ধনটি এ্যাপ্লুভাল তালিকায় যুক্ত হয়েছে। একজন এডমিনিস্ট্রেটর কর্তৃক নিবন্ধন গৃহীত হলে আপনি একটি মেইল পাবেন। ",
|
||||
"interstitial.intro": "We require some additional information before we can create your account.",
|
||||
"interstitial.errors-found": "We could not complete your registration:"
|
||||
"agree_to_terms_of_use": "আমি নিয়মাবলী মেনে চলতে সম্মতি জানালাম"
|
||||
}
|
||||
@@ -7,11 +7,8 @@
|
||||
"wrong_reset_code.message": "প্রাপ্ত রিসেট কোডটি ভুল ছিল। আবার চেষ্টা করুন, অথবা <a href=\"/reset\">একটি নতুন রিসেট কোড</a> অনুরোধ করুন।",
|
||||
"new_password": "নতুন পাসওয়ার্ড",
|
||||
"repeat_password": "পাসওয়ার্ড নিশ্চিত করুন",
|
||||
"enter_email": "অনুগ্রহপূর্বক আপনার ইমেইল এড্রেস প্রদান করুন, আমরা আপনাকে আপনার পাসওয়ার্ড রিসেট সম্পর্কিত তথ্যাবলী ইমেইলে পাঠিয়ে দিবো। ",
|
||||
"enter_email_address": "আপনার ইমেইল এড্রেস",
|
||||
"password_reset_sent": "পাসওয়ার্ড রিসেট মেইল পাঠানো হয়েছে",
|
||||
"invalid_email": "ভুল ইমেইল / ইমেইল ডেটাবেইজে নেই",
|
||||
"password_too_short": "The password entered is too short, please pick a different password.",
|
||||
"passwords_do_not_match": "The two passwords you've entered do not match.",
|
||||
"password_expired": "Your password has expired, please choose a new password"
|
||||
"enter_email": "Please enter your <strong>email address</strong> and we will send you an email with instructions on how to reset your account.",
|
||||
"enter_email_address": "Enter Email Address",
|
||||
"password_reset_sent": "Password Reset Sent",
|
||||
"invalid_email": "Invalid Email / Email does not exist!"
|
||||
}
|
||||
@@ -1,40 +1,4 @@
|
||||
{
|
||||
"results_matching": "\"%2\" এর সাথে মিলিয়ে %1 ফলাফল পাওয়া গেছে, ( %3 seconds সময় লেগেছে )",
|
||||
"no-matches": "কোন মিল খুঁজে পাওয়া যায় নি",
|
||||
"advanced-search": "এডভান্সড সার্চ",
|
||||
"in": "এর মধ্যে",
|
||||
"titles": "টাইটেলস",
|
||||
"titles-posts": "টাইটেল এবং পোস্ট সমূহ",
|
||||
"posted-by": "পোষ্ট করেছেন",
|
||||
"in-categories": "বিভাগের ভিতরে",
|
||||
"search-child-categories": "উপবিভাগের ভিতরে",
|
||||
"reply-count": "রিপ্লাই কাউন্ট",
|
||||
"at-least": "কমপক্ষে",
|
||||
"at-most": "সর্বোচ্চ",
|
||||
"post-time": "পোস্টের সময়",
|
||||
"newer-than": "Newer than",
|
||||
"older-than": "Older than",
|
||||
"any-date": "যেকোন তারিখ",
|
||||
"yesterday": "গতকাল",
|
||||
"one-week": "এক সপ্তাহ",
|
||||
"two-weeks": "দুই সপ্তাহ",
|
||||
"one-month": "এক মাস",
|
||||
"three-months": "তিন মাস",
|
||||
"six-months": "ছয় মাস",
|
||||
"one-year": "এক বছর",
|
||||
"sort-by": "সাজানোর ভিত্তি",
|
||||
"last-reply-time": "সর্বশেষ রিপ্লাইয়ের সময়",
|
||||
"topic-title": "টপিকের টাইটেল",
|
||||
"number-of-replies": "রিপ্লাইয়ের সংখ্যা",
|
||||
"number-of-views": "সর্বমোট ভিউ",
|
||||
"topic-start-date": "টপিক শুরুর তারিখ",
|
||||
"username": "ইউজারনেম",
|
||||
"category": "বিভাগ",
|
||||
"descending": "বড় থেকে ছোট অর্ডারে",
|
||||
"ascending": "ছোট থেকে বড় অর্ডারে",
|
||||
"save-preferences": "প্রেফারেন্স সেভ",
|
||||
"clear-preferences": "Clear preferences",
|
||||
"search-preferences-saved": "Search preferences saved",
|
||||
"search-preferences-cleared": "Search preferences cleared",
|
||||
"show-results-as": "ফলাফল দেখানো হোক : "
|
||||
"no-matches": "কোন পোষ্ট খুঁজে পাওয়া যায় নি"
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"success": "সফল হয়েছে",
|
||||
"topic-post": "আপনি সফলভাবে পোষ্ট করেছেন। ",
|
||||
"authentication-successful": "অথেন্টিকেশন সফল হয়েছে",
|
||||
"authentication-successful": "Authentication Successful",
|
||||
"settings-saved": "সেটিংস সেভ করা হয়েছে। "
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"no_tag_topics": "এই ট্যাগ সম্বলিত কোন টপিক নেই",
|
||||
"tags": "ট্যাগসমূহ",
|
||||
"enter_tags_here": "Enter tags here, between %1 and %2 characters each.",
|
||||
"enter_tags_here_short": "ট্যাগ বসান",
|
||||
"no_tags": "এখন পর্যন্ত কোন ট্যাগ নেই"
|
||||
"no_tag_topics": "There are no topics with this tag.",
|
||||
"tags": "Tags",
|
||||
"enter_tags_here": "Enter tags here. Press enter after each tag.",
|
||||
"enter_tags_here_short": "Enter tags...",
|
||||
"no_tags": "There are no tags yet."
|
||||
}
|
||||
@@ -5,7 +5,6 @@
|
||||
"no_topics_found": "কোন টপিক পাওয়া যায়নি!",
|
||||
"no_posts_found": "কোন পোস্ট পাওয়া যায়নি",
|
||||
"post_is_deleted": "এই পোস্টটি মুছে ফেলা হয়েছে!",
|
||||
"topic_is_deleted": "This topic is deleted!",
|
||||
"profile": "প্রোফাইল ",
|
||||
"posted_by": "পোস্ট করেছেন %1",
|
||||
"posted_by_guest": "অতিথি পোস্ট ",
|
||||
@@ -13,11 +12,9 @@
|
||||
"notify_me": "এই টপিকে নতুন উত্তর আসলে জানুন",
|
||||
"quote": "উদ্ধৃতি",
|
||||
"reply": "উত্তর",
|
||||
"reply-as-topic": "Reply as topic",
|
||||
"guest-login-reply": "Log in to reply",
|
||||
"edit": "সম্পাদণা",
|
||||
"delete": "মুছে ফেলুন",
|
||||
"purge": "পার্জ",
|
||||
"purge": "Purge",
|
||||
"restore": "পুনরূদ্ধার",
|
||||
"move": "সরানো",
|
||||
"fork": "শাখা",
|
||||
@@ -26,96 +23,74 @@
|
||||
"tools": "টুলস",
|
||||
"flag": "ফ্ল্যাগ",
|
||||
"locked": "বন্ধ",
|
||||
"pinned": "Pinned",
|
||||
"moved": "Moved",
|
||||
"bookmark_instructions": "Click here to return to the last read post in this thread.",
|
||||
"bookmark_instructions": "আপনার সর্বশেষ অবস্থানে ফিরে যাবার জন্য এখানে ক্লিক করুন অথবা অগ্রাহ্য করতে চাইলে বন্ধ করুন",
|
||||
"flag_title": "মডারেশনের জন্য এই পোস্টটি ফ্ল্যাগ করুন",
|
||||
"flag_confirm": "আপনি কি নিশ্চিত যে এই পোস্টটিকে আপনি ফ্ল্যাগ করতে চান? ",
|
||||
"flag_success": "এই পোস্টটি মডারেশনের জন্য ফ্ল্যাগ করা হয়েছে।",
|
||||
"deleted_message": "এই টপিকটি মুছে ফেলা হয়েছে। শুধুমাত্র টপিক ব্যবস্থাপনার ক্ষমতাপ্রাপ্ত সদস্যগণ এটি দেখতে পারবেন।",
|
||||
"following_topic.message": "এখন থেকে এই টপিকে অন্যকেউ পোস্ট করলে আপনি নোটিফিকেশন পাবেন।",
|
||||
"not_following_topic.message": "You will see this topic in the unread topics list, but you will not receive notifications when somebody posts to this topic.",
|
||||
"ignoring_topic.message": "You will no longer see this topic in the unread topics list. You will be notified when you are mentioned or your post is up voted.",
|
||||
"not_following_topic.message": "এই টপিক থেকে আপনি আর নোটিফিকেশন পাবেন না।",
|
||||
"login_to_subscribe": "এই টপিকে সাবস্ক্রাইব করতে চাইলে অনুগ্রহ করে নিবন্ধণ করুন অথবা প্রবেশ করুন।",
|
||||
"markAsUnreadForAll.success": "টপিকটি সবার জন্য অপঠিত হিসাবে মার্ক করুন।",
|
||||
"mark_unread": "Mark unread",
|
||||
"mark_unread.success": "Topic marked as unread.",
|
||||
"watch": "দেখা",
|
||||
"unwatch": "অদেখা",
|
||||
"watch.title": "এই টপিকে নতুন উত্তর এলে বিজ্ঞাপণের মাধ্যমে জানুন।",
|
||||
"unwatch.title": "এই টপিক দেখা বন্ধ করুন",
|
||||
"share_this_post": "এই পোষ্টটি শেয়ার করুন",
|
||||
"watching": "Watching",
|
||||
"not-watching": "Not Watching",
|
||||
"ignoring": "Ignoring",
|
||||
"watching.description": "Notify me of new replies.<br/>Show topic in unread.",
|
||||
"not-watching.description": "Do not notify me of new replies.<br/>Show topic in unread if category is not ignored.",
|
||||
"ignoring.description": "Do not notify me of new replies.<br/>Do not show topic in unread.",
|
||||
"thread_tools.title": "টপিক সম্পর্কিত টুলস",
|
||||
"thread_tools.markAsUnreadForAll": "\"অপঠিত\" হিসেবে চিহ্নিত করুন",
|
||||
"thread_tools.pin": "টপিক পিন করুন",
|
||||
"thread_tools.unpin": "টপিক আনপিন করুন",
|
||||
"thread_tools.lock": "টপিক বন্ধ করুন",
|
||||
"thread_tools.unlock": "টপিক খুলে দিন",
|
||||
"thread_tools.move": "টপিক সরান",
|
||||
"thread_tools.move_all": "সমস্ত টপিক সরান",
|
||||
"thread_tools.fork": "টপিক ফর্ক করুন",
|
||||
"thread_tools.delete": "টপিক মুছে ফেলুন",
|
||||
"thread_tools.delete-posts": "Delete Posts",
|
||||
"thread_tools.delete_confirm": "আপনি নিশ্চিত যে আপনি এই টপিকটি মুছে ফেলতে চান?",
|
||||
"thread_tools.restore": "টপিক পুনরূদ্ধার করুন",
|
||||
"thread_tools.restore_confirm": "আপনি নিশ্চিত যে আপনি টপিকটি পুনরূদ্ধার করতে চান?",
|
||||
"thread_tools.purge": "টপিক পার্জ করুন",
|
||||
"thread_tools.purge_confirm": "আপনি নিশ্চিত যে আপনি টপিকটি পার্জ করতে চাচ্ছেন ? ",
|
||||
"topic_move_success": "টপিকটি %1 এ সরিয়ে নেয়া হয়েছে",
|
||||
"post_delete_confirm": "আপনি নিশ্চিত যে আপনি এই পোষ্টটি মুছে ফেলতে চান ?",
|
||||
"post_restore_confirm": "আপনি নিশ্চিত যে আপনি এই পোষ্টটি পুনরূূদ্ধার করতে চান ? ",
|
||||
"post_purge_confirm": "আপনি নিশ্চিত যে আপনি এই পোষ্টটি পার্জ করতে চান ? ",
|
||||
"load_categories": "ক্যাটাগরী লোড করা হচ্ছে",
|
||||
"disabled_categories_note": "নিস্ক্রীয় ক্যাটাগরীসমূহ ধূসর কালিতে লেখা রয়েছে। ",
|
||||
"confirm_move": "সরান",
|
||||
"confirm_fork": "ফর্ক",
|
||||
"favourite": "Bookmark",
|
||||
"favourites": "Bookmarks",
|
||||
"favourites.has_no_favourites": "You haven't bookmarked any posts yet.",
|
||||
"loading_more_posts": "আরো পোষ্ট লোড করা হচ্ছে",
|
||||
"move_topic": "টপিক সরান",
|
||||
"move_topics": "টপিক সমূহ সরান",
|
||||
"move_post": "পোষ্ট সরান",
|
||||
"post_moved": "পোষ্ট সরানো হয়েছে",
|
||||
"fork_topic": "টপিক ফর্ক করুন",
|
||||
"topic_will_be_moved_to": "এই টপিকটি ক্যাটাগরীতে সরানো হবে",
|
||||
"fork_topic_instruction": "যে পোষ্টটি ফর্ক করতে চান সেটি ক্লিক করুন",
|
||||
"fork_no_pids": "কোন পোষ্ট সিলেক্ট করা হয় নি",
|
||||
"fork_success": "টপিক ফর্ক করা হয়েছে। ফর্ক করা টপিকে যেতে এখানে ক্লিক করুন",
|
||||
"delete_posts_instruction": "Click the posts you want to delete/purge",
|
||||
"composer.title_placeholder": "আপনার টপিকের শিরোনাম দিন",
|
||||
"composer.handle_placeholder": "Name",
|
||||
"composer.discard": "বাতিল",
|
||||
"composer.submit": "সাবমিট",
|
||||
"composer.replying_to": "%1 এর উত্তরে:",
|
||||
"composer.new_topic": "নতুন টপিক",
|
||||
"composer.uploading": "আপলোডিং",
|
||||
"composer.thumb_url_label": "টপিকে থাম্বনেইল URL পেষ্ট করুন",
|
||||
"composer.thumb_title": "এই টপিকে থাম্বনেইল যোগ করুন",
|
||||
"unwatch.title": "Stop watching this topic",
|
||||
"share_this_post": "Share this Post",
|
||||
"thread_tools.title": "Topic Tools",
|
||||
"thread_tools.markAsUnreadForAll": "Mark Unread",
|
||||
"thread_tools.pin": "Pin Topic",
|
||||
"thread_tools.unpin": "Unpin Topic",
|
||||
"thread_tools.lock": "Lock Topic",
|
||||
"thread_tools.unlock": "Unlock Topic",
|
||||
"thread_tools.move": "Move Topic",
|
||||
"thread_tools.move_all": "Move All",
|
||||
"thread_tools.fork": "Fork Topic",
|
||||
"thread_tools.delete": "Delete Topic",
|
||||
"thread_tools.delete_confirm": "Are you sure you want to delete this topic?",
|
||||
"thread_tools.restore": "Restore Topic",
|
||||
"thread_tools.restore_confirm": "Are you sure you want to restore this topic?",
|
||||
"thread_tools.purge": "Purge Topic",
|
||||
"thread_tools.purge_confirm": "Are you sure you want to purge this topic?",
|
||||
"topic_move_success": "This topic has been successfully moved to %1",
|
||||
"post_delete_confirm": "Are you sure you want to delete this post?",
|
||||
"post_restore_confirm": "Are you sure you want to restore this post?",
|
||||
"post_purge_confirm": "Are you sure you want to purge this post?",
|
||||
"load_categories": "Loading Categories",
|
||||
"disabled_categories_note": "Disabled Categories are greyed out",
|
||||
"confirm_move": "Move",
|
||||
"confirm_fork": "Fork",
|
||||
"favourite": "Favourite",
|
||||
"favourites": "Favourites",
|
||||
"favourites.has_no_favourites": "You don't have any favourites, favourite some posts to see them here!",
|
||||
"loading_more_posts": "Loading More Posts",
|
||||
"move_topic": "Move Topic",
|
||||
"move_topics": "Move Topics",
|
||||
"move_post": "Move Post",
|
||||
"post_moved": "Post moved!",
|
||||
"fork_topic": "Fork Topic",
|
||||
"topic_will_be_moved_to": "This topic will be moved to the category",
|
||||
"fork_topic_instruction": "Click the posts you want to fork",
|
||||
"fork_no_pids": "No posts selected!",
|
||||
"fork_success": "Successfully forked topic! Click here to go to the forked topic.",
|
||||
"composer.title_placeholder": "Enter your topic title here...",
|
||||
"composer.discard": "Discard",
|
||||
"composer.submit": "Submit",
|
||||
"composer.replying_to": "Replying to %1",
|
||||
"composer.new_topic": "New Topic",
|
||||
"composer.uploading": "uploading...",
|
||||
"composer.thumb_url_label": "Paste a topic thumbnail URL",
|
||||
"composer.thumb_title": "Add a thumbnail to this topic",
|
||||
"composer.thumb_url_placeholder": "http://example.com/thumb.png",
|
||||
"composer.thumb_file_label": "অথবা একটি ফাইল আপলোড করুন",
|
||||
"composer.thumb_remove": "ফিল্ড ক্লিয়ার করুন",
|
||||
"composer.drag_and_drop_images": "ছবি এখানে ড্র্যাগ করে এনে ছেড়ে দিন",
|
||||
"composer.thumb_file_label": "Or upload a file",
|
||||
"composer.thumb_remove": "Clear fields",
|
||||
"composer.drag_and_drop_images": "Drag and Drop Images Here",
|
||||
"more_users_and_guests": "%1 more user(s) and %2 guest(s)",
|
||||
"more_users": "%1 more user(s)",
|
||||
"more_guests": "%1 more guest(s)",
|
||||
"users_and_others": "%1 and %2 others",
|
||||
"sort_by": "সাজানোর ভিত্তি:",
|
||||
"oldest_to_newest": "পুরাতন থেকে নতুন",
|
||||
"newest_to_oldest": "নতুন থেকে পুরাতন",
|
||||
"most_votes": "সর্বোচ্চ ভোট",
|
||||
"most_posts": "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": "Create a new topic",
|
||||
"stale.reply_anyway": "Reply to this topic anyway",
|
||||
"link_back": "Re: [%1](%2)",
|
||||
"spam": "Spam",
|
||||
"offensive": "Offensive",
|
||||
"custom-flag-reason": "Enter a flagging reason"
|
||||
"sort_by": "Sort by",
|
||||
"oldest_to_newest": "Oldest to Newest",
|
||||
"newest_to_oldest": "Newest to Oldest",
|
||||
"most_votes": "Most votes"
|
||||
}
|
||||
@@ -1,13 +1,9 @@
|
||||
{
|
||||
"title": "অপঠিত",
|
||||
"title": "Unread",
|
||||
"no_unread_topics": "কোন অপঠিত টপিক নেই",
|
||||
"load_more": "আরো লোড করুন",
|
||||
"mark_as_read": "পঠিত হিসেবে চিহ্নিত করুন",
|
||||
"selected": "নির্বাচিত",
|
||||
"all": "সবগুলো",
|
||||
"all_categories": "All categories",
|
||||
"topics_marked_as_read.success": "পঠিত হিসেবে চিহ্নিত টপিকসমূহ",
|
||||
"all-topics": "All Topics",
|
||||
"new-topics": "New Topics",
|
||||
"watched-topics": "Watched Topics"
|
||||
"mark_as_read": "Mark as Read",
|
||||
"selected": "Selected",
|
||||
"all": "All",
|
||||
"topics_marked_as_read.success": "Topics marked as read!"
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
{
|
||||
"uploading-file": "Uploading the file...",
|
||||
"select-file-to-upload": "Select a file to upload!",
|
||||
"upload-success": "File uploaded successfully!",
|
||||
"maximum-file-size": "Maximum %1 kb"
|
||||
}
|
||||
@@ -2,18 +2,10 @@
|
||||
"banned": "নিষিদ্ধ",
|
||||
"offline": "অফলাইন",
|
||||
"username": "সদস্যের নাম",
|
||||
"joindate": "নিবন্ধন তারিখ",
|
||||
"postcount": "সর্বমোট পোষ্ট",
|
||||
"email": "ইমেইল",
|
||||
"confirm_email": "ইমেইল নিশ্চিত করুন",
|
||||
"account_info": "Account Info",
|
||||
"ban_account": "একাউন্ট নিষিদ্ধ করুন",
|
||||
"ban_account_confirm": "আপনি কি নিশ্চিত যে এই সদস্যকে নিষিদ্ধ করতে চান ?",
|
||||
"unban_account": "নিষেদ্ধাজ্ঞা তুলে নিন",
|
||||
"delete_account": "একাউন্ট মুছে ফেলুন",
|
||||
"delete_account_confirm": "আপনি কি নিশ্চিত যে আপনি আপনার একাউন্ট মুছে ফেলতে চান ? <br /><strong>এই কাজটির ফলে আপনার কোন তথ্য পুনরূদ্ধার করা সম্ভব নয় </strong><br /><br /> নিশ্চিত করতে আপনার ইউজারনেম প্রবেশ করান। ",
|
||||
"delete_this_account_confirm": "Are you sure you want to delete this account? <br /><strong>This action is irreversible and you will not be able to recover any data</strong><br /><br />",
|
||||
"account-deleted": "একাউন্ট মুছে ফেলা হয়েছে",
|
||||
"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 username to confirm that you wish to destroy this account.",
|
||||
"fullname": "পুর্ণ নাম",
|
||||
"website": "ওয়েবসাইট",
|
||||
"location": "স্থান",
|
||||
@@ -23,25 +15,18 @@
|
||||
"profile": "প্রোফাইল",
|
||||
"profile_views": "প্রোফাইল দেখেছেন",
|
||||
"reputation": "সন্মাননা",
|
||||
"favourites": "Bookmarks",
|
||||
"watched": "দেখা হয়েছে",
|
||||
"favourites": "পছন্দের তালিকা",
|
||||
"followers": "যাদের অনুসরণ করছেন",
|
||||
"following": "যারা আপনাকে অনুসরণ করছে",
|
||||
"aboutme": "আমার সম্পর্কে: ",
|
||||
"signature": "স্বাক্ষর",
|
||||
"gravatar": "গ্রাভাতার",
|
||||
"birthday": "জন্মদিন",
|
||||
"chat": "বার্তালাপ",
|
||||
"chat_with": "চ্যাট উইথ %1",
|
||||
"follow": "অনুসরন করুন",
|
||||
"unfollow": "অনুসরন করা থেকে বিরত থাকুন",
|
||||
"more": "আরো...",
|
||||
"profile_update_success": "প্রোফাইল আপডেট সফল হয়েছে",
|
||||
"change_picture": "ছবি পরিবর্তন",
|
||||
"change_username": "ইউজারনেম পরিবর্তন করুন",
|
||||
"change_email": "ইমেইল পরিবর্তন করুন",
|
||||
"edit": "সম্পাদনা",
|
||||
"edit-profile": "Edit Profile",
|
||||
"default_picture": "ডিফল্ট আইকন",
|
||||
"uploaded_picture": "ছবি আপলোড করুন",
|
||||
"upload_new_picture": "নতুন ছবি আপলোড করুন",
|
||||
"upload_new_picture_from_url": "URL থেকে নতুন ছবি আপলোড করুন",
|
||||
@@ -55,64 +40,36 @@
|
||||
"change_password_success": "আপনার পাসওয়ার্ড আপডেট করা হয়েছে",
|
||||
"confirm_password": "পাসওয়ার্ড নিশ্চিত করুন",
|
||||
"password": "পাসওয়ার্ড",
|
||||
"username_taken_workaround": "আপনি যে ইউজারনেম চাচ্ছিলেন সেটি ইতিমধ্যে নেয়া হয়ে গেছে, কাজেই আমরা এটি কিঞ্চিং পরিবর্তন করেছি। আপনি এখন <strong>%1</strong> হিসেবে পরিচিত",
|
||||
"password_same_as_username": "Your password is the same as your username, please select another password.",
|
||||
"password_same_as_email": "Your password is the same as your email, please select another password.",
|
||||
"username_taken_workaround": "The username you requested was already taken, so we have altered it slightly. You are now known as <strong>%1</strong>",
|
||||
"upload_picture": "ছবি আপলোড করুন",
|
||||
"upload_a_picture": "ছবি (একটি) আপলোড করুন",
|
||||
"remove_uploaded_picture": "আপলোড করা ছবিটি সরিয়ে নাও",
|
||||
"upload_cover_picture": "Upload cover picture",
|
||||
"image_spec": "আপনি কেবলমাত্র PNG, JPG অথবা GIF ফাইল আপলোড করতে পারবেন",
|
||||
"max": "সর্বোচ্চ",
|
||||
"settings": "সেটিংস",
|
||||
"show_email": "আমার ইমেইল দেখাও",
|
||||
"show_fullname": "আমার সম্পূর্ণ নাম দেখাও",
|
||||
"restrict_chats": "আমি যাদের ফলো করি কেবলমাত্র তাদের থেকে বার্তা গ্রহন করা হোক",
|
||||
"digest_label": "ডাইজেষ্টে সাবস্ক্রাইব করুন",
|
||||
"digest_description": "শিডিউল অনূযায়ী এই ফোরামের ইমেইল আপডেটের জন্য সাবস্ক্রাইব করুন (নতুন নোটিফিকেশন এবং টপিকসমূহ )",
|
||||
"digest_label": "Subscribe to Digest",
|
||||
"digest_description": "Subscribe to email updates for this forum (new notifications and topics) according to a set schedule",
|
||||
"digest_off": "বন্ধ",
|
||||
"digest_daily": "দৈনিক",
|
||||
"digest_weekly": "সাপ্তাহিক",
|
||||
"digest_monthly": "মাসিক",
|
||||
"send_chat_notifications": "যদি আমি অনলাইনে না থাকি, সেক্ষেত্রে নতুন চ্যাট মেসেজ আসলে আমাকে ইমেইল করুন",
|
||||
"send_post_notifications": "আমার সাবস্ক্রাইব করা টপিকগুলোতে রিপ্লাই করা হলে আমাকে মেইল করা হোক",
|
||||
"settings-require-reload": "কিছু কিছু পরিবর্তনের জন্য রিলোড করা আবশ্যক। পেজটি রিলোড করতে এখানে ক্লিক করুন",
|
||||
"has_no_follower": "এই সদস্যের কোন ফলোয়ার নেই :(",
|
||||
"follows_no_one": "এই সদস্য কাউকে ফলো করছেন না :(",
|
||||
"has_no_posts": "এই সদস্য এখন পর্যন্ত কোন পোস্ট করেন নি",
|
||||
"has_no_topics": "এই সদস্য এখনো কোন টপিক করেন নি",
|
||||
"has_no_watched_topics": "এই সদস্য এখনো কোন টপিক দেখেন নি",
|
||||
"has_no_upvoted_posts": "This user hasn't upvoted any posts yet.",
|
||||
"has_no_downvoted_posts": "This user hasn't downvoted any posts yet.",
|
||||
"has_no_voted_posts": "This user has no voted posts",
|
||||
"email_hidden": "ইমেইল গোপন রাখা হয়েছে",
|
||||
"hidden": "গোপন করা হয়েছে",
|
||||
"paginate_description": "ইনফাইনাইট স্ক্রলের বদলে টপিক ও পোস্টের জন্য পেজিনেশন ব্যাবহার করা হোক",
|
||||
"topics_per_page": "প্রতি পেজে কতগুলো টপিক থাকবে",
|
||||
"posts_per_page": "প্রতি পেইজে কতগুলো পোষ্ট থাকবে",
|
||||
"notification_sounds": "নোটিফিকেশনের জন্য নোটিফিকেশন সাউন্ড এনাবল করুন",
|
||||
"browsing": "Browsing সেটিংস",
|
||||
"open_links_in_new_tab": "আউটগোয়িং লিংকগুলো নতুন ট্যাবে খুলুন",
|
||||
"enable_topic_searching": "In-Topic সার্চ সক্রীয় করো",
|
||||
"topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen",
|
||||
"delay_image_loading": "Delay Image Loading",
|
||||
"image_load_delay_help": "If enabled, images in topics will not load until they are scrolled into view",
|
||||
"scroll_to_my_post": "After posting a reply, show the new post",
|
||||
"follow_topics_you_reply_to": "Watch topics that you reply to",
|
||||
"follow_topics_you_create": "Watch topics you create",
|
||||
"grouptitle": "Group Title",
|
||||
"no-group-title": "No group title",
|
||||
"select-skin": "Select a Skin",
|
||||
"select-homepage": "Select a Homepage",
|
||||
"homepage": "Homepage",
|
||||
"homepage_description": "Select a page to use as the forum homepage or 'None' to use the default homepage.",
|
||||
"custom_route": "Custom Homepage Route",
|
||||
"custom_route_help": "Enter a route name here, without any preceding slash (e.g. \"recent\", or \"popular\")",
|
||||
"sso.title": "Single Sign-on Services",
|
||||
"sso.associated": "Associated with",
|
||||
"sso.not-associated": "Click here to associate with",
|
||||
"info.latest-flags": "Latest Flags",
|
||||
"info.no-flags": "No Flagged Posts Found",
|
||||
"info.ban-history": "Recent Ban History",
|
||||
"info.no-ban-history": "This user has never been banned",
|
||||
"info.banned-until": "Banned until %1",
|
||||
"info.banned-permanently": "Banned permanently"
|
||||
"send_chat_notifications": "Send an email if a new chat message arrives and I am not online",
|
||||
"has_no_follower": "This user doesn't have any followers :(",
|
||||
"follows_no_one": "This user isn't following anyone :(",
|
||||
"has_no_posts": "This user didn't post anything yet.",
|
||||
"has_no_topics": "This user didn't post any topics yet.",
|
||||
"email_hidden": "Email Hidden",
|
||||
"hidden": "hidden",
|
||||
"paginate_description": "Paginate topics and posts instead of using infinite scroll.",
|
||||
"topics_per_page": "Topics per Page",
|
||||
"posts_per_page": "Posts per Page",
|
||||
"notification_sounds": "Play a sound when you receive a notification.",
|
||||
"browsing": "Browsing Settings",
|
||||
"open_links_in_new_tab": "Open outgoing links in new tab?",
|
||||
"enable_topic_searching": "Enable In-Topic Searching",
|
||||
"topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen.",
|
||||
"follow_topics_you_reply_to": "Follow topics that you reply to.",
|
||||
"follow_topics_you_create": "Follow topics you create."
|
||||
}
|
||||
@@ -2,20 +2,8 @@
|
||||
"latest_users": "সর্বশেষ নিবন্ধিত সদস্যরা:",
|
||||
"top_posters": "সর্বোচ্চ পোষ্টকারী",
|
||||
"most_reputation": "সর্বোচ্চ সম্মাননাধারী",
|
||||
"most_flags": "Most Flags",
|
||||
"search": "খুঁজুন",
|
||||
"enter_username": "ইউজারনেম এর ভিত্তিতে সার্চ করুন",
|
||||
"load_more": "আরো লোড করুন",
|
||||
"users-found-search-took": "%1 জন সদস্য(দের) খুঁজে পাওয়া গেছে। খুঁজতে সময় লেগেছে %2 সেকেন্ড ",
|
||||
"filter-by": "ফিল্টার করার ধরন",
|
||||
"online-only": "শুধুমাত্র অনলাইন",
|
||||
"invite": "ইনভাইট",
|
||||
"invitation-email-sent": "%1 কে একটি ইনভাইটেশন ইমেইল পাঠানো হয়েছে",
|
||||
"user_list": "সদস্য তালিকা",
|
||||
"recent_topics": "সাম্প্রতিক টপিক",
|
||||
"popular_topics": "জনপ্রিয় টপিক",
|
||||
"unread_topics": "অপঠিত টপিক",
|
||||
"categories": "বিভাগ",
|
||||
"tags": "ট্যাগসমূহ",
|
||||
"no-users-found": "No users found!"
|
||||
"users-found-search-took": "%1 সদস্য(দের) খুঁজে পাওয়া গিয়েছে! সময় লেগেছে %2 ms."
|
||||
}
|
||||
@@ -1,20 +1,8 @@
|
||||
{
|
||||
"category": "Kategorie",
|
||||
"subcategories": "Podkategorie",
|
||||
"new_topic_button": "Nové téma",
|
||||
"guest-login-post": "Přihlásit se pro přispívání",
|
||||
"no_topics": "<strong>V této kategorii zatím nejsou žádné příspěvky.</strong><br />Můžeš být první!",
|
||||
"browsing": "prohlíží",
|
||||
"no_replies": "Nikdo ještě neodpověděl",
|
||||
"no_new_posts": "Žádné nové příspěvky",
|
||||
"share_this_category": "Share this category",
|
||||
"watch": "Sledovat",
|
||||
"ignore": "Ignorovat",
|
||||
"watching": "Watching",
|
||||
"ignoring": "Ignoring",
|
||||
"watching.description": "Show topics in unread",
|
||||
"ignoring.description": "Do not show topics in unread",
|
||||
"watch.message": "Nyní sledujete aktualizace ve skupině",
|
||||
"ignore.message": "Nyní ignorujete aktualizace ve skupině ",
|
||||
"watched-categories": "Sledované kategorie"
|
||||
"ignore": "Ignorovat"
|
||||
}
|
||||
@@ -1,35 +1,22 @@
|
||||
{
|
||||
"password-reset-requested": "Požadována obnova hesla - %1!",
|
||||
"welcome-to": "Vítejte v %1",
|
||||
"invite": "Pozvánka od %1",
|
||||
"greeting_no_name": "Dobrý den",
|
||||
"greeting_with_name": "Dobrý den %1",
|
||||
"welcome.text1": "Děkujeme vám za registraci na %1!",
|
||||
"welcome.text1": "Děkujeme vám za registraci s %1!",
|
||||
"welcome.text2": "Pro úplnou aktivaci vašeho účtu potřebujeme ověřit vaší emailovou adresu.",
|
||||
"welcome.text3": "Administrátor právě potvrdil vaší registraci. Nyní se můžete přihlásit jménem a heslem.",
|
||||
"welcome.cta": "Klikněte zde pro potvrzení vaší emailové adresy",
|
||||
"invitation.text1": "%1 Vás pozval abyste se připojil k %2",
|
||||
"invitation.ctr": "Klikněte zde pro vytvoření vašeho účtu",
|
||||
"reset.text1": "Obdrželi jsme požadavek na obnovu hesla, pravděpodobně kvůli tomu, že jste ho zapomněli. Pokud to není tento případ, ignorujte, prosím, tento email.",
|
||||
"reset.text2": "Přejete-li si pokračovat v obnově vašeho hesla, klikněte, prosím, na následující odkaz:",
|
||||
"reset.cta": "Klikněte zde, chcete-li obnovit vaše heslo",
|
||||
"reset.notify.subject": "Heslo úspěšně změněno",
|
||||
"reset.notify.text1": "Informujeme Vás, že na %1 vaše heslo bylo úspěšně změněno.",
|
||||
"reset.notify.text2": "Pokud jste to neschválil, prosíme neprodleně kontaktujte správce.",
|
||||
"digest.notifications": "Máte tu nepřečtená oznámení od %1:",
|
||||
"digest.latest_topics": "Nejnovější témata od %1",
|
||||
"digest.cta": "Kliknutím zde navštívíte %1",
|
||||
"digest.unsub.info": "Tento výtah vám byl odeslán, protože jste si to nastavili ve vašich odběrech.",
|
||||
"digest.no_topics": "Dosud tu nebyly žádné aktivní témata %1",
|
||||
"digest.day": "den",
|
||||
"digest.week": "týden",
|
||||
"digest.month": "měsíc",
|
||||
"digest.subject": "Výběr pro %1",
|
||||
"notif.chat.subject": "Nová zpráva z chatu od %1",
|
||||
"notif.chat.cta": "Chcete-li pokračovat v konverzaci, klikněte zde.",
|
||||
"notif.chat.unsub.info": "Toto oznámení z chatu vám bylo zasláno, protože jste si to nastavili ve vašich odběrech.",
|
||||
"notif.post.cta": "Klikněte zde pro přečtené celého tématu",
|
||||
"notif.post.unsub.info": "Toto oznámení Vám bylo odesláno na základě vašeho nastavení odběru.",
|
||||
"test.text1": "Tento testovací email slouží k ověření, že mailer je správně nastaven. NodeBB.",
|
||||
"unsub.cta": "Chcete-li změnit tyto nastavení, klikněte zde.",
|
||||
"closing": "Díky!"
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
"invalid-data": "Neplatná data",
|
||||
"not-logged-in": "Zdá se, že nejste přihlášen(a)",
|
||||
"account-locked": "Váš účet byl dočasně uzamčen",
|
||||
"search-requires-login": "Searching requires an account - please login or register.",
|
||||
"search-requires-login": "Chcete-li vyhledávat, musíte mít účet. Přihlašte se nebo zaregistrujte, prosím.",
|
||||
"invalid-cid": "Neplatné ID kategorie",
|
||||
"invalid-tid": "Neplatné ID tématu",
|
||||
"invalid-pid": "Neplatné ID příspěvku",
|
||||
@@ -14,23 +14,14 @@
|
||||
"invalid-password": "Neplatné heslo",
|
||||
"invalid-username-or-password": "Stanovte, prosím, oboje, jak uživatelské jméno, tak heslo",
|
||||
"invalid-search-term": "Neplatný výraz pro vyhledávání",
|
||||
"csrf-invalid": "We were unable to log you in, likely due to an expired session. Please try again",
|
||||
"invalid-pagination-value": "Invalid pagination value, must be at least %1 and at most %2",
|
||||
"invalid-pagination-value": "Neplatná hodnota pro stránkování",
|
||||
"username-taken": "Uživatelské jméno je již použito",
|
||||
"email-taken": "Email je již použit",
|
||||
"email-not-confirmed": "Vaše emailová adresa zatím nebyla potvrzena. Kliknutím zde svůj email potvrdíte.",
|
||||
"email-not-confirmed-chat": "You are unable to chat until your email is confirmed, please click here to confirm your email.",
|
||||
"no-email-to-confirm": "This forum requires email confirmation, please click here to enter an email",
|
||||
"email-confirm-failed": "We could not confirm your email, please try again later.",
|
||||
"confirm-email-already-sent": "Potvrzovací email již byl odeslán. Vyčkejte %1 minut pokud chcete odeslat další.",
|
||||
"sendmail-not-found": "The sendmail executable could not be found, please ensure it is installed and executable by the user running NodeBB.",
|
||||
"username-too-short": "Uživatelské jméno je příliš krátké",
|
||||
"username-too-long": "Uživatelské jméno je příliš dlouhé",
|
||||
"password-too-long": "Heslo je příliš dlouhé",
|
||||
"user-banned": "Uživatel byl zakázán",
|
||||
"user-too-new": "Sorry, you are required to wait %1 second(s) before making your first post",
|
||||
"blacklisted-ip": "Sorry, your IP address has been banned from this community. If you feel this is in error, please contact an administrator.",
|
||||
"ban-expiry-missing": "Please provide an end date for this ban",
|
||||
"user-too-new": "Pardon, ale je potřeba vyčkat %1 sekund, než-li budete moci vytvořit svůj první příspěvek.",
|
||||
"no-category": "Kategorie neexistuje",
|
||||
"no-topic": "Téma neexistuje",
|
||||
"no-post": "Příspěvek neexistuje",
|
||||
@@ -38,87 +29,39 @@
|
||||
"no-user": "Uživatel neexistuje",
|
||||
"no-teaser": "Teaser does not exist",
|
||||
"no-privileges": "Na tuto akci nemáte dostatečná práva",
|
||||
"no-emailers-configured": "Protože není zaveden žádný emailový plugin, není možné odeslat testovací email.",
|
||||
"category-disabled": "Kategorie zakázána",
|
||||
"topic-locked": "Téma uzamčeno",
|
||||
"post-edit-duration-expired": "You are only allowed to edit posts for %1 second(s) after posting",
|
||||
"post-edit-duration-expired-minutes": "You are only allowed to edit posts for %1 minute(s) after posting",
|
||||
"post-edit-duration-expired-minutes-seconds": "You are only allowed to edit posts for %1 minute(s) %2 second(s) after posting",
|
||||
"post-edit-duration-expired-hours": "You are only allowed to edit posts for %1 hour(s) after posting",
|
||||
"post-edit-duration-expired-hours-minutes": "You are only allowed to edit posts for %1 hour(s) %2 minute(s) after posting",
|
||||
"post-edit-duration-expired-days": "You are only allowed to edit posts for %1 day(s) after posting",
|
||||
"post-edit-duration-expired-days-hours": "You are only allowed to edit posts for %1 day(s) %2 hour(s) after posting",
|
||||
"post-delete-duration-expired": "You are only allowed to delete posts for %1 second(s) after posting",
|
||||
"post-delete-duration-expired-minutes": "You are only allowed to delete posts for %1 minute(s) after posting",
|
||||
"post-delete-duration-expired-minutes-seconds": "You are only allowed to delete posts for %1 minute(s) %2 second(s) after posting",
|
||||
"post-delete-duration-expired-hours": "You are only allowed to delete posts for %1 hour(s) after posting",
|
||||
"post-delete-duration-expired-hours-minutes": "You are only allowed to delete posts for %1 hour(s) %2 minute(s) after posting",
|
||||
"post-delete-duration-expired-days": "You are only allowed to delete posts for %1 day(s) after posting",
|
||||
"post-delete-duration-expired-days-hours": "You are only allowed to delete posts for %1 day(s) %2 hour(s) after posting",
|
||||
"content-too-short": "Please enter a longer post. Posts should contain at least %1 character(s).",
|
||||
"content-too-long": "Please enter a shorter post. Posts can't be longer than %1 character(s).",
|
||||
"title-too-short": "Please enter a longer title. Titles should contain at least %1 character(s).",
|
||||
"title-too-long": "Please enter a shorter title. Titles can't be longer than %1 character(s).",
|
||||
"too-many-posts": "You can only post once every %1 second(s) - please wait before posting again",
|
||||
"too-many-posts-newbie": "As a new user, you can only post once every %1 second(s) until you have earned %2 reputation - please wait before posting again",
|
||||
"tag-too-short": "Please enter a longer tag. Tags should contain at least %1 character(s)",
|
||||
"tag-too-long": "Please enter a shorter tag. Tags can't be longer than %1 character(s)",
|
||||
"not-enough-tags": "Not enough tags. Topics must have at least %1 tag(s)",
|
||||
"too-many-tags": "Too many tags. Topics can't have more than %1 tag(s)",
|
||||
"still-uploading": "Vyčkejte, prosím, nežli se vše kompletně nahraje.",
|
||||
"file-too-big": "Maximum allowed file size is %1 kB - please upload a smaller file",
|
||||
"guest-upload-disabled": "Guest uploading has been disabled",
|
||||
"already-favourited": "You have already bookmarked this post",
|
||||
"already-unfavourited": "You have already unbookmarked this post",
|
||||
"content-too-short": "Vložte, prosím, delší příspěvek. Příspěvky by měly obsahovat nejméně %1 znaků.",
|
||||
"title-too-short": "Vložte, prosím, delší titulek. Titulky by měly obsahovat nejméně %1 znaků.",
|
||||
"title-too-long": "Vložte, prosím, kratší titulek. Titulky by neměly být delší, než-li %1 znaků.",
|
||||
"too-many-posts": "Své příspěvky můžete odesílat po %1 sekundách - vyčkejte, prosím, před dalším odesláním",
|
||||
"too-many-posts-newbie": "Jako nový uživatel můžete své příspěvky odesílat po %1 sekundách, dokud nedosáhnete %2 reputace - vyčkejte, prosím, před dalším odesláním",
|
||||
"file-too-big": "Maximální povolená velikost souboru je %1 kbs - nahrávejte, prosím, menší soubory",
|
||||
"cant-vote-self-post": "Nemůžete hlasovat pro svůj vlastní příspěvek",
|
||||
"already-favourited": "You have already favourited this post",
|
||||
"already-unfavourited": "You have already unfavourited this post",
|
||||
"cant-ban-other-admins": "Nemůžete zakazovat ostatní administrátory!",
|
||||
"cant-remove-last-admin": "You are the only administrator. Add another user as an administrator before removing yourself as admin",
|
||||
"cant-delete-admin": "Remove administrator privileges from this account before attempting to delete it.",
|
||||
"invalid-image-type": "Invalid image type. Allowed types are: %1",
|
||||
"invalid-image-extension": "Invalid image extension",
|
||||
"invalid-file-type": "Invalid file type. Allowed types are: %1",
|
||||
"invalid-image-type": "Neplatný typ obrázku",
|
||||
"group-name-too-short": "Název skupiny je příliš krátký",
|
||||
"group-name-too-long": "Group name too long",
|
||||
"group-already-exists": "Skupina už exstuje",
|
||||
"group-name-change-not-allowed": "Změna názvu skupiny není povolena",
|
||||
"group-already-member": "Already part of this group",
|
||||
"group-not-member": "Not a member of this group",
|
||||
"group-needs-owner": "This group requires at least one owner",
|
||||
"group-already-invited": "This user has already been invited",
|
||||
"group-already-requested": "Your membership request has already been submitted",
|
||||
"post-already-deleted": "Tento příspěvek byl již vymazán",
|
||||
"post-already-restored": "Tento příspěvek byl již obnoven",
|
||||
"topic-already-deleted": "Toto téma bylo již vymazáno",
|
||||
"topic-already-restored": "Toto téma bylo již obnoveno",
|
||||
"cant-purge-main-post": "You can't purge the main post, please delete the topic instead",
|
||||
"topic-thumbnails-are-disabled": "Topic thumbnails are disabled.",
|
||||
"invalid-file": "Neplatný soubor",
|
||||
"uploads-are-disabled": "Nahrávání je zakázáno",
|
||||
"signature-too-long": "Sorry, your signature cannot be longer than %1 character(s).",
|
||||
"about-me-too-long": "Sorry, your about me cannot be longer than %1 character(s).",
|
||||
"upload-error": "Chyba při nahrávání : %1",
|
||||
"signature-too-long": "Pardon, ale váš podpis nemůže být delší, než-li %1 znaků.",
|
||||
"cant-chat-with-yourself": "Nemůžete chatovat sami se sebou!",
|
||||
"chat-restricted": "This user has restricted their chat messages. They must follow you before you can chat with them",
|
||||
"chat-disabled": "Chat system disabled",
|
||||
"too-many-messages": "You have sent too many messages, please wait awhile.",
|
||||
"invalid-chat-message": "Invalid chat message",
|
||||
"chat-message-too-long": "Chat message is too long",
|
||||
"cant-edit-chat-message": "You are not allowed to edit this message",
|
||||
"cant-remove-last-user": "You can't remove the last user",
|
||||
"cant-delete-chat-message": "You are not allowed to delete this message",
|
||||
"already-voting-for-this-post": "You have already voted for this post.",
|
||||
"reputation-system-disabled": "Systém reputací je zakázán.",
|
||||
"downvoting-disabled": "Downvoting is disabled",
|
||||
"not-enough-reputation-to-downvote": "You do not have enough reputation to downvote this post",
|
||||
"not-enough-reputation-to-flag": "You do not have enough reputation to flag this post",
|
||||
"already-flagged": "You have already flagged this post",
|
||||
"reload-failed": "NodeBB encountered a problem while reloading: \"%1\". NodeBB will continue to serve the existing client-side assets, although you should undo what you did just prior to reloading.",
|
||||
"registration-error": "Chyba při registraci",
|
||||
"parse-error": "Something went wrong while parsing server response",
|
||||
"wrong-login-type-email": "Použijte prosím Váš e-mail pro přihlášení",
|
||||
"wrong-login-type-username": "Použijte prosím Váše přihlašovací jméno pro přihlášení",
|
||||
"invite-maximum-met": "Již jste pozval/a maximálně možný počet lidí (%1 z %2).",
|
||||
"no-session-found": "No login session found!",
|
||||
"not-in-room": "User not in room",
|
||||
"no-users-in-room": "No users in this room",
|
||||
"cant-kick-self": "Nemůžete vyhodit sami sebe ze kupiny",
|
||||
"no-users-selected": "No user(s) selected",
|
||||
"invalid-home-page-route": "Invalid home page route"
|
||||
"registration-error": "Chyba při registraci"
|
||||
}
|
||||
@@ -3,10 +3,9 @@
|
||||
"search": "Hledat",
|
||||
"buttons.close": "Zavřít",
|
||||
"403.title": "Přístup odepřen",
|
||||
"403.message": "Zdá se, že jste narazil/a na stránky na které nemáte přístup.",
|
||||
"403.login": "Možná byste měli se <a href='%1/login'>zkusit přihlásit</a>?",
|
||||
"403.message": "K této stránce nemáte přístup. Zkuste se <a href='/login'>přihlásit</a>?",
|
||||
"404.title": "Stránka nenalezena",
|
||||
"404.message": "Zdá se, že jste narazil/a na stránku která neexistuje. Vrátit se zpět na <a href='%1/'>domovskou stránku</a>.",
|
||||
"404.message": "Tato stránka bohužel neexistuje. Vraťte se na <a href='/'>domovskou stránku</a>.",
|
||||
"500.title": "Neznámá chyba",
|
||||
"500.message": "Jejda, vypadá to, že se něco pokazilo.",
|
||||
"register": "Registrovat",
|
||||
@@ -22,58 +21,49 @@
|
||||
"pagination.out_of": "%1 z %2",
|
||||
"pagination.enter_index": "Enter index",
|
||||
"header.admin": "Administrace",
|
||||
"header.categories": "Kategorie",
|
||||
"header.recent": "Nejnovější",
|
||||
"header.recent": "Aktuality",
|
||||
"header.unread": "Nepřečtené",
|
||||
"header.tags": "Tagy",
|
||||
"header.popular": "Populární",
|
||||
"header.users": "Uživatelé",
|
||||
"header.groups": "Skupiny",
|
||||
"header.chats": "Chaty",
|
||||
"header.chats": "Chats",
|
||||
"header.notifications": "Oznámení",
|
||||
"header.search": "Hledat",
|
||||
"header.profile": "Můj profil",
|
||||
"header.navigation": "Navigace",
|
||||
"notifications.loading": "Načítání upozornění",
|
||||
"chats.loading": "Načítání chatů",
|
||||
"chats.loading": "Načítání grafů",
|
||||
"motd.welcome": "Vítejte na NodeBB, diskusní platforma buducnosti.",
|
||||
"previouspage": "Předchozí stránka",
|
||||
"nextpage": "Další stránka",
|
||||
"alert.success": "Úspěch",
|
||||
"alert.success": "Success",
|
||||
"alert.error": "Chyba",
|
||||
"alert.banned": "Banned",
|
||||
"alert.banned.message": "You have just been banned, you will now be logged out.",
|
||||
"alert.unfollow": "Již nesledujete %1!",
|
||||
"alert.follow": "Nyní sledujete %1!",
|
||||
"alert.unfollow": "You are no longer following %1!",
|
||||
"alert.follow": "You are now following %1!",
|
||||
"online": "Online",
|
||||
"users": "Uživatelé",
|
||||
"topics": "Témata",
|
||||
"posts": "Příspěvky",
|
||||
"best": "Nejlepší",
|
||||
"upvoters": "Upvoters",
|
||||
"upvoted": "Upvoted",
|
||||
"downvoters": "Downvoters",
|
||||
"downvoted": "Downvoted",
|
||||
"views": "Zobrazení",
|
||||
"reputation": "Reputace",
|
||||
"read_more": "čtěte více",
|
||||
"more": "Více",
|
||||
"reputation": "Reputation",
|
||||
"read_more": "read more",
|
||||
"posted_ago_by_guest": "posted %1 by Guest",
|
||||
"posted_ago_by": "posted %1 by %2",
|
||||
"posted_ago": "posted %1",
|
||||
"posted_in": "posted in %1",
|
||||
"posted_in_by": "posted in %1 by %2",
|
||||
"posted_in_ago": "posted in %1 %2",
|
||||
"posted_in_ago_by_guest": "posted in %1 %2 by Guest",
|
||||
"posted_in_ago_by": "posted in %1 %2 by %3",
|
||||
"posted_in_ago": "posted in %1 %2",
|
||||
"replied_ago": "replied %1",
|
||||
"user_posted_ago": "%1 posted %2",
|
||||
"guest_posted_ago": "Guest posted %1",
|
||||
"last_edited_by": "last edited by %1",
|
||||
"last_edited_by_ago": "last edited by %1 %2",
|
||||
"norecentposts": "Žádné nedávné příspěvky",
|
||||
"norecenttopics": "Žádné nedávné témata",
|
||||
"recentposts": "Nedávné příspěvky",
|
||||
"recentips": "Naposledy zaznamenané IP adresy",
|
||||
"recentips": "Recently Logged In IPs",
|
||||
"away": "Pryč",
|
||||
"dnd": "Nevyrušovat",
|
||||
"dnd": "Nerušit",
|
||||
"invisible": "Neviditelný",
|
||||
"offline": "Offline",
|
||||
"email": "Email",
|
||||
@@ -82,15 +72,6 @@
|
||||
"guests": "Hosté",
|
||||
"updated.title": "Fórum zaktualizováno",
|
||||
"updated.message": "Toto fórum bylo právě aktualizováno na poslední verzi. Klikněte zde a obnovte tuto stránku.",
|
||||
"privacy": "Soukromí",
|
||||
"follow": "Sledovat",
|
||||
"unfollow": "Prestat sledovat",
|
||||
"delete_all": "Vymazat vše",
|
||||
"map": "Mapa",
|
||||
"sessions": "Login Sessions",
|
||||
"ip_address": "IP adresa",
|
||||
"enter_page_number": "Zadejte číslo stránky",
|
||||
"upload_file": "Nahrár soubor",
|
||||
"upload": "Nahrát",
|
||||
"allowed-file-types": "Povolené typy souborů jsou %1"
|
||||
"privacy": "Privacy",
|
||||
"delete_all": "Vymazat vše"
|
||||
}
|
||||
@@ -1,54 +1,8 @@
|
||||
{
|
||||
"groups": "Skupiny",
|
||||
"view_group": "Prohlédnout skupinu",
|
||||
"owner": "Vlastník skupiny",
|
||||
"new_group": "Vytvořit novou skupinu",
|
||||
"no_groups_found": "Žádné skupiny k prohlížení",
|
||||
"pending.accept": "Přijmout",
|
||||
"pending.reject": "Odmítnout",
|
||||
"pending.accept_all": "Přijmout vše",
|
||||
"pending.reject_all": "Odmítnout vše",
|
||||
"pending.none": "Žádní čekající členové v tuto chvíli",
|
||||
"invited.none": "Žádní pozvaní členové v tuto chvíli",
|
||||
"invited.uninvite": "Zrušit pozvánku",
|
||||
"invited.search": "Hledat uživatele k pozvání do této skupiny",
|
||||
"invited.notification_title": "Byl jste pozván abyste se připojil/a k <strong>%1</strong>",
|
||||
"request.notification_title": "Požadavek na členství ve skupině od <strong>%1</strong>",
|
||||
"request.notification_text": "<strong>%1</strong> požádál o členství v <strong>%2</strong>",
|
||||
"cover-save": "Uložit",
|
||||
"cover-saving": "Ukládám",
|
||||
"details.title": "Podrobnosti skupiny",
|
||||
"details.title": "podrobnosti skupiny",
|
||||
"details.members": "Seznam členů",
|
||||
"details.pending": "Čekající členové",
|
||||
"details.invited": "Pozvaní členové",
|
||||
"details.has_no_posts": "Členové této skupiny dosud neodeslali ani jeden příspěvek.",
|
||||
"details.latest_posts": "Nejnovější příspěvky",
|
||||
"details.private": "Soukromé",
|
||||
"details.disableJoinRequests": "Zakázat žádosti o připojení",
|
||||
"details.grant": "Přidat/Zrušit vlastnictví",
|
||||
"details.kick": "Vyhodit",
|
||||
"details.owner_options": "Administrátor skupiny",
|
||||
"details.group_name": "Název skupiny",
|
||||
"details.member_count": "Počet členů",
|
||||
"details.creation_date": "Datum vytvoření",
|
||||
"details.description": "Popis",
|
||||
"details.badge_preview": "Náhled odznaku",
|
||||
"details.change_icon": "Změnit ikonu",
|
||||
"details.change_colour": "Změnit barvu",
|
||||
"details.badge_text": "Text odznaku",
|
||||
"details.userTitleEnabled": "Zobrazit odznak",
|
||||
"details.private_help": "Pokud je povoleno, připojování do skupin vyžaduje schválení od vlastníka skupiny",
|
||||
"details.hidden": "Skrytý",
|
||||
"details.hidden_help": "Pokud je povoleno, tato skupina nebude zobrazena v seznamu skupin, uživatelé budou muset být pozváni manuálně",
|
||||
"details.delete_group": "Odstranit skupinu",
|
||||
"details.private_system_help": "Soukromé skupiny jsou zakázáné na systémové úrovni, tato možnost nic nedělá",
|
||||
"event.updated": "Podrobnosti skupiny byly aktualizovány",
|
||||
"event.deleted": "Skupina \"%1\" byla odstraněna",
|
||||
"membership.accept-invitation": "Přijmout pozvání",
|
||||
"membership.invitation-pending": "Čekající pozvání",
|
||||
"membership.join-group": "Vstoupit do skupiny",
|
||||
"membership.leave-group": "Opustit skupinu",
|
||||
"membership.reject": "Odmítnout",
|
||||
"new-group.group_name": "Název skupiny:",
|
||||
"upload-group-cover": "Nahrát titulní obrázek skupiny"
|
||||
"details.latest_posts": "Nejnovější příspěvky"
|
||||
}
|
||||
@@ -1,12 +1,9 @@
|
||||
{
|
||||
"username-email": "Uživatel / Email",
|
||||
"username": "Uživatel",
|
||||
"email": "Email",
|
||||
"username": "Uživatelské jméno / Email",
|
||||
"remember_me": "Zapamatovat si mě?",
|
||||
"forgot_password": "Zapomněli jste heslo?",
|
||||
"alternative_logins": "Další způsoby přihlášení",
|
||||
"failed_login_attempt": "Přihlášení neúspěšné",
|
||||
"failed_login_attempt": "Přihlášení se nezdařilo, zkuste to prosím znovu.",
|
||||
"login_successful": "Přihlášení proběhlo úspěšně!",
|
||||
"dont_have_account": "Nemáte účet?",
|
||||
"logged-out-due-to-inactivity": "You have been logged out of the Admin Control Panel due to inactivity"
|
||||
"dont_have_account": "Nemáte účet?"
|
||||
}
|
||||
@@ -4,43 +4,18 @@
|
||||
"chat.send": "Odeslat",
|
||||
"chat.no_active": "Nemáte žádné aktivní konverzace.",
|
||||
"chat.user_typing": "%1 píše ...",
|
||||
"chat.user_has_messaged_you": "%1 Vám napsal.",
|
||||
"chat.see_all": "Prohlédnout všechny chaty",
|
||||
"chat.mark_all_read": "Označit vše jako přečtené",
|
||||
"chat.no-messages": "Prosím vyberte příjemce k prohlédnutí historie zpráv.",
|
||||
"chat.no-users-in-room": "Žádní uživatelé v místnosti.",
|
||||
"chat.recent-chats": "Aktuální chaty",
|
||||
"chat.user_has_messaged_you": "%1 has messaged you.",
|
||||
"chat.see_all": "See all Chats",
|
||||
"chat.no-messages": "Please select a recipient to view chat message history",
|
||||
"chat.recent-chats": "Recent Chats",
|
||||
"chat.contacts": "Kontakty",
|
||||
"chat.message-history": "Historie zpráv",
|
||||
"chat.pop-out": "Skrýt chat",
|
||||
"chat.pop-out": "Pop out chat",
|
||||
"chat.maximize": "Maximalizovat",
|
||||
"chat.seven_days": "7 dní",
|
||||
"chat.thirty_days": "30 dní",
|
||||
"chat.three_months": "3 měsíce",
|
||||
"chat.delete_message_confirm": "Jste si jisti že chcete odstranit tuto zprávu?",
|
||||
"chat.roomname": "Místnost %1",
|
||||
"chat.add-users-to-room": "Přidat uživatele do místnosti",
|
||||
"composer.compose": "Napsat",
|
||||
"composer.show_preview": "Ukázat náhled",
|
||||
"composer.hide_preview": "Skrýt náhled",
|
||||
"composer.user_said_in": "%1 řekl v %2:",
|
||||
"composer.user_said": "%1 řekl:",
|
||||
"composer.discard": "Jste si jisti, že chcete zrušit tento příspěvek?",
|
||||
"composer.submit_and_lock": "Potvrdit a uzamknout",
|
||||
"composer.toggle_dropdown": "Toggle Dropdown",
|
||||
"composer.uploading": "Odesílám %1",
|
||||
"composer.formatting.bold": "Tučné",
|
||||
"composer.formatting.italic": "Kurzíva",
|
||||
"composer.formatting.list": "Seznam",
|
||||
"composer.formatting.strikethrough": "Přeškrtnutí",
|
||||
"composer.formatting.link": "Odkaz",
|
||||
"composer.formatting.picture": "Obrázek",
|
||||
"composer.upload-picture": "Nahrát obrázek",
|
||||
"composer.upload-file": "Nahrát soubor",
|
||||
"bootbox.ok": "OK",
|
||||
"bootbox.cancel": "Zrušit",
|
||||
"bootbox.confirm": "Potvrdit",
|
||||
"cover.dragging_title": "Cover Photo Positioning",
|
||||
"cover.dragging_message": "Drag the cover photo to the desired position and click \"Save\"",
|
||||
"cover.saved": "Cover photo image and position saved"
|
||||
"composer.user_said_in": "%1 said in %2:",
|
||||
"composer.user_said": "%1 said:",
|
||||
"composer.discard": "Are you sure you wish to discard this post?"
|
||||
}
|
||||
@@ -1,35 +1,27 @@
|
||||
{
|
||||
"title": "Upozornění",
|
||||
"no_notifs": "Nemáte žádná nová upozornění.",
|
||||
"see_all": "Zobrazit všechna upozornění",
|
||||
"mark_all_read": "Označit všechna upozornění jako přečtená",
|
||||
"back_to_home": "Zpět na %1",
|
||||
"no_notifs": "You have no new notifications",
|
||||
"see_all": "See all Notifications",
|
||||
"back_to_home": "Back to %1",
|
||||
"outgoing_link": "Odkaz mimo fórum",
|
||||
"outgoing_link_message": "Opouštíte %1",
|
||||
"continue_to": "Pokračovat na %1",
|
||||
"return_to": "Vrátit na %1",
|
||||
"new_notification": "Nové upozornění",
|
||||
"you_have_unread_notifications": "Máte nepřečtená upozornění.",
|
||||
"new_message_from": "Nová zpráva od <strong>%1</strong>",
|
||||
"outgoing_link_message": "You are now leaving %1.",
|
||||
"continue_to": "Continue to %1",
|
||||
"return_to": "Return to %1",
|
||||
"new_notification": "New Notification",
|
||||
"you_have_unread_notifications": "You have unread notifications.",
|
||||
"new_message_from": "New message from <strong>%1</strong>",
|
||||
"upvoted_your_post_in": "<strong>%1</strong> has upvoted your post in <strong>%2</strong>.",
|
||||
"upvoted_your_post_in_dual": "<strong>%1</strong> and <strong>%2</strong> have upvoted your post in <strong>%3</strong>.",
|
||||
"upvoted_your_post_in_multiple": "<strong>%1</strong> and %2 others have upvoted your post in <strong>%3</strong>.",
|
||||
"moved_your_post": "<strong>%1</strong> has moved your post to <strong>%2</strong>",
|
||||
"moved_your_topic": "<strong>%1</strong> has moved <strong>%2</strong>",
|
||||
"moved_your_post": "<strong>%1</strong> has moved your post.",
|
||||
"moved_your_topic": "<strong>%1</strong> has moved your topic.",
|
||||
"favourited_your_post_in": "<strong>%1</strong> has favourited your post in <strong>%2</strong>.",
|
||||
"user_flagged_post_in": "<strong>%1</strong> flagged a post in <strong>%2</strong>",
|
||||
"user_flagged_post_in_dual": "<strong>%1</strong> and <strong>%2</strong> flagged a post in <strong>%3</strong>",
|
||||
"user_flagged_post_in_multiple": "<strong>%1</strong> and %2 others flagged a post in <strong>%3</strong>",
|
||||
"user_posted_to": "<strong>%1</strong> has posted a reply to: <strong>%2</strong>",
|
||||
"user_posted_to_dual": "<strong>%1</strong> and <strong>%2</strong> have posted replies to: <strong>%3</strong>",
|
||||
"user_posted_to_multiple": "<strong>%1</strong> and %2 others have posted replies to: <strong>%3</strong>",
|
||||
"user_posted_topic": "<strong>%1</strong> has posted a new topic: <strong>%2</strong>",
|
||||
"user_mentioned_you_in": "<strong>%1</strong> mentioned you in <strong>%2</strong>",
|
||||
"user_started_following_you": "<strong>%1</strong> started following you.",
|
||||
"user_started_following_you_dual": "<strong>%1</strong> and <strong>%2</strong> started following you.",
|
||||
"user_started_following_you_multiple": "<strong>%1</strong> and %2 others started following you.",
|
||||
"new_register": "<strong>%1</strong> sent a registration request.",
|
||||
"new_register_multiple": "There are <strong>%1</strong> registration requests awaiting review.",
|
||||
"email-confirmed": "Email potvrzen",
|
||||
"email-confirmed-message": "Děkujeme za ověření Vaší emailové adresy. Váš účet je nyní aktivován.",
|
||||
"email-confirm-error-message": "Nastal problém s ověřením Vaší emailové adresy. Pravděpodobně neplatný nebo expirovaný kód.",
|
||||
"email-confirm-sent": "Ověřovací email odeslán."
|
||||
"email-confirmed": "Email Confirmed",
|
||||
"email-confirmed-message": "Thank you for validating your email. Your account is now fully activated.",
|
||||
"email-confirm-error": "An error occurred...",
|
||||
"email-confirm-error-message": "There was a problem validating your email address. Perhaps the code was invalid or has expired.",
|
||||
"email-confirm-sent": "Confirmation email sent."
|
||||
}
|
||||
@@ -1,48 +1,18 @@
|
||||
{
|
||||
"home": "Domů",
|
||||
"unread": "Nepřečtená témata",
|
||||
"popular-day": "Dnešní oblíbená témata",
|
||||
"popular-week": "Oblíbená témata pro tento týden",
|
||||
"popular-month": "Oblíbená témata pro tento měsíc",
|
||||
"popular-alltime": "Oblíbená témata za celou dobu",
|
||||
"recent": "Aktuální témata",
|
||||
"flagged-posts": "Označené příspěvky",
|
||||
"users/online": "Uživatelé online",
|
||||
"users/latest": "Nejnovější uživatelé",
|
||||
"users/sort-posts": "Uživatelé s nejvíce příspěvky",
|
||||
"users/sort-reputation": "Uživatelé s nejlepší reputací",
|
||||
"users/banned": "Zabanovaní uživatelé",
|
||||
"users/most-flags": "Most flagged users",
|
||||
"users/search": "Hledání uživatele",
|
||||
"notifications": "Oznámení",
|
||||
"tags": "Tagy",
|
||||
"tag": "Téma označeno pod \"%1\"",
|
||||
"register": "Zaregistrovat účet",
|
||||
"login": "Přihlásit se ke svému účtu",
|
||||
"reset": "Obnovit heslo k účtu",
|
||||
"categories": "Kategorie",
|
||||
"groups": "Skupiny",
|
||||
"group": "%1 skupina",
|
||||
"chats": "Chaty",
|
||||
"chat": "Chatovat s %1",
|
||||
"account/edit": "Editing \"%1\"",
|
||||
"account/edit/password": "Editing password of \"%1\"",
|
||||
"account/edit/username": "Editing username of \"%1\"",
|
||||
"account/edit/email": "Editing email of \"%1\"",
|
||||
"account/info": "Account Info",
|
||||
"account/following": "People %1 follows",
|
||||
"account/followers": "Lidé kteří sledují %1",
|
||||
"account/posts": "Příspěvky od %1",
|
||||
"account/topics": "Příspěvky vytvořeny uživatelem %1",
|
||||
"account/groups": "%1's skupiny",
|
||||
"account/favourites": "%1's Bookmarked Posts",
|
||||
"account/settings": "Uživatelské nastavení",
|
||||
"account/watched": "Topics watched by %1",
|
||||
"account/upvoted": "Posts upvoted by %1",
|
||||
"account/downvoted": "Posts downvoted by %1",
|
||||
"account/best": "Nejlepší příspěvky od %1",
|
||||
"confirm": "Email potvrzen",
|
||||
"home": "Home",
|
||||
"unread": "Unread Topics",
|
||||
"popular": "Popular Topics",
|
||||
"recent": "Recent Topics",
|
||||
"users": "Registered Users",
|
||||
"notifications": "Notifications",
|
||||
"tags": "Topics tagged under \"%1\"",
|
||||
"user.edit": "Editing \"%1\"",
|
||||
"user.following": "People %1 Follows",
|
||||
"user.followers": "People who Follow %1",
|
||||
"user.posts": "Posts made by %1",
|
||||
"user.topics": "Topics created by %1",
|
||||
"user.favourites": "%1's Favourite Posts",
|
||||
"user.settings": "User Settings",
|
||||
"maintenance.text": "%1 is currently undergoing maintenance. Please come back another time.",
|
||||
"maintenance.messageIntro": "Additionally, the administrator has left this message:",
|
||||
"throttled.text": "%1 je v současnou chvíli nedostupný pro velkou zátěž. Prosíme zkuste to za chvíli."
|
||||
"maintenance.messageIntro": "Additionally, the administrator has left this message:"
|
||||
}
|
||||
@@ -3,17 +3,7 @@
|
||||
"day": "Den",
|
||||
"week": "Týden",
|
||||
"month": "Měsíc",
|
||||
"year": "Rok",
|
||||
"alltime": "Pořád",
|
||||
"no_recent_topics": "Nebyly nalezeny žádné nové téma.",
|
||||
"no_popular_topics": "Žádná oblíbená téma.",
|
||||
"there-is-a-new-topic": "K dispozici je nová téma.",
|
||||
"there-is-a-new-topic-and-a-new-post": "K dispozici je nové téma a nový příspěvěk.",
|
||||
"there-is-a-new-topic-and-new-posts": "K dispozici je nové téma a %1 nových příspěvků.",
|
||||
"there-are-new-topics": "K dispozici je %1 nových témat.",
|
||||
"there-are-new-topics-and-a-new-post": "K dispozici je %1 nových témat a jeden nový příspěvek.",
|
||||
"there-are-new-topics-and-new-posts": "K dispozici je %1 nových témat a %2 nových příspěvků.",
|
||||
"there-is-a-new-post": "K dispozici je nový příspěvek.",
|
||||
"there-are-new-posts": "K dispozici je %1 nových příspěvků.",
|
||||
"click-here-to-reload": "Kliknutím sem znovu načtete."
|
||||
"year": "Year",
|
||||
"alltime": "All Time",
|
||||
"no_recent_topics": "There are no recent topics."
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user