mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-12-20 07:20:27 +01:00
Compare commits
1017 Commits
v1.16.1-be
...
flags-api
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0df3ea8661 | ||
|
|
b6c84222c2 | ||
|
|
6bcc0d0ddc | ||
|
|
e219cf0226 | ||
|
|
b5da3f136b | ||
|
|
8a02c66ed5 | ||
|
|
66946be9f0 | ||
|
|
acb11cc764 | ||
|
|
c4be0078ed | ||
|
|
021013159e | ||
|
|
f9a89adc97 | ||
|
|
4a56388ec3 | ||
|
|
0d3f74b762 | ||
|
|
522291726d | ||
|
|
e0db904b0e | ||
|
|
8ae4c30029 | ||
|
|
07f25d8c47 | ||
|
|
62cd5f669b | ||
|
|
b6a8471205 | ||
|
|
72c9650fd3 | ||
|
|
f14df0d443 | ||
|
|
98b685d9c5 | ||
|
|
31dae04f3b | ||
|
|
0960a81468 | ||
|
|
415416d2a7 | ||
|
|
7036c3751e | ||
|
|
a54a3ee1ca | ||
|
|
ae14016efc | ||
|
|
ff78969c2c | ||
|
|
55d7e55867 | ||
|
|
6ed7e937ce | ||
|
|
47c8c69264 | ||
|
|
5fd190f7c4 | ||
|
|
7da8f12173 | ||
|
|
8b41684ee3 | ||
|
|
46be2046ef | ||
|
|
5c9c0605a7 | ||
|
|
8e0561f226 | ||
|
|
10ddfff38f | ||
|
|
e03782f218 | ||
|
|
f17625fb34 | ||
|
|
99c230372a | ||
|
|
5fe074c133 | ||
|
|
c11927c5f5 | ||
|
|
c9348efbdc | ||
|
|
d9ea704731 | ||
|
|
5ff9319f9d | ||
|
|
f7f008a779 | ||
|
|
725e70e9d7 | ||
|
|
c7feea566f | ||
|
|
7b20cd304b | ||
|
|
b3658329da | ||
|
|
b896484351 | ||
|
|
97c8569a79 | ||
|
|
d9e2190a6b | ||
|
|
fee782c436 | ||
|
|
edefac9645 | ||
|
|
4d6421bb76 | ||
|
|
849049765b | ||
|
|
09bac6bd7e | ||
|
|
a76eab1ca2 | ||
|
|
e6f30d2a36 | ||
|
|
366b36a560 | ||
|
|
3611b04e0e | ||
|
|
e40f648ff5 | ||
|
|
acdbd04913 | ||
|
|
db65360c0d | ||
|
|
cf6fcc2107 | ||
|
|
561ce7d30a | ||
|
|
9a9250338a | ||
|
|
2fe30b6fa0 | ||
|
|
eacd00e9a4 | ||
|
|
52596902a6 | ||
|
|
90e3f5acda | ||
|
|
909db3ae71 | ||
|
|
ab6f062ff9 | ||
|
|
2060dc61bc | ||
|
|
1bf263c4a2 | ||
|
|
0d975bc4fb | ||
|
|
84e065752f | ||
|
|
50e1a1a7ca | ||
|
|
73f40e96a5 | ||
|
|
c92fc19b5c | ||
|
|
2700f7175e | ||
|
|
3cd9434b56 | ||
|
|
1eda538da5 | ||
|
|
46a454f194 | ||
|
|
8168c6c407 | ||
|
|
ab5e2a4163 | ||
|
|
09aebbdafe | ||
|
|
7b4c0a1683 | ||
|
|
a2400f6baf | ||
|
|
520050da19 | ||
|
|
f9728aff2c | ||
|
|
c7006ec6b4 | ||
|
|
dc613835e1 | ||
|
|
82b33dc40a | ||
|
|
8f58c97c6d | ||
|
|
5c42b3eab0 | ||
|
|
f6c14d6b62 | ||
|
|
229f96f872 | ||
|
|
f4eb336ad3 | ||
|
|
8c952aa381 | ||
|
|
be19f27f40 | ||
|
|
3cc3ef6e70 | ||
|
|
88f21e9143 | ||
|
|
db5f988324 | ||
|
|
71b4d6345b | ||
|
|
cc0cf99fed | ||
|
|
8f00abc838 | ||
|
|
39e1359142 | ||
|
|
8ea58432c9 | ||
|
|
6695927ea9 | ||
|
|
1709139200 | ||
|
|
2db77b0cd2 | ||
|
|
e588948ff5 | ||
|
|
05cc7ccb60 | ||
|
|
93d94564c1 | ||
|
|
2b42e7edb0 | ||
|
|
6f73261186 | ||
|
|
d07229aa6b | ||
|
|
edcba61aa9 | ||
|
|
ca72aa93d7 | ||
|
|
9f74caf65c | ||
|
|
fac0bcbd35 | ||
|
|
816856b0c6 | ||
|
|
6632b2b6c3 | ||
|
|
c448ba6f5a | ||
|
|
286644d0b8 | ||
|
|
4ffd234ff9 | ||
|
|
3717df610a | ||
|
|
66cae54ee3 | ||
|
|
57e46e41e3 | ||
|
|
8672329218 | ||
|
|
21c992242e | ||
|
|
886d65f686 | ||
|
|
866a53088b | ||
|
|
062928d2e2 | ||
|
|
16e0bca570 | ||
|
|
c3b0e2fa99 | ||
|
|
d8d6c98970 | ||
|
|
ac7b093f99 | ||
|
|
f9b248b87f | ||
|
|
3fb7444580 | ||
|
|
e6c3840a4d | ||
|
|
ca9ca876f5 | ||
|
|
3d5fef6e80 | ||
|
|
b9482e3c87 | ||
|
|
d8c64479d7 | ||
|
|
d2960aeb09 | ||
|
|
48b8e3bb3f | ||
|
|
3aeac357b2 | ||
|
|
0aad131204 | ||
|
|
1e6ed0adbc | ||
|
|
925883bf4c | ||
|
|
9ebfdeb7ee | ||
|
|
09f5179216 | ||
|
|
77dde41f7b | ||
|
|
963a9fe600 | ||
|
|
0e37bbfd2c | ||
|
|
60170ad68c | ||
|
|
609e579442 | ||
|
|
298af98d52 | ||
|
|
075dab27fa | ||
|
|
10290f54ae | ||
|
|
6493578749 | ||
|
|
99472e7652 | ||
|
|
ad4afd599c | ||
|
|
403bcfac10 | ||
|
|
8d7e442065 | ||
|
|
951e71a0e5 | ||
|
|
5215c30ade | ||
|
|
e6ef094079 | ||
|
|
0a5f165371 | ||
|
|
3d6bdeb3df | ||
|
|
573a6e11e3 | ||
|
|
f29e4e87ef | ||
|
|
d35c64b1a2 | ||
|
|
d81ce3e566 | ||
|
|
9b7653cccb | ||
|
|
f5847f4f02 | ||
|
|
ca7c77bc1d | ||
|
|
2d0564cb78 | ||
|
|
1ec9739629 | ||
|
|
ac86937c88 | ||
|
|
1ce595083a | ||
|
|
4afca6900b | ||
|
|
1d9cfe1e96 | ||
|
|
518157d9fa | ||
|
|
bf4aa50c8c | ||
|
|
4164b3229b | ||
|
|
0551642a35 | ||
|
|
e8c5c18af1 | ||
|
|
94c12e3771 | ||
|
|
728db64485 | ||
|
|
1623ba4f41 | ||
|
|
a3d6c56ec3 | ||
|
|
70852c24de | ||
|
|
4a01313de3 | ||
|
|
ffa8016355 | ||
|
|
fad5988ed6 | ||
|
|
074ee859c4 | ||
|
|
1f3e660108 | ||
|
|
a2442ee914 | ||
|
|
b82774c51d | ||
|
|
2e6a01a7c8 | ||
|
|
155a7fb6e7 | ||
|
|
dd81dd03e0 | ||
|
|
53335677e3 | ||
|
|
f645a96d18 | ||
|
|
4bc07a087a | ||
|
|
7770c2a131 | ||
|
|
3145c7d5f1 | ||
|
|
7e2ea4df2c | ||
|
|
8cc61f1197 | ||
|
|
0096cf178a | ||
|
|
a9bb108802 | ||
|
|
ec6d1e2321 | ||
|
|
6ef0c8e950 | ||
|
|
2ac5a08559 | ||
|
|
b4c31f78ec | ||
|
|
7f7d5a8f79 | ||
|
|
230bbf01fc | ||
|
|
d1418210ca | ||
|
|
ee3634cc5c | ||
|
|
1bf57d40f2 | ||
|
|
461e187b03 | ||
|
|
f6b583bb9d | ||
|
|
d8a8864cee | ||
|
|
2c22b06feb | ||
|
|
ff98f85488 | ||
|
|
3cfd8f7671 | ||
|
|
22ec1ea5a6 | ||
|
|
45a4bb4174 | ||
|
|
32d67666cd | ||
|
|
ce5fea2abd | ||
|
|
cb1dd0a3db | ||
|
|
9950602eff | ||
|
|
0389dd968f | ||
|
|
7c1e163d82 | ||
|
|
db48b9527d | ||
|
|
46899ccadb | ||
|
|
9895e682ac | ||
|
|
d8e4fd4cdd | ||
|
|
19f1cbfc4a | ||
|
|
084c985117 | ||
|
|
8789716ae4 | ||
|
|
5fe97b9c2e | ||
|
|
33d91fdef8 | ||
|
|
ac1a272321 | ||
|
|
c0d54a06f6 | ||
|
|
6ed8890c2e | ||
|
|
55e3f5c1db | ||
|
|
831e5c2682 | ||
|
|
d08d0c42e9 | ||
|
|
b40fc4b64d | ||
|
|
2bfa63aecf | ||
|
|
a478dc7ee8 | ||
|
|
32c20806bc | ||
|
|
308252f566 | ||
|
|
9e07efc126 | ||
|
|
ed534f34f5 | ||
|
|
3b98d83a6b | ||
|
|
38454df9a3 | ||
|
|
a30deef3ed | ||
|
|
1029a06a87 | ||
|
|
01956af43a | ||
|
|
4e490f6058 | ||
|
|
92de49be00 | ||
|
|
75f7972b88 | ||
|
|
4c441a1b0b | ||
|
|
1db8920b18 | ||
|
|
8b79c7f139 | ||
|
|
427e4f4724 | ||
|
|
35a4d0be08 | ||
|
|
56f6b98b80 | ||
|
|
e3d5d8d76c | ||
|
|
a90f123b50 | ||
|
|
1b84627171 | ||
|
|
eca6a8aa2e | ||
|
|
9b71b087ec | ||
|
|
435067aa5f | ||
|
|
2ea468daa3 | ||
|
|
d15e27107e | ||
|
|
354e0a822d | ||
|
|
2f401d7d74 | ||
|
|
4dd3844680 | ||
|
|
bc0ca61c6a | ||
|
|
80ef108220 | ||
|
|
2e9efc0e8a | ||
|
|
13fa983e61 | ||
|
|
eb240c905f | ||
|
|
fa0c92a7c4 | ||
|
|
ea22cd302a | ||
|
|
a9978fcfd2 | ||
|
|
0a3a22db9d | ||
|
|
f44ec97f3b | ||
|
|
c484ed4858 | ||
|
|
36f119a96a | ||
|
|
0cfccee3bd | ||
|
|
286a63e3de | ||
|
|
51d58ce6d4 | ||
|
|
16a1ba5700 | ||
|
|
93598982f9 | ||
|
|
b5ce8d257c | ||
|
|
8faa6e4515 | ||
|
|
1fee6a702a | ||
|
|
f4c5050a16 | ||
|
|
a3a7ab3ae1 | ||
|
|
47348d2c9f | ||
|
|
697ed3bf37 | ||
|
|
e845c34b52 | ||
|
|
75073c0ed3 | ||
|
|
e50408b461 | ||
|
|
b93a2717fd | ||
|
|
4494728cf8 | ||
|
|
60eed8d89f | ||
|
|
0f249aa729 | ||
|
|
6907837fce | ||
|
|
31cec2de95 | ||
|
|
e2105ca8fa | ||
|
|
c66032d169 | ||
|
|
60c0c16f13 | ||
|
|
161081e960 | ||
|
|
fe087806cc | ||
|
|
95d5359cbe | ||
|
|
f40ee34c5b | ||
|
|
fd3bc605c6 | ||
|
|
2dc3283f19 | ||
|
|
f9df6431c9 | ||
|
|
036f935fa9 | ||
|
|
1af34b43e3 | ||
|
|
397baf0254 | ||
|
|
ae385d8336 | ||
|
|
d09cdc0436 | ||
|
|
f65d2162f8 | ||
|
|
f32ea1737a | ||
|
|
a0dd90804c | ||
|
|
4264b236b3 | ||
|
|
784600d930 | ||
|
|
05f2236193 | ||
|
|
c5ae8a70e1 | ||
|
|
4041e786b2 | ||
|
|
81f2fb201e | ||
|
|
42c4f963f9 | ||
|
|
34cbc9e264 | ||
|
|
a8330b6db3 | ||
|
|
e0f23c9031 | ||
|
|
f155f3260f | ||
|
|
22474753c4 | ||
|
|
c02310b80f | ||
|
|
316c71d7e5 | ||
|
|
9c52fd2e74 | ||
|
|
7754c1f66e | ||
|
|
b4d0138850 | ||
|
|
cb53a64cde | ||
|
|
e963715e94 | ||
|
|
e7776f8db8 | ||
|
|
fd9ff334b4 | ||
|
|
285aa36556 | ||
|
|
d16b45fd2d | ||
|
|
dbb59228f2 | ||
|
|
536591f842 | ||
|
|
8d9afbc606 | ||
|
|
1ad1787eaa | ||
|
|
6406e52705 | ||
|
|
aa0137b1c4 | ||
|
|
6f51c46052 | ||
|
|
75a4d37e2e | ||
|
|
fecfcd81c1 | ||
|
|
e5cc6e4020 | ||
|
|
f7f46e7c65 | ||
|
|
4c66c7f9b2 | ||
|
|
5e2e7a582d | ||
|
|
01f63e5d58 | ||
|
|
cfdef77b28 | ||
|
|
9e1f72a435 | ||
|
|
2a03012e2c | ||
|
|
dfdb005099 | ||
|
|
27de58f2f8 | ||
|
|
a72cc99012 | ||
|
|
382f75bc9d | ||
|
|
d600cd94fe | ||
|
|
728ac5ff72 | ||
|
|
24236718d5 | ||
|
|
40ed7a3b1e | ||
|
|
344575dde1 | ||
|
|
edf80cfb3b | ||
|
|
b06f0ea20e | ||
|
|
a3e95e798f | ||
|
|
3403635ce6 | ||
|
|
60e3131c81 | ||
|
|
89973d8050 | ||
|
|
dec344462d | ||
|
|
a1ee1a2a76 | ||
|
|
c5dda64fa8 | ||
|
|
f78b4ba693 | ||
|
|
e35d074110 | ||
|
|
9052db930f | ||
|
|
077330b764 | ||
|
|
67b09cba5f | ||
|
|
124cb9d977 | ||
|
|
1dddcb490e | ||
|
|
66e986960d | ||
|
|
d9e2029074 | ||
|
|
d511216c82 | ||
|
|
29ff5bb93f | ||
|
|
831ecc6af0 | ||
|
|
c5734063d1 | ||
|
|
280e163690 | ||
|
|
e42b152f16 | ||
|
|
77f551a4cc | ||
|
|
ab38f745a0 | ||
|
|
a94d96514e | ||
|
|
2ceda70a97 | ||
|
|
3c4e93a3c1 | ||
|
|
cef58d1d6f | ||
|
|
d00268c9b8 | ||
|
|
91992240bd | ||
|
|
870e6c2c28 | ||
|
|
24be86420c | ||
|
|
b50739c175 | ||
|
|
93c595d95e | ||
|
|
d8ff9851a3 | ||
|
|
026ceaf3ec | ||
|
|
d56bca65aa | ||
|
|
9359cae9cd | ||
|
|
289bfc0b43 | ||
|
|
801570e4cf | ||
|
|
ee69c1f80e | ||
|
|
75553b246c | ||
|
|
98b72ca572 | ||
|
|
17693dd5ca | ||
|
|
47b2b97fef | ||
|
|
dd12c83fa0 | ||
|
|
6aa60b63b5 | ||
|
|
262e059fa6 | ||
|
|
2f70ac5a91 | ||
|
|
56523aa148 | ||
|
|
fcd887fd52 | ||
|
|
2041b8084f | ||
|
|
d14ba1f4e1 | ||
|
|
90d64fe1df | ||
|
|
8d3ec23483 | ||
|
|
a8f7b24452 | ||
|
|
33fbfdfe40 | ||
|
|
4ac38ab2bc | ||
|
|
eb360351e5 | ||
|
|
d1685600d3 | ||
|
|
6a354db491 | ||
|
|
1631f159ef | ||
|
|
03e306349c | ||
|
|
5c59354c58 | ||
|
|
482641e30e | ||
|
|
6e8b1bb9ad | ||
|
|
ef3ec96af2 | ||
|
|
8d40176028 | ||
|
|
4327a09d76 | ||
|
|
754965b572 | ||
|
|
f316c4d4b8 | ||
|
|
e789fe8d2a | ||
|
|
cc489708ee | ||
|
|
27facadb6a | ||
|
|
0c1945dc5b | ||
|
|
35700d1634 | ||
|
|
1e1127bd20 | ||
|
|
668508cc37 | ||
|
|
34b9aaedee | ||
|
|
e725beaa4a | ||
|
|
e6c52cf26c | ||
|
|
53f67ff396 | ||
|
|
e539ff4f95 | ||
|
|
617f4730a0 | ||
|
|
adaddde624 | ||
|
|
a98e92b4ea | ||
|
|
df0518f934 | ||
|
|
28ed579b69 | ||
|
|
5b0d068ccd | ||
|
|
f45c0aab51 | ||
|
|
775c3b9188 | ||
|
|
52082e1296 | ||
|
|
2a939aad8d | ||
|
|
4cbd13fd9c | ||
|
|
8472513093 | ||
|
|
3ce731d84b | ||
|
|
6b4cd7557c | ||
|
|
46270f9f20 | ||
|
|
56b0bfd518 | ||
|
|
39b0e0fb91 | ||
|
|
d05d7091ae | ||
|
|
0d3979efd0 | ||
|
|
8923d34ce7 | ||
|
|
fa71c483d0 | ||
|
|
9382fc6dc5 | ||
|
|
1982edfde3 | ||
|
|
3c60ccfd4d | ||
|
|
13f3c5040a | ||
|
|
f71cb0e427 | ||
|
|
63de46c532 | ||
|
|
8ef38cb252 | ||
|
|
31872aaceb | ||
|
|
5ec22c6845 | ||
|
|
5eb3132dae | ||
|
|
98bf4064e7 | ||
|
|
f6fa94a8ce | ||
|
|
ebccc7940b | ||
|
|
62bf211894 | ||
|
|
754283d37b | ||
|
|
a9b33ed39f | ||
|
|
771a8955a4 | ||
|
|
ad5654952a | ||
|
|
678e8f0fde | ||
|
|
680cf5ef2a | ||
|
|
2645bf555a | ||
|
|
70a653d0a5 | ||
|
|
f4f61b92b4 | ||
|
|
0e67ab01ca | ||
|
|
2085a7d163 | ||
|
|
17184bface | ||
|
|
4b5450853d | ||
|
|
5945907429 | ||
|
|
4a9b3af278 | ||
|
|
e74df53997 | ||
|
|
e787e6ea22 | ||
|
|
696c489524 | ||
|
|
166d65a1ba | ||
|
|
e3b2c00db1 | ||
|
|
7da061f0d7 | ||
|
|
f388086ab9 | ||
|
|
fd926d6121 | ||
|
|
4c73c26dd8 | ||
|
|
3095478904 | ||
|
|
8a4c361ece | ||
|
|
651c629ff3 | ||
|
|
2826e29494 | ||
|
|
3aa26c4df2 | ||
|
|
3f42d40c78 | ||
|
|
0021c6019e | ||
|
|
c5e257888a | ||
|
|
c265016944 | ||
|
|
4f4cdacc46 | ||
|
|
bfd512b99b | ||
|
|
67bb63bd09 | ||
|
|
e5133a78f8 | ||
|
|
66196d2caf | ||
|
|
e755067387 | ||
|
|
902a88c25e | ||
|
|
48bc23c065 | ||
|
|
b5a6a3149d | ||
|
|
c1b3079d93 | ||
|
|
1e579428e7 | ||
|
|
c8b78654d9 | ||
|
|
fbe9215b17 | ||
|
|
b2c1b4ac45 | ||
|
|
72db3754d1 | ||
|
|
017af7cbfd | ||
|
|
0af9d26fe5 | ||
|
|
a598abcd8e | ||
|
|
f806befd2f | ||
|
|
dd6082a081 | ||
|
|
1155b0c42f | ||
|
|
00a68a9548 | ||
|
|
ec0912ccb6 | ||
|
|
8791b44e5f | ||
|
|
069ac60f62 | ||
|
|
7d391d4789 | ||
|
|
5f061b9419 | ||
|
|
536bae70b7 | ||
|
|
2826c6986c | ||
|
|
b9fd2c87f3 | ||
|
|
b58bacaf80 | ||
|
|
3bf8ee10d3 | ||
|
|
2737f6531b | ||
|
|
21377cfa2b | ||
|
|
42f7cd52ac | ||
|
|
5951843712 | ||
|
|
35a3cc3461 | ||
|
|
ca8176312f | ||
|
|
02f08111cf | ||
|
|
2674de01dd | ||
|
|
2b7d0b5a47 | ||
|
|
114e3a1e76 | ||
|
|
9bf94ad50f | ||
|
|
cdf5d18f54 | ||
|
|
510eb1f981 | ||
|
|
217d3afd18 | ||
|
|
86b0c57d7a | ||
|
|
27ea3dcb2f | ||
|
|
bf90d15881 | ||
|
|
0dad568cbe | ||
|
|
21634e2681 | ||
|
|
e820934192 | ||
|
|
95033ef756 | ||
|
|
a07509f770 | ||
|
|
48f1e265f4 | ||
|
|
0959b1248b | ||
|
|
14a6c349c2 | ||
|
|
293b7c2650 | ||
|
|
984c9dd915 | ||
|
|
73dc64d9ff | ||
|
|
655e2c67ad | ||
|
|
0804d54759 | ||
|
|
2f89b0d791 | ||
|
|
e1ed514b10 | ||
|
|
c57c77030e | ||
|
|
3fa2e3cef2 | ||
|
|
f8e1a74c26 | ||
|
|
cc93822436 | ||
|
|
6fdcae7320 | ||
|
|
f561799f74 | ||
|
|
079a13d41a | ||
|
|
aed8b123bc | ||
|
|
d0136074b6 | ||
|
|
de6d156533 | ||
|
|
7ae7626c1b | ||
|
|
49c369528d | ||
|
|
0d59fe3d2b | ||
|
|
c5231f10ff | ||
|
|
2551295ce0 | ||
|
|
dbe5f7027b | ||
|
|
16d3c45782 | ||
|
|
9a9f366d3b | ||
|
|
020f0b8322 | ||
|
|
504fd107c7 | ||
|
|
dc06fe2215 | ||
|
|
0bc74e7056 | ||
|
|
beaac0a1ab | ||
|
|
cf1939e16d | ||
|
|
8596dcc4b5 | ||
|
|
753ab0a089 | ||
|
|
b61257efc2 | ||
|
|
74c14c0fa4 | ||
|
|
477157cc2b | ||
|
|
c96fd3b19b | ||
|
|
28f6931e16 | ||
|
|
beb1427387 | ||
|
|
cfc237c2b7 | ||
|
|
a592ebd1ff | ||
|
|
d3a9e76ae2 | ||
|
|
955021247e | ||
|
|
fbccf6e22f | ||
|
|
b4c0b32b26 | ||
|
|
ed3d9dcbbf | ||
|
|
ed503b8051 | ||
|
|
e23bf9f94d | ||
|
|
f9fc884867 | ||
|
|
fa91525a6d | ||
|
|
0e07f3c9ba | ||
|
|
bbaaead09c | ||
|
|
25c8f02634 | ||
|
|
2fef462782 | ||
|
|
65c57c730c | ||
|
|
34096b73ef | ||
|
|
8686fbfa3f | ||
|
|
ce3f581434 | ||
|
|
ddd8fa31d6 | ||
|
|
9ce6f8ad93 | ||
|
|
5286f20862 | ||
|
|
4c078084dc | ||
|
|
1d9ade4c36 | ||
|
|
b31f6dd24a | ||
|
|
ad54b174a4 | ||
|
|
7223074f1d | ||
|
|
db027170a8 | ||
|
|
2821b917d0 | ||
|
|
91734a6484 | ||
|
|
0738dae895 | ||
|
|
59885a9e2e | ||
|
|
8f0386d9ac | ||
|
|
b5b92768e2 | ||
|
|
4ee3a8e876 | ||
|
|
782bef5eec | ||
|
|
1ae8dda8a8 | ||
|
|
7ebb6d3056 | ||
|
|
7f8fd4b0f6 | ||
|
|
3ad25e8ff6 | ||
|
|
9ec0b2ed68 | ||
|
|
7665adf7d1 | ||
|
|
9a6cf3d967 | ||
|
|
50664487b9 | ||
|
|
807b0d4348 | ||
|
|
76bcc0c99c | ||
|
|
1490b32d1b | ||
|
|
3e6640efb2 | ||
|
|
36e8d251c8 | ||
|
|
a4b4a5566d | ||
|
|
8fd78ce512 | ||
|
|
3f35fd335d | ||
|
|
36f2021186 | ||
|
|
b81508c4e2 | ||
|
|
6074a0fbbf | ||
|
|
cc275e1016 | ||
|
|
3c7cd9a6c4 | ||
|
|
48a3c4bd2e | ||
|
|
73f07958d8 | ||
|
|
3595473485 | ||
|
|
b753c69cfe | ||
|
|
58cd797e4c | ||
|
|
fc90f32ec0 | ||
|
|
c953b1b3d1 | ||
|
|
4b2bf12fd1 | ||
|
|
9d17f397c0 | ||
|
|
16c1d6e937 | ||
|
|
1f28713f1a | ||
|
|
bc68e990af | ||
|
|
9021f071d4 | ||
|
|
f01af62b53 | ||
|
|
92758ec50d | ||
|
|
5dd748c633 | ||
|
|
3a61ac2119 | ||
|
|
765db86d4e | ||
|
|
ed3e9ce2e2 | ||
|
|
c61cc37bba | ||
|
|
cf4002bcc9 | ||
|
|
5ce2820799 | ||
|
|
86e911ba4b | ||
|
|
513cd1c325 | ||
|
|
54b4dc1dfa | ||
|
|
4d92af5a6b | ||
|
|
949f043a96 | ||
|
|
90d5c9da44 | ||
|
|
a5fa212fc7 | ||
|
|
0185ea1b4f | ||
|
|
b6493f896f | ||
|
|
2c52fbd1b9 | ||
|
|
1c9acef6dd | ||
|
|
c2459fd50e | ||
|
|
94f72d6093 | ||
|
|
783786cf8c | ||
|
|
0092df2c02 | ||
|
|
b312725fd3 | ||
|
|
4599144f31 | ||
|
|
eb9f058fa1 | ||
|
|
670cde78da | ||
|
|
cc9d6fd08b | ||
|
|
5c2f0f0557 | ||
|
|
115d19e289 | ||
|
|
23f212a4c0 | ||
|
|
8d1462ffd8 | ||
|
|
62869bae3d | ||
|
|
dab3b23575 | ||
|
|
b56d9e12b5 | ||
|
|
707b55b6a5 | ||
|
|
4ee0f1459d | ||
|
|
9f6a682ca9 | ||
|
|
dad01e3051 | ||
|
|
58528d1a3e | ||
|
|
d89ccf261b | ||
|
|
6e14014bfa | ||
|
|
16610b2dca | ||
|
|
7edc8f458d | ||
|
|
0cca6893f3 | ||
|
|
cfa0d42390 | ||
|
|
674a31d12f | ||
|
|
550cd995e8 | ||
|
|
622ff9cd6a | ||
|
|
d39235858d | ||
|
|
fca17cb713 | ||
|
|
1f28e8c31f | ||
|
|
a7b46adc56 | ||
|
|
83a0b6b800 | ||
|
|
ab0ef44289 | ||
|
|
a4878a5b22 | ||
|
|
030ecffa15 | ||
|
|
429cff93ee | ||
|
|
3090a2aee4 | ||
|
|
7eebcbdbbc | ||
|
|
dc14528427 | ||
|
|
2fda677457 | ||
|
|
2b12905df1 | ||
|
|
fb2f114336 | ||
|
|
47299ea587 | ||
|
|
2cfab3678e | ||
|
|
2147d386be | ||
|
|
1fa0d4f45c | ||
|
|
73c9c1c25a | ||
|
|
42e365d913 | ||
|
|
4fd6027bca | ||
|
|
e40af441c9 | ||
|
|
8a2fe3d916 | ||
|
|
a6fa351b72 | ||
|
|
4f97639009 | ||
|
|
5c21c33e58 | ||
|
|
2326e9a6a7 | ||
|
|
9245ffaf16 | ||
|
|
67e3fb6498 | ||
|
|
9576bec6c3 | ||
|
|
492cbc6227 | ||
|
|
5e5d37c38f | ||
|
|
4939837d5b | ||
|
|
f79aeef889 | ||
|
|
28b3013424 | ||
|
|
74be1a5963 | ||
|
|
68da1c558f | ||
|
|
c729adeb08 | ||
|
|
970bd06fd2 | ||
|
|
53e0d4d2e0 | ||
|
|
389690c3fa | ||
|
|
13e12c9565 | ||
|
|
0aa8e03f34 | ||
|
|
4af9c2fcdd | ||
|
|
44019e2805 | ||
|
|
cabec378f4 | ||
|
|
7c9674de6c | ||
|
|
a2a7557cc0 | ||
|
|
eaf9d2e44a | ||
|
|
4447a64eaa | ||
|
|
72b050b4a8 | ||
|
|
eb642f40b9 | ||
|
|
a87416971b | ||
|
|
56e4e56b57 | ||
|
|
bd5839639d | ||
|
|
501441b736 | ||
|
|
58655e9a0b | ||
|
|
526df41db1 | ||
|
|
833c73e81b | ||
|
|
cc560ca3f9 | ||
|
|
8e85a28d85 | ||
|
|
0441144968 | ||
|
|
ed11e17129 | ||
|
|
fffdc4e0ca | ||
|
|
2bc74cffe6 | ||
|
|
897d29ecd6 | ||
|
|
8e2deab4ad | ||
|
|
4f842a79f2 | ||
|
|
47fd1634b6 | ||
|
|
d1364c3130 | ||
|
|
4c12e0aaf8 | ||
|
|
d6f60f4502 | ||
|
|
d5d24594e8 | ||
|
|
9834f72fc7 | ||
|
|
f6cd2862bd | ||
|
|
5131eb6b90 | ||
|
|
b0f5d5a594 | ||
|
|
1a04ec6419 | ||
|
|
a8be6fb8fb | ||
|
|
5bc1f5b4e8 | ||
|
|
3696a19970 | ||
|
|
a29dd21de4 | ||
|
|
195e688bac | ||
|
|
1e10ebfb68 | ||
|
|
05c53394f3 | ||
|
|
7419922040 | ||
|
|
b820d23401 | ||
|
|
473d5f4aba | ||
|
|
eb96046e97 | ||
|
|
65de2e76b4 | ||
|
|
a5bf9779fd | ||
|
|
0e2b329bb7 | ||
|
|
4029ec3713 | ||
|
|
6c3b1fde87 | ||
|
|
406faf4c66 | ||
|
|
05901fcd3a | ||
|
|
3052256db3 | ||
|
|
15ba0abb34 | ||
|
|
f8bf9e99c4 | ||
|
|
4bb3b0323d | ||
|
|
e8429f509b | ||
|
|
53a6dca3c6 | ||
|
|
a9b3fb373b | ||
|
|
34c42c6fa3 | ||
|
|
faeb637353 | ||
|
|
d41ce87334 | ||
|
|
a1c014462c | ||
|
|
647d3ba810 | ||
|
|
05be1c6603 | ||
|
|
a90773a61d | ||
|
|
fb84c78544 | ||
|
|
5a775e09dc | ||
|
|
d41de481a4 | ||
|
|
cc0d562e9a | ||
|
|
8b09292e77 | ||
|
|
5f9f241e37 | ||
|
|
84dfdfe659 | ||
|
|
2ad0d0d0d8 | ||
|
|
7b090c588b | ||
|
|
7da1b43f2b | ||
|
|
ca14c0e2a6 | ||
|
|
aa8b84bb56 | ||
|
|
dc84559d0b | ||
|
|
449c379d22 | ||
|
|
0d4a377558 | ||
|
|
8e93bf7362 | ||
|
|
df2fdd56ba | ||
|
|
9559fad8ac | ||
|
|
cec3fc934d | ||
|
|
882e6a159c | ||
|
|
2293a07a06 | ||
|
|
611d1f872d | ||
|
|
425eca145b | ||
|
|
ab2e1ecb40 | ||
|
|
faf5960373 | ||
|
|
8e5687a4af | ||
|
|
efff8e2ae2 | ||
|
|
e7bd038db1 | ||
|
|
8ff07bc196 | ||
|
|
1d77572117 | ||
|
|
412d285850 | ||
|
|
01c9b1847e | ||
|
|
42c0f9ac52 | ||
|
|
39bc741bca | ||
|
|
f975063b7d | ||
|
|
8b72479f62 | ||
|
|
1603566bcc | ||
|
|
942d924779 | ||
|
|
6b1c97db79 | ||
|
|
a396b1099c | ||
|
|
35c92d0cff | ||
|
|
ce7c74b2e1 | ||
|
|
f2a5cd0b67 | ||
|
|
27cae0d5d8 | ||
|
|
b2b1450e5d | ||
|
|
06e2ef1a8e | ||
|
|
65849d9b93 | ||
|
|
78896fc623 | ||
|
|
fdfbc90255 | ||
|
|
33bf1b0e2c | ||
|
|
672959c13f | ||
|
|
a186ea0fe3 | ||
|
|
280285cda9 | ||
|
|
d1f78cb8c0 | ||
|
|
5b2f0be080 | ||
|
|
d99cb1cf83 | ||
|
|
4232d97b57 | ||
|
|
525fbeeb4d | ||
|
|
5c1b742979 | ||
|
|
1c42060241 | ||
|
|
ea7f838170 | ||
|
|
d3883d4bd9 | ||
|
|
b5cb2f8b9c | ||
|
|
a55051de2f | ||
|
|
7fb583dcfd | ||
|
|
c608b0e8a3 | ||
|
|
d85ad10d34 | ||
|
|
966c4117ec | ||
|
|
0fa4c11ea6 | ||
|
|
e118e59ce0 | ||
|
|
c2e2370655 | ||
|
|
1590cdf19f | ||
|
|
f5fcd232f6 | ||
|
|
4fb907875e | ||
|
|
1374e0eeba | ||
|
|
7a790d1830 | ||
|
|
00ba89b6d6 | ||
|
|
f16cdc9f0a | ||
|
|
a6f5de8690 | ||
|
|
afbef95f7d | ||
|
|
9938a139fe | ||
|
|
ceb1566834 | ||
|
|
25ab99b91d | ||
|
|
43ff8e4197 | ||
|
|
a972b5a77a | ||
|
|
3d1224e18d | ||
|
|
ab11435ed5 | ||
|
|
9b289eca9d | ||
|
|
3d36208877 | ||
|
|
0a471b76b5 | ||
|
|
c30b40abe7 | ||
|
|
fdf0347240 | ||
|
|
fc3a0bd427 | ||
|
|
77ab46686d | ||
|
|
c0fb1cb59c | ||
|
|
286aa243f5 | ||
|
|
ef16cd2e6f | ||
|
|
a26bfb3fda | ||
|
|
1901ecb244 | ||
|
|
69419571a9 | ||
|
|
a407a51da6 | ||
|
|
a82f943c76 | ||
|
|
89e6c75d58 | ||
|
|
e817d5beda | ||
|
|
66da6bcd1c | ||
|
|
d90c7ff43b | ||
|
|
6c855bf48e | ||
|
|
96280d76af | ||
|
|
b742229e59 | ||
|
|
aa95cc7d60 | ||
|
|
eaf62d39fd | ||
|
|
4ede18ce5f | ||
|
|
c07e1e16af | ||
|
|
6a1311b4bc | ||
|
|
6cb5888c13 | ||
|
|
03a0e72fae | ||
|
|
5cae95eb9f | ||
|
|
d83d40cf9b | ||
|
|
36069da2f8 | ||
|
|
5b3c48fd02 | ||
|
|
e14b67786c | ||
|
|
8ece64ab82 | ||
|
|
7069735aa2 | ||
|
|
da54697075 | ||
|
|
9534d95619 | ||
|
|
0da2843281 | ||
|
|
97d678fd2a | ||
|
|
8c86f5bcec | ||
|
|
87a7d85e89 | ||
|
|
534224133b | ||
|
|
8bbb320867 | ||
|
|
56f929ed4f | ||
|
|
1cf0032d9f | ||
|
|
d3e041e292 | ||
|
|
6cbb77afda | ||
|
|
f0dd302c77 | ||
|
|
a51c5698c7 | ||
|
|
072a0e32d8 | ||
|
|
e3cd7a2343 | ||
|
|
b6d71710a0 | ||
|
|
171017c38c | ||
|
|
8c31afae7d | ||
|
|
afe6d84710 | ||
|
|
e445ae5a7a | ||
|
|
b9ba44edd7 | ||
|
|
fd045c67c9 | ||
|
|
0d7dfeeb86 | ||
|
|
1968bf50f1 | ||
|
|
87e333b44f | ||
|
|
4524f825d4 |
@@ -17,6 +17,14 @@ checks:
|
|||||||
similar-code:
|
similar-code:
|
||||||
config:
|
config:
|
||||||
threshold: 65
|
threshold: 65
|
||||||
|
plugins:
|
||||||
|
duplication:
|
||||||
|
enabled: true
|
||||||
|
config:
|
||||||
|
languages:
|
||||||
|
javascript:
|
||||||
|
mass_threshold: 110
|
||||||
|
count_threshold: 3
|
||||||
exclude_paths:
|
exclude_paths:
|
||||||
- "public/vendor/*"
|
- "public/vendor/*"
|
||||||
- "test/*"
|
- "test/*"
|
||||||
191
.eslintrc
191
.eslintrc
@@ -5,136 +5,111 @@
|
|||||||
},
|
},
|
||||||
|
|
||||||
"rules": {
|
"rules": {
|
||||||
// Customized
|
// === Configure rules for our style ===
|
||||||
|
// imports must be resolvable
|
||||||
|
"import/no-unresolved": "error",
|
||||||
|
// use single quotes,
|
||||||
|
// unless a different style allows avoiding escapes
|
||||||
|
"quotes": ["error", "single", {
|
||||||
|
"avoidEscape": true,
|
||||||
|
"allowTemplateLiterals": true
|
||||||
|
}],
|
||||||
|
// allow else-if return
|
||||||
|
"no-else-return": [ "error", { "allowElseIf": true } ],
|
||||||
|
// expressions split over multiple lines
|
||||||
|
// should break after the operator
|
||||||
|
"operator-linebreak": [ "error", "after" ],
|
||||||
|
// require arrow parens only when needed
|
||||||
|
// and whenever the body is a block
|
||||||
|
"arrow-parens": ["error", "as-needed", { "requireForBlockBody": true }],
|
||||||
|
// what variables are errors in callbacks
|
||||||
"handle-callback-err": [ "error","^(e$|(e|(.*(_e|E)))rr)" ],
|
"handle-callback-err": [ "error","^(e$|(e|(.*(_e|E)))rr)" ],
|
||||||
|
// allow dangling commas in functions
|
||||||
|
// require them everywhere else
|
||||||
"comma-dangle": ["error", {
|
"comma-dangle": ["error", {
|
||||||
"arrays": "always-multiline",
|
"arrays": "always-multiline",
|
||||||
"objects": "always-multiline",
|
"objects": "always-multiline",
|
||||||
"imports": "always-multiline",
|
"imports": "always-multiline",
|
||||||
"exports": "always-multiline",
|
"exports": "always-multiline",
|
||||||
"functions": "never"
|
"functions": "only-multiline"
|
||||||
}],
|
}],
|
||||||
|
// we actually encourage `return await`
|
||||||
"no-return-await": "off",
|
"no-return-await": "off",
|
||||||
"no-constant-condition": "off",
|
// allow `while (true)`
|
||||||
|
"no-constant-condition": ["error", { "checkLoops": false }],
|
||||||
|
// allow ignoring an error with `catch`
|
||||||
"no-empty": ["error", { "allowEmptyCatch": true }],
|
"no-empty": ["error", { "allowEmptyCatch": true }],
|
||||||
"no-underscore-dangle": "off",
|
// allow `3 + 5 - 1`, but not `3 * 5 - 1`
|
||||||
"no-console": "off",
|
|
||||||
"no-mixed-operators": ["error", { "allowSamePrecedence": true }],
|
"no-mixed-operators": ["error", { "allowSamePrecedence": true }],
|
||||||
|
// require `'use strict';`
|
||||||
"strict": ["error", "global"],
|
"strict": ["error", "global"],
|
||||||
"consistent-return": "off",
|
// we actually use tabs for indentation
|
||||||
"func-names": "off",
|
|
||||||
"no-tabs": "off",
|
|
||||||
"indent": ["error", "tab", { "SwitchCase": 1 }],
|
"indent": ["error", "tab", { "SwitchCase": 1 }],
|
||||||
|
"no-tabs": "off",
|
||||||
|
// we want `== null` to also handle undefined
|
||||||
"no-eq-null": "off",
|
"no-eq-null": "off",
|
||||||
"camelcase": "off",
|
// allow `for (..; i++)`
|
||||||
"no-new": "off",
|
|
||||||
"no-shadow": "off",
|
|
||||||
"no-use-before-define": ["error", "nofunc"],
|
|
||||||
"no-prototype-builtins": "off",
|
|
||||||
"new-cap": "off",
|
|
||||||
"no-plusplus": ["error", { "allowForLoopAfterthoughts": true }],
|
"no-plusplus": ["error", { "allowForLoopAfterthoughts": true }],
|
||||||
"object-curly-newline": "off",
|
// allow using functions defined later
|
||||||
"no-restricted-globals": "off",
|
"no-use-before-define": ["error", "nofunc"],
|
||||||
"function-paren-newline": "off",
|
// require consistent newlines before and after braces
|
||||||
"import/no-unresolved": "error",
|
// if contents are multiline
|
||||||
"quotes": ["error", "single", {
|
"object-curly-newline": ["error", { "consistent": true, "multiline": true }],
|
||||||
"avoidEscape": true,
|
// require consistent linebreaks inline function parenthesis (arguments or params)
|
||||||
"allowTemplateLiterals": true
|
"function-paren-newline": ["error", "consistent"],
|
||||||
|
// only require const if all parts of destructuring can be const
|
||||||
|
"prefer-const": ["error", { "destructuring": "all" }],
|
||||||
|
// don't require destructuring for arrays or assignment
|
||||||
|
"prefer-destructuring": ["error", {
|
||||||
|
"VariableDeclarator": { "array": false, "object": true },
|
||||||
|
"AssignmentExpression": { "array": false, "object": false }
|
||||||
}],
|
}],
|
||||||
"no-else-return": [ "error", { "allowElseIf": true } ],
|
// identical to airbnb rule, except for allowing for..of, because we want to use it
|
||||||
"operator-linebreak": [ "error", "after" ],
|
"no-restricted-syntax": [
|
||||||
"arrow-parens": ["error", "as-needed", { "requireForBlockBody": true }],
|
"error",
|
||||||
|
{
|
||||||
|
"selector": "ForInStatement",
|
||||||
|
"message": "for..in loops iterate over the entire prototype chain, which is virtually never what you want. Use Object.{keys,values,entries}, and iterate over the resulting array."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"selector": "LabeledStatement",
|
||||||
|
"message": "Labels are a form of GOTO; using them makes code confusing and hard to maintain and understand."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"selector": "WithStatement",
|
||||||
|
"message": "`with` is disallowed in strict mode because it makes code impossible to predict and optimize."
|
||||||
|
}
|
||||||
|
],
|
||||||
|
// allow lines of up to 120 characters
|
||||||
|
"max-len": ["error", { "code": 120, "tabWidth": 2, "ignoreUrls": true, "ignoreStrings": true, "ignoreTemplateLiterals": true, "ignoreRegExpLiterals": true }],
|
||||||
|
|
||||||
// ES6
|
// === Disable rules ===
|
||||||
"prefer-rest-params": "off",
|
// more liberal naming
|
||||||
"prefer-spread": "off",
|
"camelcase": "off",
|
||||||
"prefer-arrow-callback": "off",
|
"no-underscore-dangle": "off",
|
||||||
"prefer-template": "off",
|
// don't require anonymous function names
|
||||||
"no-var": "off",
|
"func-names": "off",
|
||||||
|
// allow console
|
||||||
|
"no-console": "off",
|
||||||
|
// allow new for side effects
|
||||||
|
// allow new with non-capitalized
|
||||||
|
"no-new": "off",
|
||||||
|
"new-cap": "off",
|
||||||
|
// allow shadowing variables (usually callbacks)
|
||||||
|
"no-shadow": "off",
|
||||||
|
// allow multiple empty lines in a row
|
||||||
|
"no-multiple-empty-lines": "off",
|
||||||
|
// allow not using object shorthand
|
||||||
"object-shorthand": "off",
|
"object-shorthand": "off",
|
||||||
"vars-on-top": "off",
|
|
||||||
"prefer-destructuring": "off",
|
|
||||||
|
|
||||||
// TODO
|
// TODO
|
||||||
|
"consistent-return": "off",
|
||||||
|
"no-restricted-globals": "off",
|
||||||
|
"no-prototype-builtins": "off",
|
||||||
"import/no-extraneous-dependencies": "off",
|
"import/no-extraneous-dependencies": "off",
|
||||||
"import/no-dynamic-require": "off",
|
"import/no-dynamic-require": "off",
|
||||||
"import/newline-after-import": "off",
|
|
||||||
"no-bitwise": "off",
|
|
||||||
"global-require": "off",
|
"global-require": "off",
|
||||||
"max-len": "off",
|
|
||||||
"no-param-reassign": "off",
|
"no-param-reassign": "off",
|
||||||
"no-restricted-syntax": "off",
|
"default-case": "off"
|
||||||
"no-script-url": "off",
|
|
||||||
"default-case": "off",
|
|
||||||
"linebreak-style": "off",
|
|
||||||
|
|
||||||
// "no-multi-assign": "off",
|
|
||||||
// "one-var": "off",
|
|
||||||
// "no-undef": "off",
|
|
||||||
// "max-nested-callbacks": "off",
|
|
||||||
// "no-mixed-requires": "off",
|
|
||||||
// "brace-style": "off",
|
|
||||||
// "max-statements-per-line": "off",
|
|
||||||
// "no-unused-vars": "off",
|
|
||||||
// "no-mixed-spaces-and-tabs": "off",
|
|
||||||
// "no-useless-concat": "off",
|
|
||||||
// "require-jsdoc": "off",
|
|
||||||
// "eqeqeq": "off",
|
|
||||||
// "no-negated-condition": "off",
|
|
||||||
// "one-var-declaration-per-line": "off",
|
|
||||||
// "no-lonely-if": "off",
|
|
||||||
// "radix": "off",
|
|
||||||
// "no-else-return": "off",
|
|
||||||
// "no-useless-escape": "off",
|
|
||||||
// "block-scoped-var": "off",
|
|
||||||
// "operator-assignment": "off",
|
|
||||||
// "yoda": "off",
|
|
||||||
// "no-loop-func": "off",
|
|
||||||
// "no-void": "off",
|
|
||||||
// "valid-jsdoc": "off",
|
|
||||||
// "no-cond-assign": "off",
|
|
||||||
// "no-redeclare": "off",
|
|
||||||
// "no-unreachable": "off",
|
|
||||||
// "no-nested-ternary": "off",
|
|
||||||
// "operator-linebreak": "off",
|
|
||||||
// "guard-for-in": "off",
|
|
||||||
// "no-unneeded-ternary": "off",
|
|
||||||
// "no-sequences": "off",
|
|
||||||
// "no-extend-native": "off",
|
|
||||||
// "no-shadow-restricted-names": "off",
|
|
||||||
// "no-extra-boolean-cast": "off",
|
|
||||||
// "no-path-concat": "off",
|
|
||||||
// "no-unused-expressions": "off",
|
|
||||||
// "no-return-assign": "off",
|
|
||||||
// "no-restricted-modules": "off",
|
|
||||||
// "object-curly-spacing": "off",
|
|
||||||
// "indent": "off",
|
|
||||||
// "padded-blocks": "off",
|
|
||||||
// "eol-last": "off",
|
|
||||||
// "lines-around-directive": "off",
|
|
||||||
// "strict": "off",
|
|
||||||
// "comma-dangle": "off",
|
|
||||||
// "no-multi-spaces": "off",
|
|
||||||
// "quotes": "off",
|
|
||||||
// "keyword-spacing": "off",
|
|
||||||
// "no-mixed-operators": "off",
|
|
||||||
// "comma-spacing": "off",
|
|
||||||
// "no-trailing-spaces": "off",
|
|
||||||
// "key-spacing": "off",
|
|
||||||
"no-multiple-empty-lines": "off"
|
|
||||||
// "spaced-comment": "off",
|
|
||||||
// "space-in-parens": "off",
|
|
||||||
// "block-spacing": "off",
|
|
||||||
// "quote-props": "off",
|
|
||||||
// "space-unary-ops": "off",
|
|
||||||
// "no-empty": "off",
|
|
||||||
// "dot-notation": "off",
|
|
||||||
// "func-call-spacing": "off",
|
|
||||||
// "array-bracket-spacing": "off",
|
|
||||||
// "object-property-newline": "off",
|
|
||||||
// "no-continue": "off",
|
|
||||||
// "no-extra-semi": "off",
|
|
||||||
// "no-spaced-func": "off",
|
|
||||||
// "no-useless-return": "off"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
6
.github/workflows/test.yaml
vendored
6
.github/workflows/test.yaml
vendored
@@ -21,7 +21,7 @@ jobs:
|
|||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
os: [ubuntu-latest]
|
os: [ubuntu-latest]
|
||||||
node: [10, 12, 14]
|
node: [12, 14]
|
||||||
database: [mongo-dev, mongo, redis, postgres]
|
database: [mongo-dev, mongo, redis, postgres]
|
||||||
include:
|
include:
|
||||||
# only run coverage once
|
# only run coverage once
|
||||||
@@ -186,7 +186,7 @@ jobs:
|
|||||||
run: npm run coverage
|
run: npm run coverage
|
||||||
|
|
||||||
- name: Test coverage
|
- name: Test coverage
|
||||||
uses: coverallsapp/github-action@v1.1.2
|
uses: coverallsapp/github-action@1.1.3
|
||||||
if: matrix.coverage
|
if: matrix.coverage
|
||||||
with:
|
with:
|
||||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
@@ -198,7 +198,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Coveralls Finished
|
- name: Coveralls Finished
|
||||||
uses: coverallsapp/github-action@v1.1.2
|
uses: coverallsapp/github-action@1.1.3
|
||||||
with:
|
with:
|
||||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
parallel-finished: true
|
parallel-finished: true
|
||||||
|
|||||||
1
.husky/.gitignore
vendored
Normal file
1
.husky/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
_
|
||||||
4
.husky/commit-msg
Executable file
4
.husky/commit-msg
Executable file
@@ -0,0 +1,4 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
. "$(dirname "$0")/_/husky.sh"
|
||||||
|
|
||||||
|
npx --no-install commitlint --edit $1
|
||||||
4
.husky/pre-commit
Executable file
4
.husky/pre-commit
Executable file
@@ -0,0 +1,4 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
. "$(dirname "$0")/_/husky.sh"
|
||||||
|
|
||||||
|
npx --no-install lint-staged
|
||||||
1036
CHANGELOG.md
1036
CHANGELOG.md
File diff suppressed because it is too large
Load Diff
49
Gruntfile.js
49
Gruntfile.js
@@ -2,24 +2,27 @@
|
|||||||
|
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
const nconf = require('nconf');
|
const nconf = require('nconf');
|
||||||
|
|
||||||
nconf.argv().env({
|
nconf.argv().env({
|
||||||
separator: '__',
|
separator: '__',
|
||||||
});
|
});
|
||||||
const winston = require('winston');
|
const winston = require('winston');
|
||||||
const fork = require('child_process').fork;
|
const { fork } = require('child_process');
|
||||||
const env = process.env;
|
|
||||||
var worker;
|
const { env } = process;
|
||||||
|
let worker;
|
||||||
|
|
||||||
env.NODE_ENV = env.NODE_ENV || 'development';
|
env.NODE_ENV = env.NODE_ENV || 'development';
|
||||||
|
|
||||||
const configFile = path.resolve(__dirname, nconf.any(['config', 'CONFIG']) || 'config.json');
|
const configFile = path.resolve(__dirname, nconf.any(['config', 'CONFIG']) || 'config.json');
|
||||||
const prestart = require('./src/prestart');
|
const prestart = require('./src/prestart');
|
||||||
|
|
||||||
prestart.loadConfig(configFile);
|
prestart.loadConfig(configFile);
|
||||||
|
|
||||||
var db = require('./src/database');
|
const db = require('./src/database');
|
||||||
|
|
||||||
module.exports = function (grunt) {
|
module.exports = function (grunt) {
|
||||||
var args = [];
|
const args = [];
|
||||||
|
|
||||||
if (!grunt.option('verbose')) {
|
if (!grunt.option('verbose')) {
|
||||||
args.push('--log-level=info');
|
args.push('--log-level=info');
|
||||||
@@ -36,7 +39,7 @@ module.exports = function (grunt) {
|
|||||||
grunt.registerTask('default', ['watch']);
|
grunt.registerTask('default', ['watch']);
|
||||||
|
|
||||||
grunt.registerTask('init', async function () {
|
grunt.registerTask('init', async function () {
|
||||||
var done = this.async();
|
const done = this.async();
|
||||||
let plugins = [];
|
let plugins = [];
|
||||||
if (!process.argv.includes('--core')) {
|
if (!process.argv.includes('--core')) {
|
||||||
await db.init();
|
await db.init();
|
||||||
@@ -50,22 +53,22 @@ module.exports = function (grunt) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const styleUpdated_Client = plugins.map(p => 'node_modules/' + p + '/*.less')
|
const styleUpdated_Client = plugins.map(p => `node_modules/${p}/*.less`)
|
||||||
.concat(plugins.map(p => 'node_modules/' + p + '/*.css'))
|
.concat(plugins.map(p => `node_modules/${p}/*.css`))
|
||||||
.concat(plugins.map(p => 'node_modules/' + p + '/+(public|static|less)/**/*.less'))
|
.concat(plugins.map(p => `node_modules/${p}/+(public|static|less)/**/*.less`))
|
||||||
.concat(plugins.map(p => 'node_modules/' + p + '/+(public|static)/**/*.css'));
|
.concat(plugins.map(p => `node_modules/${p}/+(public|static)/**/*.css`));
|
||||||
|
|
||||||
const styleUpdated_Admin = plugins.map(p => 'node_modules/' + p + '/*.less')
|
const styleUpdated_Admin = plugins.map(p => `node_modules/${p}/*.less`)
|
||||||
.concat(plugins.map(p => 'node_modules/' + p + '/*.css'))
|
.concat(plugins.map(p => `node_modules/${p}/*.css`))
|
||||||
.concat(plugins.map(p => 'node_modules/' + p + '/+(public|static|less)/**/*.less'))
|
.concat(plugins.map(p => `node_modules/${p}/+(public|static|less)/**/*.less`))
|
||||||
.concat(plugins.map(p => 'node_modules/' + p + '/+(public|static)/**/*.css'));
|
.concat(plugins.map(p => `node_modules/${p}/+(public|static)/**/*.css`));
|
||||||
|
|
||||||
const clientUpdated = plugins.map(p => 'node_modules/' + p + '/+(public|static)/**/*.js');
|
const clientUpdated = plugins.map(p => `node_modules/${p}/+(public|static)/**/*.js`);
|
||||||
const serverUpdated = plugins.map(p => 'node_modules/' + p + '/*.js')
|
const serverUpdated = plugins.map(p => `node_modules/${p}/*.js`)
|
||||||
.concat(plugins.map(p => 'node_modules/' + p + '/+(lib|src)/**/*.js'));
|
.concat(plugins.map(p => `node_modules/${p}/+(lib|src)/**/*.js`));
|
||||||
|
|
||||||
const templatesUpdated = plugins.map(p => 'node_modules/' + p + '/+(public|static|templates)/**/*.tpl');
|
const templatesUpdated = plugins.map(p => `node_modules/${p}/+(public|static|templates)/**/*.tpl`);
|
||||||
const langUpdated = plugins.map(p => 'node_modules/' + p + '/+(public|static|languages)/**/*.json');
|
const langUpdated = plugins.map(p => `node_modules/${p}/+(public|static|languages)/**/*.json`);
|
||||||
|
|
||||||
grunt.config(['watch'], {
|
grunt.config(['watch'], {
|
||||||
styleUpdated_Client: {
|
styleUpdated_Client: {
|
||||||
@@ -161,8 +164,8 @@ module.exports = function (grunt) {
|
|||||||
grunt.task.run('init');
|
grunt.task.run('init');
|
||||||
|
|
||||||
grunt.event.removeAllListeners('watch');
|
grunt.event.removeAllListeners('watch');
|
||||||
grunt.event.on('watch', function update(action, filepath, target) {
|
grunt.event.on('watch', (action, filepath, target) => {
|
||||||
var compiling;
|
let compiling;
|
||||||
if (target === 'styleUpdated_Client') {
|
if (target === 'styleUpdated_Client') {
|
||||||
compiling = 'clientCSS';
|
compiling = 'clientCSS';
|
||||||
} else if (target === 'styleUpdated_Admin') {
|
} else if (target === 'styleUpdated_Admin') {
|
||||||
@@ -180,7 +183,7 @@ module.exports = function (grunt) {
|
|||||||
return run();
|
return run();
|
||||||
}
|
}
|
||||||
|
|
||||||
require('./src/meta/build').build([compiling], function (err) {
|
require('./src/meta/build').build([compiling], (err) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
winston.error(err.stack);
|
winston.error(err.stack);
|
||||||
}
|
}
|
||||||
@@ -199,7 +202,7 @@ function addBaseThemes(plugins) {
|
|||||||
let baseTheme;
|
let baseTheme;
|
||||||
do {
|
do {
|
||||||
try {
|
try {
|
||||||
baseTheme = require(themeId + '/theme').baseTheme;
|
baseTheme = require(`${themeId}/theme`).baseTheme;
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.log(err);
|
console.log(err);
|
||||||
}
|
}
|
||||||
|
|||||||
4
app.js
4
app.js
@@ -22,6 +22,7 @@
|
|||||||
require('./require-main');
|
require('./require-main');
|
||||||
|
|
||||||
const nconf = require('nconf');
|
const nconf = require('nconf');
|
||||||
|
|
||||||
nconf.argv().env({
|
nconf.argv().env({
|
||||||
separator: '__',
|
separator: '__',
|
||||||
});
|
});
|
||||||
@@ -40,6 +41,7 @@ const configFile = path.resolve(__dirname, nconf.any(['config', 'CONFIG']) || 'c
|
|||||||
const configExists = file.existsSync(configFile) || (nconf.get('url') && nconf.get('secret') && nconf.get('database'));
|
const configExists = file.existsSync(configFile) || (nconf.get('url') && nconf.get('secret') && nconf.get('database'));
|
||||||
|
|
||||||
const prestart = require('./src/prestart');
|
const prestart = require('./src/prestart');
|
||||||
|
|
||||||
prestart.loadConfig(configFile);
|
prestart.loadConfig(configFile);
|
||||||
prestart.setupWinston();
|
prestart.setupWinston();
|
||||||
prestart.versionCheck();
|
prestart.versionCheck();
|
||||||
@@ -47,7 +49,7 @@ winston.verbose('* using configuration stored in: %s', configFile);
|
|||||||
|
|
||||||
if (!process.send) {
|
if (!process.send) {
|
||||||
// If run using `node app`, log GNU copyright info along with server info
|
// If run using `node app`, log GNU copyright info along with server info
|
||||||
winston.info('NodeBB v' + nconf.get('version') + ' Copyright (C) 2013-' + (new Date()).getFullYear() + ' NodeBB Inc.');
|
winston.info(`NodeBB v${nconf.get('version')} Copyright (C) 2013-${(new Date()).getFullYear()} NodeBB Inc.`);
|
||||||
winston.info('This program comes with ABSOLUTELY NO WARRANTY.');
|
winston.info('This program comes with ABSOLUTELY NO WARRANTY.');
|
||||||
winston.info('This is free software, and you are welcome to redistribute it under certain conditions.');
|
winston.info('This is free software, and you are welcome to redistribute it under certain conditions.');
|
||||||
winston.info('');
|
winston.info('');
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
"description": "Announcements regarding our community",
|
"description": "Announcements regarding our community",
|
||||||
"descriptionParsed": "<p>Announcements regarding our community</p>\n",
|
"descriptionParsed": "<p>Announcements regarding our community</p>\n",
|
||||||
"bgColor": "#fda34b",
|
"bgColor": "#fda34b",
|
||||||
"color": "#fff",
|
"color": "#ffffff",
|
||||||
"icon" : "fa-bullhorn",
|
"icon" : "fa-bullhorn",
|
||||||
"order": 1
|
"order": 1
|
||||||
},
|
},
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
"description": "A place to talk about whatever you want",
|
"description": "A place to talk about whatever you want",
|
||||||
"descriptionParsed": "<p>A place to talk about whatever you want</p>\n",
|
"descriptionParsed": "<p>A place to talk about whatever you want</p>\n",
|
||||||
"bgColor": "#59b3d0",
|
"bgColor": "#59b3d0",
|
||||||
"color": "#fff",
|
"color": "#ffffff",
|
||||||
"icon" : "fa-comments-o",
|
"icon" : "fa-comments-o",
|
||||||
"order": 2
|
"order": 2
|
||||||
},
|
},
|
||||||
@@ -22,7 +22,7 @@
|
|||||||
"description": "Blog posts from individual members",
|
"description": "Blog posts from individual members",
|
||||||
"descriptionParsed": "<p>Blog posts from individual members</p>\n",
|
"descriptionParsed": "<p>Blog posts from individual members</p>\n",
|
||||||
"bgColor": "#86ba4b",
|
"bgColor": "#86ba4b",
|
||||||
"color": "#fff",
|
"color": "#ffffff",
|
||||||
"icon" : "fa-newspaper-o",
|
"icon" : "fa-newspaper-o",
|
||||||
"order": 4
|
"order": 4
|
||||||
},
|
},
|
||||||
@@ -31,7 +31,7 @@
|
|||||||
"description": "Got a question? Ask away!",
|
"description": "Got a question? Ask away!",
|
||||||
"descriptionParsed": "<p>Got a question? Ask away!</p>\n",
|
"descriptionParsed": "<p>Got a question? Ask away!</p>\n",
|
||||||
"bgColor": "#e95c5a",
|
"bgColor": "#e95c5a",
|
||||||
"color": "#fff",
|
"color": "#ffffff",
|
||||||
"icon" : "fa-question",
|
"icon" : "fa-question",
|
||||||
"order": 3
|
"order": 3
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,22 +19,27 @@
|
|||||||
"chatEditDuration": 0,
|
"chatEditDuration": 0,
|
||||||
"chatDeleteDuration": 0,
|
"chatDeleteDuration": 0,
|
||||||
"chatMessageDelay": 200,
|
"chatMessageDelay": 200,
|
||||||
|
"notificationSendDelay": 60,
|
||||||
"newbiePostDelayThreshold": 3,
|
"newbiePostDelayThreshold": 3,
|
||||||
"postQueue": 0,
|
"postQueue": 0,
|
||||||
"postQueueReputationThreshold": 0,
|
"postQueueReputationThreshold": 0,
|
||||||
"groupsExemptFromPostQueue": ["administrators", "Global Moderators"],
|
"groupsExemptFromPostQueue": ["administrators", "Global Moderators"],
|
||||||
"minimumPostLength": 8,
|
"minimumPostLength": 8,
|
||||||
"maximumPostLength": 32767,
|
"maximumPostLength": 32767,
|
||||||
|
"systemTags": "",
|
||||||
"minimumTagsPerTopic": 0,
|
"minimumTagsPerTopic": 0,
|
||||||
"maximumTagsPerTopic": 5,
|
"maximumTagsPerTopic": 5,
|
||||||
"minimumTagLength": 3,
|
"minimumTagLength": 3,
|
||||||
"maximumTagLength": 15,
|
"maximumTagLength": 15,
|
||||||
|
"undoTimeout": 10000,
|
||||||
"allowTopicsThumbnail": 1,
|
"allowTopicsThumbnail": 1,
|
||||||
"registrationType": "normal",
|
"registrationType": "normal",
|
||||||
"registrationApprovalType": "normal",
|
"registrationApprovalType": "normal",
|
||||||
"allowAccountDelete": 1,
|
"allowAccountDelete": 1,
|
||||||
"privateUploads": 0,
|
"privateUploads": 0,
|
||||||
"allowedFileExtensions": "png,jpg,bmp,txt",
|
"allowedFileExtensions": "png,jpg,bmp,txt",
|
||||||
|
"uploadRateLimitThreshold": 10,
|
||||||
|
"uploadRateLimitCooldown": 60,
|
||||||
"allowUserHomePage": 1,
|
"allowUserHomePage": 1,
|
||||||
"allowMultipleBadges": 0,
|
"allowMultipleBadges": 0,
|
||||||
"maximumFileSize": 2048,
|
"maximumFileSize": 2048,
|
||||||
@@ -101,6 +106,7 @@
|
|||||||
"maxPostsPerPage": 20,
|
"maxPostsPerPage": 20,
|
||||||
"topicsPerPage": 20,
|
"topicsPerPage": 20,
|
||||||
"postsPerPage": 20,
|
"postsPerPage": 20,
|
||||||
|
"categoriesPerPage": 50,
|
||||||
"userSearchResultsPerPage": 50,
|
"userSearchResultsPerPage": 50,
|
||||||
"maximumGroupNameLength": 255,
|
"maximumGroupNameLength": 255,
|
||||||
"maximumGroupTitleLength": 40,
|
"maximumGroupTitleLength": 40,
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ const questions = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
module.exports = async function (config) {
|
module.exports = async function (config) {
|
||||||
winston.info('\nNow configuring ' + config.database + ' database:');
|
winston.info(`\nNow configuring ${config.database} database:`);
|
||||||
const databaseConfig = await getDatabaseConfig(config);
|
const databaseConfig = await getDatabaseConfig(config);
|
||||||
return saveDatabaseConfig(config, databaseConfig);
|
return saveDatabaseConfig(config, databaseConfig);
|
||||||
};
|
};
|
||||||
@@ -40,7 +40,7 @@ async function getDatabaseConfig(config) {
|
|||||||
}
|
}
|
||||||
return await promptGet(questions.postgres);
|
return await promptGet(questions.postgres);
|
||||||
}
|
}
|
||||||
throw new Error('unknown database : ' + config.database);
|
throw new Error(`unknown database : ${config.database}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
function saveDatabaseConfig(config, databaseConfig) {
|
function saveDatabaseConfig(config, databaseConfig) {
|
||||||
@@ -79,11 +79,11 @@ function saveDatabaseConfig(config, databaseConfig) {
|
|||||||
ssl: databaseConfig['postgres:ssl'],
|
ssl: databaseConfig['postgres:ssl'],
|
||||||
};
|
};
|
||||||
} else {
|
} else {
|
||||||
throw new Error('unknown database : ' + config.database);
|
throw new Error(`unknown database : ${config.database}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
const allQuestions = questions.redis.concat(questions.mongo).concat(questions.postgres);
|
const allQuestions = questions.redis.concat(questions.mongo).concat(questions.postgres);
|
||||||
for (var x = 0; x < allQuestions.length; x += 1) {
|
for (let x = 0; x < allQuestions.length; x += 1) {
|
||||||
delete config[allQuestions[x].name];
|
delete config[allQuestions[x].name];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
"name": "nodebb",
|
"name": "nodebb",
|
||||||
"license": "GPL-3.0",
|
"license": "GPL-3.0",
|
||||||
"description": "NodeBB Forum",
|
"description": "NodeBB Forum",
|
||||||
"version": "1.16.1-beta.0",
|
"version": "1.17.2",
|
||||||
"homepage": "http://www.nodebb.org",
|
"homepage": "http://www.nodebb.org",
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
@@ -11,8 +11,8 @@
|
|||||||
"main": "app.js",
|
"main": "app.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "node loader.js",
|
"start": "node loader.js",
|
||||||
"lint": "npx eslint --cache ./nodebb .",
|
"lint": "eslint --cache ./nodebb .",
|
||||||
"test": "npx nyc --reporter=html --reporter=text-summary npx mocha",
|
"test": "nyc --reporter=html --reporter=text-summary mocha",
|
||||||
"coverage": "nyc report --reporter=text-lcov > ./coverage/lcov.info",
|
"coverage": "nyc report --reporter=text-lcov > ./coverage/lcov.info",
|
||||||
"coveralls": "nyc report --reporter=text-lcov | coveralls && rm -r coverage"
|
"coveralls": "nyc report --reporter=text-lcov | coveralls && rm -r coverage"
|
||||||
},
|
},
|
||||||
@@ -22,155 +22,148 @@
|
|||||||
"test/*"
|
"test/*"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"husky": {
|
|
||||||
"hooks": {
|
|
||||||
"pre-commit": "npx lint-staged",
|
|
||||||
"commit-msg": "npx commitlint -E HUSKY_GIT_PARAMS"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"lint-staged": {
|
"lint-staged": {
|
||||||
"*.js": [
|
"*.js": [
|
||||||
"eslint --fix",
|
"eslint --fix"
|
||||||
"git add"
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@adactive/bootstrap-tagsinput": "^0.8.2",
|
"@adactive/bootstrap-tagsinput": "^0.8.2",
|
||||||
"ace-builds": "^1.4.9",
|
"ace-builds": "^1.4.12",
|
||||||
"archiver": "^5.0.0",
|
"archiver": "^5.2.0",
|
||||||
"async": "^3.2.0",
|
"async": "^3.2.0",
|
||||||
"autoprefixer": "10.1.0",
|
"autoprefixer": "10.3.1",
|
||||||
"bcryptjs": "2.4.3",
|
"bcryptjs": "2.4.3",
|
||||||
"benchpressjs": "2.3.0",
|
"benchpressjs": "2.4.3",
|
||||||
"body-parser": "^1.19.0",
|
"body-parser": "^1.19.0",
|
||||||
"bootbox": "4.4.0",
|
"bootbox": "5.5.2",
|
||||||
"bootstrap": "^3.4.1",
|
"bootstrap": "^3.4.1",
|
||||||
"chart.js": "^2.9.3",
|
"chart.js": "^2.9.4",
|
||||||
"cli-graph": "^3.2.2",
|
"cli-graph": "^3.2.2",
|
||||||
"clipboard": "^2.0.6",
|
"clipboard": "^2.0.6",
|
||||||
"colors": "^1.4.0",
|
"colors": "^1.4.0",
|
||||||
"commander": "^6.0.0",
|
"commander": "^7.1.0",
|
||||||
"compare-versions": "3.6.0",
|
"compare-versions": "3.6.0",
|
||||||
"compression": "^1.7.4",
|
"compression": "^1.7.4",
|
||||||
"connect-ensure-login": "^0.1.1",
|
|
||||||
"connect-flash": "^0.1.1",
|
"connect-flash": "^0.1.1",
|
||||||
"connect-mongo": "3.2.0",
|
"connect-mongo": "4.4.1",
|
||||||
"connect-multiparty": "^2.2.0",
|
"connect-multiparty": "^2.2.0",
|
||||||
"connect-pg-simple": "^6.1.0",
|
"connect-pg-simple": "^6.2.1",
|
||||||
"connect-redis": "5.0.0",
|
"connect-redis": "6.0.0",
|
||||||
"cookie-parser": "^1.4.5",
|
"cookie-parser": "^1.4.5",
|
||||||
"cron": "^1.8.2",
|
"cron": "^1.8.2",
|
||||||
"cropperjs": "^1.5.6",
|
"cropperjs": "^1.5.11",
|
||||||
"csurf": "^1.11.0",
|
"csurf": "^1.11.0",
|
||||||
"daemon": "^1.1.0",
|
"daemon": "^1.1.0",
|
||||||
"diff": "^5.0.0",
|
"diff": "^5.0.0",
|
||||||
"express": "^4.17.1",
|
"express": "^4.17.1",
|
||||||
"express-session": "^1.17.0",
|
"express-session": "^1.17.1",
|
||||||
"express-useragent": "^1.0.13",
|
"express-useragent": "^1.0.15",
|
||||||
"graceful-fs": "^4.2.3",
|
"graceful-fs": "^4.2.6",
|
||||||
"helmet": "^4.0.0",
|
"helmet": "^4.4.1",
|
||||||
"html-to-text": "6.0.0",
|
"html-to-text": "7.1.1",
|
||||||
"ipaddr.js": "^2.0.0",
|
"ipaddr.js": "^2.0.0",
|
||||||
"jquery": "3.5.1",
|
"jquery": "3.6.0",
|
||||||
"jquery-deserialize": "2.0.0-rc1",
|
"jquery-deserialize": "2.0.0-rc1",
|
||||||
"jquery-form": "4.3.0",
|
"jquery-form": "4.3.0",
|
||||||
"jquery-serializeobject": "1.0.0",
|
"jquery-serializeobject": "1.0.0",
|
||||||
"jquery-ui": "1.12.1",
|
"jquery-ui": "1.12.1",
|
||||||
"jsesc": "3.0.2",
|
"jsesc": "3.0.2",
|
||||||
"json2csv": "5.0.5",
|
"json2csv": "5.0.6",
|
||||||
"jsonwebtoken": "^8.5.1",
|
"jsonwebtoken": "^8.5.1",
|
||||||
"less": "^3.11.1",
|
"less": "^3.11.1",
|
||||||
"lodash": "^4.17.15",
|
"lodash": "^4.17.21",
|
||||||
"logrotate-stream": "^0.2.6",
|
"logrotate-stream": "^0.2.7",
|
||||||
"lru-cache": "6.0.0",
|
"lru-cache": "6.0.0",
|
||||||
"material-design-lite": "^1.3.0",
|
"material-design-lite": "^1.3.0",
|
||||||
"mime": "^2.4.4",
|
"mime": "^2.5.2",
|
||||||
"mkdirp": "^1.0.4",
|
"mkdirp": "^1.0.4",
|
||||||
"mongodb": "3.6.3",
|
"mongodb": "3.6.10",
|
||||||
"morgan": "^1.10.0",
|
"morgan": "^1.10.0",
|
||||||
"mousetrap": "^1.6.5",
|
"mousetrap": "^1.6.5",
|
||||||
|
"multiparty": "4.2.2",
|
||||||
"@nodebb/bootswatch": "3.4.2",
|
"@nodebb/bootswatch": "3.4.2",
|
||||||
"nconf": "^0.11.0",
|
"nconf": "^0.11.2",
|
||||||
"nodebb-plugin-composer-default": "6.5.5",
|
"nodebb-plugin-composer-default": "6.5.34",
|
||||||
"nodebb-plugin-dbsearch": "4.1.2",
|
"nodebb-plugin-dbsearch": "5.0.2",
|
||||||
"nodebb-plugin-emoji": "^3.3.0",
|
"nodebb-plugin-emoji": "^3.5.0",
|
||||||
"nodebb-plugin-emoji-android": "2.0.0",
|
"nodebb-plugin-emoji-android": "2.0.5",
|
||||||
"nodebb-plugin-markdown": "8.12.4",
|
"nodebb-plugin-markdown": "8.14.2",
|
||||||
"nodebb-plugin-mentions": "2.13.6",
|
"nodebb-plugin-mentions": "2.13.11",
|
||||||
"nodebb-plugin-soundpack-default": "1.0.0",
|
"nodebb-plugin-spam-be-gone": "0.7.9",
|
||||||
"nodebb-plugin-spam-be-gone": "0.7.7",
|
"nodebb-rewards-essentials": "0.1.5",
|
||||||
"nodebb-rewards-essentials": "0.1.4",
|
"nodebb-theme-lavender": "5.2.1",
|
||||||
"nodebb-theme-lavender": "5.0.17",
|
"nodebb-theme-persona": "11.0.26",
|
||||||
"nodebb-theme-persona": "10.3.15",
|
"nodebb-theme-slick": "1.4.7",
|
||||||
"nodebb-theme-slick": "1.3.7",
|
"nodebb-theme-vanilla": "12.0.8",
|
||||||
"nodebb-theme-vanilla": "11.3.10",
|
"nodebb-widget-essentials": "5.0.4",
|
||||||
"nodebb-widget-essentials": "5.0.2",
|
"nodemailer": "^6.5.0",
|
||||||
"nodemailer": "^6.4.6",
|
|
||||||
"nprogress": "0.2.0",
|
"nprogress": "0.2.0",
|
||||||
"passport": "^0.4.1",
|
"passport": "^0.4.1",
|
||||||
"passport-http-bearer": "^1.0.1",
|
"passport-http-bearer": "^1.0.1",
|
||||||
"passport-local": "1.0.0",
|
"passport-local": "1.0.0",
|
||||||
"pg": "^8.0.2",
|
"pg": "^8.5.1",
|
||||||
"pg-cursor": "^2.1.9",
|
"pg-cursor": "^2.5.2",
|
||||||
"postcss": "8.1.10",
|
"postcss": "8.3.5",
|
||||||
"postcss-clean": "1.1.0",
|
"postcss-clean": "1.2.0",
|
||||||
"promise-polyfill": "^8.1.3",
|
"prompt": "^1.1.0",
|
||||||
"prompt": "^1.0.0",
|
"ioredis": "4.27.6",
|
||||||
"redis": "3.0.2",
|
|
||||||
"request": "2.88.2",
|
"request": "2.88.2",
|
||||||
"request-promise-native": "^1.0.8",
|
"request-promise-native": "^1.0.9",
|
||||||
"requirejs": "2.3.6",
|
"requirejs": "2.3.6",
|
||||||
"rimraf": "3.0.2",
|
"rimraf": "3.0.2",
|
||||||
"rss": "^1.2.2",
|
"rss": "^1.2.2",
|
||||||
"sanitize-html": "^2.0.0",
|
"sanitize-html": "^2.3.2",
|
||||||
"semver": "^7.2.1",
|
"semver": "^7.3.4",
|
||||||
"serve-favicon": "^2.5.0",
|
"serve-favicon": "^2.5.0",
|
||||||
"sharp": "0.27.0",
|
"sharp": "0.28.3",
|
||||||
"sitemap": "^6.1.0",
|
"sitemap": "^7.0.0",
|
||||||
"slideout": "1.0.1",
|
"slideout": "1.0.1",
|
||||||
"socket.io": "3.0.4",
|
"socket.io": "4.1.3",
|
||||||
"socket.io-adapter-cluster": "^1.0.1",
|
"socket.io-adapter-cluster": "^1.0.1",
|
||||||
"socket.io-client": "3.0.4",
|
"socket.io-client": "4.1.3",
|
||||||
"socket.io-redis": "6.0.1",
|
"@socket.io/redis-adapter": "7.0.0",
|
||||||
"sortablejs": "1.10.2",
|
"sortablejs": "1.14.0",
|
||||||
"spdx-license-list": "^6.1.0",
|
"spdx-license-list": "^6.4.0",
|
||||||
"spider-detector": "2.0.0",
|
"spider-detector": "2.0.0",
|
||||||
"textcomplete": "^0.17.1",
|
"textcomplete": "^0.18.0",
|
||||||
"textcomplete.contenteditable": "^0.1.1",
|
"textcomplete.contenteditable": "^0.1.1",
|
||||||
"timeago": "^1.6.7",
|
"timeago": "^1.6.7",
|
||||||
"tinycon": "0.6.8",
|
"tinycon": "0.6.8",
|
||||||
"toobusy-js": "^0.5.1",
|
"toobusy-js": "^0.5.1",
|
||||||
"uglify-es": "^3.3.9",
|
"uglify-es": "^3.3.9",
|
||||||
"validator": "13.5.2",
|
"validator": "13.6.0",
|
||||||
"visibilityjs": "2.0.2",
|
"visibilityjs": "2.0.2",
|
||||||
"winston": "3.3.3",
|
"winston": "3.3.3",
|
||||||
"xml": "^1.0.1",
|
"xml": "^1.0.1",
|
||||||
"xregexp": "^4.3.0",
|
"xregexp": "^5.0.1",
|
||||||
|
"yargs": "16.2.0",
|
||||||
"zxcvbn": "^4.4.2"
|
"zxcvbn": "^4.4.2"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@apidevtools/swagger-parser": "10.0.2",
|
"@apidevtools/swagger-parser": "10.0.2",
|
||||||
"@commitlint/cli": "11.0.0",
|
"@commitlint/cli": "12.1.4",
|
||||||
"@commitlint/config-angular": "11.0.0",
|
"@commitlint/config-angular": "12.1.4",
|
||||||
"coveralls": "3.1.0",
|
"coveralls": "3.1.1",
|
||||||
"eslint": "7.17.0",
|
"eslint": "7.30.0",
|
||||||
"eslint-config-airbnb-base": "14.2.1",
|
"eslint-config-airbnb-base": "14.2.1",
|
||||||
"eslint-plugin-import": "2.22.1",
|
"eslint-plugin-import": "2.23.4",
|
||||||
"grunt": "1.3.0",
|
"grunt": "1.4.1",
|
||||||
"grunt-contrib-watch": "1.1.0",
|
"grunt-contrib-watch": "1.1.0",
|
||||||
"husky": "4.3.6",
|
"husky": "6.0.0",
|
||||||
"jsdom": "16.4.0",
|
"jsdom": "16.6.0",
|
||||||
"lint-staged": "10.5.3",
|
"lint-staged": "11.0.1",
|
||||||
"mocha": "8.2.1",
|
"mocha": "8.4.0",
|
||||||
"mocha-lcov-reporter": "1.3.0",
|
"mocha-lcov-reporter": "1.3.0",
|
||||||
|
"mockdate": "3.0.5",
|
||||||
"nyc": "15.1.0",
|
"nyc": "15.1.0",
|
||||||
"smtp-server": "3.8.0"
|
"smtp-server": "3.9.0"
|
||||||
},
|
},
|
||||||
"bugs": {
|
"bugs": {
|
||||||
"url": "https://github.com/NodeBB/NodeBB/issues"
|
"url": "https://github.com/NodeBB/NodeBB/issues"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=10"
|
"node": ">=12"
|
||||||
},
|
},
|
||||||
"maintainers": [
|
"maintainers": [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ const path = require('path');
|
|||||||
const childProcess = require('child_process');
|
const childProcess = require('child_process');
|
||||||
const less = require('less');
|
const less = require('less');
|
||||||
const util = require('util');
|
const util = require('util');
|
||||||
|
|
||||||
const lessRenderAsync = util.promisify(
|
const lessRenderAsync = util.promisify(
|
||||||
(style, opts, cb) => less.render(String(style), opts, cb)
|
(style, opts, cb) => less.render(String(style), opts, cb)
|
||||||
);
|
);
|
||||||
@@ -26,8 +27,8 @@ const formats = [
|
|||||||
];
|
];
|
||||||
|
|
||||||
const timestampFormat = winston.format((info) => {
|
const timestampFormat = winston.format((info) => {
|
||||||
var dateString = new Date().toISOString() + ' [' + global.process.pid + ']';
|
const dateString = `${new Date().toISOString()} [${global.process.pid}]`;
|
||||||
info.level = dateString + ' - ' + info.level;
|
info.level = `${dateString} - ${info.level}`;
|
||||||
return info;
|
return info;
|
||||||
});
|
});
|
||||||
formats.push(timestampFormat());
|
formats.push(timestampFormat());
|
||||||
@@ -68,10 +69,10 @@ const viewsDir = path.join(paths.baseDir, 'build/public/templates');
|
|||||||
|
|
||||||
web.install = async function (port) {
|
web.install = async function (port) {
|
||||||
port = port || 4567;
|
port = port || 4567;
|
||||||
winston.info('Launching web installer on port ' + port);
|
winston.info(`Launching web installer on port ${port}`);
|
||||||
|
|
||||||
app.use(express.static('public', {}));
|
app.use(express.static('public', {}));
|
||||||
app.engine('tpl', function (filepath, options, callback) {
|
app.engine('tpl', (filepath, options, callback) => {
|
||||||
filepath = filepath.replace(/\.tpl$/, '.js');
|
filepath = filepath.replace(/\.tpl$/, '.js');
|
||||||
|
|
||||||
Benchpress.__express(filepath, options, callback);
|
Benchpress.__express(filepath, options, callback);
|
||||||
@@ -98,7 +99,7 @@ web.install = async function (port) {
|
|||||||
|
|
||||||
|
|
||||||
function launchExpress(port) {
|
function launchExpress(port) {
|
||||||
server = app.listen(port, function () {
|
server = app.listen(port, () => {
|
||||||
winston.info('Web installer listening on http://%s:%s', '0.0.0.0', port);
|
winston.info('Web installer listening on http://%s:%s', '0.0.0.0', port);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -116,11 +117,9 @@ function ping(req, res) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function welcome(req, res) {
|
function welcome(req, res) {
|
||||||
var dbs = ['redis', 'mongo', 'postgres'];
|
const dbs = ['redis', 'mongo', 'postgres'];
|
||||||
var databases = dbs.map(function (databaseName) {
|
const databases = dbs.map((databaseName) => {
|
||||||
var questions = require('../src/database/' + databaseName).questions.filter(function (question) {
|
const questions = require(`../src/database/${databaseName}`).questions.filter(question => question && !question.hideOnWebInstall);
|
||||||
return question && !question.hideOnWebInstall;
|
|
||||||
});
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
name: databaseName,
|
name: databaseName,
|
||||||
@@ -128,10 +127,10 @@ function welcome(req, res) {
|
|||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
var defaults = require('./data/defaults');
|
const defaults = require('./data/defaults.json');
|
||||||
|
|
||||||
res.render('install/index', {
|
res.render('install/index', {
|
||||||
url: nconf.get('url') || (req.protocol + '://' + req.get('host')),
|
url: nconf.get('url') || (`${req.protocol}://${req.get('host')}`),
|
||||||
launchUrl: launchUrl,
|
launchUrl: launchUrl,
|
||||||
skipGeneralSetup: !!nconf.get('url'),
|
skipGeneralSetup: !!nconf.get('url'),
|
||||||
databases: databases,
|
databases: databases,
|
||||||
@@ -151,23 +150,23 @@ function install(req, res) {
|
|||||||
}
|
}
|
||||||
req.setTimeout(0);
|
req.setTimeout(0);
|
||||||
installing = true;
|
installing = true;
|
||||||
var setupEnvVars = nconf.get();
|
const setupEnvVars = nconf.get();
|
||||||
for (var i in req.body) {
|
for (const [key, value] of Object.entries(req.body)) {
|
||||||
if (req.body.hasOwnProperty(i) && !process.env.hasOwnProperty(i)) {
|
if (!process.env.hasOwnProperty(key)) {
|
||||||
setupEnvVars[i.replace(':', '__')] = req.body[i];
|
setupEnvVars[key.replace(':', '__')] = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Flatten any objects in setupEnvVars
|
// Flatten any objects in setupEnvVars
|
||||||
const pushToRoot = function (parentKey, key) {
|
const pushToRoot = function (parentKey, key) {
|
||||||
setupEnvVars[parentKey + '__' + key] = setupEnvVars[parentKey][key];
|
setupEnvVars[`${parentKey}__${key}`] = setupEnvVars[parentKey][key];
|
||||||
};
|
};
|
||||||
for (var j in setupEnvVars) {
|
for (const [parentKey, value] of Object.entries(setupEnvVars)) {
|
||||||
if (setupEnvVars.hasOwnProperty(j) && typeof setupEnvVars[j] === 'object' && setupEnvVars[j] !== null && !Array.isArray(setupEnvVars[j])) {
|
if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
|
||||||
Object.keys(setupEnvVars[j]).forEach(pushToRoot.bind(null, j));
|
Object.keys(value).forEach(key => pushToRoot(parentKey, key));
|
||||||
delete setupEnvVars[j];
|
delete setupEnvVars[parentKey];
|
||||||
} else if (Array.isArray(setupEnvVars[j])) {
|
} else if (Array.isArray(value)) {
|
||||||
setupEnvVars[j] = JSON.stringify(setupEnvVars[j]);
|
setupEnvVars[parentKey] = JSON.stringify(value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -175,11 +174,11 @@ function install(req, res) {
|
|||||||
winston.info(setupEnvVars);
|
winston.info(setupEnvVars);
|
||||||
launchUrl = setupEnvVars.url;
|
launchUrl = setupEnvVars.url;
|
||||||
|
|
||||||
var child = require('child_process').fork('app', ['--setup'], {
|
const child = require('child_process').fork('app', ['--setup'], {
|
||||||
env: setupEnvVars,
|
env: setupEnvVars,
|
||||||
});
|
});
|
||||||
|
|
||||||
child.on('close', function (data) {
|
child.on('close', (data) => {
|
||||||
installing = false;
|
installing = false;
|
||||||
success = data === 0;
|
success = data === 0;
|
||||||
error = data !== 0;
|
error = data !== 0;
|
||||||
@@ -193,7 +192,7 @@ async function launch(req, res) {
|
|||||||
res.json({});
|
res.json({});
|
||||||
server.close();
|
server.close();
|
||||||
req.setTimeout(0);
|
req.setTimeout(0);
|
||||||
var child;
|
let child;
|
||||||
|
|
||||||
if (!nconf.get('launchCmd')) {
|
if (!nconf.get('launchCmd')) {
|
||||||
child = childProcess.spawn('node', ['loader.js'], {
|
child = childProcess.spawn('node', ['loader.js'], {
|
||||||
@@ -257,7 +256,7 @@ async function compileLess() {
|
|||||||
const css = await lessRenderAsync(style, { filename: path.resolve(installSrc) });
|
const css = await lessRenderAsync(style, { filename: path.resolve(installSrc) });
|
||||||
await fs.promises.writeFile(path.join(__dirname, '../public/installer.css'), css.css);
|
await fs.promises.writeFile(path.join(__dirname, '../public/installer.css'), css.css);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
winston.error('Unable to compile LESS: \n' + err.stack);
|
winston.error(`Unable to compile LESS: \n${err.stack}`);
|
||||||
throw err;
|
throw err;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -289,7 +288,7 @@ async function copyCSS() {
|
|||||||
async function loadDefaults() {
|
async function loadDefaults() {
|
||||||
const setupDefaultsPath = path.join(__dirname, '../setup.json');
|
const setupDefaultsPath = path.join(__dirname, '../setup.json');
|
||||||
try {
|
try {
|
||||||
await fs.promises.access(setupDefaultsPath, fs.constants.F_OK | fs.constants.R_OK);
|
await fs.promises.access(setupDefaultsPath, fs.constants.F_OK + fs.constants.R_OK);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
// setup.json not found or inaccessible, proceed with no defaults
|
// setup.json not found or inaccessible, proceed with no defaults
|
||||||
if (err.code !== 'ENOENT') {
|
if (err.code !== 'ENOENT') {
|
||||||
|
|||||||
93
loader.js
93
loader.js
@@ -1,46 +1,45 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
var nconf = require('nconf');
|
const nconf = require('nconf');
|
||||||
var fs = require('fs');
|
const fs = require('fs');
|
||||||
var url = require('url');
|
const url = require('url');
|
||||||
var path = require('path');
|
const path = require('path');
|
||||||
var fork = require('child_process').fork;
|
const { fork } = require('child_process');
|
||||||
var async = require('async');
|
const async = require('async');
|
||||||
var logrotate = require('logrotate-stream');
|
const logrotate = require('logrotate-stream');
|
||||||
var mkdirp = require('mkdirp');
|
const mkdirp = require('mkdirp');
|
||||||
|
|
||||||
var file = require('./src/file');
|
const file = require('./src/file');
|
||||||
var pkg = require('./package.json');
|
const pkg = require('./package.json');
|
||||||
|
|
||||||
var pathToConfig = path.resolve(__dirname, process.env.CONFIG || 'config.json');
|
const pathToConfig = path.resolve(__dirname, process.env.CONFIG || 'config.json');
|
||||||
|
|
||||||
nconf.argv().env().file({
|
nconf.argv().env().file({
|
||||||
file: pathToConfig,
|
file: pathToConfig,
|
||||||
});
|
});
|
||||||
|
|
||||||
var pidFilePath = path.join(__dirname, 'pidfile');
|
const pidFilePath = path.join(__dirname, 'pidfile');
|
||||||
|
|
||||||
var outputLogFilePath = path.join(__dirname, nconf.get('logFile') || 'logs/output.log');
|
const outputLogFilePath = path.join(__dirname, nconf.get('logFile') || 'logs/output.log');
|
||||||
|
|
||||||
var logDir = path.dirname(outputLogFilePath);
|
const logDir = path.dirname(outputLogFilePath);
|
||||||
if (!fs.existsSync(logDir)) {
|
if (!fs.existsSync(logDir)) {
|
||||||
mkdirp.sync(path.dirname(outputLogFilePath));
|
mkdirp.sync(path.dirname(outputLogFilePath));
|
||||||
}
|
}
|
||||||
|
|
||||||
var output = logrotate({ file: outputLogFilePath, size: '1m', keep: 3, compress: true });
|
const output = logrotate({ file: outputLogFilePath, size: '1m', keep: 3, compress: true });
|
||||||
var silent = nconf.get('silent') === 'false' ? false : nconf.get('silent') !== false;
|
const silent = nconf.get('silent') === 'false' ? false : nconf.get('silent') !== false;
|
||||||
var numProcs;
|
let numProcs;
|
||||||
var workers = [];
|
const workers = [];
|
||||||
var Loader = {
|
const Loader = {
|
||||||
timesStarted: 0,
|
timesStarted: 0,
|
||||||
};
|
};
|
||||||
var appPath = path.join(__dirname, 'app.js');
|
const appPath = path.join(__dirname, 'app.js');
|
||||||
|
|
||||||
Loader.init = function (callback) {
|
Loader.init = function (callback) {
|
||||||
if (silent) {
|
if (silent) {
|
||||||
console.log = function () {
|
console.log = (...args) => {
|
||||||
var args = Array.prototype.slice.call(arguments);
|
output.write(`${args.join(' ')}\n`);
|
||||||
output.write(args.join(' ') + '\n');
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -51,7 +50,7 @@ Loader.init = function (callback) {
|
|||||||
|
|
||||||
Loader.displayStartupMessages = function (callback) {
|
Loader.displayStartupMessages = function (callback) {
|
||||||
console.log('');
|
console.log('');
|
||||||
console.log('NodeBB v' + pkg.version + ' Copyright (C) 2013-2014 NodeBB Inc.');
|
console.log(`NodeBB v${pkg.version} Copyright (C) 2013-2014 NodeBB Inc.`);
|
||||||
console.log('This program comes with ABSOLUTELY NO WARRANTY.');
|
console.log('This program comes with ABSOLUTELY NO WARRANTY.');
|
||||||
console.log('This is free software, and you are welcome to redistribute it under certain conditions.');
|
console.log('This is free software, and you are welcome to redistribute it under certain conditions.');
|
||||||
console.log('For the full license, please visit: http://www.gnu.org/copyleft/gpl.html');
|
console.log('For the full license, please visit: http://www.gnu.org/copyleft/gpl.html');
|
||||||
@@ -60,23 +59,23 @@ Loader.displayStartupMessages = function (callback) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
Loader.addWorkerEvents = function (worker) {
|
Loader.addWorkerEvents = function (worker) {
|
||||||
worker.on('exit', function (code, signal) {
|
worker.on('exit', (code, signal) => {
|
||||||
if (code !== 0) {
|
if (code !== 0) {
|
||||||
if (Loader.timesStarted < numProcs * 3) {
|
if (Loader.timesStarted < numProcs * 3) {
|
||||||
Loader.timesStarted += 1;
|
Loader.timesStarted += 1;
|
||||||
if (Loader.crashTimer) {
|
if (Loader.crashTimer) {
|
||||||
clearTimeout(Loader.crashTimer);
|
clearTimeout(Loader.crashTimer);
|
||||||
}
|
}
|
||||||
Loader.crashTimer = setTimeout(function () {
|
Loader.crashTimer = setTimeout(() => {
|
||||||
Loader.timesStarted = 0;
|
Loader.timesStarted = 0;
|
||||||
}, 10000);
|
}, 10000);
|
||||||
} else {
|
} else {
|
||||||
console.log((numProcs * 3) + ' restarts in 10 seconds, most likely an error on startup. Halting.');
|
console.log(`${numProcs * 3} restarts in 10 seconds, most likely an error on startup. Halting.`);
|
||||||
process.exit();
|
process.exit();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log('[cluster] Child Process (' + worker.pid + ') has exited (code: ' + code + ', signal: ' + signal + ')');
|
console.log(`[cluster] Child Process (${worker.pid}) has exited (code: ${code}, signal: ${signal})`);
|
||||||
if (!(worker.suicide || code === 0)) {
|
if (!(worker.suicide || code === 0)) {
|
||||||
console.log('[cluster] Spinning up another process...');
|
console.log('[cluster] Spinning up another process...');
|
||||||
|
|
||||||
@@ -84,7 +83,7 @@ Loader.addWorkerEvents = function (worker) {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
worker.on('message', function (message) {
|
worker.on('message', (message) => {
|
||||||
if (message && typeof message === 'object' && message.action) {
|
if (message && typeof message === 'object' && message.action) {
|
||||||
switch (message.action) {
|
switch (message.action) {
|
||||||
case 'restart':
|
case 'restart':
|
||||||
@@ -92,12 +91,12 @@ Loader.addWorkerEvents = function (worker) {
|
|||||||
Loader.restart();
|
Loader.restart();
|
||||||
break;
|
break;
|
||||||
case 'pubsub':
|
case 'pubsub':
|
||||||
workers.forEach(function (w) {
|
workers.forEach((w) => {
|
||||||
w.send(message);
|
w.send(message);
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
case 'socket.io':
|
case 'socket.io':
|
||||||
workers.forEach(function (w) {
|
workers.forEach((w) => {
|
||||||
if (w !== worker) {
|
if (w !== worker) {
|
||||||
w.send(message);
|
w.send(message);
|
||||||
}
|
}
|
||||||
@@ -110,9 +109,9 @@ Loader.addWorkerEvents = function (worker) {
|
|||||||
|
|
||||||
Loader.start = function (callback) {
|
Loader.start = function (callback) {
|
||||||
numProcs = getPorts().length;
|
numProcs = getPorts().length;
|
||||||
console.log('Clustering enabled: Spinning up ' + numProcs + ' process(es).\n');
|
console.log(`Clustering enabled: Spinning up ${numProcs} process(es).\n`);
|
||||||
|
|
||||||
for (var x = 0; x < numProcs; x += 1) {
|
for (let x = 0; x < numProcs; x += 1) {
|
||||||
forkWorker(x, x === 0);
|
forkWorker(x, x === 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -122,18 +121,18 @@ Loader.start = function (callback) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
function forkWorker(index, isPrimary) {
|
function forkWorker(index, isPrimary) {
|
||||||
var ports = getPorts();
|
const ports = getPorts();
|
||||||
var args = [];
|
const args = [];
|
||||||
|
|
||||||
if (!ports[index]) {
|
if (!ports[index]) {
|
||||||
return console.log('[cluster] invalid port for worker : ' + index + ' ports: ' + ports.length);
|
return console.log(`[cluster] invalid port for worker : ${index} ports: ${ports.length}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
process.env.isPrimary = isPrimary;
|
process.env.isPrimary = isPrimary;
|
||||||
process.env.isCluster = nconf.get('isCluster') || ports.length > 1;
|
process.env.isCluster = nconf.get('isCluster') || ports.length > 1;
|
||||||
process.env.port = ports[index];
|
process.env.port = ports[index];
|
||||||
|
|
||||||
var worker = fork(appPath, args, {
|
const worker = fork(appPath, args, {
|
||||||
silent: silent,
|
silent: silent,
|
||||||
env: process.env,
|
env: process.env,
|
||||||
});
|
});
|
||||||
@@ -146,20 +145,20 @@ function forkWorker(index, isPrimary) {
|
|||||||
Loader.addWorkerEvents(worker);
|
Loader.addWorkerEvents(worker);
|
||||||
|
|
||||||
if (silent) {
|
if (silent) {
|
||||||
var output = logrotate({ file: outputLogFilePath, size: '1m', keep: 3, compress: true });
|
const output = logrotate({ file: outputLogFilePath, size: '1m', keep: 3, compress: true });
|
||||||
worker.stdout.pipe(output);
|
worker.stdout.pipe(output);
|
||||||
worker.stderr.pipe(output);
|
worker.stderr.pipe(output);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function getPorts() {
|
function getPorts() {
|
||||||
var _url = nconf.get('url');
|
const _url = nconf.get('url');
|
||||||
if (!_url) {
|
if (!_url) {
|
||||||
console.log('[cluster] url is undefined, please check your config.json');
|
console.log('[cluster] url is undefined, please check your config.json');
|
||||||
process.exit();
|
process.exit();
|
||||||
}
|
}
|
||||||
var urlObject = url.parse(_url);
|
const urlObject = url.parse(_url);
|
||||||
var port = nconf.get('PORT') || nconf.get('port') || urlObject.port || 4567;
|
let port = nconf.get('PORT') || nconf.get('port') || urlObject.port || 4567;
|
||||||
if (!Array.isArray(port)) {
|
if (!Array.isArray(port)) {
|
||||||
port = [port];
|
port = [port];
|
||||||
}
|
}
|
||||||
@@ -172,13 +171,13 @@ Loader.restart = function () {
|
|||||||
nconf.remove('file');
|
nconf.remove('file');
|
||||||
nconf.use('file', { file: pathToConfig });
|
nconf.use('file', { file: pathToConfig });
|
||||||
|
|
||||||
fs.readFile(pathToConfig, { encoding: 'utf-8' }, function (err, configFile) {
|
fs.readFile(pathToConfig, { encoding: 'utf-8' }, (err, configFile) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
console.error('Error reading config');
|
console.error('Error reading config');
|
||||||
throw err;
|
throw err;
|
||||||
}
|
}
|
||||||
|
|
||||||
var conf = JSON.parse(configFile);
|
const conf = JSON.parse(configFile);
|
||||||
|
|
||||||
nconf.stores.env.readOnly = false;
|
nconf.stores.env.readOnly = false;
|
||||||
nconf.set('url', conf.url);
|
nconf.set('url', conf.url);
|
||||||
@@ -201,13 +200,13 @@ Loader.stop = function () {
|
|||||||
};
|
};
|
||||||
|
|
||||||
function killWorkers() {
|
function killWorkers() {
|
||||||
workers.forEach(function (worker) {
|
workers.forEach((worker) => {
|
||||||
worker.suicide = true;
|
worker.suicide = true;
|
||||||
worker.kill();
|
worker.kill();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
fs.open(pathToConfig, 'r', function (err) {
|
fs.open(pathToConfig, 'r', (err) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
// No config detected, kickstart web installer
|
// No config detected, kickstart web installer
|
||||||
fork('app');
|
fork('app');
|
||||||
@@ -217,7 +216,7 @@ fs.open(pathToConfig, 'r', function (err) {
|
|||||||
if (nconf.get('daemon') !== 'false' && nconf.get('daemon') !== false) {
|
if (nconf.get('daemon') !== 'false' && nconf.get('daemon') !== false) {
|
||||||
if (file.existsSync(pidFilePath)) {
|
if (file.existsSync(pidFilePath)) {
|
||||||
try {
|
try {
|
||||||
var pid = fs.readFileSync(pidFilePath, { encoding: 'utf-8' });
|
const pid = fs.readFileSync(pidFilePath, { encoding: 'utf-8' });
|
||||||
process.kill(pid, 0);
|
process.kill(pid, 0);
|
||||||
process.exit();
|
process.exit();
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
@@ -238,7 +237,7 @@ fs.open(pathToConfig, 'r', function (err) {
|
|||||||
Loader.init,
|
Loader.init,
|
||||||
Loader.displayStartupMessages,
|
Loader.displayStartupMessages,
|
||||||
Loader.start,
|
Loader.start,
|
||||||
], function (err) {
|
], (err) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
console.error('[loader] Error during startup');
|
console.error('[loader] Error during startup');
|
||||||
throw err;
|
throw err;
|
||||||
|
|||||||
@@ -20,15 +20,44 @@
|
|||||||
"es6": true
|
"es6": true
|
||||||
},
|
},
|
||||||
"rules": {
|
"rules": {
|
||||||
|
"comma-dangle": ["error", {
|
||||||
|
"arrays": "always-multiline",
|
||||||
|
"objects": "always-multiline",
|
||||||
|
"imports": "always-multiline",
|
||||||
|
"exports": "always-multiline",
|
||||||
|
"functions": "never"
|
||||||
|
}],
|
||||||
"block-scoped-var": "off",
|
"block-scoped-var": "off",
|
||||||
"no-dupe-class-members": "off",
|
"no-dupe-class-members": "off",
|
||||||
"no-var": "off",
|
|
||||||
"object-shorthand": "off",
|
|
||||||
"prefer-arrow-callback": "off",
|
|
||||||
"prefer-spread": "off",
|
|
||||||
"prefer-object-spread": "off",
|
"prefer-object-spread": "off",
|
||||||
"prefer-reflect": "off",
|
"prefer-reflect": "off",
|
||||||
"prefer-template": "off"
|
|
||||||
|
// ES6
|
||||||
|
"prefer-rest-params": "off",
|
||||||
|
"prefer-spread": "off",
|
||||||
|
"prefer-arrow-callback": "off",
|
||||||
|
"prefer-template": "off",
|
||||||
|
"no-var": "off",
|
||||||
|
"object-shorthand": "off",
|
||||||
|
"vars-on-top": "off",
|
||||||
|
"prefer-destructuring": "off",
|
||||||
|
// identical to airbnb rule
|
||||||
|
// except for allowing for..in, because for..of is unavailable on some clients
|
||||||
|
"no-restricted-syntax": [
|
||||||
|
"error",
|
||||||
|
{
|
||||||
|
"selector": "ForOfStatement",
|
||||||
|
"message": "iterators/generators require regenerator-runtime, which is too heavyweight for this guide to allow them. Separately, loops should be avoided in favor of array iterations."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"selector": "LabeledStatement",
|
||||||
|
"message": "Labels are a form of GOTO; using them makes code confusing and hard to maintain and understand."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"selector": "WithStatement",
|
||||||
|
"message": "`with` is disallowed in strict mode because it makes code impossible to predict and optimize."
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"parserOptions": {
|
"parserOptions": {
|
||||||
"ecmaVersion": 2018,
|
"ecmaVersion": 2018,
|
||||||
|
|||||||
@@ -2,11 +2,11 @@
|
|||||||
"events": "أحداث",
|
"events": "أحداث",
|
||||||
"no-events": "لا توجد أحداث",
|
"no-events": "لا توجد أحداث",
|
||||||
"control-panel": "لوحة تحكم الأحداث",
|
"control-panel": "لوحة تحكم الأحداث",
|
||||||
"delete-events": "Delete Events",
|
"delete-events": "حذف الاحداث",
|
||||||
"filters": "Filters",
|
"filters": "تصفية",
|
||||||
"filters-apply": "Apply Filters",
|
"filters-apply": "تطبيق التصفية",
|
||||||
"filter-type": "Event Type",
|
"filter-type": "نوع الحدث",
|
||||||
"filter-start": "Start Date",
|
"filter-start": "تاريخ البدء",
|
||||||
"filter-end": "End Date",
|
"filter-end": "تاريخ الانتهاء",
|
||||||
"filter-perPage": "Per Page"
|
"filter-perPage": "لكل صفحة"
|
||||||
}
|
}
|
||||||
@@ -2,6 +2,7 @@
|
|||||||
"forum-traffic": "Forum Traffic",
|
"forum-traffic": "Forum Traffic",
|
||||||
"page-views": "مشاهدات الصفحات",
|
"page-views": "مشاهدات الصفحات",
|
||||||
"unique-visitors": "زائرين فريدين",
|
"unique-visitors": "زائرين فريدين",
|
||||||
|
"logins": "Logins",
|
||||||
"new-users": "New Users",
|
"new-users": "New Users",
|
||||||
"posts": "مشاركات",
|
"posts": "مشاركات",
|
||||||
"topics": "مواضيع",
|
"topics": "مواضيع",
|
||||||
@@ -29,6 +30,7 @@
|
|||||||
"upgrade-available": "<p>A new version (v%1) has been released. Consider <a href=\"https://docs.nodebb.org/configuring/upgrade/\" target=\"_blank\">upgrading your NodeBB</a>.</p>",
|
"upgrade-available": "<p>A new version (v%1) has been released. Consider <a href=\"https://docs.nodebb.org/configuring/upgrade/\" target=\"_blank\">upgrading your NodeBB</a>.</p>",
|
||||||
"prerelease-upgrade-available": "<p>This is an outdated pre-release version of NodeBB. A new version (v%1) has been released. Consider <a href=\"https://docs.nodebb.org/configuring/upgrade/\" target=\"_blank\">upgrading your NodeBB</a>.</p>",
|
"prerelease-upgrade-available": "<p>This is an outdated pre-release version of NodeBB. A new version (v%1) has been released. Consider <a href=\"https://docs.nodebb.org/configuring/upgrade/\" target=\"_blank\">upgrading your NodeBB</a>.</p>",
|
||||||
"prerelease-warning": "<p>هذه نسخة <strong>ماقبل الإصدار</strong> من NodeBB. قد تحدث أخطاء غير مقصودة. <i class=\"fa fa-exclamation-triangle\"></i></p>",
|
"prerelease-warning": "<p>هذه نسخة <strong>ماقبل الإصدار</strong> من NodeBB. قد تحدث أخطاء غير مقصودة. <i class=\"fa fa-exclamation-triangle\"></i></p>",
|
||||||
|
"fallback-emailer-not-found": "Fallback emailer not found!",
|
||||||
"running-in-development": "المنتدى قيد التشغيل في وضع \"المطورين\". وقد تكون هناك ثغرات أمنية مفتوحة؛ من فضلك تواصل مع مسؤول نظامك.",
|
"running-in-development": "المنتدى قيد التشغيل في وضع \"المطورين\". وقد تكون هناك ثغرات أمنية مفتوحة؛ من فضلك تواصل مع مسؤول نظامك.",
|
||||||
"latest-lookup-failed": "<p>Failed to look up latest available version of NodeBB</p>",
|
"latest-lookup-failed": "<p>Failed to look up latest available version of NodeBB</p>",
|
||||||
|
|
||||||
@@ -75,5 +77,12 @@
|
|||||||
"graphs.registered-users": "مستخدمين مسجلين",
|
"graphs.registered-users": "مستخدمين مسجلين",
|
||||||
"graphs.anonymous-users": "مستخدمين مجهولين",
|
"graphs.anonymous-users": "مستخدمين مجهولين",
|
||||||
"last-restarted-by": "Last restarted by",
|
"last-restarted-by": "Last restarted by",
|
||||||
"no-users-browsing": "No users browsing"
|
"no-users-browsing": "No users browsing",
|
||||||
|
|
||||||
|
"back-to-dashboard": "Back to Dashboard",
|
||||||
|
"details.no-users": "No users have joined within the selected timeframe",
|
||||||
|
"details.no-topics": "No topics have been posted within the selected timeframe",
|
||||||
|
"details.no-logins": "No logins have been recorded within the selected timeframe",
|
||||||
|
"details.logins-static": "NodeBB only saves session data for %1 days, and so this table below will only show the most recently active sessions",
|
||||||
|
"details.logins-login-time": "Login Time"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,7 +39,7 @@
|
|||||||
"alert.upgraded": "الإضافة مرقاة",
|
"alert.upgraded": "الإضافة مرقاة",
|
||||||
"alert.installed": "الإضافة منصبة",
|
"alert.installed": "الإضافة منصبة",
|
||||||
"alert.uninstalled": "تم إلغاء تنصيب الإضافة",
|
"alert.uninstalled": "تم إلغاء تنصيب الإضافة",
|
||||||
"alert.activate-success": "يرجى إعادة تشغيل NodeBB لتنشيط الإضافة بشكل بالكامل",
|
"alert.activate-success": "Please rebuild and restart your NodeBB to fully activate this plugin",
|
||||||
"alert.deactivate-success": "تم تعطيل الإضافة بنجاح",
|
"alert.deactivate-success": "تم تعطيل الإضافة بنجاح",
|
||||||
"alert.upgrade-success": "Please rebuild and restart your NodeBB to fully upgrade this plugin.",
|
"alert.upgrade-success": "Please rebuild and restart your NodeBB to fully upgrade this plugin.",
|
||||||
"alert.install-success": "تم تثبيت الإضافة بنجاح، يرجى تفعيلها.",
|
"alert.install-success": "تم تثبيت الإضافة بنجاح، يرجى تفعيلها.",
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
"custom-class": "Custom Class",
|
"custom-class": "Custom Class",
|
||||||
"num-recent-replies": "# of Recent Replies",
|
"num-recent-replies": "# of Recent Replies",
|
||||||
"ext-link": "External Link",
|
"ext-link": "External Link",
|
||||||
|
"subcategories-per-page": "Subcategories per page",
|
||||||
"is-section": "Treat this category as a section",
|
"is-section": "Treat this category as a section",
|
||||||
"post-queue": "Post queue",
|
"post-queue": "Post queue",
|
||||||
"tag-whitelist": "Tag Whitelist",
|
"tag-whitelist": "Tag Whitelist",
|
||||||
@@ -18,6 +19,7 @@
|
|||||||
"category-image": "Category Image",
|
"category-image": "Category Image",
|
||||||
"parent-category": "Parent Category",
|
"parent-category": "Parent Category",
|
||||||
"optional-parent-category": "(Optional) Parent Category",
|
"optional-parent-category": "(Optional) Parent Category",
|
||||||
|
"top-level": "Top Level",
|
||||||
"parent-category-none": "(None)",
|
"parent-category-none": "(None)",
|
||||||
"copy-parent": "Copy Parent",
|
"copy-parent": "Copy Parent",
|
||||||
"copy-settings": "Copy Settings From",
|
"copy-settings": "Copy Settings From",
|
||||||
@@ -30,6 +32,8 @@
|
|||||||
"edit": "Edit",
|
"edit": "Edit",
|
||||||
"analytics": "Analytics",
|
"analytics": "Analytics",
|
||||||
"view-category": "View category",
|
"view-category": "View category",
|
||||||
|
"set-order": "Set order",
|
||||||
|
"set-order-help": "Setting the order of the category will move this category to that order and update the order of other categories as necessary. Minimum order is 1 which puts the category at the top.",
|
||||||
|
|
||||||
"select-category": "Select Category",
|
"select-category": "Select Category",
|
||||||
"set-parent-category": "Set Parent Category",
|
"set-parent-category": "Set Parent Category",
|
||||||
@@ -46,6 +50,8 @@
|
|||||||
"privileges.no-users": "No user-specific privileges in this category.",
|
"privileges.no-users": "No user-specific privileges in this category.",
|
||||||
"privileges.section-group": "Group",
|
"privileges.section-group": "Group",
|
||||||
"privileges.group-private": "This group is private",
|
"privileges.group-private": "This group is private",
|
||||||
|
"privileges.inheritance-exception": "This group does not inherit privileges from registered-users group",
|
||||||
|
"privileges.banned-user-inheritance": "Banned users inherit privileges from banned-users group",
|
||||||
"privileges.search-group": "Add Group",
|
"privileges.search-group": "Add Group",
|
||||||
"privileges.copy-to-children": "Copy to Children",
|
"privileges.copy-to-children": "Copy to Children",
|
||||||
"privileges.copy-from-category": "Copy from Category",
|
"privileges.copy-from-category": "Copy from Category",
|
||||||
|
|||||||
@@ -25,6 +25,7 @@
|
|||||||
"access-topics": "Access Topics",
|
"access-topics": "Access Topics",
|
||||||
"create-topics": "Create Topics",
|
"create-topics": "Create Topics",
|
||||||
"reply-to-topics": "Reply to Topics",
|
"reply-to-topics": "Reply to Topics",
|
||||||
|
"schedule-topics": "Schedule Topics",
|
||||||
"tag-topics": "Tag Topics",
|
"tag-topics": "Tag Topics",
|
||||||
"edit-posts": "Edit Posts",
|
"edit-posts": "Edit Posts",
|
||||||
"view-edit-history": "View Edit History",
|
"view-edit-history": "View Edit History",
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
"none": "Your forum does not have any topics with tags yet.",
|
"none": "Your forum does not have any topics with tags yet.",
|
||||||
"bg-color": "Background Colour",
|
"bg-color": "Background Colour",
|
||||||
"text-color": "Text Colour",
|
"text-color": "Text Colour",
|
||||||
"create-modify": "Create & Modify Tags",
|
|
||||||
"description": "Select tags by clicking or dragging, use <code>CTRL</code> to select multiple tags.",
|
"description": "Select tags by clicking or dragging, use <code>CTRL</code> to select multiple tags.",
|
||||||
"create": "Create Tag",
|
"create": "Create Tag",
|
||||||
"modify": "Modify Tags",
|
"modify": "Modify Tags",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"users": "المستخدمين",
|
"users": "المستخدمين",
|
||||||
"edit": "تحرير",
|
"edit": "Actions",
|
||||||
"make-admin": "Make Admin",
|
"make-admin": "Make Admin",
|
||||||
"remove-admin": "Remove Admin",
|
"remove-admin": "Remove Admin",
|
||||||
"validate-email": "Validate Email",
|
"validate-email": "Validate Email",
|
||||||
@@ -47,6 +47,7 @@
|
|||||||
"users.uid": "uid",
|
"users.uid": "uid",
|
||||||
"users.username": "username",
|
"users.username": "username",
|
||||||
"users.email": "email",
|
"users.email": "email",
|
||||||
|
"users.ip": "IP",
|
||||||
"users.postcount": "postcount",
|
"users.postcount": "postcount",
|
||||||
"users.reputation": "reputation",
|
"users.reputation": "reputation",
|
||||||
"users.flags": "flags",
|
"users.flags": "flags",
|
||||||
|
|||||||
@@ -1,5 +1,9 @@
|
|||||||
{
|
{
|
||||||
"dashboard": "Dashboard",
|
"section-dashboard": "Dashboards",
|
||||||
|
"dashboard/overview": "Overview",
|
||||||
|
"dashboard/logins": "Logins",
|
||||||
|
"dashboard/users": "Users",
|
||||||
|
"dashboard/topics": "Topics",
|
||||||
"section-general": "عام",
|
"section-general": "عام",
|
||||||
|
|
||||||
"section-manage": "إدارة",
|
"section-manage": "إدارة",
|
||||||
|
|||||||
@@ -40,5 +40,8 @@
|
|||||||
"site-colors": "Site Color Metadata",
|
"site-colors": "Site Color Metadata",
|
||||||
"theme-color": "لون الثيم",
|
"theme-color": "لون الثيم",
|
||||||
"background-color": "لون الخلفية",
|
"background-color": "لون الخلفية",
|
||||||
"background-color-help": "Color used for splash screen background when website is installed as a PWA"
|
"background-color-help": "Color used for splash screen background when website is installed as a PWA",
|
||||||
|
"undo-timeout": "Undo Timeout",
|
||||||
|
"undo-timeout-help": "Some operations such as moving topics will allow for the moderator to undo their action within a certain timeframe. Set to 0 to disable undo completely.",
|
||||||
|
"topic-tools": "Topic Tools"
|
||||||
}
|
}
|
||||||
@@ -1,10 +1,12 @@
|
|||||||
{
|
{
|
||||||
"pagination": "Pagination Settings",
|
"pagination": "Pagination Settings",
|
||||||
"enable": "Paginate topics and posts instead of using infinite scroll.",
|
"enable": "Paginate topics and posts instead of using infinite scroll.",
|
||||||
|
"posts": "Post Pagination",
|
||||||
"topics": "Topic Pagination",
|
"topics": "Topic Pagination",
|
||||||
"posts-per-page": "Posts per Page",
|
"posts-per-page": "Posts per Page",
|
||||||
"max-posts-per-page": "Maximum posts per page",
|
"max-posts-per-page": "Maximum posts per page",
|
||||||
"categories": "Category Pagination",
|
"categories": "Category Pagination",
|
||||||
"topics-per-page": "Topics per Page",
|
"topics-per-page": "Topics per Page",
|
||||||
"max-topics-per-page": "Maximum topics per page"
|
"max-topics-per-page": "Maximum topics per page",
|
||||||
|
"categories-per-page": "Categories per page"
|
||||||
}
|
}
|
||||||
@@ -16,5 +16,7 @@
|
|||||||
|
|
||||||
"flags": "Flag Settings",
|
"flags": "Flag Settings",
|
||||||
"flags.limit-per-target": "Maximum number of times something can be flagged",
|
"flags.limit-per-target": "Maximum number of times something can be flagged",
|
||||||
"flags.limit-per-target-placeholder": "Default: 0"
|
"flags.limit-per-target-placeholder": "Default: 0",
|
||||||
|
"flags.limit-per-target-help": "When a post or user is flagged multiple times, each additional flag is considered a "report" and added to the original flag. Set this option to a number other than zero to limit the number of reports an item can receive.",
|
||||||
|
"flags.auto-resolve-on-ban": "Automatically resolve all of a user's tickets when they are banned"
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,8 @@
|
|||||||
{
|
{
|
||||||
"tag": "Tag Settings",
|
"tag": "Tag Settings",
|
||||||
"link-to-manage": "Manage Tags",
|
"link-to-manage": "Manage Tags",
|
||||||
|
"system-tags": "System Tags",
|
||||||
|
"system-tags-help": "Only privileged users will be able to use these tags.",
|
||||||
"min-per-topic": "Minimum Tags per Topic",
|
"min-per-topic": "Minimum Tags per Topic",
|
||||||
"max-per-topic": "Maximum Tags per Topic",
|
"max-per-topic": "Maximum Tags per Topic",
|
||||||
"min-length": "Minimum Tag Length",
|
"min-length": "Minimum Tag Length",
|
||||||
|
|||||||
@@ -21,6 +21,9 @@
|
|||||||
"topic-thumb-size": "حجم الصورة المصغرة للموضوع",
|
"topic-thumb-size": "حجم الصورة المصغرة للموضوع",
|
||||||
"allowed-file-extensions": "إمتدادات الملفات المسموح بها",
|
"allowed-file-extensions": "إمتدادات الملفات المسموح بها",
|
||||||
"allowed-file-extensions-help": "أدخل قائمة بامتدادات الملفات مفصولة بفواصل (مثال: <code>pdf,xls,doc</code>). القائمة الفارغة تعني أن كل الامتدادات مسموح بها.",
|
"allowed-file-extensions-help": "أدخل قائمة بامتدادات الملفات مفصولة بفواصل (مثال: <code>pdf,xls,doc</code>). القائمة الفارغة تعني أن كل الامتدادات مسموح بها.",
|
||||||
|
"upload-limit-threshold": "Rate limit user uploads to:",
|
||||||
|
"upload-limit-threshold-per-minute": "Per %1 Minute",
|
||||||
|
"upload-limit-threshold-per-minutes": "Per %1 Minutes",
|
||||||
"profile-avatars": "الصورة الرمزية للملف الشخصي",
|
"profile-avatars": "الصورة الرمزية للملف الشخصي",
|
||||||
"allow-profile-image-uploads": "السماح للأعضاء برفع الصور الرمزية",
|
"allow-profile-image-uploads": "السماح للأعضاء برفع الصور الرمزية",
|
||||||
"convert-profile-image-png": "تحويل إمتداد الصور الرمزية المرفوعه الى PNG",
|
"convert-profile-image-png": "تحويل إمتداد الصور الرمزية المرفوعه الى PNG",
|
||||||
|
|||||||
@@ -18,5 +18,6 @@
|
|||||||
"watching.message": "You are now watching updates from this category and all subcategories",
|
"watching.message": "You are now watching updates from this category and all subcategories",
|
||||||
"notwatching.message": "You are not watching updates from this category and all subcategories",
|
"notwatching.message": "You are not watching updates from this category and all subcategories",
|
||||||
"ignoring.message": "You are now ignoring updates from this category and all subcategories",
|
"ignoring.message": "You are now ignoring updates from this category and all subcategories",
|
||||||
"watched-categories": "الأقسام المُتابعة"
|
"watched-categories": "الأقسام المُتابعة",
|
||||||
|
"x-more-categories": "%1 more categories"
|
||||||
}
|
}
|
||||||
@@ -22,6 +22,7 @@
|
|||||||
"invalid-username-or-password": "المرجود تحديد اسم مستخدم و كلمة مرور",
|
"invalid-username-or-password": "المرجود تحديد اسم مستخدم و كلمة مرور",
|
||||||
"invalid-search-term": "كلمة البحث غير صحيحة",
|
"invalid-search-term": "كلمة البحث غير صحيحة",
|
||||||
"invalid-url": "Invalid URL",
|
"invalid-url": "Invalid URL",
|
||||||
|
"invalid-event": "Invalid event: %1",
|
||||||
"local-login-disabled": "Local login system has been disabled for non-privileged accounts.",
|
"local-login-disabled": "Local login system has been disabled for non-privileged accounts.",
|
||||||
"csrf-invalid": "لم تتمكن من تسجيل الدخول. هنالك أحتمال ان جلستك انتهت. رجاءًا حاول مرة اخرى.",
|
"csrf-invalid": "لم تتمكن من تسجيل الدخول. هنالك أحتمال ان جلستك انتهت. رجاءًا حاول مرة اخرى.",
|
||||||
"invalid-pagination-value": "رقم الصفحة غير صحيح ، يجب أن يكون بين %1 و %2 .",
|
"invalid-pagination-value": "رقم الصفحة غير صحيح ، يجب أن يكون بين %1 و %2 .",
|
||||||
@@ -83,10 +84,19 @@
|
|||||||
"tag-too-long": "Please enter a shorter tag. Tags can't be longer than %1 character(s)",
|
"tag-too-long": "Please enter a shorter tag. Tags can't be longer than %1 character(s)",
|
||||||
"not-enough-tags": "Not enough tags. Topics must have at least %1 tag(s)",
|
"not-enough-tags": "Not enough tags. Topics must have at least %1 tag(s)",
|
||||||
"too-many-tags": "Too many tags. Topics can't have more than %1 tag(s)",
|
"too-many-tags": "Too many tags. Topics can't have more than %1 tag(s)",
|
||||||
|
"cant-use-system-tag": "You can not use this system tag.",
|
||||||
|
"cant-remove-system-tag": "You can not remove this system tag.",
|
||||||
"still-uploading": "الرجاء الانتظار حتى يكتمل الرفع.",
|
"still-uploading": "الرجاء الانتظار حتى يكتمل الرفع.",
|
||||||
"file-too-big": "الحد الأقصى لرفع الملفات %1 كيلو بت. رجاءًا ارفع ملف أصغر",
|
"file-too-big": "الحد الأقصى لرفع الملفات %1 كيلو بت. رجاءًا ارفع ملف أصغر",
|
||||||
"guest-upload-disabled": "خاصية رفع الملفات غير مفعلة للزوار.",
|
"guest-upload-disabled": "خاصية رفع الملفات غير مفعلة للزوار.",
|
||||||
"cors-error": "Unable to upload image due to misconfigured CORS",
|
"cors-error": "Unable to upload image due to misconfigured CORS",
|
||||||
|
"upload-ratelimit-reached": "You have uploaded too many files at one time. Please try again later.",
|
||||||
|
"scheduling-to-past": "Please select a date in the future.",
|
||||||
|
"invalid-schedule-date": "Please enter a valid date and time.",
|
||||||
|
"cant-pin-scheduled": "Scheduled topics cannot be (un)pinned.",
|
||||||
|
"cant-merge-scheduled": "Scheduled topics cannot be merged.",
|
||||||
|
"cant-move-posts-to-scheduled": "Can't move posts to a scheduled topic.",
|
||||||
|
"cant-move-from-scheduled-to-existing": "Can't move posts from a scheduled topic to an existing topic.",
|
||||||
"already-bookmarked": "You have already bookmarked this post",
|
"already-bookmarked": "You have already bookmarked this post",
|
||||||
"already-unbookmarked": "You have already unbookmarked this post",
|
"already-unbookmarked": "You have already unbookmarked this post",
|
||||||
"cant-ban-other-admins": "لايمكن حظر مدبر نظام آخر.",
|
"cant-ban-other-admins": "لايمكن حظر مدبر نظام آخر.",
|
||||||
@@ -133,6 +143,7 @@
|
|||||||
"chat-delete-duration-expired": "You are only allowed to delete chat messages for %1 second(s) after posting",
|
"chat-delete-duration-expired": "You are only allowed to delete chat messages for %1 second(s) after posting",
|
||||||
"chat-deleted-already": "This chat message has already been deleted.",
|
"chat-deleted-already": "This chat message has already been deleted.",
|
||||||
"chat-restored-already": "This chat message has already been restored.",
|
"chat-restored-already": "This chat message has already been restored.",
|
||||||
|
"chat-room-does-not-exist": "Chat room does not exist.",
|
||||||
"already-voting-for-this-post": "لقد شاركت بالتصويت ، ألا تذكر؟",
|
"already-voting-for-this-post": "لقد شاركت بالتصويت ، ألا تذكر؟",
|
||||||
"reputation-system-disabled": "نظام السمعة معطل",
|
"reputation-system-disabled": "نظام السمعة معطل",
|
||||||
"downvoting-disabled": "التصويتات السلبية معطلة",
|
"downvoting-disabled": "التصويتات السلبية معطلة",
|
||||||
@@ -164,8 +175,10 @@
|
|||||||
"cant-kick-self": "لا يمكنك طرد نفسك من المجموعة.",
|
"cant-kick-self": "لا يمكنك طرد نفسك من المجموعة.",
|
||||||
"no-users-selected": "لا يوجد مستخدم محدد.",
|
"no-users-selected": "لا يوجد مستخدم محدد.",
|
||||||
"invalid-home-page-route": "Invalid home page route",
|
"invalid-home-page-route": "Invalid home page route",
|
||||||
"invalid-session": "Session Mismatch",
|
"invalid-session": "Invalid Session",
|
||||||
"invalid-session-text": "يبدو أن فترة التسجيل لم تعد قائمة او هي غير مطابقة مع الخادم. يرجى إعادة تحميل هذه الصفحة.",
|
"invalid-session-text": "It looks like your login session is no longer active. Please refresh this page.",
|
||||||
|
"session-mismatch": "Session Mismatch",
|
||||||
|
"session-mismatch-text": "It looks like your login session no longer matches with the server. Please refresh this page.",
|
||||||
"no-topics-selected": "No topics selected!",
|
"no-topics-selected": "No topics selected!",
|
||||||
"cant-move-to-same-topic": "Can't move post to same topic!",
|
"cant-move-to-same-topic": "Can't move post to same topic!",
|
||||||
"cant-move-topic-to-same-category": "Can't move topic to the same category!",
|
"cant-move-topic-to-same-category": "Can't move topic to the same category!",
|
||||||
@@ -176,5 +189,18 @@
|
|||||||
"already-unblocked": "This user is already unblocked",
|
"already-unblocked": "This user is already unblocked",
|
||||||
"no-connection": "There seems to be a problem with your internet connection",
|
"no-connection": "There seems to be a problem with your internet connection",
|
||||||
"socket-reconnect-failed": "Unable to reach the server at this time. Click here to try again, or try again later",
|
"socket-reconnect-failed": "Unable to reach the server at this time. Click here to try again, or try again later",
|
||||||
"plugin-not-whitelisted": "Unable to install plugin – only plugins whitelisted by the NodeBB Package Manager can be installed via the ACP"
|
"plugin-not-whitelisted": "Unable to install plugin – only plugins whitelisted by the NodeBB Package Manager can be installed via the ACP",
|
||||||
|
"topic-event-unrecognized": "Topic event '%1' unrecognized",
|
||||||
|
"cant-set-child-as-parent": "Can't set child as parent category",
|
||||||
|
"cant-set-self-as-parent": "Can't set self as parent category",
|
||||||
|
"api.master-token-no-uid": "A master token was received without a corresponding `_uid` in the request body",
|
||||||
|
"api.400": "Something was wrong with the request payload you passed in.",
|
||||||
|
"api.401": "A valid login session was not found. Please log in and try again.",
|
||||||
|
"api.403": "You are not authorised to make this call",
|
||||||
|
"api.404": "Invalid API call",
|
||||||
|
"api.426": "HTTPS is required for requests to the write api, please re-send your request via HTTPS",
|
||||||
|
"api.429": "You have made too many requests, please try again later",
|
||||||
|
"api.500": "An unexpected error was encountered while attempting to service your request.",
|
||||||
|
"api.501": "The route you are trying to call is not implemented yet, please try again tomorrow",
|
||||||
|
"api.503": "The route you are trying to call is not currently available due to a server configuration"
|
||||||
}
|
}
|
||||||
@@ -6,6 +6,7 @@
|
|||||||
"assignee": "المحال إليه",
|
"assignee": "المحال إليه",
|
||||||
"update": "تحديث",
|
"update": "تحديث",
|
||||||
"updated": "تم التحديث",
|
"updated": "تم التحديث",
|
||||||
|
"resolved": "Resolved",
|
||||||
"target-purged": "The content this flag referred to has been purged and is no longer available.",
|
"target-purged": "The content this flag referred to has been purged and is no longer available.",
|
||||||
|
|
||||||
"graph-label": "Daily Flags",
|
"graph-label": "Daily Flags",
|
||||||
@@ -26,6 +27,7 @@
|
|||||||
"filter-cid-all": "All categories",
|
"filter-cid-all": "All categories",
|
||||||
"apply-filters": "Apply Filters",
|
"apply-filters": "Apply Filters",
|
||||||
"more-filters": "More Filters",
|
"more-filters": "More Filters",
|
||||||
|
"fewer-filters": "Fewer Filters",
|
||||||
|
|
||||||
"quick-actions": "اجراءات سريعه",
|
"quick-actions": "اجراءات سريعه",
|
||||||
"flagged-user": "Flagged User",
|
"flagged-user": "Flagged User",
|
||||||
|
|||||||
@@ -46,7 +46,9 @@
|
|||||||
"alert.success": "نجاح",
|
"alert.success": "نجاح",
|
||||||
"alert.error": "خطأ",
|
"alert.error": "خطأ",
|
||||||
"alert.banned": "محظور",
|
"alert.banned": "محظور",
|
||||||
"alert.banned.message": "لقد تم حظر حسابك. سيتم تسجيل الخروج.",
|
"alert.banned.message": "You have just been banned, your access is now restricted.",
|
||||||
|
"alert.unbanned": "Unbanned",
|
||||||
|
"alert.unbanned.message": "Your ban has been lifted.",
|
||||||
"alert.unfollow": "أنت لا تتابع %1 بعد الآن!",
|
"alert.unfollow": "أنت لا تتابع %1 بعد الآن!",
|
||||||
"alert.follow": "أنت الآن تتابع %1!",
|
"alert.follow": "أنت الآن تتابع %1!",
|
||||||
"users": "الأعضاء",
|
"users": "الأعضاء",
|
||||||
@@ -93,6 +95,8 @@
|
|||||||
"guest": "زائر",
|
"guest": "زائر",
|
||||||
"guests": "الزوار",
|
"guests": "الزوار",
|
||||||
"former_user": "A Former User",
|
"former_user": "A Former User",
|
||||||
|
"system-user": "System",
|
||||||
|
"unknown-user": "Unknown user",
|
||||||
"updated.title": "تم تحديث المنتدى",
|
"updated.title": "تم تحديث المنتدى",
|
||||||
"updated.message": "لقد تم تحديث المنتدى إلى آخر نسخة للتو. إضغط هنا لإعادة تحميل الصفحة.",
|
"updated.message": "لقد تم تحديث المنتدى إلى آخر نسخة للتو. إضغط هنا لإعادة تحميل الصفحة.",
|
||||||
"privacy": "الخصوصية",
|
"privacy": "الخصوصية",
|
||||||
|
|||||||
@@ -35,8 +35,7 @@
|
|||||||
"details.member_count": "عدد اﻷعضاء",
|
"details.member_count": "عدد اﻷعضاء",
|
||||||
"details.creation_date": "تاريخ الإنشاء",
|
"details.creation_date": "تاريخ الإنشاء",
|
||||||
"details.description": "الوصف",
|
"details.description": "الوصف",
|
||||||
"details.member-post-cids": "Categories to display posts from",
|
"details.member-post-cids": "Category IDs 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.badge_preview": "معاينة الوسام",
|
||||||
"details.change_icon": "تغيير الأيقونة",
|
"details.change_icon": "تغيير الأيقونة",
|
||||||
"details.change_label_colour": "Change Label Colour",
|
"details.change_label_colour": "Change Label Colour",
|
||||||
|
|||||||
@@ -8,5 +8,6 @@
|
|||||||
"failed_login_attempt": "تسجيل الدخول غير ناجح",
|
"failed_login_attempt": "تسجيل الدخول غير ناجح",
|
||||||
"login_successful": "قمت بتسجيل الدخول بنجاح!",
|
"login_successful": "قمت بتسجيل الدخول بنجاح!",
|
||||||
"dont_have_account": "لا تملك حساب؟",
|
"dont_have_account": "لا تملك حساب؟",
|
||||||
"logged-out-due-to-inactivity": "لقد تم تسجيل خروجك من لوحة تحكم بسبب عدم نشاطك"
|
"logged-out-due-to-inactivity": "لقد تم تسجيل خروجك من لوحة تحكم بسبب عدم نشاطك",
|
||||||
|
"caps-lock-enabled": "Caps Lock is enabled"
|
||||||
}
|
}
|
||||||
@@ -60,6 +60,11 @@
|
|||||||
"composer.zen_mode": "Zen Mode",
|
"composer.zen_mode": "Zen Mode",
|
||||||
"composer.select_category": "Select a category",
|
"composer.select_category": "Select a category",
|
||||||
"composer.textarea.placeholder": "Enter your post content here, drag and drop images",
|
"composer.textarea.placeholder": "Enter your post content here, drag and drop images",
|
||||||
|
"composer.schedule-for": "Schedule topic for",
|
||||||
|
"composer.schedule-date": "Date",
|
||||||
|
"composer.schedule-time": "Time",
|
||||||
|
"composer.cancel-scheduling": "Cancel Scheduling",
|
||||||
|
"composer.set-schedule-date": "Set Date",
|
||||||
"bootbox.ok": "OK",
|
"bootbox.ok": "OK",
|
||||||
"bootbox.cancel": "إلغاء",
|
"bootbox.cancel": "إلغاء",
|
||||||
"bootbox.confirm": "تأكيد",
|
"bootbox.confirm": "تأكيد",
|
||||||
|
|||||||
@@ -14,6 +14,7 @@
|
|||||||
"topics": "مواضيع",
|
"topics": "مواضيع",
|
||||||
"replies": "ردود",
|
"replies": "ردود",
|
||||||
"chat": "محادثات",
|
"chat": "محادثات",
|
||||||
|
"group-chat": "Group Chats",
|
||||||
"follows": "متابعون",
|
"follows": "متابعون",
|
||||||
"upvote": "الموافقين",
|
"upvote": "الموافقين",
|
||||||
"new-flags": "New Flags",
|
"new-flags": "New Flags",
|
||||||
@@ -47,6 +48,8 @@
|
|||||||
"posts-exported": "<strong>%1</strong> posts exported, click to download",
|
"posts-exported": "<strong>%1</strong> posts exported, click to download",
|
||||||
"uploads-exported": "<strong>%1</strong> uploads exported, click to download",
|
"uploads-exported": "<strong>%1</strong> uploads exported, click to download",
|
||||||
"users-csv-exported": "Users csv exported, click to download",
|
"users-csv-exported": "Users csv exported, click to download",
|
||||||
|
"post-queue-accepted": "Your queued post has been accepted. Click here to see your post.",
|
||||||
|
"post-queue-rejected": "Your queued post has been rejected.",
|
||||||
"email-confirmed": "تم التحقق من عنوان البريد الإلكتروني",
|
"email-confirmed": "تم التحقق من عنوان البريد الإلكتروني",
|
||||||
"email-confirmed-message": "شكرًا على إثبات صحة عنوان بريدك الإلكتروني. صار حسابك مفعلًا بالكامل.",
|
"email-confirmed-message": "شكرًا على إثبات صحة عنوان بريدك الإلكتروني. صار حسابك مفعلًا بالكامل.",
|
||||||
"email-confirm-error-message": "حدث خطأ أثناء التحقق من عنوان بريدك الإلكتروني. ربما رمز التفعيل خاطئ أو انتهت صلاحيته.",
|
"email-confirm-error-message": "حدث خطأ أثناء التحقق من عنوان بريدك الإلكتروني. ربما رمز التفعيل خاطئ أو انتهت صلاحيته.",
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
{
|
{
|
||||||
"post-queue": "Post Queue",
|
"post-queue": "Post Queue",
|
||||||
"description": "There are no posts in the post queue. <br> To enable this feature, go to <a href=\"%1\">Settings → Post → Post Queue</a> and enable <strong>Post Queue</strong>.",
|
"description": "There are no posts in the post queue. <br> To enable this feature, go to <a href=\"%1\">Settings → Post → Post Queue</a> and enable <strong>Post Queue</strong>.",
|
||||||
@@ -7,5 +8,11 @@
|
|||||||
"content": "Content",
|
"content": "Content",
|
||||||
"posted": "Posted",
|
"posted": "Posted",
|
||||||
"reply-to": "Reply to \"%1\"",
|
"reply-to": "Reply to \"%1\"",
|
||||||
"content-editable": "You can click on individual content to edit before posting."
|
"content-editable": "Click on content to edit",
|
||||||
|
"category-editable": "Click on category to edit",
|
||||||
|
"title-editable": "Click on title to edit",
|
||||||
|
"reply": "Reply",
|
||||||
|
"topic": "Topic",
|
||||||
|
"accept": "Accept",
|
||||||
|
"reject": "Reject"
|
||||||
}
|
}
|
||||||
@@ -24,5 +24,8 @@
|
|||||||
"interstitial.errors-found": "تعذر علينا إتمام عملية التسجيل:",
|
"interstitial.errors-found": "تعذر علينا إتمام عملية التسجيل:",
|
||||||
"gdpr_agree_data": "I consent to the collection and processing of my personal information on this website.",
|
"gdpr_agree_data": "I consent to the collection and processing of my personal information on this website.",
|
||||||
"gdpr_agree_email": "I consent to receive digest and notification emails from this website.",
|
"gdpr_agree_email": "I consent to receive digest and notification emails from this website.",
|
||||||
"gdpr_consent_denied": "You must give consent to this site to collect/process your information, and to send you emails."
|
"gdpr_consent_denied": "You must give consent to this site to collect/process your information, and to send you emails.",
|
||||||
|
"invite.error-admin-only": "Direct user registration has been disabled. Please contact an administrator for more details.",
|
||||||
|
"invite.error-invite-only": "Direct user registration has been disabled. You must be invited by an existing user in order to access this forum.",
|
||||||
|
"invite.error-invalid-data": "The registration data received does not correspond to our records. Please contact an administrator for more details"
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"success": "نجاح",
|
"success": "نجاح",
|
||||||
"topic-post": "لقد تمت الإضافة بنجاح.",
|
"topic-post": "لقد تمت الإضافة بنجاح.",
|
||||||
"post-queued": "Your post is queued for approval.",
|
"post-queued": "Your post is queued for approval. You will get a notification when it is accepted or rejected.",
|
||||||
"authentication-successful": "تم تسجيل الدخول بنجاح",
|
"authentication-successful": "تم تسجيل الدخول بنجاح",
|
||||||
"settings-saved": "تم حفظ التغييرات!"
|
"settings-saved": "تم حفظ التغييرات!"
|
||||||
}
|
}
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"topic": "موضوع",
|
"topic": "موضوع",
|
||||||
|
"title": "Title",
|
||||||
"no_topics_found": "لا توجد مواضيع !",
|
"no_topics_found": "لا توجد مواضيع !",
|
||||||
"no_posts_found": "لا توجد مشاركات!",
|
"no_posts_found": "لا توجد مشاركات!",
|
||||||
"post_is_deleted": "هذه المشاركة محذوفة!",
|
"post_is_deleted": "هذه المشاركة محذوفة!",
|
||||||
@@ -30,16 +31,25 @@
|
|||||||
"locked": "مقفل",
|
"locked": "مقفل",
|
||||||
"pinned": "مثبت",
|
"pinned": "مثبت",
|
||||||
"pinned-with-expiry": "Pinned until %1",
|
"pinned-with-expiry": "Pinned until %1",
|
||||||
|
"scheduled": "Scheduled",
|
||||||
"moved": "منقول",
|
"moved": "منقول",
|
||||||
"moved-from": "Moved from %1",
|
"moved-from": "Moved from %1",
|
||||||
"copy-ip": "Copy IP",
|
"copy-ip": "Copy IP",
|
||||||
"ban-ip": "Ban IP",
|
"ban-ip": "Ban IP",
|
||||||
"view-history": "Edit History",
|
"view-history": "Edit History",
|
||||||
|
"locked-by": "Locked by",
|
||||||
|
"unlocked-by": "Unlocked by",
|
||||||
|
"pinned-by": "Pinned by",
|
||||||
|
"unpinned-by": "Unpinned by",
|
||||||
|
"deleted-by": "Deleted by",
|
||||||
|
"restored-by": "Restored by",
|
||||||
|
"queued-by": "Post queued for approval →",
|
||||||
"bookmark_instructions": "اضغط هنا للعودة لأخر مشاركة مقروءة في الموضوع",
|
"bookmark_instructions": "اضغط هنا للعودة لأخر مشاركة مقروءة في الموضوع",
|
||||||
"flag-post": "Flag this post",
|
"flag-post": "Flag this post",
|
||||||
"flag-user": "Flag this user",
|
"flag-user": "Flag this user",
|
||||||
"already-flagged": "Already Flagged",
|
"already-flagged": "Already Flagged",
|
||||||
"view-flag-report": "View Flag Report",
|
"view-flag-report": "View Flag Report",
|
||||||
|
"resolve-flag": "Resolve Flag",
|
||||||
"merged_message": "This topic has been merged into <a href=\"%1\">%2</a>",
|
"merged_message": "This topic has been merged into <a href=\"%1\">%2</a>",
|
||||||
"deleted_message": "هذه المشاركة محذوفة. فقط من لهم صلاحية الإشراف على ا لمشاركات يمكنهم معاينتها.",
|
"deleted_message": "هذه المشاركة محذوفة. فقط من لهم صلاحية الإشراف على ا لمشاركات يمكنهم معاينتها.",
|
||||||
"following_topic.message": "ستستلم تنبيها عند كل مشاركة جديدة في هذا الموضوع.",
|
"following_topic.message": "ستستلم تنبيها عند كل مشاركة جديدة في هذا الموضوع.",
|
||||||
@@ -104,6 +114,7 @@
|
|||||||
"move_post": "نقل المشاركة",
|
"move_post": "نقل المشاركة",
|
||||||
"post_moved": "تم نقل المشاركة",
|
"post_moved": "تم نقل المشاركة",
|
||||||
"fork_topic": "فرع الموضوع",
|
"fork_topic": "فرع الموضوع",
|
||||||
|
"enter-new-topic-title": "Enter new topic title",
|
||||||
"fork_topic_instruction": "إضغط على المشاركات التي تريد تفريعها",
|
"fork_topic_instruction": "إضغط على المشاركات التي تريد تفريعها",
|
||||||
"fork_no_pids": "لم تختر أي مشاركة",
|
"fork_no_pids": "لم تختر أي مشاركة",
|
||||||
"no-posts-selected": "No posts selected!",
|
"no-posts-selected": "No posts selected!",
|
||||||
@@ -117,14 +128,17 @@
|
|||||||
"merge-options": "Merge options",
|
"merge-options": "Merge options",
|
||||||
"merge-select-main-topic": "Select the main topic",
|
"merge-select-main-topic": "Select the main topic",
|
||||||
"merge-new-title-for-topic": "New title for topic",
|
"merge-new-title-for-topic": "New title for topic",
|
||||||
"move_posts_instruction": "Click the posts you want to move then go to target topic and click move.",
|
"topic-id": "Topic ID",
|
||||||
|
"move_posts_instruction": "Click the posts you want to move then enter a topic ID or go to the target topic",
|
||||||
"change_owner_instruction": "Click the posts you want to assign to another user",
|
"change_owner_instruction": "Click the posts you want to assign to another user",
|
||||||
"composer.title_placeholder": "أدخل عنوان موضوعك هنا...",
|
"composer.title_placeholder": "أدخل عنوان موضوعك هنا...",
|
||||||
"composer.handle_placeholder": "Enter your name/handle here",
|
"composer.handle_placeholder": "Enter your name/handle here",
|
||||||
"composer.discard": "نبذ التغييرات",
|
"composer.discard": "نبذ التغييرات",
|
||||||
"composer.submit": "حفظ",
|
"composer.submit": "حفظ",
|
||||||
|
"composer.schedule": "Schedule",
|
||||||
"composer.replying_to": "الرد على %1",
|
"composer.replying_to": "الرد على %1",
|
||||||
"composer.new_topic": "موضوع جديد",
|
"composer.new_topic": "موضوع جديد",
|
||||||
|
"composer.editing": "Editing",
|
||||||
"composer.uploading": "جاري الرفع",
|
"composer.uploading": "جاري الرفع",
|
||||||
"composer.thumb_url_label": "ألصق رابط الصورة المصغرة للموضوع",
|
"composer.thumb_url_label": "ألصق رابط الصورة المصغرة للموضوع",
|
||||||
"composer.thumb_title": "إضافة صورة مصغرة للموضوع",
|
"composer.thumb_title": "إضافة صورة مصغرة للموضوع",
|
||||||
@@ -152,8 +166,10 @@
|
|||||||
"diffs.current-revision": "current revision",
|
"diffs.current-revision": "current revision",
|
||||||
"diffs.original-revision": "original revision",
|
"diffs.original-revision": "original revision",
|
||||||
"diffs.restore": "Restore this revision",
|
"diffs.restore": "Restore this revision",
|
||||||
"diffs.restore-description": "A new revision will be appended to this post's edit history.",
|
"diffs.restore-description": "A new revision will be appended to this post's edit history after restoring.",
|
||||||
"diffs.post-restored": "Post successfully restored to earlier revision",
|
"diffs.post-restored": "Post successfully restored to earlier revision",
|
||||||
|
"diffs.delete": "Delete this revision",
|
||||||
|
"diffs.deleted": "Revision deleted",
|
||||||
"timeago_later": "%1 later",
|
"timeago_later": "%1 later",
|
||||||
"timeago_earlier": "%1 earlier",
|
"timeago_earlier": "%1 earlier",
|
||||||
"first-post": "First post",
|
"first-post": "First post",
|
||||||
|
|||||||
@@ -84,6 +84,7 @@
|
|||||||
"remove_cover_picture_confirm": "هل تريد بالتأكيد إزالة صورة الغلاف؟",
|
"remove_cover_picture_confirm": "هل تريد بالتأكيد إزالة صورة الغلاف؟",
|
||||||
"crop_picture": "إقتصاص الصورة",
|
"crop_picture": "إقتصاص الصورة",
|
||||||
"upload_cropped_picture": "إقتصاص ورفع",
|
"upload_cropped_picture": "إقتصاص ورفع",
|
||||||
|
"avatar-background-colour": "Avatar background colour",
|
||||||
"settings": "خيارات",
|
"settings": "خيارات",
|
||||||
"show_email": "أظهر بريدي الإلكتروني",
|
"show_email": "أظهر بريدي الإلكتروني",
|
||||||
"show_fullname": "أظهر اسمي الكامل",
|
"show_fullname": "أظهر اسمي الكامل",
|
||||||
@@ -135,7 +136,7 @@
|
|||||||
"homepage": "الصفحة الرئيسية",
|
"homepage": "الصفحة الرئيسية",
|
||||||
"homepage_description": "حدد صفحة لاستخدامها كصفحة رئيسية للمنتدى أو \"لا شيء\" لاستخدام الصفحة الرئيسية الافتراضية.",
|
"homepage_description": "حدد صفحة لاستخدامها كصفحة رئيسية للمنتدى أو \"لا شيء\" لاستخدام الصفحة الرئيسية الافتراضية.",
|
||||||
"custom_route": "مسار الصفحة الرئيسية المخصصة",
|
"custom_route": "مسار الصفحة الرئيسية المخصصة",
|
||||||
"custom_route_help": "أدخل اسم مسار هنا، بدون أي شرطة مائلة (على سبيل المثال \"حديثة\" أو \"شائعة\")",
|
"custom_route_help": "Enter a route name here, without any preceding slash (e.g. \"recent\" or \"category/2/general-discussion\")",
|
||||||
"sso.title": "خدمات تسجيل الدخول الموحد",
|
"sso.title": "خدمات تسجيل الدخول الموحد",
|
||||||
"sso.associated": "مرتبط مع",
|
"sso.associated": "مرتبط مع",
|
||||||
"sso.not-associated": "انقر هنا لربط مع",
|
"sso.not-associated": "انقر هنا لربط مع",
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
"forum-traffic": "Трафик на форума",
|
"forum-traffic": "Трафик на форума",
|
||||||
"page-views": "Преглеждания на страниците",
|
"page-views": "Преглеждания на страниците",
|
||||||
"unique-visitors": "Уникални посетители",
|
"unique-visitors": "Уникални посетители",
|
||||||
|
"logins": "Вписвания",
|
||||||
"new-users": "Нови потребители",
|
"new-users": "Нови потребители",
|
||||||
"posts": "Публикации",
|
"posts": "Публикации",
|
||||||
"topics": "Теми",
|
"topics": "Теми",
|
||||||
@@ -29,6 +30,7 @@
|
|||||||
"upgrade-available": "<p>Има нова версия (версия %1). Ако имате възможност, <a href=\"https://docs.nodebb.org/configuring/upgrade/\" target=\"_blank\">обновете NodeBB</a>.</p>",
|
"upgrade-available": "<p>Има нова версия (версия %1). Ако имате възможност, <a href=\"https://docs.nodebb.org/configuring/upgrade/\" target=\"_blank\">обновете NodeBB</a>.</p>",
|
||||||
"prerelease-upgrade-available": "<p>Това е остаряла предварителна версия на NodeBB. Има нова версия (версия %1). Ако имате възможност, <a href=\"https://docs.nodebb.org/configuring/upgrade/\" target=\"_blank\">обновете NodeBB</a>.</p>",
|
"prerelease-upgrade-available": "<p>Това е остаряла предварителна версия на NodeBB. Има нова версия (версия %1). Ако имате възможност, <a href=\"https://docs.nodebb.org/configuring/upgrade/\" target=\"_blank\">обновете NodeBB</a>.</p>",
|
||||||
"prerelease-warning": "<p>Това е версия за <strong>предварителен преглед</strong> на NodeBB. Възможно е да има неочаквани неизправности. <i class=\"fa fa-exclamation-triangle\"></i></p>",
|
"prerelease-warning": "<p>Това е версия за <strong>предварителен преглед</strong> на NodeBB. Възможно е да има неочаквани неизправности. <i class=\"fa fa-exclamation-triangle\"></i></p>",
|
||||||
|
"fallback-emailer-not-found": "Не е намерен резервен изпращач на е-поща",
|
||||||
"running-in-development": "<span>Форумът работи в режим за разработчици, така че може да бъде уязвим. Моля, свържете се със системния си администратор.</span>",
|
"running-in-development": "<span>Форумът работи в режим за разработчици, така че може да бъде уязвим. Моля, свържете се със системния си администратор.</span>",
|
||||||
"latest-lookup-failed": "<p>Не може да бъде извършена проверка за последната налична версия на NodeBB</p>",
|
"latest-lookup-failed": "<p>Не може да бъде извършена проверка за последната налична версия на NodeBB</p>",
|
||||||
|
|
||||||
@@ -75,5 +77,12 @@
|
|||||||
"graphs.registered-users": "Регистрирани потребители",
|
"graphs.registered-users": "Регистрирани потребители",
|
||||||
"graphs.anonymous-users": "Анонимни потребители",
|
"graphs.anonymous-users": "Анонимни потребители",
|
||||||
"last-restarted-by": "Последно рестартиране от",
|
"last-restarted-by": "Последно рестартиране от",
|
||||||
"no-users-browsing": "Няма разглеждащи потребители"
|
"no-users-browsing": "Няма разглеждащи потребители",
|
||||||
|
|
||||||
|
"back-to-dashboard": "Назад към таблото",
|
||||||
|
"details.no-users": "В избрания период не са се регистрирали нови потребители",
|
||||||
|
"details.no-topics": "В избрания период не са публикувани нови теми",
|
||||||
|
"details.no-logins": "В избрания период не са отчетени вписвания",
|
||||||
|
"details.logins-static": "NodeBB запазва данни за сесията в продължение на %1 дни, така че в следната таблица могат да се видят само последните активни сесии",
|
||||||
|
"details.logins-login-time": "Време на вписване"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,7 +39,7 @@
|
|||||||
"alert.upgraded": "Добавката е обновена",
|
"alert.upgraded": "Добавката е обновена",
|
||||||
"alert.installed": "Добавката е инсталирана",
|
"alert.installed": "Добавката е инсталирана",
|
||||||
"alert.uninstalled": "Добавката е деинсталирана",
|
"alert.uninstalled": "Добавката е деинсталирана",
|
||||||
"alert.activate-success": "Моля, рестартирайте NodeBB, за да включите тази добавка напълно.",
|
"alert.activate-success": "Моля, изградете повторно и презаредете NodeBB, за да активирате напълно тази добавка.",
|
||||||
"alert.deactivate-success": "Добавката е изключена успешно.",
|
"alert.deactivate-success": "Добавката е изключена успешно.",
|
||||||
"alert.upgrade-success": "Моля, изградете повторно и презаредете NodeBB, за да обновите тази добавка напълно.",
|
"alert.upgrade-success": "Моля, изградете повторно и презаредете NodeBB, за да обновите тази добавка напълно.",
|
||||||
"alert.install-success": "Добавката е инсталирана успешно, моля, включете я",
|
"alert.install-success": "Добавката е инсталирана успешно, моля, включете я",
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
"custom-class": "Персонализиран клас",
|
"custom-class": "Персонализиран клас",
|
||||||
"num-recent-replies": "Брой на скорошните отговори",
|
"num-recent-replies": "Брой на скорошните отговори",
|
||||||
"ext-link": "Външна връзка",
|
"ext-link": "Външна връзка",
|
||||||
|
"subcategories-per-page": "Брой подкатегории на страница",
|
||||||
"is-section": "Използване на тази категория като раздел",
|
"is-section": "Използване на тази категория като раздел",
|
||||||
"post-queue": "Опашка за публикации",
|
"post-queue": "Опашка за публикации",
|
||||||
"tag-whitelist": "Списък от разрешени етикети",
|
"tag-whitelist": "Списък от разрешени етикети",
|
||||||
@@ -18,6 +19,7 @@
|
|||||||
"category-image": "Изображение на категорията",
|
"category-image": "Изображение на категорията",
|
||||||
"parent-category": "Базова категория",
|
"parent-category": "Базова категория",
|
||||||
"optional-parent-category": "(Незадължително) Базова категория",
|
"optional-parent-category": "(Незадължително) Базова категория",
|
||||||
|
"top-level": "Най-горно ниво",
|
||||||
"parent-category-none": "(Няма)",
|
"parent-category-none": "(Няма)",
|
||||||
"copy-parent": "Копиране на базовата",
|
"copy-parent": "Копиране на базовата",
|
||||||
"copy-settings": "Копиране на настройките от",
|
"copy-settings": "Копиране на настройките от",
|
||||||
@@ -30,6 +32,8 @@
|
|||||||
"edit": "Редактиране",
|
"edit": "Редактиране",
|
||||||
"analytics": "Анализи",
|
"analytics": "Анализи",
|
||||||
"view-category": "Преглед на категорията",
|
"view-category": "Преглед на категорията",
|
||||||
|
"set-order": "Запазване на реда",
|
||||||
|
"set-order-help": "Задаването на позиция за категорията ще я премести на желаното място и ще промени местата на другите категории, ако е необходимо. Най-малкият възможен номер е 1, което ще постави категорията най-отгоре.",
|
||||||
|
|
||||||
"select-category": "Изберете категория",
|
"select-category": "Изберете категория",
|
||||||
"set-parent-category": "Задайте базова категория",
|
"set-parent-category": "Задайте базова категория",
|
||||||
@@ -46,6 +50,8 @@
|
|||||||
"privileges.no-users": "В тази категория няма правомощия за отделни потребители.",
|
"privileges.no-users": "В тази категория няма правомощия за отделни потребители.",
|
||||||
"privileges.section-group": "Група",
|
"privileges.section-group": "Група",
|
||||||
"privileges.group-private": "Тази група е частна",
|
"privileges.group-private": "Тази група е частна",
|
||||||
|
"privileges.inheritance-exception": "Тази група не наследява правомощията от групата на регистрираните потребители",
|
||||||
|
"privileges.banned-user-inheritance": "Блокираните потребители наследяват правомощията от групата на блокираните потребители",
|
||||||
"privileges.search-group": "Добавяне на група",
|
"privileges.search-group": "Добавяне на група",
|
||||||
"privileges.copy-to-children": "Копиране в наследниците",
|
"privileges.copy-to-children": "Копиране в наследниците",
|
||||||
"privileges.copy-from-category": "Копиране от категория",
|
"privileges.copy-from-category": "Копиране от категория",
|
||||||
|
|||||||
@@ -25,6 +25,7 @@
|
|||||||
"access-topics": "Достъп до теми",
|
"access-topics": "Достъп до теми",
|
||||||
"create-topics": "Създаване на теми",
|
"create-topics": "Създаване на теми",
|
||||||
"reply-to-topics": "Отговаряне в теми",
|
"reply-to-topics": "Отговаряне в теми",
|
||||||
|
"schedule-topics": "Насрочване на теми",
|
||||||
"tag-topics": "Поставяне на етикети на теми",
|
"tag-topics": "Поставяне на етикети на теми",
|
||||||
"edit-posts": "Редактиране на публикации",
|
"edit-posts": "Редактиране на публикации",
|
||||||
"view-edit-history": "Преглед на историята на редакциите",
|
"view-edit-history": "Преглед на историята на редакциите",
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
"none": "Форумът все още няма теми с етикети.",
|
"none": "Форумът все още няма теми с етикети.",
|
||||||
"bg-color": "Цвят на фона",
|
"bg-color": "Цвят на фона",
|
||||||
"text-color": "Цвят на текста",
|
"text-color": "Цвят на текста",
|
||||||
"create-modify": "Създаване и редактиране на етикети",
|
|
||||||
"description": "Изберете етикетите чрез щракване или влачене. Използвайте <code>CTRL</code>, за да изберете няколко етикета.",
|
"description": "Изберете етикетите чрез щракване или влачене. Използвайте <code>CTRL</code>, за да изберете няколко етикета.",
|
||||||
"create": "Създаване на етикет",
|
"create": "Създаване на етикет",
|
||||||
"modify": "Редактиране на етикети",
|
"modify": "Редактиране на етикети",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"users": "Потребители",
|
"users": "Потребители",
|
||||||
"edit": "Редактиране",
|
"edit": "Действия",
|
||||||
"make-admin": "Даване на администраторски права",
|
"make-admin": "Даване на администраторски права",
|
||||||
"remove-admin": "Отнемане на администраторски права",
|
"remove-admin": "Отнемане на администраторски права",
|
||||||
"validate-email": "Проверка на е-пощата",
|
"validate-email": "Проверка на е-пощата",
|
||||||
@@ -47,6 +47,7 @@
|
|||||||
"users.uid": "потр. ид.",
|
"users.uid": "потр. ид.",
|
||||||
"users.username": "потребителско име",
|
"users.username": "потребителско име",
|
||||||
"users.email": "е-поща",
|
"users.email": "е-поща",
|
||||||
|
"users.ip": "IP адрес",
|
||||||
"users.postcount": "брой публикации",
|
"users.postcount": "брой публикации",
|
||||||
"users.reputation": "репутация",
|
"users.reputation": "репутация",
|
||||||
"users.flags": "доклади",
|
"users.flags": "доклади",
|
||||||
|
|||||||
@@ -1,5 +1,9 @@
|
|||||||
{
|
{
|
||||||
"dashboard": "Табло",
|
"section-dashboard": "Табла",
|
||||||
|
"dashboard/overview": "Общ преглед",
|
||||||
|
"dashboard/logins": "Вписвания",
|
||||||
|
"dashboard/users": "Потребители",
|
||||||
|
"dashboard/topics": "Теми",
|
||||||
"section-general": "Общи",
|
"section-general": "Общи",
|
||||||
|
|
||||||
"section-manage": "Управление",
|
"section-manage": "Управление",
|
||||||
|
|||||||
@@ -40,5 +40,8 @@
|
|||||||
"site-colors": "Мета-данни за цвета на уеб сайта",
|
"site-colors": "Мета-данни за цвета на уеб сайта",
|
||||||
"theme-color": "Цвят на темата",
|
"theme-color": "Цвят на темата",
|
||||||
"background-color": "Фонов цвят",
|
"background-color": "Фонов цвят",
|
||||||
"background-color-help": "Цвят, който да се използва като фон за началния екран, когато уеб сайтът е инсталиран като приложение"
|
"background-color-help": "Цвят, който да се използва като фон за началния екран, когато уеб сайтът е инсталиран като приложение",
|
||||||
|
"undo-timeout": "Време за отмяна",
|
||||||
|
"undo-timeout-help": "Някои действия, като например преместването на теми, могат да бъдат отменени от модератора в рамките на определено време. Задайте 0, за да забраните изцяло отменянето.",
|
||||||
|
"topic-tools": "Инструменти за темите"
|
||||||
}
|
}
|
||||||
@@ -1,10 +1,12 @@
|
|||||||
{
|
{
|
||||||
"pagination": "Настройки за страницирането",
|
"pagination": "Настройки за страницирането",
|
||||||
"enable": "Разделяне на темите и публикациите на страници, вместо да се превърта безкрайно.",
|
"enable": "Разделяне на темите и публикациите на страници, вместо да се превърта безкрайно.",
|
||||||
|
"posts": "Странициране в публикациите",
|
||||||
"topics": "Странициране в темите",
|
"topics": "Странициране в темите",
|
||||||
"posts-per-page": "Публикации на страница",
|
"posts-per-page": "Публикации на страница",
|
||||||
"max-posts-per-page": "Максимален брой публикации на страница",
|
"max-posts-per-page": "Максимален брой публикации на страница",
|
||||||
"categories": "Странициране на категориите",
|
"categories": "Странициране на категориите",
|
||||||
"topics-per-page": "Теми на страница",
|
"topics-per-page": "Теми на страница",
|
||||||
"max-topics-per-page": "Максимален брой теми на страница"
|
"max-topics-per-page": "Максимален брой теми на страница",
|
||||||
|
"categories-per-page": "Брой категории на страница"
|
||||||
}
|
}
|
||||||
@@ -16,5 +16,7 @@
|
|||||||
|
|
||||||
"flags": "Настройки за докладите",
|
"flags": "Настройки за докладите",
|
||||||
"flags.limit-per-target": "Максимален брой докладвания на едно и също нещо",
|
"flags.limit-per-target": "Максимален брой докладвания на едно и също нещо",
|
||||||
"flags.limit-per-target-placeholder": "По подразбиране: 0"
|
"flags.limit-per-target-placeholder": "По подразбиране: 0",
|
||||||
|
"flags.limit-per-target-help": "Когато публикация или потребител бъде докладван няколко пъти, това се добавя към един общ доклад. Задайте на тази настройка стойност по-голяма от нула, за да ограничите броя на докладванията, които могат да бъдат натрупани към една публикация или потребител.",
|
||||||
|
"flags.auto-resolve-on-ban": "Автоматично премахване на всички доклади за потребител, когато той бъде блокиран"
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,8 @@
|
|||||||
{
|
{
|
||||||
"tag": "Настройки за етикетите",
|
"tag": "Настройки за етикетите",
|
||||||
"link-to-manage": "Управление на етикетите",
|
"link-to-manage": "Управление на етикетите",
|
||||||
|
"system-tags": "Системни етикети",
|
||||||
|
"system-tags-help": "Само потребителите с по-високи правомощия ще могат да използват тези етикети.",
|
||||||
"min-per-topic": "Минимален брой етикети за тема",
|
"min-per-topic": "Минимален брой етикети за тема",
|
||||||
"max-per-topic": "Максимален брой етикети за тема",
|
"max-per-topic": "Максимален брой етикети за тема",
|
||||||
"min-length": "Минимална дължина на етикетите",
|
"min-length": "Минимална дължина на етикетите",
|
||||||
|
|||||||
@@ -21,6 +21,9 @@
|
|||||||
"topic-thumb-size": "Размер на миниатюрите за темите",
|
"topic-thumb-size": "Размер на миниатюрите за темите",
|
||||||
"allowed-file-extensions": "Разрешени файлови разширения",
|
"allowed-file-extensions": "Разрешени файлови разширения",
|
||||||
"allowed-file-extensions-help": "Въведете файловите разширения, разделени със запетаи (пример: <code>pdf,xls,doc</code>). Ако списъкът е празен, всички файлови разширения ще бъдат разрешени.",
|
"allowed-file-extensions-help": "Въведете файловите разширения, разделени със запетаи (пример: <code>pdf,xls,doc</code>). Ако списъкът е празен, всички файлови разширения ще бъдат разрешени.",
|
||||||
|
"upload-limit-threshold": "Ограничаване на качванията на потребителите до:",
|
||||||
|
"upload-limit-threshold-per-minute": "За %1 минута",
|
||||||
|
"upload-limit-threshold-per-minutes": "За %1 минути",
|
||||||
"profile-avatars": "Профилни изображения",
|
"profile-avatars": "Профилни изображения",
|
||||||
"allow-profile-image-uploads": "Позволяване на потребителите да качват профилни изображения",
|
"allow-profile-image-uploads": "Позволяване на потребителите да качват профилни изображения",
|
||||||
"convert-profile-image-png": "Превръщане на качените профилни изображения във формата „PNG“",
|
"convert-profile-image-png": "Превръщане на качените профилни изображения във формата „PNG“",
|
||||||
|
|||||||
@@ -18,5 +18,6 @@
|
|||||||
"watching.message": "Вече следите новите неща в категорията и подкатегориите ѝ",
|
"watching.message": "Вече следите новите неща в категорията и подкатегориите ѝ",
|
||||||
"notwatching.message": "Вече не следите новите неща в категорията и подкатегориите ѝ",
|
"notwatching.message": "Вече не следите новите неща в категорията и подкатегориите ѝ",
|
||||||
"ignoring.message": "Вече пренебрегвате новите неща в тази категория и всички нейни подкатегории",
|
"ignoring.message": "Вече пренебрегвате новите неща в тази категория и всички нейни подкатегории",
|
||||||
"watched-categories": "Следени категории"
|
"watched-categories": "Следени категории",
|
||||||
|
"x-more-categories": "Още %1 категории"
|
||||||
}
|
}
|
||||||
@@ -22,6 +22,7 @@
|
|||||||
"invalid-username-or-password": "Моля, въведете потребителско име и парола",
|
"invalid-username-or-password": "Моля, въведете потребителско име и парола",
|
||||||
"invalid-search-term": "Грешен текст за търсене",
|
"invalid-search-term": "Грешен текст за търсене",
|
||||||
"invalid-url": "Грешен адрес",
|
"invalid-url": "Грешен адрес",
|
||||||
|
"invalid-event": "Грешно събитие: %1",
|
||||||
"local-login-disabled": "Системата за местно вписване е изключена за непривилегированите акаунти.",
|
"local-login-disabled": "Системата за местно вписване е изключена за непривилегированите акаунти.",
|
||||||
"csrf-invalid": "Не успяхме да Ви впишем, най-вероятно защото сесията Ви е изтекла. Моля, опитайте отново",
|
"csrf-invalid": "Не успяхме да Ви впишем, най-вероятно защото сесията Ви е изтекла. Моля, опитайте отново",
|
||||||
"invalid-pagination-value": "Грешен номер на странициране, трябва да бъде между %1 и %2",
|
"invalid-pagination-value": "Грешен номер на странициране, трябва да бъде между %1 и %2",
|
||||||
@@ -83,10 +84,19 @@
|
|||||||
"tag-too-long": "Моля, въведете по-кратък етикет. Етикетите трябва да съдържат не повече от %1 символ(а)",
|
"tag-too-long": "Моля, въведете по-кратък етикет. Етикетите трябва да съдържат не повече от %1 символ(а)",
|
||||||
"not-enough-tags": "Недостатъчно етикети. Темите трябва да имат поне %1 етикет(а)",
|
"not-enough-tags": "Недостатъчно етикети. Темите трябва да имат поне %1 етикет(а)",
|
||||||
"too-many-tags": "Твърде много етикети. Темите не могат да имат повече от %1 етикет(а)",
|
"too-many-tags": "Твърде много етикети. Темите не могат да имат повече от %1 етикет(а)",
|
||||||
|
"cant-use-system-tag": "Не можете да използвате този системен етикет.",
|
||||||
|
"cant-remove-system-tag": "Не можете да премахнете този системен етикет.",
|
||||||
"still-uploading": "Моля, изчакайте качването да приключи.",
|
"still-uploading": "Моля, изчакайте качването да приключи.",
|
||||||
"file-too-big": "Максималният разрешен размер на файл е %1 КБ – моля, качете по-малък файл",
|
"file-too-big": "Максималният разрешен размер на файл е %1 КБ – моля, качете по-малък файл",
|
||||||
"guest-upload-disabled": "Качването не е разрешено за гости",
|
"guest-upload-disabled": "Качването не е разрешено за гости",
|
||||||
"cors-error": "Изображението не може да бъде качено поради неправилни настройки на CORS",
|
"cors-error": "Изображението не може да бъде качено поради неправилни настройки на CORS",
|
||||||
|
"upload-ratelimit-reached": "Качили сте твърде много файлове наведнъж. Моля, опитайте отново по-късно.",
|
||||||
|
"scheduling-to-past": "Изберете дата в бъдещето.",
|
||||||
|
"invalid-schedule-date": "Въведете правилна дата и час.",
|
||||||
|
"cant-pin-scheduled": "Насрочените теми не могат да бъдат закачени или разкачени.",
|
||||||
|
"cant-merge-scheduled": "Насрочените теми не могат да бъдат сливани.",
|
||||||
|
"cant-move-posts-to-scheduled": "Публикации не могат да бъдат премествани в насрочена тема.",
|
||||||
|
"cant-move-from-scheduled-to-existing": "Публикации от насрочена тема не могат да бъдат премествани в съществуваща тема.",
|
||||||
"already-bookmarked": "Вече имате отметка към тази публикация",
|
"already-bookmarked": "Вече имате отметка към тази публикация",
|
||||||
"already-unbookmarked": "Вече сте премахнали отметката си от тази публикация",
|
"already-unbookmarked": "Вече сте премахнали отметката си от тази публикация",
|
||||||
"cant-ban-other-admins": "Не можете да блокирате другите администратори!",
|
"cant-ban-other-admins": "Не можете да блокирате другите администратори!",
|
||||||
@@ -133,6 +143,7 @@
|
|||||||
"chat-delete-duration-expired": "Можете да изтривате съобщенията си в разговорите до %1 секунда/и след пускането им",
|
"chat-delete-duration-expired": "Можете да изтривате съобщенията си в разговорите до %1 секунда/и след пускането им",
|
||||||
"chat-deleted-already": "Това съобщение вече е изтрито.",
|
"chat-deleted-already": "Това съобщение вече е изтрито.",
|
||||||
"chat-restored-already": "Това съобщение вече е възстановено.",
|
"chat-restored-already": "Това съобщение вече е възстановено.",
|
||||||
|
"chat-room-does-not-exist": "Стаята за разговори не съществува.",
|
||||||
"already-voting-for-this-post": "Вече сте дали глас за тази публикация.",
|
"already-voting-for-this-post": "Вече сте дали глас за тази публикация.",
|
||||||
"reputation-system-disabled": "Системата за репутация е изключена.",
|
"reputation-system-disabled": "Системата за репутация е изключена.",
|
||||||
"downvoting-disabled": "Отрицателното гласуване е изключено",
|
"downvoting-disabled": "Отрицателното гласуване е изключено",
|
||||||
@@ -164,8 +175,10 @@
|
|||||||
"cant-kick-self": "Не можете да изритате себе си от групата",
|
"cant-kick-self": "Не можете да изритате себе си от групата",
|
||||||
"no-users-selected": "Няма избран(и) потребител(и)",
|
"no-users-selected": "Няма избран(и) потребител(и)",
|
||||||
"invalid-home-page-route": "Грешен път към началната страница",
|
"invalid-home-page-route": "Грешен път към началната страница",
|
||||||
"invalid-session": "Несъответствие в сесията",
|
"invalid-session": "Изтекла сесия",
|
||||||
"invalid-session-text": "Изглежда сесията Ви на вписване вече е изтекла или не съответства на сървъра. Моля, опреснете страницата.",
|
"invalid-session-text": "Изглежда сесията Ви на вписване вече е изтекла. Моля, опреснете страницата.",
|
||||||
|
"session-mismatch": "Несъответствие в сесията",
|
||||||
|
"session-mismatch-text": "Изглежда сесията Ви на вписване вече не съответства на сървъра. Моля, опреснете страницата.",
|
||||||
"no-topics-selected": "Няма избрани теми!",
|
"no-topics-selected": "Няма избрани теми!",
|
||||||
"cant-move-to-same-topic": "Публикацията не може да бъде преместена в същата тема!",
|
"cant-move-to-same-topic": "Публикацията не може да бъде преместена в същата тема!",
|
||||||
"cant-move-topic-to-same-category": "Темата не може да бъде преместена в същата категория!",
|
"cant-move-topic-to-same-category": "Темата не може да бъде преместена в същата категория!",
|
||||||
@@ -176,5 +189,18 @@
|
|||||||
"already-unblocked": "Този потребител вече е отблокиран",
|
"already-unblocked": "Този потребител вече е отблокиран",
|
||||||
"no-connection": "Изглежда има проблем с връзката Ви с Интернет",
|
"no-connection": "Изглежда има проблем с връзката Ви с Интернет",
|
||||||
"socket-reconnect-failed": "В момента сървърът е недостъпен. Натиснете тук, за да опитате отново, или опитайте пак по-късно.",
|
"socket-reconnect-failed": "В момента сървърът е недостъпен. Натиснете тук, за да опитате отново, или опитайте пак по-късно.",
|
||||||
"plugin-not-whitelisted": "Добавката не може да бъде инсталирана – само добавки, одобрени от пакетния мениджър на NodeBB могат да бъдат инсталирани чрез ACP"
|
"plugin-not-whitelisted": "Добавката не може да бъде инсталирана – само добавки, одобрени от пакетния мениджър на NodeBB могат да бъдат инсталирани чрез ACP",
|
||||||
|
"topic-event-unrecognized": "Събитието „%1“ на темата е неизвестно",
|
||||||
|
"cant-set-child-as-parent": "Дъщерна категория не може да се зададе като базова такава",
|
||||||
|
"cant-set-self-as-parent": "Категорията не може да се зададе като базова категория на себе си",
|
||||||
|
"api.master-token-no-uid": "Беше получен главен код без съответстващо поле `_uid` в тялото на заявката",
|
||||||
|
"api.400": "Нещо не беше наред с данните в заявката, които подадохте.",
|
||||||
|
"api.401": "Няма намерена сесия. Моля, впишете се и опитайте отново.",
|
||||||
|
"api.403": "Нямате право да изпълните тази команда",
|
||||||
|
"api.404": "Неправилна команда към ППИ",
|
||||||
|
"api.426": "Заявките към ППИ за писане изискват HTTPS. Изпратете отново заявката си чрез HTTPS",
|
||||||
|
"api.429": "Направили сте твърде много заявки. Моля, опитайте отново по-късно.",
|
||||||
|
"api.500": "При обработката на заявката Ви възникна неочаквана грешка.",
|
||||||
|
"api.501": "Пътят, който се опитвате да извикате, все още не съществува. Моля, опитайте отново утре.",
|
||||||
|
"api.503": "Пътят, който се опитвате да извикате, в момента не е достъпен, поради настройките на сървъра."
|
||||||
}
|
}
|
||||||
@@ -6,6 +6,7 @@
|
|||||||
"assignee": "Назначен",
|
"assignee": "Назначен",
|
||||||
"update": "Обновяване",
|
"update": "Обновяване",
|
||||||
"updated": "Обновено",
|
"updated": "Обновено",
|
||||||
|
"resolved": "Разрешен",
|
||||||
"target-purged": "Съдържанието, за което се отнася този доклад, е било изтрито и вече не е налично.",
|
"target-purged": "Съдържанието, за което се отнася този доклад, е било изтрито и вече не е налично.",
|
||||||
|
|
||||||
"graph-label": "Дневни етикети",
|
"graph-label": "Дневни етикети",
|
||||||
@@ -26,6 +27,7 @@
|
|||||||
"filter-cid-all": "Всички категории",
|
"filter-cid-all": "Всички категории",
|
||||||
"apply-filters": "Прилагане на филтрите",
|
"apply-filters": "Прилагане на филтрите",
|
||||||
"more-filters": "Още филтри",
|
"more-filters": "Още филтри",
|
||||||
|
"fewer-filters": "По-малко филтри",
|
||||||
|
|
||||||
"quick-actions": "Бързи действия",
|
"quick-actions": "Бързи действия",
|
||||||
"flagged-user": "Докладван потребител",
|
"flagged-user": "Докладван потребител",
|
||||||
|
|||||||
@@ -46,7 +46,9 @@
|
|||||||
"alert.success": "Готово",
|
"alert.success": "Готово",
|
||||||
"alert.error": "Грешка",
|
"alert.error": "Грешка",
|
||||||
"alert.banned": "Блокиран",
|
"alert.banned": "Блокиран",
|
||||||
"alert.banned.message": "Вие току-що бяхте блокиран. Сега ще излезете от системата.",
|
"alert.banned.message": "Вие току-що бяхте блокиран. Достъпът Ви до системата е ограничен.",
|
||||||
|
"alert.unbanned": "Деблокиран",
|
||||||
|
"alert.unbanned.message": "Блокирането Ви беше премахнато",
|
||||||
"alert.unfollow": "Вие вече не следвате %1!",
|
"alert.unfollow": "Вие вече не следвате %1!",
|
||||||
"alert.follow": "Вие следвате %1!",
|
"alert.follow": "Вие следвате %1!",
|
||||||
"users": "Потребители",
|
"users": "Потребители",
|
||||||
@@ -93,6 +95,8 @@
|
|||||||
"guest": "Гост",
|
"guest": "Гост",
|
||||||
"guests": "Гости",
|
"guests": "Гости",
|
||||||
"former_user": "Бивш потребител",
|
"former_user": "Бивш потребител",
|
||||||
|
"system-user": "Системен",
|
||||||
|
"unknown-user": "Непознат потребител",
|
||||||
"updated.title": "Форумът е актуализиран",
|
"updated.title": "Форумът е актуализиран",
|
||||||
"updated.message": "Този форум току-що беше актуализиран до най-новата версия. Натиснете тук, за да опресните страницата.",
|
"updated.message": "Този форум току-що беше актуализиран до най-новата версия. Натиснете тук, за да опресните страницата.",
|
||||||
"privacy": "Поверителност",
|
"privacy": "Поверителност",
|
||||||
|
|||||||
@@ -35,8 +35,7 @@
|
|||||||
"details.member_count": "Брой на членовете",
|
"details.member_count": "Брой на членовете",
|
||||||
"details.creation_date": "Дата на създаване",
|
"details.creation_date": "Дата на създаване",
|
||||||
"details.description": "Описание",
|
"details.description": "Описание",
|
||||||
"details.member-post-cids": "Категории, от които да се показват публикации",
|
"details.member-post-cids": "Идентификатори на категории, от които да се показват публикации",
|
||||||
"details.member-post-cids-help": "<strong>Забележка</strong>: Ако не изберете нито една категория, ще се смята, че са включени всички категории. Използвайте <code>CTRL</code> и <code>SHIFT</code>, за да изберете няколко възможности.",
|
|
||||||
"details.badge_preview": "Преглед на емблемата",
|
"details.badge_preview": "Преглед на емблемата",
|
||||||
"details.change_icon": "Промяна на иконката",
|
"details.change_icon": "Промяна на иконката",
|
||||||
"details.change_label_colour": "Промяна на цвета на етикета",
|
"details.change_label_colour": "Промяна на цвета на етикета",
|
||||||
|
|||||||
@@ -8,5 +8,6 @@
|
|||||||
"failed_login_attempt": "Неуспешно вписване",
|
"failed_login_attempt": "Неуспешно вписване",
|
||||||
"login_successful": "Вие влязохте успешно!",
|
"login_successful": "Вие влязохте успешно!",
|
||||||
"dont_have_account": "Нямате регистрация?",
|
"dont_have_account": "Нямате регистрация?",
|
||||||
"logged-out-due-to-inactivity": "Вие излязохте автоматично от администраторския контролен панел, поради бездействие."
|
"logged-out-due-to-inactivity": "Вие излязохте автоматично от администраторския контролен панел, поради бездействие.",
|
||||||
|
"caps-lock-enabled": "Главните букви са включени"
|
||||||
}
|
}
|
||||||
@@ -60,6 +60,11 @@
|
|||||||
"composer.zen_mode": "Режим Дзен",
|
"composer.zen_mode": "Режим Дзен",
|
||||||
"composer.select_category": "Изберете категория",
|
"composer.select_category": "Изберете категория",
|
||||||
"composer.textarea.placeholder": "Въведете съдържанието на публикацията си тук. Можете също да влачите и пускате снимки.",
|
"composer.textarea.placeholder": "Въведете съдържанието на публикацията си тук. Можете също да влачите и пускате снимки.",
|
||||||
|
"composer.schedule-for": "Насрочване на тема за",
|
||||||
|
"composer.schedule-date": "Дата",
|
||||||
|
"composer.schedule-time": "Час",
|
||||||
|
"composer.cancel-scheduling": "Отмяна на насрочването",
|
||||||
|
"composer.set-schedule-date": "Задаване на дата",
|
||||||
"bootbox.ok": "Добре",
|
"bootbox.ok": "Добре",
|
||||||
"bootbox.cancel": "Отказ",
|
"bootbox.cancel": "Отказ",
|
||||||
"bootbox.confirm": "Потвърждаване",
|
"bootbox.confirm": "Потвърждаване",
|
||||||
|
|||||||
@@ -14,6 +14,7 @@
|
|||||||
"topics": "Теми",
|
"topics": "Теми",
|
||||||
"replies": "Отговори",
|
"replies": "Отговори",
|
||||||
"chat": "Разговори",
|
"chat": "Разговори",
|
||||||
|
"group-chat": "Групови разговори",
|
||||||
"follows": "Следвания",
|
"follows": "Следвания",
|
||||||
"upvote": "Положителни гласове",
|
"upvote": "Положителни гласове",
|
||||||
"new-flags": "Нови докладвания",
|
"new-flags": "Нови докладвания",
|
||||||
@@ -47,6 +48,8 @@
|
|||||||
"posts-exported": "Публикациите на <strong>%1</strong> са изнесени, щракнете за сваляне",
|
"posts-exported": "Публикациите на <strong>%1</strong> са изнесени, щракнете за сваляне",
|
||||||
"uploads-exported": "Качванията на <strong>%1</strong> са изнесени, щракнете за сваляне",
|
"uploads-exported": "Качванията на <strong>%1</strong> са изнесени, щракнете за сваляне",
|
||||||
"users-csv-exported": "Потребителите са изнесени във формат „csv“, щракнете за сваляне",
|
"users-csv-exported": "Потребителите са изнесени във формат „csv“, щракнете за сваляне",
|
||||||
|
"post-queue-accepted": "Вашата публикация, която чакаше в опашката, беше приета. Натиснете тук, за да я видите.",
|
||||||
|
"post-queue-rejected": "Вашата публикация, която чакаше в опашката, беше отхвърлена.",
|
||||||
"email-confirmed": "Е-пощата беше потвърдена",
|
"email-confirmed": "Е-пощата беше потвърдена",
|
||||||
"email-confirmed-message": "Благодарим Ви, че потвърдихте е-пощата си. Акаунтът Ви е вече напълно активиран.",
|
"email-confirmed-message": "Благодарим Ви, че потвърдихте е-пощата си. Акаунтът Ви е вече напълно активиран.",
|
||||||
"email-confirm-error-message": "Възникна проблем при потвърждаването на е-пощата Ви. Може кодът да е грешен или давността му да е изтекла.",
|
"email-confirm-error-message": "Възникна проблем при потвърждаването на е-пощата Ви. Може кодът да е грешен или давността му да е изтекла.",
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
{
|
{
|
||||||
"post-queue": "Опашка за публикации",
|
"post-queue": "Опашка за публикации",
|
||||||
"description": "Няма публикации в опашката. <br> За да включите тази функционалност, идете в <a href=\"%1\">Настройки → Публикуване → Опашка за публикации</a> и включете <strong>Опашката за публикации</strong>.",
|
"description": "Няма публикации в опашката. <br> За да включите тази функционалност, идете в <a href=\"%1\">Настройки → Публикуване → Опашка за публикации</a> и включете <strong>Опашката за публикации</strong>.",
|
||||||
@@ -7,5 +8,11 @@
|
|||||||
"content": "Съдържание",
|
"content": "Съдържание",
|
||||||
"posted": "Публикувано",
|
"posted": "Публикувано",
|
||||||
"reply-to": "Отговор на „%1“",
|
"reply-to": "Отговор на „%1“",
|
||||||
"content-editable": "Можете да щракнете върху всеки от текстовете, за да ги редактирате преди публикуване."
|
"content-editable": "Щракнете върху съдържание, за да го редактирате",
|
||||||
|
"category-editable": "Щракнете върху категория, за да я редактирате",
|
||||||
|
"title-editable": "Щракнете върху заглавие, за да го редактирате",
|
||||||
|
"reply": "Отговор",
|
||||||
|
"topic": "Тема",
|
||||||
|
"accept": "Приемане",
|
||||||
|
"reject": "Отказване"
|
||||||
}
|
}
|
||||||
@@ -24,5 +24,8 @@
|
|||||||
"interstitial.errors-found": "Не можем да завършим Вашата регистрация:",
|
"interstitial.errors-found": "Не можем да завършим Вашата регистрация:",
|
||||||
"gdpr_agree_data": "Съгласявам се това личната ми информация да се съхранява и обработва от този уеб сайт.",
|
"gdpr_agree_data": "Съгласявам се това личната ми информация да се съхранява и обработва от този уеб сайт.",
|
||||||
"gdpr_agree_email": "Съгласявам се да получавам е-писма с резюмета и известия от този уеб сайт.",
|
"gdpr_agree_email": "Съгласявам се да получавам е-писма с резюмета и известия от този уеб сайт.",
|
||||||
"gdpr_consent_denied": "Трябва да се съгласите с това уеб сайтът да събира/обработва информацията Ви, и да Ви изпраща е-писма."
|
"gdpr_consent_denied": "Трябва да се съгласите с това уеб сайтът да събира/обработва информацията Ви, и да Ви изпраща е-писма.",
|
||||||
|
"invite.error-admin-only": "Директното регистриране е изключено. Моля, свържете се с администратор за повече подробности.",
|
||||||
|
"invite.error-invite-only": "Директното регистриране е изключено. Трябва да получите покана от вече регистриран потребител, за да имате достъп до този форум.",
|
||||||
|
"invite.error-invalid-data": "Получените данни за регистрация не съответстват на нашите записи. Моля, свържете се с администратор за повече подробности."
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"success": "Готово",
|
"success": "Готово",
|
||||||
"topic-post": "Вие публикувахте успешно.",
|
"topic-post": "Вие публикувахте успешно.",
|
||||||
"post-queued": "Публикацията Ви е добавена в опашката за одобрение.",
|
"post-queued": "Публикацията Ви е поставена в опашка за одобрение. Ще получите известие, когато тя бъде одобрена или отхвърлена.",
|
||||||
"authentication-successful": "Успешно удостоверяване",
|
"authentication-successful": "Успешно удостоверяване",
|
||||||
"settings-saved": "Настройките са запазени!"
|
"settings-saved": "Настройките са запазени!"
|
||||||
}
|
}
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"topic": "Тема",
|
"topic": "Тема",
|
||||||
|
"title": "Заглавие",
|
||||||
"no_topics_found": "Няма намерени теми!",
|
"no_topics_found": "Няма намерени теми!",
|
||||||
"no_posts_found": "Няма намерени публикации!",
|
"no_posts_found": "Няма намерени публикации!",
|
||||||
"post_is_deleted": "Публикацията е изтрита!",
|
"post_is_deleted": "Публикацията е изтрита!",
|
||||||
@@ -30,16 +31,25 @@
|
|||||||
"locked": "Заключена",
|
"locked": "Заключена",
|
||||||
"pinned": "Закачена",
|
"pinned": "Закачена",
|
||||||
"pinned-with-expiry": "Закачена до %1",
|
"pinned-with-expiry": "Закачена до %1",
|
||||||
|
"scheduled": "Насрочена",
|
||||||
"moved": "Преместена",
|
"moved": "Преместена",
|
||||||
"moved-from": "Преместена от %1",
|
"moved-from": "Преместена от %1",
|
||||||
"copy-ip": "Копиране на IP адреса",
|
"copy-ip": "Копиране на IP адреса",
|
||||||
"ban-ip": "Блокиране на IP адреса",
|
"ban-ip": "Блокиране на IP адреса",
|
||||||
"view-history": "История на редакциите",
|
"view-history": "История на редакциите",
|
||||||
|
"locked-by": "Заключена от",
|
||||||
|
"unlocked-by": "Отключена от",
|
||||||
|
"pinned-by": "Закачена от",
|
||||||
|
"unpinned-by": "Откачена от",
|
||||||
|
"deleted-by": "Изтрита от",
|
||||||
|
"restored-by": "Възстановена от",
|
||||||
|
"queued-by": "Публикацията е добавена в опашката за одобрение →",
|
||||||
"bookmark_instructions": "Щракнете тук, за да се върнете към последно прочетената публикация в тази тема.",
|
"bookmark_instructions": "Щракнете тук, за да се върнете към последно прочетената публикация в тази тема.",
|
||||||
"flag-post": "Докладване на тази публикация",
|
"flag-post": "Докладване на тази публикация",
|
||||||
"flag-user": "Докладване на този потребител",
|
"flag-user": "Докладване на този потребител",
|
||||||
"already-flagged": "Вече е докладвано",
|
"already-flagged": "Вече е докладвано",
|
||||||
"view-flag-report": "Преглед на доклада",
|
"view-flag-report": "Преглед на доклада",
|
||||||
|
"resolve-flag": "Разрешаване на доклада",
|
||||||
"merged_message": "Тази тема беше слята в <a href=\"%1\">%2</a>",
|
"merged_message": "Тази тема беше слята в <a href=\"%1\">%2</a>",
|
||||||
"deleted_message": "Темата е изтрита. Само потребители с права за управление на темите могат да я видят.",
|
"deleted_message": "Темата е изтрита. Само потребители с права за управление на темите могат да я видят.",
|
||||||
"following_topic.message": "Вече ще получавате известия когато някой публикува коментар в тази тема.",
|
"following_topic.message": "Вече ще получавате известия когато някой публикува коментар в тази тема.",
|
||||||
@@ -104,6 +114,7 @@
|
|||||||
"move_post": "Преместване на публикацията",
|
"move_post": "Преместване на публикацията",
|
||||||
"post_moved": "Публикацията беше преместена!",
|
"post_moved": "Публикацията беше преместена!",
|
||||||
"fork_topic": "Разделяне на темата",
|
"fork_topic": "Разделяне на темата",
|
||||||
|
"enter-new-topic-title": "Въведете заглавието на новата тема",
|
||||||
"fork_topic_instruction": "Натиснете публикациите, които искате да отделите",
|
"fork_topic_instruction": "Натиснете публикациите, които искате да отделите",
|
||||||
"fork_no_pids": "Няма избрани публикации!",
|
"fork_no_pids": "Няма избрани публикации!",
|
||||||
"no-posts-selected": "Няма избрани публикации!",
|
"no-posts-selected": "Няма избрани публикации!",
|
||||||
@@ -117,14 +128,17 @@
|
|||||||
"merge-options": "Настройки за сливането",
|
"merge-options": "Настройки за сливането",
|
||||||
"merge-select-main-topic": "Изберете основната тема",
|
"merge-select-main-topic": "Изберете основната тема",
|
||||||
"merge-new-title-for-topic": "Ново заглавие за темата",
|
"merge-new-title-for-topic": "Ново заглавие за темата",
|
||||||
"move_posts_instruction": "Натиснете публикациите, които искате да преместите, а след това идете в желаната тема и натиснете „Преместване“.",
|
"topic-id": "Ид. на темата",
|
||||||
|
"move_posts_instruction": "Щракнете върху публикациите, които искате да преместите, а след това въведете ид. на тема или отидете в целевата тема",
|
||||||
"change_owner_instruction": "Натиснете публикациите, които искате да прехвърлите на друг потребител",
|
"change_owner_instruction": "Натиснете публикациите, които искате да прехвърлите на друг потребител",
|
||||||
"composer.title_placeholder": "Въведете заглавието на темата си тук...",
|
"composer.title_placeholder": "Въведете заглавието на темата си тук...",
|
||||||
"composer.handle_placeholder": "Въведете името тук",
|
"composer.handle_placeholder": "Въведете името тук",
|
||||||
"composer.discard": "Отхвърляне",
|
"composer.discard": "Отхвърляне",
|
||||||
"composer.submit": "Публикуване",
|
"composer.submit": "Публикуване",
|
||||||
|
"composer.schedule": "Насрочване",
|
||||||
"composer.replying_to": "Отговор на %1",
|
"composer.replying_to": "Отговор на %1",
|
||||||
"composer.new_topic": "Нова тема",
|
"composer.new_topic": "Нова тема",
|
||||||
|
"composer.editing": "Редактиране",
|
||||||
"composer.uploading": "качване...",
|
"composer.uploading": "качване...",
|
||||||
"composer.thumb_url_label": "Поставете адреса на иконка за темата",
|
"composer.thumb_url_label": "Поставете адреса на иконка за темата",
|
||||||
"composer.thumb_title": "Добавете иконка към тази тема",
|
"composer.thumb_title": "Добавете иконка към тази тема",
|
||||||
@@ -152,8 +166,10 @@
|
|||||||
"diffs.current-revision": "текуща версия",
|
"diffs.current-revision": "текуща версия",
|
||||||
"diffs.original-revision": "оригинална версия",
|
"diffs.original-revision": "оригинална версия",
|
||||||
"diffs.restore": "Възстановяване на тази версия",
|
"diffs.restore": "Възстановяване на тази версия",
|
||||||
"diffs.restore-description": "Към историята на редакциите на тази публикация ще бъде добавена нова версия.",
|
"diffs.restore-description": "След възстановяването към историята на редакциите на тази публикация ще бъде добавена нова версия.",
|
||||||
"diffs.post-restored": "Публикацията е възстановена успешно до по-ранна версия",
|
"diffs.post-restored": "Публикацията е възстановена успешно до по-ранна версия",
|
||||||
|
"diffs.delete": "Изтриване на тази версия ",
|
||||||
|
"diffs.deleted": "Версията е изтрита",
|
||||||
"timeago_later": "%1 по-късно",
|
"timeago_later": "%1 по-късно",
|
||||||
"timeago_earlier": "%1 по-рано",
|
"timeago_earlier": "%1 по-рано",
|
||||||
"first-post": "Първа публикация",
|
"first-post": "Първа публикация",
|
||||||
|
|||||||
@@ -84,6 +84,7 @@
|
|||||||
"remove_cover_picture_confirm": "Наистина ли искате да премахнете снимката на корицата?",
|
"remove_cover_picture_confirm": "Наистина ли искате да премахнете снимката на корицата?",
|
||||||
"crop_picture": "Орязване на снимката",
|
"crop_picture": "Орязване на снимката",
|
||||||
"upload_cropped_picture": "Орязване и качване",
|
"upload_cropped_picture": "Орязване и качване",
|
||||||
|
"avatar-background-colour": "Фонов цвят за изображението",
|
||||||
"settings": "Настройки",
|
"settings": "Настройки",
|
||||||
"show_email": "Да се показва е-пощата ми",
|
"show_email": "Да се показва е-пощата ми",
|
||||||
"show_fullname": "Да се показва цялото ми име",
|
"show_fullname": "Да се показва цялото ми име",
|
||||||
@@ -135,7 +136,7 @@
|
|||||||
"homepage": "Начална страница",
|
"homepage": "Начална страница",
|
||||||
"homepage_description": "Изберете страница, която да използвате като начална за форума, или „Нищо“, за да използвате тази по подразбиране.",
|
"homepage_description": "Изберете страница, която да използвате като начална за форума, или „Нищо“, за да използвате тази по подразбиране.",
|
||||||
"custom_route": "Път до персонализираната начална страница",
|
"custom_route": "Път до персонализираната начална страница",
|
||||||
"custom_route_help": "Въведете името на пътя тук, без наклонена черта пред него (пример: „recent“ или „popular“)",
|
"custom_route_help": "Въведете името на пътя тук, без наклонена черта пред него (пример: „recent“ или \"category/2/general-discussion\")",
|
||||||
"sso.title": "Услуги за еднократно вписване",
|
"sso.title": "Услуги за еднократно вписване",
|
||||||
"sso.associated": "Свързан с",
|
"sso.associated": "Свързан с",
|
||||||
"sso.not-associated": "Натиснете тук, за да свържете с",
|
"sso.not-associated": "Натиснете тук, за да свържете с",
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
"forum-traffic": "Forum Traffic",
|
"forum-traffic": "Forum Traffic",
|
||||||
"page-views": "Page Views",
|
"page-views": "Page Views",
|
||||||
"unique-visitors": "Unique Visitors",
|
"unique-visitors": "Unique Visitors",
|
||||||
|
"logins": "Logins",
|
||||||
"new-users": "New Users",
|
"new-users": "New Users",
|
||||||
"posts": "Posts",
|
"posts": "Posts",
|
||||||
"topics": "Topics",
|
"topics": "Topics",
|
||||||
@@ -29,6 +30,7 @@
|
|||||||
"upgrade-available": "<p>A new version (v%1) has been released. Consider <a href=\"https://docs.nodebb.org/configuring/upgrade/\" target=\"_blank\">upgrading your NodeBB</a>.</p>",
|
"upgrade-available": "<p>A new version (v%1) has been released. Consider <a href=\"https://docs.nodebb.org/configuring/upgrade/\" target=\"_blank\">upgrading your NodeBB</a>.</p>",
|
||||||
"prerelease-upgrade-available": "<p>This is an outdated pre-release version of NodeBB. A new version (v%1) has been released. Consider <a href=\"https://docs.nodebb.org/configuring/upgrade/\" target=\"_blank\">upgrading your NodeBB</a>.</p>",
|
"prerelease-upgrade-available": "<p>This is an outdated pre-release version of NodeBB. A new version (v%1) has been released. Consider <a href=\"https://docs.nodebb.org/configuring/upgrade/\" target=\"_blank\">upgrading your NodeBB</a>.</p>",
|
||||||
"prerelease-warning": "<p>This is a <strong>pre-release</strong> version of NodeBB. Unintended bugs may occur. <i class=\"fa fa-exclamation-triangle\"></i></p>",
|
"prerelease-warning": "<p>This is a <strong>pre-release</strong> version of NodeBB. Unintended bugs may occur. <i class=\"fa fa-exclamation-triangle\"></i></p>",
|
||||||
|
"fallback-emailer-not-found": "Fallback emailer not found!",
|
||||||
"running-in-development": "<span>Forum is running in development mode. The forum may be open to potential vulnerabilities; please contact your system administrator.</span>",
|
"running-in-development": "<span>Forum is running in development mode. The forum may be open to potential vulnerabilities; please contact your system administrator.</span>",
|
||||||
"latest-lookup-failed": "<p>Failed to look up latest available version of NodeBB</p>",
|
"latest-lookup-failed": "<p>Failed to look up latest available version of NodeBB</p>",
|
||||||
|
|
||||||
@@ -75,5 +77,12 @@
|
|||||||
"graphs.registered-users": "Registered Users",
|
"graphs.registered-users": "Registered Users",
|
||||||
"graphs.anonymous-users": "Anonymous Users",
|
"graphs.anonymous-users": "Anonymous Users",
|
||||||
"last-restarted-by": "Last restarted by",
|
"last-restarted-by": "Last restarted by",
|
||||||
"no-users-browsing": "No users browsing"
|
"no-users-browsing": "No users browsing",
|
||||||
|
|
||||||
|
"back-to-dashboard": "Back to Dashboard",
|
||||||
|
"details.no-users": "No users have joined within the selected timeframe",
|
||||||
|
"details.no-topics": "No topics have been posted within the selected timeframe",
|
||||||
|
"details.no-logins": "No logins have been recorded within the selected timeframe",
|
||||||
|
"details.logins-static": "NodeBB only saves session data for %1 days, and so this table below will only show the most recently active sessions",
|
||||||
|
"details.logins-login-time": "Login Time"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,7 +39,7 @@
|
|||||||
"alert.upgraded": "Plugin Upgraded",
|
"alert.upgraded": "Plugin Upgraded",
|
||||||
"alert.installed": "Plugin Installed",
|
"alert.installed": "Plugin Installed",
|
||||||
"alert.uninstalled": "Plugin Uninstalled",
|
"alert.uninstalled": "Plugin Uninstalled",
|
||||||
"alert.activate-success": "Please restart your NodeBB to fully activate this plugin",
|
"alert.activate-success": "Please rebuild and restart your NodeBB to fully activate this plugin",
|
||||||
"alert.deactivate-success": "Plugin successfully deactivated",
|
"alert.deactivate-success": "Plugin successfully deactivated",
|
||||||
"alert.upgrade-success": "Please rebuild and restart your NodeBB to fully upgrade this plugin.",
|
"alert.upgrade-success": "Please rebuild and restart your NodeBB to fully upgrade this plugin.",
|
||||||
"alert.install-success": "Plugin successfully installed, please activate the plugin.",
|
"alert.install-success": "Plugin successfully installed, please activate the plugin.",
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
"custom-class": "Custom Class",
|
"custom-class": "Custom Class",
|
||||||
"num-recent-replies": "# of Recent Replies",
|
"num-recent-replies": "# of Recent Replies",
|
||||||
"ext-link": "External Link",
|
"ext-link": "External Link",
|
||||||
|
"subcategories-per-page": "Subcategories per page",
|
||||||
"is-section": "Treat this category as a section",
|
"is-section": "Treat this category as a section",
|
||||||
"post-queue": "Post queue",
|
"post-queue": "Post queue",
|
||||||
"tag-whitelist": "Tag Whitelist",
|
"tag-whitelist": "Tag Whitelist",
|
||||||
@@ -18,6 +19,7 @@
|
|||||||
"category-image": "Category Image",
|
"category-image": "Category Image",
|
||||||
"parent-category": "Parent Category",
|
"parent-category": "Parent Category",
|
||||||
"optional-parent-category": "(Optional) Parent Category",
|
"optional-parent-category": "(Optional) Parent Category",
|
||||||
|
"top-level": "Top Level",
|
||||||
"parent-category-none": "(None)",
|
"parent-category-none": "(None)",
|
||||||
"copy-parent": "Copy Parent",
|
"copy-parent": "Copy Parent",
|
||||||
"copy-settings": "Copy Settings From",
|
"copy-settings": "Copy Settings From",
|
||||||
@@ -30,6 +32,8 @@
|
|||||||
"edit": "Edit",
|
"edit": "Edit",
|
||||||
"analytics": "Analytics",
|
"analytics": "Analytics",
|
||||||
"view-category": "View category",
|
"view-category": "View category",
|
||||||
|
"set-order": "Set order",
|
||||||
|
"set-order-help": "Setting the order of the category will move this category to that order and update the order of other categories as necessary. Minimum order is 1 which puts the category at the top.",
|
||||||
|
|
||||||
"select-category": "Select Category",
|
"select-category": "Select Category",
|
||||||
"set-parent-category": "Set Parent Category",
|
"set-parent-category": "Set Parent Category",
|
||||||
@@ -46,6 +50,8 @@
|
|||||||
"privileges.no-users": "No user-specific privileges in this category.",
|
"privileges.no-users": "No user-specific privileges in this category.",
|
||||||
"privileges.section-group": "Group",
|
"privileges.section-group": "Group",
|
||||||
"privileges.group-private": "This group is private",
|
"privileges.group-private": "This group is private",
|
||||||
|
"privileges.inheritance-exception": "This group does not inherit privileges from registered-users group",
|
||||||
|
"privileges.banned-user-inheritance": "Banned users inherit privileges from banned-users group",
|
||||||
"privileges.search-group": "Add Group",
|
"privileges.search-group": "Add Group",
|
||||||
"privileges.copy-to-children": "Copy to Children",
|
"privileges.copy-to-children": "Copy to Children",
|
||||||
"privileges.copy-from-category": "Copy from Category",
|
"privileges.copy-from-category": "Copy from Category",
|
||||||
|
|||||||
@@ -25,6 +25,7 @@
|
|||||||
"access-topics": "Access Topics",
|
"access-topics": "Access Topics",
|
||||||
"create-topics": "Create Topics",
|
"create-topics": "Create Topics",
|
||||||
"reply-to-topics": "Reply to Topics",
|
"reply-to-topics": "Reply to Topics",
|
||||||
|
"schedule-topics": "Schedule Topics",
|
||||||
"tag-topics": "Tag Topics",
|
"tag-topics": "Tag Topics",
|
||||||
"edit-posts": "Edit Posts",
|
"edit-posts": "Edit Posts",
|
||||||
"view-edit-history": "View Edit History",
|
"view-edit-history": "View Edit History",
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
"none": "Your forum does not have any topics with tags yet.",
|
"none": "Your forum does not have any topics with tags yet.",
|
||||||
"bg-color": "Background Colour",
|
"bg-color": "Background Colour",
|
||||||
"text-color": "Text Colour",
|
"text-color": "Text Colour",
|
||||||
"create-modify": "Create & Modify Tags",
|
|
||||||
"description": "Select tags by clicking or dragging, use <code>CTRL</code> to select multiple tags.",
|
"description": "Select tags by clicking or dragging, use <code>CTRL</code> to select multiple tags.",
|
||||||
"create": "Create Tag",
|
"create": "Create Tag",
|
||||||
"modify": "Modify Tags",
|
"modify": "Modify Tags",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"users": "Users",
|
"users": "Users",
|
||||||
"edit": "Edit",
|
"edit": "Actions",
|
||||||
"make-admin": "Make Admin",
|
"make-admin": "Make Admin",
|
||||||
"remove-admin": "Remove Admin",
|
"remove-admin": "Remove Admin",
|
||||||
"validate-email": "Validate Email",
|
"validate-email": "Validate Email",
|
||||||
@@ -47,6 +47,7 @@
|
|||||||
"users.uid": "uid",
|
"users.uid": "uid",
|
||||||
"users.username": "username",
|
"users.username": "username",
|
||||||
"users.email": "email",
|
"users.email": "email",
|
||||||
|
"users.ip": "IP",
|
||||||
"users.postcount": "postcount",
|
"users.postcount": "postcount",
|
||||||
"users.reputation": "reputation",
|
"users.reputation": "reputation",
|
||||||
"users.flags": "flags",
|
"users.flags": "flags",
|
||||||
|
|||||||
@@ -1,5 +1,9 @@
|
|||||||
{
|
{
|
||||||
"dashboard": "Dashboard",
|
"section-dashboard": "Dashboards",
|
||||||
|
"dashboard/overview": "Overview",
|
||||||
|
"dashboard/logins": "Logins",
|
||||||
|
"dashboard/users": "Users",
|
||||||
|
"dashboard/topics": "Topics",
|
||||||
"section-general": "General",
|
"section-general": "General",
|
||||||
|
|
||||||
"section-manage": "Manage",
|
"section-manage": "Manage",
|
||||||
|
|||||||
@@ -40,5 +40,8 @@
|
|||||||
"site-colors": "Site Color Metadata",
|
"site-colors": "Site Color Metadata",
|
||||||
"theme-color": "Theme Color",
|
"theme-color": "Theme Color",
|
||||||
"background-color": "Background Color",
|
"background-color": "Background Color",
|
||||||
"background-color-help": "Color used for splash screen background when website is installed as a PWA"
|
"background-color-help": "Color used for splash screen background when website is installed as a PWA",
|
||||||
|
"undo-timeout": "Undo Timeout",
|
||||||
|
"undo-timeout-help": "Some operations such as moving topics will allow for the moderator to undo their action within a certain timeframe. Set to 0 to disable undo completely.",
|
||||||
|
"topic-tools": "Topic Tools"
|
||||||
}
|
}
|
||||||
@@ -1,10 +1,12 @@
|
|||||||
{
|
{
|
||||||
"pagination": "Pagination Settings",
|
"pagination": "Pagination Settings",
|
||||||
"enable": "Paginate topics and posts instead of using infinite scroll.",
|
"enable": "Paginate topics and posts instead of using infinite scroll.",
|
||||||
|
"posts": "Post Pagination",
|
||||||
"topics": "Topic Pagination",
|
"topics": "Topic Pagination",
|
||||||
"posts-per-page": "Posts per Page",
|
"posts-per-page": "Posts per Page",
|
||||||
"max-posts-per-page": "Maximum posts per page",
|
"max-posts-per-page": "Maximum posts per page",
|
||||||
"categories": "Category Pagination",
|
"categories": "Category Pagination",
|
||||||
"topics-per-page": "Topics per Page",
|
"topics-per-page": "Topics per Page",
|
||||||
"max-topics-per-page": "Maximum topics per page"
|
"max-topics-per-page": "Maximum topics per page",
|
||||||
|
"categories-per-page": "Categories per page"
|
||||||
}
|
}
|
||||||
@@ -16,5 +16,7 @@
|
|||||||
|
|
||||||
"flags": "Flag Settings",
|
"flags": "Flag Settings",
|
||||||
"flags.limit-per-target": "Maximum number of times something can be flagged",
|
"flags.limit-per-target": "Maximum number of times something can be flagged",
|
||||||
"flags.limit-per-target-placeholder": "Default: 0"
|
"flags.limit-per-target-placeholder": "Default: 0",
|
||||||
|
"flags.limit-per-target-help": "When a post or user is flagged multiple times, each additional flag is considered a "report" and added to the original flag. Set this option to a number other than zero to limit the number of reports an item can receive.",
|
||||||
|
"flags.auto-resolve-on-ban": "Automatically resolve all of a user's tickets when they are banned"
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,8 @@
|
|||||||
{
|
{
|
||||||
"tag": "Tag Settings",
|
"tag": "Tag Settings",
|
||||||
"link-to-manage": "Manage Tags",
|
"link-to-manage": "Manage Tags",
|
||||||
|
"system-tags": "System Tags",
|
||||||
|
"system-tags-help": "Only privileged users will be able to use these tags.",
|
||||||
"min-per-topic": "Minimum Tags per Topic",
|
"min-per-topic": "Minimum Tags per Topic",
|
||||||
"max-per-topic": "Maximum Tags per Topic",
|
"max-per-topic": "Maximum Tags per Topic",
|
||||||
"min-length": "Minimum Tag Length",
|
"min-length": "Minimum Tag Length",
|
||||||
|
|||||||
@@ -21,6 +21,9 @@
|
|||||||
"topic-thumb-size": "Topic Thumb Size",
|
"topic-thumb-size": "Topic Thumb Size",
|
||||||
"allowed-file-extensions": "Allowed File Extensions",
|
"allowed-file-extensions": "Allowed File Extensions",
|
||||||
"allowed-file-extensions-help": "Enter comma-separated list of file extensions here (e.g. <code>pdf,xls,doc</code>). An empty list means all extensions are allowed.",
|
"allowed-file-extensions-help": "Enter comma-separated list of file extensions here (e.g. <code>pdf,xls,doc</code>). An empty list means all extensions are allowed.",
|
||||||
|
"upload-limit-threshold": "Rate limit user uploads to:",
|
||||||
|
"upload-limit-threshold-per-minute": "Per %1 Minute",
|
||||||
|
"upload-limit-threshold-per-minutes": "Per %1 Minutes",
|
||||||
"profile-avatars": "Profile Avatars",
|
"profile-avatars": "Profile Avatars",
|
||||||
"allow-profile-image-uploads": "Allow users to upload profile images",
|
"allow-profile-image-uploads": "Allow users to upload profile images",
|
||||||
"convert-profile-image-png": "Convert profile image uploads to PNG",
|
"convert-profile-image-png": "Convert profile image uploads to PNG",
|
||||||
|
|||||||
@@ -9,14 +9,15 @@
|
|||||||
"no_new_posts": "নতুন কোন পোস্ট নাই",
|
"no_new_posts": "নতুন কোন পোস্ট নাই",
|
||||||
"watch": "নজর রাখুন",
|
"watch": "নজর রাখুন",
|
||||||
"ignore": "উপেক্ষা করুন",
|
"ignore": "উপেক্ষা করুন",
|
||||||
"watching": "Watching",
|
"watching": "দৃশ্যমান",
|
||||||
"not-watching": "Not Watching",
|
"not-watching": "দেখা হচ্ছে না",
|
||||||
"ignoring": "Ignoring",
|
"ignoring": "উপেক্ষারত",
|
||||||
"watching.description": "Show topics in unread and recent",
|
"watching.description": "অপঠিত এবং সাম্প্রতিক বিষয়গুলো দেখাও",
|
||||||
"not-watching.description": "Do not show topics in unread, show in recent",
|
"not-watching.description": "Do not show topics in unread, show in recent",
|
||||||
"ignoring.description": "Do not show topics in unread and recent",
|
"ignoring.description": "Do not show topics in unread and recent",
|
||||||
"watching.message": "You are now watching updates from this category and all subcategories",
|
"watching.message": "You are now watching updates from this category and all subcategories",
|
||||||
"notwatching.message": "You are not watching updates from this category and all subcategories",
|
"notwatching.message": "You are not watching updates from this category and all subcategories",
|
||||||
"ignoring.message": "You are now ignoring updates from this category and all subcategories",
|
"ignoring.message": "You are now ignoring updates from this category and all subcategories",
|
||||||
"watched-categories": "প্রেক্ষিত বিভাগসমূহ"
|
"watched-categories": "প্রেক্ষিত বিভাগসমূহ",
|
||||||
|
"x-more-categories": "%1 more categories"
|
||||||
}
|
}
|
||||||
@@ -22,6 +22,7 @@
|
|||||||
"invalid-username-or-password": "অনুগ্রহ পূর্বক ইউজারনেম এবং পাসওয়ার্ড উভয়ই প্রদান করুন",
|
"invalid-username-or-password": "অনুগ্রহ পূর্বক ইউজারনেম এবং পাসওয়ার্ড উভয়ই প্রদান করুন",
|
||||||
"invalid-search-term": "অগ্রহনযোগ্য সার্চ টার্ম",
|
"invalid-search-term": "অগ্রহনযোগ্য সার্চ টার্ম",
|
||||||
"invalid-url": "Invalid URL",
|
"invalid-url": "Invalid URL",
|
||||||
|
"invalid-event": "Invalid event: %1",
|
||||||
"local-login-disabled": "Local login system has been disabled for non-privileged accounts.",
|
"local-login-disabled": "Local login system has been disabled for non-privileged accounts.",
|
||||||
"csrf-invalid": "We were unable to log you in, likely due to an expired session. Please try again",
|
"csrf-invalid": "We were unable to log you in, likely due to an expired session. Please try again",
|
||||||
"invalid-pagination-value": "Invalid pagination value, must be at least %1 and at most %2",
|
"invalid-pagination-value": "Invalid pagination value, must be at least %1 and at most %2",
|
||||||
@@ -83,10 +84,19 @@
|
|||||||
"tag-too-long": "Please enter a shorter tag. Tags can't be longer than %1 character(s)",
|
"tag-too-long": "Please enter a shorter tag. Tags can't be longer than %1 character(s)",
|
||||||
"not-enough-tags": "Not enough tags. Topics must have at least %1 tag(s)",
|
"not-enough-tags": "Not enough tags. Topics must have at least %1 tag(s)",
|
||||||
"too-many-tags": "Too many tags. Topics can't have more than %1 tag(s)",
|
"too-many-tags": "Too many tags. Topics can't have more than %1 tag(s)",
|
||||||
|
"cant-use-system-tag": "You can not use this system tag.",
|
||||||
|
"cant-remove-system-tag": "You can not remove this system tag.",
|
||||||
"still-uploading": "আপলোড সম্পূর্ণ জন্য অনুগ্রহ করে অপেক্ষা করুন",
|
"still-uploading": "আপলোড সম্পূর্ণ জন্য অনুগ্রহ করে অপেক্ষা করুন",
|
||||||
"file-too-big": "Maximum allowed file size is %1 kB - please upload a smaller file",
|
"file-too-big": "Maximum allowed file size is %1 kB - please upload a smaller file",
|
||||||
"guest-upload-disabled": "Guest uploading has been disabled",
|
"guest-upload-disabled": "Guest uploading has been disabled",
|
||||||
"cors-error": "Unable to upload image due to misconfigured CORS",
|
"cors-error": "Unable to upload image due to misconfigured CORS",
|
||||||
|
"upload-ratelimit-reached": "You have uploaded too many files at one time. Please try again later.",
|
||||||
|
"scheduling-to-past": "Please select a date in the future.",
|
||||||
|
"invalid-schedule-date": "Please enter a valid date and time.",
|
||||||
|
"cant-pin-scheduled": "Scheduled topics cannot be (un)pinned.",
|
||||||
|
"cant-merge-scheduled": "Scheduled topics cannot be merged.",
|
||||||
|
"cant-move-posts-to-scheduled": "Can't move posts to a scheduled topic.",
|
||||||
|
"cant-move-from-scheduled-to-existing": "Can't move posts from a scheduled topic to an existing topic.",
|
||||||
"already-bookmarked": "You have already bookmarked this post",
|
"already-bookmarked": "You have already bookmarked this post",
|
||||||
"already-unbookmarked": "You have already unbookmarked this post",
|
"already-unbookmarked": "You have already unbookmarked this post",
|
||||||
"cant-ban-other-admins": "আপনি অন্য এ্যাডমিনদের নিষিদ্ধ করতে পারেন না!",
|
"cant-ban-other-admins": "আপনি অন্য এ্যাডমিনদের নিষিদ্ধ করতে পারেন না!",
|
||||||
@@ -133,6 +143,7 @@
|
|||||||
"chat-delete-duration-expired": "You are only allowed to delete chat messages for %1 second(s) after posting",
|
"chat-delete-duration-expired": "You are only allowed to delete chat messages for %1 second(s) after posting",
|
||||||
"chat-deleted-already": "This chat message has already been deleted.",
|
"chat-deleted-already": "This chat message has already been deleted.",
|
||||||
"chat-restored-already": "This chat message has already been restored.",
|
"chat-restored-already": "This chat message has already been restored.",
|
||||||
|
"chat-room-does-not-exist": "Chat room does not exist.",
|
||||||
"already-voting-for-this-post": "You have already voted for this post.",
|
"already-voting-for-this-post": "You have already voted for this post.",
|
||||||
"reputation-system-disabled": "সম্মাননা ব্যাবস্থা নিস্ক্রীয় রাখা হয়েছে",
|
"reputation-system-disabled": "সম্মাননা ব্যাবস্থা নিস্ক্রীয় রাখা হয়েছে",
|
||||||
"downvoting-disabled": "ঋণাত্মক ভোট নিস্ক্রীয় রাখা হয়েছে।",
|
"downvoting-disabled": "ঋণাত্মক ভোট নিস্ক্রীয় রাখা হয়েছে।",
|
||||||
@@ -164,8 +175,10 @@
|
|||||||
"cant-kick-self": "You can't kick yourself from the group",
|
"cant-kick-self": "You can't kick yourself from the group",
|
||||||
"no-users-selected": "No user(s) selected",
|
"no-users-selected": "No user(s) selected",
|
||||||
"invalid-home-page-route": "Invalid home page route",
|
"invalid-home-page-route": "Invalid home page route",
|
||||||
"invalid-session": "Session Mismatch",
|
"invalid-session": "Invalid Session",
|
||||||
"invalid-session-text": "It looks like your login session is no longer active, or no longer matches with the server. Please refresh this page.",
|
"invalid-session-text": "It looks like your login session is no longer active. Please refresh this page.",
|
||||||
|
"session-mismatch": "Session Mismatch",
|
||||||
|
"session-mismatch-text": "It looks like your login session no longer matches with the server. Please refresh this page.",
|
||||||
"no-topics-selected": "No topics selected!",
|
"no-topics-selected": "No topics selected!",
|
||||||
"cant-move-to-same-topic": "Can't move post to same topic!",
|
"cant-move-to-same-topic": "Can't move post to same topic!",
|
||||||
"cant-move-topic-to-same-category": "Can't move topic to the same category!",
|
"cant-move-topic-to-same-category": "Can't move topic to the same category!",
|
||||||
@@ -176,5 +189,18 @@
|
|||||||
"already-unblocked": "This user is already unblocked",
|
"already-unblocked": "This user is already unblocked",
|
||||||
"no-connection": "There seems to be a problem with your internet connection",
|
"no-connection": "There seems to be a problem with your internet connection",
|
||||||
"socket-reconnect-failed": "Unable to reach the server at this time. Click here to try again, or try again later",
|
"socket-reconnect-failed": "Unable to reach the server at this time. Click here to try again, or try again later",
|
||||||
"plugin-not-whitelisted": "Unable to install plugin – only plugins whitelisted by the NodeBB Package Manager can be installed via the ACP"
|
"plugin-not-whitelisted": "Unable to install plugin – only plugins whitelisted by the NodeBB Package Manager can be installed via the ACP",
|
||||||
|
"topic-event-unrecognized": "Topic event '%1' unrecognized",
|
||||||
|
"cant-set-child-as-parent": "Can't set child as parent category",
|
||||||
|
"cant-set-self-as-parent": "Can't set self as parent category",
|
||||||
|
"api.master-token-no-uid": "A master token was received without a corresponding `_uid` in the request body",
|
||||||
|
"api.400": "Something was wrong with the request payload you passed in.",
|
||||||
|
"api.401": "A valid login session was not found. Please log in and try again.",
|
||||||
|
"api.403": "You are not authorised to make this call",
|
||||||
|
"api.404": "Invalid API call",
|
||||||
|
"api.426": "HTTPS is required for requests to the write api, please re-send your request via HTTPS",
|
||||||
|
"api.429": "You have made too many requests, please try again later",
|
||||||
|
"api.500": "An unexpected error was encountered while attempting to service your request.",
|
||||||
|
"api.501": "The route you are trying to call is not implemented yet, please try again tomorrow",
|
||||||
|
"api.503": "The route you are trying to call is not currently available due to a server configuration"
|
||||||
}
|
}
|
||||||
@@ -6,6 +6,7 @@
|
|||||||
"assignee": "Assignee",
|
"assignee": "Assignee",
|
||||||
"update": "Update",
|
"update": "Update",
|
||||||
"updated": "Updated",
|
"updated": "Updated",
|
||||||
|
"resolved": "Resolved",
|
||||||
"target-purged": "The content this flag referred to has been purged and is no longer available.",
|
"target-purged": "The content this flag referred to has been purged and is no longer available.",
|
||||||
|
|
||||||
"graph-label": "Daily Flags",
|
"graph-label": "Daily Flags",
|
||||||
@@ -26,6 +27,7 @@
|
|||||||
"filter-cid-all": "All categories",
|
"filter-cid-all": "All categories",
|
||||||
"apply-filters": "Apply Filters",
|
"apply-filters": "Apply Filters",
|
||||||
"more-filters": "More Filters",
|
"more-filters": "More Filters",
|
||||||
|
"fewer-filters": "Fewer Filters",
|
||||||
|
|
||||||
"quick-actions": "Quick Actions",
|
"quick-actions": "Quick Actions",
|
||||||
"flagged-user": "Flagged User",
|
"flagged-user": "Flagged User",
|
||||||
|
|||||||
@@ -46,7 +46,9 @@
|
|||||||
"alert.success": "সফল",
|
"alert.success": "সফল",
|
||||||
"alert.error": "ত্রুটি",
|
"alert.error": "ত্রুটি",
|
||||||
"alert.banned": "নিষিদ্ধ",
|
"alert.banned": "নিষিদ্ধ",
|
||||||
"alert.banned.message": "আপনাকে কেবলই নিষিদ্ধ করা হয়েছে, আপনি এখন লগআউট হয়ে যাবেন।",
|
"alert.banned.message": "You have just been banned, your access is now restricted.",
|
||||||
|
"alert.unbanned": "Unbanned",
|
||||||
|
"alert.unbanned.message": "Your ban has been lifted.",
|
||||||
"alert.unfollow": "আপনি আর %1 কে অনুসরণ করছেন না!",
|
"alert.unfollow": "আপনি আর %1 কে অনুসরণ করছেন না!",
|
||||||
"alert.follow": "আপনি এখন %1 কে অনুসরণ করছেন!",
|
"alert.follow": "আপনি এখন %1 কে অনুসরণ করছেন!",
|
||||||
"users": "ব্যবহারকারীগণ",
|
"users": "ব্যবহারকারীগণ",
|
||||||
@@ -93,6 +95,8 @@
|
|||||||
"guest": "অতিথি",
|
"guest": "অতিথি",
|
||||||
"guests": "অতিথি",
|
"guests": "অতিথি",
|
||||||
"former_user": "A Former User",
|
"former_user": "A Former User",
|
||||||
|
"system-user": "System",
|
||||||
|
"unknown-user": "Unknown user",
|
||||||
"updated.title": "ফোরাম আপডেট করা হয়েছে",
|
"updated.title": "ফোরাম আপডেট করা হয়েছে",
|
||||||
"updated.message": "এই ফোরামে এইমাত্র সর্বশেষ সংস্করণে আপডেট করা হয়েছে। পৃষ্ঠাটি রিফ্রেশ করতে এখানে ক্লিক করুন।",
|
"updated.message": "এই ফোরামে এইমাত্র সর্বশেষ সংস্করণে আপডেট করা হয়েছে। পৃষ্ঠাটি রিফ্রেশ করতে এখানে ক্লিক করুন।",
|
||||||
"privacy": "নিরাপত্তা",
|
"privacy": "নিরাপত্তা",
|
||||||
|
|||||||
@@ -35,8 +35,7 @@
|
|||||||
"details.member_count": "Member Count",
|
"details.member_count": "Member Count",
|
||||||
"details.creation_date": "Creation Date",
|
"details.creation_date": "Creation Date",
|
||||||
"details.description": "Description",
|
"details.description": "Description",
|
||||||
"details.member-post-cids": "Categories to display posts from",
|
"details.member-post-cids": "Category IDs 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.badge_preview": "Badge Preview",
|
||||||
"details.change_icon": "Change Icon",
|
"details.change_icon": "Change Icon",
|
||||||
"details.change_label_colour": "Change Label Colour",
|
"details.change_label_colour": "Change Label Colour",
|
||||||
|
|||||||
@@ -8,5 +8,6 @@
|
|||||||
"failed_login_attempt": "Login Unsuccessful",
|
"failed_login_attempt": "Login Unsuccessful",
|
||||||
"login_successful": "আপনি সফলভাবে প্রবেশ করেছেন!",
|
"login_successful": "আপনি সফলভাবে প্রবেশ করেছেন!",
|
||||||
"dont_have_account": "কোন একাউন্ট নেই?",
|
"dont_have_account": "কোন একাউন্ট নেই?",
|
||||||
"logged-out-due-to-inactivity": "You have been logged out of the Admin Control Panel due to inactivity"
|
"logged-out-due-to-inactivity": "You have been logged out of the Admin Control Panel due to inactivity",
|
||||||
|
"caps-lock-enabled": "Caps Lock is enabled"
|
||||||
}
|
}
|
||||||
@@ -60,6 +60,11 @@
|
|||||||
"composer.zen_mode": "Zen Mode",
|
"composer.zen_mode": "Zen Mode",
|
||||||
"composer.select_category": "Select a category",
|
"composer.select_category": "Select a category",
|
||||||
"composer.textarea.placeholder": "Enter your post content here, drag and drop images",
|
"composer.textarea.placeholder": "Enter your post content here, drag and drop images",
|
||||||
|
"composer.schedule-for": "Schedule topic for",
|
||||||
|
"composer.schedule-date": "Date",
|
||||||
|
"composer.schedule-time": "Time",
|
||||||
|
"composer.cancel-scheduling": "Cancel Scheduling",
|
||||||
|
"composer.set-schedule-date": "Set Date",
|
||||||
"bootbox.ok": "OK",
|
"bootbox.ok": "OK",
|
||||||
"bootbox.cancel": "Cancel",
|
"bootbox.cancel": "Cancel",
|
||||||
"bootbox.confirm": "Confirm",
|
"bootbox.confirm": "Confirm",
|
||||||
|
|||||||
@@ -14,6 +14,7 @@
|
|||||||
"topics": "Topics",
|
"topics": "Topics",
|
||||||
"replies": "Replies",
|
"replies": "Replies",
|
||||||
"chat": "Chats",
|
"chat": "Chats",
|
||||||
|
"group-chat": "Group Chats",
|
||||||
"follows": "Follows",
|
"follows": "Follows",
|
||||||
"upvote": "Upvotes",
|
"upvote": "Upvotes",
|
||||||
"new-flags": "New Flags",
|
"new-flags": "New Flags",
|
||||||
@@ -47,6 +48,8 @@
|
|||||||
"posts-exported": "<strong>%1</strong> posts exported, click to download",
|
"posts-exported": "<strong>%1</strong> posts exported, click to download",
|
||||||
"uploads-exported": "<strong>%1</strong> uploads exported, click to download",
|
"uploads-exported": "<strong>%1</strong> uploads exported, click to download",
|
||||||
"users-csv-exported": "Users csv exported, click to download",
|
"users-csv-exported": "Users csv exported, click to download",
|
||||||
|
"post-queue-accepted": "Your queued post has been accepted. Click here to see your post.",
|
||||||
|
"post-queue-rejected": "Your queued post has been rejected.",
|
||||||
"email-confirmed": "ইমেইল নিশ্চিত করা হয়েছে",
|
"email-confirmed": "ইমেইল নিশ্চিত করা হয়েছে",
|
||||||
"email-confirmed-message": "আপনার ইমেইল যাচাই করার জন্য আপনাকে ধন্যবাদ। আপনার অ্যাকাউন্টটি এখন সম্পূর্ণরূপে সক্রিয়।",
|
"email-confirmed-message": "আপনার ইমেইল যাচাই করার জন্য আপনাকে ধন্যবাদ। আপনার অ্যাকাউন্টটি এখন সম্পূর্ণরূপে সক্রিয়।",
|
||||||
"email-confirm-error-message": "আপনার ইমেল ঠিকানার বৈধতা যাচাইয়ে একটি সমস্যা হয়েছে। সম্ভবত কোডটি ভুল ছিল অথবা কোডের মেয়াদ শেষ হয়ে গিয়েছে।",
|
"email-confirm-error-message": "আপনার ইমেল ঠিকানার বৈধতা যাচাইয়ে একটি সমস্যা হয়েছে। সম্ভবত কোডটি ভুল ছিল অথবা কোডের মেয়াদ শেষ হয়ে গিয়েছে।",
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
{
|
{
|
||||||
"post-queue": "Post Queue",
|
"post-queue": "Post Queue",
|
||||||
"description": "There are no posts in the post queue. <br> To enable this feature, go to <a href=\"%1\">Settings → Post → Post Queue</a> and enable <strong>Post Queue</strong>.",
|
"description": "There are no posts in the post queue. <br> To enable this feature, go to <a href=\"%1\">Settings → Post → Post Queue</a> and enable <strong>Post Queue</strong>.",
|
||||||
@@ -7,5 +8,11 @@
|
|||||||
"content": "Content",
|
"content": "Content",
|
||||||
"posted": "Posted",
|
"posted": "Posted",
|
||||||
"reply-to": "Reply to \"%1\"",
|
"reply-to": "Reply to \"%1\"",
|
||||||
"content-editable": "You can click on individual content to edit before posting."
|
"content-editable": "Click on content to edit",
|
||||||
|
"category-editable": "Click on category to edit",
|
||||||
|
"title-editable": "Click on title to edit",
|
||||||
|
"reply": "Reply",
|
||||||
|
"topic": "Topic",
|
||||||
|
"accept": "Accept",
|
||||||
|
"reject": "Reject"
|
||||||
}
|
}
|
||||||
@@ -24,5 +24,8 @@
|
|||||||
"interstitial.errors-found": "আপনার নিবন্ধনটি সম্পূর্ণ করা সম্ভব হয় নি।",
|
"interstitial.errors-found": "আপনার নিবন্ধনটি সম্পূর্ণ করা সম্ভব হয় নি।",
|
||||||
"gdpr_agree_data": "I consent to the collection and processing of my personal information on this website.",
|
"gdpr_agree_data": "I consent to the collection and processing of my personal information on this website.",
|
||||||
"gdpr_agree_email": "I consent to receive digest and notification emails from this website.",
|
"gdpr_agree_email": "I consent to receive digest and notification emails from this website.",
|
||||||
"gdpr_consent_denied": "You must give consent to this site to collect/process your information, and to send you emails."
|
"gdpr_consent_denied": "You must give consent to this site to collect/process your information, and to send you emails.",
|
||||||
|
"invite.error-admin-only": "Direct user registration has been disabled. Please contact an administrator for more details.",
|
||||||
|
"invite.error-invite-only": "Direct user registration has been disabled. You must be invited by an existing user in order to access this forum.",
|
||||||
|
"invite.error-invalid-data": "The registration data received does not correspond to our records. Please contact an administrator for more details"
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"success": "সফল হয়েছে",
|
"success": "সফল হয়েছে",
|
||||||
"topic-post": "আপনি সফলভাবে পোষ্ট করেছেন। ",
|
"topic-post": "আপনি সফলভাবে পোষ্ট করেছেন। ",
|
||||||
"post-queued": "Your post is queued for approval.",
|
"post-queued": "Your post is queued for approval. You will get a notification when it is accepted or rejected.",
|
||||||
"authentication-successful": "অথেন্টিকেশন সফল হয়েছে",
|
"authentication-successful": "অথেন্টিকেশন সফল হয়েছে",
|
||||||
"settings-saved": "সেটিংস সেভ করা হয়েছে। "
|
"settings-saved": "সেটিংস সেভ করা হয়েছে। "
|
||||||
}
|
}
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"topic": "টপিক",
|
"topic": "টপিক",
|
||||||
|
"title": "Title",
|
||||||
"no_topics_found": "কোন টপিক পাওয়া যায়নি!",
|
"no_topics_found": "কোন টপিক পাওয়া যায়নি!",
|
||||||
"no_posts_found": "কোন পোস্ট পাওয়া যায়নি",
|
"no_posts_found": "কোন পোস্ট পাওয়া যায়নি",
|
||||||
"post_is_deleted": "এই পোস্টটি মুছে ফেলা হয়েছে!",
|
"post_is_deleted": "এই পোস্টটি মুছে ফেলা হয়েছে!",
|
||||||
@@ -30,16 +31,25 @@
|
|||||||
"locked": "বন্ধ",
|
"locked": "বন্ধ",
|
||||||
"pinned": "Pinned",
|
"pinned": "Pinned",
|
||||||
"pinned-with-expiry": "Pinned until %1",
|
"pinned-with-expiry": "Pinned until %1",
|
||||||
|
"scheduled": "Scheduled",
|
||||||
"moved": "Moved",
|
"moved": "Moved",
|
||||||
"moved-from": "Moved from %1",
|
"moved-from": "Moved from %1",
|
||||||
"copy-ip": "Copy IP",
|
"copy-ip": "Copy IP",
|
||||||
"ban-ip": "Ban IP",
|
"ban-ip": "Ban IP",
|
||||||
"view-history": "Edit History",
|
"view-history": "Edit History",
|
||||||
|
"locked-by": "Locked by",
|
||||||
|
"unlocked-by": "Unlocked by",
|
||||||
|
"pinned-by": "Pinned by",
|
||||||
|
"unpinned-by": "Unpinned by",
|
||||||
|
"deleted-by": "Deleted by",
|
||||||
|
"restored-by": "Restored by",
|
||||||
|
"queued-by": "Post queued for approval →",
|
||||||
"bookmark_instructions": "Click here to return to the last read post in this thread.",
|
"bookmark_instructions": "Click here to return to the last read post in this thread.",
|
||||||
"flag-post": "Flag this post",
|
"flag-post": "Flag this post",
|
||||||
"flag-user": "Flag this user",
|
"flag-user": "Flag this user",
|
||||||
"already-flagged": "Already Flagged",
|
"already-flagged": "Already Flagged",
|
||||||
"view-flag-report": "View Flag Report",
|
"view-flag-report": "View Flag Report",
|
||||||
|
"resolve-flag": "Resolve Flag",
|
||||||
"merged_message": "This topic has been merged into <a href=\"%1\">%2</a>",
|
"merged_message": "This topic has been merged into <a href=\"%1\">%2</a>",
|
||||||
"deleted_message": "এই টপিকটি মুছে ফেলা হয়েছে। শুধুমাত্র টপিক ব্যবস্থাপনার ক্ষমতাপ্রাপ্ত সদস্যগণ এটি দেখতে পারবেন।",
|
"deleted_message": "এই টপিকটি মুছে ফেলা হয়েছে। শুধুমাত্র টপিক ব্যবস্থাপনার ক্ষমতাপ্রাপ্ত সদস্যগণ এটি দেখতে পারবেন।",
|
||||||
"following_topic.message": "এখন থেকে এই টপিকে অন্যকেউ পোস্ট করলে আপনি নোটিফিকেশন পাবেন।",
|
"following_topic.message": "এখন থেকে এই টপিকে অন্যকেউ পোস্ট করলে আপনি নোটিফিকেশন পাবেন।",
|
||||||
@@ -104,6 +114,7 @@
|
|||||||
"move_post": "পোষ্ট সরান",
|
"move_post": "পোষ্ট সরান",
|
||||||
"post_moved": "পোষ্ট সরানো হয়েছে",
|
"post_moved": "পোষ্ট সরানো হয়েছে",
|
||||||
"fork_topic": "টপিক ফর্ক করুন",
|
"fork_topic": "টপিক ফর্ক করুন",
|
||||||
|
"enter-new-topic-title": "Enter new topic title",
|
||||||
"fork_topic_instruction": "যে পোষ্টটি ফর্ক করতে চান সেটি ক্লিক করুন",
|
"fork_topic_instruction": "যে পোষ্টটি ফর্ক করতে চান সেটি ক্লিক করুন",
|
||||||
"fork_no_pids": "কোন পোষ্ট সিলেক্ট করা হয় নি",
|
"fork_no_pids": "কোন পোষ্ট সিলেক্ট করা হয় নি",
|
||||||
"no-posts-selected": "No posts selected!",
|
"no-posts-selected": "No posts selected!",
|
||||||
@@ -117,14 +128,17 @@
|
|||||||
"merge-options": "Merge options",
|
"merge-options": "Merge options",
|
||||||
"merge-select-main-topic": "Select the main topic",
|
"merge-select-main-topic": "Select the main topic",
|
||||||
"merge-new-title-for-topic": "New title for topic",
|
"merge-new-title-for-topic": "New title for topic",
|
||||||
"move_posts_instruction": "Click the posts you want to move then go to target topic and click move.",
|
"topic-id": "Topic ID",
|
||||||
|
"move_posts_instruction": "Click the posts you want to move then enter a topic ID or go to the target topic",
|
||||||
"change_owner_instruction": "Click the posts you want to assign to another user",
|
"change_owner_instruction": "Click the posts you want to assign to another user",
|
||||||
"composer.title_placeholder": "আপনার টপিকের শিরোনাম দিন",
|
"composer.title_placeholder": "আপনার টপিকের শিরোনাম দিন",
|
||||||
"composer.handle_placeholder": "Enter your name/handle here",
|
"composer.handle_placeholder": "Enter your name/handle here",
|
||||||
"composer.discard": "বাতিল",
|
"composer.discard": "বাতিল",
|
||||||
"composer.submit": "সাবমিট",
|
"composer.submit": "সাবমিট",
|
||||||
|
"composer.schedule": "Schedule",
|
||||||
"composer.replying_to": "%1 এর উত্তরে:",
|
"composer.replying_to": "%1 এর উত্তরে:",
|
||||||
"composer.new_topic": "নতুন টপিক",
|
"composer.new_topic": "নতুন টপিক",
|
||||||
|
"composer.editing": "Editing",
|
||||||
"composer.uploading": "আপলোডিং",
|
"composer.uploading": "আপলোডিং",
|
||||||
"composer.thumb_url_label": "টপিকে থাম্বনেইল URL পেষ্ট করুন",
|
"composer.thumb_url_label": "টপিকে থাম্বনেইল URL পেষ্ট করুন",
|
||||||
"composer.thumb_title": "এই টপিকে থাম্বনেইল যোগ করুন",
|
"composer.thumb_title": "এই টপিকে থাম্বনেইল যোগ করুন",
|
||||||
@@ -152,8 +166,10 @@
|
|||||||
"diffs.current-revision": "current revision",
|
"diffs.current-revision": "current revision",
|
||||||
"diffs.original-revision": "original revision",
|
"diffs.original-revision": "original revision",
|
||||||
"diffs.restore": "Restore this revision",
|
"diffs.restore": "Restore this revision",
|
||||||
"diffs.restore-description": "A new revision will be appended to this post's edit history.",
|
"diffs.restore-description": "A new revision will be appended to this post's edit history after restoring.",
|
||||||
"diffs.post-restored": "Post successfully restored to earlier revision",
|
"diffs.post-restored": "Post successfully restored to earlier revision",
|
||||||
|
"diffs.delete": "Delete this revision",
|
||||||
|
"diffs.deleted": "Revision deleted",
|
||||||
"timeago_later": "%1 later",
|
"timeago_later": "%1 later",
|
||||||
"timeago_earlier": "%1 earlier",
|
"timeago_earlier": "%1 earlier",
|
||||||
"first-post": "First post",
|
"first-post": "First post",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"uploading-file": "Uploading the file...",
|
"uploading-file": "ফাইল পাঠানো হচ্ছে...",
|
||||||
"select-file-to-upload": "Select a file to upload!",
|
"select-file-to-upload": "পাঠানোর জন্য নথি নির্বাচন",
|
||||||
"upload-success": "File uploaded successfully!",
|
"upload-success": "File uploaded successfully!",
|
||||||
"maximum-file-size": "Maximum %1 kb",
|
"maximum-file-size": "Maximum %1 kb",
|
||||||
"no-uploads-found": "No uploads found",
|
"no-uploads-found": "No uploads found",
|
||||||
|
|||||||
@@ -84,6 +84,7 @@
|
|||||||
"remove_cover_picture_confirm": "Are you sure you want to remove the cover picture?",
|
"remove_cover_picture_confirm": "Are you sure you want to remove the cover picture?",
|
||||||
"crop_picture": "Crop picture",
|
"crop_picture": "Crop picture",
|
||||||
"upload_cropped_picture": "Crop and upload",
|
"upload_cropped_picture": "Crop and upload",
|
||||||
|
"avatar-background-colour": "Avatar background colour",
|
||||||
"settings": "সেটিংস",
|
"settings": "সেটিংস",
|
||||||
"show_email": "আমার ইমেইল দেখাও",
|
"show_email": "আমার ইমেইল দেখাও",
|
||||||
"show_fullname": "আমার সম্পূর্ণ নাম দেখাও",
|
"show_fullname": "আমার সম্পূর্ণ নাম দেখাও",
|
||||||
@@ -135,7 +136,7 @@
|
|||||||
"homepage": "Homepage",
|
"homepage": "Homepage",
|
||||||
"homepage_description": "Select a page to use as the forum homepage or 'None' to use the default homepage.",
|
"homepage_description": "Select a page to use as the forum homepage or 'None' to use the default homepage.",
|
||||||
"custom_route": "Custom Homepage Route",
|
"custom_route": "Custom Homepage Route",
|
||||||
"custom_route_help": "Enter a route name here, without any preceding slash (e.g. \"recent\", or \"popular\")",
|
"custom_route_help": "Enter a route name here, without any preceding slash (e.g. \"recent\" or \"category/2/general-discussion\")",
|
||||||
"sso.title": "Single Sign-on Services",
|
"sso.title": "Single Sign-on Services",
|
||||||
"sso.associated": "Associated with",
|
"sso.associated": "Associated with",
|
||||||
"sso.not-associated": "Click here to associate with",
|
"sso.not-associated": "Click here to associate with",
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
"forum-traffic": "Provoz fóra",
|
"forum-traffic": "Provoz fóra",
|
||||||
"page-views": "Zobrazení stránky",
|
"page-views": "Zobrazení stránky",
|
||||||
"unique-visitors": "Jedineční návštěvníci",
|
"unique-visitors": "Jedineční návštěvníci",
|
||||||
|
"logins": "Logins",
|
||||||
"new-users": "Nový uživatelé",
|
"new-users": "Nový uživatelé",
|
||||||
"posts": "Příspěvky",
|
"posts": "Příspěvky",
|
||||||
"topics": "Témata",
|
"topics": "Témata",
|
||||||
@@ -29,6 +30,7 @@
|
|||||||
"upgrade-available": "<p>Nová verze (v%1) byla zveřejněna. Zvažte <a href=\"https://docs.nodebb.org/configuring/upgrade/\" target=\"_blank\">aktualizaci vašeho NodeBB</a>.</p>",
|
"upgrade-available": "<p>Nová verze (v%1) byla zveřejněna. Zvažte <a href=\"https://docs.nodebb.org/configuring/upgrade/\" target=\"_blank\">aktualizaci vašeho NodeBB</a>.</p>",
|
||||||
"prerelease-upgrade-available": "<p>Toto je zastaralá testovací verze NodeBB. Nová verze (v%1) byla zveřejněna. Zvažte <a href=\"https://docs.nodebb.org/configuring/upgrade/\" target=\"_blank\">aktualizaci vaší verze NodeBB</a>.</p>",
|
"prerelease-upgrade-available": "<p>Toto je zastaralá testovací verze NodeBB. Nová verze (v%1) byla zveřejněna. Zvažte <a href=\"https://docs.nodebb.org/configuring/upgrade/\" target=\"_blank\">aktualizaci vaší verze NodeBB</a>.</p>",
|
||||||
"prerelease-warning": "<p>Toto je <strong>zkušební</strong> verze NodeBB. Mohou se vyskytnout různé chyby.<i class=\"fa fa-exclamation-triangle\"></i></p>",
|
"prerelease-warning": "<p>Toto je <strong>zkušební</strong> verze NodeBB. Mohou se vyskytnout různé chyby.<i class=\"fa fa-exclamation-triangle\"></i></p>",
|
||||||
|
"fallback-emailer-not-found": "Fallback emailer not found!",
|
||||||
"running-in-development": "<span>Fórum běží ve vývojářském režimu a může být potencionálně zranitelné . Kontaktujte správce systému.</span>",
|
"running-in-development": "<span>Fórum běží ve vývojářském režimu a může být potencionálně zranitelné . Kontaktujte správce systému.</span>",
|
||||||
"latest-lookup-failed": "<p>Náhled na poslední dostupnou verzi NodeBB</p>",
|
"latest-lookup-failed": "<p>Náhled na poslední dostupnou verzi NodeBB</p>",
|
||||||
|
|
||||||
@@ -75,5 +77,12 @@
|
|||||||
"graphs.registered-users": "Registrovaní uživatelé",
|
"graphs.registered-users": "Registrovaní uživatelé",
|
||||||
"graphs.anonymous-users": "Anonymní uživatelé",
|
"graphs.anonymous-users": "Anonymní uživatelé",
|
||||||
"last-restarted-by": "Poslední restart od",
|
"last-restarted-by": "Poslední restart od",
|
||||||
"no-users-browsing": "Nikdo si nic neprohlíží"
|
"no-users-browsing": "Nikdo si nic neprohlíží",
|
||||||
|
|
||||||
|
"back-to-dashboard": "Back to Dashboard",
|
||||||
|
"details.no-users": "No users have joined within the selected timeframe",
|
||||||
|
"details.no-topics": "No topics have been posted within the selected timeframe",
|
||||||
|
"details.no-logins": "No logins have been recorded within the selected timeframe",
|
||||||
|
"details.logins-static": "NodeBB only saves session data for %1 days, and so this table below will only show the most recently active sessions",
|
||||||
|
"details.logins-login-time": "Login Time"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,7 +39,7 @@
|
|||||||
"alert.upgraded": "Rozšíření bylo aktualizováno",
|
"alert.upgraded": "Rozšíření bylo aktualizováno",
|
||||||
"alert.installed": "Rozšíření bylo nainstalováno",
|
"alert.installed": "Rozšíření bylo nainstalováno",
|
||||||
"alert.uninstalled": "Rozšíření bylo odinstalováno",
|
"alert.uninstalled": "Rozšíření bylo odinstalováno",
|
||||||
"alert.activate-success": "Pro plnou aktivaci tohoto rozšíření, restartujte NodeBB",
|
"alert.activate-success": "Please rebuild and restart your NodeBB to fully activate this plugin",
|
||||||
"alert.deactivate-success": "Rozšíření bylo úspěšně deaktivováno",
|
"alert.deactivate-success": "Rozšíření bylo úspěšně deaktivováno",
|
||||||
"alert.upgrade-success": "Pro úplnou aktualizace tohoto rozšíření, znovu sestavte a restartujte NodeBB.",
|
"alert.upgrade-success": "Pro úplnou aktualizace tohoto rozšíření, znovu sestavte a restartujte NodeBB.",
|
||||||
"alert.install-success": "Rozšíření bylo úspěšně nainstalováno, můžete ho aktivovat.",
|
"alert.install-success": "Rozšíření bylo úspěšně nainstalováno, můžete ho aktivovat.",
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
"custom-class": "Upravit třídu",
|
"custom-class": "Upravit třídu",
|
||||||
"num-recent-replies": "# posledních odpovědí",
|
"num-recent-replies": "# posledních odpovědí",
|
||||||
"ext-link": "Externí odkaz",
|
"ext-link": "Externí odkaz",
|
||||||
|
"subcategories-per-page": "Subcategories per page",
|
||||||
"is-section": "Zacházet s kategorii jako se sekcí",
|
"is-section": "Zacházet s kategorii jako se sekcí",
|
||||||
"post-queue": "Post queue",
|
"post-queue": "Post queue",
|
||||||
"tag-whitelist": "Seznam povolených značek",
|
"tag-whitelist": "Seznam povolených značek",
|
||||||
@@ -18,6 +19,7 @@
|
|||||||
"category-image": "Obrázek kategorie",
|
"category-image": "Obrázek kategorie",
|
||||||
"parent-category": "Nadřazená kategorie",
|
"parent-category": "Nadřazená kategorie",
|
||||||
"optional-parent-category": "Nadřazená kategorie (doporučeno)",
|
"optional-parent-category": "Nadřazená kategorie (doporučeno)",
|
||||||
|
"top-level": "Top Level",
|
||||||
"parent-category-none": "(nic)",
|
"parent-category-none": "(nic)",
|
||||||
"copy-parent": "Kopírovat nadřazenou",
|
"copy-parent": "Kopírovat nadřazenou",
|
||||||
"copy-settings": "Kopírovat nastavení z",
|
"copy-settings": "Kopírovat nastavení z",
|
||||||
@@ -30,6 +32,8 @@
|
|||||||
"edit": "Upravit",
|
"edit": "Upravit",
|
||||||
"analytics": "Analytika",
|
"analytics": "Analytika",
|
||||||
"view-category": "Zobrazit kategorii",
|
"view-category": "Zobrazit kategorii",
|
||||||
|
"set-order": "Set order",
|
||||||
|
"set-order-help": "Setting the order of the category will move this category to that order and update the order of other categories as necessary. Minimum order is 1 which puts the category at the top.",
|
||||||
|
|
||||||
"select-category": "Vyberte kategorii",
|
"select-category": "Vyberte kategorii",
|
||||||
"set-parent-category": "Nastavit nadřazenou kategorii",
|
"set-parent-category": "Nastavit nadřazenou kategorii",
|
||||||
@@ -46,6 +50,8 @@
|
|||||||
"privileges.no-users": "V této kategorii není nastaveno žádné oprávnění uživatele.",
|
"privileges.no-users": "V této kategorii není nastaveno žádné oprávnění uživatele.",
|
||||||
"privileges.section-group": "Skupina",
|
"privileges.section-group": "Skupina",
|
||||||
"privileges.group-private": "Tato skupina je soukromá",
|
"privileges.group-private": "Tato skupina je soukromá",
|
||||||
|
"privileges.inheritance-exception": "This group does not inherit privileges from registered-users group",
|
||||||
|
"privileges.banned-user-inheritance": "Banned users inherit privileges from banned-users group",
|
||||||
"privileges.search-group": "Přidat skupinu",
|
"privileges.search-group": "Přidat skupinu",
|
||||||
"privileges.copy-to-children": "Kopírovat do podřazené",
|
"privileges.copy-to-children": "Kopírovat do podřazené",
|
||||||
"privileges.copy-from-category": "Kopírovat z kategorie",
|
"privileges.copy-from-category": "Kopírovat z kategorie",
|
||||||
|
|||||||
@@ -25,6 +25,7 @@
|
|||||||
"access-topics": "Přístup k tématům",
|
"access-topics": "Přístup k tématům",
|
||||||
"create-topics": "Vytvořit téma",
|
"create-topics": "Vytvořit téma",
|
||||||
"reply-to-topics": "Odpovědět na téma",
|
"reply-to-topics": "Odpovědět na téma",
|
||||||
|
"schedule-topics": "Schedule Topics",
|
||||||
"tag-topics": "Označit téma",
|
"tag-topics": "Označit téma",
|
||||||
"edit-posts": "Upravit příspěvek",
|
"edit-posts": "Upravit příspěvek",
|
||||||
"view-edit-history": "Zobrazit historii editace",
|
"view-edit-history": "Zobrazit historii editace",
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
"none": "Vaše fórum neobsahuje žádné témata se značkami.",
|
"none": "Vaše fórum neobsahuje žádné témata se značkami.",
|
||||||
"bg-color": "Barva pozadí",
|
"bg-color": "Barva pozadí",
|
||||||
"text-color": "Barva textu",
|
"text-color": "Barva textu",
|
||||||
"create-modify": "Vytvořit a upravit značky",
|
|
||||||
"description": "Pro výběr více značek, vyberte značky kliknutím nebo přetažením, za použití klávesy <code>CTRL</code>.",
|
"description": "Pro výběr více značek, vyberte značky kliknutím nebo přetažením, za použití klávesy <code>CTRL</code>.",
|
||||||
"create": "Vytvořit značku",
|
"create": "Vytvořit značku",
|
||||||
"modify": "Upravit značky",
|
"modify": "Upravit značky",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"users": "Uživatelé",
|
"users": "Uživatelé",
|
||||||
"edit": "Upravit",
|
"edit": "Actions",
|
||||||
"make-admin": "Učinit správcem",
|
"make-admin": "Učinit správcem",
|
||||||
"remove-admin": "Odebrat správce",
|
"remove-admin": "Odebrat správce",
|
||||||
"validate-email": "Ověřit e-mail",
|
"validate-email": "Ověřit e-mail",
|
||||||
@@ -47,6 +47,7 @@
|
|||||||
"users.uid": "uid",
|
"users.uid": "uid",
|
||||||
"users.username": "jméno",
|
"users.username": "jméno",
|
||||||
"users.email": "e-mail",
|
"users.email": "e-mail",
|
||||||
|
"users.ip": "IP",
|
||||||
"users.postcount": "počet příspěvků",
|
"users.postcount": "počet příspěvků",
|
||||||
"users.reputation": "reputace",
|
"users.reputation": "reputace",
|
||||||
"users.flags": "označení",
|
"users.flags": "označení",
|
||||||
|
|||||||
@@ -1,5 +1,9 @@
|
|||||||
{
|
{
|
||||||
"dashboard": "Dashboard",
|
"section-dashboard": "Dashboards",
|
||||||
|
"dashboard/overview": "Overview",
|
||||||
|
"dashboard/logins": "Logins",
|
||||||
|
"dashboard/users": "Users",
|
||||||
|
"dashboard/topics": "Topics",
|
||||||
"section-general": "Všeobecné",
|
"section-general": "Všeobecné",
|
||||||
|
|
||||||
"section-manage": "Spravovat",
|
"section-manage": "Spravovat",
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user