Compare commits
453 Commits
fix-8654
...
v1.15.3-be
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3c36d7303a | ||
|
|
988e293f8d | ||
|
|
d253ca6821 | ||
|
|
fa4c993e6a | ||
|
|
833eff4ea4 | ||
|
|
a526fd860b | ||
|
|
05a50abdd4 | ||
|
|
79696abfd1 | ||
|
|
8b7b6d5e82 | ||
|
|
075f57e728 | ||
|
|
de0a7dccea | ||
|
|
69b1ab7009 | ||
|
|
28fa03bd7e | ||
|
|
81984285bb | ||
|
|
8fb9117430 | ||
|
|
5f2fe883ca | ||
|
|
589f7a567c | ||
|
|
38127b04b5 | ||
|
|
dbd814c25f | ||
|
|
903e9d82b8 | ||
|
|
39279a1e54 | ||
|
|
f7f119d5cc | ||
|
|
ae5d4405c0 | ||
|
|
8e1b2458c2 | ||
|
|
9ca44e6f54 | ||
|
|
8d060065a0 | ||
|
|
e9585b9be2 | ||
|
|
965671a97b | ||
|
|
b98561792a | ||
|
|
5867a5b99f | ||
|
|
37965d4528 | ||
|
|
fa4177c3bc | ||
|
|
8de48c3935 | ||
|
|
4e9b10ab76 | ||
|
|
fb567a7a33 | ||
|
|
5f6137f0e6 | ||
|
|
a6afcfd531 | ||
|
|
62b62821c1 | ||
|
|
c2019b7b3a | ||
|
|
b7b1f2035b | ||
|
|
bee8cfe4e0 | ||
|
|
a87ccccc9c | ||
|
|
dfdc0c420c | ||
|
|
a0b7a82350 | ||
|
|
422aa7f0b6 | ||
|
|
3b6e71d5eb | ||
|
|
9e154f1c9d | ||
|
|
120999bf63 | ||
|
|
d6dd1cb6f6 | ||
|
|
35f932cd64 | ||
|
|
b44ddecdf8 | ||
|
|
6e43086558 | ||
|
|
fbdde03217 | ||
|
|
2ce1fcd336 | ||
|
|
9f2d0d42be | ||
|
|
1581064362 | ||
|
|
7928036a1b | ||
|
|
1d6bcbebde | ||
|
|
84d545775e | ||
|
|
e1d7c4d8aa | ||
|
|
d83eb7f89e | ||
|
|
3ccebf112e | ||
|
|
dde9f1890f | ||
|
|
d30ea25629 | ||
|
|
b63b7ae5d7 | ||
|
|
20c05e80e4 | ||
|
|
0a0b4661be | ||
|
|
452d7f2b17 | ||
|
|
996174a187 | ||
|
|
d1e804aa61 | ||
|
|
ce9cf2a545 | ||
|
|
2f4653a3cc | ||
|
|
e4d2764d4c | ||
|
|
9dac9630df | ||
|
|
03329408b7 | ||
|
|
5598130a92 | ||
|
|
f14e42d8bc | ||
|
|
29c2ca94f4 | ||
|
|
7693ab90e2 | ||
|
|
85aaededae | ||
|
|
bbfb276a83 | ||
|
|
ec70329aed | ||
|
|
8fbe832460 | ||
|
|
fdab76f822 | ||
|
|
8518404e22 | ||
|
|
45922faebc | ||
|
|
48e8252099 | ||
|
|
eab27f237f | ||
|
|
5f5f0edb81 | ||
|
|
daf2e73c29 | ||
|
|
51b7eca119 | ||
|
|
04f4429f72 | ||
|
|
b3e00489c8 | ||
|
|
bcccb331db | ||
|
|
97842c43d3 | ||
|
|
319cfeaa1c | ||
|
|
dc9668e417 | ||
|
|
a2468b84b4 | ||
|
|
efb7d688f0 | ||
|
|
dc6e27730a | ||
|
|
567c5f2056 | ||
|
|
1460a7a84d | ||
|
|
769aba0aed | ||
|
|
72d1b3cdca | ||
|
|
ee4d90f68f | ||
|
|
f300c933a5 | ||
|
|
e250c3f1fb | ||
|
|
ba7b23ac48 | ||
|
|
2946bb1679 | ||
|
|
9c5c32d4a5 | ||
|
|
20f4fe085f | ||
|
|
c18f449190 | ||
|
|
e033da8a04 | ||
|
|
62c0454cfe | ||
|
|
0b57ec19ce | ||
|
|
9f7902efdf | ||
|
|
978f1ee04f | ||
|
|
a0164b1c38 | ||
|
|
05a92885f2 | ||
|
|
e128264b66 | ||
|
|
14ba638345 | ||
|
|
e6b9e8ddee | ||
|
|
381a32abe6 | ||
|
|
3f5f38dd89 | ||
|
|
255cf43ea9 | ||
|
|
fe63c6aef3 | ||
|
|
2e44639210 | ||
|
|
1ce983ccb9 | ||
|
|
8368c25b1d | ||
|
|
d32e4e0213 | ||
|
|
e81e88f3e9 | ||
|
|
f1f9b225b0 | ||
|
|
bcbc085497 | ||
|
|
d227fe9fb6 | ||
|
|
6255874e32 | ||
|
|
74951f5967 | ||
|
|
0b30efba31 | ||
|
|
16d03975a0 | ||
|
|
d263192271 | ||
|
|
1446cec77f | ||
|
|
6b196a207f | ||
|
|
f2bb42c076 | ||
|
|
60e1e99b4f | ||
|
|
7e273e7710 | ||
|
|
90bcfa6d16 | ||
|
|
512f6de6de | ||
|
|
113d3324fb | ||
|
|
c61dee4b62 | ||
|
|
9e3eb5d41a | ||
|
|
f68bce86a9 | ||
|
|
00f90cd98c | ||
|
|
78ee83324c | ||
|
|
76cd5b0fc1 | ||
|
|
064c99cd9f | ||
|
|
e0cf9740d1 | ||
|
|
de5a21f19b | ||
|
|
40eb658bc1 | ||
|
|
eec630f1ef | ||
|
|
7b8a5567c7 | ||
|
|
9f5ef9d0cb | ||
|
|
891a1ea2af | ||
|
|
540a32cfdd | ||
|
|
a30aa5629c | ||
|
|
155f74e45e | ||
|
|
1afd215050 | ||
|
|
b44c7e9658 | ||
|
|
f06d4878c0 | ||
|
|
4b63f9937c | ||
|
|
69f4d5ac7d | ||
|
|
4bd2788ba3 | ||
|
|
a338f52780 | ||
|
|
518d4fa170 | ||
|
|
0d80190f79 | ||
|
|
08ff4041aa | ||
|
|
5a2b14b751 | ||
|
|
d40779a4ba | ||
|
|
f6623622be | ||
|
|
715775a707 | ||
|
|
c0f699e655 | ||
|
|
35e725d17c | ||
|
|
e66c1f4017 | ||
|
|
df5d66e5fe | ||
|
|
2fa78e4384 | ||
|
|
b6d8687837 | ||
|
|
4818ec377e | ||
|
|
1c8b8ce14a | ||
|
|
1688294165 | ||
|
|
57b4932074 | ||
|
|
eddf4a4f33 | ||
|
|
a3fa313298 | ||
|
|
6e85920cb6 | ||
|
|
841cbcc3e3 | ||
|
|
87bff6cd65 | ||
|
|
0c7d58605e | ||
|
|
a53d49a2b0 | ||
|
|
dda5d42610 | ||
|
|
15e0731dd9 | ||
|
|
4439864ce0 | ||
|
|
2738041b38 | ||
|
|
6de7760a1d | ||
|
|
a02ae6f5df | ||
|
|
27016d221c | ||
|
|
57ed6be78b | ||
|
|
a08fb8e53b | ||
|
|
0b6ef61e40 | ||
|
|
266d7587b2 | ||
|
|
bff53de03f | ||
|
|
a6a52430ce | ||
|
|
aa8faf58a0 | ||
|
|
e0b6781776 | ||
|
|
9082062e90 | ||
|
|
c4431294a5 | ||
|
|
2d29e603bd | ||
|
|
7d0d0005ff | ||
|
|
2baccd3ce2 | ||
|
|
224502d8c3 | ||
|
|
1f2eca6a52 | ||
|
|
6ac73ccb7e | ||
|
|
cc1c722092 | ||
|
|
04185d94c1 | ||
|
|
8e7914ff72 | ||
|
|
14e5c24ec5 | ||
|
|
b2e9e3e048 | ||
|
|
9f9e3c1582 | ||
|
|
3ebb3a3479 | ||
|
|
3c98cd3d95 | ||
|
|
a4f3270fc5 | ||
|
|
1392d064a1 | ||
|
|
b092f65d95 | ||
|
|
ec03af7a38 | ||
|
|
618e098305 | ||
|
|
843aff582d | ||
|
|
93f65f89e7 | ||
|
|
b156b8b573 | ||
|
|
b3ca7de016 | ||
|
|
a512d99472 | ||
|
|
f0131e72ae | ||
|
|
2e9f27d8ff | ||
|
|
c3a7ab54dc | ||
|
|
7c084134c7 | ||
|
|
5605a0d1b7 | ||
|
|
12c590ad56 | ||
|
|
93bdfe2f10 | ||
|
|
88a07e69b5 | ||
|
|
3108f628b6 | ||
|
|
8353857b3b | ||
|
|
4f49b3da8c | ||
|
|
943424b539 | ||
|
|
a05905f196 | ||
|
|
822c13f199 | ||
|
|
89a1f481e0 | ||
|
|
9de8497dad | ||
|
|
0db0231cff | ||
|
|
203db47b30 | ||
|
|
156e1396f2 | ||
|
|
7a3183520f | ||
|
|
a7b6d0dfe5 | ||
|
|
63e07c9433 | ||
|
|
c26f2b6599 | ||
|
|
aab5f018b9 | ||
|
|
8d48455b04 | ||
|
|
db63f5e3f0 | ||
|
|
177a961000 | ||
|
|
1a4c0decb7 | ||
|
|
d68ffea80d | ||
|
|
c31cab3457 | ||
|
|
3964872289 | ||
|
|
2dd3c9622f | ||
|
|
e6440c0d21 | ||
|
|
1f43e98f8b | ||
|
|
bbafa1b82a | ||
|
|
a691be5952 | ||
|
|
205a10308e | ||
|
|
7a019494e8 | ||
|
|
7a8f704900 | ||
|
|
df1cfc4caf | ||
|
|
75024c3580 | ||
|
|
b26e9b5993 | ||
|
|
ea31f50554 | ||
|
|
3ee4936db6 | ||
|
|
85cfe49d65 | ||
|
|
cf474ab246 | ||
|
|
7bddec93ec | ||
|
|
1b50e1a062 | ||
|
|
b3619d3d47 | ||
|
|
ff4fcc23b6 | ||
|
|
c107649b40 | ||
|
|
e362c342a3 | ||
|
|
d9a16855d0 | ||
|
|
272e73da53 | ||
|
|
4bfd008781 | ||
|
|
9738e20207 | ||
|
|
bb85c059de | ||
|
|
08a240fa8e | ||
|
|
a471b1afb3 | ||
|
|
2279e37261 | ||
|
|
083c74e059 | ||
|
|
e78c498e84 | ||
|
|
bc880ee0ca | ||
|
|
8fd3c04480 | ||
|
|
9d81660e24 | ||
|
|
135c2d6c7d | ||
|
|
9ee3cb9b62 | ||
|
|
68d6818bca | ||
|
|
21974a77f8 | ||
|
|
40598b368e | ||
|
|
b6cce75d97 | ||
|
|
ede9435f0e | ||
|
|
854d61a257 | ||
|
|
c913900ed6 | ||
|
|
2927509af3 | ||
|
|
bf480ee58b | ||
|
|
688d7a2cc2 | ||
|
|
b2ff1594b8 | ||
|
|
e98285dbbb | ||
|
|
84a179f48c | ||
|
|
3f347baadb | ||
|
|
14f9d8b0e5 | ||
|
|
222b4c9533 | ||
|
|
2d252f2fa4 | ||
|
|
7d86be2bc2 | ||
|
|
48a9b5d66e | ||
|
|
e367c5403e | ||
|
|
bbbd9fee85 | ||
|
|
960e925e40 | ||
|
|
081c4fa6d4 | ||
|
|
430e7f5834 | ||
|
|
8ae1f81cf4 | ||
|
|
77481947f0 | ||
|
|
31ae8a8323 | ||
|
|
d69e503d21 | ||
|
|
eed8deda61 | ||
|
|
51a60d3d46 | ||
|
|
d07f0081b7 | ||
|
|
23086daead | ||
|
|
5e2caf19f5 | ||
|
|
25e4a09816 | ||
|
|
4418ff0716 | ||
|
|
cc6e995ee2 | ||
|
|
205e46647c | ||
|
|
43afe7ffab | ||
|
|
3b88545b03 | ||
|
|
bae0f343e1 | ||
|
|
3881ac309f | ||
|
|
1fd2eba6f2 | ||
|
|
b295d15eae | ||
|
|
d89477cad0 | ||
|
|
42aed15b96 | ||
|
|
9dd3cc0483 | ||
|
|
a4ba23899e | ||
|
|
20bb9c7ec8 | ||
|
|
3326d80c11 | ||
|
|
3673accdb8 | ||
|
|
a784d10fff | ||
|
|
d52992de1b | ||
|
|
4b9444f1a5 | ||
|
|
e6ea71c95a | ||
|
|
8c6a559188 | ||
|
|
331d236f6e | ||
|
|
a481024d27 | ||
|
|
71d82ec8e0 | ||
|
|
b6d5888334 | ||
|
|
97628e2ff2 | ||
|
|
25c447df05 | ||
|
|
872bacf1c4 | ||
|
|
1289c10568 | ||
|
|
59bbede8c7 | ||
|
|
a411df1321 | ||
|
|
dd7424e5b5 | ||
|
|
2d6ea6e505 | ||
|
|
a2edb86dfb | ||
|
|
959314c921 | ||
|
|
bfaeb27c11 | ||
|
|
1e07886f30 | ||
|
|
0e0f1506d2 | ||
|
|
933989e013 | ||
|
|
682e926c6b | ||
|
|
c68653d035 | ||
|
|
7aa4d104af | ||
|
|
16873800a6 | ||
|
|
7b2301ff9c | ||
|
|
54e6003a7c | ||
|
|
dcf7235466 | ||
|
|
30b3fedca4 | ||
|
|
700e1e4340 | ||
|
|
40a05b70ef | ||
|
|
b038ac07d8 | ||
|
|
ba2e1c4c7e | ||
|
|
7beaf49028 | ||
|
|
411fa8bc84 | ||
|
|
01265d08f3 | ||
|
|
30d6a2b84e | ||
|
|
1ee9384875 | ||
|
|
0a4fd50aac | ||
|
|
d76229c061 | ||
|
|
e92d4719cc | ||
|
|
7db224f689 | ||
|
|
cecdd2915e | ||
|
|
ae5fb103ca | ||
|
|
dc29f4dca2 | ||
|
|
bddfcb5867 | ||
|
|
f16c8268cf | ||
|
|
eab7489ec5 | ||
|
|
cd34bfb1ed | ||
|
|
948f26143c | ||
|
|
c954db84e4 | ||
|
|
931d44b5e2 | ||
|
|
a77ba71e05 | ||
|
|
e2d407b769 | ||
|
|
aedd28e0a6 | ||
|
|
8f436eb881 | ||
|
|
3bbb4e269d | ||
|
|
c721625a95 | ||
|
|
cc705e5e2b | ||
|
|
0399ffaf5f | ||
|
|
f8e2324ce7 | ||
|
|
75c9668656 | ||
|
|
8c019a6a3b | ||
|
|
300a87559f | ||
|
|
420a312982 | ||
|
|
3b231360d3 | ||
|
|
fda2aedfd8 | ||
|
|
666064bf46 | ||
|
|
ea830871c2 | ||
|
|
1c94220b45 | ||
|
|
87e3f26fe4 | ||
|
|
414fe19c6e | ||
|
|
1bc99411b5 | ||
|
|
59311a63a0 | ||
|
|
944a7e0e28 | ||
|
|
ae3a231fce | ||
|
|
43df4b8e15 | ||
|
|
ba62ebb620 | ||
|
|
9a5b8a798a | ||
|
|
45aceb26a5 | ||
|
|
0c7af5029b | ||
|
|
4207dde4c2 | ||
|
|
1531536d46 | ||
|
|
2c1897b373 | ||
|
|
dbb4cfe9d6 | ||
|
|
ffac3c7902 | ||
|
|
9c157de05d | ||
|
|
45e8a4d588 | ||
|
|
43589a744d | ||
|
|
8af30a51b5 | ||
|
|
a46cbb623d | ||
|
|
e02c57d963 | ||
|
|
aa08f8826c | ||
|
|
70c085ba5d | ||
|
|
d5d05e17af | ||
|
|
12c8b1c2bc | ||
|
|
f259063f08 | ||
|
|
b3ed26ac2c |
1
.github/ISSUE_TEMPLATE.md
vendored
@@ -9,6 +9,7 @@
|
||||
|
||||
- **NodeBB version:**
|
||||
- **NodeBB git hash:**
|
||||
- **NodeJS version:**
|
||||
<!-- (to find your git hash, execute `git rev-parse HEAD` from the main NodeBB directory) -->
|
||||
- **Installed NodeBB Plugins:**
|
||||
<!-- (to find installed plugins run ./nodebb plugins) -->
|
||||
|
||||
204
.github/workflows/test.yaml
vendored
Normal file
@@ -0,0 +1,204 @@
|
||||
name: Lint and test
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- develop
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
- develop
|
||||
|
||||
defaults:
|
||||
run:
|
||||
shell: bash
|
||||
|
||||
jobs:
|
||||
test:
|
||||
name: Lint and test
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os: [ubuntu-latest]
|
||||
node: [10, 12, 14]
|
||||
database: [mongo-dev, mongo, redis, postgres]
|
||||
include:
|
||||
# only run coverage once
|
||||
- os: ubuntu-latest
|
||||
node: 14
|
||||
coverage: true
|
||||
# test under development once
|
||||
- database: mongo-dev
|
||||
test_env: development
|
||||
# only run eslint once
|
||||
- os: ubuntu-latest
|
||||
node: 14
|
||||
database: mongo-dev
|
||||
lint: true
|
||||
runs-on: ${{ matrix.os }}
|
||||
env:
|
||||
TEST_ENV: ${{ matrix.test_env || 'production' }}
|
||||
|
||||
services:
|
||||
postgres:
|
||||
image: 'postgres:10-alpine'
|
||||
env:
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_PASSWORD: postgres
|
||||
# Set health checks to wait until postgres has started
|
||||
options: >-
|
||||
--health-cmd pg_isready
|
||||
--health-interval 10s
|
||||
--health-timeout 5s
|
||||
--health-retries 5
|
||||
ports:
|
||||
# Maps port 5432 on service container to the host
|
||||
- 5432:5432
|
||||
|
||||
redis:
|
||||
image: 'redis:2.8.9'
|
||||
# Set health checks to wait until redis has started
|
||||
options: >-
|
||||
--health-cmd "redis-cli ping"
|
||||
--health-interval 10s
|
||||
--health-timeout 5s
|
||||
--health-retries 5
|
||||
ports:
|
||||
# Maps port 6379 on service container to the host
|
||||
- 6379:6379
|
||||
|
||||
mongo:
|
||||
image: 'mongo:3.2'
|
||||
ports:
|
||||
# Maps port 27017 on service container to the host
|
||||
- 27017:27017
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
|
||||
- run: cp install/package.json package.json
|
||||
|
||||
- name: Install Node
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: ${{ matrix.node }}
|
||||
|
||||
- name: NPM Install
|
||||
uses: bahmutov/npm-install@v1
|
||||
with:
|
||||
useLockFile: false
|
||||
|
||||
- name: Setup on MongoDB
|
||||
if: startsWith(matrix.database, 'mongo')
|
||||
env:
|
||||
SETUP: >-
|
||||
{
|
||||
"url": "http://127.0.0.1:4567",
|
||||
"secret": "abcdef",
|
||||
"admin:username": "admin",
|
||||
"admin:email": "test@example.org",
|
||||
"admin:password": "hAN3Eg8W",
|
||||
"admin:password:confirm": "hAN3Eg8W",
|
||||
|
||||
"database": "mongo",
|
||||
"mongo:host": "127.0.0.1",
|
||||
"mongo:port": 27017,
|
||||
"mongo:username": "",
|
||||
"mongo:password": "",
|
||||
"mongo:database": "nodebb"
|
||||
}
|
||||
CI: >-
|
||||
{
|
||||
"host": "127.0.0.1",
|
||||
"port": 27017,
|
||||
"database": "ci_test"
|
||||
}
|
||||
run: |
|
||||
node app --setup="${SETUP}" --ci="${CI}"
|
||||
|
||||
- name: Setup on PostgreSQL
|
||||
if: startsWith(matrix.database, 'postgres')
|
||||
env:
|
||||
SETUP: >-
|
||||
{
|
||||
"url": "http://127.0.0.1:4567",
|
||||
"secret": "abcdef",
|
||||
"admin:username": "admin",
|
||||
"admin:email": "test@example.org",
|
||||
"admin:password": "hAN3Eg8W",
|
||||
"admin:password:confirm": "hAN3Eg8W",
|
||||
|
||||
"database": "postgres",
|
||||
"postgres:host": "127.0.0.1",
|
||||
"postgres:port": 5432,
|
||||
"postgres:username": "postgres",
|
||||
"postgres:password": "postgres",
|
||||
"postgres:database": "nodebb"
|
||||
}
|
||||
CI: >-
|
||||
{
|
||||
"host": "127.0.0.1",
|
||||
"database": "ci_test",
|
||||
"port": 5432,
|
||||
"username": "postgres",
|
||||
"password": "postgres"
|
||||
}
|
||||
run: |
|
||||
node -e "const { Client } = require('pg'); const c = new Client({ host: '127.0.0.1', port: 5432, user: 'postgres', password: 'postgres' }); c.connect().then(() => c.query('CREATE DATABASE nodebb')).then(() => c.query('CREATE DATABASE ci_test')).then(() => c.end())"
|
||||
node app --setup="${SETUP}" --ci="${CI}"
|
||||
|
||||
- name: Setup on Redis
|
||||
if: startsWith(matrix.database, 'redis')
|
||||
env:
|
||||
SETUP: >-
|
||||
{
|
||||
"url": "http://127.0.0.1:4567/forum",
|
||||
"secret": "abcdef",
|
||||
"admin:username": "admin",
|
||||
"admin:email": "test@example.org",
|
||||
"admin:password": "hAN3Eg8W",
|
||||
"admin:password:confirm": "hAN3Eg8W",
|
||||
|
||||
"database": "redis",
|
||||
"redis:host": "127.0.0.1",
|
||||
"redis:port": 6379,
|
||||
"redis:password": "",
|
||||
"redis:database": 0
|
||||
}
|
||||
CI: >-
|
||||
{
|
||||
"host": "127.0.0.1",
|
||||
"database": 1,
|
||||
"port": 6379
|
||||
}
|
||||
run: |
|
||||
node app --setup="${SETUP}" --ci="${CI}"
|
||||
|
||||
- name: Run ESLint
|
||||
if: matrix.lint
|
||||
run: npm run lint
|
||||
|
||||
- name: Node tests
|
||||
run: npm test
|
||||
|
||||
- name: Extract coverage info
|
||||
run: npm run coverage
|
||||
|
||||
- name: Test coverage
|
||||
uses: coverallsapp/github-action@v1.1.2
|
||||
if: matrix.coverage
|
||||
with:
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
flag-name: ${{ matrix.os }}-node-${{ matrix.node }}-db-${{ matrix.database }}
|
||||
parallel: true
|
||||
|
||||
finish:
|
||||
needs: test
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Coveralls Finished
|
||||
uses: coverallsapp/github-action@v1.1.2
|
||||
with:
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
parallel-finished: true
|
||||
1
.gitignore
vendored
@@ -40,6 +40,7 @@ pidfile
|
||||
/public/acp.min.js.map
|
||||
/public/installer.css
|
||||
/public/installer.min.js
|
||||
/public/bootstrap.min.css
|
||||
/public/logo.png
|
||||
|
||||
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio
|
||||
|
||||
47
.travis.yml
@@ -1,47 +0,0 @@
|
||||
services:
|
||||
- mongodb
|
||||
- redis-server
|
||||
- postgresql
|
||||
before_install:
|
||||
- cp install/package.json package.json
|
||||
- sudo apt-get update
|
||||
- sudo apt-get --yes remove postgresql\*
|
||||
- sudo apt-get install -y postgresql-12 postgresql-client-12
|
||||
- sudo cp /etc/postgresql/{9.6,12}/main/pg_hba.conf
|
||||
- sudo service postgresql restart 12
|
||||
before_script:
|
||||
- sleep 15 # wait for mongodb to be ready
|
||||
- "mongo mydb_test --eval 'db.createUser({user:\"travis\", pwd: \"test\", roles: []});'"
|
||||
- sh -c "if [ '$DB' = 'mongodb' ]; then node app --setup=\"{\\\"url\\\":\\\"http://127.0.0.1:4567\\\",\\\"secret\\\":\\\"abcdef\\\",\\\"database\\\":\\\"mongo\\\",\\\"mongo:host\\\":\\\"127.0.0.1\\\",\\\"mongo:port\\\":27017,\\\"mongo:username\\\":\\\"\\\",\\\"mongo:password\\\":\\\"\\\",\\\"mongo:database\\\":0,\\\"admin:username\\\":\\\"admin\\\",\\\"admin:email\\\":\\\"test@example.org\\\",\\\"admin:password\\\":\\\"hAN3Eg8W\\\",\\\"admin:password:confirm\\\":\\\"hAN3Eg8W\\\"}\" --ci=\"{\\\"host\\\":\\\"127.0.0.1\\\",\\\"port\\\":27017,\\\"database\\\":\\\"travis_ci_test\\\"}\"; fi"
|
||||
- sh -c "if [ '$DB' = 'redis' ]; then node app --setup=\"{\\\"url\\\":\\\"http://127.0.0.1:4567/forum\\\",\\\"secret\\\":\\\"abcdef\\\",\\\"database\\\":\\\"redis\\\",\\\"redis:host\\\":\\\"127.0.0.1\\\",\\\"redis:port\\\":6379,\\\"redis:password\\\":\\\"\\\",\\\"redis:database\\\":0,\\\"admin:username\\\":\\\"admin\\\",\\\"admin:email\\\":\\\"test@example.org\\\",\\\"admin:password\\\":\\\"hAN3Eg8W\\\",\\\"admin:password:confirm\\\":\\\"hAN3Eg8W\\\"}\" --ci=\"{\\\"host\\\":\\\"127.0.0.1\\\",\\\"port\\\":6379,\\\"database\\\":1}\"; fi"
|
||||
- sh -c "if [ '$DB' = 'postgres' ]; then psql -c 'create database nodebb;' -U postgres; psql -c 'create database travis_ci_test;' -U postgres; node app --setup=\"{\\\"url\\\":\\\"http://127.0.0.1:4567\\\",\\\"secret\\\":\\\"abcdef\\\",\\\"database\\\":\\\"postgres\\\",\\\"postgres:host\\\":\\\"127.0.0.1\\\",\\\"postgres:port\\\":5433,\\\"postgres:password\\\":\\\"\\\",\\\"postgres:database\\\":\\\"nodebb\\\",\\\"admin:username\\\":\\\"admin\\\",\\\"admin:email\\\":\\\"test@example.org\\\",\\\"admin:password\\\":\\\"hAN3Eg8W\\\",\\\"admin:password:confirm\\\":\\\"hAN3Eg8W\\\"}\" --ci=\"{\\\"host\\\":\\\"127.0.0.1\\\",\\\"port\\\":5433,\\\"username\\\":\\\"postgres\\\",\\\"database\\\":\\\"travis_ci_test\\\"}\"; fi"
|
||||
after_success:
|
||||
- "npm run coveralls"
|
||||
language: node_js
|
||||
sudo: false
|
||||
dist: xenial
|
||||
env:
|
||||
global:
|
||||
- PGUSER=postgres
|
||||
- PGPORT=5433
|
||||
- CXX=g++-4.8
|
||||
jobs:
|
||||
- "DB=mongodb TEST_ENV=production"
|
||||
- "DB=mongodb TEST_ENV=development"
|
||||
- "DB=redis TEST_ENV=production"
|
||||
- "DB=postgres TEST_ENV=production"
|
||||
addons:
|
||||
apt:
|
||||
sources:
|
||||
- ubuntu-toolchain-r-test
|
||||
- mongodb-4.0-xenial
|
||||
packages:
|
||||
- g++-4.8
|
||||
- mongodb-org-server
|
||||
node_js:
|
||||
- "14"
|
||||
- "12"
|
||||
branches:
|
||||
only:
|
||||
- master
|
||||
- develop
|
||||
50
.tx/config
@@ -3300,6 +3300,56 @@ trans.zh_CN = public/language/zh-CN/admin/settings/notifications.json
|
||||
trans.zh_TW = public/language/zh-TW/admin/settings/notifications.json
|
||||
type = KEYVALUEJSON
|
||||
|
||||
[nodebb.admin-settings-api]
|
||||
file_filter = public/language/<lang>/admin/settings/api.json
|
||||
source_file = public/language/en-GB/admin/settings/api.json
|
||||
source_lang = en_GB
|
||||
trans.ar = public/language/ar/admin/settings/api.json
|
||||
trans.bg = public/language/bg/admin/settings/api.json
|
||||
trans.bn = public/language/bn/admin/settings/api.json
|
||||
trans.cs = public/language/cs/admin/settings/api.json
|
||||
trans.da = public/language/da/admin/settings/api.json
|
||||
trans.de = public/language/de/admin/settings/api.json
|
||||
trans.el = public/language/el/admin/settings/api.json
|
||||
trans.en@pirate = public/language/en-x-pirate/admin/settings/api.json
|
||||
trans.en_US = public/language/en-US/admin/settings/api.json
|
||||
trans.es = public/language/es/admin/settings/api.json
|
||||
trans.et = public/language/et/admin/settings/api.json
|
||||
trans.fa_IR = public/language/fa-IR/admin/settings/api.json
|
||||
trans.fi = public/language/fi/admin/settings/api.json
|
||||
trans.fr = public/language/fr/admin/settings/api.json
|
||||
trans.gl = public/language/gl/admin/settings/api.json
|
||||
trans.he = public/language/he/admin/settings/api.json
|
||||
trans.hr = public/language/hr/admin/settings/api.json
|
||||
trans.hu = public/language/hu/admin/settings/api.json
|
||||
trans.id = public/language/id/admin/settings/api.json
|
||||
trans.it = public/language/it/admin/settings/api.json
|
||||
trans.ja = public/language/ja/admin/settings/api.json
|
||||
trans.ko = public/language/ko/admin/settings/api.json
|
||||
trans.lt = public/language/lt/admin/settings/api.json
|
||||
trans.lv = public/language/lv/admin/settings/api.json
|
||||
trans.ms = public/language/ms/admin/settings/api.json
|
||||
trans.nb = public/language/nb/admin/settings/api.json
|
||||
trans.nl = public/language/nl/admin/settings/api.json
|
||||
trans.pl = public/language/pl/admin/settings/api.json
|
||||
trans.pt_BR = public/language/pt-BR/admin/settings/api.json
|
||||
trans.pt_PT = public/language/pt-PT/admin/settings/api.json
|
||||
trans.ro = public/language/ro/admin/settings/api.json
|
||||
trans.ru = public/language/ru/admin/settings/api.json
|
||||
trans.rw = public/language/rw/admin/settings/api.json
|
||||
trans.sc = public/language/sc/admin/settings/api.json
|
||||
trans.sk = public/language/sk/admin/settings/api.json
|
||||
trans.sl = public/language/sl/admin/settings/api.json
|
||||
trans.sr = public/language/sr/admin/settings/api.json
|
||||
trans.sv = public/language/sv/admin/settings/api.json
|
||||
trans.th = public/language/th/admin/settings/api.json
|
||||
trans.tr = public/language/tr/admin/settings/api.json
|
||||
trans.uk = public/language/uk/admin/settings/api.json
|
||||
trans.vi = public/language/vi/admin/settings/api.json
|
||||
trans.zh_CN = public/language/zh-CN/admin/settings/api.json
|
||||
trans.zh_TW = public/language/zh-TW/admin/settings/api.json
|
||||
type = KEYVALUEJSON
|
||||
|
||||
[nodebb.admin-settings-post]
|
||||
file_filter = public/language/<lang>/admin/settings/post.json
|
||||
source_file = public/language/en-GB/admin/settings/post.json
|
||||
|
||||
1440
CHANGELOG.md
11
Gruntfile.js
@@ -143,8 +143,17 @@ module.exports = function (grunt) {
|
||||
if (worker) {
|
||||
worker.kill();
|
||||
}
|
||||
|
||||
const execArgv = [];
|
||||
const inspect = process.argv.find(a => a.startsWith('--inspect'));
|
||||
|
||||
if (inspect) {
|
||||
execArgv.push(inspect);
|
||||
}
|
||||
|
||||
worker = fork('app.js', args, {
|
||||
env: env,
|
||||
env,
|
||||
execArgv,
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -1,15 +1,16 @@
|
||||
# <img alt="NodeBB" src="http://i.imgur.com/mYxPPtB.png" />
|
||||
# 
|
||||
|
||||
[](https://travis-ci.org/NodeBB/NodeBB)
|
||||
[](https://coveralls.io/github/NodeBB/NodeBB?branch=master)
|
||||
[](https://david-dm.org/nodebb/nodebb?path=install)
|
||||
[](https://codeclimate.com/github/NodeBB/NodeBB)
|
||||
|
||||
[**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.
|
||||
[**NodeBB Forum Software**](https://nodebb.org) is powered by Node.js and supports either Redis, MongoDB, or a PostgreSQL database. It utilizes web sockets for instant interactions and real-time notifications. NodeBB has many modern features out of the box such as social network integration and streaming discussions, while still making sure to be compatible with older browsers.
|
||||
|
||||
Additional functionality is enabled through the use of third-party plugins.
|
||||
|
||||
* [Demo & Meta Discussion](http://community.nodebb.org)
|
||||
* [Demo](https://try.nodebb.org)
|
||||
* [Developer Community](http://community.nodebb.org)
|
||||
* [Documentation & Installation Instructions](http://docs.nodebb.org)
|
||||
* [Help translate NodeBB](https://www.transifex.com/projects/p/nodebb/)
|
||||
* [NodeBB Blog](http://blog.nodebb.org)
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
module.exports = {
|
||||
extends: ['@commitlint/config-angular'],
|
||||
rules: {
|
||||
'header-max-length': [1, 'always', 72],
|
||||
'type-enum': [
|
||||
2,
|
||||
'always',
|
||||
|
||||
@@ -86,6 +86,7 @@
|
||||
"notificationType_post-edit": "notification",
|
||||
"notificationType_follow": "notification",
|
||||
"notificationType_new-chat": "notification",
|
||||
"notificationType_new-group-chat": "notification",
|
||||
"notificationType_group-invite": "notification",
|
||||
"notificationType_group-request-membership": "notification",
|
||||
"notificationType_mention": "notification",
|
||||
@@ -113,12 +114,17 @@
|
||||
"email:smtpTransport:pool": false,
|
||||
"hideFullname": 0,
|
||||
"hideEmail": 0,
|
||||
"showFullnameAsDisplayName": 0,
|
||||
"allowGuestHandles": 0,
|
||||
"guestsIncrementTopicViews": 1,
|
||||
"allowGuestReplyNotifications": 1,
|
||||
"incrementTopicViewsInterval": 60,
|
||||
"recentMaxTopics": 200,
|
||||
"disableRecentCategoryFilter": 0,
|
||||
"maximumRelatedTopics": 0,
|
||||
"disableEmailSubscriptions": 0,
|
||||
"emailConfirmInterval": 10,
|
||||
"removeEmailNotificationImages": 0,
|
||||
"inviteExpiration": 7,
|
||||
"digestHour": 17,
|
||||
"passwordExpiryDays": 0,
|
||||
@@ -133,5 +139,10 @@
|
||||
"timeagoCutoff": 30,
|
||||
"necroThreshold": 7,
|
||||
"categoryWatchState": "watching",
|
||||
"submitPluginUsage": 1
|
||||
"submitPluginUsage": 1,
|
||||
"showAverageApprovalTime": true,
|
||||
"autoApproveTime": 0,
|
||||
"maxUserSessions": 10,
|
||||
"useCompression": 0,
|
||||
"updateUrlWithPostIndex": 1
|
||||
}
|
||||
@@ -2,7 +2,7 @@
|
||||
"name": "nodebb",
|
||||
"license": "GPL-3.0",
|
||||
"description": "NodeBB Forum",
|
||||
"version": "1.15.0-beta.29",
|
||||
"version": "1.15.3-beta.0",
|
||||
"homepage": "http://www.nodebb.org",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
@@ -12,10 +12,16 @@
|
||||
"scripts": {
|
||||
"start": "node loader.js",
|
||||
"lint": "npx eslint --cache ./nodebb .",
|
||||
"pretest": "npm run lint",
|
||||
"test": "npx nyc --reporter=html --reporter=text-summary npx mocha",
|
||||
"coverage": "nyc report --reporter=text-lcov > ./coverage/lcov.info",
|
||||
"coveralls": "nyc report --reporter=text-lcov | coveralls && rm -r coverage"
|
||||
},
|
||||
"nyc": {
|
||||
"exclude": [
|
||||
"src/upgrades/*",
|
||||
"test/*"
|
||||
]
|
||||
},
|
||||
"husky": {
|
||||
"hooks": {
|
||||
"pre-commit": "npx lint-staged",
|
||||
@@ -29,19 +35,22 @@
|
||||
]
|
||||
},
|
||||
"dependencies": {
|
||||
"@adactive/bootstrap-tagsinput": "^0.8.2",
|
||||
"ace-builds": "^1.4.9",
|
||||
"archiver": "^5.0.0",
|
||||
"async": "^3.2.0",
|
||||
"autoprefixer": "^10.0.0",
|
||||
"bcryptjs": "2.4.3",
|
||||
"benchpressjs": "2.0.4",
|
||||
"benchpressjs": "2.2.2",
|
||||
"body-parser": "^1.19.0",
|
||||
"bootbox": "4.4.0",
|
||||
"bootstrap": "^3.4.1",
|
||||
"chart.js": "^2.9.3",
|
||||
"cli-graph": "^3.2.2",
|
||||
"clipboard": "^2.0.6",
|
||||
"colors": "^1.4.0",
|
||||
"commander": "^6.0.0",
|
||||
"compare-versions": "3.6.0",
|
||||
"compression": "^1.7.4",
|
||||
"connect-ensure-login": "^0.1.1",
|
||||
"connect-flash": "^0.1.1",
|
||||
@@ -54,7 +63,7 @@
|
||||
"cropperjs": "^1.5.6",
|
||||
"csurf": "^1.11.0",
|
||||
"daemon": "^1.1.0",
|
||||
"diff": "^4.0.2",
|
||||
"diff": "^5.0.0",
|
||||
"express": "^4.17.1",
|
||||
"express-session": "^1.17.0",
|
||||
"express-useragent": "^1.0.13",
|
||||
@@ -63,8 +72,12 @@
|
||||
"html-to-text": "^5.1.1",
|
||||
"ipaddr.js": "^2.0.0",
|
||||
"jquery": "3.5.1",
|
||||
"jsesc": "3.0.1",
|
||||
"json2csv": "5.0.3",
|
||||
"jquery-deserialize": "2.0.0-rc1",
|
||||
"jquery-form": "4.3.0",
|
||||
"jquery-serializeobject": "1.0.0",
|
||||
"jquery-ui": "1.12.1",
|
||||
"jsesc": "3.0.2",
|
||||
"json2csv": "5.0.5",
|
||||
"jsonwebtoken": "^8.5.1",
|
||||
"less": "^3.11.1",
|
||||
"lodash": "^4.17.15",
|
||||
@@ -73,60 +86,67 @@
|
||||
"material-design-lite": "^1.3.0",
|
||||
"mime": "^2.4.4",
|
||||
"mkdirp": "^1.0.4",
|
||||
"mongodb": "3.6.2",
|
||||
"mongodb": "3.6.3",
|
||||
"morgan": "^1.10.0",
|
||||
"mousetrap": "^1.6.5",
|
||||
"@nodebb/bootswatch": "3.4.2",
|
||||
"@nodebb/mubsub": "1.7.0",
|
||||
"@nodebb/socket.io-adapter-mongo": "3.1.0",
|
||||
"@nodebb/mubsub": "1.7.1",
|
||||
"@nodebb/socket.io-adapter-mongo": "3.1.1",
|
||||
"nconf": "^0.10.0",
|
||||
"nodebb-plugin-composer-default": "6.4.2",
|
||||
"nodebb-plugin-composer-default": "6.4.7",
|
||||
"nodebb-plugin-dbsearch": "4.1.2",
|
||||
"nodebb-plugin-emoji": "^3.3.0",
|
||||
"nodebb-plugin-emoji-android": "2.0.0",
|
||||
"nodebb-plugin-markdown": "8.12.1",
|
||||
"nodebb-plugin-mentions": "2.11.0",
|
||||
"nodebb-plugin-mentions": "2.13.5",
|
||||
"nodebb-plugin-soundpack-default": "1.0.0",
|
||||
"nodebb-plugin-spam-be-gone": "0.7.2",
|
||||
"nodebb-rewards-essentials": "0.1.3",
|
||||
"nodebb-theme-lavender": "5.0.13",
|
||||
"nodebb-theme-persona": "10.2.51",
|
||||
"nodebb-theme-slick": "1.2.36",
|
||||
"nodebb-theme-vanilla": "11.2.20",
|
||||
"nodebb-plugin-spam-be-gone": "0.7.6",
|
||||
"nodebb-rewards-essentials": "0.1.4",
|
||||
"nodebb-theme-lavender": "5.0.14",
|
||||
"nodebb-theme-persona": "10.2.81",
|
||||
"nodebb-theme-slick": "1.3.3",
|
||||
"nodebb-theme-vanilla": "11.3.4",
|
||||
"nodebb-widget-essentials": "4.1.2",
|
||||
"nodemailer": "^6.4.6",
|
||||
"nprogress": "0.2.0",
|
||||
"passport": "^0.4.1",
|
||||
"passport-http-bearer": "^1.0.1",
|
||||
"passport-local": "1.0.0",
|
||||
"pg": "^8.0.2",
|
||||
"pg-cursor": "^2.1.9",
|
||||
"postcss": "8.0.6",
|
||||
"postcss": "8.1.7",
|
||||
"postcss-clean": "1.1.0",
|
||||
"promise-polyfill": "^8.1.3",
|
||||
"prompt": "^1.0.0",
|
||||
"redis": "3.0.2",
|
||||
"request": "2.88.2",
|
||||
"request-promise-native": "^1.0.8",
|
||||
"requirejs": "2.3.6",
|
||||
"rimraf": "3.0.2",
|
||||
"rss": "^1.2.2",
|
||||
"sanitize-html": "^2.0.0",
|
||||
"semver": "^7.2.1",
|
||||
"serve-favicon": "^2.5.0",
|
||||
"sharp": "0.26.1",
|
||||
"sharp": "0.26.3",
|
||||
"sitemap": "^6.1.0",
|
||||
"slideout": "1.0.1",
|
||||
"socket.io": "2.3.0",
|
||||
"socket.io-adapter-cluster": "^1.0.1",
|
||||
"socket.io-adapter-postgres": "^1.2.1",
|
||||
"socket.io-client": "2.3.0",
|
||||
"socket.io-client": "2.3.1",
|
||||
"socket.io-redis": "5.4.0",
|
||||
"socketio-wildcard": "2.0.0",
|
||||
"sortablejs": "1.10.2",
|
||||
"spdx-license-list": "^6.1.0",
|
||||
"spider-detector": "2.0.0",
|
||||
"textcomplete": "^0.17.1",
|
||||
"textcomplete.contenteditable": "^0.1.1",
|
||||
"timeago": "^1.6.7",
|
||||
"tinycon": "0.6.8",
|
||||
"toobusy-js": "^0.5.1",
|
||||
"uglify-es": "^3.3.9",
|
||||
"validator": "13.1.17",
|
||||
"visibilityjs": "2.0.2",
|
||||
"winston": "3.3.3",
|
||||
"xml": "^1.0.1",
|
||||
"xregexp": "^4.3.0",
|
||||
@@ -134,21 +154,21 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@apidevtools/swagger-parser": "10.0.2",
|
||||
"@commitlint/cli": "9.1.2",
|
||||
"@commitlint/config-angular": "9.1.2",
|
||||
"@commitlint/cli": "11.0.0",
|
||||
"@commitlint/config-angular": "11.0.0",
|
||||
"coveralls": "3.1.0",
|
||||
"eslint": "7.10.0",
|
||||
"eslint-config-airbnb-base": "14.2.0",
|
||||
"eslint": "7.13.0",
|
||||
"eslint-config-airbnb-base": "14.2.1",
|
||||
"eslint-plugin-import": "2.22.1",
|
||||
"grunt": "1.3.0",
|
||||
"grunt-contrib-watch": "1.1.0",
|
||||
"husky": "4.3.0",
|
||||
"jsdom": "16.4.0",
|
||||
"lint-staged": "10.4.0",
|
||||
"mocha": "8.1.3",
|
||||
"lint-staged": "10.5.1",
|
||||
"mocha": "8.2.1",
|
||||
"mocha-lcov-reporter": "1.3.0",
|
||||
"nyc": "15.1.0",
|
||||
"smtp-server": "3.7.0"
|
||||
"smtp-server": "3.8.0"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/NodeBB/NodeBB/issues"
|
||||
|
||||
298
install/web.js
@@ -1,21 +1,27 @@
|
||||
'use strict';
|
||||
|
||||
var winston = require('winston');
|
||||
var express = require('express');
|
||||
var bodyParser = require('body-parser');
|
||||
var fs = require('fs');
|
||||
var path = require('path');
|
||||
var childProcess = require('child_process');
|
||||
var less = require('less');
|
||||
var async = require('async');
|
||||
var uglify = require('uglify-es');
|
||||
var nconf = require('nconf');
|
||||
var Benchpress = require('benchpressjs');
|
||||
const winston = require('winston');
|
||||
const express = require('express');
|
||||
const bodyParser = require('body-parser');
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const childProcess = require('child_process');
|
||||
const less = require('less');
|
||||
const util = require('util');
|
||||
const lessRenderAsync = util.promisify(
|
||||
(style, opts, cb) => less.render(String(style), opts, cb)
|
||||
);
|
||||
const uglify = require('uglify-es');
|
||||
const nconf = require('nconf');
|
||||
|
||||
var app = express();
|
||||
var server;
|
||||
const Benchpress = require('benchpressjs');
|
||||
const mkdirp = require('mkdirp');
|
||||
const { paths } = require('../src/constants');
|
||||
|
||||
var formats = [
|
||||
const app = express();
|
||||
let server;
|
||||
|
||||
const formats = [
|
||||
winston.format.colorize(),
|
||||
];
|
||||
|
||||
@@ -42,50 +48,52 @@ winston.configure({
|
||||
],
|
||||
});
|
||||
|
||||
var web = module.exports;
|
||||
const web = module.exports;
|
||||
|
||||
var scripts = [
|
||||
const scripts = [
|
||||
'node_modules/jquery/dist/jquery.js',
|
||||
'public/vendor/xregexp/xregexp.js',
|
||||
'public/vendor/xregexp/unicode/unicode-base.js',
|
||||
'node_modules/xregexp/xregexp-all.js',
|
||||
'public/src/modules/slugify.js',
|
||||
'public/src/utils.js',
|
||||
'public/src/installer/install.js',
|
||||
'node_modules/zxcvbn/dist/zxcvbn.js',
|
||||
];
|
||||
|
||||
var installing = false;
|
||||
var success = false;
|
||||
var error = false;
|
||||
var launchUrl;
|
||||
let installing = false;
|
||||
let success = false;
|
||||
let error = false;
|
||||
let launchUrl;
|
||||
|
||||
web.install = function (port) {
|
||||
const viewsDir = path.join(paths.baseDir, 'build/public/templates');
|
||||
|
||||
web.install = async function (port) {
|
||||
port = port || 4567;
|
||||
winston.info('Launching web installer on port ' + port);
|
||||
|
||||
app.use(express.static('public', {}));
|
||||
app.engine('tpl', function (filepath, options, callback) {
|
||||
async.waterfall([
|
||||
function (next) {
|
||||
fs.readFile(filepath, 'utf-8', next);
|
||||
},
|
||||
function (buffer, next) {
|
||||
Benchpress.compileParse(buffer.toString(), options, next);
|
||||
},
|
||||
], callback);
|
||||
filepath = filepath.replace(/\.tpl$/, '.js');
|
||||
|
||||
Benchpress.__express(filepath, options, callback);
|
||||
});
|
||||
app.set('view engine', 'tpl');
|
||||
app.set('views', path.join(__dirname, '../src/views'));
|
||||
app.set('views', viewsDir);
|
||||
app.use(bodyParser.urlencoded({
|
||||
extended: true,
|
||||
}));
|
||||
|
||||
async.parallel([compileLess, compileJS, copyCSS, loadDefaults], function (err) {
|
||||
if (err) {
|
||||
winston.error(err.stack);
|
||||
}
|
||||
try {
|
||||
await Promise.all([
|
||||
compileTemplate(),
|
||||
compileLess(),
|
||||
compileJS(),
|
||||
copyCSS(),
|
||||
loadDefaults(),
|
||||
]);
|
||||
setupRoutes();
|
||||
launchExpress(port);
|
||||
});
|
||||
} catch (err) {
|
||||
winston.error(err.stack);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -180,120 +188,116 @@ function install(req, res) {
|
||||
});
|
||||
}
|
||||
|
||||
function launch(req, res) {
|
||||
res.json({});
|
||||
server.close();
|
||||
req.setTimeout(0);
|
||||
var child;
|
||||
async function launch(req, res) {
|
||||
try {
|
||||
res.json({});
|
||||
server.close();
|
||||
req.setTimeout(0);
|
||||
var child;
|
||||
|
||||
if (!nconf.get('launchCmd')) {
|
||||
child = childProcess.spawn('node', ['loader.js'], {
|
||||
detached: true,
|
||||
stdio: ['ignore', 'ignore', 'ignore'],
|
||||
});
|
||||
if (!nconf.get('launchCmd')) {
|
||||
child = childProcess.spawn('node', ['loader.js'], {
|
||||
detached: true,
|
||||
stdio: ['ignore', 'ignore', 'ignore'],
|
||||
});
|
||||
|
||||
console.log('\nStarting NodeBB');
|
||||
console.log(' "./nodebb stop" to stop the NodeBB server');
|
||||
console.log(' "./nodebb log" to view server output');
|
||||
console.log(' "./nodebb restart" to restart NodeBB');
|
||||
} else {
|
||||
// Use launchCmd instead, if specified
|
||||
child = childProcess.exec(nconf.get('launchCmd'), {
|
||||
detached: true,
|
||||
stdio: ['ignore', 'ignore', 'ignore'],
|
||||
});
|
||||
}
|
||||
|
||||
var filesToDelete = [
|
||||
'installer.css',
|
||||
'installer.min.js',
|
||||
'bootstrap.min.css',
|
||||
];
|
||||
|
||||
async.each(filesToDelete, function (filename, next) {
|
||||
fs.unlink(path.join(__dirname, '../public', filename), next);
|
||||
}, function (err) {
|
||||
if (err) {
|
||||
winston.warn('Unable to remove installer files');
|
||||
console.log('\nStarting NodeBB');
|
||||
console.log(' "./nodebb stop" to stop the NodeBB server');
|
||||
console.log(' "./nodebb log" to view server output');
|
||||
console.log(' "./nodebb restart" to restart NodeBB');
|
||||
} else {
|
||||
// Use launchCmd instead, if specified
|
||||
child = childProcess.exec(nconf.get('launchCmd'), {
|
||||
detached: true,
|
||||
stdio: ['ignore', 'ignore', 'ignore'],
|
||||
});
|
||||
}
|
||||
|
||||
const filesToDelete = [
|
||||
'installer.css',
|
||||
'installer.min.js',
|
||||
'bootstrap.min.css',
|
||||
];
|
||||
await Promise.all(
|
||||
filesToDelete.map(
|
||||
filename => fs.promises.unlink(path.join(__dirname, '../public', filename))
|
||||
)
|
||||
);
|
||||
child.unref();
|
||||
process.exit(0);
|
||||
});
|
||||
}
|
||||
|
||||
function compileLess(callback) {
|
||||
var installSrc = path.join(__dirname, '../public/less/install.less');
|
||||
fs.readFile(installSrc, function (err, style) {
|
||||
if (err) {
|
||||
return winston.error('Unable to read LESS install file: ', err.stack);
|
||||
}
|
||||
|
||||
less.render(style.toString(), {
|
||||
filename: path.resolve(installSrc),
|
||||
}, function (err, css) {
|
||||
if (err) {
|
||||
return winston.error('Unable to compile LESS: ', err.stack);
|
||||
}
|
||||
|
||||
fs.writeFile(path.join(__dirname, '../public/installer.css'), css.css, callback);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function compileJS(callback) {
|
||||
var code = '';
|
||||
async.eachSeries(scripts, function (srcPath, next) {
|
||||
fs.readFile(path.join(__dirname, '..', srcPath), function (err, buffer) {
|
||||
if (err) {
|
||||
return next(err);
|
||||
}
|
||||
|
||||
code += buffer.toString();
|
||||
next();
|
||||
});
|
||||
}, function (err) {
|
||||
if (err) {
|
||||
return callback(err);
|
||||
}
|
||||
try {
|
||||
var minified = uglify.minify(code, {
|
||||
compress: false,
|
||||
});
|
||||
if (!minified.code) {
|
||||
return callback(new Error('[[error:failed-to-minify]]'));
|
||||
}
|
||||
fs.writeFile(path.join(__dirname, '../public/installer.min.js'), minified.code, callback);
|
||||
} catch (e) {
|
||||
callback(e);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function copyCSS(next) {
|
||||
async.waterfall([
|
||||
function (next) {
|
||||
fs.readFile(path.join(__dirname, '../node_modules/bootstrap/dist/css/bootstrap.min.css'), 'utf8', next);
|
||||
},
|
||||
function (src, next) {
|
||||
fs.writeFile(path.join(__dirname, '../public/bootstrap.min.css'), src, next);
|
||||
},
|
||||
], next);
|
||||
}
|
||||
|
||||
function loadDefaults(next) {
|
||||
var setupDefaultsPath = path.join(__dirname, '../setup.json');
|
||||
fs.access(setupDefaultsPath, fs.constants.F_OK | fs.constants.R_OK, function (err) {
|
||||
if (err) {
|
||||
// setup.json not found or inaccessible, proceed with no defaults
|
||||
return setImmediate(next);
|
||||
}
|
||||
|
||||
winston.info('[installer] Found setup.json, populating default values');
|
||||
nconf.file({
|
||||
file: setupDefaultsPath,
|
||||
});
|
||||
|
||||
next();
|
||||
} catch (err) {
|
||||
winston.error(err.stack);
|
||||
throw err;
|
||||
}
|
||||
}
|
||||
|
||||
// this is necessary because otherwise the compiled templates won't be available on a clean install
|
||||
async function compileTemplate() {
|
||||
const sourceFile = path.join(__dirname, '../src/views/install/index.tpl');
|
||||
const destTpl = path.join(viewsDir, 'install/index.tpl');
|
||||
const destJs = path.join(viewsDir, 'install/index.js');
|
||||
|
||||
const source = await fs.promises.readFile(sourceFile, 'utf8');
|
||||
|
||||
const [compiled] = await Promise.all([
|
||||
Benchpress.precompile(source, { filename: 'install/index.tpl' }),
|
||||
mkdirp(path.dirname(destJs)),
|
||||
]);
|
||||
|
||||
await Promise.all([
|
||||
fs.promises.writeFile(destJs, compiled),
|
||||
fs.promises.writeFile(destTpl, source),
|
||||
]);
|
||||
}
|
||||
|
||||
async function compileLess() {
|
||||
try {
|
||||
const installSrc = path.join(__dirname, '../public/less/install.less');
|
||||
const style = await fs.promises.readFile(installSrc);
|
||||
const css = await lessRenderAsync(style, { filename: path.resolve(installSrc) });
|
||||
await fs.promises.writeFile(path.join(__dirname, '../public/installer.css'), css.css);
|
||||
} catch (err) {
|
||||
winston.error('Unable to compile LESS: \n' + err.stack);
|
||||
throw err;
|
||||
}
|
||||
}
|
||||
|
||||
async function compileJS() {
|
||||
let code = '';
|
||||
|
||||
for (const srcPath of scripts) {
|
||||
// eslint-disable-next-line no-await-in-loop
|
||||
const buffer = await fs.promises.readFile(path.join(__dirname, '..', srcPath));
|
||||
code += buffer.toString();
|
||||
}
|
||||
const minified = uglify.minify(code, {
|
||||
compress: false,
|
||||
});
|
||||
if (!minified.code) {
|
||||
throw new Error('[[error:failed-to-minify]]');
|
||||
}
|
||||
await fs.promises.writeFile(path.join(__dirname, '../public/installer.min.js'), minified.code);
|
||||
}
|
||||
|
||||
async function copyCSS() {
|
||||
const src = await fs.promises.readFile(
|
||||
path.join(__dirname, '../node_modules/bootstrap/dist/css/bootstrap.min.css'), 'utf8'
|
||||
);
|
||||
await fs.promises.writeFile(path.join(__dirname, '../public/bootstrap.min.css'), src);
|
||||
}
|
||||
|
||||
async function loadDefaults() {
|
||||
const setupDefaultsPath = path.join(__dirname, '../setup.json');
|
||||
try {
|
||||
await fs.promises.access(setupDefaultsPath, fs.constants.F_OK | fs.constants.R_OK);
|
||||
} catch (err) {
|
||||
// setup.json not found or inaccessible, proceed with no defaults
|
||||
if (err.code !== 'ENOENT') {
|
||||
throw err;
|
||||
}
|
||||
}
|
||||
winston.info('[installer] Found setup.json, populating default values');
|
||||
nconf.file({
|
||||
file: setupDefaultsPath,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
'use strict';
|
||||
|
||||
var nconf = require('nconf');
|
||||
var nconf = require('nconf');
|
||||
var fs = require('fs');
|
||||
var url = require('url');
|
||||
var path = require('path');
|
||||
@@ -18,7 +18,7 @@ nconf.argv().env().file({
|
||||
file: pathToConfig,
|
||||
});
|
||||
|
||||
var pidFilePath = path.join(__dirname, 'pidfile');
|
||||
var pidFilePath = path.join(__dirname, 'pidfile');
|
||||
|
||||
var outputLogFilePath = path.join(__dirname, nconf.get('logFile') || 'logs/output.log');
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 5.9 KiB After Width: | Height: | Size: 13 KiB |
16
public/images/logo.svg
Normal file
@@ -0,0 +1,16 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="321" height="75" viewBox="0 0 321 75">
|
||||
<defs>
|
||||
<radialGradient id="nodebb-a" cx="65.599%" cy="0%" r="169.036%" fx="65.599%" fy="0%" gradientTransform="matrix(-.5183 .5916 -.38031 -.80624 .996 -.388)">
|
||||
<stop offset="0%" stop-color="#2A6CBE"/>
|
||||
<stop offset="38.688%" stop-color="#2062BC"/>
|
||||
<stop offset="49.182%" stop-color="#1F5FBC"/>
|
||||
<stop offset="66.583%" stop-color="#1C5ABD"/>
|
||||
<stop offset="85.354%" stop-color="#1956BC"/>
|
||||
<stop offset="100%" stop-color="#1851BE"/>
|
||||
</radialGradient>
|
||||
</defs>
|
||||
<g fill="none" transform="translate(1 1)">
|
||||
<path fill="#000306" stroke="#000306" stroke-width=".275" d="M195.810017,20 C210.691849,20 221.256813,28.7272272 221.484017,45.845679 C221.490864,46.3615394 221.461776,47.1194739 221.396754,48.1194827 C221.328352,49.1714504 220.455158,49.9897119 219.400969,49.9897119 L179.110557,49.9897119 C179.110557,56.6336943 182.723978,64.2757202 196.378026,64.2757202 C204.088827,64.2757202 211.625406,61.928339 218.987763,57.2335766 L219.553745,56.8677968 C220.246813,56.4139645 221.17656,56.6079034 221.630392,57.3009716 C221.757029,57.4943637 221.837254,57.7144077 221.864806,57.943925 C222.131013,60.1615294 222.004084,61.5832211 221.484017,62.2089999 C220.452051,63.4507301 210.901843,73 196.378026,73 C180.58738,73 169,61.8765432 169,46.3909465 C169,31.3415638 180.019372,20 195.810017,20 Z M162.92733,0 C164.031899,-4.2495073e-16 164.92733,0.8954305 164.92733,2 L164.928075,44.1266361 C164.975781,44.8118124 165,45.5058194 165,46.2079256 C165,61.5334332 153.460581,73 138,73 C122.427386,73 111,61.5334332 111,46.2079256 C111,30.882418 122.427386,19.4158511 138,19.4158511 C144.981278,19.4158511 151.163029,21.7538895 155.843826,25.7295173 L155.843557,4.54188628 C155.843557,2.03347175 157.877029,4.60788274e-16 160.385444,0 L162.92733,0 Z M81,20 C96.4605809,20 108,31.3415638 108,46.5 C108,61.6584362 96.4605809,73 81,73 C65.4273859,73 54,61.6584362 54,46.5 C54,31.3415638 65.4273859,20 81,20 Z M27.324263,20 C41.6099773,20 50,29.1649049 50,41.7801268 L50,67.5 C50,69.4329966 48.4329966,71 46.5,71 L42.2494331,71 C41.1448636,71 40.2494331,70.1045695 40.2494331,69 L40.2494331,42.5348837 C40.2494331,34.3403805 35.8276644,28.6257928 26.3038549,28.6257928 C10.0816327,28.6257928 9.75718821,35.7795705 9.75069932,44.6831843 L9.75056689,71 L2,71 C0.8954305,71 1.3527075e-16,70.1045695 0,69 L0,35.2932975 L0,35.2932975 C0,24.3935718 19.1609977,20 27.324263,20 Z M81,28.7242798 C70.8049793,28.7242798 63.6348548,36.4670782 63.6348548,46.5 C63.6348548,56.3148148 70.8049793,64.2757202 81,64.2757202 C91.1950207,64.2757202 98.3651452,56.3148148 98.3651452,46.5 C98.3651452,36.4670782 91.1950207,28.7242798 81,28.7242798 Z M138,28.2362872 C127.804979,28.2362872 120.634855,36.0644241 120.634855,46.2079256 C120.634855,56.1309161 127.804979,64.179564 138,64.179564 C148.195021,64.179564 155.365145,56.1309161 155.365145,46.2079256 C155.365145,36.0644241 148.195021,28.2362872 138,28.2362872 Z M195.810017,28.7242798 C186.721876,28.7242798 180.473779,33.9588477 179.224159,41.8106996 L211.259858,41.8106996 C210.010238,33.9588477 204.443752,28.7242798 195.810017,28.7242798 Z"/>
|
||||
<path fill="url(#nodebb-a)" d="M277,19 L276.999615,57.7303365 C276.99251,64.180962 276.88949,68.6242617 276.88949,73 L276.88949,73 L255.649055,73 C242.962262,73 236,67.06 236,57.7257143 C236,51.4771429 239.558488,46.9257143 245.1283,45.0742857 C240.564149,43.1457143 237.779243,38.8257143 237.779243,33.5028571 C237.779243,24.8628571 244.664149,19 256.732074,19 L256.732074,19 L277,19 Z M299.267926,19 C311.335851,19 318.220757,24.8628571 318.220757,33.5028571 C318.220757,38.8257143 315.435851,43.1457143 310.8717,45.0742857 C316.441512,46.9257143 320,51.4771429 320,57.7257143 C320,67.06 313.037738,73 300.350945,73 L279.11051,73 L279.11051,73 C279.11051,68.6242617 279.00749,64.180962 279.000385,57.7303365 L279,19 L299.267926,19 Z M266.092452,49.8571429 L256.499999,49.8571429 C250.156602,49.8571429 246.984904,52.2485714 246.984904,56.9542857 C246.984904,61.8914286 249.924527,64.36 255.726414,64.36 L255.726414,64.36 L260.754716,64.36 C264.777358,64.36 266.092452,62.4314286 266.092452,56.5685714 L266.092452,56.5685714 L266.092452,49.8571429 Z M299.500001,49.8571429 L289.907548,49.8571429 L289.907548,56.5685714 C289.907548,62.4314286 291.222642,64.36 295.245284,64.36 L300.273586,64.36 C306.075473,64.36 309.015096,61.8914286 309.015096,56.9542857 C309.015096,52.2485714 305.843398,49.8571429 299.500001,49.8571429 Z M266.169811,27.64 L257.350942,27.64 C251.703772,27.64 248.764149,30.1857143 248.764149,34.5057143 C248.764149,38.8257143 251.703772,41.3714286 257.350942,41.3714286 L257.350942,41.3714286 L266.169811,41.3714286 L266.169811,27.64 Z M298.649058,27.64 L289.830189,27.64 L289.830189,41.3714286 L298.649058,41.3714286 C304.296228,41.3714286 307.235851,38.8257143 307.235851,34.5057143 C307.235851,30.1857143 304.296228,27.64 298.649058,27.64 Z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.9 KiB |
BIN
public/images/logo@3x.png
Normal file
|
After Width: | Height: | Size: 60 KiB |
BIN
public/images/touch/144.png
Normal file
|
After Width: | Height: | Size: 6.5 KiB |
BIN
public/images/touch/192.png
Normal file
|
After Width: | Height: | Size: 9.9 KiB |
BIN
public/images/touch/36.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
public/images/touch/48.png
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
public/images/touch/512.png
Normal file
|
After Width: | Height: | Size: 76 KiB |
BIN
public/images/touch/72.png
Normal file
|
After Width: | Height: | Size: 3.0 KiB |
BIN
public/images/touch/96.png
Normal file
|
After Width: | Height: | Size: 4.0 KiB |
BIN
public/images/ui-bg_flat_0_aaaaaa_40x100.png
Normal file
|
After Width: | Height: | Size: 86 B |
BIN
public/images/ui-icons_444444_256x240.png
Normal file
|
After Width: | Height: | Size: 3.7 KiB |
BIN
public/images/ui-icons_555555_256x240.png
Normal file
|
After Width: | Height: | Size: 3.7 KiB |
BIN
public/images/ui-icons_777620_256x240.png
Normal file
|
After Width: | Height: | Size: 3.7 KiB |
BIN
public/images/ui-icons_777777_256x240.png
Normal file
|
After Width: | Height: | Size: 3.7 KiB |
BIN
public/images/ui-icons_cc0000_256x240.png
Normal file
|
After Width: | Height: | Size: 3.7 KiB |
BIN
public/images/ui-icons_ffffff_256x240.png
Normal file
|
After Width: | Height: | Size: 3.7 KiB |
@@ -1,11 +1,6 @@
|
||||
{
|
||||
"post-cache": "التخزين المؤقت للمشاركات",
|
||||
"posts-in-cache": "المشاركات المخزنة مؤقتاً",
|
||||
"average-post-size": "متوسط حجم المشاركة",
|
||||
"length-to-max": "الطول / أقصى حد",
|
||||
"percent-full": "1% كاملة",
|
||||
"post-cache-size": "حجم التخزين المؤقت للمشاركات",
|
||||
"items-in-cache": "العناصر في التخزين المؤقت",
|
||||
"control-panel": "لوحة التحكم",
|
||||
"update-settings": "تحديث إعدادات التخزين المؤقت"
|
||||
"items-in-cache": "العناصر في التخزين المؤقت"
|
||||
}
|
||||
@@ -9,6 +9,7 @@
|
||||
"upload-files": "Upload Files",
|
||||
"signature": "Signature",
|
||||
"ban": "Ban",
|
||||
"invite": "Invite",
|
||||
"search-content": "Search Content",
|
||||
"search-users": "Search Users",
|
||||
"search-tags": "Search Tags",
|
||||
@@ -48,5 +49,6 @@
|
||||
"alert.confirm-copyToAllGroup": "Are you sure you wish to apply this group's privilege set to <strong>all categories</strong>?",
|
||||
"alert.confirm-copyToChildren": "Are you sure you wish to apply this privilege set to <strong>all descendant (child) categories</strong>?",
|
||||
"alert.confirm-copyToChildrenGroup": "Are you sure you wish to apply this group's privilege set to <strong>all descendant (child) categories</strong>?",
|
||||
"alert.no-undo": "<em>This action cannot be undone.</em>"
|
||||
"alert.no-undo": "<em>This action cannot be undone.</em>",
|
||||
"alert.admin-warning": "Administrators implicitly get all privileges"
|
||||
}
|
||||
@@ -20,16 +20,10 @@
|
||||
"add-group": "Add Group",
|
||||
"invite": "Invite",
|
||||
"new": "New User",
|
||||
|
||||
"pills.latest": "Latest Users",
|
||||
"filter-by": "Filter by",
|
||||
"pills.unvalidated": "Not Validated",
|
||||
"pills.no-posts": "No Posts",
|
||||
"pills.top-posters": "Top Posters",
|
||||
"pills.top-rep": "Most Reputation",
|
||||
"pills.inactive": "Inactive",
|
||||
"pills.flagged": "Most Flagged",
|
||||
"pills.validated": "Validated",
|
||||
"pills.banned": "Banned",
|
||||
"pills.search": "User Search",
|
||||
|
||||
"50-per-page": "50 per page",
|
||||
"100-per-page": "100 per page",
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
"settings/pagination": "ترقيم الصفحات",
|
||||
"settings/tags": "الكلمات المفتاحية",
|
||||
"settings/notifications": "التنبيهات",
|
||||
"settings/api": "API Access",
|
||||
"settings/sounds": "Sounds",
|
||||
"settings/social": "Social",
|
||||
"settings/cookies": "Cookies",
|
||||
|
||||
@@ -36,5 +36,8 @@
|
||||
|
||||
"analytics.settings": "Analytics Settings",
|
||||
"analytics.max-cache": "Analytics Cache Max Value",
|
||||
"analytics.max-cache-help": "On high-traffic installs, the cache could be exhausted continuously if there are more concurrent active users than the Max Cache value. (Restart required)"
|
||||
"analytics.max-cache-help": "On high-traffic installs, the cache could be exhausted continuously if there are more concurrent active users than the Max Cache value. (Restart required)",
|
||||
"compression.settings": "Compression Settings",
|
||||
"compression.enable": "Enable Compression",
|
||||
"compression.help": "This setting enables gzip compression. For a high-traffic website in production, the best way to put compression in place is to implement it at a reverse proxy level. You can enable it here for testing purposes."
|
||||
}
|
||||
12
public/language/ar/admin/settings/api.json
Normal file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"tokens": "Tokens",
|
||||
"lead-text": "From this page you can configure access to the Write API in NodeBB.",
|
||||
"intro": "By default, the Write API authenticates users based on their session cookie, but NodeBB also supports Bearer authentication via tokens generated via this page.",
|
||||
"docs": "Click here to access the full API specification",
|
||||
|
||||
"uid": "User ID",
|
||||
"uid-help-text": "Specify a User ID to associate with this token. If the user ID is <code>0</code>, it will be considered a <em>master</em> token, which can assume the identity of other users based on the <code>_uid</code> parameter",
|
||||
"description": "Description",
|
||||
"no-description": "No description specified.",
|
||||
"token-on-save": "Token will be generated once form is saved"
|
||||
}
|
||||
@@ -8,5 +8,6 @@
|
||||
"consent.blank-localised-default": "Leave blank to use NodeBB localised defaults",
|
||||
"settings": "Settings",
|
||||
"cookie-domain": "Session cookie domain",
|
||||
"max-user-sessions": "Max active sessions per user",
|
||||
"blank-default": "Leave blank for default"
|
||||
}
|
||||
@@ -4,7 +4,7 @@
|
||||
"address-help": "The following email address refers to the email that the recipient will see in the \"From\" and \"Reply To\" fields.",
|
||||
"from": "From Name",
|
||||
"from-help": "The from name to display in the email.",
|
||||
|
||||
|
||||
"smtp-transport": "SMTP Transport",
|
||||
"smtp-transport.enabled": "Use an external email server to send emails",
|
||||
"smtp-transport-help": "You can select from a list of well-known services or enter a custom one.",
|
||||
@@ -35,5 +35,7 @@
|
||||
"subscriptions": "Email Digests",
|
||||
"subscriptions.disable": "Disable email digests",
|
||||
"subscriptions.hour": "Digest Hour",
|
||||
"subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. <code>0</code> for midnight, <code>17</code> for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.<br /> The approximate server time is: <span id=\"serverTime\"></span><br /> The next daily digest is scheduled to be sent <span id=\"nextDigestTime\"></span>"
|
||||
"subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. <code>0</code> for midnight, <code>17</code> for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.<br /> The approximate server time is: <span id=\"serverTime\"></span><br /> The next daily digest is scheduled to be sent <span id=\"nextDigestTime\"></span>",
|
||||
"notifications.settings": "Email notification settings",
|
||||
"notifications.remove-images": "Remove images from email notifications"
|
||||
}
|
||||
@@ -1,5 +1,7 @@
|
||||
{
|
||||
"handles": "Guest Handles",
|
||||
"settings": "Settings",
|
||||
"handles.enabled": "Allow guest handles",
|
||||
"handles.enabled-help": "This option exposes a new field that allows guests to pick a name to associate with each post they make. If disabled, they will simply be called \"Guest\""
|
||||
"handles.enabled-help": "This option exposes a new field that allows guests to pick a name to associate with each post they make. If disabled, they will simply be called \"Guest\"",
|
||||
"topic-views.enabled": "Allow guests to increase topic view counts",
|
||||
"reply-notifications.enabled": "Allow guests to generate reply notifications"
|
||||
}
|
||||
@@ -34,6 +34,8 @@
|
||||
"timestamp.cut-off-help": "Dates & times will be shown in a relative manner (e.g. \"3 hours ago\" / \"5 days ago\"), and localised into various\n\t\t\t\t\tlanguages. After a certain point, this text can be switched to display the localised date itself\n\t\t\t\t\t(e.g. 5 Nov 2016 15:30).<br /><em>(Default: <code>30</code>, or one month). Set to 0 to always display dates, leave blank to always display relative times.</em>",
|
||||
"timestamp.necro-threshold": "Necro Threshold (in days)",
|
||||
"timestamp.necro-threshold-help": "A message will be shown between posts if the time between them is longer than the necro threshold. (Default: <code>7</code>, or one week). Set to 0 to disable.</em>",
|
||||
"timestamp.topic-views-interval": "Increment topic views interval (in minutes)",
|
||||
"timestamp.topic-views-interval-help": "Topic views will only increment once every X minutes as defined by this setting.",
|
||||
"teaser": "Teaser Post",
|
||||
"teaser.last-post": "Last – Show the latest post, including the original post, if no replies",
|
||||
"teaser.last-reply": "Last – Show the latest reply, or a \"No replies\" placeholder if no replies",
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
"allow-account-deletion": "السماح بحذف الحساب",
|
||||
"hide-fullname": "إخفاء الإسم الكامل عن المستخدمين",
|
||||
"hide-email": "إخفاء البريد الإلكتروني عن المستخدمين",
|
||||
"show-fullname-as-displayname": "Show user's full name as their display name if available",
|
||||
"themes": "القوالب",
|
||||
"disable-user-skins": "منع المستخدمين من اختيار سمة مخصص",
|
||||
"account-protection": "حماية الحساب",
|
||||
@@ -43,6 +44,9 @@
|
||||
"registration-type.disabled": "لا يوجد تسجيل",
|
||||
"registration-type.help": "Normal - Users can register from the /register page.<br/>\nInvite Only - Users can invite others from the <a href=\"%1/users\" target=\"_blank\">users</a> page.<br/>\nAdmin Invite Only - Only administrators can invite others from <a href=\"%1/users\" target=\"_blank\">users</a> and <a href=\"%1/admin/manage/users\">admin/manage/users</a> pages.<br/>\nNo registration - No user registration.<br/>",
|
||||
"registration-approval-type.help": "Normal - Users are registered immediately.<br/>\nAdmin Approval - User registrations are placed in an <a href=\"%1/admin/manage/registration\">approval queue</a> for administrators.<br/>\nAdmin Approval for IPs - Normal for new users, Admin Approval for IP addresses that already have an account.<br/>",
|
||||
"registration-queue-auto-approve-time": "Automatic Approval Time",
|
||||
"registration-queue-auto-approve-time-help": "Hours before user is approved automatically. 0 to disable.",
|
||||
"registration-queue-show-average-time": "Show users average time it takes to approve a new user",
|
||||
"registration.max-invites": "الحد الأقصى للدعوات لكل عضو",
|
||||
"max-invites": "الحد الأقصى للدعوات لكل عضو",
|
||||
"max-invites-help": "0 لعدم تحديد قيود، الإدارة تحصل على دعوات لامحدودة <br> هذا الخيار يعمل فقط عند تحديد خيار \"بالدعوات فقط\"",
|
||||
@@ -62,6 +66,7 @@
|
||||
"restrict-chat": "السماح فقط برسائل الدردشة من المستخدمين الذين أتبعهم",
|
||||
"outgoing-new-tab": "Open outgoing links in new tab",
|
||||
"topic-search": "Enable In-Topic Searching",
|
||||
"update-url-with-post-index": "Update url with post index while browsing topics",
|
||||
"digest-freq": "Subscribe to Digest",
|
||||
"digest-freq.off": "Off",
|
||||
"digest-freq.daily": "Daily",
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
"sort-upvotes": "Most upvotes",
|
||||
"sort-replies": "Most replies",
|
||||
|
||||
"modal-title": "Report Inappropriate Content",
|
||||
"modal-title": "Report Content",
|
||||
"modal-body": "Please specify your reason for flagging %1 %2 for review. Alternatively, use one of the quick report buttons if applicable.",
|
||||
"modal-reason-spam": "Spam",
|
||||
"modal-reason-offensive": "Offensive",
|
||||
|
||||
@@ -35,6 +35,8 @@
|
||||
"details.member_count": "عدد اﻷعضاء",
|
||||
"details.creation_date": "تاريخ الإنشاء",
|
||||
"details.description": "الوصف",
|
||||
"details.member-post-cids": "Categories to display posts from",
|
||||
"details.member-post-cids-help": "<strong>Note</strong>: Selecting no categories will assume all categories are included. Use <code>ctrl</code> and <code>shift</code> to select multiple options.",
|
||||
"details.badge_preview": "معاينة الوسام",
|
||||
"details.change_icon": "تغيير الأيقونة",
|
||||
"details.change_label_colour": "Change Label Colour",
|
||||
|
||||
@@ -60,6 +60,7 @@
|
||||
"notificationType_post-edit": "When a post is edited in a topic you are watching",
|
||||
"notificationType_follow": "When someone starts following you",
|
||||
"notificationType_new-chat": "When you receive a chat message",
|
||||
"notificationType_new-group-chat": "When you receive a group chat message",
|
||||
"notificationType_group-invite": "When you receive a group invite",
|
||||
"notificationType_group-request-membership": "When someone requests to join a group you own",
|
||||
"notificationType_new-register": "When someone gets added to registration queue",
|
||||
|
||||
@@ -18,6 +18,8 @@
|
||||
"agree_to_terms_of_use": "أوافق على شروط الاستخدام",
|
||||
"terms_of_use_error": "يجب عليك الموافقة على شروط الاستخدام",
|
||||
"registration-added-to-queue": "تمت إضافتك في قائمة الإنتضار. ستتلقى رسالة إلكترونية عند الموافقة على تسجيلك من قبل الإدارة.",
|
||||
"registration-queue-average-time": "Our average time for approving memberships is %1 hours %2 minutes.",
|
||||
"registration-queue-auto-approve-time": "Your membership to this forum will be fully activated in up to %1 hours.",
|
||||
"interstitial.intro": "نحتاج إلى بعض المعلومات الإضافية قبل أن نتمكن من إنشاء حسابك.",
|
||||
"interstitial.errors-found": "تعذر علينا إتمام عملية التسجيل:",
|
||||
"gdpr_agree_data": "I consent to the collection and processing of my personal information on this website.",
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
"locked": "مقفل",
|
||||
"pinned": "مثبت",
|
||||
"moved": "منقول",
|
||||
"moved-from": "Moved from %1",
|
||||
"copy-ip": "Copy IP",
|
||||
"ban-ip": "Ban IP",
|
||||
"view-history": "Edit History",
|
||||
@@ -79,7 +80,9 @@
|
||||
"thread_tools.purge_confirm": "هل أنت متأكد أنك تريد تطهير هذا الموضوع؟",
|
||||
"thread_tools.merge_topics": "Merge Topics",
|
||||
"thread_tools.merge": "Merge",
|
||||
"topic_move_success": "This topic will be moved shortly. Click here to undo.",
|
||||
"topic_move_success": "This topic will be moved to \"%1\" shortly. Click here to undo.",
|
||||
"topic_move_multiple_success": "These topics will be moved to \"%1\" shortly. Click here to undo.",
|
||||
"topic_move_all_success": "All topics will be moved to \"%1\" shortly. Click here to undo.",
|
||||
"topic_move_undone": "Topic move undone",
|
||||
"topic_move_posts_success": "Posts will be moved shortly. Click here to undo.",
|
||||
"topic_move_posts_undone": "Post move undone",
|
||||
|
||||
@@ -123,6 +123,7 @@
|
||||
"open_links_in_new_tab": "فتح الروابط الخارجية في نافدة جديدة",
|
||||
"enable_topic_searching": "تفعيل خاصية البحث داخل المواضيع",
|
||||
"topic_search_help": "إذا قمت بتفعيل ميزة البحث في-الموضوع، سيتم تجاوز الخيار الافتراضي للمتصفح مما يؤدي للبحث بكامل الموضوع بدلا عن البحث في الجزء الظاهر في الشاشة.",
|
||||
"update_url_with_post_index": "Update url with post index while browsing topics",
|
||||
"scroll_to_my_post": "بعد اضافة رد على المشاركة, قم بإظهار المشاركة",
|
||||
"follow_topics_you_reply_to": "متابعة المواضيع التي تقوم بالرد عليها",
|
||||
"follow_topics_you_create": "متابعة المواضيع التي تقوم بإنشائها",
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
"online-only": "المتصلون فقط",
|
||||
"invite": "دعوة",
|
||||
"prompt-email": "Emails:",
|
||||
"groups-to-join": "Groups to be joined when invite is accepted:",
|
||||
"invitation-email-sent": "تم إرسال دعوة بالبريد الإلكتروني إلى %1",
|
||||
"user_list": "قائمة اﻷعضاء",
|
||||
"recent_topics": "أحدث المواضيع",
|
||||
|
||||
@@ -1,11 +1,6 @@
|
||||
{
|
||||
"post-cache": "Кеш за публикации",
|
||||
"posts-in-cache": "Публикации в кеша",
|
||||
"average-post-size": "Среден обем на публикация",
|
||||
"length-to-max": "Дължина / максимум",
|
||||
"percent-full": "Запълненост: %1%",
|
||||
"post-cache-size": "Размер на кеша за публикации",
|
||||
"items-in-cache": "Елементи в кеша",
|
||||
"control-panel": "Контролен панел",
|
||||
"update-settings": "Обновяване на настройките на кеша"
|
||||
"items-in-cache": "Елементи в кеша"
|
||||
}
|
||||
@@ -9,6 +9,7 @@
|
||||
"upload-files": "Качване на файлове",
|
||||
"signature": "Подпис",
|
||||
"ban": "Блокиране",
|
||||
"invite": "Пращане на покана",
|
||||
"search-content": "Търсене на съдържание",
|
||||
"search-users": "Търсене на потребители",
|
||||
"search-tags": "Търсене на етикети",
|
||||
@@ -48,5 +49,6 @@
|
||||
"alert.confirm-copyToAllGroup": "Наистина ли искате да приложите набора от правомощия на таи група към <strong>всички категории</strong>?",
|
||||
"alert.confirm-copyToChildren": "Наистина ли искате да приложите този набор от правомощия към <strong>всички по-долни (дъщерни) категории</strong>?",
|
||||
"alert.confirm-copyToChildrenGroup": "Наистина ли искате да приложите набора от правомощия на таи група към <strong>всички по-долни (дъщерни) категории</strong>?",
|
||||
"alert.no-undo": "<em>Това действие е необратимо.</em>"
|
||||
"alert.no-undo": "<em>Това действие е необратимо.</em>",
|
||||
"alert.admin-warning": "Администраторите имат всички правомощия по подразбиране"
|
||||
}
|
||||
@@ -20,16 +20,10 @@
|
||||
"add-group": "Добавяне на група",
|
||||
"invite": "Покана",
|
||||
"new": "Нов потребител",
|
||||
|
||||
"pills.latest": "Последни потребители",
|
||||
"filter-by": "Филтриране по",
|
||||
"pills.unvalidated": "Няма потвърдена е-поща",
|
||||
"pills.no-posts": "Няма публикации",
|
||||
"pills.top-posters": "С най-много публикации",
|
||||
"pills.top-rep": "С най-много репутация",
|
||||
"pills.inactive": "Недеен",
|
||||
"pills.flagged": "С най-много доклади",
|
||||
"pills.validated": "Потвърдена",
|
||||
"pills.banned": "Блокиран",
|
||||
"pills.search": "Търсене на потребители",
|
||||
|
||||
"50-per-page": "50 на страница",
|
||||
"100-per-page": "100 на страница",
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
"settings/pagination": "Странициране",
|
||||
"settings/tags": "Етикети",
|
||||
"settings/notifications": "Известия",
|
||||
"settings/api": "Достъп чрез ППИ",
|
||||
"settings/sounds": "Звуци",
|
||||
"settings/social": "Обществени",
|
||||
"settings/cookies": "Бисквитки",
|
||||
|
||||
@@ -36,5 +36,8 @@
|
||||
|
||||
"analytics.settings": "Настройки за анализите",
|
||||
"analytics.max-cache": "Макс. стойност на кеша за анализите",
|
||||
"analytics.max-cache-help": "При инсталации с натоварен трафик, кешът може да бъде изразходен, ако има повече едновременни потребители, от колкото е максималната стойност на кеша. (Изисква рестартиране)"
|
||||
"analytics.max-cache-help": "При инсталации с натоварен трафик, кешът може да бъде изразходен, ако има повече едновременни потребители, от колкото е максималната стойност на кеша. (Изисква рестартиране)",
|
||||
"compression.settings": "Настройки за компресирането",
|
||||
"compression.enable": "Включване на компресирането",
|
||||
"compression.help": "Тази настройка включва компресирането чрез „gzip“. За натоварени уеб сайтове най-добрият начин за използване на компресия е тя да се случва на нивото на обратния сървър-посредник (reverse proxy). Но с цел тестване, можете да го включите и тук."
|
||||
}
|
||||
12
public/language/bg/admin/settings/api.json
Normal file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"tokens": "Кодове",
|
||||
"lead-text": "На тази страница можете да настроите достъпа до ППИ за писане в NodeBB.",
|
||||
"intro": "По подразбиране ППИ за писане удостоверява потребителите чрез бисквитката им за сесията, но NodeBB поддържа и удостоверяване чрез метода „Bearer“, използвайки кодовете от тази страница.",
|
||||
"docs": "Щракнете тук за достъп до пълната документация на ППИ",
|
||||
|
||||
"uid": "Потребителски ИД",
|
||||
"uid-help-text": "Посочете потребителски ИД, който да бъде свързан с този код. Ако ИД е <code>0</code>, това ще се счита за <em>главен</em> код, който може да приема идентичността на всеки от другите потребители чрез параметъра <code>_uid</code>",
|
||||
"description": "Описание",
|
||||
"no-description": "Няма описание.",
|
||||
"token-on-save": "Кодът ще бъде създаден след като данните бъдат запазени"
|
||||
}
|
||||
@@ -8,5 +8,6 @@
|
||||
"consent.blank-localised-default": "Оставете това празно, за да използвате данните по подразбиране на NodeBB, които са преведени",
|
||||
"settings": "Настройки",
|
||||
"cookie-domain": "Домейн на бисквитката за сесията",
|
||||
"max-user-sessions": "Максимален брой активни сесии за потребител",
|
||||
"blank-default": "Оставете празно, за да използвате стойността по подразбиране"
|
||||
}
|
||||
@@ -4,7 +4,7 @@
|
||||
"address-help": "Следният адрес на е-поща е този, който получателят ще види в полетата „От“ и “Отговор до“.",
|
||||
"from": "Име за полето „От“",
|
||||
"from-help": "Името на изпращача, което да бъде показано в е-писмото.",
|
||||
|
||||
|
||||
"smtp-transport": "Транспорт чрез SMTP",
|
||||
"smtp-transport.enabled": "Използване на външен сървър за е-поща за изпращане на е-писма",
|
||||
"smtp-transport-help": "Можете да изберете от списък от познати услуги, или да въведете такава ръчно.",
|
||||
@@ -35,5 +35,7 @@
|
||||
"subscriptions": "Резюмета по е-поща",
|
||||
"subscriptions.disable": "Изключване на резюметата по е-пощата",
|
||||
"subscriptions.hour": "Време за разпращане",
|
||||
"subscriptions.hour-help": "Моля, въведете число, представляващо часа, в който да се разпращат е-писма с подготвеното резюме (напр.. <code>0</code> за полунощ, <code>17</code> за 5 следобед). Имайте предвид, че този час е според часовата зона на сървъра и може да не съвпада с часовника на системата Ви.<br /> Приблизителното време на сървъра е: <span id=\"serverTime\"></span><br /> Изпращането на следващия ежедневен бюлетин е планирано за <span id=\"nextDigestTime\"></span>"
|
||||
"subscriptions.hour-help": "Моля, въведете число, представляващо часа, в който да се разпращат е-писма с подготвеното резюме (напр.. <code>0</code> за полунощ, <code>17</code> за 5 следобед). Имайте предвид, че този час е според часовата зона на сървъра и може да не съвпада с часовника на системата Ви.<br /> Приблизителното време на сървъра е: <span id=\"serverTime\"></span><br /> Изпращането на следващия ежедневен бюлетин е планирано за <span id=\"nextDigestTime\"></span>",
|
||||
"notifications.settings": "Настройки за известията по е-поща",
|
||||
"notifications.remove-images": "Премахване на изображенията от известията по е-поща"
|
||||
}
|
||||
@@ -1,5 +1,7 @@
|
||||
{
|
||||
"handles": "Имена за гостите",
|
||||
"settings": "Настройки",
|
||||
"handles.enabled": "Позволяване на имената за гостите",
|
||||
"handles.enabled-help": "Тази възможност предоставя ново поле, което позволява на гостите да си изберат име, което да се използва за всяка публикация, която правят. Ако е изключено, всички те просто ще имат името „Гост“."
|
||||
"handles.enabled-help": "Тази възможност предоставя ново поле, което позволява на гостите да си изберат име, което да се използва за всяка публикация, която правят. Ако е изключено, всички те просто ще имат името „Гост“.",
|
||||
"topic-views.enabled": "Гостите да допринасят за броя на преглеждания на темите",
|
||||
"reply-notifications.enabled": "Гостите да могат да предизвикват изпращането на известия за отговорите си"
|
||||
}
|
||||
@@ -34,6 +34,8 @@
|
||||
"timestamp.cut-off-help": "Датите и времената ще бъдат показвани относително (напр. „преди 3 часа“ или „преди 5 дни“), и преведени на множество\n\\t\\t\\t\\t\\tезици. След определено време, този текст ще започне да показва самите дата и час, според езика на потребителя\n\\t\\t\\t\\t\\t(напр. „5 ноември 2016 15:30“).<br /><em>(По подразбиране: <code>30</code>, тоест един месец). Ако зададете 0, винаги ще се изписват дати, а ако оставите полето празно, времето ще бъде винаги относително.</em>",
|
||||
"timestamp.necro-threshold": "Мъртва граница (в дни)",
|
||||
"timestamp.necro-threshold-help": "Между публикациите ще бъде показано съобщение, ако времето между тях е по-дълго от мъртвата граница. (По подразбиране: <code>7</code>, или една седмица). Задайте 0 за изключване.</em>",
|
||||
"timestamp.topic-views-interval": "Интервал за увеличаване на броя на преглеждания на темите (в минути)",
|
||||
"timestamp.topic-views-interval-help": "Броят на преглеждания на темите ще се увеличава веднъж на всеки Х минути, според тази настройка.",
|
||||
"teaser": "Представителна публикация",
|
||||
"teaser.last-post": "Последната – Показване на последната публикация, или първоначалната такава, ако няма отговори.",
|
||||
"teaser.last-reply": "Последната – Показване на последния отговор, или „Няма отговори“, ако все още няма такива.",
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
"allow-account-deletion": "Позволяване на изтриването на профила",
|
||||
"hide-fullname": "Скриване на пълното име от потребителите",
|
||||
"hide-email": "Скриване на е-пощата от потребителите",
|
||||
"show-fullname-as-displayname": "Показване на цялото име на потребителя, ако е налично",
|
||||
"themes": "Теми",
|
||||
"disable-user-skins": "Потребителите да не могат да избират собствен облик",
|
||||
"account-protection": "Защита на акаунта",
|
||||
@@ -43,6 +44,9 @@
|
||||
"registration-type.disabled": "Без регистриране",
|
||||
"registration-type.help": "Обикновена — Потребителите могат да се регистрират от страницата /register.<br/>\nСамо с покана — Потребителите могат да поканят други от страницата с <a href=\"%1/users\" target=\"_blank\">потребителите</a>.<br/>\nСамо с покана от администратор — Само администратори могат да канят други от страницата с <a href=\"%1/users\" target=\"_blank\">потребителите</a> и от страниците за <a href=\"%1/admin/manage/users\">управление на потребителите</a>.<br/>\nБез регистриране — Потребителите не се регистрират.<br/>",
|
||||
"registration-approval-type.help": "Обикновена — Потребителите се регистрират на момента.<br/>\nОдобрена от администратор — Потребителските регистрации се поставят в <a href=\"%1/admin/manage/registration\">опашка за одобрение</a>, която администраторите преглеждат.<br/>\nОдобрена от администратор по IP адрес — Новите потребители се регистрират по обикновения начин, а онези, от чиито IP адрес вече са се регистрирали други акаунти, се нуждаят от одобрението на администратор.<br/>",
|
||||
"registration-queue-auto-approve-time": "Време за автоматично одобрение",
|
||||
"registration-queue-auto-approve-time-help": "Брой часове преди потребител да бъде одобрен автоматично. 0 = изключено.",
|
||||
"registration-queue-show-average-time": "Средното време за одобрение на нов потребител да се показва на потребителите",
|
||||
"registration.max-invites": "Максимален брой покани на потребител",
|
||||
"max-invites": "Максимален брой покани на потребител",
|
||||
"max-invites-help": "0 = няма ограничение. Администраторите могат да разпращат неограничен брой покани.<br>Тази стойност се използва, само ако е избран режимът „Само с покана“.",
|
||||
@@ -62,6 +66,7 @@
|
||||
"restrict-chat": "Разрешаване на съобщенията само от потребители, които следвам",
|
||||
"outgoing-new-tab": "Отваряне на външните връзки в нов подпрозорец",
|
||||
"topic-search": "Включване на търсенето в темите",
|
||||
"update-url-with-post-index": "Обновяване на адресната лента с номера на публикацията по време на разглеждане на темите",
|
||||
"digest-freq": "Абониране за резюмета",
|
||||
"digest-freq.off": "Изключено",
|
||||
"digest-freq.daily": "Ежедневно",
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
"sort-upvotes": "Най-много положителни гласове",
|
||||
"sort-replies": "Най-много отговори",
|
||||
|
||||
"modal-title": "Докладване на неуместно съдържание",
|
||||
"modal-title": "Докладване на съдържанието",
|
||||
"modal-body": "Моля, посочете причината за докладването на %1 %2 за преглед. Или използвайте някой от бутоните за бързо докладване, ако са приложими.",
|
||||
"modal-reason-spam": "Спам",
|
||||
"modal-reason-offensive": "Обидно",
|
||||
|
||||
@@ -35,6 +35,8 @@
|
||||
"details.member_count": "Брой на членовете",
|
||||
"details.creation_date": "Дата на създаване",
|
||||
"details.description": "Описание",
|
||||
"details.member-post-cids": "Категории, от които да се показват публикации",
|
||||
"details.member-post-cids-help": "<strong>Забележка</strong>: Ако не изберете нито една категория, ще се смята, че са включени всички категории. Използвайте <code>CTRL</code> и <code>SHIFT</code>, за да изберете няколко възможности.",
|
||||
"details.badge_preview": "Преглед на емблемата",
|
||||
"details.change_icon": "Промяна на иконката",
|
||||
"details.change_label_colour": "Промяна на цвета на етикета",
|
||||
|
||||
@@ -60,6 +60,7 @@
|
||||
"notificationType_post-edit": "Когато бъде редактирана публикация в тема, която следите",
|
||||
"notificationType_follow": "Когато някой започне да Ви следва",
|
||||
"notificationType_new-chat": "Когато получите съобщение в разговор",
|
||||
"notificationType_new-group-chat": "Когато получите съобщение в групов разговор",
|
||||
"notificationType_group-invite": "Когато получите покана за група",
|
||||
"notificationType_group-request-membership": "Когато някой поиска да се включи в група, на която Вие сте собственик",
|
||||
"notificationType_new-register": "Когато някой бъде добавен в опашката за регистрация",
|
||||
|
||||
@@ -18,6 +18,8 @@
|
||||
"agree_to_terms_of_use": "Съгласен съм с условията за ползване",
|
||||
"terms_of_use_error": "Трябва да се съгласите с условията за ползване",
|
||||
"registration-added-to-queue": "Вашата регистрация беше добавена в опашката за одобрение. Ще получите е-писмо, когато тя бъде одобрена от администратор.",
|
||||
"registration-queue-average-time": "Средното време за одобрение на нови членове е %1 часа и %2 минути.",
|
||||
"registration-queue-auto-approve-time": "Членството Ви в този форум ще бъде напълно активирано след около %1 часа.",
|
||||
"interstitial.intro": "Нуждаем се от малко допълнителна информация, преди да можем да създадем акаунта Ви.",
|
||||
"interstitial.errors-found": "Не можем да завършим Вашата регистрация:",
|
||||
"gdpr_agree_data": "Съгласявам се това личната ми информация да се съхранява и обработва от този уеб сайт.",
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
"locked": "Заключена",
|
||||
"pinned": "Закачена",
|
||||
"moved": "Преместена",
|
||||
"moved-from": "Преместена от %1",
|
||||
"copy-ip": "Копиране на IP адреса",
|
||||
"ban-ip": "Блокиране на IP адреса",
|
||||
"view-history": "История на редакциите",
|
||||
@@ -79,7 +80,9 @@
|
||||
"thread_tools.purge_confirm": "Наистина ли искате да изчистите тази тема?",
|
||||
"thread_tools.merge_topics": "Сливане на темите",
|
||||
"thread_tools.merge": "Сливане",
|
||||
"topic_move_success": "Темата ще бъде преместена след малко. Натиснете тук, за да отмените преместването.",
|
||||
"topic_move_success": "Темата ще бъде преместена в „%1“ след малко. Натиснете тук, за да отмените преместването.",
|
||||
"topic_move_multiple_success": "Темите ще бъдат преместени в „%1“ след малко. Натиснете тук, за да отмените преместването.",
|
||||
"topic_move_all_success": "Всички теми ще бъдат преместени в „%1“ след малко. Натиснете тук, за да отмените преместването.",
|
||||
"topic_move_undone": "Преместването на темата беше отменено",
|
||||
"topic_move_posts_success": "Публикациите ще бъдат преместени след малко. Натиснете тук, за да отмените преместването.",
|
||||
"topic_move_posts_undone": "Преместването на публикациите беше отменено",
|
||||
|
||||
@@ -123,6 +123,7 @@
|
||||
"open_links_in_new_tab": "Отваряне на външните връзки в нов подпрозорец",
|
||||
"enable_topic_searching": "Включване на търсенето в темите",
|
||||
"topic_search_help": "Ако е включено, търсенето в темата ще замени стандартното поведение на браузъра при търсене в страницата и ще Ви позволи да претърсвате цялата тема, а не само това, което се вижда на екрана",
|
||||
"update_url_with_post_index": "Обновяване на адресната лента с номера на публикацията по време на разглеждане на темите",
|
||||
"scroll_to_my_post": "След публикуване на отговор, да се показва новата публикация",
|
||||
"follow_topics_you_reply_to": "Следене на темите, в които отговаряте",
|
||||
"follow_topics_you_create": "Следене на темите, които създавате",
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
"online-only": "Само тези на линия",
|
||||
"invite": "Канене",
|
||||
"prompt-email": "Е-пощи:",
|
||||
"groups-to-join": "Групи, в които да се присъедини след приемане на поканата:",
|
||||
"invitation-email-sent": "Беше изпратено е-писмо за потвърждение до %1",
|
||||
"user_list": "Списък от потребители",
|
||||
"recent_topics": "Скорошни теми",
|
||||
|
||||
@@ -1,11 +1,6 @@
|
||||
{
|
||||
"post-cache": "Post Cache",
|
||||
"posts-in-cache": "Posts in Cache",
|
||||
"average-post-size": "Average Post Size",
|
||||
"length-to-max": "Length / Max",
|
||||
"percent-full": "%1% Full",
|
||||
"post-cache-size": "Post Cache Size",
|
||||
"items-in-cache": "Items in Cache",
|
||||
"control-panel": "Control Panel",
|
||||
"update-settings": "Update Cache Settings"
|
||||
"items-in-cache": "Items in Cache"
|
||||
}
|
||||
@@ -9,6 +9,7 @@
|
||||
"upload-files": "Upload Files",
|
||||
"signature": "Signature",
|
||||
"ban": "Ban",
|
||||
"invite": "Invite",
|
||||
"search-content": "Search Content",
|
||||
"search-users": "Search Users",
|
||||
"search-tags": "Search Tags",
|
||||
@@ -48,5 +49,6 @@
|
||||
"alert.confirm-copyToAllGroup": "Are you sure you wish to apply this group's privilege set to <strong>all categories</strong>?",
|
||||
"alert.confirm-copyToChildren": "Are you sure you wish to apply this privilege set to <strong>all descendant (child) categories</strong>?",
|
||||
"alert.confirm-copyToChildrenGroup": "Are you sure you wish to apply this group's privilege set to <strong>all descendant (child) categories</strong>?",
|
||||
"alert.no-undo": "<em>This action cannot be undone.</em>"
|
||||
"alert.no-undo": "<em>This action cannot be undone.</em>",
|
||||
"alert.admin-warning": "Administrators implicitly get all privileges"
|
||||
}
|
||||
@@ -20,16 +20,10 @@
|
||||
"add-group": "Add Group",
|
||||
"invite": "Invite",
|
||||
"new": "New User",
|
||||
|
||||
"pills.latest": "Latest Users",
|
||||
"filter-by": "Filter by",
|
||||
"pills.unvalidated": "Not Validated",
|
||||
"pills.no-posts": "No Posts",
|
||||
"pills.top-posters": "Top Posters",
|
||||
"pills.top-rep": "Most Reputation",
|
||||
"pills.inactive": "Inactive",
|
||||
"pills.flagged": "Most Flagged",
|
||||
"pills.validated": "Validated",
|
||||
"pills.banned": "Banned",
|
||||
"pills.search": "User Search",
|
||||
|
||||
"50-per-page": "50 per page",
|
||||
"100-per-page": "100 per page",
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
"settings/pagination": "Pagination",
|
||||
"settings/tags": "Tags",
|
||||
"settings/notifications": "Notifications",
|
||||
"settings/api": "API Access",
|
||||
"settings/sounds": "Sounds",
|
||||
"settings/social": "Social",
|
||||
"settings/cookies": "Cookies",
|
||||
|
||||
@@ -36,5 +36,8 @@
|
||||
|
||||
"analytics.settings": "Analytics Settings",
|
||||
"analytics.max-cache": "Analytics Cache Max Value",
|
||||
"analytics.max-cache-help": "On high-traffic installs, the cache could be exhausted continuously if there are more concurrent active users than the Max Cache value. (Restart required)"
|
||||
"analytics.max-cache-help": "On high-traffic installs, the cache could be exhausted continuously if there are more concurrent active users than the Max Cache value. (Restart required)",
|
||||
"compression.settings": "Compression Settings",
|
||||
"compression.enable": "Enable Compression",
|
||||
"compression.help": "This setting enables gzip compression. For a high-traffic website in production, the best way to put compression in place is to implement it at a reverse proxy level. You can enable it here for testing purposes."
|
||||
}
|
||||
12
public/language/bn/admin/settings/api.json
Normal file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"tokens": "Tokens",
|
||||
"lead-text": "From this page you can configure access to the Write API in NodeBB.",
|
||||
"intro": "By default, the Write API authenticates users based on their session cookie, but NodeBB also supports Bearer authentication via tokens generated via this page.",
|
||||
"docs": "Click here to access the full API specification",
|
||||
|
||||
"uid": "User ID",
|
||||
"uid-help-text": "Specify a User ID to associate with this token. If the user ID is <code>0</code>, it will be considered a <em>master</em> token, which can assume the identity of other users based on the <code>_uid</code> parameter",
|
||||
"description": "Description",
|
||||
"no-description": "No description specified.",
|
||||
"token-on-save": "Token will be generated once form is saved"
|
||||
}
|
||||
@@ -8,5 +8,6 @@
|
||||
"consent.blank-localised-default": "Leave blank to use NodeBB localised defaults",
|
||||
"settings": "Settings",
|
||||
"cookie-domain": "Session cookie domain",
|
||||
"max-user-sessions": "Max active sessions per user",
|
||||
"blank-default": "Leave blank for default"
|
||||
}
|
||||
@@ -4,7 +4,7 @@
|
||||
"address-help": "The following email address refers to the email that the recipient will see in the \"From\" and \"Reply To\" fields.",
|
||||
"from": "From Name",
|
||||
"from-help": "The from name to display in the email.",
|
||||
|
||||
|
||||
"smtp-transport": "SMTP Transport",
|
||||
"smtp-transport.enabled": "Use an external email server to send emails",
|
||||
"smtp-transport-help": "You can select from a list of well-known services or enter a custom one.",
|
||||
@@ -35,5 +35,7 @@
|
||||
"subscriptions": "ইমেইল ডাইজেস্ট",
|
||||
"subscriptions.disable": "ইমেইল ডাইজেস্ট নিষ্ক্রিয়",
|
||||
"subscriptions.hour": "Digest Hour",
|
||||
"subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. <code>0</code> for midnight, <code>17</code> for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.<br /> The approximate server time is: <span id=\"serverTime\"></span><br /> The next daily digest is scheduled to be sent <span id=\"nextDigestTime\"></span>"
|
||||
"subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. <code>0</code> for midnight, <code>17</code> for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.<br /> The approximate server time is: <span id=\"serverTime\"></span><br /> The next daily digest is scheduled to be sent <span id=\"nextDigestTime\"></span>",
|
||||
"notifications.settings": "Email notification settings",
|
||||
"notifications.remove-images": "Remove images from email notifications"
|
||||
}
|
||||
@@ -1,5 +1,7 @@
|
||||
{
|
||||
"handles": "Guest Handles",
|
||||
"settings": "Settings",
|
||||
"handles.enabled": "Allow guest handles",
|
||||
"handles.enabled-help": "This option exposes a new field that allows guests to pick a name to associate with each post they make. If disabled, they will simply be called \"Guest\""
|
||||
"handles.enabled-help": "This option exposes a new field that allows guests to pick a name to associate with each post they make. If disabled, they will simply be called \"Guest\"",
|
||||
"topic-views.enabled": "Allow guests to increase topic view counts",
|
||||
"reply-notifications.enabled": "Allow guests to generate reply notifications"
|
||||
}
|
||||
@@ -34,6 +34,8 @@
|
||||
"timestamp.cut-off-help": "Dates & times will be shown in a relative manner (e.g. \"3 hours ago\" / \"5 days ago\"), and localised into various\n\t\t\t\t\tlanguages. After a certain point, this text can be switched to display the localised date itself\n\t\t\t\t\t(e.g. 5 Nov 2016 15:30).<br /><em>(Default: <code>30</code>, or one month). Set to 0 to always display dates, leave blank to always display relative times.</em>",
|
||||
"timestamp.necro-threshold": "Necro Threshold (in days)",
|
||||
"timestamp.necro-threshold-help": "A message will be shown between posts if the time between them is longer than the necro threshold. (Default: <code>7</code>, or one week). Set to 0 to disable.</em>",
|
||||
"timestamp.topic-views-interval": "Increment topic views interval (in minutes)",
|
||||
"timestamp.topic-views-interval-help": "Topic views will only increment once every X minutes as defined by this setting.",
|
||||
"teaser": "Teaser Post",
|
||||
"teaser.last-post": "Last – Show the latest post, including the original post, if no replies",
|
||||
"teaser.last-reply": "Last – Show the latest reply, or a \"No replies\" placeholder if no replies",
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
"allow-account-deletion": "Allow account deletion",
|
||||
"hide-fullname": "Hide fullname from users",
|
||||
"hide-email": "Hide email from users",
|
||||
"show-fullname-as-displayname": "Show user's full name as their display name if available",
|
||||
"themes": "Themes",
|
||||
"disable-user-skins": "Prevent users from choosing a custom skin",
|
||||
"account-protection": "Account Protection",
|
||||
@@ -43,6 +44,9 @@
|
||||
"registration-type.disabled": "No registration",
|
||||
"registration-type.help": "Normal - Users can register from the /register page.<br/>\nInvite Only - Users can invite others from the <a href=\"%1/users\" target=\"_blank\">users</a> page.<br/>\nAdmin Invite Only - Only administrators can invite others from <a href=\"%1/users\" target=\"_blank\">users</a> and <a href=\"%1/admin/manage/users\">admin/manage/users</a> pages.<br/>\nNo registration - No user registration.<br/>",
|
||||
"registration-approval-type.help": "Normal - Users are registered immediately.<br/>\nAdmin Approval - User registrations are placed in an <a href=\"%1/admin/manage/registration\">approval queue</a> for administrators.<br/>\nAdmin Approval for IPs - Normal for new users, Admin Approval for IP addresses that already have an account.<br/>",
|
||||
"registration-queue-auto-approve-time": "Automatic Approval Time",
|
||||
"registration-queue-auto-approve-time-help": "Hours before user is approved automatically. 0 to disable.",
|
||||
"registration-queue-show-average-time": "Show users average time it takes to approve a new user",
|
||||
"registration.max-invites": "Maximum Invitations per User",
|
||||
"max-invites": "Maximum Invitations per User",
|
||||
"max-invites-help": "0 for no restriction. Admins get infinite invitations<br>Only applicable for \"Invite Only\"",
|
||||
@@ -62,6 +66,7 @@
|
||||
"restrict-chat": "Only allow chat messages from users I follow",
|
||||
"outgoing-new-tab": "Open outgoing links in new tab",
|
||||
"topic-search": "Enable In-Topic Searching",
|
||||
"update-url-with-post-index": "Update url with post index while browsing topics",
|
||||
"digest-freq": "Subscribe to Digest",
|
||||
"digest-freq.off": "Off",
|
||||
"digest-freq.daily": "Daily",
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
"sort-upvotes": "Most upvotes",
|
||||
"sort-replies": "Most replies",
|
||||
|
||||
"modal-title": "Report Inappropriate Content",
|
||||
"modal-title": "Report Content",
|
||||
"modal-body": "Please specify your reason for flagging %1 %2 for review. Alternatively, use one of the quick report buttons if applicable.",
|
||||
"modal-reason-spam": "Spam",
|
||||
"modal-reason-offensive": "Offensive",
|
||||
|
||||
@@ -35,6 +35,8 @@
|
||||
"details.member_count": "Member Count",
|
||||
"details.creation_date": "Creation Date",
|
||||
"details.description": "Description",
|
||||
"details.member-post-cids": "Categories to display posts from",
|
||||
"details.member-post-cids-help": "<strong>Note</strong>: Selecting no categories will assume all categories are included. Use <code>ctrl</code> and <code>shift</code> to select multiple options.",
|
||||
"details.badge_preview": "Badge Preview",
|
||||
"details.change_icon": "Change Icon",
|
||||
"details.change_label_colour": "Change Label Colour",
|
||||
|
||||
@@ -60,6 +60,7 @@
|
||||
"notificationType_post-edit": "When a post is edited in a topic you are watching",
|
||||
"notificationType_follow": "When someone starts following you",
|
||||
"notificationType_new-chat": "When you receive a chat message",
|
||||
"notificationType_new-group-chat": "When you receive a group chat message",
|
||||
"notificationType_group-invite": "When you receive a group invite",
|
||||
"notificationType_group-request-membership": "When someone requests to join a group you own",
|
||||
"notificationType_new-register": "When someone gets added to registration queue",
|
||||
|
||||
@@ -18,6 +18,8 @@
|
||||
"agree_to_terms_of_use": "আমি নিয়মাবলী মেনে চলতে সম্মতি জানালাম",
|
||||
"terms_of_use_error": "আপনাকে অবশ্যই ব্যাবহার নীতিমালায় সম্মত হতে হবে।",
|
||||
"registration-added-to-queue": "আপনার নিবন্ধনটি এ্যাপ্লুভাল তালিকায় যুক্ত হয়েছে। একজন এডমিনিস্ট্রেটর কর্তৃক নিবন্ধন গৃহীত হলে আপনি একটি মেইল পাবেন। ",
|
||||
"registration-queue-average-time": "Our average time for approving memberships is %1 hours %2 minutes.",
|
||||
"registration-queue-auto-approve-time": "Your membership to this forum will be fully activated in up to %1 hours.",
|
||||
"interstitial.intro": "আপনার একাউন্ট তৈরীর পূর্বে আমাদের আরো কিছু বাড়তি তথ্য জানা প্রয়োজন।",
|
||||
"interstitial.errors-found": "আপনার নিবন্ধনটি সম্পূর্ণ করা সম্ভব হয় নি।",
|
||||
"gdpr_agree_data": "I consent to the collection and processing of my personal information on this website.",
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
"locked": "বন্ধ",
|
||||
"pinned": "Pinned",
|
||||
"moved": "Moved",
|
||||
"moved-from": "Moved from %1",
|
||||
"copy-ip": "Copy IP",
|
||||
"ban-ip": "Ban IP",
|
||||
"view-history": "Edit History",
|
||||
@@ -79,7 +80,9 @@
|
||||
"thread_tools.purge_confirm": "আপনি নিশ্চিত যে আপনি টপিকটি পার্জ করতে চাচ্ছেন ? ",
|
||||
"thread_tools.merge_topics": "Merge Topics",
|
||||
"thread_tools.merge": "Merge",
|
||||
"topic_move_success": "This topic will be moved shortly. Click here to undo.",
|
||||
"topic_move_success": "This topic will be moved to \"%1\" shortly. Click here to undo.",
|
||||
"topic_move_multiple_success": "These topics will be moved to \"%1\" shortly. Click here to undo.",
|
||||
"topic_move_all_success": "All topics will be moved to \"%1\" shortly. Click here to undo.",
|
||||
"topic_move_undone": "Topic move undone",
|
||||
"topic_move_posts_success": "Posts will be moved shortly. Click here to undo.",
|
||||
"topic_move_posts_undone": "Post move undone",
|
||||
|
||||
@@ -123,6 +123,7 @@
|
||||
"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",
|
||||
"update_url_with_post_index": "Update url with post index while browsing topics",
|
||||
"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",
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
"online-only": "শুধুমাত্র অনলাইন",
|
||||
"invite": "ইনভাইট",
|
||||
"prompt-email": "ইমেইল",
|
||||
"groups-to-join": "Groups to be joined when invite is accepted:",
|
||||
"invitation-email-sent": "%1 কে একটি ইনভাইটেশন ইমেইল পাঠানো হয়েছে",
|
||||
"user_list": "সদস্য তালিকা",
|
||||
"recent_topics": "সাম্প্রতিক টপিক",
|
||||
|
||||
@@ -1,11 +1,6 @@
|
||||
{
|
||||
"post-cache": "Mezipaměť příspěvku",
|
||||
"posts-in-cache": "Příspěvků v mezipaměti",
|
||||
"average-post-size": "Průměrná velikost příspěvku",
|
||||
"length-to-max": "Délka / Maximum",
|
||||
"percent-full": "%1% plný",
|
||||
"post-cache-size": "Velikost mezipaměti příspěvku",
|
||||
"items-in-cache": "Položek v mezipaměti",
|
||||
"control-panel": "Ovládací panel",
|
||||
"update-settings": "Aktualizovat nastavení mezipaměti"
|
||||
"items-in-cache": "Položek v mezipaměti"
|
||||
}
|
||||
@@ -9,6 +9,7 @@
|
||||
"upload-files": "Náhrát soubory",
|
||||
"signature": "Podpis",
|
||||
"ban": "Blokovat",
|
||||
"invite": "Invite",
|
||||
"search-content": "Hledat obsah",
|
||||
"search-users": "Hledat uživatele",
|
||||
"search-tags": "Hledat označení",
|
||||
@@ -48,5 +49,6 @@
|
||||
"alert.confirm-copyToAllGroup": "Are you sure you wish to apply this group's privilege set to <strong>all categories</strong>?",
|
||||
"alert.confirm-copyToChildren": "Are you sure you wish to apply this privilege set to <strong>all descendant (child) categories</strong>?",
|
||||
"alert.confirm-copyToChildrenGroup": "Are you sure you wish to apply this group's privilege set to <strong>all descendant (child) categories</strong>?",
|
||||
"alert.no-undo": "<em>This action cannot be undone.</em>"
|
||||
"alert.no-undo": "<em>This action cannot be undone.</em>",
|
||||
"alert.admin-warning": "Administrators implicitly get all privileges"
|
||||
}
|
||||
@@ -20,16 +20,10 @@
|
||||
"add-group": "Přidat skupinu",
|
||||
"invite": "Pozvat",
|
||||
"new": "Nový uživatel",
|
||||
|
||||
"pills.latest": "Poslední uživatelé",
|
||||
"filter-by": "Filter by",
|
||||
"pills.unvalidated": "Neověřeno",
|
||||
"pills.no-posts": "Žádné příspěvky",
|
||||
"pills.top-posters": "Nejvíce příspěvků",
|
||||
"pills.top-rep": "Nejvíce reputace",
|
||||
"pills.inactive": "Neaktivní",
|
||||
"pills.flagged": "Nejoznačovanější",
|
||||
"pills.validated": "Validated",
|
||||
"pills.banned": "Zakázán",
|
||||
"pills.search": "Hledat uživatele",
|
||||
|
||||
"50-per-page": "50 na stránku",
|
||||
"100-per-page": "100 na stránku",
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
"settings/pagination": "Stránkování",
|
||||
"settings/tags": "Značky",
|
||||
"settings/notifications": "Oznámení",
|
||||
"settings/api": "API Access",
|
||||
"settings/sounds": "Sounds",
|
||||
"settings/social": "Social",
|
||||
"settings/cookies": "Cookies",
|
||||
|
||||
@@ -36,5 +36,8 @@
|
||||
|
||||
"analytics.settings": "Analytics Settings",
|
||||
"analytics.max-cache": "Analytics Cache Max Value",
|
||||
"analytics.max-cache-help": "On high-traffic installs, the cache could be exhausted continuously if there are more concurrent active users than the Max Cache value. (Restart required)"
|
||||
"analytics.max-cache-help": "On high-traffic installs, the cache could be exhausted continuously if there are more concurrent active users than the Max Cache value. (Restart required)",
|
||||
"compression.settings": "Compression Settings",
|
||||
"compression.enable": "Enable Compression",
|
||||
"compression.help": "This setting enables gzip compression. For a high-traffic website in production, the best way to put compression in place is to implement it at a reverse proxy level. You can enable it here for testing purposes."
|
||||
}
|
||||
12
public/language/cs/admin/settings/api.json
Normal file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"tokens": "Tokens",
|
||||
"lead-text": "From this page you can configure access to the Write API in NodeBB.",
|
||||
"intro": "By default, the Write API authenticates users based on their session cookie, but NodeBB also supports Bearer authentication via tokens generated via this page.",
|
||||
"docs": "Click here to access the full API specification",
|
||||
|
||||
"uid": "User ID",
|
||||
"uid-help-text": "Specify a User ID to associate with this token. If the user ID is <code>0</code>, it will be considered a <em>master</em> token, which can assume the identity of other users based on the <code>_uid</code> parameter",
|
||||
"description": "Description",
|
||||
"no-description": "No description specified.",
|
||||
"token-on-save": "Token will be generated once form is saved"
|
||||
}
|
||||
@@ -8,5 +8,6 @@
|
||||
"consent.blank-localised-default": "Pro použití výchozího textu NodeBB, zanechte prázdné",
|
||||
"settings": "Nastavení",
|
||||
"cookie-domain": "Doména relace cookies",
|
||||
"max-user-sessions": "Max active sessions per user",
|
||||
"blank-default": "Pro výchozí, zanechte prázdné"
|
||||
}
|
||||
@@ -4,7 +4,7 @@
|
||||
"address-help": "Následující e-mailové adresy budou zobrazeny příjemci v políčkách „Od” a „Odpovědět”.",
|
||||
"from": "Jméno – od",
|
||||
"from-help": "Zobrazené jméno v e-mailu v – Od",
|
||||
|
||||
|
||||
"smtp-transport": "Přenos SMTP",
|
||||
"smtp-transport.enabled": "Pro odesílání e-mailů použít externí e-mailový server ",
|
||||
"smtp-transport-help": "Ze seznamu můžete vybrat známé služby nebo zadat vlastní.",
|
||||
@@ -35,5 +35,7 @@
|
||||
"subscriptions": "E-mailové odběry",
|
||||
"subscriptions.disable": "Zakázat e-mailové odběry",
|
||||
"subscriptions.hour": "Hodina přehledu",
|
||||
"subscriptions.hour-help": "Zadejte číslo odpovídající hodině, kdy mají být odeslány přehledové e-maily (tj. <code>0</code> pro půlnoc, <code>17</code> pro 5:00pm). Mějte na paměti, že tato hodina závisí na hodinách samotného serveru a nemusí tak souhlasit se systémovými hodinami. <br />Přibližný čas serveru je: <span id=\"serverTime\"></span>.<br />Další odeslání přehledů je plánováno na <span id=\"nextDigestTime\"></span>."
|
||||
"subscriptions.hour-help": "Zadejte číslo odpovídající hodině, kdy mají být odeslány přehledové e-maily (tj. <code>0</code> pro půlnoc, <code>17</code> pro 5:00pm). Mějte na paměti, že tato hodina závisí na hodinách samotného serveru a nemusí tak souhlasit se systémovými hodinami. <br />Přibližný čas serveru je: <span id=\"serverTime\"></span>.<br />Další odeslání přehledů je plánováno na <span id=\"nextDigestTime\"></span>.",
|
||||
"notifications.settings": "Email notification settings",
|
||||
"notifications.remove-images": "Remove images from email notifications"
|
||||
}
|
||||
@@ -1,5 +1,7 @@
|
||||
{
|
||||
"handles": "Zacházení s hosty",
|
||||
"settings": "Settings",
|
||||
"handles.enabled": "Povolit upravení zacházení s hosty",
|
||||
"handles.enabled-help": "Tato možnost odkryje nové pole, které umožňuje hostům vybrat jméno, které se připojí ke každému příspěvku, který vytvoří. Bude-li zakázáno, budou jednoduše nazýváni „Host”"
|
||||
"handles.enabled-help": "Tato možnost odkryje nové pole, které umožňuje hostům vybrat jméno, které se připojí ke každému příspěvku, který vytvoří. Bude-li zakázáno, budou jednoduše nazýváni „Host”",
|
||||
"topic-views.enabled": "Allow guests to increase topic view counts",
|
||||
"reply-notifications.enabled": "Allow guests to generate reply notifications"
|
||||
}
|
||||
@@ -34,6 +34,8 @@
|
||||
"timestamp.cut-off-help": "Datum a čas bude zobrazen relativně (tj. „před 3 hodinami” / „před 5 dny”), a dle toho lokalizován do různých\n\t\t\t\t\tjazyků. Za určitých okolností, může tento text být přepnut na lokalizované datum\n\t\t\t\t\t(tj. 5 Led 2017 15:30)<br /><em>(výchozí: <code>30</code>,nebo měsíc). Nastavte na 0, pro zobrazení datumů, zanecháte-li prázdné, bude vždy zobrazen relativní čas.</em>",
|
||||
"timestamp.necro-threshold": "Necro Threshold (in days)",
|
||||
"timestamp.necro-threshold-help": "A message will be shown between posts if the time between them is longer than the necro threshold. (Default: <code>7</code>, or one week). Set to 0 to disable.</em>",
|
||||
"timestamp.topic-views-interval": "Increment topic views interval (in minutes)",
|
||||
"timestamp.topic-views-interval-help": "Topic views will only increment once every X minutes as defined by this setting.",
|
||||
"teaser": "Ukázka příspěvku",
|
||||
"teaser.last-post": "Poslední – zobrazení posledního příspěvku, včetně hlavního příspěvku, nejsou-li odpovědi",
|
||||
"teaser.last-reply": "Poslední – zobrazení poslední odpovědi, nebo nejsou-li žádné odpovědi textu „Bez odpovědi”",
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
"allow-account-deletion": "Povolit smazání účtu",
|
||||
"hide-fullname": "Skrýt jméno před uživateli",
|
||||
"hide-email": "Skrýt e-mail před uživateli",
|
||||
"show-fullname-as-displayname": "Show user's full name as their display name if available",
|
||||
"themes": "Motivy",
|
||||
"disable-user-skins": "Zabránit uživateli ve výběru vlastního vzhledu",
|
||||
"account-protection": "Ochrana účtu",
|
||||
@@ -43,6 +44,9 @@
|
||||
"registration-type.disabled": "Bez registrace",
|
||||
"registration-type.help": "Normální - uživatel se může registrovat ze stránky Registrace<br/>\nJen pro pozvané - uživatel může pozvat jiné ze stránky<a href=\"%1/users\" target=\"_blank\">Uživatelé</a>.<br/>♥\nJen pro pozvané správcem - jen správci mohou pozvat jiné ze stránky <a href=\"%1/users\" target=\"_blank\">Uživatelé</a>a ze stránky <a href=\"%1/admin/manage/users\">admin/manage/users</a>.<br/>\nBez registrace - žádná registrace uživatelů.<br/>•",
|
||||
"registration-approval-type.help": "Normální - uživatel se může hned registrovat.<br/>\nSchválení správcem - uživatelská registrace je zařazena do <a href=\"%1/admin/manage/registration\">fronty pro schválení</a> správcem.<br/>\nSchválení správcem dle IP - pro nové uživatele stav Normální, Schválení správcem pro adresy IP, které již mají účet.<br/>",
|
||||
"registration-queue-auto-approve-time": "Automatic Approval Time",
|
||||
"registration-queue-auto-approve-time-help": "Hours before user is approved automatically. 0 to disable.",
|
||||
"registration-queue-show-average-time": "Show users average time it takes to approve a new user",
|
||||
"registration.max-invites": "Maximální počet pozvání na uživatele",
|
||||
"max-invites": "Maximální počet pozvání na uživatele",
|
||||
"max-invites-help": "0 pro neomezené. Správci mají neomezeně pozvánek<br> Použitelné jen pro „Jen pozvané\"",
|
||||
@@ -62,6 +66,7 @@
|
||||
"restrict-chat": "Povolit chatové zprávy jen od uživatelů, které sleduji",
|
||||
"outgoing-new-tab": "Otevřít odchozí odkazy v nové záložce",
|
||||
"topic-search": "Povolit hledání v tématu",
|
||||
"update-url-with-post-index": "Update url with post index while browsing topics",
|
||||
"digest-freq": "Přihlásit k přehledu",
|
||||
"digest-freq.off": "Vypnuto",
|
||||
"digest-freq.daily": "Denně",
|
||||
|
||||
@@ -67,7 +67,7 @@
|
||||
"sort-upvotes": "Most upvotes",
|
||||
"sort-replies": "Most replies",
|
||||
|
||||
"modal-title": "Nahlásit nevhodný obsah",
|
||||
"modal-title": "Report Content",
|
||||
"modal-body": "Zadejte váš důvod k označení %1 %2 pro kontrolu. Nebo použijte tlačítko je-li dostupné.",
|
||||
"modal-reason-spam": "Spam",
|
||||
"modal-reason-offensive": "Urážlivé",
|
||||
|
||||
@@ -35,6 +35,8 @@
|
||||
"details.member_count": "Počet členů",
|
||||
"details.creation_date": "Datum vytvoření",
|
||||
"details.description": "Popis",
|
||||
"details.member-post-cids": "Categories to display posts from",
|
||||
"details.member-post-cids-help": "<strong>Note</strong>: Selecting no categories will assume all categories are included. Use <code>ctrl</code> and <code>shift</code> to select multiple options.",
|
||||
"details.badge_preview": "Náhled symbolu",
|
||||
"details.change_icon": "Změnit ikonu",
|
||||
"details.change_label_colour": "Změnit barvu popisu",
|
||||
|
||||
@@ -60,6 +60,7 @@
|
||||
"notificationType_post-edit": "When a post is edited in a topic you are watching",
|
||||
"notificationType_follow": "Začne-li vás někdo sledovat",
|
||||
"notificationType_new-chat": "Obdržíte-li novou konverzační zprávu",
|
||||
"notificationType_new-group-chat": "When you receive a group chat message",
|
||||
"notificationType_group-invite": "Obdržíte-li pozvání ke skupině",
|
||||
"notificationType_group-request-membership": "Pokud někdo požaduje připojení se do vaší skupiny",
|
||||
"notificationType_new-register": "Bude-li někdo přidán do registrační fronty",
|
||||
|
||||
@@ -18,6 +18,8 @@
|
||||
"agree_to_terms_of_use": "Souhlasím s Podmínkami",
|
||||
"terms_of_use_error": "Musíte souhlasit s podmínkami.",
|
||||
"registration-added-to-queue": "Vaše registrace byla přidána do fronty. Obdržíte e-mail až ji správce schválí.",
|
||||
"registration-queue-average-time": "Our average time for approving memberships is %1 hours %2 minutes.",
|
||||
"registration-queue-auto-approve-time": "Your membership to this forum will be fully activated in up to %1 hours.",
|
||||
"interstitial.intro": "Před vytvořením účtu vyžadujeme některé dodatečné informace.",
|
||||
"interstitial.errors-found": "Nebylo možné dokončit vaší registraci:",
|
||||
"gdpr_agree_data": "Dávám souhlas se sběrem a zpracováním mých osobních údajů na této webové stránce.",
|
||||
|
||||