Compare commits

..

383 Commits

Author SHA1 Message Date
Julian Lam
95ded24558 chore: alpha 3 2023-01-06 14:07:09 -05:00
Barış Soner Uşaklı
66e8937692 breaking: use component instead of nav-pills
so themes can use whatever they want for the user list menu
2023-01-06 12:59:51 -05:00
Barış Soner Uşaklı
83ee650d96 allow core style override by theme 2023-01-05 18:44:01 -05:00
Barış Soner Uşaklı
3efad2e13b feat: add template name to body class
allows styling pages based on template ie .template-groups-details
add allowCoverPicture to all profile routes
2023-01-05 17:24:03 -05:00
Barış Soner Uşaklı
71743affc3 feat: add sort to data 2023-01-05 16:11:56 -05:00
Barış Soner Uşaklı
cf7aa19419 fix: admin privileges 2022-12-30 08:58:59 -05:00
Barış Soner Uşaklı
bb69f304c2 fix: #11114, use event delegation
check attribute instead of content of dropdown for load status, so themes can use placeholders
2022-12-24 21:56:15 -05:00
Barış Soner Uşaklı
dd3e2c0d96 breaking: add unblock button instead of changing text dynamically 2022-12-24 18:33:48 -05:00
Barış Soner Uşaklı
d190bf41e0 add responsive borders 2022-12-24 13:12:03 -05:00
Barış Soner Uşaklı
6e86b4afa2 feat: add selected group to all profile pages
add new lang strings
2022-12-23 18:20:43 -05:00
Julian Lam
8f5bb18ee5 feat: update default theme to harmony, move default footer widget to sidebar footer 2022-12-23 14:09:48 -05:00
Julian Lam
69a285fa2c feat: pass widgets to client-side header/footer data 2022-12-23 13:49:57 -05:00
Barış Soner Uşaklı
f5e609ae6a fix: #11112, cleanup autocomplete markup for chats
after modal is closed
when switching chats on chats page
when navigation to another page from a chat page
2022-12-23 11:48:09 -05:00
Barış Soner Uşaklı
d1087106e4 refactor: topics.markAsUnreadForAll
fix fork test
2022-12-22 09:53:04 -05:00
Julian Lam
2144650dd5 Merge remote-tracking branch 'origin/develop' into bootstrap5 2022-12-21 17:20:42 -05:00
Julian Lam
9b2567d517 feat: new strings for composer 2022-12-21 12:41:49 -05:00
Barış Soner Uşaklı
57bfb37c55 feat: add emailHidden 2022-12-20 17:54:14 -05:00
Barış Soner Uşaklı
88fc073485 fix: add missing returns so functions return promise 2022-12-16 17:28:46 -05:00
Julian Lam
81a4ee18c8 fix: replace API calls to api.delete with api.del 2022-12-16 14:22:49 -05:00
Julian Lam
c4e2b4e87f chore: rewrite API module as ESM [breaking] 2022-12-16 14:19:58 -05:00
Julian Lam
0a9b1622cc fix: #11099, handle 401 in api module [breaking] 2022-12-16 12:06:24 -05:00
Julian Lam
00aef13dd3 Revert "fix: restore old behaviour of empty json w/ 401 code in admin middleware" [breaking]
This reverts commit dda5d42610.

re: #11099
2022-12-16 12:05:41 -05:00
Julian Lam
35b5ae195f fix(glance-nav): broken nav buttons 2022-12-15 14:38:34 -05:00
Barış Soner Uşaklı
d814b3325e fix: post queue issues 2022-12-15 13:03:39 -05:00
Barış Soner Uşaklı
ac1f3c314b fix: acp category-selector being changed by theme 2022-12-13 11:18:09 -05:00
Barış Soner Uşaklı
9b3616b103 refactor: move canPostTopic to privs and use on /unread /tag 2022-12-13 11:05:06 -05:00
Julian Lam
b2a59900e3 chore(glance-nav): re-org 2022-12-12 17:14:54 -05:00
Julian Lam
bf05d3527b fix(glance-nav): remove useless call that slowed things down 2022-12-12 17:09:38 -05:00
Julian Lam
940770bb9b fix(glance-nav): replace calls to navigator.getIndex() with index calculation based on track position 2022-12-12 16:59:22 -05:00
Julian Lam
0f7c9a7919 fix(glance-nav): use debounce instead of throttle 2022-12-12 16:46:29 -05:00
Julian Lam
038e7515fd fix(glance-nav): update handle index even if the post summary call fails 2022-12-12 13:26:28 -05:00
Julian Lam
b74bcd1a86 feat(glance-nav): show updated timestamp on nav scroll
thanks @barisusakli
2022-12-12 13:24:03 -05:00
Barış Soner Uşaklı
547f33a0a1 Merge branch 'bootstrap5' of https://github.com/NodeBB/NodeBB into bootstrap5 2022-12-12 12:36:53 -05:00
Barış Soner Uşaklı
c007ebe326 feat: allow changing fixed param 2022-12-12 12:36:48 -05:00
Julian Lam
50afbde62b feat(glance-nav): anchor and text update for unread indicator 2022-12-12 12:35:54 -05:00
Julian Lam
9d50826821 feat(glance-nav): unread indicator meta text 2022-12-12 12:21:00 -05:00
Barış Soner Uşaklı
574dd8eecb fix: dont lower bookmark
also ignore guests/spiders
2022-12-12 12:17:14 -05:00
Julian Lam
43561734cc fix(glance-nav): do not enable if postcount is less than bookmark threshold; do not allow unread indicator to go above knob 2022-12-12 11:48:03 -05:00
Barış Soner Uşaklı
81c8828bb1 add flex-1 class 2022-12-12 11:42:44 -05:00
Julian Lam
06604571d4 feat: refactor post menu tools to run once instead of checking for content, allow plugins to use skeleton placeholders within 2022-12-12 11:35:32 -05:00
Julian Lam
a28981de7c feat: unread indicator in topic nav 2022-12-09 16:07:47 -05:00
Julian Lam
fe76ee3ad7 feat: post index text in nav handle 2022-12-09 15:38:36 -05:00
Julian Lam
4b3a5e03c2 fix: #11079, update track position on window resize + cleanup 2022-12-08 22:53:00 -05:00
Barış Soner Uşaklı
831510e319 add hover-visible 2022-12-08 19:40:03 -05:00
Barış Soner Uşaklı
1c67d11b16 chore: up themes 2022-12-08 19:17:11 -05:00
Barış Soner Uşaklı
22031759dc Merge branch 'bootstrap5' of https://github.com/NodeBB/NodeBB into bootstrap5 2022-12-08 19:11:21 -05:00
Barış Soner Uşaklı
12336c8764 fix: topic events not showing up immediately 2022-12-08 19:11:15 -05:00
Julian Lam
901b2d7561 fix: update source text for quick reply 2022-12-08 13:23:34 -05:00
Barış Soner Uşaklı
57724ef2fb breaking: match topic page class for hiding 2022-12-07 23:36:40 -05:00
Julian Lam
c08fab5769 fix: only show at-a-glance navigator on topic template 2022-12-07 15:47:19 -05:00
Julian Lam
e0280136e4 chore: module cleanup 2022-12-07 15:15:03 -05:00
Julian Lam
e3dd1d62d9 fix: use app flag for at-a-glance active state instead of exported method 2022-12-07 15:11:23 -05:00
Julian Lam
8a83690596 fix: console logs 2022-12-07 15:07:37 -05:00
Julian Lam
54c6fbe287 feat: at-a-glance navigator 2022-12-07 15:07:37 -05:00
Barış Soner Uşaklı
c29876aed3 add white-space: initial 2022-12-07 11:55:40 -05:00
Barış Soner Uşaklı
f997e7a3bc add long/short 2022-12-07 11:02:56 -05:00
Barış Soner Uşaklı
fc914a39a2 add line-clamp mixin 2022-12-07 10:54:11 -05:00
Julian Lam
39ae02ade1 fix: also check theme node_modules folder as a css path 2022-12-05 15:37:01 -05:00
Barış Soner Uşaklı
7f5a9f19dd remove user_label hardcoded css 2022-12-05 15:28:04 -05:00
Julian Lam
db1d04931d refactor: fire topic tools load event once instead of checking for empty container
This allows for themes to put things inside the container (e.g. skeleton placeholders)
2022-12-02 17:04:06 -05:00
Barış Soner Uşaklı
60853bc20f chore: up lavender 2022-12-02 11:28:14 -05:00
Barış Soner Uşaklı
0e117910ba chore: up composer-default
add no drafts key
2022-12-01 12:56:15 -05:00
Barış Soner Uşaklı
55e0cbe76a feat: add draft lang keys 2022-12-01 11:02:11 -05:00
Barış Soner Uşaklı
848a57c314 chore: up themes 2022-12-01 11:01:55 -05:00
Barış Soner Uşaklı
12041d076b breaking: closes #11070, move quickreply to core 2022-12-01 09:52:48 -05:00
Barış Soner Uşaklı
b422c8ce52 breaking: refactor topic events
for proper i18n
support both `user locked this topic 3 hours ago` & `user locked this topic on 19 Oct 2022, 11:42`
2022-11-30 22:02:06 -05:00
Barış Soner Uşaklı
17a6621cd8 Revert "feat: supply subject-first topic event text for themes"
This reverts commit 2fec6b007a.
2022-11-30 18:29:00 -05:00
Julian Lam
2fec6b007a feat: supply subject-first topic event text for themes 2022-11-30 14:40:42 -05:00
Julian Lam
0dfd22c12b fix: have ul as replies container, not div 2022-11-30 14:40:42 -05:00
Barış Soner Uşaklı
9d599341d9 refactor: chat/notif counts 2022-11-30 13:53:08 -05:00
Barış Soner Uşaklı
289eca08a3 use component for count 2022-11-30 11:02:19 -05:00
Barış Soner Uşaklı
e73cf1e280 feat: use flex box for user icons 2022-11-29 19:20:11 -05:00
Barış Soner Uşaklı
b1aca51c48 fix: notif parent
add notifications/count component
2022-11-29 19:08:09 -05:00
Barış Soner Uşaklı
aee8c38cfc refactor: add timeago short/long versions
so themes can pick one
toggle hidden on unread/read icons as well
2022-11-29 10:45:12 -05:00
Julian Lam
064cf1abe7 fix: have Topic.applyDropup apply only to dropdown menus within the topic itself 2022-11-28 12:28:42 -05:00
Barış Soner Uşaklı
efcb1c2618 fix: prototype vulnerability in socket.io onMessage 2022-11-27 19:31:08 -05:00
Barış Soner Uşaklı
4a113bf1c7 refactor: use fw-bold 2022-11-27 19:08:18 -05:00
Barış Soner Uşaklı
63b19301d6 breaking: remove middleware.renderHeader/renderAdminHeader
move render/footer rendering to middleware/render.js
pass the same data that is passed to header to the footer as well, allows rendering navigation/profile dropdowns in footer.tpl
2022-11-27 19:08:09 -05:00
Julian Lam
c472fa2850 feat: buildCategoryLabel helper (for use in harmony theme) 2022-11-27 14:33:31 -05:00
Julian Lam
3c66301f03 fix(deps): update bootbox to v6 2022-11-27 14:22:53 -05:00
Barış Soner Uşaklı
7de2abd01c chore: update bs5 version 2022-11-25 11:15:36 -05:00
Julian Lam
22255ac47b Merge branch 'develop' into bootstrap5 2022-11-24 20:18:38 -05:00
Julian Lam
d9afabf0f2 Merge branch 'develop' into bootstrap5 2022-11-23 16:17:31 -05:00
Julian Lam
3a500f2481 chore: bump version for alpha 2 2022-11-23 16:09:21 -05:00
Julian Lam
ff5d56bb8d Merge branch 'develop' into bootstrap5 2022-11-23 16:07:15 -05:00
Julian Lam
9b7159264f Merge branch 'master' into develop 2022-11-23 16:05:46 -05:00
Barış Soner Uşaklı
ca27f37791 Merge branch 'master' into bootstrap5 2022-11-23 14:17:10 -05:00
Barış Soner Uşaklı
fb0c9174b5 refactor: remove unnecessary async 2022-11-21 18:49:01 -05:00
Julian Lam
c5562967c4 Merge branch 'develop' into bootstrap5 2022-11-18 11:54:35 -05:00
Barış Soner Uşaklı
e583f84e08 refactor: es6 alerts 2022-11-16 14:40:18 -05:00
Julian Lam
378fff2714 Merge branch 'develop' into bootstrap5 2022-11-16 12:18:28 -05:00
Julian Lam
4d88ddb20a fix: tests broken by commit to fix #11042 2022-11-15 14:35:30 -05:00
Julian Lam
e92fd00bca fix: #10042, use bootstrap 5 classes for colour context if privilege is added or removed, prior to saving 2022-11-15 14:22:21 -05:00
Barış Soner Uşaklı
1099de7702 fix: #11037, update eslint-nodebb-config 2022-11-15 11:17:52 -05:00
Barış Soner Uşaklı
c0c8039c4e refactor: remove is-checked, leftover from mdl 2022-11-15 09:34:57 -05:00
Barış Soner Uşaklı
1f62593a21 fix: alert on page load 2022-11-15 09:29:14 -05:00
Barış Soner Uşaklı
72175a971b fix: #11041, label location changed 2022-11-15 09:12:30 -05:00
Barış Soner Uşaklı
c519f06afa chore: up persona 2022-11-14 10:57:39 -05:00
Barış Soner Uşaklı
1c5e16ca3b Merge branch 'develop' into bootstrap5 2022-11-11 18:02:20 -05:00
Barış Soner Uşaklı
3a6898bb4c bs5 fix 2022-11-11 16:25:56 -05:00
Barış Soner Uşaklı
7bd0ccabd3 Merge branch 'develop' into bootstrap5 2022-11-11 16:24:32 -05:00
Barış Soner Uşaklı
435bb92c3f bring back bold for form-labels 2022-11-11 15:32:35 -05:00
Barış Soner Uşaklı
b355212c58 chore: up persona 2022-11-11 14:44:17 -05:00
Barış Soner Uşaklı
39434061a9 refactor: move some tpls to core 2022-11-11 13:12:43 -05:00
Barış Soner Uşaklı
5c220d928b fix: move discard button up, closes #11005 2022-11-11 12:26:52 -05:00
Julian Lam
aaeb0be0d8 Merge branch 'develop' into bootstrap5 2022-11-09 13:31:50 -05:00
Julian Lam
3c194500d2 fix: #11017, bump persona 2022-11-09 12:17:42 -05:00
Julian Lam
515af200ee Merge branch 'develop' into bootstrap5 2022-11-09 12:17:21 -05:00
Opliko
756e9f53a9 feat(fontawesome): New FontAwesome Icon selector (#11010)
* feat: search via FA api in icon picker

* feat: new initial icon list

* fix: only trigger search if the query changed

avoids sending a request for eg. a ctrl key press

* fix: change deprecated .click() to .trigger(click)

* feat: debounce icon search

* fix: use debounce properly
2022-11-09 11:41:37 -05:00
Barış Soner Uşaklı
576f1dbe72 chore: up persona 2022-11-09 11:08:24 -05:00
Barış Soner Uşaklı
bd234a7216 fix: group title 2022-11-09 11:06:42 -05:00
Julian Lam
1eee5e9114 fix(deps): bump spam-be-gone 2022-11-04 11:29:47 -04:00
Barış Soner Uşaklı
12e6e757ea chore: up bootstrap/bootswatch 2022-11-01 17:32:00 -04:00
Barış Soner Uşaklı
662a5e91db chore: up themes 2022-11-01 15:30:22 -04:00
Barış Soner Uşaklı
ab439e6ae8 chore: deps 2022-11-01 14:06:51 -04:00
Barış Soner Uşaklı
c3af787bf8 fix: hardcoded min-height in move topic modal 2022-11-01 13:11:46 -04:00
Barış Soner Uşaklı
375ff48a46 chore: up deps 2022-11-01 10:28:20 -04:00
Barış Soner Uşaklı
90df4e3f2d lint: fix commas 2022-10-25 18:37:49 -04:00
Barış Soner Uşaklı
c9e0bbf0b7 fix: closes #11007, alert close btn css 2022-10-25 18:23:12 -04:00
Barış Soner Uşaklı
9d290a4f6e fix: skins/themes save buttons. remove material icons from header 2022-10-25 18:01:31 -04:00
Barış Soner Uşaklı
299b53a3ee use the new save button on groups/privileges 2022-10-25 17:32:45 -04:00
Barış Soner Uşaklı
4de9f53296 refactor: toggle save button on category save as well 2022-10-25 17:24:46 -04:00
Julian Lam
e7ba890889 refactor: remove unneeded mixin, use bs5 classes and inline style as needed 2022-10-25 14:39:58 -04:00
Julian Lam
e63f8826b4 fix: remaining use of mdl classes in ACP 2022-10-25 14:39:58 -04:00
Julian Lam
836993d137 Revert "fix: closes #11000, dont cover save button with success alert"
This reverts commit c0859188ce.
2022-10-25 14:39:58 -04:00
Julian Lam
556b06ac2d fix: remove success toast on settings.save, navigation, widgets 2022-10-25 14:39:58 -04:00
Julian Lam
539e3cb5a8 fix: 500ms transition instead, also use solid floppy disk icon 2022-10-25 14:39:58 -04:00
Julian Lam
9bbdccbae0 fix: use form-switch instead of checkbox 2022-10-25 14:39:58 -04:00
Julian Lam
3e355be245 feat: have save button turn into green checkmark on successful save 2022-10-25 14:39:58 -04:00
Julian Lam
19c2be6b0b fix: remove save button and replace with partial written with bs5 classes 2022-10-25 14:39:58 -04:00
Julian Lam
aed1ee0224 fix: remove mdl-specific overrides, label bolding 2022-10-25 14:39:58 -04:00
Julian Lam
83f6f99354 fix: remove mdl css file 2022-10-25 14:39:58 -04:00
Julian Lam
2c3f330580 fix: rewrite and standardise all checkboxes in ACP to be bs5 checkboxes 2022-10-25 14:39:58 -04:00
Julian Lam
6da286c22b test: abort controller for interstitials 2022-10-24 15:33:52 -04:00
Julian Lam
ddf7537301 test: fix tests for changes to membershipBtn helper 2022-10-24 14:57:00 -04:00
Julian Lam
f426e7efe6 style: linting for some reason 2022-10-24 14:54:30 -04:00
Julian Lam
635541026b Merge branch 'develop' into bootstrap5 2022-10-24 14:13:18 -04:00
Barış Soner Uşaklı
1ba6e9c080 chore: up widgets 2022-10-21 20:31:02 -04:00
Barış Soner Uşaklı
a9ebffd47a chore: up persona 2022-10-21 20:18:07 -04:00
Barış Soner Uşaklı
3b52624410 change tooltip container 2022-10-21 13:35:23 -04:00
Barış Soner Uşaklı
6a30c0afea chore: up peace 2022-10-21 11:48:03 -04:00
Barış Soner Uşaklı
3509a36b52 chore: up themes 2022-10-21 11:13:11 -04:00
Barış Soner Uşaklı
9ee8bf41d8 chore: up persona 2022-10-21 10:00:53 -04:00
Barış Soner Uşaklı
ef94cd0caa chore: up themes 2022-10-21 09:41:27 -04:00
Barış Soner Uşaklı
c0859188ce fix: closes #11000, dont cover save button with success alert 2022-10-21 09:29:04 -04:00
Barış Soner Uşaklı
66f8c18f6a chore: up persona 2022-10-21 09:19:19 -04:00
Barış Soner Uşaklı
427db1adb8 fix: navi textClass 2022-10-21 09:00:34 -04:00
Barış Soner Uşaklı
1473f79390 chore: up composer 2022-10-21 01:05:12 -04:00
Barış Soner Uşaklı
79cc00b4ea changed to md 2022-10-20 23:26:37 -04:00
Barış Soner Uşaklı
5c7d544bcb chore: up persona 2022-10-20 23:25:54 -04:00
Julian Lam
5c9fe6c0fd fix: stop topic navigation hotkeys from firing if in a mousetrap-enabled form element 2022-10-20 21:59:29 -04:00
Barış Soner Uşaklı
5ba818ba7b feat: add search data to filter:search.inContent 2022-10-20 20:36:43 -04:00
Barış Soner Uşaklı
c1b89f5bd0 chore: up lavender 2022-10-20 11:56:45 -04:00
Barış Soner Uşaklı
8c6cc7bee8 chore: up composer 2022-10-19 19:44:50 -04:00
Barış Soner Uşaklı
37838095d8 Merge branch 'bootstrap5' of https://github.com/NodeBB/NodeBB into bootstrap5 2022-10-19 19:36:32 -04:00
Barış Soner Uşaklı
ed7d629451 chore: up composer 2022-10-19 19:36:31 -04:00
Julian Lam
8c238a8a13 chore: add bootstrap5 to test runner for now 2022-10-19 15:24:44 -04:00
Julian Lam
0bff957c20 Merge remote-tracking branch 'origin/develop' into bootstrap5 2022-10-19 15:24:07 -04:00
Julian Lam
591380531f fix: form text in ACP > Appearance > Customise 2022-10-19 14:27:39 -04:00
Barış Soner Uşaklı
b917ceaaf2 chore: add back lavender 2022-10-19 12:33:59 -04:00
Barış Soner Uşaklı
9e064a864e fix col-xs classes 2022-10-19 12:10:54 -04:00
Julian Lam
8ddbd10506 fix(deps): bump persona 2022-10-19 12:00:40 -04:00
Julian Lam
a600b7c1c6 fix(deps): bump composer and persona 2022-10-19 11:49:50 -04:00
Barış Soner Uşaklı
e2a7af9c6f chore: up persona 2022-10-19 08:58:51 -04:00
Julian Lam
dac71c84cb chore: remove socketUser.emailConfirm again 2022-10-18 15:26:28 -04:00
Julian Lam
c1081f7039 Merge branch 'master' into bootstrap5 2022-10-18 15:21:20 -04:00
Barış Soner Uşaklı
a2c824bf99 fix: outgoing 2022-10-18 13:05:56 -04:00
Barış Soner Uşaklı
78935f7338 Merge branch 'master' into bootstrap5 2022-10-18 10:41:28 -04:00
Barış Soner Uşaklı
94fbc8ea17 progress height 2022-10-17 20:59:03 -04:00
Barış Soner Uşaklı
e3110950ff chore: up deps
move blockquote style to generics.scss
get rid of voodoo selection code, selection.toString() seems to work
2022-10-17 20:47:10 -04:00
Barış Soner Uşaklı
6c8b8e057c chore: up persona 2022-10-17 12:18:59 -04:00
Barış Soner Uşaklı
7c5dbaf2c2 fix: EEXISTS error on linux if plugin/theme overrides core js file 2022-10-17 11:15:50 -04:00
Barış Soner Uşaklı
8f0f635f14 Merge branch 'bootstrap5' of https://github.com/NodeBB/NodeBB into bootstrap5 2022-10-16 17:18:21 -04:00
Barış Soner Uşaklı
4e79c12c7b chore: up composer 2022-10-16 17:18:15 -04:00
Opliko
3bdee868c2 fix: move FA fonts to a versioned subfolder to bust cache on updates (#10979) 2022-10-15 17:24:59 -04:00
Barış Soner Uşaklı
2f8834ee0a chore: up persona 2022-10-14 21:05:44 -04:00
Barış Soner Uşaklı
92e7653ebf refactor: half size icons 2022-10-14 21:03:34 -04:00
Barış Soner Uşaklı
08454f66c9 chore: up persona 2022-10-14 20:22:19 -04:00
Barış Soner Uşaklı
4f756be008 chore: up persona 2022-10-14 20:16:11 -04:00
Barış Soner Uşaklı
35a3ff7cb6 chore: up composer 2022-10-13 13:40:16 -04:00
Barış Soner Uşaklı
e4a3cf66ba fix: admin header 2022-10-13 13:28:11 -04:00
Barış Soner Uşaklı
4f55cfc494 chore: up composer 2022-10-13 11:18:37 -04:00
Barış Soner Uşaklı
3cdc136a9a fix active plugins (#10964) 2022-10-13 10:11:30 -04:00
Barış Soner Uşaklı
9de2b3653f modal style 2022-10-12 13:11:11 -04:00
Barış Soner Uşaklı
3ab800d49f refactor: move embedded group create modal
and fix its styling
2022-10-12 12:40:35 -04:00
Barış Soner Uşaklı
f3ae22d2a8 feat: add color property to taskbar
allows matching category icon when changing categories in composer
2022-10-11 19:16:27 -04:00
Barış Soner Uşaklı
34439c06de chore: up themes 2022-10-11 13:01:41 -04:00
Barış Soner Uşaklı
6f503c9512 make icons text white 2022-10-11 12:46:07 -04:00
Barış Soner Uşaklı
bc772a8303 chore: up persona/spam-be-gone 2022-10-11 12:32:37 -04:00
oplik0
421860969f feat: update link in fontawesome.tpl 2022-10-11 10:54:25 -04:00
oplik0
5e98ebb073 docs: update FA attribution.js 2022-10-11 10:54:25 -04:00
oplik0
18184b936d feat: move to FA6.2 2022-10-11 10:54:25 -04:00
Julian Lam
c285f72e12 fix: bug that allowed for bypass of GDPR interstitial on SSO registrations simply by cancelling the form 2022-10-11 10:46:12 -04:00
Julian Lam
2533a2e074 refactor: add new method user.interstitials.get; DRY 2022-10-11 10:46:12 -04:00
Barış Soner Uşaklı
7f5f4e8967 breaking: chat.close takes in uuid instead of chatmodal 2022-10-09 21:59:17 -04:00
Barış Soner Uşaklı
f7121fa529 breaking: move action:chat.sent to success callback of api call
dont fire action:chat.sent on chat message edit, fire action:chat.edited instead
2022-10-09 21:51:25 -04:00
Barış Soner Uşaklı
a116639699 breaking: move ban/mute modals
breaking: add accounts/moderate module and move ban/mute there
2022-10-09 21:43:42 -04:00
Barış Soner Uşaklı
796bf240cc breaking: remove unused colorpicker 2022-10-09 20:59:08 -04:00
Barış Soner Uşaklı
4505229661 eval-source-map is recommended for dev 2022-10-09 15:44:52 -04:00
Barış Soner Uşaklı
e8da0557bb default to prod 2022-10-09 15:33:07 -04:00
Barış Soner Uşaklı
beb52df1d9 fix: lint use async compile 2022-10-08 22:58:08 -04:00
Barış Soner Uşaklı
36b29d0266 Merge branch 'bootstrap5' of https://github.com/NodeBB/NodeBB into bootstrap5 2022-10-08 22:18:15 -04:00
Barış Soner Uşaklı
5af262a4d0 chore: add popperjs 2022-10-08 22:18:06 -04:00
Opliko
5772e0bbfb feat: use sass-embedded if possible (#10950) 2022-10-08 22:17:41 -04:00
Barış Soner Uşaklı
9d0b1d5092 refactor: remove unused code 2022-10-08 20:03:35 -04:00
Barış Soner Uşaklı
6837440942 fix: showAndFocus to use a specific search form 2022-10-06 09:17:35 -04:00
Barış Soner Uşaklı
0cb0a5c294 show progress 2022-10-06 07:52:32 -04:00
Barış Soner Uşaklı
045ef8bad9 Esbuild (#10940)
* ci: add minimum GitHub token permissions for workflows
Signed-off-by: Ashish Kurmi <akurmi@stepsecurity.io>

* feat: use esbuild for minification

Co-authored-by: Ashish Kurmi <akurmi@stepsecurity.io>
2022-10-06 07:51:41 -04:00
Barış Soner Uşaklı
7f9b1cf0be perf: speed up build
run webpack as soon as js targets are done
this allows building js/css in parallel
2022-10-05 22:46:42 -04:00
Barış Soner Uşaklı
308dae1a52 chore: up peace 2022-10-05 21:42:22 -04:00
Julian Lam
4f70d19e1e chore: v3.0.0-alpha.1 🎉 2022-10-05 14:09:57 -04:00
Julian Lam
3ddf91fb75 chore: clean up package.json for alpha 2022-10-05 14:02:03 -04:00
Barış Soner Uşaklı
9f0ecd6ea3 chore: rename panel to card 2022-10-05 10:55:46 -04:00
Barış Soner Uşaklı
97d499ce97 chore: up composer 2022-10-05 10:45:45 -04:00
Barış Soner Uşaklı
1fac6f69ad breaking: remove deprecated app methods 2022-10-05 10:18:23 -04:00
Barış Soner Uşaklı
cbc632da7d fix bs tooltips, update status tooltips
see https://github.com/twbs/bootstrap/issues/32372
2022-10-05 10:09:44 -04:00
Barış Soner Uşaklı
1d5cc19351 chore: up persona 2022-10-04 19:47:34 -04:00
Barış Soner Uşaklı
18cdb2575b chore: up persona 2022-10-04 19:31:13 -04:00
Barış Soner Uşaklı
78917e9117 fix: web installer css/tpl 2022-10-04 19:05:20 -04:00
Julian Lam
4757affa65 fix(deps): up 2factor 2022-10-04 13:48:32 -04:00
Barış Soner Uşaklı
ba52531a20 tooltip container 2022-10-03 14:03:40 -04:00
Barış Soner Uşaklı
6a5a28abca chore: up persona version 2022-10-03 13:42:59 -04:00
Barış Soner Uşaklı
661c0507a5 chore: up peace 2022-10-03 11:38:42 -04:00
Barış Soner Uşaklı
26bcb8b673 breaking: move bottom-sheet.scss to core 2022-10-03 10:41:21 -04:00
Barış Soner Uşaklı
eeb39b42b9 chore: add peace to package.json 2022-10-03 10:17:45 -04:00
Barış Soner Uşaklı
b35e90a6ad breaking: move modals to core 2022-10-03 10:13:20 -04:00
Barış Soner Uşaklı
389a2df9bf fix: category ordering add test 2022-10-03 09:40:54 -04:00
Barış Soner Uşaklı
68ba7cf97e fix timeago 2022-10-02 22:21:56 -04:00
Barış Soner Uşaklı
f3ee1097ed hover d-flex/block 2022-10-02 20:45:03 -04:00
Barış Soner Uşaklı
5f12d167ab fix: typo, timeago on blocks page 2022-10-02 20:28:09 -04:00
Barış Soner Uşaklı
adc248960b fix: timeago cutoff on users page
remove unused translator import
2022-10-02 18:02:33 -04:00
Barış Soner Uşaklı
a4e0b589ae bold/underlerine matches 2022-10-02 11:36:01 -04:00
Barış Soner Uşaklı
415f65cd79 add border-muted utility 2022-10-02 01:40:10 -04:00
Barış Soner Uşaklı
dfe69400ac fix: crash in category drag, closes #10932
happens when a child is dragged to root or from root to a nested level
2022-10-01 22:16:20 -04:00
Barış Soner Uşaklı
c81eb18623 fix more categories button not moving with parent
fix order issue
2022-10-01 22:02:56 -04:00
Barış Soner Uşaklı
4667dc8c88 fix admin toast 2022-10-01 22:00:55 -04:00
Barış Soner Uşaklı
7b18ea3e61 add hover display utility 2022-09-30 23:01:39 -04:00
Barış Soner Uşaklı
260ac5f427 refactor: use avatar helper
fix empty dropdown when searching
2022-09-30 23:01:14 -04:00
Barış Soner Uşaklı
e270474eed add manage lang string 2022-09-30 18:33:39 -04:00
Barış Soner Uşaklı
4d734714dd fix group preview update 2022-09-30 18:33:33 -04:00
Barış Soner Uşaklı
8ffc1c3e96 feat: add btnClass to membershipBtn helper 2022-09-30 12:05:04 -04:00
Barış Soner Uşaklı
0f2bd3e6ec use form control 2022-09-29 22:41:05 -04:00
Barış Soner Uşaklı
af190ac210 fix tagsinput to look like bs5 inputs 2022-09-29 22:26:10 -04:00
Barış Soner Uşaklı
21236fdc37 restore scroll position after adding necro messages 2022-09-29 19:32:08 -04:00
Julian Lam
dc0b3753d8 refactor: buildAvatar attributes to be Map instead of array of strings, to allow for easier overwriting 2022-09-29 16:28:58 -04:00
Julian Lam
d68806db1b fix: remove user avatar on error out 2022-09-29 16:28:58 -04:00
Julian Lam
ab157136aa refactor: helpers.buildAvatar now renders both avatars, and hides the second one using CSS 2022-09-29 16:28:58 -04:00
Barış Soner Uşaklı
f58e1cda30 fix: tag update only the edited post 2022-09-29 16:16:15 -04:00
Barış Soner Uşaklı
375dad8961 fix: navigator not properly updating url
remove threshold not used anymore
2022-09-29 15:13:05 -04:00
Barış Soner Uşaklı
5dc74abcf1 chore: add account lang string 2022-09-29 15:07:01 -04:00
Barış Soner Uşaklı
9c97211d8d lighter icons 2022-09-29 13:13:18 -04:00
Barış Soner Uşaklı
80c1ce8d85 fix: if no voters clear tooltip 2022-09-29 12:51:50 -04:00
Barış Soner Uşaklı
4c86c767b1 fix: bgColor not changing on picture modal 2022-09-29 12:36:49 -04:00
Barış Soner Uşaklı
b0a98e7f12 breaking: move/rename change_picture_modal to core 2022-09-29 12:30:54 -04:00
Barış Soner Uşaklı
daaa93b6e4 feat: add action:unread.updateCount 2022-09-29 10:42:32 -04:00
Barış Soner Uşaklı
a970c615fb feat: add action:chat.updateCount client side hook 2022-09-29 09:21:13 -04:00
Barış Soner Uşaklı
58cecafb34 breaking: use components instead of ids for search
breaking: remove deprecated app.search methods
allow having multiple search forms in the page
2022-09-28 12:01:31 -04:00
Barış Soner Uşaklı
092bdd9f22 fix: dynamic tooltips 2022-09-27 22:27:40 -04:00
Barış Soner Uşaklı
75eea53c4b feat: add buildCategoryIcon helper
similar to buildAvatar
2022-09-27 21:32:12 -04:00
Julian Lam
d45a34fdb8 test: fix tests so that when user.create is called, email is set prior to confirmation 2022-09-27 14:34:01 -04:00
Julian Lam
91849efde1 fix: #10805, do not set email field in user hash on user creation 2022-09-27 14:34:01 -04:00
Julian Lam
5a39fc2548 chore: remove passport.authenticate wrapper that passed in keepSessionInfo option [breaking] 2022-09-27 13:42:01 -04:00
Julian Lam
ee77ce0789 chore: remove deprecated socket.io user export methods [breaking] 2022-09-27 13:34:00 -04:00
Julian Lam
1d63fc469a chore: remove deprecated old routes for user data exports [breaking] 2022-09-27 11:23:52 -04:00
Julian Lam
a6f8ff440a fix: move alert.tpl to partials/toast.tpl 2022-09-27 10:39:46 -04:00
Barış Soner Uşaklı
7118cfa433 chore: up deps 2022-09-24 22:10:05 -04:00
Barış Soner Uşaklı
67b488aa7d add changeSkin calls to settings
add templateData to header/footer to match other filter:<tpl>:build hooks
2022-09-24 14:49:11 -04:00
Barış Soner Uşaklı
e9bd46592b use bs class for necro post 2022-09-24 14:46:30 -04:00
Barış Soner Uşaklı
1a2ad81471 fix: tool dropdown 2022-09-24 00:11:22 -04:00
Barış Soner Uşaklı
90b6d593fc give post tool dropdown min-height
it starts empty since its rendered after clicking the toggle
2022-09-24 00:03:20 -04:00
Barış Soner Uşaklı
f5d30d83c6 breaking: move some modals to core 2022-09-23 20:15:37 -04:00
Barış Soner Uşaklı
1aa916feb2 feat: allow merge from inside topic 2022-09-23 14:43:04 -04:00
Barış Soner Uşaklı
9e0f100d36 match other tool labels 2022-09-23 14:38:07 -04:00
Barış Soner Uşaklı
d1417609dd feat: allow logout button anywhere 2022-09-23 12:55:02 -04:00
Barış Soner Uşaklı
9510cc540a breaking: remove renderTopicEvents
use partial template
2022-09-23 10:56:15 -04:00
Barış Soner Uşaklı
0930934200 feat: add relevant topic events to post objects
see c9604f216a
2022-09-23 10:49:50 -04:00
Barış Soner Uşaklı
21e38d9e45 fix: scroll to post if theme doesn't have top navbar 2022-09-23 09:16:39 -04:00
Barış Soner Uşaklı
a5d4e6b68a fix another avatar 2022-09-22 21:03:56 -04:00
Barış Soner Uşaklı
48021c0b0a feat: allow always visible search input
if the search input is already visible do not hide it after it loses focus
2022-09-22 21:03:51 -04:00
Barış Soner Uşaklı
9f72f84775 fix: img-fluid 2022-09-22 15:43:42 -04:00
Barış Soner Uşaklı
179faa2270 fix: add missing post index 2022-09-22 12:31:25 -04:00
Barış Soner Uşaklı
c3920ccb10 feat: add the user of the post to category teaser 2022-09-22 12:23:34 -04:00
Barış Soner Uşaklı
cc4d320111 persona 2022-09-21 22:26:26 -04:00
Barış Soner Uşaklı
6b4e00fd47 test: fix profile pic test 2022-09-21 13:01:00 -04:00
Barış Soner Uşaklı
bfb63061c7 test: fix theme test 2022-09-21 12:49:15 -04:00
Barış Soner Uşaklı
e607c622b3 drop socket.io version 2022-09-21 12:40:34 -04:00
Barış Soner Uşaklı
ed9172d757 Merge branch 'bootstrap5' of https://github.com/NodeBB/NodeBB into bootstrap5 2022-09-21 12:31:00 -04:00
Barış Soner Uşaklı
375cd3202a chore: up deps 2022-09-21 12:30:59 -04:00
Julian Lam
dcfcc5ea2c Merge remote-tracking branch 'origin/develop' into bootstrap5 2022-09-21 12:12:27 -04:00
Barış Soner Uşaklı
0997fc626c chore: up deps 2022-09-21 10:33:12 -04:00
Barış Soner Uşaklı
0e3c8a201a up deps 2022-09-21 10:02:32 -04:00
Barış Soner Uşaklı
53d830d87e add max to cache 2022-09-21 09:52:16 -04:00
Barış Soner Uşaklı
be33752ba6 fix admin reconnect icon 2022-09-21 09:48:56 -04:00
Barış Soner Uşaklı
b2c3fcaaf5 increase webpack size limits 2022-09-20 21:11:08 -04:00
Barış Soner Uşaklı
ce2d180a23 remove extra param 2022-09-17 22:10:17 -04:00
Barış Soner Uşaklı
75dc78b738 perf: ltr/rtl change
fix modals
2022-09-17 21:32:31 -04:00
Julian Lam
25d1560dd1 fix(deps): bump mentions to v4 2022-09-16 21:29:00 -04:00
Julian Lam
f1c5adbf00 fix(deps): update to v3.0 compatible markdown and 2factor plugins 2022-09-16 21:13:38 -04:00
Barış Soner Uşaklı
37027003b5 fix grunt 2022-09-15 16:40:32 -04:00
Barış Soner Uşaklı
c7da128ecd fix: #10895, build client/adminCSS in single call 2022-09-15 14:45:11 -04:00
Barış Soner Uşaklı
11cf4fb144 widget changes 2022-09-15 14:29:59 -04:00
Barış Soner Uşaklı
916759b802 test: build test fix 2022-09-15 10:10:03 -04:00
Barış Soner Uşaklı
0bd96ab582 lint: remove less 2022-09-15 09:54:27 -04:00
Barış Soner Uşaklı
4cbfe33714 remove less 2022-09-15 09:31:53 -04:00
Barış Soner Uşaklı
e8d8b65b80 remove blue bg 2022-09-14 16:15:39 -04:00
Barış Soner Uşaklı
65cfbef567 update findBootstrapEnv, remove dupe functions 2022-09-14 15:59:27 -04:00
Julian Lam
f1817efe5d fix: add back timeago to post history modal 2022-09-14 13:19:06 -04:00
Julian Lam
bca239c476 fix: some small modal bugs with change picture modal 2022-09-14 13:04:50 -04:00
Julian Lam
5d332ea052 fix: have width and height defined in user-icon-style mixin 2022-09-14 11:05:51 -04:00
Barış Soner Uşaklı
9932a0dd1a fix text-right 2022-09-13 22:13:33 -04:00
Barış Soner Uşaklı
41b371c53c avatar fixes 2022-09-13 20:48:29 -04:00
Barış Soner Uşaklı
ba75be47ae div>span 2022-09-13 19:40:41 -04:00
Julian Lam
f75838c906 refactor: buildAvatar helper to take css variable for size instead of hardcoded xs, sm, etc., fixed up picture selection modal 2022-09-13 15:19:52 -04:00
Barış Soner Uşaklı
6bffe519b3 bs5 rtl support 2022-09-13 14:11:55 -04:00
Barış Soner Uşaklı
541ab312d5 margins 2022-09-13 11:17:59 -04:00
Barış Soner Uşaklı
d23b9563c8 modal fix 2022-09-13 11:10:20 -04:00
Barış Soner Uşaklı
7c5690cc49 match fontsize/body color 2022-09-13 10:54:03 -04:00
Barış Soner Uşaklı
f865f00ecb buttons no longer reversed 2022-09-13 10:44:08 -04:00
Barış Soner Uşaklı
775971d19b btn sizes 2022-09-13 10:37:00 -04:00
Barış Soner Uşaklı
c61935bb96 fix: typo 2022-09-13 10:26:07 -04:00
Barış Soner Uşaklı
b25a0769d5 fix privilege filters 2022-09-13 10:17:41 -04:00
Barış Soner Uşaklı
d2e972cf6c switch to scss in customCSS 2022-09-13 09:37:24 -04:00
Barış Soner Uşaklı
401aaf1757 fix floats 2022-09-12 18:34:37 -04:00
Barış Soner Uşaklı
1df99a4727 Merge branch 'bootstrap5' of https://github.com/NodeBB/NodeBB into bootstrap5 2022-09-12 17:14:58 -04:00
Barış Soner Uşaklı
5d7dbafb1d inherit works better if category search is inside a hidden element
like the composer
2022-09-12 17:14:57 -04:00
Julian Lam
57ff967ab0 Merge remote-tracking branch 'origin/develop' into bootstrap5 2022-09-12 16:57:02 -04:00
Barış Soner Uşaklı
91d1cbb5dc remove unnecessary tooltip calls 2022-09-11 21:59:47 -04:00
Barış Soner Uşaklı
a94cc877c4 tooltip fixes 2022-09-11 21:49:30 -04:00
Barış Soner Uşaklı
0512992afc remove search&dropdown tooltips 2022-09-11 20:07:04 -04:00
Barış Soner Uşaklı
8dde53c7af fix navlink active 2022-09-11 20:01:24 -04:00
Barış Soner Uşaklı
ff7c57f7bf fix: fa icon picker, help-block => form-text 2022-09-11 00:05:42 -04:00
Barış Soner Uşaklı
bdd02b72de fa shims and fix fonts 2022-09-10 20:50:13 -04:00
Barış Soner Uşaklı
9b30fc1680 fix panels 2022-09-10 20:13:45 -04:00
Barış Soner Uşaklı
9d7c1073d3 search padding 2022-09-09 14:08:10 -04:00
Barış Soner Uşaklı
527834a555 remove margin 2022-09-09 13:51:42 -04:00
Barış Soner Uşaklı
825538d5a9 acp header fix 2022-09-09 13:50:09 -04:00
Barış Soner Uşaklı
1510baa9a6 fix floating button zindex 2022-09-09 13:25:04 -04:00
Barış Soner Uşaklı
d3bd9f4697 partials and btn fixes 2022-09-09 12:36:18 -04:00
Barış Soner Uşaklı
2c1f920b6d fix col-xs-<> classes 2022-09-08 21:20:50 -04:00
Barış Soner Uşaklı
89aa9fb212 acp advanced pages 2022-09-08 21:06:23 -04:00
Barış Soner Uşaklı
9f9c9c6a66 plugins/rewards/widgets/skins/customize
modal fixes
2022-09-07 20:36:32 -04:00
Barış Soner Uşaklı
48207bc2a2 advanced/api/web-crawler pages 2022-09-03 22:34:58 -04:00
Barış Soner Uşaklı
ce9bcba16d feat: paper skin got renamed to materia 2022-09-03 22:11:18 -04:00
Barış Soner Uşaklı
b9de84e5bf email/post/uploads settings pages 2022-09-02 19:39:00 -04:00
Barış Soner Uşaklı
22e478307d cookies/reputation/user pages 2022-09-02 12:56:58 -04:00
Barış Soner Uşaklı
8cf64ff9ce feat: navigation 2022-09-02 12:26:38 -04:00
Barış Soner Uşaklı
75494011e1 more admin settings pages 2022-09-01 19:05:41 -04:00
Barış Soner Uşaklı
75506250e1 more manage pages 2022-09-01 18:00:44 -04:00
Barış Soner Uşaklı
d06938d877 groups/tags 2022-08-31 17:49:28 -04:00
Julian Lam
4eb71b1284 fix: update .avatar generic to use line-height and font-size variables, instead of hardcoded values 2022-08-31 17:14:11 -04:00
Barış Soner Uşaklı
3f4e5bb9a8 users page 2022-08-31 14:55:50 -04:00
Barış Soner Uşaklı
0ad61c53ae privileges 2022-08-31 14:30:55 -04:00
Barış Soner Uşaklı
a45131ab0e dashboard header fix 2022-08-30 20:41:33 -04:00
Barış Soner Uşaklı
cddc2c0b76 feat: update categories/category pages
fix dropdowns
2022-08-30 20:13:51 -04:00
Barış Soner Uşaklı
1930db6086 dashboard/nav fixes 2022-08-29 15:59:38 -04:00
Barış Soner Uşaklı
1cea5ab8c4 admin menu fixes 2022-08-29 15:36:50 -04:00
Barış Soner Uşaklı
30b999c16f Merge branch 'develop' into bootstrap5 2022-08-29 14:55:06 -04:00
Barış Soner Uşaklı
9260b4ef19 add missing pointer class 2022-08-26 19:41:10 -04:00
Barış Soner Uşaklı
dc231bf3b3 fix: dont hide dropdowns 2022-08-26 18:41:10 -04:00
Barış Soner Uşaklı
1b539fd0ff Merge branch 'master' into bootstrap5 2022-08-26 18:39:39 -04:00
Barış Soner Uşaklı
635cc1ffdf get rid of old grays and brand colors 2022-08-26 18:35:54 -04:00
Barış Soner Uşaklı
18b9a7afe1 change fa-stack 2022-08-25 22:17:47 -04:00
Barış Soner Uşaklı
5ad7c89803 fix taginput for bs5 2022-08-25 19:56:36 -04:00
Barış Soner Uşaklı
c4393af8c0 feat: add the same timeout to blur 2022-08-25 19:18:06 -04:00
Barış Soner Uşaklı
da75b07add feat: remove shadow mixin, dont highlight single letters 2022-08-25 15:12:51 -04:00
Barış Soner Uşaklı
bed8d97840 feat: add new_password key 2022-08-25 10:46:10 -04:00
Barış Soner Uşaklı
fecc4f948a feat: use visibility hidden for search button 2022-08-24 19:29:38 -04:00
Barış Soner Uşaklı
d5d4c1b3ed fix crash 2022-08-24 16:39:29 -04:00
Barış Soner Uşaklı
f2bd8e22d7 remove hidden 2022-08-24 11:17:40 -04:00
Barış Soner Uşaklı
d7a29a3df2 bs5 import 2022-08-24 10:27:15 -04:00
Barış Soner Uşaklı
f7f7066286 feat: add new bootswatch skins 2022-08-24 10:21:21 -04:00
Barış Soner Uşaklı
c6436bc542 fix: users navpills 2022-08-24 09:48:56 -04:00
Barış Soner Uşaklı
b50f662d45 skin support, correct order of imports for overrides 2022-08-23 19:30:31 -04:00
Barış Soner Uşaklı
62ec61e00c fix: category dropdown search 2022-08-23 16:39:33 -04:00
Barış Soner Uşaklı
0fb0745613 feat: bring back responsive-utilities 2022-08-23 12:05:33 -04:00
Barış Soner Uşaklı
eadeb42e57 fix: move fontawesome before theme 2022-08-22 19:01:17 -04:00
Barış Soner Uşaklı
c674422205 refactor: order of scss files 2022-08-22 14:29:41 -04:00
Barış Soner Uşaklı
0042307234 fix: sass division warnings 2022-08-22 13:54:47 -04:00
Barış Soner Uşaklı
288e6260ef refactor: remove unused url 2022-08-22 13:16:25 -04:00
Barış Soner Uşaklı
11c7a02aaf refactor: fixPath 2022-08-22 13:14:05 -04:00
Barış Soner Uşaklı
196d22be16 bs5 prep 2022-08-22 12:56:46 -04:00
Barış Soner Uşaklı
2a8f1e4cba add fa scss 2022-08-22 11:15:25 -04:00
Barış Soner Uşaklı
58141f603b bs5 2022-08-22 11:14:22 -04:00
3549 changed files with 48695 additions and 73496 deletions

View File

@@ -1,10 +0,0 @@
.*
logs
test
node_modules
commitlint.config.js
nodebb.bat
renovate.json
*.yml
*.md
Dockerfile

View File

@@ -18,4 +18,3 @@ logs/
.eslintrc .eslintrc
test/files test/files
*.min.js *.min.js
install/docker/

View File

@@ -13,49 +13,42 @@ on:
# A workflow run is made up of one or more jobs that can run sequentially or in parallel # A workflow run is made up of one or more jobs that can run sequentially or in parallel
permissions: permissions:
contents: read contents: read
packages: write
jobs: jobs:
release: release:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v2
with: with:
fetch-depth: 0 fetch-depth: 0
- name: Set up QEMU - name: Set up QEMU
uses: docker/setup-qemu-action@v3 uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx - name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3 uses: docker/setup-buildx-action@v2
- name: Login to GitHub Container Registry - name: Login to Docker Hub
uses: docker/login-action@v3 uses: docker/login-action@v2
with: with:
registry: ghcr.io username: ${{ secrets.DOCKERHUB_USERNAME }}
username: ${{ github.repository_owner }} password: ${{ secrets.DOCKERHUB_TOKEN }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Docker meta - name: Docker meta
id: meta id: meta
uses: docker/metadata-action@v5 uses: docker/metadata-action@v4
with: with:
images: ghcr.io/${{ github.repository }} images: nodebb/docker
tags: | tags: |
type=semver,pattern={{version}} type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}} type=semver,pattern={{major}}.{{minor}}
type=semver,pattern={{major}}.x type=raw,value=latest
type=raw,value=latest,enable={{is_default_branch}}
type=ref,event=branch,enable=${{ github.event.repository.default_branch != github.ref }}
- name: Build and push Docker images - name: Build and push Docker images
uses: docker/build-push-action@v5 uses: docker/build-push-action@v3
with: with:
cache-from: type=gha
cache-to: type=gha,mode=max
context: . context: .
file: ./Dockerfile file: ./Dockerfile
platforms: linux/amd64,linux/arm64,linux/arm/v7
push: true push: true
tags: ${{ steps.meta.outputs.tags }} tags: ${{ steps.meta.outputs.tags }}

View File

@@ -5,10 +5,12 @@ on:
branches: branches:
- master - master
- develop - develop
- bootstrap5
pull_request: pull_request:
branches: branches:
- master - master
- develop - develop
- bootstrap5
defaults: defaults:
run: run:
@@ -27,19 +29,19 @@ jobs:
fail-fast: false fail-fast: false
matrix: matrix:
os: [ubuntu-latest] os: [ubuntu-latest]
node: [18, 20] node: [14, 16, 18]
database: [mongo-dev, mongo, redis, postgres] database: [mongo-dev, mongo, redis, postgres]
include: include:
# only run coverage once # only run coverage once
- os: ubuntu-latest - os: ubuntu-latest
node: 18 node: 14
coverage: true coverage: true
# test under development once # test under development once
- database: mongo-dev - database: mongo-dev
test_env: development test_env: development
# only run eslint once # only run eslint once
- os: ubuntu-latest - os: ubuntu-latest
node: 18 node: 14
database: mongo-dev database: mongo-dev
lint: true lint: true
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
@@ -48,7 +50,7 @@ jobs:
services: services:
postgres: postgres:
image: 'postgres:16-alpine' image: 'postgres:14-alpine'
env: env:
POSTGRES_USER: postgres POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres POSTGRES_PASSWORD: postgres
@@ -63,7 +65,7 @@ jobs:
- 5432:5432 - 5432:5432
redis: redis:
image: 'redis:7.2.3' image: 'redis:2.8.23'
# Set health checks to wait until redis has started # Set health checks to wait until redis has started
options: >- options: >-
--health-cmd "redis-cli ping" --health-cmd "redis-cli ping"
@@ -75,18 +77,18 @@ jobs:
- 6379:6379 - 6379:6379
mongo: mongo:
image: 'mongo:7.0' image: 'mongo:3.7'
ports: ports:
# Maps port 27017 on service container to the host # Maps port 27017 on service container to the host
- 27017:27017 - 27017:27017
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v2
- run: cp install/package.json package.json - run: cp install/package.json package.json
- name: Install Node - name: Install Node
uses: actions/setup-node@v4 uses: actions/setup-node@v2
with: with:
node-version: ${{ matrix.node }} node-version: ${{ matrix.node }}
@@ -192,7 +194,7 @@ jobs:
run: npm run coverage run: npm run coverage
- name: Test coverage - name: Test coverage
uses: coverallsapp/github-action@3dfc5567390f6fa9267c0ee9c251e4c8c3f18949 # v2.2.3 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 }}
@@ -206,7 +208,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Coveralls Finished - name: Coveralls Finished
uses: coverallsapp/github-action@3dfc5567390f6fa9267c0ee9c251e4c8c3f18949 # v2.2.3 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

2
.gitignore vendored
View File

@@ -70,5 +70,3 @@ package-lock.json
*.mongodb *.mongodb
link-plugins.sh link-plugins.sh
test.sh test.sh
.docker/

View File

@@ -2445,110 +2445,6 @@ trans.bn = public/language/bn/admin/settings/web-crawler.json
trans.pt_PT = public/language/pt-PT/admin/settings/web-crawler.json trans.pt_PT = public/language/pt-PT/admin/settings/web-crawler.json
trans.sc = public/language/sc/admin/settings/web-crawler.json trans.sc = public/language/sc/admin/settings/web-crawler.json
[o:nodebb:p:nodebb:r:themes-harmony]
file_filter = public/language/<lang>/themes/harmony.json
source_file = public/language/en-GB/themes/harmony.json
source_lang = en_GB
type = KEYVALUEJSON
trans.th = public/language/th/themes/harmony.json
trans.bg = public/language/bg/themes/harmony.json
trans.hr = public/language/hr/themes/harmony.json
trans.hy = public/language/hy/themes/harmony.json
trans.sk = public/language/sk/themes/harmony.json
trans.sl = public/language/sl/themes/harmony.json
trans.sq_AL = public/language/sq-AL/themes/harmony.json
trans.sv = public/language/sv/themes/harmony.json
trans.vi = public/language/vi/themes/harmony.json
trans.da = public/language/da/themes/harmony.json
trans.en_US = public/language/en-US/themes/harmony.json
trans.gl = public/language/gl/themes/harmony.json
trans.ko = public/language/ko/themes/harmony.json
trans.lt = public/language/lt/themes/harmony.json
trans.pt_BR = public/language/pt-BR/themes/harmony.json
trans.hu = public/language/hu/themes/harmony.json
trans.lv = public/language/lv/themes/harmony.json
trans.ro = public/language/ro/themes/harmony.json
trans.ru = public/language/ru/themes/harmony.json
trans.sr = public/language/sr/themes/harmony.json
trans.bn = public/language/bn/themes/harmony.json
trans.he = public/language/he/themes/harmony.json
trans.nl = public/language/nl/themes/harmony.json
trans.sc = public/language/sc/themes/harmony.json
trans.zh_CN = public/language/zh-CN/themes/harmony.json
trans.fi = public/language/fi/themes/harmony.json
trans.ja = public/language/ja/themes/harmony.json
trans.nb = public/language/nb/themes/harmony.json
trans.pl = public/language/pl/themes/harmony.json
trans.zh_TW = public/language/zh-TW/themes/harmony.json
trans.ar = public/language/ar/themes/harmony.json
trans.cs = public/language/cs/themes/harmony.json
trans.fa_IR = public/language/fa-IR/themes/harmony.json
trans.ms = public/language/ms/themes/harmony.json
trans.pt_PT = public/language/pt-PT/themes/harmony.json
trans.tr = public/language/tr/themes/harmony.json
trans.en@pirate = public/language/en-x-pirate/themes/harmony.json
trans.fr = public/language/fr/themes/harmony.json
trans.id = public/language/id/themes/harmony.json
trans.uk = public/language/uk/themes/harmony.json
trans.de = public/language/de/themes/harmony.json
trans.el = public/language/el/themes/harmony.json
trans.es = public/language/es/themes/harmony.json
trans.et = public/language/et/themes/harmony.json
trans.it = public/language/it/themes/harmony.json
trans.rw = public/language/rw/themes/harmony.json
[o:nodebb:p:nodebb:r:themes-persona]
file_filter = public/language/<lang>/themes/persona.json
source_file = public/language/en-GB/themes/persona.json
source_lang = en_GB
type = KEYVALUEJSON
trans.th = public/language/th/themes/persona.json
trans.bg = public/language/bg/themes/persona.json
trans.hr = public/language/hr/themes/persona.json
trans.hy = public/language/hy/themes/persona.json
trans.sk = public/language/sk/themes/persona.json
trans.sl = public/language/sl/themes/persona.json
trans.sq_AL = public/language/sq-AL/themes/persona.json
trans.sv = public/language/sv/themes/persona.json
trans.vi = public/language/vi/themes/persona.json
trans.da = public/language/da/themes/persona.json
trans.en_US = public/language/en-US/themes/persona.json
trans.gl = public/language/gl/themes/persona.json
trans.ko = public/language/ko/themes/persona.json
trans.lt = public/language/lt/themes/persona.json
trans.pt_BR = public/language/pt-BR/themes/persona.json
trans.hu = public/language/hu/themes/persona.json
trans.lv = public/language/lv/themes/persona.json
trans.ro = public/language/ro/themes/persona.json
trans.ru = public/language/ru/themes/persona.json
trans.sr = public/language/sr/themes/persona.json
trans.bn = public/language/bn/themes/persona.json
trans.he = public/language/he/themes/persona.json
trans.nl = public/language/nl/themes/persona.json
trans.sc = public/language/sc/themes/persona.json
trans.zh_CN = public/language/zh-CN/themes/persona.json
trans.fi = public/language/fi/themes/persona.json
trans.ja = public/language/ja/themes/persona.json
trans.nb = public/language/nb/themes/persona.json
trans.pl = public/language/pl/themes/persona.json
trans.zh_TW = public/language/zh-TW/themes/persona.json
trans.ar = public/language/ar/themes/persona.json
trans.cs = public/language/cs/themes/persona.json
trans.fa_IR = public/language/fa-IR/themes/persona.json
trans.ms = public/language/ms/themes/persona.json
trans.pt_PT = public/language/pt-PT/themes/persona.json
trans.tr = public/language/tr/themes/persona.json
trans.en@pirate = public/language/en-x-pirate/themes/persona.json
trans.fr = public/language/fr/themes/persona.json
trans.id = public/language/id/themes/persona.json
trans.uk = public/language/uk/themes/persona.json
trans.de = public/language/de/themes/persona.json
trans.el = public/language/el/themes/persona.json
trans.es = public/language/es/themes/persona.json
trans.et = public/language/et/themes/persona.json
trans.it = public/language/it/themes/persona.json
trans.rw = public/language/rw/themes/persona.json
[o:nodebb:p:nodebb:r:category] [o:nodebb:p:nodebb:r:category]
file_filter = public/language/<lang>/category.json file_filter = public/language/<lang>/category.json
source_file = public/language/en-GB/category.json source_file = public/language/en-GB/category.json
@@ -3380,58 +3276,6 @@ trans.pl = public/language/pl/reset_password.json
trans.sl = public/language/sl/reset_password.json trans.sl = public/language/sl/reset_password.json
trans.th = public/language/th/reset_password.json trans.th = public/language/th/reset_password.json
[o:nodebb:p:nodebb:r:rewards]
file_filter = public/language/<lang>/rewards.json
source_file = public/language/en-GB/rewards.json
source_lang = en_GB
type = KEYVALUEJSON
trans.bg = public/language/bg/rewards.json
trans.fr = public/language/fr/rewards.json
trans.hr = public/language/hr/rewards.json
trans.hy = public/language/hy/rewards.json
trans.ja = public/language/ja/rewards.json
trans.pt_PT = public/language/pt-PT/rewards.json
trans.zh_CN = public/language/zh-CN/rewards.json
trans.sv = public/language/sv/rewards.json
trans.de = public/language/de/rewards.json
trans.fa_IR = public/language/fa-IR/rewards.json
trans.gl = public/language/gl/rewards.json
trans.hu = public/language/hu/rewards.json
trans.id = public/language/id/rewards.json
trans.rw = public/language/rw/rewards.json
trans.sc = public/language/sc/rewards.json
trans.vi = public/language/vi/rewards.json
trans.bn = public/language/bn/rewards.json
trans.he = public/language/he/rewards.json
trans.ro = public/language/ro/rewards.json
trans.sq_AL = public/language/sq-AL/rewards.json
trans.ar = public/language/ar/rewards.json
trans.cs = public/language/cs/rewards.json
trans.ko = public/language/ko/rewards.json
trans.ms = public/language/ms/rewards.json
trans.pt_BR = public/language/pt-BR/rewards.json
trans.sr = public/language/sr/rewards.json
trans.tr = public/language/tr/rewards.json
trans.ru = public/language/ru/rewards.json
trans.zh_TW = public/language/zh-TW/rewards.json
trans.da = public/language/da/rewards.json
trans.en@pirate = public/language/en-x-pirate/rewards.json
trans.en_US = public/language/en-US/rewards.json
trans.lt = public/language/lt/rewards.json
trans.lv = public/language/lv/rewards.json
trans.nb = public/language/nb/rewards.json
trans.sk = public/language/sk/rewards.json
trans.el = public/language/el/rewards.json
trans.es = public/language/es/rewards.json
trans.et = public/language/et/rewards.json
trans.uk = public/language/uk/rewards.json
trans.fi = public/language/fi/rewards.json
trans.it = public/language/it/rewards.json
trans.nl = public/language/nl/rewards.json
trans.pl = public/language/pl/rewards.json
trans.sl = public/language/sl/rewards.json
trans.th = public/language/th/rewards.json
[o:nodebb:p:nodebb:r:search] [o:nodebb:p:nodebb:r:search]
file_filter = public/language/<lang>/search.json file_filter = public/language/<lang>/search.json
source_file = public/language/en-GB/search.json source_file = public/language/en-GB/search.json
@@ -3484,58 +3328,6 @@ trans.et = public/language/et/search.json
trans.hy = public/language/hy/search.json trans.hy = public/language/hy/search.json
trans.lt = public/language/lt/search.json trans.lt = public/language/lt/search.json
[o:nodebb:p:nodebb:r:social]
file_filter = public/language/<lang>/social.json
source_file = public/language/en-GB/social.json
source_lang = en_GB
type = KEYVALUEJSON
trans.da = public/language/da/social.json
trans.en_US = public/language/en-US/social.json
trans.ms = public/language/ms/social.json
trans.hr = public/language/hr/social.json
trans.hu = public/language/hu/social.json
trans.id = public/language/id/social.json
trans.bg = public/language/bg/social.json
trans.de = public/language/de/social.json
trans.en@pirate = public/language/en-x-pirate/social.json
trans.fa_IR = public/language/fa-IR/social.json
trans.fi = public/language/fi/social.json
trans.sc = public/language/sc/social.json
trans.sk = public/language/sk/social.json
trans.sl = public/language/sl/social.json
trans.sq_AL = public/language/sq-AL/social.json
trans.sr = public/language/sr/social.json
trans.bn = public/language/bn/social.json
trans.ja = public/language/ja/social.json
trans.ko = public/language/ko/social.json
trans.pl = public/language/pl/social.json
trans.ro = public/language/ro/social.json
trans.zh_TW = public/language/zh-TW/social.json
trans.cs = public/language/cs/social.json
trans.he = public/language/he/social.json
trans.nb = public/language/nb/social.json
trans.zh_CN = public/language/zh-CN/social.json
trans.lv = public/language/lv/social.json
trans.rw = public/language/rw/social.json
trans.sv = public/language/sv/social.json
trans.ru = public/language/ru/social.json
trans.tr = public/language/tr/social.json
trans.uk = public/language/uk/social.json
trans.el = public/language/el/social.json
trans.fr = public/language/fr/social.json
trans.gl = public/language/gl/social.json
trans.it = public/language/it/social.json
trans.pt_BR = public/language/pt-BR/social.json
trans.nl = public/language/nl/social.json
trans.pt_PT = public/language/pt-PT/social.json
trans.th = public/language/th/social.json
trans.vi = public/language/vi/social.json
trans.ar = public/language/ar/social.json
trans.es = public/language/es/social.json
trans.et = public/language/et/social.json
trans.hy = public/language/hy/social.json
trans.lt = public/language/lt/social.json
[o:nodebb:p:nodebb:r:success] [o:nodebb:p:nodebb:r:success]
file_filter = public/language/<lang>/success.json file_filter = public/language/<lang>/success.json
source_file = public/language/en-GB/success.json source_file = public/language/en-GB/success.json

File diff suppressed because it is too large Load Diff

View File

@@ -1,51 +1,25 @@
FROM --platform=$BUILDPLATFORM node:lts as npm FROM node:lts
RUN mkdir -p /usr/src/build && \ RUN mkdir -p /usr/src/app && \
chown -R node:node /usr/src/build chown -R node:node /usr/src/app
WORKDIR /usr/src/build WORKDIR /usr/src/app
ARG NODE_ENV ARG NODE_ENV
ENV NODE_ENV $NODE_ENV ENV NODE_ENV $NODE_ENV
COPY --chown=node:node install/package.json /usr/src/build/package.json COPY --chown=node:node install/package.json /usr/src/app/package.json
USER node USER node
RUN npm install --omit=dev RUN npm install --only=prod && \
npm cache clean --force
FROM node:lts as rebuild
ARG BUILDPLATFORM
ARG TARGETPLATFORM
RUN mkdir -p /usr/src/build && \
chown -R node:node /usr/src/build
COPY --from=npm /usr/src/build /usr/src/build
RUN if [ $BUILDPLATFORM != $TARGETPLATFORM ]; then \
npm rebuild && \
npm cache clean --force; fi
FROM node:lts-slim as run
ARG NODE_ENV
ENV NODE_ENV=$NODE_ENV \
daemon=false \
silent=false
RUN mkdir -p /usr/src/app && \
chown -R node:node /usr/src/app
COPY --chown=node:node --from=rebuild /usr/src/build /usr/src/app
WORKDIR /usr/src/app
USER node
COPY --chown=node:node . /usr/src/app COPY --chown=node:node . /usr/src/app
ENV NODE_ENV=production \
daemon=false \
silent=false
EXPOSE 4567 EXPOSE 4567
VOLUME ["/usr/src/app/node_modules", "/usr/src/app/build", "/usr/src/app/public/uploads", "/opt/config"]
ENTRYPOINT ["./install/docker/entrypoint.sh"] CMD test -n "${SETUP}" && ./nodebb setup || node ./nodebb build; node ./nodebb start

View File

@@ -49,8 +49,8 @@ module.exports = function (grunt) {
if (!pluginList.includes('nodebb-plugin-composer-default')) { if (!pluginList.includes('nodebb-plugin-composer-default')) {
pluginList.push('nodebb-plugin-composer-default'); pluginList.push('nodebb-plugin-composer-default');
} }
if (!pluginList.includes('nodebb-theme-harmony')) { if (!pluginList.includes('nodebb-theme-persona')) {
pluginList.push('nodebb-theme-harmony'); pluginList.push('nodebb-theme-persona');
} }
} }
@@ -65,7 +65,7 @@ module.exports = function (grunt) {
const templatesUpdated = pluginList.map(p => `node_modules/${p}/+(public|static|templates)/**/*.tpl`); const templatesUpdated = pluginList.map(p => `node_modules/${p}/+(public|static|templates)/**/*.tpl`);
const langUpdated = pluginList.map(p => `node_modules/${p}/+(public|static|languages)/**/*.json`); const langUpdated = pluginList.map(p => `node_modules/${p}/+(public|static|languages)/**/*.json`);
const interval = 100;
grunt.config(['watch'], { grunt.config(['watch'], {
styleUpdated: { styleUpdated: {
files: [ files: [
@@ -73,7 +73,7 @@ module.exports = function (grunt) {
...styleUpdated_Client, ...styleUpdated_Client,
], ],
options: { options: {
interval: interval, interval: 1000,
}, },
}, },
clientUpdated: { clientUpdated: {
@@ -84,7 +84,7 @@ module.exports = function (grunt) {
'node_modules/benchpressjs/build/benchpress.js', 'node_modules/benchpressjs/build/benchpress.js',
], ],
options: { options: {
interval: interval, interval: 1000,
}, },
}, },
serverUpdated: { serverUpdated: {
@@ -99,7 +99,7 @@ module.exports = function (grunt) {
'!src/upgrades/**', '!src/upgrades/**',
], ],
options: { options: {
interval: interval, interval: 1000,
}, },
}, },
templatesUpdated: { templatesUpdated: {
@@ -108,7 +108,7 @@ module.exports = function (grunt) {
...templatesUpdated, ...templatesUpdated,
], ],
options: { options: {
interval: interval, interval: 1000,
}, },
}, },
langUpdated: { langUpdated: {
@@ -118,7 +118,7 @@ module.exports = function (grunt) {
...langUpdated, ...langUpdated,
], ],
options: { options: {
interval: interval, interval: 1000,
}, },
}, },
}); });

View File

@@ -24,14 +24,17 @@ NodeBB's theming engine is highly flexible and does not restrict your design cho
[![](http://i.imgur.com/LmHtPhob.png)](http://i.imgur.com/LmHtPho.png) [![](http://i.imgur.com/LmHtPhob.png)](http://i.imgur.com/LmHtPho.png)
[![](http://i.imgur.com/paiJPJkb.jpg)](http://i.imgur.com/paiJPJk.jpg) [![](http://i.imgur.com/paiJPJkb.jpg)](http://i.imgur.com/paiJPJk.jpg)
Our minimalist "Harmony" theme gets you going right away, no coding experience required. Our minimalist "Persona" theme gets you going right away, no coding experience required.
[![](http://i.imgur.com/HwNEXGu.png)](http://i.imgur.com/HwNEXGu.png)
[![](http://i.imgur.com/II1byYs.png)](http://i.imgur.com/II1byYs.png)
![Rendering of a NodeBB install on desktop and mobile devices](https://user-images.githubusercontent.com/923011/228570420-2a4db745-b20d-474a-a571-1b59259508ef.png)
## How can I follow along/contribute? ## How can I follow along/contribute?
* If you are a developer, feel free to check out the source and submit pull requests. We also have a wide array of [plugins](http://community.nodebb.org/category/7/nodebb-plugins) which would be a great starting point for learning the codebase. * If you are a developer, feel free to check out the source and submit pull requests. We also have a wide array of [plugins](http://community.nodebb.org/category/7/nodebb-plugins) which would be a great starting point for learning the codebase.
* If you are a designer, [NodeBB needs themes](http://community.nodebb.org/category/10/nodebb-themes)! NodeBB's theming system allows extension of the base templates as well as styling via SCSS or CSS. NodeBB's base theme utilizes [Bootstrap 5](http://getbootstrap.com/) as a frontend toolkit. * If you are a designer, [NodeBB needs themes](http://community.nodebb.org/category/10/nodebb-themes)! NodeBB's theming system allows extension of the base templates as well as styling via LESS or CSS. NodeBB's base theme utilizes [Bootstrap 3](http://getbootstrap.com/) but themes can choose to use a different framework altogether.
* If you know languages other than English you can help us translate NodeBB. We use [Transifex](https://explore.transifex.com/nodebb/nodebb/) for internationalization. * If you know languages other than English you can help us translate NodeBB. We use [Transifex](https://explore.transifex.com/nodebb/nodebb/) for internationalization.
* Please don't forget to **like**, **follow**, and **star our repo**! Join our growing [community](http://community.nodebb.org) to keep up to date with the latest NodeBB development. * Please don't forget to **like**, **follow**, and **star our repo**! Join our growing [community](http://community.nodebb.org) to keep up to date with the latest NodeBB development.
@@ -39,15 +42,14 @@ Our minimalist "Harmony" theme gets you going right away, no coding experience r
NodeBB requires the following software to be installed: NodeBB requires the following software to be installed:
* A version of Node.js at least 16 or greater ([installation/upgrade instructions](https://github.com/nodesource/distributions)) * A version of Node.js at least 12 or greater ([installation/upgrade instructions](https://github.com/nodesource/distributions))
* MongoDB, version 3.6 or greater **or** Redis, version 2.8.9 or greater * MongoDB, version 3.6 or greater **or** Redis, version 2.8.9 or greater
* If you are using [clustering](https://docs.nodebb.org/configuring/scaling/) you need Redis installed and configured. * If you are using [clustering](https://docs.nodebb.org/configuring/scaling/) you need Redis installed and configured.
* nginx, version 1.3.13 or greater (**only if** intending to use nginx to proxy requests to a NodeBB) * nginx, version 1.3.13 or greater (**only if** intending to use nginx to proxy requests to a NodeBB)
## Installation ## Installation
[Please refer to platform-specific installation documentation](https://docs.nodebb.org/installing/os). [Please refer to platform-specific installation documentation](https://docs.nodebb.org/installing/os)
If installing via the cloud (or using Docker), [please see cloud-based installation documentation](https://docs.nodebb.org/installing/cloud/).
## Securing NodeBB ## Securing NodeBB
@@ -60,7 +62,6 @@ It is important to ensure that your NodeBB and database servers are secured. Bea
2. Use `iptables` to secure your server from unintended open ports. In Ubuntu, `ufw` provides a friendlier interface to working with `iptables`. 2. Use `iptables` to secure your server from unintended open ports. In Ubuntu, `ufw` provides a friendlier interface to working with `iptables`.
* e.g. If your NodeBB is proxied, no ports should be open except 80 (and possibly 22, for SSH access) * e.g. If your NodeBB is proxied, no ports should be open except 80 (and possibly 22, for SSH access)
## Upgrading NodeBB ## Upgrading NodeBB
Detailed upgrade instructions are listed in [Upgrading NodeBB](https://docs.nodebb.org/configuring/upgrade/) Detailed upgrade instructions are listed in [Upgrading NodeBB](https://docs.nodebb.org/configuring/upgrade/)
@@ -75,10 +76,10 @@ Interested in a sublicense agreement for use of NodeBB in a non-free/restrictive
* [Demo](https://try.nodebb.org) * [Demo](https://try.nodebb.org)
* [Developer Community](http://community.nodebb.org) * [Developer Community](http://community.nodebb.org)
* [Documentation & Installation Instructions](https://docs.nodebb.org) * [Documentation & Installation Instructions](http://docs.nodebb.org)
* [Help translate NodeBB](https://explore.transifex.com/nodebb/nodebb/) * [Help translate NodeBB](https://explore.transifex.com/nodebb/nodebb/)
* [NodeBB Blog](https://nodebb.org/blog) * [NodeBB Blog](http://blog.nodebb.org)
* [Premium Hosting for NodeBB](https://www.nodebb.org/ "NodeBB") * [Premium Hosting for NodeBB](http://www.nodebb.org/ "NodeBB")
* Unofficial IRC community &ndash; channel `#nodebb` on Libera.chat * Unofficial IRC community &ndash; channel `#nodebb` on Libera.chat
* [Follow us on Twitter](http://www.twitter.com/NodeBB/ "NodeBB Twitter") * [Follow us on Twitter](http://www.twitter.com/NodeBB/ "NodeBB Twitter")
* [Like us on Facebook](http://www.facebook.com/NodeBB/ "NodeBB Facebook") * [Like us on Facebook](http://www.facebook.com/NodeBB/ "NodeBB Facebook")

View File

@@ -1,55 +1,24 @@
version: '3.8' version: '3.5'
services: services:
nodebb: node:
build: . build: .
restart: unless-stopped restart: unless-stopped
ports: depends_on:
- "4567:4567/tcp" # comment this out if you don't want to expose NodeBB to the host, or change the first number to any port you want - db
# uncomment if you want to use another container as a reverse proxy expose:
# expose: - 4567 # use a reverse proxy like Traefik
# - 4567
db:
image: mongo:bionic
restart: unless-stopped
expose:
- 27017
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: root
volumes: volumes:
- ./.docker/build:/usr/src/app/build - mongo:/data/db
- ./.docker/public/uploads:/usr/src/app/public/uploads
- ./.docker:/opt/config volumes:
- ./install/docker/setup.json:/usr/src/app/setup.json
mongo: mongo:
image: "mongo:7-jammy"
restart: unless-stopped
expose:
- "27017"
environment:
MONGO_INITDB_ROOT_USERNAME: nodebb
MONGO_INITDB_ROOT_PASSWORD: nodebb
MONGO_INITDB_DATABASE: nodebb
volumes:
- ./.docker/database/mongo/config:/etc/mongo
- ./.docker/database/mongo/data:/data/db
- ./install/docker/mongodb-user-init.js:/docker-entrypoint-initdb.d/user-init.js
profiles:
- mongo
postgres:
image: postgres:16.1-alpine
restart: unless-stopped
expose:
- "5432"
environment:
POSTGRES_USER: nodebb
POSTGRES_PASSWORD: nodebb
POSTGRES_DB: nodebb
volumes:
- ./.docker/database/postgresql/data:/var/lib/postgresql/data
profiles:
- postgres
redis:
image: redis:7.2.3-alpine
restart: unless-stopped
command: ["redis-server", "--appendonly", "yes", "--loglevel", "warning"]
# command: ["redis-server", "--save", "60", "1", "--loglevel", "warning"] # uncomment if you want to use snapshotting instead of AOF
expose:
- "6379"
volumes:
- ./.docker/database/redis:/data
profiles:
- redis

View File

@@ -4,7 +4,6 @@
"defaultLang": "en-GB", "defaultLang": "en-GB",
"loginDays": 14, "loginDays": 14,
"loginSeconds": 0, "loginSeconds": 0,
"sessionDuration": 0,
"loginAttempts": 5, "loginAttempts": 5,
"lockoutDuration": 60, "lockoutDuration": 60,
"adminReloginDuration": 60, "adminReloginDuration": 60,
@@ -16,18 +15,16 @@
"postDeleteDuration": 0, "postDeleteDuration": 0,
"enablePostHistory": 1, "enablePostHistory": 1,
"topicBacklinks": 1, "topicBacklinks": 1,
"postCacheSize": 20971520, "postCacheSize": 10485760,
"disableChat": 0, "disableChat": 0,
"chatEditDuration": 0, "chatEditDuration": 0,
"chatDeleteDuration": 0, "chatDeleteDuration": 0,
"chatMessageDelay": 2000, "chatMessageDelay": 200,
"newbieChatMessageDelay": 120000,
"notificationSendDelay": 60, "notificationSendDelay": 60,
"newbieReputationThreshold": 3, "newbiePostDelayThreshold": 3,
"postQueue": 0, "postQueue": 0,
"postQueueReputationThreshold": 0, "postQueueReputationThreshold": 0,
"groupsExemptFromPostQueue": ["administrators", "Global Moderators"], "groupsExemptFromPostQueue": ["administrators", "Global Moderators"],
"groupsExemptFromNewUserRestrictions": ["administrators", "Global Moderators"],
"groupsExemptFromMaintenanceMode": ["administrators", "Global Moderators"], "groupsExemptFromMaintenanceMode": ["administrators", "Global Moderators"],
"minimumPostLength": 8, "minimumPostLength": 8,
"maximumPostLength": 32767, "maximumPostLength": 32767,
@@ -66,7 +63,6 @@
"maximumAboutMeLength": 1000, "maximumAboutMeLength": 1000,
"maximumUsersInChatRoom": 0, "maximumUsersInChatRoom": 0,
"maximumChatMessageLength": 1000, "maximumChatMessageLength": 1000,
"maximumChatRoomNameLength": 50,
"maximumProfileImageSize": 256, "maximumProfileImageSize": 256,
"maximumCoverImageSize": 2048, "maximumCoverImageSize": 2048,
"profileImageDimension": 200, "profileImageDimension": 200,
@@ -91,7 +87,6 @@
"min:rep:chat": 0, "min:rep:chat": 0,
"min:rep:downvote": 0, "min:rep:downvote": 0,
"min:rep:upvote": 0, "min:rep:upvote": 0,
"min:rep:post-links": 0,
"min:rep:flag": 0, "min:rep:flag": 0,
"min:rep:profile-picture": 0, "min:rep:profile-picture": 0,
"min:rep:cover-picture": 0, "min:rep:cover-picture": 0,
@@ -186,6 +181,5 @@
"composer:showHelpTab": 1, "composer:showHelpTab": 1,
"composer:allowPluginHelp": 1, "composer:allowPluginHelp": 1,
"maxReconnectionAttempts": 5, "maxReconnectionAttempts": 5,
"reconnectionDelay": 1500, "reconnectionDelay": 1500
"disableCustomUserSkins": 0
} }

View File

@@ -1,9 +1,9 @@
### Welcome to your brand new NodeBB forum! # Welcome to your brand new NodeBB forum!
This is what a topic and post looks like. As an administrator, you can edit the post\'s title and content. This is what a topic and post looks like. As an administrator, you can edit the post\'s title and content.
To customise your forum, go to the [Administrator Control Panel](../../admin). You can modify all aspects of your forum there, including installation of third-party plugins. To customise your forum, go to the [Administrator Control Panel](../../admin). You can modify all aspects of your forum there, including installation of third-party plugins.
#### Additional Resources ## Additional Resources
* [NodeBB Documentation](https://docs.nodebb.org) * [NodeBB Documentation](https://docs.nodebb.org)
* [Community Support Forum](https://community.nodebb.org) * [Community Support Forum](https://community.nodebb.org)

View File

@@ -1,46 +0,0 @@
#!/bin/bash
export CONFIG_DIR="${CONFIG_DIR:-/opt/config}"
export CONFIG=$CONFIG_DIR/config.json
export FORCE_BUILD_BEFORE_START="${FORCE_BUILD_BEFORE_START:-false}"
# Supported verbs: install (web install), setup (interactive CLI session). Default: web install
# TODO: constraint it using a hash set (or hash table)
export NODEBB_INIT_VERB="${NODEBB_INIT_VERB:-install}"
# Setup variable for backward compatibility, default: <empty>
export SETUP="${SETUP:-}"
mkdir -p $CONFIG_DIR
# if the folder is mounted as a volume this can fail, the check below is to ensure there is still write access
chmod -fR 760 $CONFIG_DIR 2> /dev/null
if [[ ! -w $CONFIG_DIR ]]; then
echo "panic: no write permission for $CONFIG_DIR"
exit 1
fi
[[ -f $CONFIG_DIR/package.json ]] || cp install/package.json $CONFIG_DIR/package.json
[[ -f $CONFIG_DIR/package-lock.json ]] || touch $CONFIG_DIR/package-lock.json
ln -fs $CONFIG_DIR/package.json package.json
ln -fs $CONFIG_DIR/package-lock.json package-lock.json
npm install --omit=dev
if [[ -n $SETUP ]]; then
echo "Setup environmental variable detected"
echo "Starting setup session"
./nodebb setup --config=$CONFIG
elif [ -f $CONFIG ]; then
echo "Config file exist at $CONFIG, assuming it is a valid config"
echo "Starting forum"
if [ "$FORCE_BUILD_BEFORE_START" = true ]; then
./nodebb build --config=$CONFIG
fi
./nodebb start --config=$CONFIG
else
echo "Config file not found at $CONFIG"
echo "Starting installation session"
./nodebb "${NODEBB_INIT_VERB}" --config=$CONFIG
fi

View File

@@ -1 +0,0 @@
db.createUser( { user: 'nodebb', pwd: 'nodebb', roles: [ { role: 'readWrite', db: 'nodebb' }, { role: 'clusterMonitor', db: 'admin' } ] } )

View File

@@ -1,21 +0,0 @@
{
"mongo": {
"host": "mongo",
"port": 27017,
"database": "nodebb",
"username": "nodebb",
"password": "nodebb"
},
"redis": {
"host": "redis",
"port": 6379,
"database": 0
},
"postgres": {
"host": "postgres",
"port": 5432,
"database": "nodebb",
"username": "nodebb",
"password": "nodebb"
}
}

View File

@@ -2,7 +2,7 @@
"name": "nodebb", "name": "nodebb",
"license": "GPL-3.0", "license": "GPL-3.0",
"description": "NodeBB Forum", "description": "NodeBB Forum",
"version": "3.5.1", "version": "3.0.0-alpha.3",
"homepage": "https://www.nodebb.org", "homepage": "https://www.nodebb.org",
"repository": { "repository": {
"type": "git", "type": "git",
@@ -29,159 +29,155 @@
}, },
"dependencies": { "dependencies": {
"@adactive/bootstrap-tagsinput": "0.8.2", "@adactive/bootstrap-tagsinput": "0.8.2",
"@fontsource/inter": "5.0.15", "@isaacs/ttlcache": "1.2.1",
"@fontsource/poppins": "5.0.8", "@popperjs/core": "2.11.6",
"@fortawesome/fontawesome-free": "6.4.2", "ace-builds": "1.14.0",
"@isaacs/ttlcache": "1.4.1", "archiver": "5.3.1",
"@popperjs/core": "2.11.8", "async": "3.2.4",
"ace-builds": "1.31.2", "autoprefixer": "10.4.13",
"archiver": "6.0.1",
"async": "3.2.5",
"autoprefixer": "10.4.16",
"bcryptjs": "2.4.3", "bcryptjs": "2.4.3",
"benchpressjs": "2.5.1", "benchpressjs": "2.4.3",
"body-parser": "1.20.2", "body-parser": "1.20.1",
"bootbox": "6.0.0", "bootbox": "6.0.0",
"bootstrap": "5.3.2", "bootstrap": "5.2.3",
"bootswatch": "5.3.2", "bootswatch": "5.2.2",
"chalk": "4.1.2", "chalk": "4.1.2",
"chart.js": "4.4.0", "chart.js": "2.9.4",
"cli-graph": "3.2.2", "cli-graph": "3.2.2",
"clipboard": "2.0.11", "clipboard": "2.0.11",
"colors": "1.4.0", "colors": "1.4.0",
"commander": "11.1.0", "commander": "9.4.1",
"compare-versions": "6.1.0", "compare-versions": "5.0.3",
"compression": "1.7.4", "compression": "1.7.4",
"connect-flash": "0.1.1", "connect-flash": "0.1.1",
"connect-mongo": "5.1.0", "connect-mongo": "4.6.0",
"connect-multiparty": "2.2.0", "connect-multiparty": "2.2.0",
"connect-pg-simple": "9.0.1", "connect-pg-simple": "8.0.0",
"connect-redis": "7.1.0", "connect-redis": "6.1.3",
"cookie-parser": "1.4.6", "cookie-parser": "1.4.6",
"cron": "3.1.6", "cron": "2.1.0",
"cropperjs": "1.6.1", "cropperjs": "1.5.13",
"csrf-sync": "4.0.1", "csurf": "1.11.0",
"daemon": "1.1.0", "daemon": "1.1.0",
"diff": "5.1.0", "diff": "5.1.0",
"esbuild": "0.19.5", "esbuild": "0.16.10",
"express": "4.18.2", "express": "4.18.2",
"express-session": "1.17.3", "express-session": "1.17.3",
"express-useragent": "1.0.15", "express-useragent": "1.0.15",
"file-loader": "6.2.0", "file-loader": "6.2.0",
"fs-extra": "11.1.1", "fs-extra": "11.1.0",
"graceful-fs": "4.2.11", "graceful-fs": "4.2.10",
"helmet": "7.1.0", "helmet": "5.1.1",
"html-to-text": "9.0.5", "html-to-text": "9.0.3",
"imagesloaded": "5.0.0", "ipaddr.js": "2.0.1",
"ipaddr.js": "2.1.0", "jquery": "3.6.3",
"jquery": "3.7.1",
"jquery-deserialize": "2.0.0", "jquery-deserialize": "2.0.0",
"jquery-form": "4.3.0", "jquery-form": "4.3.0",
"jquery-serializeobject": "1.0.0", "jquery-serializeobject": "1.0.0",
"jquery-ui": "1.13.2", "jquery-ui": "1.13.2",
"jsesc": "3.0.2", "jsesc": "3.0.2",
"json2csv": "5.0.7", "json2csv": "5.0.7",
"jsonwebtoken": "9.0.2", "jsonwebtoken": "8.5.1",
"less": "4.1.3",
"lodash": "4.17.21", "lodash": "4.17.21",
"logrotate-stream": "0.2.9", "logrotate-stream": "0.2.8",
"lru-cache": "10.0.2", "lru-cache": "7.14.1",
"material-design-lite": "1.3.0",
"mime": "3.0.0", "mime": "3.0.0",
"mkdirp": "3.0.1", "mkdirp": "1.0.4",
"mongodb": "6.3.0", "mongodb": "4.13.0",
"morgan": "1.10.0", "morgan": "1.10.0",
"mousetrap": "1.6.5", "mousetrap": "1.6.5",
"multiparty": "4.2.3", "multiparty": "4.2.3",
"nconf": "0.12.1", "nconf": "0.12.0",
"nodebb-plugin-2factor": "7.4.0", "nodebb-plugin-2factor": "6.0.3",
"nodebb-plugin-composer-default": "10.2.27", "nodebb-plugin-composer-default": "10.0.17",
"nodebb-plugin-dbsearch": "6.2.3", "nodebb-plugin-dbsearch": "6.0.0",
"nodebb-plugin-emoji": "5.1.13", "nodebb-plugin-emoji": "5.0.3",
"nodebb-plugin-emoji-android": "4.0.0", "nodebb-plugin-emoji-android": "4.0.0",
"nodebb-plugin-markdown": "12.2.5", "nodebb-plugin-markdown": "11.0.2",
"nodebb-plugin-mentions": "4.3.7", "nodebb-plugin-mentions": "4.0.2",
"nodebb-plugin-ntfy": "1.7.3", "nodebb-plugin-spam-be-gone": "2.0.4",
"nodebb-plugin-spam-be-gone": "2.2.0", "nodebb-rewards-essentials": "0.2.1",
"nodebb-rewards-essentials": "1.0.0", "nodebb-theme-lavender": "7.0.3",
"nodebb-theme-harmony": "1.1.99", "nodebb-theme-peace": "2.0.12",
"nodebb-theme-lavender": "7.1.5", "nodebb-theme-persona": "13.0.33",
"nodebb-theme-peace": "2.1.25", "nodebb-widget-essentials": "7.0.2",
"nodebb-theme-persona": "13.2.47", "nodemailer": "6.8.0",
"nodebb-widget-essentials": "7.0.14",
"nodemailer": "6.9.7",
"nprogress": "0.2.0", "nprogress": "0.2.0",
"passport": "0.6.0", "passport": "0.6.0",
"passport-http-bearer": "1.0.1", "passport-http-bearer": "1.0.1",
"passport-local": "1.0.0", "passport-local": "1.0.0",
"pg": "8.11.3", "pg": "8.8.0",
"pg-cursor": "2.10.3", "pg-cursor": "2.7.4",
"postcss": "8.4.31", "postcss": "8.4.20",
"postcss-clean": "1.2.0", "postcss-clean": "1.2.0",
"progress-webpack-plugin": "1.0.16", "progress-webpack-plugin": "1.0.16",
"prompt": "1.3.0", "prompt": "1.3.0",
"ioredis": "5.3.2", "ioredis": "5.2.4",
"request": "2.88.2", "request": "2.88.2",
"request-promise-native": "1.0.9", "request-promise-native": "1.0.9",
"rimraf": "5.0.5", "rimraf": "3.0.2",
"rss": "1.2.2", "rss": "1.2.2",
"rtlcss": "4.1.1", "rtlcss": "4.0.0",
"sanitize-html": "2.11.0", "sanitize-html": "2.8.1",
"sass": "1.69.5", "sass": "1.54.9",
"semver": "7.5.4", "semver": "7.3.8",
"serve-favicon": "2.5.0", "serve-favicon": "2.5.0",
"sharp": "0.32.6", "sharp": "0.31.3",
"sitemap": "7.1.1", "sitemap": "7.1.1",
"socket.io": "4.7.2", "slideout": "1.0.1",
"socket.io-client": "4.7.2", "socket.io": "4.5.4",
"@socket.io/redis-adapter": "8.2.1", "socket.io-client": "4.5.4",
"@socket.io/redis-adapter": "8.0.0",
"sortablejs": "1.15.0", "sortablejs": "1.15.0",
"spdx-license-list": "6.8.0", "spdx-license-list": "6.6.0",
"spider-detector": "2.0.1", "spider-detector": "2.0.0",
"terser-webpack-plugin": "5.3.9", "terser-webpack-plugin": "5.3.6",
"textcomplete": "0.18.2", "textcomplete": "0.18.2",
"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",
"validator": "13.11.0", "validator": "13.7.0",
"webpack": "5.89.0", "webpack": "5.75.0",
"webpack-merge": "5.10.0", "webpack-merge": "5.8.0",
"winston": "3.11.0", "winston": "3.8.2",
"workerpool": "8.0.0",
"xml": "1.0.1", "xml": "1.0.1",
"xregexp": "5.1.1", "xregexp": "5.1.1",
"yargs": "17.7.2", "yargs": "17.6.2",
"zxcvbn": "4.4.2" "zxcvbn": "4.4.2"
}, },
"devDependencies": { "devDependencies": {
"@apidevtools/swagger-parser": "10.1.0", "@apidevtools/swagger-parser": "10.0.3",
"@commitlint/cli": "18.4.2", "@commitlint/cli": "17.3.0",
"@commitlint/config-angular": "18.4.2", "@commitlint/config-angular": "17.3.0",
"coveralls": "3.1.1", "coveralls": "3.1.1",
"eslint": "8.54.0", "eslint": "8.30.0",
"eslint-config-nodebb": "0.2.1", "eslint-config-nodebb": "0.2.1",
"eslint-plugin-import": "2.29.0", "eslint-plugin-import": "2.26.0",
"grunt": "1.6.1", "grunt": "1.5.3",
"grunt-contrib-watch": "1.1.0", "grunt-contrib-watch": "1.1.0",
"husky": "8.0.3", "husky": "8.0.2",
"jsdom": "22.1.0", "jsdom": "20.0.3",
"lint-staged": "15.1.0", "lint-staged": "13.1.0",
"mocha": "10.2.0", "mocha": "10.2.0",
"mocha-lcov-reporter": "1.3.0", "mocha-lcov-reporter": "1.3.0",
"mockdate": "3.0.5", "mockdate": "3.0.5",
"nyc": "15.1.0", "nyc": "15.1.0",
"smtp-server": "3.13.0" "smtp-server": "3.11.0"
}, },
"optionalDependencies": { "optionalDependencies": {
"sass-embedded": "1.69.5" "sass-embedded": "1.55.0"
}, },
"resolutions": { "resolutions": {
"*/jquery": "3.7.1" "*/jquery": "3.6.3"
}, },
"bugs": { "bugs": {
"url": "https://github.com/NodeBB/NodeBB/issues" "url": "https://github.com/NodeBB/NodeBB/issues"
}, },
"engines": { "engines": {
"node": ">=16" "node": ">=12"
}, },
"maintainers": [ "maintainers": [
{ {

View File

@@ -11,7 +11,7 @@ const webpack = require('webpack');
const nconf = require('nconf'); const nconf = require('nconf');
const Benchpress = require('benchpressjs'); const Benchpress = require('benchpressjs');
const { mkdirp } = require('mkdirp'); const mkdirp = require('mkdirp');
const { paths } = require('../src/constants'); const { paths } = require('../src/constants');
const sass = require('../src/utils').getSass(); const sass = require('../src/utils').getSass();
@@ -50,9 +50,6 @@ let installing = false;
let success = false; let success = false;
let error = false; let error = false;
let launchUrl; let launchUrl;
let timeStart = 0;
const totalTime = 1000 * 60 * 3;
const viewsDir = path.join(paths.baseDir, 'build/public/templates'); const viewsDir = path.join(paths.baseDir, 'build/public/templates');
@@ -105,32 +102,11 @@ function launchExpress(port) {
function setupRoutes() { function setupRoutes() {
app.get('/', welcome); app.get('/', welcome);
app.post('/', install); app.post('/', install);
app.get('/testdb', testDatabase); app.post('/launch', launch);
app.get('/ping', ping); app.get('/ping', ping);
app.get('/sping', ping); app.get('/sping', ping);
} }
async function testDatabase(req, res) {
let db;
try {
const keys = Object.keys(req.query);
const dbName = keys[0].split(':')[0];
db = require(`../src/database/${dbName}`);
const opts = {};
keys.forEach((key) => {
opts[key.replace(`${dbName}:`, '')] = req.query[key];
});
await db.init(opts);
const global = await db.getObject('global');
await db.close();
res.json({ success: 1, dbfull: !!global });
} catch (err) {
res.json({ error: err.stack });
}
}
function ping(req, res) { function ping(req, res) {
res.status(200).send(req.path === '/sping' ? 'healthy' : '200'); res.status(200).send(req.path === '/sping' ? 'healthy' : '200');
} }
@@ -147,6 +123,7 @@ function welcome(req, res) {
}); });
const defaults = require('./data/defaults.json'); 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,
@@ -159,7 +136,6 @@ function welcome(req, res) {
minimumPasswordLength: defaults.minimumPasswordLength, minimumPasswordLength: defaults.minimumPasswordLength,
minimumPasswordStrength: defaults.minimumPasswordStrength, minimumPasswordStrength: defaults.minimumPasswordStrength,
installing: installing, installing: installing,
percentInstalled: installing ? ((Date.now() - timeStart) / totalTime * 100).toFixed(2) : 0,
}); });
} }
@@ -167,15 +143,12 @@ function install(req, res) {
if (installing) { if (installing) {
return welcome(req, res); return welcome(req, res);
} }
timeStart = Date.now();
req.setTimeout(0); req.setTimeout(0);
installing = true; installing = true;
const database = nconf.get('database') || req.body.database || 'mongo'; const database = nconf.get('database') || req.body.database || 'mongo';
const setupEnvVars = { const setupEnvVars = {
...process.env, ...process.env,
CONFIG: nconf.get('config'),
NODEBB_CONFIG: nconf.get('config'),
NODEBB_URL: nconf.get('url') || req.body.url || (`${req.protocol}://${req.get('host')}`), NODEBB_URL: nconf.get('url') || req.body.url || (`${req.protocol}://${req.get('host')}`),
NODEBB_PORT: nconf.get('port') || 4567, NODEBB_PORT: nconf.get('port') || 4567,
NODEBB_ADMIN_USERNAME: nconf.get('admin:username') || req.body['admin:username'], NODEBB_ADMIN_USERNAME: nconf.get('admin:username') || req.body['admin:username'],
@@ -197,22 +170,21 @@ function install(req, res) {
const child = require('child_process').fork('app', ['--setup'], { const child = require('child_process').fork('app', ['--setup'], {
env: setupEnvVars, env: setupEnvVars,
}); });
child.on('error', (err) => {
error = true;
success = false;
winston.error(err.stack);
});
child.on('close', (data) => { child.on('close', (data) => {
installing = false;
success = data === 0; success = data === 0;
error = data !== 0; error = data !== 0;
launch();
});
welcome(req, res); welcome(req, res);
});
} }
async function launch() { async function launch(req, res) {
try { try {
res.json({});
server.close(); server.close();
req.setTimeout(0);
let child; let child;
if (!nconf.get('launchCmd')) { if (!nconf.get('launchCmd')) {

View File

@@ -6,7 +6,7 @@ const url = require('url');
const path = require('path'); const path = require('path');
const { fork } = require('child_process'); const { fork } = require('child_process');
const logrotate = require('logrotate-stream'); const logrotate = require('logrotate-stream');
const { mkdirp } = require('mkdirp'); const mkdirp = require('mkdirp');
const file = require('./src/file'); const file = require('./src/file');
const pkg = require('./package.json'); const pkg = require('./package.json');
@@ -30,7 +30,9 @@ const output = logrotate({ file: outputLogFilePath, size: '1m', keep: 3, compres
const silent = nconf.get('silent') === 'false' ? false : nconf.get('silent') !== false; const silent = nconf.get('silent') === 'false' ? false : nconf.get('silent') !== false;
let numProcs; let numProcs;
const workers = []; const workers = [];
const Loader = {}; const Loader = {
timesStarted: 0,
};
const appPath = path.join(__dirname, 'app.js'); const appPath = path.join(__dirname, 'app.js');
Loader.init = function () { Loader.init = function () {
@@ -55,6 +57,21 @@ Loader.displayStartupMessages = function () {
Loader.addWorkerEvents = function (worker) { Loader.addWorkerEvents = function (worker) {
worker.on('exit', (code, signal) => { worker.on('exit', (code, signal) => {
if (code !== 0) {
if (Loader.timesStarted < numProcs * 3) {
Loader.timesStarted += 1;
if (Loader.crashTimer) {
clearTimeout(Loader.crashTimer);
}
Loader.crashTimer = setTimeout(() => {
Loader.timesStarted = 0;
}, 10000);
} else {
console.log(`${numProcs * 3} restarts in 10 seconds, most likely an error on startup. Halting.`);
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...');

View File

@@ -6,6 +6,7 @@
body { body {
background: #00A9EA; background: #00A9EA;
color: white; color: white;
/* see public/less/admin/vars.less for documentation on system font family */
font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", Helvetica, Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", Helvetica, Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
text-align: center; text-align: center;
-webkit-transform-style: preserve-3d; -webkit-transform-style: preserve-3d;

View File

@@ -6,13 +6,6 @@
"settings-header-contents": "محتويات", "settings-header-contents": "محتويات",
"changes-saved": "Changes Saved", "changes-saved": "Changes Saved",
"changes-saved-message": "Your changes to the NodeBB configuration have been saved.", "changes-saved-message": "Your changes to the NodeBB configuration have been saved.",
"changes-not-saved": "لم يتم حفظ التغييرات", "changes-not-saved": "Changes Not Saved",
"changes-not-saved-message": "حدثت مشكلة أثناء حفظ التغييرات في NodeBB. (%1)", "changes-not-saved-message": "NodeBB encountered a problem saving your changes. (%1)"
"save-changes": "Save changes",
"min": "Min:",
"max": "Max:",
"view": "View",
"edit": "Edit",
"add": "Add",
"select-icon": "Select Icon"
} }

View File

@@ -1,9 +1,8 @@
{ {
"cache": "Cache",
"post-cache": "التخزين المؤقت للمشاركات", "post-cache": "التخزين المؤقت للمشاركات",
"group-cache": "التخزين المؤقت للمجموعات", "group-cache": "Group Cache",
"local-cache": "تخزين مؤقت محلي", "local-cache": "Local Cache",
"object-cache": "تخزين مؤقت للأشياء", "object-cache": "Object Cache",
"percent-full": "1% كاملة", "percent-full": "1% كاملة",
"post-cache-size": "حجم التخزين المؤقت للمشاركات", "post-cache-size": "حجم التخزين المؤقت للمشاركات",
"items-in-cache": "العناصر في التخزين المؤقت" "items-in-cache": "العناصر في التخزين المؤقت"

View File

@@ -1,52 +1,52 @@
{ {
"x-b": "٪1 بايت", "x-b": "%1 b",
"x-mb": "٪1 ميقا بايت", "x-mb": "%1 mb",
"x-gb": "٪1 قيقا بايت", "x-gb": "%1 gb",
"uptime-seconds": "مدة التشغيل بالثواني", "uptime-seconds": "Uptime in Seconds",
"uptime-days": "مدة التشغيل بالأيام", "uptime-days": "Uptime in Days",
"mongo": "MongoDB", "mongo": "Mongo",
"mongo.version": "اصدار MongoDB", "mongo.version": "MongoDB Version",
"mongo.storage-engine": "محرك التخزين", "mongo.storage-engine": "Storage Engine",
"mongo.collections": "التجميعات", "mongo.collections": "Collections",
"mongo.objects": "العناصر", "mongo.objects": "Objects",
"mongo.avg-object-size": "معدل حجم العناصر", "mongo.avg-object-size": "Avg. Object Size",
"mongo.data-size": "حجم البيانات", "mongo.data-size": "Data Size",
"mongo.storage-size": "حجم التخرين", "mongo.storage-size": "Storage Size",
"mongo.index-size": "حجم الفهرس", "mongo.index-size": "Index Size",
"mongo.file-size": "حجم الملف", "mongo.file-size": "File Size",
"mongo.resident-memory": "الذاكرة الساكنة", "mongo.resident-memory": "Resident Memory",
"mongo.virtual-memory": "الذاكرة الإفتراضية", "mongo.virtual-memory": "الذاكرة الإفتراضية",
"mongo.mapped-memory": "Mapped Memory", "mongo.mapped-memory": "Mapped Memory",
"mongo.bytes-in": "البايتات الواردة", "mongo.bytes-in": "Bytes In",
"mongo.bytes-out": "البايتات الصادرة", "mongo.bytes-out": "Bytes Out",
"mongo.num-requests": "عدد الطلبات", "mongo.num-requests": "Number of Requests",
"mongo.raw-info": "معلومات MongoDB الأولية", "mongo.raw-info": "MongoDB Raw Info",
"mongo.unauthorized": "لم يستطع NodeBB من الاستعلام عن احصاءات قواعد البيانات ل MongoDB. الرجاء التأكد من أن المستخدم في NodeBB يحتوي على دور &quot;clusterMonitor&quot; ال &quot;admin&quot; لقواعد البيانات.", "mongo.unauthorized": "NodeBB was unable to query the MongoDB database for relevant statistics. Please ensure that the user in use by NodeBB contains the &quot;clusterMonitor&quot; role for the &quot;admin&quot; database.",
"redis": "Redis", "redis": "Redis",
"redis.version": "إصدار Redis", "redis.version": "Redis Version",
"redis.keys": "المفاتيح", "redis.keys": "Keys",
"redis.expires": "ينتهي ", "redis.expires": "Expires",
"redis.avg-ttl": "متوسط وقت الانعاش", "redis.avg-ttl": "Average TTL",
"redis.connected-clients": "العميل المتصل", "redis.connected-clients": "Connected Clients",
"redis.connected-slaves": "البدلاء المتصلين", "redis.connected-slaves": "Connected Slaves",
"redis.blocked-clients": "العملاء المحظورون", "redis.blocked-clients": "Blocked Clients",
"redis.used-memory": "الذاكرة المستخدمة", "redis.used-memory": "الذاكرة المستخدمة",
"redis.memory-frag-ratio": "نسبة تجزئة الذاكرة", "redis.memory-frag-ratio": "Memory Fragmentation Ratio",
"redis.total-connections-recieved": "إجمالي الاتصالات المستلمة", "redis.total-connections-recieved": "إجمالي الاتصالات المستلمة",
"redis.total-commands-processed": "إجمالي الأوامر التي تمت معالجتها", "redis.total-commands-processed": "إجمالي الأوامر التي تمت معالجتها",
"redis.iops": "العمليات اللحظية في الثانية", "redis.iops": "Instantaneous Ops. Per Second",
"redis.iinput": "الإدخال الفوري في الثانية", "redis.iinput": "Instantaneous Input Per Second",
"redis.ioutput": "المخرجات الفورية في الثانية", "redis.ioutput": "Instantaneous Output Per Second",
"redis.total-input": "مجموع المدخلات", "redis.total-input": "Total Input",
"redis.total-output": "مجموع المخرجات", "redis.total-output": "Total Ouput",
"redis.keyspace-hits": "المفاتيح المضغوطة", "redis.keyspace-hits": "Keyspace Hits",
"redis.keyspace-misses": "المفاتيح المخفقة", "redis.keyspace-misses": "Keyspace Misses",
"redis.raw-info": "معلومات Redis الأولية", "redis.raw-info": "Redis Raw Info",
"postgres": "Postgres", "postgres": "Postgres",
"postgres.version": "إصدار PostgreSQL", "postgres.version": "PostgreSQL Version",
"postgres.raw-info": "معلومات Postgres الأولية" "postgres.raw-info": "Postgres Raw Info"
} }

View File

@@ -1,5 +1,4 @@
{ {
"errors": "Errors",
"figure-x": "شكل %1", "figure-x": "شكل %1",
"error-events-per-day": "<code>%1</code> حدث كل يوم ", "error-events-per-day": "<code>%1</code> حدث كل يوم ",
"error.404": "404 لم يتم العثور", "error.404": "404 لم يتم العثور",

View File

@@ -3,11 +3,11 @@
"no-events": "لا توجد أحداث", "no-events": "لا توجد أحداث",
"control-panel": "لوحة تحكم الأحداث", "control-panel": "لوحة تحكم الأحداث",
"delete-events": "حذف الاحداث", "delete-events": "حذف الاحداث",
"confirm-delete-all-events": "هل أنت متاكد أنك تريد حذف كل سجل اﻻحداث؟", "confirm-delete-all-events": "Are you sure you want to delete all logged events?",
"filters": "تصفية", "filters": "تصفية",
"filters-apply": "تطبيق التصفية", "filters-apply": "تطبيق التصفية",
"filter-type": "نوع الحدث", "filter-type": "نوع الحدث",
"filter-start": "تاريخ البدء", "filter-start": "تاريخ البدء",
"filter-end": "تاريخ الانتهاء", "filter-end": "تاريخ الانتهاء",
"filter-per-page": "لكل صفحة" "filter-perPage": "لكل صفحة"
} }

View File

@@ -1,20 +1,16 @@
{ {
"customise": "Customise", "custom-css": "Custom CSS/LESS",
"custom-css": "Custom CSS/SASS", "custom-css.description": "Enter your own CSS/LESS declarations here, which will be applied after all other styles.",
"custom-css.description": "Enter your own CSS/SASS declarations here, which will be applied after all other styles.", "custom-css.enable": "Enable Custom CSS/LESS",
"custom-css.enable": "Enable Custom CSS/SASS",
"custom-js": "Javascript مخصصة", "custom-js": "Javascript مخصصة",
"custom-js.description": "أدخل Javascript الخاص بك هنا. سيتم تنفيذها بعد تحميل الصفحة بالكامل.", "custom-js.description": "أدخل Javascript الخاص بك هنا. سيتم تنفيذها بعد تحميل الصفحة بالكامل.",
"custom-js.enable": "تفعيل Javascript المخصصة", "custom-js.enable": "تفعيل Javascript المخصصة",
"custom-header": "ترويسة مخصصة", "custom-header": "ترويسة مخصصة",
"custom-header.description": "أدخل وسوم HTML المخصصة هنا (مثل: Meta Tags, وغيرها)، والتي سيتم تضمينها لجزئية <code>&lt;head&gt;</code> من ترميز المنتدى. يُسمح بعلامات البرمجة النصية، ولكن لا يُنصح بها ، نظرًا لأن علامة التبويب <a href=\"#custom-js\" data-toggle=\"tab\"> Custom Javascript </a> متاحة.", "custom-header.description": "Enter custom HTML here (ex. Meta Tags, etc.), which will be appended to the <code>&lt;head&gt;</code> section of your forum's markup. Script tags are allowed, but are discouraged, as the <a href=\"#custom-js\" data-toggle=\"tab\">Custom Javascript</a> tab is available.",
"custom-header.enable": "تفعيل الترويسة المخصصة", "custom-header.enable": "تفعيل الترويسة المخصصة",
"custom-css.livereload": "تفعيل إعادة التحميل المباشرة", "custom-css.livereload": "تفعيل إعادة التحميل المباشرة",
"custom-css.livereload.description": "فعل هذا الخيار لإجبار جميع الجلسات في الأجهزة التي قمت بتسجيل الدخول فيها بحسابك على التحديث عند النقر على زر الحفظ", "custom-css.livereload.description": "فعل هذا الخيار لإجبار جميع الجلسات في الأجهزة التي قمت بتسجيل الدخول فيها بحسابك على التحديث عند النقر على زر الحفظ"
"bsvariables": "_variables.scss",
"bsvariables.description": "Override bootstrap variables here. You can also use a tool like <a href=\"https://bootstrap.build/app\">bootstrap.build</a> and paste the output here.<br/>Changes require a rebuild & restart.",
"bsvariables.enable": "Enable _variables.scss"
} }

View File

@@ -1,16 +1,7 @@
{ {
"skins": "Skins",
"bootswatch-skins": "Bootswatch Skins",
"custom-skins": "Custom Skins",
"add-skin": "Add Skin",
"save-custom-skins": "Save Custom Skins",
"save-custom-skins-success": "Custom skins saved successfully",
"custom-skin-name": "Custom Skin Name",
"custom-skin-variables": "Custom Skin Variables",
"loading": "جاري تحميل السمات...", "loading": "جاري تحميل السمات...",
"homepage": "الصفحة الرئيسية", "homepage": "الصفحة الرئيسية",
"select-skin": "إختيار السمة", "select-skin": "إختيار السمة",
"revert-skin": "Revert Skin",
"current-skin": "السمة الحالية", "current-skin": "السمة الحالية",
"skin-updated": "تم تحديث السمة", "skin-updated": "تم تحديث السمة",
"applied-success": "تم تطبيق السمة %1 بنجاح", "applied-success": "تم تطبيق السمة %1 بنجاح",

View File

@@ -1,13 +1,11 @@
{ {
"themes": "Themes",
"checking-for-installed": "جاري التحقق من القوالب المثبتة...", "checking-for-installed": "جاري التحقق من القوالب المثبتة...",
"homepage": "الصفحة الرئيسية", "homepage": "الصفحة الرئيسية",
"select-theme": "إختيار القالب", "select-theme": "إختيار القالب",
"revert-theme": "Revert Theme",
"current-theme": "القالب المستخدم حالياً", "current-theme": "القالب المستخدم حالياً",
"no-themes": "لم يتم العثور على قوالب مثبتة", "no-themes": "لم يتم العثور على قوالب مثبتة",
"revert-confirm": "هل أنت متأكد من أنك ترغب في استعادة قااب NodeBB الافتراضي؟", "revert-confirm": "هل أنت متأكد من أنك ترغب في استعادة قااب NodeBB الافتراضي؟",
"theme-changed": "تم تغيير القالب", "theme-changed": "تم تغيير القالب",
"revert-success": "لقد قمت بنجاح بإستعادة القالب الأساسي لـNodeBB", "revert-success": "لقد قمت بنجاح بإستعادة القالب الأساسي لـNodeBB",
"restart-to-activate": "يرجى إعادة بناء وإعادة تشغيل NodeBB لتنشيط هذا الثيم." "restart-to-activate": "Please rebuild and restart your NodeBB to fully activate this theme."
} }

View File

@@ -1,9 +1,9 @@
{ {
"forum-traffic": "حركة المنتدى", "forum-traffic": "Forum Traffic",
"page-views": "مشاهدات الصفحات", "page-views": "مشاهدات الصفحات",
"unique-visitors": "زائرين فريدين", "unique-visitors": "زائرين فريدين",
"logins": "عمليات تسجيل الدخول", "logins": "Logins",
"new-users": "مستخدم جديد", "new-users": "New Users",
"posts": "مشاركات", "posts": "مشاركات",
"topics": "مواضيع", "topics": "مواضيع",
"page-views-seven": "آخر 7 ايام", "page-views-seven": "آخر 7 ايام",
@@ -15,24 +15,24 @@
"page-views-custom-help": "أدخل نطاقا زمنيا لمرات مشاهدة الصفحات التي ترغب في عرضها. إذا لم يظهر منتقي التاريخ، فإن التنسيق المقبول هو <code>YYYY-MM-DD</code>", "page-views-custom-help": "أدخل نطاقا زمنيا لمرات مشاهدة الصفحات التي ترغب في عرضها. إذا لم يظهر منتقي التاريخ، فإن التنسيق المقبول هو <code>YYYY-MM-DD</code>",
"page-views-custom-error": "الرجاء إدخال نطاق تاريخ صالح بالتنسيق <code>YYYY-MM-DD</code>", "page-views-custom-error": "الرجاء إدخال نطاق تاريخ صالح بالتنسيق <code>YYYY-MM-DD</code>",
"stats.yesterday": "الأمس", "stats.yesterday": "Yesterday",
"stats.today": "اليوم", "stats.today": "Today",
"stats.last-week": "الاسبوع الماضي", "stats.last-week": "Last Week",
"stats.this-week": "هذا الاسبوع", "stats.this-week": "This Week",
"stats.last-month": "الشهر الماضي", "stats.last-month": "Last Month",
"stats.this-month": "هذا الشهر", "stats.this-month": "This Month",
"stats.all": "كل الوقت", "stats.all": "كل الوقت",
"updates": "تحديثات", "updates": "تحديثات",
"running-version": "المنتدى يعمل حاليا على <strong>NodeBB الإصدار<span id=\"version\">%1</span></strong>.", "running-version": "المنتدى يعمل حاليا على <strong>NodeBB الإصدار<span id=\"version\">%1</span></strong>.",
"keep-updated": "تأكد دائما من أن NodeBB يعمل على احدث إصدار للحصول على أحدث التصحيحات الأمنية وإصلاحات الأخطاء.", "keep-updated": "تأكد دائما من أن NodeBB يعمل على احدث إصدار للحصول على أحدث التصحيحات الأمنية وإصلاحات الأخطاء.",
"up-to-date": "You are <strong>up-to-date</strong> <i class=\"fa fa-check\"></i>", "up-to-date": "<p>المنتدى <strong>يعمل على أحدث إصدار</strong> <i class=\"fa fa-check\"></i></p>",
"upgrade-available": "A new version (v%1) has been released. Consider <a href=\"https://docs.nodebb.org/configuring/upgrade/\" target=\"_blank\">upgrading your NodeBB</a>.", "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": "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>.", "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": "This is a <strong>pre-release</strong> version of NodeBB. Unintended bugs may occur. <i class=\"fa fa-exclamation-triangle\"></i>", "prerelease-warning": "<p>هذه نسخة <strong>ماقبل الإصدار</strong> من NodeBB. قد تحدث أخطاء غير مقصودة. <i class=\"fa fa-exclamation-triangle\"></i></p>",
"fallback-emailer-not-found": "مرسل البريد الإلكتروني الاحتياطي غير موجود!", "fallback-emailer-not-found": "Fallback emailer not found!",
"running-in-development": "Forum is running in development mode. The forum may be open to potential vulnerabilities; please contact your system administrator", "running-in-development": "المنتدى قيد التشغيل في وضع \"المطورين\". وقد تكون هناك ثغرات أمنية مفتوحة؛ من فضلك تواصل مع مسؤول نظامك.",
"latest-lookup-failed": "Failed to look up latest available version of NodeBB", "latest-lookup-failed": "<p>Failed to look up latest available version of NodeBB</p>",
"notices": "إشعارات", "notices": "إشعارات",
"restart-not-required": "إعادة التشغيل غير مطلوب", "restart-not-required": "إعادة التشغيل غير مطلوب",
@@ -42,23 +42,22 @@
"search-plugin-tooltip": "نصب إضافة البحث من صفحة الإضافات البرمجية لتنشيط وظيفة البحث", "search-plugin-tooltip": "نصب إضافة البحث من صفحة الإضافات البرمجية لتنشيط وظيفة البحث",
"control-panel": "التحكم بالنظام", "control-panel": "التحكم بالنظام",
"rebuild-and-restart": "أعد البناء &amp; وأعد التشغيل", "rebuild-and-restart": "Rebuild &amp; Restart",
"restart": "أعد التشغيل", "restart": "Restart",
"restart-warning": "ستؤدي إعادة بناء أو إعادة تشغيل NodeBB إلى إنقطاع الاتصال بالمنتدى لبضع ثوان.", "restart-warning": "Rebuilding or Restarting your NodeBB will drop all existing connections for a few seconds.",
"restart-disabled": "تم تعطيل إعادة بناء NodeBB وإعادة تشغيله حيث لا يبدو أنك تقوم بتشغيله عبر البرنامج الخفي المناسب.", "restart-disabled": "Rebuilding and Restarting your NodeBB has been disabled as you do not seem to be running it via the appropriate daemon.",
"maintenance-mode": "وضع الصيانة", "maintenance-mode": "وضع الصيانة",
"maintenance-mode-title": "انقر هنا لإعداد وضع الصيانة لـNodeBB", "maintenance-mode-title": "انقر هنا لإعداد وضع الصيانة لـNodeBB",
"dark-mode": "Dark Mode",
"realtime-chart-updates": "التحديث الفوري للرسم البياني", "realtime-chart-updates": "التحديث الفوري للرسم البياني",
"active-users": "المستخدمين النشطين", "active-users": "المستخدمين النشطين",
"active-users.users": "الأعضاء", "active-users.users": "الأعضاء",
"active-users.guests": "الزوار", "active-users.guests": "الزوار",
"active-users.total": "المجموع", "active-users.total": "المجموع",
"active-users.connections": "روابط الاتصال", "active-users.connections": "Connections",
"guest-registered-users": "الزائر مقابل المستخدمين المسجلين", "guest-registered-users": "Guest vs Registered Users",
"guest": "الزائر", "guest": "Guest",
"registered": "مسجل", "registered": "مسجل",
"user-presence": "تواجد المستخدمين", "user-presence": "تواجد المستخدمين",
@@ -69,30 +68,23 @@
"unread": "غير مقروء", "unread": "غير مقروء",
"high-presence-topics": "مواضيع ذات حضور قوي", "high-presence-topics": "مواضيع ذات حضور قوي",
"popular-searches": "عمليات البحث الشائعة", "popular-searches": "Popular Searches",
"graphs.page-views": "مشاهدات الصفحة", "graphs.page-views": "مشاهدات الصفحة",
"graphs.page-views-registered": "زيارات الصفحات المسجلة", "graphs.page-views-registered": "Page Views Registered",
"graphs.page-views-guest": "زيارات الصفحات للزوار", "graphs.page-views-guest": "Page Views Guest",
"graphs.page-views-bot": "زيارات الصفحات الآلية", "graphs.page-views-bot": "Page Views Bot",
"graphs.unique-visitors": "زوار فريدين", "graphs.unique-visitors": "زوار فريدين",
"graphs.registered-users": "مستخدمين مسجلين", "graphs.registered-users": "مستخدمين مسجلين",
"graphs.guest-users": "المستخدمين الزوار", "graphs.guest-users": "Guest Users",
"last-restarted-by": "آخر إعادة تشغيل بواسطة", "last-restarted-by": "Last restarted by",
"no-users-browsing": "لا يوجد مستخدمين يتصفحون", "no-users-browsing": "No users browsing",
"back-to-dashboard": "العودة للوحة التحكم", "back-to-dashboard": "Back to Dashboard",
"details.no-users": "لم ينضم أي مستخدم خلال الإطار الزمني المحدد", "details.no-users": "No users have joined within the selected timeframe",
"details.no-topics": "لم يتم نشر أي مواضيع خلال الإطار الزمني المحدد", "details.no-topics": "No topics have been posted within the selected timeframe",
"details.no-searches": "لم يتم إجراء أي بحث خلال الإطار الزمني المحدد", "details.no-searches": "No searches have been made yet",
"details.no-logins": "لم يوثق أي تسجيل دخول خلال الإطار الزمني المحدد", "details.no-logins": "No logins have been recorded within the selected timeframe",
"details.logins-static": "يقوم NodeBB بحفظ بيانات الجلسة لمدة ٪1 يوم/أيام فقط، ولذا فإن هذا الجدول أدناه سيعرض فقط أحدث الجلسات النشطة", "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": "وقت تسجيل الدخول", "details.logins-login-time": "Login Time"
"start": "بدء",
"end": "إنهاء",
"filter": "تصفية",
"view-as-json": "View as JSON",
"expand-analytics": "Expand analytics",
"clear-search-history": "Clear Search History",
"clear-search-history-confirm": "Are you sure you want to clear entire search history?"
} }

View File

@@ -1,8 +1,8 @@
{ {
"you-are-on": "أنت في <strong> %1:%2 </strong>", "you-are-on": "You are on <strong>%1:%2</strong>",
"ip": "رقم الآي بي <strong> %1 </strong>", "ip": "IP <strong>%1</strong>",
"nodes-responded": "عدد %1 نقطة/نقاط استجابوا خلال %2 جزء من الثانية.", "nodes-responded": "%1 nodes responded within %2ms!",
"host": "المضيف", "host": "host",
"primary": "primary / run jobs", "primary": "primary / run jobs",
"pid": "pid", "pid": "pid",
"nodejs": "nodejs", "nodejs": "nodejs",

View File

@@ -1,13 +1,12 @@
{ {
"logger": "Logger", "logger-settings": "Logger Settings",
"logger-settings": "إعدادات المسجِّل", "description": "By enabling the check boxes, you will receive logs to your terminal. If you specify a path, logs will then be saved to a file instead. HTTP logging is useful for collecting statistics about who, when, and what people access on your forum. In addition to logging HTTP requests, we can also log socket.io events. Socket.io logging, in combination with redis-cli monitor, can be very helpful for learning NodeBB's internals.",
"description": "من خلال تمكين مربعات الاختيار ، ستتلقى سجلات إلى جهازك الطرفي. إذا حددت مسارًا ، فسيتم بعد ذلك حفظ السجلات في ملف بدلاً من ذلك. يعد تسجيل HTTP مفيدًا لجمع الإحصائيات حول من ومتى وماذا يصل الأشخاص في المنتدى. بالإضافة إلى تسجيل طلبات HTTP ، يمكننا أيضًا تسجيل أحداث socket.io. يمكن أن يكون تسجيل Socket.io ، جنبًا إلى جنب مع شاشة redis-cli ، مفيدًا جدًا في تعلم العناصر الداخلية لـ NodeBB.", "explanation": "Simply check/uncheck the logging settings to enable or disable logging on the fly. No restart needed.",
"explanation": "ما عليك سوى تحديدأو/ إلغاء تحديد إعدادات التسجيل لتمكين أو تعطيل التسجيل أثناء التنقل. لا حاجة لإعادة التشغيل.", "enable-http": "Enable HTTP logging",
"enable-http": "تمكين سجلات HTTP", "enable-socket": "Enable socket.io event logging",
"enable-socket": "تفعيل تسجيل أحداث socket.io", "file-path": "Path to log file",
"file-path": "مسار ملف السجل", "file-path-placeholder": "/path/to/log/file.log ::: leave blank to log to your terminal",
"file-path-placeholder": "/path/to/log/file.log ::: اتركه فارغا لاظهار السجلات لنافذة الطرفية",
"control-panel": "لوحة تحكم المسجل", "control-panel": "Logger Control Panel",
"update-settings": "تحديث إعدادات المسجل" "update-settings": "Update Logger Settings"
} }

View File

@@ -1,5 +1,4 @@
{ {
"plugins": "Plugins",
"trending": "Trending", "trending": "Trending",
"installed": "منصبة", "installed": "منصبة",
"active": "مفعلة", "active": "مفعلة",

View File

@@ -1,17 +1,15 @@
{ {
"rewards": "المكافآت", "rewards": "Rewards",
"add-reward": "Add reward", "condition-if-users": "If User's",
"condition-if-users": "إذا كان للمستخدم", "condition-is": "Is:",
"condition-is": "يكون: ", "condition-then": "Then:",
"condition-then": "عندئذ:", "max-claims": "Amount of times reward is claimable",
"max-claims": "عدد المرات التي يمكن فيها المطالبة بالمكافأة", "zero-infinite": "Enter 0 for infinite",
"zero-infinite": "أدخل 0 للقيمة اللانهائية", "delete": "Delete",
"select-reward": "Select reward", "enable": "Enable",
"delete": "احذف", "disable": "Disable",
"enable": "مكّن",
"disable": "عطّل",
"alert.delete-success": "المكافآت المحذوفة بنجاح", "alert.delete-success": "Successfully deleted reward",
"alert.no-inputs-found": "مكافأة غير قانونية - لم يتم العثور على مدخلات!", "alert.no-inputs-found": "Illegal reward - no inputs found!",
"alert.save-success": "المكافآت المحفوظة بنجاح" "alert.save-success": "Successfully saved rewards"
} }

View File

@@ -1,17 +1,16 @@
{ {
"widgets": "Widgets",
"available": "Available Widgets", "available": "Available Widgets",
"explanation": "Select a widget from the dropdown menu and then drag and drop it into a template's widget area on the left.", "explanation": "Select a widget from the dropdown menu and then drag and drop it into a template's widget area on the left.",
"none-installed": "No widgets found! Activate the widget essentials plugin in the <a href=\"%1\">plugins</a> control panel.", "none-installed": "No widgets found! Activate the widget essentials plugin in the <a href=\"%1\">plugins</a> control panel.",
"clone-from": "Clone widgets from", "clone-from": "Clone widgets from",
"containers.available": "Available Containers", "containers.available": "Available Containers",
"containers.explanation": "Drag and drop on top of any widget", "containers.explanation": "Drag and drop on top of any active widget",
"containers.none": "None", "containers.none": "None",
"container.well": "Well", "container.well": "Well",
"container.jumbotron": "Jumbotron", "container.jumbotron": "Jumbotron",
"container.card": "Card", "container.panel": "Panel",
"container.card-header": "Card Header", "container.panel-header": "Panel Header",
"container.card-body": "Card Body", "container.panel-body": "Panel Body",
"container.alert": "Alert", "container.alert": "Alert",
"alert.confirm-delete": "Are you sure you wish to delete this widget?", "alert.confirm-delete": "Are you sure you wish to delete this widget?",
@@ -27,9 +26,5 @@
"container.placeholder": "Drag and drop a container or enter HTML here.", "container.placeholder": "Drag and drop a container or enter HTML here.",
"show-to-groups": "Show to groups", "show-to-groups": "Show to groups",
"hide-from-groups": "Hide from groups", "hide-from-groups": "Hide from groups",
"start-date": "Start date", "hide-on-mobile": "Hide on mobile"
"end-date": "End date",
"hide-on-mobile": "Hide on mobile",
"hide-drafts": "Hide drafts",
"show-drafts": "Show drafts"
} }

View File

@@ -1,11 +1,10 @@
{ {
"manage-admins-and-mods": "Manage Admins & Mods",
"administrators": "Administrators", "administrators": "Administrators",
"global-moderators": "Global Moderators", "global-moderators": "Global Moderators",
"moderators": "Moderators", "moderators": "Moderators",
"no-global-moderators": "No Global Moderators", "no-global-moderators": "No Global Moderators",
"no-sub-categories": "No subcategories", "no-sub-categories": "No subcategories",
"view-children": "View children (%1)", "subcategories": "%1 subcategories",
"no-moderators": "No Moderators", "no-moderators": "No Moderators",
"add-administrator": "Add Administrator", "add-administrator": "Add Administrator",
"add-global-moderator": "Add Global Moderator", "add-global-moderator": "Add Global Moderator",

View File

@@ -1,11 +1,7 @@
{ {
"manage-categories": "Manage Categories",
"add-category": "Add category",
"jump-to": "Jump to...",
"settings": "اعدادات القسم", "settings": "اعدادات القسم",
"edit-category": "Edit Category",
"privileges": "الصلاحيات", "privileges": "الصلاحيات",
"back-to-categories": "Back to categories",
"name": "Category Name", "name": "Category Name",
"description": "Category Description", "description": "Category Description",
"bg-color": "Background Colour", "bg-color": "Background Colour",
@@ -19,10 +15,8 @@
"post-queue": "Post queue", "post-queue": "Post queue",
"tag-whitelist": "Tag Whitelist", "tag-whitelist": "Tag Whitelist",
"upload-image": "Upload Image", "upload-image": "Upload Image",
"upload": "Upload",
"delete-image": "Remove", "delete-image": "Remove",
"category-image": "Category Image", "category-image": "Category Image",
"image-and-icon": "Image & Icon",
"parent-category": "Parent Category", "parent-category": "Parent Category",
"optional-parent-category": "(Optional) Parent Category", "optional-parent-category": "(Optional) Parent Category",
"top-level": "Top Level", "top-level": "Top Level",
@@ -37,7 +31,6 @@
"disable": "Disable", "disable": "Disable",
"edit": "Edit", "edit": "Edit",
"analytics": "Analytics", "analytics": "Analytics",
"view-category": "View category", "view-category": "View category",
"set-order": "Set order", "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.", "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.",

View File

@@ -1,10 +1,4 @@
{ {
"manage-groups": "Manage Groups",
"add-group": "Add group",
"edit-group": "Edit Group",
"back-to-groups": "Back to groups",
"view-group": "View group",
"icon-and-title": "Icon & Title",
"name": "اسم المجموعة", "name": "اسم المجموعة",
"badge": "Badge", "badge": "Badge",
"properties": "Properties", "properties": "Properties",
@@ -16,7 +10,7 @@
"edit": "Edit", "edit": "Edit",
"delete": "Delete", "delete": "Delete",
"privileges": "Privileges", "privileges": "Privileges",
"members-csv": "Members (CSV)", "download-csv": "CSV",
"search-placeholder": "Search", "search-placeholder": "Search",
"create": "Create Group", "create": "Create Group",
"description-placeholder": "A short description about your group", "description-placeholder": "A short description about your group",
@@ -45,5 +39,6 @@
"revert": "Revert", "revert": "Revert",
"edit.no-users-found": "No Users Found", "edit.no-users-found": "No Users Found",
"edit.confirm-remove-user": "Are you sure you want to remove this user?" "edit.confirm-remove-user": "Are you sure you want to remove this user?",
"edit.save-success": "Changes saved!"
} }

View File

@@ -1,6 +1,4 @@
{ {
"manage-privileges": "Manage Privileges",
"discard-changes": "Discard changes",
"global": "Global", "global": "Global",
"admin": "Admin", "admin": "Admin",
"group-privileges": "Group Privileges", "group-privileges": "Group Privileges",
@@ -8,7 +6,6 @@
"edit-privileges": "Edit Privileges", "edit-privileges": "Edit Privileges",
"select-clear-all": "Select/Clear All", "select-clear-all": "Select/Clear All",
"chat": "Chat", "chat": "Chat",
"chat-with-privileged": "Chat with Privileged",
"upload-images": "Upload Images", "upload-images": "Upload Images",
"upload-files": "Upload Files", "upload-files": "Upload Files",
"signature": "Signature", "signature": "Signature",
@@ -34,7 +31,7 @@
"edit-posts": "Edit Posts", "edit-posts": "Edit Posts",
"view-edit-history": "View Edit History", "view-edit-history": "View Edit History",
"delete-posts": "Delete Posts", "delete-posts": "Delete Posts",
"view-deleted": "View Deleted Posts", "view_deleted": "View Deleted Posts",
"upvote-posts": "Upvote Posts", "upvote-posts": "Upvote Posts",
"downvote-posts": "Downvote Posts", "downvote-posts": "Downvote Posts",
"delete-topics": "Delete Topics", "delete-topics": "Delete Topics",
@@ -52,6 +49,7 @@
"alert.confirm-moderate": "<strong>Are you sure you wish to grant the moderation privilege to this user group?</strong> This group is public, and any users can join at will.", "alert.confirm-moderate": "<strong>Are you sure you wish to grant the moderation privilege to this user group?</strong> This group is public, and any users can join at will.",
"alert.confirm-admins-mods": "<strong>Are you sure you wish to grant the &quot;Admins &amp; Mods&quot; privilege to this user/group?</strong> Users with this privilege are able to promote and demote other users into privileged positions, <em>including super administrator</em>", "alert.confirm-admins-mods": "<strong>Are you sure you wish to grant the &quot;Admins &amp; Mods&quot; privilege to this user/group?</strong> Users with this privilege are able to promote and demote other users into privileged positions, <em>including super administrator</em>",
"alert.confirm-save": "Please confirm your intention to save these privileges", "alert.confirm-save": "Please confirm your intention to save these privileges",
"alert.saved": "Privilege changes saved and applied",
"alert.confirm-discard": "Are you sure you wish to discard your privilege changes?", "alert.confirm-discard": "Are you sure you wish to discard your privilege changes?",
"alert.discarded": "Privilege changes discarded", "alert.discarded": "Privilege changes discarded",
"alert.confirm-copyToAll": "Are you sure you wish to apply this set of <strong>%1</strong> to <strong>all categories</strong>?", "alert.confirm-copyToAll": "Are you sure you wish to apply this set of <strong>%1</strong> to <strong>all categories</strong>?",

View File

@@ -1,20 +1,20 @@
{ {
"queue": "الطابور", "queue": "Queue",
"description": "There are no users in the registration queue. <br> To enable this feature, go to <a href=\"%1\">Settings &rarr; User &rarr; User Registration</a> and set <strong>Registration Type</strong> to \"Admin Approval\".", "description": "There are no users in the registration queue. <br> To enable this feature, go to <a href=\"%1\">Settings &rarr; User &rarr; User Registration</a> and set <strong>Registration Type</strong> to \"Admin Approval\".",
"list.name": "اﻹسم", "list.name": "Name",
"list.email": "البريد الإلكتروني", "list.email": "Email",
"list.ip": "IP", "list.ip": "IP",
"list.time": "التوقيت", "list.time": "Time",
"list.username-spam": "Frequency: %1 Appears: %2 Confidence: %3", "list.username-spam": "Frequency: %1 Appears: %2 Confidence: %3",
"list.email-spam": "Frequency: %1 Appears: %2", "list.email-spam": "Frequency: %1 Appears: %2",
"list.ip-spam": "Frequency: %1 Appears: %2", "list.ip-spam": "Frequency: %1 Appears: %2",
"invitations": "الدعوات", "invitations": "Invitations",
"invitations.description": "Below is a complete list of invitations sent. Use ctrl-f to search through the list by email or username. <br><br>The username will be displayed to the right of the emails for users who have redeemed their invitations.", "invitations.description": "Below is a complete list of invitations sent. Use ctrl-f to search through the list by email or username. <br><br>The username will be displayed to the right of the emails for users who have redeemed their invitations.",
"invitations.inviter-username": "أسم المستخدم الداعي", "invitations.inviter-username": "Inviter Username",
"invitations.invitee-email": "البريد اﻻلكتروني للمدعو", "invitations.invitee-email": "Invitee Email",
"invitations.invitee-username": "اسم المستخم للمدعو (اذا كان مسجل)", "invitations.invitee-username": "Invitee Username (if registered)",
"invitations.confirm-delete": "هل أنت متأكد من أنك تريد حذف هذه الدعوة؟" "invitations.confirm-delete": "Are you sure you wish to delete this invitation?"
} }

View File

@@ -1,11 +1,9 @@
{ {
"manage-tags": "Manage Tags",
"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",
"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",
"add-tag": "Add tag",
"modify": "Modify Tags", "modify": "Modify Tags",
"rename": "Rename Tags", "rename": "Rename Tags",
"delete": "Delete Selected Tags", "delete": "Delete Selected Tags",

View File

@@ -1,5 +1,4 @@
{ {
"manage-uploads": "Manage Uploads",
"upload-file": "Upload File", "upload-file": "Upload File",
"filename": "Filename", "filename": "Filename",
"usage": "Post Usage", "usage": "Post Usage",

View File

@@ -1,29 +1,22 @@
{ {
"manage-users": "Manage Users",
"users": "المستخدمين", "users": "المستخدمين",
"edit": "Actions", "edit": "Actions",
"make-admin": "Make Admin", "make-admin": "Make Admin",
"remove-admin": "Remove Admin", "remove-admin": "Remove Admin",
"change-email": "Change Email",
"new-email": "New Email",
"validate-email": "Validate Email", "validate-email": "Validate Email",
"send-validation-email": "Send Validation Email", "send-validation-email": "Send Validation Email",
"change-password": "Change Password",
"password-reset-email": "Send Password Reset Email", "password-reset-email": "Send Password Reset Email",
"force-password-reset": "Force Password Reset & Log User Out", "force-password-reset": "Force Password Reset & Log User Out",
"ban": "Ban", "ban": "Ban User(s)",
"ban-users": "Ban User(s)",
"temp-ban": "Ban User(s) Temporarily", "temp-ban": "Ban User(s) Temporarily",
"unban": "Unban User(s)", "unban": "Unban User(s)",
"reset-lockout": "Reset Lockout", "reset-lockout": "Reset Lockout",
"reset-flags": "Reset Flags", "reset-flags": "Reset Flags",
"delete": "Delete", "delete": "Delete <strong>User(s)</strong>",
"delete-users": "Delete <strong>User(s)</strong>",
"delete-content": "Delete User(s) <strong>Content</strong>", "delete-content": "Delete User(s) <strong>Content</strong>",
"purge": "Delete <strong>User(s)</strong> and <strong>Content</strong>", "purge": "Delete <strong>User(s)</strong> and <strong>Content</strong>",
"download-csv": "Download CSV", "download-csv": "Download CSV",
"manage-groups": "Manage Groups", "manage-groups": "Manage Groups",
"set-reputation": "Set Reputation",
"add-group": "Add Group", "add-group": "Add Group",
"create": "Create User", "create": "Create User",
"invite": "Invite by Email", "invite": "Invite by Email",
@@ -56,10 +49,6 @@
"users.username": "username", "users.username": "username",
"users.email": "email", "users.email": "email",
"users.no-email": "(no email)", "users.no-email": "(no email)",
"users.validated": "Validated",
"users.not-validated": "Not Validated",
"users.validation-pending": "Validation Pending",
"users.validation-expired": "Validation Expired",
"users.ip": "IP", "users.ip": "IP",
"users.postcount": "postcount", "users.postcount": "postcount",
"users.reputation": "reputation", "users.reputation": "reputation",
@@ -86,7 +75,6 @@
"alerts.button-ban-x": "Ban %1 user(s)", "alerts.button-ban-x": "Ban %1 user(s)",
"alerts.unban-success": "User(s) unbanned!", "alerts.unban-success": "User(s) unbanned!",
"alerts.lockout-reset-success": "Lockout(s) reset!", "alerts.lockout-reset-success": "Lockout(s) reset!",
"alerts.password-change-success": "Password(s) changed!",
"alerts.flag-reset-success": "Flags(s) reset!", "alerts.flag-reset-success": "Flags(s) reset!",
"alerts.no-remove-yourself-admin": "You can't remove yourself as Administrator!", "alerts.no-remove-yourself-admin": "You can't remove yourself as Administrator!",
"alerts.make-admin-success": "User is now administrator.", "alerts.make-admin-success": "User is now administrator.",
@@ -112,7 +100,6 @@
"alerts.create": "Create User", "alerts.create": "Create User",
"alerts.button-create": "Create", "alerts.button-create": "Create",
"alerts.button-cancel": "Cancel", "alerts.button-cancel": "Cancel",
"alerts.button-change": "Change",
"alerts.error-passwords-different": "Passwords must match!", "alerts.error-passwords-different": "Passwords must match!",
"alerts.error-x": "<strong>Error</strong><p>%1</p>", "alerts.error-x": "<strong>Error</strong><p>%1</p>",
"alerts.create-success": "User created!", "alerts.create-success": "User created!",
@@ -120,10 +107,6 @@
"alerts.prompt-email": "Emails: ", "alerts.prompt-email": "Emails: ",
"alerts.email-sent-to": "An invitation email has been sent to %1", "alerts.email-sent-to": "An invitation email has been sent to %1",
"alerts.x-users-found": "%1 user(s) found, (%2 seconds)", "alerts.x-users-found": "%1 user(s) found, (%2 seconds)",
"alerts.select-a-single-user-to-change-email": "Select a single user to change email",
"export-users-started": "Exporting users as csv, this might take a while. You will receive a notification when it is complete.", "export-users-started": "Exporting users as csv, this might take a while. You will receive a notification when it is complete.",
"export-users-completed": "Users exported as csv, click here to download.", "export-users-completed": "Users exported as csv, click here to download."
"email": "Email",
"password": "Password",
"manage": "Manage"
} }

View File

@@ -14,7 +14,6 @@
"manage/users": "الأعضاء", "manage/users": "الأعضاء",
"manage/admins-mods": "Admins & Mods", "manage/admins-mods": "Admins & Mods",
"manage/registration": "قائمة انتظار التسجيل", "manage/registration": "قائمة انتظار التسجيل",
"manage/flagged-content": "Flagged Content",
"manage/post-queue": "قائمة انتظار المشاركة", "manage/post-queue": "قائمة انتظار المشاركة",
"manage/groups": "المجموعات", "manage/groups": "المجموعات",
"manage/ip-blacklist": "قائمة حظر عناوين IP", "manage/ip-blacklist": "قائمة حظر عناوين IP",
@@ -73,9 +72,7 @@
"development/info": "Info", "development/info": "Info",
"rebuild-and-restart-forum": "Rebuild & Restart Forum", "rebuild-and-restart-forum": "Rebuild & Restart Forum",
"rebuild-and-restart": "Rebuild & Restart",
"restart-forum": "Restart Forum", "restart-forum": "Restart Forum",
"restart": "Restart",
"logout": "Log out", "logout": "Log out",
"view-forum": "View Forum", "view-forum": "View Forum",

View File

@@ -3,27 +3,14 @@
"settings": "Settings", "settings": "Settings",
"lead-text": "From this page you can configure access to the Write API in NodeBB.", "lead-text": "From this page you can configure access to the Write API in NodeBB.",
"intro": "By default, the Write API authenticates users based on their session cookie, but NodeBB also supports Bearer authentication via tokens generated via this page.", "intro": "By default, the Write API authenticates users based on their session cookie, but NodeBB also supports Bearer authentication via tokens generated via this page.",
"warning": "<strong>Be advised</strong> — treat tokens like passwords. If they are leaked, your account should be considered compromised.",
"docs": "Click here to access the full API specification", "docs": "Click here to access the full API specification",
"require-https": "Require API usage via HTTPS only", "require-https": "Require API usage via HTTPS only",
"require-https-caveat": "<strong>Note</strong>: Some installations involving load balancers may proxy their requests to NodeBB using HTTP, in which case this option should remain disabled.", "require-https-caveat": "<strong>Note</strong>: Some installations involving load balancers may proxy their requests to NodeBB using HTTP, in which case this option should remain disabled.",
"uid": "User ID", "uid": "User ID",
"token": "Token",
"uid-help-text": "Specify a User ID to associate with this token. If the user ID is <code>0</code>, it will be considered a <em>master</em> token, which can assume the identity of other users based on the <code>_uid</code> parameter", "uid-help-text": "Specify a User ID to associate with this token. If the user ID is <code>0</code>, it will be considered a <em>master</em> token, which can assume the identity of other users based on the <code>_uid</code> parameter",
"description": "Description", "description": "Description",
"last-seen": "Last seen",
"created": "Created",
"create-token": "Create Token",
"update-token": "Update Token",
"master-token": "Master token",
"last-seen-never": "This key has never been used.",
"no-description": "No description specified.", "no-description": "No description specified.",
"actions": "Actions", "token-on-save": "Token will be generated once form is saved"
"edit": "Edit",
"roll": "Roll",
"delete-confirm": "Are you sure you wish to delete this token? It will not be recoverable.",
"roll-confirm": "Are you sure you wish to regenerate this token? The old token will be immediately revoked and will not be recoverable."
} }

View File

@@ -1,15 +1,12 @@
{ {
"zero-is-disabled": "Enter 0 to disable this restriction",
"chat-settings": "Chat Settings", "chat-settings": "Chat Settings",
"disable": "Disable chat", "disable": "Disable chat",
"disable-editing": "Disable chat message editing/deletion", "disable-editing": "Disable chat message editing/deletion",
"disable-editing-help": "Administrators and global moderators are exempt from this restriction", "disable-editing-help": "Administrators and global moderators are exempt from this restriction",
"max-length": "Maximum length of chat messages", "max-length": "Maximum length of chat messages",
"max-chat-room-name-length": "Maximum length of chat room names",
"max-room-size": "Maximum number of users in chat rooms", "max-room-size": "Maximum number of users in chat rooms",
"delay": "Time between chat messages (ms)", "delay": "Time between chat messages in milliseconds",
"notification-delay": "Notification delay for chat messages", "notification-delay": "Notification delay for chat messages. (0 for no delay)",
"notification-delay-help": "Additional messages sent between this time are collated, and the user is notified once per delay period. Set this to 0 to disable the delay.", "restrictions.seconds-edit-after": "Number of seconds a chat message will remain editable. (0 disabled)",
"restrictions.seconds-edit-after": "Number of seconds a chat message will remain editable.", "restrictions.seconds-delete-after": "Number of seconds a chat message will remain deletable. (0 disabled)"
"restrictions.seconds-delete-after": "Number of seconds a chat message will remain deletable."
} }

View File

@@ -42,7 +42,7 @@
"subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. <code>0</code> for midnight, <code>17</code> for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.<br /> The approximate server time is: <span id=\"serverTime\"></span><br /> The next daily digest is scheduled to be sent <span id=\"nextDigestTime\"></span>", "subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. <code>0</code> for midnight, <code>17</code> for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.<br /> The approximate server time is: <span id=\"serverTime\"></span><br /> The next daily digest is scheduled to be sent <span id=\"nextDigestTime\"></span>",
"notifications.remove-images": "Remove images from email notifications", "notifications.remove-images": "Remove images from email notifications",
"require-email-address": "Require new users to specify an email address", "require-email-address": "Require new users to specify an email address",
"require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means new users will have to enter <strong>and confirm</strong> an email address in order to proceed with registration and subsequent access to the forum. <strong>It does not ensure user will enter a real email address, nor even an address they own.</strong>", "require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means they have to enter an email address in order to proceed with registration. <strong>It does not ensure user will enter a real email address, nor even an address they own.</strong>",
"send-validation-email": "Send validation emails when an email is added or changed", "send-validation-email": "Send validation emails when an email is added or changed",
"include-unverified-emails": "Send emails to recipients who have not explicitly confirmed their emails", "include-unverified-emails": "Send emails to recipients who have not explicitly confirmed their emails",
"include-unverified-warning": "By default, users with emails associated with their account have already been verified, but there are situations where this is not the case (e.g. SSO logins, grandfathered users, etc). <strong>Enable this setting at your own risk</strong> &ndash; sending emails to unverified addresses may be a violation of regional anti-spam laws.", "include-unverified-warning": "By default, users with emails associated with their account have already been verified, but there are situations where this is not the case (e.g. SSO logins, grandfathered users, etc). <strong>Enable this setting at your own risk</strong> &ndash; sending emails to unverified addresses may be a violation of regional anti-spam laws.",

View File

@@ -1,13 +1,11 @@
{ {
"general-settings": "General Settings",
"on-this-page": "On this page:",
"site-settings": "اعدادات الموقع", "site-settings": "اعدادات الموقع",
"title": "عنوان الموقع", "title": "عنوان الموقع",
"title.short": "عنوان قصير", "title.short": "عنوان قصير",
"title.short-placeholder": "ان لم تقم بكتابة عنوان مختصر, سيتم استخدام عنوان الموقع الكلي", "title.short-placeholder": "ان لم تقم بكتابة عنوان مختصر, سيتم استخدام عنوان الموقع الكلي",
"title.url": "Title Link URL", "title.url": "Title Link URL",
"title.url-placeholder": "The URL of the site title", "title.url-placeholder": "The URL of the site title",
"title.url-help": "When the title is clicked, send users to this address. If left blank, user will be sent to the forum index. Note: This is not the external URL used in emails, etc. That is set by the <code>url</code> property in config.json", "title.url-help": "When the title is clicked, send users to this address. If left blank, user will be sent to the forum index. <br> Note: This is not the external URL used in emails, etc. That is set by the <code>url</code> property in config.json",
"title.name": "اسم المنتدي", "title.name": "اسم المنتدي",
"title.show-in-header": "Show Site Title in Header", "title.show-in-header": "Show Site Title in Header",
"browser-title": "عنوان المتصفح", "browser-title": "عنوان المتصفح",
@@ -18,7 +16,7 @@
"description": "وصف الموقع", "description": "وصف الموقع",
"keywords": "الكلمات الدليله للموقع", "keywords": "الكلمات الدليله للموقع",
"keywords-placeholder": "Keywords describing your community, comma-separated", "keywords-placeholder": "Keywords describing your community, comma-separated",
"logo-and-icons": "Site Logo & Icons", "logo": "شعار الموقع",
"logo.image": "صورة", "logo.image": "صورة",
"logo.image-placeholder": "Path to a logo to display on forum header", "logo.image-placeholder": "Path to a logo to display on forum header",
"logo.upload": "رفع", "logo.upload": "رفع",

View File

@@ -1,6 +1,5 @@
{ {
"settings": "Settings", "settings": "Settings",
"guest-settings": "Guest Settings",
"handles.enabled": "Allow guest handles", "handles.enabled": "Allow guest handles",
"handles.enabled-help": "This option exposes a new field that allows guests to pick a name to associate with each post they make. If disabled, they will simply be called \"Guest\"", "handles.enabled-help": "This option exposes a new field that allows guests to pick a name to associate with each post they make. If disabled, they will simply be called \"Guest\"",
"topic-views.enabled": "Allow guests to increase topic view counts", "topic-views.enabled": "Allow guests to increase topic view counts",

View File

@@ -1,5 +1,4 @@
{ {
"navigation": "Navigation",
"icon": "Icon:", "icon": "Icon:",
"change-icon": "change", "change-icon": "change",
"route": "Route:", "route": "Route:",
@@ -13,7 +12,7 @@
"groups": "Groups:", "groups": "Groups:",
"open-new-window": "Open in a new window", "open-new-window": "Open in a new window",
"dropdown": "Dropdown", "dropdown": "Dropdown",
"dropdown-placeholder": "Place your dropdown menu items below, ie: <br/>&lt;li&gt;&lt;a class=&quot;dropdown-item&quot; href&#x3D;&quot;https://myforum.com&quot;&gt;Link 1&lt;/a&gt;&lt;/li&gt;", "dropdown-placeholder": "Place your dropdown menu items below, ie: <br/>&lt;li&gt;&lt;a href&#x3D;&quot;https://myforum.com&quot;&gt;Link 1&lt;/a&gt;&lt;/li&gt;",
"btn.delete": "Delete", "btn.delete": "Delete",
"btn.disable": "Disable", "btn.disable": "Disable",

View File

@@ -1,5 +1,4 @@
{ {
"general": "General",
"sorting": "Post Sorting", "sorting": "Post Sorting",
"sorting.post-default": "Default Post Sorting", "sorting.post-default": "Default Post Sorting",
"sorting.oldest-to-newest": "Oldest to Newest", "sorting.oldest-to-newest": "Oldest to Newest",
@@ -10,6 +9,7 @@
"length": "Post Length", "length": "Post Length",
"post-queue": "Post Queue", "post-queue": "Post Queue",
"restrictions": "Posting Restrictions", "restrictions": "Posting Restrictions",
"restrictions-new": "New User Restrictions",
"restrictions.post-queue": "Enable post queue", "restrictions.post-queue": "Enable post queue",
"restrictions.post-queue-rep-threshold": "Reputation required to bypass post queue", "restrictions.post-queue-rep-threshold": "Reputation required to bypass post queue",
"restrictions.groups-exempt-from-post-queue": "Select groups that should be exempt from the post queue", "restrictions.groups-exempt-from-post-queue": "Select groups that should be exempt from the post queue",
@@ -17,13 +17,18 @@
"restrictions.post-queue-help": "Enabling post queue will put the posts of new users in a queue for approval", "restrictions.post-queue-help": "Enabling post queue will put the posts of new users in a queue for approval",
"restrictions-new.post-queue-help": "Enabling new user restrictions will set restrictions on posts created by new users", "restrictions-new.post-queue-help": "Enabling new user restrictions will set restrictions on posts created by new users",
"restrictions.seconds-between": "Number of seconds between posts", "restrictions.seconds-between": "Number of seconds between posts",
"restrictions.seconds-between-new": "Seconds between posts for new users",
"restrictions.rep-threshold": "Reputation threshold before these restrictions are lifted",
"restrictions.seconds-before-new": "Seconds before a new user can make their first post",
"restrictions.seconds-edit-after": "Number of seconds a post remains editable (set to 0 to disable)", "restrictions.seconds-edit-after": "Number of seconds a post remains editable (set to 0 to disable)",
"restrictions.seconds-delete-after": "Number of seconds a post remains deletable (set to 0 to disable)", "restrictions.seconds-delete-after": "Number of seconds a post remains deletable (set to 0 to disable)",
"restrictions.replies-no-delete": "Number of replies after users are disallowed to delete their own topics (set to 0 to disable)", "restrictions.replies-no-delete": "Number of replies after users are disallowed to delete their own topics (set to 0 to disable)",
"restrictions.title-length": "Title Length", "restrictions.min-title-length": "Minimum Title Length",
"restrictions.post-length": "Post Length", "restrictions.max-title-length": "Maximum Title Length",
"restrictions.min-post-length": "Minimum Post Length",
"restrictions.max-post-length": "Maximum Post Length",
"restrictions.days-until-stale": "Days until topic is considered stale", "restrictions.days-until-stale": "Days until topic is considered stale",
"restrictions.stale-help": "If a topic is considered \"stale\", then a warning will be shown to users who attempt to reply to that topic. (set to 0 to disable)", "restrictions.stale-help": "If a topic is considered \"stale\", then a warning will be shown to users who attempt to reply to that topic.",
"timestamp": "Timestamp", "timestamp": "Timestamp",
"timestamp.cut-off": "Date cut-off (in days)", "timestamp.cut-off": "Date cut-off (in days)",
"timestamp.cut-off-help": "Dates &amp; times will be shown in a relative manner (e.g. \"3 hours ago\" / \"5 days ago\"), and localised into various\n\t\t\t\t\tlanguages. After a certain point, this text can be switched to display the localised date itself\n\t\t\t\t\t(e.g. 5 Nov 2016 15:30).<br /><em>(Default: <code>30</code>, or one month). Set to 0 to always display dates, leave blank to always display relative times.</em>", "timestamp.cut-off-help": "Dates &amp; times will be shown in a relative manner (e.g. \"3 hours ago\" / \"5 days ago\"), and localised into various\n\t\t\t\t\tlanguages. After a certain point, this text can be switched to display the localised date itself\n\t\t\t\t\t(e.g. 5 Nov 2016 15:30).<br /><em>(Default: <code>30</code>, or one month). Set to 0 to always display dates, leave blank to always display relative times.</em>",
@@ -36,9 +41,10 @@
"teaser.last-reply": "Last &ndash; Show the latest reply, or a \"No replies\" placeholder if no replies", "teaser.last-reply": "Last &ndash; Show the latest reply, or a \"No replies\" placeholder if no replies",
"teaser.first": "First", "teaser.first": "First",
"showPostPreviewsOnHover": "Show a preview of posts when mouse overed", "showPostPreviewsOnHover": "Show a preview of posts when mouse overed",
"unread-and-recent": "Unread & Recent Settings", "unread": "Unread Settings",
"unread.cutoff": "Unread cutoff days", "unread.cutoff": "Unread cutoff days",
"unread.min-track-last": "Minimum posts in topic before tracking last read", "unread.min-track-last": "Minimum posts in topic before tracking last read",
"recent": "Recent Settings",
"recent.max-topics": "Maximum topics on /recent", "recent.max-topics": "Maximum topics on /recent",
"recent.categoryFilter.disable": "Disable filtering of topics in ignored categories on the /recent page", "recent.categoryFilter.disable": "Disable filtering of topics in ignored categories on the /recent page",
"signature": "Signature Settings", "signature": "Signature Settings",

View File

@@ -11,7 +11,6 @@
"downvotes-per-day": "Downvotes per day (set to 0 for unlimited downvotes)", "downvotes-per-day": "Downvotes per day (set to 0 for unlimited downvotes)",
"downvotes-per-user-per-day": "Downvotes per user per day (set to 0 for unlimited downvotes)", "downvotes-per-user-per-day": "Downvotes per user per day (set to 0 for unlimited downvotes)",
"min-rep-chat": "Minimum reputation to send chat messages", "min-rep-chat": "Minimum reputation to send chat messages",
"min-rep-post-links": "Minimum reputation to post links",
"min-rep-flag": "Minimum reputation to flag posts", "min-rep-flag": "Minimum reputation to flag posts",
"min-rep-website": "Minimum reputation to add \"Website\" to user profile", "min-rep-website": "Minimum reputation to add \"Website\" to user profile",
"min-rep-aboutme": "Minimum reputation to add \"About me\" to user profile", "min-rep-aboutme": "Minimum reputation to add \"About me\" to user profile",
@@ -28,5 +27,5 @@
"flags.action-on-resolve": "Do the following when a flag is resolved", "flags.action-on-resolve": "Do the following when a flag is resolved",
"flags.action-on-reject": "Do the following when a flag is rejected", "flags.action-on-reject": "Do the following when a flag is rejected",
"flags.action.nothing": "Do nothing", "flags.action.nothing": "Do nothing",
"flags.action.rescind": "Rescind the notification sent to moderators/administrators" "flags.action.rescind": "Rescind the notification send to moderators/administrators"
} }

View File

@@ -1,4 +1,5 @@
{ {
"post-sharing": "Post Sharing", "post-sharing": "Post Sharing",
"info-plugins-additional": "Plugins can add additional networks for sharing posts." "info-plugins-additional": "Plugins can add additional networks for sharing posts.",
"save-success": "Successfully saved Post Sharing Networks!"
} }

View File

@@ -3,7 +3,6 @@
"link-to-manage": "Manage Tags", "link-to-manage": "Manage Tags",
"system-tags": "System Tags", "system-tags": "System Tags",
"system-tags-help": "Only privileged users will be able to use these tags.", "system-tags-help": "Only privileged users will be able to use these tags.",
"tags-per-topic": "Tags per topic",
"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",

View File

@@ -6,8 +6,8 @@
"allow-login-with.username-email": "اسم المستخدم أو البريد الالكتروني", "allow-login-with.username-email": "اسم المستخدم أو البريد الالكتروني",
"allow-login-with.username": "اسم المستخدم فقط", "allow-login-with.username": "اسم المستخدم فقط",
"account-settings": "إعدادت الحساب", "account-settings": "إعدادت الحساب",
"gdpr-enabled": "Enable GDPR consent collection", "gdpr_enabled": "Enable GDPR consent collection",
"gdpr-enabled-help": "When enabled, all new registrants will be required to explicitly give consent for data collection and usage under the <a href=\"https://ec.europa.eu/info/priorities/justice-and-fundamental-rights/data-protection/2018-reform-eu-data-protection-rules/eu-data-protection-rules_en\">General Data Protection Regulation (GDPR)</a>. <strong>Note</strong>: Enabling GDPR does not force pre-existing users to provide consent. To do so, you will need to install the GDPR plugin.", "gdpr_enabled_help": "When enabled, all new registrants will be required to explicitly give consent for data collection and usage under the <a href=\"https://ec.europa.eu/info/priorities/justice-and-fundamental-rights/data-protection/2018-reform-eu-data-protection-rules/eu-data-protection-rules_en\">General Data Protection Regulation (GDPR)</a>. <strong>Note</strong>: Enabling GDPR does not force pre-existing users to provide consent. To do so, you will need to install the GDPR plugin.",
"disable-username-changes": "عدم السماح بتغيير اسم المستخدم", "disable-username-changes": "عدم السماح بتغيير اسم المستخدم",
"disable-email-changes": "عدم السماح بتغيير البريد الالكتروني", "disable-email-changes": "عدم السماح بتغيير البريد الالكتروني",
"disable-password-changes": "عدم السماح بتغيير كلمة المرور", "disable-password-changes": "عدم السماح بتغيير كلمة المرور",
@@ -29,8 +29,6 @@
"session-time-days": "Days", "session-time-days": "Days",
"session-time-seconds": "Seconds", "session-time-seconds": "Seconds",
"session-time-help": "These values are used to govern how long a user stays logged in when they check &quot;Remember Me&quot; on login. Note that only one of these values will be used. If there is no <i>seconds</i> value we fall back to <i>days</i>. If there is no <i>days</i> value we default to <i>14 days</i>.", "session-time-help": "These values are used to govern how long a user stays logged in when they check &quot;Remember Me&quot; on login. Note that only one of these values will be used. If there is no <i>seconds</i> value we fall back to <i>days</i>. If there is no <i>days</i> value we default to <i>14 days</i>.",
"session-duration": "Session length if \"Remember Me\" is not checked (seconds)",
"session-duration-help": "By default — or if set to <code>0</code> — a user will stay logged in for the duration of the session (e.g. however long the browser window/tab remains open). Set this value to explicitly invalidate the session after the specified number of seconds.",
"online-cutoff": "Minutes after user is considered inactive", "online-cutoff": "Minutes after user is considered inactive",
"online-cutoff-help": "If user performs no actions for this duration, they are considered inactive and they do not receive realtime updates.", "online-cutoff-help": "If user performs no actions for this duration, they are considered inactive and they do not receive realtime updates.",
"registration": "تسجيل المستخدم", "registration": "تسجيل المستخدم",
@@ -59,7 +57,7 @@
"max-about-me-length": "الحد الأعلى من الأحرف في حقل \"عني\"", "max-about-me-length": "الحد الأعلى من الأحرف في حقل \"عني\"",
"terms-of-use": "شروط استخدام المنتدى <small>(تترك فارغة لتعطيلها)</small>", "terms-of-use": "شروط استخدام المنتدى <small>(تترك فارغة لتعطيلها)</small>",
"user-search": "بحث الأعضاء", "user-search": "بحث الأعضاء",
"user-search-results-per-page": "Number of users to display in search results", "user-search-results-per-page": "عدد النتائج المراد عرضها",
"default-user-settings": "إعدادات الأعضاء الافتراضية", "default-user-settings": "إعدادات الأعضاء الافتراضية",
"show-email": "عرض البريد الإلكتروني", "show-email": "عرض البريد الإلكتروني",
"show-fullname": "عرض الاسم الكامل", "show-fullname": "عرض الاسم الكامل",
@@ -79,14 +77,7 @@
"follow-replied-topics": "Follow topics that you reply to", "follow-replied-topics": "Follow topics that you reply to",
"default-notification-settings": "Default notification settings", "default-notification-settings": "Default notification settings",
"categoryWatchState": "Default category watch state", "categoryWatchState": "Default category watch state",
"categoryWatchState.tracking": "Tracking", "categoryWatchState.watching": "Watching",
"categoryWatchState.notwatching": "Not Watching", "categoryWatchState.notwatching": "Not Watching",
"categoryWatchState.ignoring": "Ignoring", "categoryWatchState.ignoring": "Ignoring"
"restrictions-new": "New User Restrictions",
"restrictions.rep-threshold": "Reputation threshold before these restrictions are lifted",
"restrictions.seconds-between-new": "Seconds between posts for new users",
"restrictions.seconds-before-new": "Seconds before a new user can make their first post",
"restrictions.seconds-edit-after-new": "Number of seconds a post remains editable for new users (set to 0 to disable)",
"restrictions.milliseconds-between-messages": "Time between chat messages for new users (ms)",
"restrictions.groups-exempt-from-new-user-restrictions": "Select groups that should be exempt from the new user restrictions"
} }

View File

@@ -1,24 +1,21 @@
{ {
"category": "قسم", "category": "قسم",
"subcategories": "قسم فرعي", "subcategories": "قسم فرعي",
"new-topic-button": "موضوع جديد", "new_topic_button": "موضوع جديد",
"guest-login-post": "سجل الدخول للمشاركة", "guest-login-post": "سجل الدخول للمشاركة",
"no-topics": "<strong>لا توجد مواضيع في هذه القسم</strong>لم لا تحاول إنشاء موضوع؟<br />", "no_topics": "<strong>لا توجد مواضيع في هذه القسم</strong>لم لا تحاول إنشاء موضوع؟<br />",
"browsing": "تصفح", "browsing": "تصفح",
"no-replies": "لم يرد أحد", "no_replies": "لم يرد أحد",
"no-new-posts": "لا توجد مشاركات جديدة.", "no_new_posts": "لا توجد مشاركات جديدة.",
"watch": "تابع", "watch": "تابع",
"ignore": "تجاهل", "ignore": "تجاهل",
"watching": "متابع", "watching": "متابع",
"tracking": "Tracking",
"not-watching": "لست متابع", "not-watching": "لست متابع",
"ignoring": "متجاهل", "ignoring": "متجاهل",
"watching.description": "Notify me of new topics.<br/>Show topics in unread & recent", "watching.description": "أظهر المواضيع في الغير مقروء و الحديث",
"tracking.description": "Shows topics in unread & recent",
"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 & 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",
"tracking.message": "You are now tracking 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": "الأقسام المُتابعة",

View File

@@ -3,8 +3,8 @@
"password-reset-requested": "Password Reset Requested!", "password-reset-requested": "Password Reset Requested!",
"welcome-to": "مرحبًا بك في %1", "welcome-to": "مرحبًا بك في %1",
"invite": "دعوة من %1", "invite": "دعوة من %1",
"greeting-no-name": "مرحبًا", "greeting_no_name": "مرحبًا",
"greeting-with-name": "مرحبًا بك يا %1", "greeting_with_name": "مرحبًا بك يا %1",
"email.verify-your-email.subject": "Please verify your email", "email.verify-your-email.subject": "Please verify your email",
"email.verify.text1": "You've requested that we change or confirm your email address", "email.verify.text1": "You've requested that we change or confirm your email address",
"email.verify.text2": "For security purposes, we only change or confirm the email address on file once its ownership has been confirmed via email. <strong>If you did not request this, no action is required on your part.</strong>", "email.verify.text2": "For security purposes, we only change or confirm the email address on file once its ownership has been confirmed via email. <strong>If you did not request this, no action is required on your part.</strong>",
@@ -22,9 +22,7 @@
"reset.notify.subject": "تم تغيير كلمة المرور بنجاح", "reset.notify.subject": "تم تغيير كلمة المرور بنجاح",
"reset.notify.text1": "نحيطك علما أن كلمة مرورك قد تم تغييرها في %1", "reset.notify.text1": "نحيطك علما أن كلمة مرورك قد تم تغييرها في %1",
"reset.notify.text2": "إن لم يكن لديك علم بهذا، المرجو إشعار مدبر النظام بأسرع مايمكن.", "reset.notify.text2": "إن لم يكن لديك علم بهذا، المرجو إشعار مدبر النظام بأسرع مايمكن.",
"digest.unread-rooms": "Unread rooms", "digest.latest_topics": "آخر المستجدات من %1",
"digest.room-name-unreadcount": "%1 (%2 unread)",
"digest.latest-topics": "آخر المستجدات من %1",
"digest.top-topics": "Top topics from %1", "digest.top-topics": "Top topics from %1",
"digest.popular-topics": "Popular topics from %1", "digest.popular-topics": "Popular topics from %1",
"digest.cta": "انقر هنا لمشاهدة %1", "digest.cta": "انقر هنا لمشاهدة %1",
@@ -36,8 +34,7 @@
"digest.title.day": "Your Daily Digest", "digest.title.day": "Your Daily Digest",
"digest.title.week": "Your Weekly Digest", "digest.title.week": "Your Weekly Digest",
"digest.title.month": "Your Monthly Digest", "digest.title.month": "Your Monthly Digest",
"notif.chat.new-message-from-user": "New message from \"%1\"", "notif.chat.subject": "هناك محادثة جديدة من %1",
"notif.chat.new-message-from-user-in-room": "New message from %1 in room %2",
"notif.chat.cta": "انقر هنا لمتابعة المحادثة", "notif.chat.cta": "انقر هنا لمتابعة المحادثة",
"notif.chat.unsub.info": "تم إرسال هذا الإشعار بوجودة محادثة جديدة وفقا لخيارات تسجيلك.", "notif.chat.unsub.info": "تم إرسال هذا الإشعار بوجودة محادثة جديدة وفقا لخيارات تسجيلك.",
"notif.post.unsub.info": "تم إشعارك بهذه المشاركة بناءً على الخيارات التي سبق وأن حددتها.", "notif.post.unsub.info": "تم إشعارك بهذه المشاركة بناءً على الخيارات التي سبق وأن حددتها.",

View File

@@ -42,21 +42,19 @@
"user-doesnt-have-email": "User \"%1\" does not have an email set.", "user-doesnt-have-email": "User \"%1\" does not have an email set.",
"email-confirm-failed": "لم نستطع تفعيل بريدك الإلكتروني، المرجو المحاولة لاحقًا.", "email-confirm-failed": "لم نستطع تفعيل بريدك الإلكتروني، المرجو المحاولة لاحقًا.",
"confirm-email-already-sent": "لقد تم ارسال بريد التأكيد، الرجاء اﻹنتظار 1% دقائق لإعادة اﻹرسال", "confirm-email-already-sent": "لقد تم ارسال بريد التأكيد، الرجاء اﻹنتظار 1% دقائق لإعادة اﻹرسال",
"confirm-email-expired": "Confirmation email expired",
"sendmail-not-found": "The sendmail executable could not be found, please ensure it is installed and executable by the user running NodeBB.", "sendmail-not-found": "The sendmail executable could not be found, please ensure it is installed and executable by the user running NodeBB.",
"digest-not-enabled": "This user does not have digests enabled, or the system default is not configured to send digests", "digest-not-enabled": "This user does not have digests enabled, or the system default is not configured to send digests",
"username-too-short": "اسم المستخدم قصير.", "username-too-short": "اسم المستخدم قصير.",
"username-too-long": "اسم المستخدم طويل", "username-too-long": "اسم المستخدم طويل",
"password-too-long": "كلمة السر طويلة", "password-too-long": "كلمة السر طويلة ",
"reset-rate-limited": "Too many password reset requests (rate limited)", "reset-rate-limited": "Too many password reset requests (rate limited)",
"reset-same-password": "Please use a password that is different from your current one", "reset-same-password": "Please use a password that is different from your current one",
"user-banned": "المستخدم محظور", "user-banned": "المستخدم محظور",
"user-banned-reason": "Sorry, this account has been banned (Reason: %1)", "user-banned-reason": "Sorry, this account has been banned (Reason: %1)",
"user-banned-reason-until": "Sorry, this account has been banned until %1 (Reason: %2)", "user-banned-reason-until": "Sorry, this account has been banned until %1 (Reason: %2)",
"user-too-new": "عذرا, يجب أن تنتظر 1% ثواني قبل قيامك بأول مشاركة", "user-too-new": "عذرا, يجب أن تنتظر 1% ثواني قبل قيامك بأول مشاركة",
"blacklisted-ip": "نأسف، لقد تم حظرك من استخدام وتصفح المنتدى. إذا كنت تعتقد أن هذا خطأ رجاءًا اتصل بالإدارة.", "blacklisted-ip": "نأسف، لقد تم حظرك من استخدام وتصفح المنتدى. إذا كنت تعتقد أن هذا خطأ رجاءًا اتصل بالإدارة. ",
"cant-blacklist-self-ip": "You can't blacklist your own IP", "ban-expiry-missing": "رجاءًا ضع تاريخ نهاية الحظر. ",
"ban-expiry-missing": "رجاءًا ضع تاريخ نهاية الحظر.",
"no-category": "قائمة غير موجودة", "no-category": "قائمة غير موجودة",
"no-topic": "موضوع غير موجود", "no-topic": "موضوع غير موجود",
"no-post": "رد غير موجود", "no-post": "رد غير موجود",
@@ -64,7 +62,6 @@
"no-user": "اسم مستخدم غير موجود", "no-user": "اسم مستخدم غير موجود",
"no-teaser": "مقتطف غير موجود", "no-teaser": "مقتطف غير موجود",
"no-flag": "Flag does not exist", "no-flag": "Flag does not exist",
"no-chat-room": "Chat room does not exist",
"no-privileges": "لاتملك الصلاحيات اللازمة للقيام بهذه العملية", "no-privileges": "لاتملك الصلاحيات اللازمة للقيام بهذه العملية",
"category-disabled": "قائمة معطلة", "category-disabled": "قائمة معطلة",
"topic-locked": "الموضوع مقفول", "topic-locked": "الموضوع مقفول",
@@ -91,11 +88,8 @@
"category-not-selected": "Category not selected.", "category-not-selected": "Category not selected.",
"too-many-posts": "يسمح لك بالنشر مرة كل %1 ثانية - يرجى الإنتظار قبل النشر مجدداً", "too-many-posts": "يسمح لك بالنشر مرة كل %1 ثانية - يرجى الإنتظار قبل النشر مجدداً",
"too-many-posts-newbie": "As a new user, you can only post once every %1 second(s) until you have earned %2 reputation - please wait before posting again", "too-many-posts-newbie": "As a new user, you can only post once every %1 second(s) until you have earned %2 reputation - please wait before posting again",
"too-many-posts-newbie-minutes": "As a new user, you can only post once every %1 minute(s) until you have earned %2 reputation - please wait before posting again",
"already-posting": "You are already posting",
"tag-too-short": "Please enter a longer tag. Tags should contain at least %1 character(s)", "tag-too-short": "Please enter a longer tag. Tags should contain at least %1 character(s)",
"tag-too-long": "Please enter a shorter tag. Tags can't be longer than %1 character(s)", "tag-too-long": "Please enter a shorter tag. Tags can't be longer than %1 character(s)",
"tag-not-allowed": "Tag not allowed",
"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-use-system-tag": "You can not use this system tag.",
@@ -105,7 +99,6 @@
"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.", "upload-ratelimit-reached": "You have uploaded too many files at one time. Please try again later.",
"upload-error-fallback": "Unable to upload image — %1",
"scheduling-to-past": "Please select a date in the future.", "scheduling-to-past": "Please select a date in the future.",
"invalid-schedule-date": "Please enter a valid date and time.", "invalid-schedule-date": "Please enter a valid date and time.",
"cant-pin-scheduled": "Scheduled topics cannot be (un)pinned.", "cant-pin-scheduled": "Scheduled topics cannot be (un)pinned.",
@@ -121,7 +114,7 @@
"cant-make-banned-users-admin": "You can't make banned users admin.", "cant-make-banned-users-admin": "You can't make banned users admin.",
"cant-remove-last-admin": "رجاءًا ، أضف مدير أخر قبل حذف صلاحيات الإدارة من حسابك.", "cant-remove-last-admin": "رجاءًا ، أضف مدير أخر قبل حذف صلاحيات الإدارة من حسابك.",
"account-deletion-disabled": "Account deletion is disabled", "account-deletion-disabled": "Account deletion is disabled",
"cant-delete-admin": "رجاءًا أزل صلاحيات الإدارة قبل حذف الحساب.", "cant-delete-admin": "رجاءًا أزل صلاحيات الإدارة قبل حذف الحساب. ",
"already-deleting": "Already deleting", "already-deleting": "Already deleting",
"invalid-image": "Invalid image", "invalid-image": "Invalid image",
"invalid-image-type": "نوع الصورة غير مدعوم. الأنواع المدعومة هي : %1", "invalid-image-type": "نوع الصورة غير مدعوم. الأنواع المدعومة هي : %1",
@@ -139,8 +132,6 @@
"group-already-requested": "سبق وتم تسجيل طلب العضوية", "group-already-requested": "سبق وتم تسجيل طلب العضوية",
"group-join-disabled": "You are not able to join this group at this time", "group-join-disabled": "You are not able to join this group at this time",
"group-leave-disabled": "You are not able to leave this group at this time", "group-leave-disabled": "You are not able to leave this group at this time",
"group-user-not-pending": "User does not have a pending request to join this group.",
"gorup-user-not-invited": "User has not been invited to join this group.",
"post-already-deleted": "سبق وتم حذف هذا الرد", "post-already-deleted": "سبق وتم حذف هذا الرد",
"post-already-restored": "سبق وتم إلغاء حذف هذا الرد", "post-already-restored": "سبق وتم إلغاء حذف هذا الرد",
"topic-already-deleted": "سبق وتم حذف هذا الموضوع", "topic-already-deleted": "سبق وتم حذف هذا الموضوع",
@@ -150,7 +141,7 @@
"invalid-file": "ملف غير مقبول", "invalid-file": "ملف غير مقبول",
"uploads-are-disabled": "رفع الملفات غير مفعل", "uploads-are-disabled": "رفع الملفات غير مفعل",
"signature-too-long": "عذرا، توقيعك يجب ألا يتجاوز %1 حرفًا.", "signature-too-long": "عذرا، توقيعك يجب ألا يتجاوز %1 حرفًا.",
"about-me-too-long": "نأسف، ( عني ) لا يمكن أن يكون أكثر من %1 حرف.", "about-me-too-long": "نأسف، ( عني ) لا يمكن أن يكون أكثر من %1 حرف. ",
"cant-chat-with-yourself": "لايمكنك فتح محادثة مع نفسك", "cant-chat-with-yourself": "لايمكنك فتح محادثة مع نفسك",
"chat-restricted": "هذا المستخدم عطل المحادثات الواردة عليه. يجب أن يتبعك حتى تتمكن من فتح محادثة معه.", "chat-restricted": "هذا المستخدم عطل المحادثات الواردة عليه. يجب أن يتبعك حتى تتمكن من فتح محادثة معه.",
"chat-disabled": "نظام المحادثة معطل.", "chat-disabled": "نظام المحادثة معطل.",
@@ -164,16 +155,12 @@
"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.", "chat-room-does-not-exist": "Chat room does not exist.",
"cant-add-users-to-chat-room": "Can't add users to chat room.",
"cant-remove-users-from-chat-room": "Can't remove users from chat room.",
"chat-room-name-too-long": "Chat room name too long. Names can't be longer than %1 characters.",
"already-voting-for-this-post": "لقد شاركت بالتصويت ، ألا تذكر؟", "already-voting-for-this-post": "لقد شاركت بالتصويت ، ألا تذكر؟",
"reputation-system-disabled": "نظام السمعة معطل", "reputation-system-disabled": "نظام السمعة معطل",
"downvoting-disabled": "التصويتات السلبية معطلة", "downvoting-disabled": "التصويتات السلبية معطلة",
"not-enough-reputation-to-chat": "You need %1 reputation to chat", "not-enough-reputation-to-chat": "You need %1 reputation to chat",
"not-enough-reputation-to-upvote": "You need %1 reputation to upvote", "not-enough-reputation-to-upvote": "You need %1 reputation to upvote",
"not-enough-reputation-to-downvote": "You need %1 reputation to downvote", "not-enough-reputation-to-downvote": "You need %1 reputation to downvote",
"not-enough-reputation-to-post-links": "You need %1 reputation to post links",
"not-enough-reputation-to-flag": "You need %1 reputation to flag this post", "not-enough-reputation-to-flag": "You need %1 reputation to flag this post",
"not-enough-reputation-min-rep-website": "You need %1 reputation to add a website", "not-enough-reputation-min-rep-website": "You need %1 reputation to add a website",
"not-enough-reputation-min-rep-aboutme": "You need %1 reputation to add an about me", "not-enough-reputation-min-rep-aboutme": "You need %1 reputation to add an about me",
@@ -185,7 +172,6 @@
"post-flagged-too-many-times": "This post has been flagged by others already", "post-flagged-too-many-times": "This post has been flagged by others already",
"user-flagged-too-many-times": "This user has been flagged by others already", "user-flagged-too-many-times": "This user has been flagged by others already",
"cant-flag-privileged": "You are not allowed to flag the profiles or content of privileged users (moderators/global moderators/admins)", "cant-flag-privileged": "You are not allowed to flag the profiles or content of privileged users (moderators/global moderators/admins)",
"cant-locate-flag-report": "Cannot locate flag report",
"self-vote": "You cannot vote on your own post", "self-vote": "You cannot vote on your own post",
"too-many-upvotes-today": "You can only upvote %1 times a day", "too-many-upvotes-today": "You can only upvote %1 times a day",
"too-many-upvotes-today-user": "You can only upvote a user %1 times a day", "too-many-upvotes-today-user": "You can only upvote a user %1 times a day",
@@ -203,7 +189,6 @@
"not-in-room": "المستخدم غير موجود في الغرفة.", "not-in-room": "المستخدم غير موجود في الغرفة.",
"cant-kick-self": "لا يمكنك طرد نفسك من المجموعة.", "cant-kick-self": "لا يمكنك طرد نفسك من المجموعة.",
"no-users-selected": "لا يوجد مستخدم محدد.", "no-users-selected": "لا يوجد مستخدم محدد.",
"no-groups-selected": "No group(s) selected",
"invalid-home-page-route": "Invalid home page route", "invalid-home-page-route": "Invalid home page route",
"invalid-session": "Invalid Session", "invalid-session": "Invalid Session",
"invalid-session-text": "It looks like your login session is no longer active. Please refresh this page.", "invalid-session-text": "It looks like your login session is no longer active. Please refresh this page.",
@@ -234,6 +219,5 @@
"api.429": "You have made too many requests, please try again later", "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.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.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", "api.503": "The route you are trying to call is not currently available due to a server configuration"
"api.reauth-required": "The resource you are trying to access requires (re-)authentication."
} }

View File

@@ -1,32 +1,27 @@
{ {
"state": "الحالة", "state": "الحالة",
"report": "Report",
"reports": "Reports", "reports": "Reports",
"first-reported": "First Reported", "first-reported": "First Reported",
"no-flags": "Hooray! No flags found.", "no-flags": "Hooray! No flags found.",
"x-flags-found": "%1 flag(s) found.",
"assignee": "المحال إليه", "assignee": "المحال إليه",
"update": "تحديث", "update": "تحديث",
"updated": "تم التحديث", "updated": "تم التحديث",
"resolved": "Resolved", "resolved": "Resolved",
"report-added": "Added",
"report-rescinded": "Rescinded",
"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.",
"target-aboutme-empty": "This user has no &quot;About Me&quot; set.",
"graph-label": "Daily Flags", "graph-label": "Daily Flags",
"quick-filters": "Quick Filters", "quick-filters": "Quick Filters",
"filter-active": "There are one or more filters active in this list of flags", "filter-active": "There are one or more filters active in this list of flags",
"filter-reset": "ازالة الفلاتر", "filter-reset": "ازالة الفلاتر",
"filters": "خيارات الفلتر", "filters": "خيارات الفلتر",
"filter-reporterId": "Reporter", "filter-reporterId": "Reporter UID",
"filter-targetUid": "Reportee", "filter-targetUid": "Flagged UID",
"filter-type": "عنوان العلامة", "filter-type": "عنوان العلامة",
"filter-type-all": "كل المحتوي", "filter-type-all": "كل المحتوي",
"filter-type-post": "مشاركة", "filter-type-post": "مشاركة",
"filter-type-user": "مستخدم", "filter-type-user": "مستخدم",
"filter-state": "الحالة", "filter-state": "الحالة",
"filter-assignee": "Assignee", "filter-assignee": "Assignee UID",
"filter-cid": "Category", "filter-cid": "Category",
"filter-quick-mine": "Assigned to me", "filter-quick-mine": "Assigned to me",
"filter-cid-all": "All categories", "filter-cid-all": "All categories",
@@ -50,7 +45,6 @@
"notes": "Flag Notes", "notes": "Flag Notes",
"add-note": "اضافة ملاحظة", "add-note": "اضافة ملاحظة",
"edit-note": "Edit Note",
"no-notes": "No shared notes.", "no-notes": "No shared notes.",
"delete-note-confirm": "Are you sure you want to delete this flag note?", "delete-note-confirm": "Are you sure you want to delete this flag note?",
"delete-flag-confirm": "Are you sure you want to delete this flag?", "delete-flag-confirm": "Are you sure you want to delete this flag?",

View File

@@ -4,28 +4,26 @@
"buttons.close": "أغلق", "buttons.close": "أغلق",
"403.title": "غير مسموح بالدخول", "403.title": "غير مسموح بالدخول",
"403.message": "يبدو أنك قد تعثرت على صفحة لا تمتلك الصلاحية للدخول إليها", "403.message": "يبدو أنك قد تعثرت على صفحة لا تمتلك الصلاحية للدخول إليها",
"403.login": "Perhaps you should <a class=\"alert-link\" href='%1/login'>try logging in</a>?", "403.login": "ربما يجب عليك <a href='%1/login'>تسجل دخولك</a>.",
"404.title": "لم يتم العثور", "404.title": "لم يتم العثور",
"404.message": "You seem to have stumbled upon a page that does not exist.<br/><div class=\"text-sm text-muted\">Return to the <a href='%1/'>home page</a>.</div>", "404.message": "الصفحة غير موجودة. العودة لـ <a href='%1/'>الرئيسية</a>",
"500.title": "خطأ داخلي", "500.title": "خطأ داخلي",
"500.message": "عفوا! يبدو وكأنه شيء ذهب على نحو خاطئ!", "500.message": "عفوا! يبدو وكأنه شيء ذهب على نحو خاطئ!",
"400.title": "طلب سيئ", "400.title": "طلب سيئ",
"400.message": "It looks like this link is malformed, please double-check and try again.<br/><div class=\"text-sm text-muted\">Return to the <a href='%1/'>home page</a>.</div>", "400.message": "الرابط غير صحيح. رجاءًا تأكد من الرابط أو ارجع لـ <a href='%1/'>الرئيسية</a>",
"register": "تسجيل", "register": "تسجيل",
"login": "دخول", "login": "دخول",
"please-log-in": "الرجاء تسجيل الدخول", "please_log_in": "الرجاء تسجيل الدخول",
"logout": "تسجيل الخروج", "logout": "تسجيل الخروج",
"posting-restriction-info": "إضافة مشاركات جديد حكر على الأعضاء المسجلين، انقر هنا لتسجيل الدخول.", "posting_restriction_info": "إضافة مشاركات جديد حكر على الأعضاء المسجلين، انقر هنا لتسجيل الدخول.",
"welcome-back": "مرحبًا بعودتك", "welcome_back": "مرحبًا بعودتك",
"you-have-successfully-logged-in": "تم سجيل الدخول بنجاح", "you_have_successfully_logged_in": "تم سجيل الدخول بنجاح",
"save-changes": "حفظ التغييرات", "save_changes": "حفظ التغييرات",
"save": "حفظ", "save": "حفظ",
"create": "Create",
"cancel": "Cancel",
"close": "أغلق", "close": "أغلق",
"pagination": "الصفحات", "pagination": "الصفحات",
"pagination.out-of": "%1 من %2", "pagination.out_of": "%1 من %2",
"pagination.enter-index": "Go to post index", "pagination.enter_index": "Go to post index",
"header.admin": "مدير النظام", "header.admin": "مدير النظام",
"header.categories": "الأقسام", "header.categories": "الأقسام",
"header.recent": "حديث", "header.recent": "حديث",
@@ -39,20 +37,14 @@
"header.notifications": "التنبيهات", "header.notifications": "التنبيهات",
"header.search": "بحث", "header.search": "بحث",
"header.profile": "ملف", "header.profile": "ملف",
"header.account": "Account",
"header.navigation": "الاستكشاف", "header.navigation": "الاستكشاف",
"header.manage": "Manage",
"header.drafts": "Drafts",
"notifications.loading": "تحميل التنبيهات", "notifications.loading": "تحميل التنبيهات",
"chats.loading": "تحميل الدردشات", "chats.loading": "تحميل الدردشات",
"drafts.loading": "Loading Drafts",
"motd.welcome": "مرحبا بكم في NodeBB، منصة المناقشة المستقبلية.", "motd.welcome": "مرحبا بكم في NodeBB، منصة المناقشة المستقبلية.",
"previouspage": "الصفحة السابقة", "previouspage": "الصفحة السابقة",
"nextpage": "الصفحة التالية", "nextpage": "الصفحة التالية",
"alert.success": "نجاح", "alert.success": "نجاح",
"alert.error": "خطأ", "alert.error": "خطأ",
"alert.warning": "Warning",
"alert.info": "Info",
"alert.banned": "محظور", "alert.banned": "محظور",
"alert.banned.message": "You have just been banned, your access is now restricted.", "alert.banned.message": "You have just been banned, your access is now restricted.",
"alert.unbanned": "Unbanned", "alert.unbanned": "Unbanned",
@@ -62,9 +54,7 @@
"users": "الأعضاء", "users": "الأعضاء",
"topics": "المواضيع", "topics": "المواضيع",
"posts": "المشاركات", "posts": "المشاركات",
"x-posts": "<span class=\"formatted-number\">%1</span> posts", "x-posts": "%1 posts",
"x-topics": "<span class=\"formatted-number\">%1</span> topics",
"x-reputation": "<span class=\"formatted-number\">%1</span> reputation",
"best": "الأفضل", "best": "الأفضل",
"controversial": "Controversial", "controversial": "Controversial",
"votes": "Votes", "votes": "Votes",
@@ -79,27 +69,24 @@
"reputation": "السمعة", "reputation": "السمعة",
"lastpost": "Last post", "lastpost": "Last post",
"firstpost": "First post", "firstpost": "First post",
"about": "About", "read_more": "اقرأ المزيد",
"read-more": "اقرأ المزيد",
"more": "المزيد", "more": "المزيد",
"none": "None", "none": "None",
"posted-ago-by-guest": "كتب %1 بواسطة زائر", "posted_ago_by_guest": "كتب %1 بواسطة زائر",
"posted-ago-by": "كتب %1 بواسطة %2", "posted_ago_by": "كتب %1 بواسطة %2",
"posted-ago": "كتب %1", "posted_ago": "كتب %1",
"posted-in": "كتب في %1", "posted_in": "كتب في %1",
"posted-in-by": "كتب في 1% بواسطة %2", "posted_in_by": "كتب في 1% بواسطة %2",
"posted-in-ago": "كتب في %1 %2", "posted_in_ago": "كتب في %1 %2",
"posted-in-ago-by": "كتب في %1 %2 من طرف %3", "posted_in_ago_by": "كتب في %1 %2 من طرف %3",
"user-posted-ago": "%1 كتب %2", "user_posted_ago": "%1 كتب %2",
"guest-posted-ago": "كتب زائر %1", "guest_posted_ago": "كتب زائر %1",
"last-edited-by": "اخر تحرير بواسطة 1%", "last_edited_by": "اخر تحرير بواسطة 1%",
"edited-timestamp": "Edited %1",
"norecentposts": "لاوجود لمشاركات جديدة", "norecentposts": "لاوجود لمشاركات جديدة",
"norecenttopics": "لاوجود لمواضيع جديدة", "norecenttopics": "لاوجود لمواضيع جديدة",
"recentposts": "آخر المشاركات", "recentposts": "آخر المشاركات",
"recentips": "آخر عناوين ال IP التي سجلت الدخول", "recentips": "آخر عناوين ال IP التي سجلت الدخول",
"moderator-tools": "أدوات المشرف", "moderator_tools": "أدوات المشرف",
"status": "Status",
"online": "المتواجدون حاليًّا", "online": "المتواجدون حاليًّا",
"away": "غير متواجد", "away": "غير متواجد",
"dnd": "عدم الإزعاج", "dnd": "عدم الإزعاج",
@@ -109,7 +96,7 @@
"language": "اللغة", "language": "اللغة",
"guest": "زائر", "guest": "زائر",
"guests": "الزوار", "guests": "الزوار",
"former-user": "A Former User", "former_user": "A Former User",
"system-user": "System", "system-user": "System",
"unknown-user": "Unknown user", "unknown-user": "Unknown user",
"updated.title": "تم تحديث المنتدى", "updated.title": "تم تحديث المنتدى",
@@ -117,12 +104,12 @@
"privacy": "الخصوصية", "privacy": "الخصوصية",
"follow": "متابعة", "follow": "متابعة",
"unfollow": "إلغاء المتابعة", "unfollow": "إلغاء المتابعة",
"delete-all": "حذف الكل", "delete_all": "حذف الكل",
"map": "خريطة", "map": "خريطة",
"sessions": "الجلسة", "sessions": "الجلسة",
"ip-address": "عنوان الآي بي", "ip_address": "عنوان الآي بي",
"enter-page-number": "ادخل رقم الصفحة", "enter_page_number": "ادخل رقم الصفحة",
"upload-file": "ارفع ملف", "upload_file": "ارفع ملف",
"upload": "ارفع", "upload": "ارفع",
"uploads": "Uploads", "uploads": "Uploads",
"allowed-file-types": "صيغ الملفات المدعومة هي 1%", "allowed-file-types": "صيغ الملفات المدعومة هي 1%",
@@ -131,13 +118,9 @@
"play": "تشغيل", "play": "تشغيل",
"cookies.message": "هذا الموقع يستخدم ملفات تعريف الارتباط لضمان حصولك على أفضل تجربة على موقعنا.", "cookies.message": "هذا الموقع يستخدم ملفات تعريف الارتباط لضمان حصولك على أفضل تجربة على موقعنا.",
"cookies.accept": "فهمت الأمر!", "cookies.accept": "فهمت الأمر!",
"cookies.learn-more": "أعرف المزيد", "cookies.learn_more": "أعرف المزيد",
"edited": "حُرِر", "edited": "حُرِر",
"disabled": "معطل", "disabled": "معطل",
"select": "تحديد", "select": "تحديد",
"copied": "Copied", "user-search-prompt": "Type something here to find users..."
"user-search-prompt": "Type something here to find users...",
"hidden": "Hidden",
"sort": "Sort",
"actions": "Actions"
} }

View File

@@ -1,66 +1,64 @@
{ {
"all-groups": "All groups",
"groups": "المجموعات", "groups": "المجموعات",
"members": "Members", "view_group": "معاينة المجموعة",
"view-group": "معاينة المجموعة",
"owner": "مالك المجموعة", "owner": "مالك المجموعة",
"new-group": "أنشئ مجموعة جديدة", "new_group": "أنشئ مجموعة جديدة",
"no-groups-found": "لاوجدود لمجموعات يمكن معاينتها", "no_groups_found": "لاوجدود لمجموعات يمكن معاينتها",
"pending.accept": "موافق", "pending.accept": "موافق",
"pending.reject": "رفض", "pending.reject": "رفض",
"pending.accept-all": "قبول الكل", "pending.accept_all": "قبول الكل",
"pending.reject-all": "رفض الكل", "pending.reject_all": "رفض الكل",
"pending.none": "لايوجد أعضاء ينتظرون التفعيل حالياً", "pending.none": "لايوجد أعضاء ينتظرون التفعيل حالياً",
"invited.none": "لايوجد أعضاء مدعوون في حالياً", "invited.none": "لايوجد أعضاء مدعوون في حالياً",
"invited.uninvite": "إلغ الدعوة", "invited.uninvite": "إلغ الدعوة",
"invited.search": "ابحث عن أعضاء لدعوتهم للمجموعة", "invited.search": "ابحث عن أعضاء لدعوتهم للمجموعة",
"invited.notification-title": "You have been invited to join <strong>%1</strong>", "invited.notification_title": "You have been invited to join <strong>%1</strong>",
"request.notification-title": "Group Membership Request from <strong>%1</strong>", "request.notification_title": "Group Membership Request from <strong>%1</strong>",
"request.notification-text": "<strong>%1</strong> has requested to become a member of <strong>%2</strong>", "request.notification_text": "<strong>%1</strong> has requested to become a member of <strong>%2</strong>",
"cover-save": "حفظ", "cover-save": "حفظ",
"cover-saving": "جاري الحفظ", "cover-saving": "جاري الحفظ",
"details.title": "تفاصيل المجموعة", "details.title": "تفاصيل المجموعة",
"details.members": "لائحة الأعضاء", "details.members": "لائحة الأعضاء",
"details.pending": "المستخدمون في الانتظار", "details.pending": "المستخدمون في الانتظار",
"details.invited": "اﻷعضار المدعوون", "details.invited": "اﻷعضار المدعوون",
"details.has-no-posts": "أعضاء هذه المجموعة لم يضيفوا أية مشاركة", "details.has_no_posts": "أعضاء هذه المجموعة لم يضيفوا أية مشاركة",
"details.latest-posts": "آخر المشاركات", "details.latest_posts": "آخر المشاركات",
"details.private": "خاص", "details.private": "خاص",
"details.disableJoinRequests": "Disable join requests", "details.disableJoinRequests": "Disable join requests",
"details.disableLeave": "Disallow users from leaving the group", "details.disableLeave": "Disallow users from leaving the group",
"details.grant": "منح/سحب المِلكية", "details.grant": "منح/سحب المِلكية",
"details.kick": "طرد", "details.kick": "طرد",
"details.kick-confirm": "Are you sure you want to remove this member from the group?", "details.kick_confirm": "Are you sure you want to remove this member from the group?",
"details.add-member": "Add Member", "details.add-member": "Add Member",
"details.owner-options": "إدارة المجموعة", "details.owner_options": "إدارة المجموعة",
"details.group-name": "اسم المجموعة", "details.group_name": "اسم المجموعة",
"details.member-count": "عدد اﻷعضاء", "details.member_count": "عدد اﻷعضاء",
"details.creation-date": "تاريخ الإنشاء", "details.creation_date": "تاريخ الإنشاء",
"details.description": "الوصف", "details.description": "الوصف",
"details.member-post-cids": "Category IDs to display posts from", "details.member-post-cids": "Category IDs to display posts from",
"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",
"details.change-text-colour": "Change Text Colour", "details.change_text_colour": "Change Text Colour",
"details.badge-text": "نص الوسام", "details.badge_text": "نص الوسام",
"details.userTitleEnabled": "إظهار الوسام", "details.userTitleEnabled": "إظهار الوسام",
"details.private-help": "في حالة تفعيل الخيار، الانضمام إلى المجموعة يستلزم قبول مالكها", "details.private_help": "في حالة تفعيل الخيار، الانضمام إلى المجموعة يستلزم قبول مالكها",
"details.hidden": "مخفي", "details.hidden": "مخفي",
"details.hidden-help": "في حالة تفعيل الخيار، لن تظهر المجموعة للعموم والإنضمام إليها سيتلزم دعوة.", "details.hidden_help": "في حالة تفعيل الخيار، لن تظهر المجموعة للعموم والإنضمام إليها سيتلزم دعوة.",
"details.delete-group": "حذف المجموعة", "details.delete_group": "حذف المجموعة",
"details.private-system-help": "Private groups is disabled at system level, this option does not do anything", "details.private_system_help": "Private groups is disabled at system level, this option does not do anything",
"event.updated": "تم تحديث بيانات المجموعة", "event.updated": "تم تحديث بيانات المجموعة",
"event.deleted": "تم حذف المجموعة %1", "event.deleted": "تم حذف المجموعة %1",
"membership.accept-invitation": "اقبل الدعوة", "membership.accept-invitation": "اقبل الدعوة",
"membership.accept.notification-title": "You are now a member of <strong>%1</strong>", "membership.accept.notification_title": "You are now a member of <strong>%1</strong>",
"membership.invitation-pending": "الدعوة بانتظار القبول", "membership.invitation-pending": "الدعوة بانتظار القبول",
"membership.join-group": "انظم للمجموعة", "membership.join-group": "انظم للمجموعة",
"membership.leave-group": "غادر المجموعة", "membership.leave-group": "غادر المجموعة",
"membership.leave.notification-title": "<strong>%1</strong> has left group <strong>%2</strong>", "membership.leave.notification_title": "<strong>%1</strong> has left group <strong>%2</strong>",
"membership.reject": "رفض", "membership.reject": "رفض",
"new-group.group-name": "اسم المجموعة", "new-group.group_name": "اسم المجموعة",
"upload-group-cover": "Upload group cover", "upload-group-cover": "Upload group cover",
"bulk-invite-instructions": "Enter a list of comma separated usernames to invite to this group", "bulk-invite-instructions": "Enter a list of comma separated usernames to invite to this group",
"bulk-invite": "Bulk Invite", "bulk-invite": "Bulk Invite",
"remove-group-cover-confirm": "Are you sure you want to remove the cover picture?" "remove_group_cover_confirm": "Are you sure you want to remove the cover picture?"
} }

View File

@@ -1,12 +1,12 @@
{ {
"username-email": "اسم المستخدم / البريد الإلكتروني", "username-email": "اسم المستخدم / البريد الإلكتروني",
"username": "اسم المستخدم", "username": "اسم المستخدم",
"remember-me": "تذكرني؟", "remember_me": "تذكرني؟",
"forgot-password": "نسيت كلمة المرور؟", "forgot_password": "نسيت كلمة المرور؟",
"alternative-logins": "تسجيلات الدخول البديلة", "alternative_logins": "تسجيلات الدخول البديلة",
"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" "caps-lock-enabled": "Caps Lock is enabled"
} }

View File

@@ -1,22 +1,13 @@
{ {
"chat.room-id": "Room %1", "chat.chatting_with": "Chat with",
"chat.chatting-with": "Chat with",
"chat.placeholder": "Type chat message here, drag & drop images, press enter to send", "chat.placeholder": "Type chat message here, drag & drop images, press enter to send",
"chat.placeholder.mobile": "Type chat message here", "chat.scroll-up-alert": "You are looking at older messages, click here to go to most recent message.",
"chat.scroll-up-alert": "Go to most recent message",
"chat.usernames-and-x-others": "%1 & %2 others",
"chat.chat-with-usernames": "Chat with %1",
"chat.chat-with-usernames-and-x-others": "Chat with %1 & %2 others",
"chat.send": "أرسل", "chat.send": "أرسل",
"chat.no-active": "لا يوجد لديك دردشات نشطة.", "chat.no_active": "لا يوجد لديك دردشات نشطة.",
"chat.user-typing-1": "<strong>%1</strong> is typing ...", "chat.user_typing": "%1 يكتب رسالة...",
"chat.user-typing-2": "<strong>%1</strong> and <strong>%2</strong> are typing ...", "chat.user_has_messaged_you": "%1 أرسل لك رسالة.",
"chat.user-typing-3": "<strong>%1</strong>, <strong>%2</strong> and <strong>%3</strong> are typing ...", "chat.see_all": "All chats",
"chat.user-typing-n": "<strong>%1</strong>, <strong>%2</strong> and <strong>%3</strong> others are typing ...", "chat.mark_all_read": "Mark all read",
"chat.user-has-messaged-you": "%1 أرسل لك رسالة.",
"chat.replying-to": "Replying to %1",
"chat.see-all": "All chats",
"chat.mark-all-read": "Mark all read",
"chat.no-messages": "المرجو اختيار مرسل إليه لمعاينة تاريخ الدردشات", "chat.no-messages": "المرجو اختيار مرسل إليه لمعاينة تاريخ الدردشات",
"chat.no-users-in-room": "No users in this room", "chat.no-users-in-room": "No users in this room",
"chat.recent-chats": "آخر الدردشات", "chat.recent-chats": "آخر الدردشات",
@@ -27,73 +18,38 @@
"chat.pop-out": "افتح الدردشة في نافذة خاصة", "chat.pop-out": "افتح الدردشة في نافذة خاصة",
"chat.minimize": "Minimize", "chat.minimize": "Minimize",
"chat.maximize": "تكبير", "chat.maximize": "تكبير",
"chat.seven-days": "7 أيام", "chat.seven_days": "7 أيام",
"chat.thirty-days": "30 يومًا", "chat.thirty_days": "30 يومًا",
"chat.three-months": "3 أشهر", "chat.three_months": "3 أشهر",
"chat.delete-message-confirm": "هل أنت متأكد من أنك تريد حذف هذه الرسالة؟", "chat.delete_message_confirm": "هل أنت متأكد من أنك تريد حذف هذه الرسالة؟",
"chat.retrieving-users": "Retrieving users...", "chat.retrieving-users": "Retrieving users...",
"chat.view-users-list": "View users list",
"chat.pinned-messages": "Pinned Messages",
"chat.no-pinned-messages": "There are no pinned messages",
"chat.pin-message": "Pin Message",
"chat.unpin-message": "Unpin Message",
"chat.public-rooms": "Public Rooms (%1)",
"chat.private-rooms": "Private Rooms (%1)",
"chat.create-room": "Create Chat Room",
"chat.private.option": "Private (Only visible to users added to room)",
"chat.public.option": "Public (Visible to every user in selected groups)",
"chat.public.groups-help": "To create a chat room that is visible to all users select registered-users from the group list.",
"chat.manage-room": "Manage Chat Room", "chat.manage-room": "Manage Chat Room",
"chat.add-user": "Add User",
"chat.notification-settings": "Notification Settings",
"chat.default-notification-setting": "Default Notification Setting",
"chat.notification-setting-room-default": "Room Default",
"chat.notification-setting-none": "No notifications",
"chat.notification-setting-at-mention-only": "@mention only",
"chat.notification-setting-all-messages": "All messages",
"chat.select-groups": "Select Groups",
"chat.add-user-help": "Search for users here. When selected, the user will be added to the chat. The new user will not be able to see chat messages written before they were added to the conversation. Only room owners (<i class=\"fa fa-star text-warning\"></i>) may remove users from chat rooms.", "chat.add-user-help": "Search for users here. When selected, the user will be added to the chat. The new user will not be able to see chat messages written before they were added to the conversation. Only room owners (<i class=\"fa fa-star text-warning\"></i>) may remove users from chat rooms.",
"chat.confirm-chat-with-dnd-user": "This user has set their status to DnD(Do not disturb). Do you still want to chat with them?", "chat.confirm-chat-with-dnd-user": "This user has set their status to DnD(Do not disturb). Do you still want to chat with them?",
"chat.room-name-optional": "Room Name (Optional)",
"chat.rename-room": "Rename Room", "chat.rename-room": "Rename Room",
"chat.rename-placeholder": "Enter your room name here", "chat.rename-placeholder": "Enter your room name here",
"chat.rename-help": "The room name set here will be viewable by all participants in the room.", "chat.rename-help": "The room name set here will be viewable by all participants in the room.",
"chat.leave": "Leave", "chat.leave": "Leave Chat",
"chat.leave-room": "Leave Room",
"chat.leave-prompt": "Are you sure you wish to leave this chat?", "chat.leave-prompt": "Are you sure you wish to leave this chat?",
"chat.leave-help": "Leaving this chat will remove you from future correspondence in this chat. If you are re-added in the future, you will not see any chat history from prior to your re-joining.", "chat.leave-help": "Leaving this chat will remove you from future correspondence in this chat. If you are re-added in the future, you will not see any chat history from prior to your re-joining.",
"chat.delete": "Delete",
"chat.delete-room": "Delete Room",
"chat.delete-prompt": "Are you sure you wish to delete this chat room?",
"chat.in-room": "In this room", "chat.in-room": "In this room",
"chat.kick": "Kick", "chat.kick": "Kick",
"chat.show-ip": "Show IP", "chat.show-ip": "Show IP",
"chat.copy-text": "Copy Text",
"chat.copy-link": "Copy Link",
"chat.owner": "Room Owner", "chat.owner": "Room Owner",
"chat.grant-rescind-ownership": "Grant/Rescind Ownership", "chat.system.user-join": "%1 has joined the room",
"chat.system.user-join": "%1 has joined the room <span class=\"timeago\" title=\"%2\"></span>", "chat.system.user-leave": "%1 has left the room",
"chat.system.user-leave": "%1 has left the room <span class=\"timeago\" title=\"%2\"></span>", "chat.system.room-rename": "%2 has renamed this room: %1",
"chat.system.room-rename": "%2 has renamed this room to \"%1\" <span class=\"timeago\" title=\"%3\"></span>",
"composer.compose": "اكتب", "composer.compose": "اكتب",
"composer.show-preview": "عرض المعاينة", "composer.show_preview": "عرض المعاينة",
"composer.hide-preview": "إخفاء المعاينة", "composer.hide_preview": "إخفاء المعاينة",
"composer.help": "Help", "composer.user_said_in": "%1 كتب في %2",
"composer.user-said-in": "%1 كتب في %2", "composer.user_said": "%1 كتب:",
"composer.user-said": "%1 كتب:",
"composer.discard": "هل أنت متأكد أنك تريد التخلي عن التغييرات؟", "composer.discard": "هل أنت متأكد أنك تريد التخلي عن التغييرات؟",
"composer.submit-and-lock": "Submit and Lock", "composer.submit_and_lock": "Submit and Lock",
"composer.toggle-dropdown": "Toggle Dropdown", "composer.toggle_dropdown": "Toggle Dropdown",
"composer.uploading": "Uploading %1", "composer.uploading": "Uploading %1",
"composer.formatting.bold": "Bold", "composer.formatting.bold": "Bold",
"composer.formatting.italic": "Italic", "composer.formatting.italic": "Italic",
"composer.formatting.heading": "Heading",
"composer.formatting.heading1": "Heading 1",
"composer.formatting.heading2": "Heading 2",
"composer.formatting.heading3": "Heading 3",
"composer.formatting.heading4": "Heading 4",
"composer.formatting.heading5": "Heading 5",
"composer.formatting.heading6": "Heading 6",
"composer.formatting.list": "List", "composer.formatting.list": "List",
"composer.formatting.strikethrough": "Strikethrough", "composer.formatting.strikethrough": "Strikethrough",
"composer.formatting.code": "Code", "composer.formatting.code": "Code",
@@ -101,26 +57,21 @@
"composer.formatting.picture": "Image Link", "composer.formatting.picture": "Image Link",
"composer.upload-picture": "Upload Image", "composer.upload-picture": "Upload Image",
"composer.upload-file": "Upload File", "composer.upload-file": "Upload File",
"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.post-queue-alert": "Hello👋!<br/>This forum uses a post queue system, since you are a new user your post will be hidden until it is approved by our moderation team.",
"composer.schedule-for": "Schedule topic for", "composer.schedule-for": "Schedule topic for",
"composer.schedule-date": "Date", "composer.schedule-date": "Date",
"composer.schedule-time": "Time", "composer.schedule-time": "Time",
"composer.cancel-scheduling": "Cancel Scheduling", "composer.cancel-scheduling": "Cancel Scheduling",
"composer.change-schedule-date": "Change Date",
"composer.set-schedule-date": "Set Date", "composer.set-schedule-date": "Set Date",
"composer.discard-all-drafts": "Discard all drafts",
"composer.no-drafts": "You have no drafts",
"composer.discard-draft-confirm": "Do you want to discard this draft?",
"bootbox.ok": "OK", "bootbox.ok": "OK",
"bootbox.cancel": "إلغاء", "bootbox.cancel": "إلغاء",
"bootbox.confirm": "تأكيد", "bootbox.confirm": "تأكيد",
"bootbox.submit": "Submit", "bootbox.submit": "Submit",
"bootbox.send": "Send", "bootbox.send": "Send",
"cover.dragging-title": "Cover Photo Positioning", "cover.dragging_title": "Cover Photo Positioning",
"cover.dragging-message": "Drag the cover photo to the desired position and click \"Save\"", "cover.dragging_message": "Drag the cover photo to the desired position and click \"Save\"",
"cover.saved": "Cover photo image and position saved", "cover.saved": "Cover photo image and position saved",
"thumbs.modal.title": "Manage topic thumbnails", "thumbs.modal.title": "Manage topic thumbnails",
"thumbs.modal.no-thumbs": "No thumbnails found.", "thumbs.modal.no-thumbs": "No thumbnails found.",

View File

@@ -1,70 +1,49 @@
{ {
"title": "التنبيهات", "title": "التنبيهات",
"no-notifs": "ليس لديك أية تنبيهات جديدة", "no_notifs": "ليس لديك أية تنبيهات جديدة",
"see-all": "All notifications", "see_all": "All notifications",
"mark-all-read": "Mark all read", "mark_all_read": "Mark all read",
"back-to-home": "عودة إلى %1", "back_to_home": "عودة إلى %1",
"outgoing-link": "رابط خارجي", "outgoing_link": "رابط خارجي",
"outgoing-link-message": "أنت تغادر اﻻن %1", "outgoing_link_message": "أنت تغادر اﻻن %1",
"continue-to": "استمر إلى %1", "continue_to": "استمر إلى %1",
"return-to": "عودة إى %1", "return_to": "عودة إى %1",
"new-notification": "لديك تنبيه جديد", "new_notification": "لديك تنبيه جديد",
"you-have-unread-notifications": "لديك تنبيهات غير مقروءة.", "you_have_unread_notifications": "لديك تنبيهات غير مقروءة.",
"all": "الكل", "all": "الكل",
"topics": "مواضيع", "topics": "مواضيع",
"tags": "Tags",
"categories": "Categories",
"replies": "ردود", "replies": "ردود",
"chat": "محادثات", "chat": "محادثات",
"group-chat": "Group Chats", "group-chat": "Group Chats",
"public-chat": "Public Chats",
"follows": "متابعون", "follows": "متابعون",
"upvote": "الموافقين", "upvote": "الموافقين",
"awards": "Awards",
"new-flags": "New Flags", "new-flags": "New Flags",
"my-flags": "Flags assigned to me", "my-flags": "Flags assigned to me",
"bans": "الحظر", "bans": "الحظر",
"new-message-from": "رسالة جديدة من <strong>%1</strong>", "new_message_from": "رسالة جديدة من <strong>%1</strong>",
"new-messages-from": "%1 new messages from <strong>%2</strong>", "upvoted_your_post_in": "<strong>%1</strong> أضاف صوتًا إيجابيا إلى مشاركتك في <strong>%2</strong>.",
"new-message-in": "New message in <strong>%1</strong>", "upvoted_your_post_in_dual": "<strong>%1</strong> and <strong>%2</strong> have upvoted your post in <strong>%3</strong>.",
"new-messages-in": "%1 new messages in <strong>%2</strong>", "upvoted_your_post_in_multiple": "<strong>%1</strong> and %2 others have upvoted your post in <strong>%3</strong>.",
"user-posted-in-public-room": "<strong>%1</strong> wrote in <strong class=\"text-nowrap\"><i class=\"fa %2\"></i>%3</strong>", "moved_your_post": "<strong>%1</strong> has moved your post to <strong>%2</strong>",
"user-posted-in-public-room-dual": "<strong>%1</strong> and <strong>%2</strong> wrote in <strong class=\"text-nowrap\"><i class=\"fa %3\"></i>%4</strong>", "moved_your_topic": "<strong>%1</strong> has moved <strong>%2</strong>",
"user-posted-in-public-room-triple": "<strong>%1</strong>, <strong>%2</strong> and <strong>%3</strong> wrote in <strong class=\"text-nowrap\"><i class=\"fa %4\"></i>%5</strong>", "user_flagged_post_in": "<strong>%1</strong> أشعَرَ بمشاركة مخلة في <strong>%2</strong>",
"user-posted-in-public-room-multiple": "<strong>%1</strong>, <strong>%2</strong> and %3 others wrote in <strong class=\"text-nowrap\"><i class=\"fa %4\"></i>%5</strong>", "user_flagged_post_in_dual": "<strong>%1</strong> and <strong>%2</strong> flagged a post in <strong>%3</strong>",
"upvoted-your-post-in": "<strong>%1</strong> أضاف صوتًا إيجابيا إلى مشاركتك في <strong>%2</strong>.", "user_flagged_post_in_multiple": "<strong>%1</strong> and %2 others flagged a post in <strong>%3</strong>",
"upvoted-your-post-in-dual": "<strong>%1</strong> and <strong>%2</strong> have upvoted your post in <strong>%3</strong>.", "user_flagged_user": "<strong>%1</strong> flagged a user profile (%2)",
"upvoted-your-post-in-triple": "<strong>%1</strong>, <strong>%2</strong> and <strong>%3</strong> have upvoted your post in <strong>%4</strong>.", "user_flagged_user_dual": "<strong>%1</strong> and <strong>%2</strong> flagged a user profile (%3)",
"upvoted-your-post-in-multiple": "<strong>%1</strong>, <strong>%2</strong> and %3 others have upvoted your post in <strong>%4</strong>.", "user_flagged_user_multiple": "<strong>%1</strong> and %2 others flagged a user profile (%3)",
"moved-your-post": "<strong>%1</strong> has moved your post to <strong>%2</strong>", "user_posted_to": "<strong>%1</strong> أضاف ردا إلى: <strong>%2</strong>",
"moved-your-topic": "<strong>%1</strong> has moved <strong>%2</strong>", "user_posted_to_dual": "<strong>%1</strong> and <strong>%2</strong> have posted replies to: <strong>%3</strong>",
"user-flagged-post-in": "<strong>%1</strong> أشعَرَ بمشاركة مخلة في <strong>%2</strong>", "user_posted_to_multiple": "<strong>%1</strong> and %2 others have posted replies to: <strong>%3</strong>",
"user-flagged-post-in-dual": "<strong>%1</strong> and <strong>%2</strong> flagged a post in <strong>%3</strong>", "user_posted_topic": "<strong>%1</strong> أنشأ موضوعًا جديدًا: <strong>%2</strong>",
"user-flagged-post-in-triple": "<strong>%1</strong>, <strong>%2</strong> and <strong>%3</strong> flagged a post in <strong>%4</strong>", "user_edited_post": "<strong>%1</strong> has edited a post in <strong>%2</strong>",
"user-flagged-post-in-multiple": "<strong>%1</strong>, <strong>%2</strong> and %3 others flagged a post in <strong>%4</strong>", "user_started_following_you": "<strong>%1</strong> صار يتابعك.",
"user-flagged-user": "<strong>%1</strong> flagged a user profile (%2)", "user_started_following_you_dual": "<strong>%1</strong> and <strong>%2</strong> started following you.",
"user-flagged-user-dual": "<strong>%1</strong> and <strong>%2</strong> flagged a user profile (%3)", "user_started_following_you_multiple": "<strong>%1</strong> and %2 others started following you.",
"user-flagged-user-triple": "<strong>%1</strong>, <strong>%2</strong> and <strong>%3</strong> flagged a user profile (%4)", "new_register": "<strong>%1</strong> sent a registration request.",
"user-flagged-user-multiple": "<strong>%1</strong>, <strong>%2</strong> and %3 others flagged a user profile (%4)", "new_register_multiple": "There are <strong>%1</strong> registration requests awaiting review.",
"user-posted-to": "<strong>%1</strong> أضاف ردا إلى: <strong>%2</strong>", "flag_assigned_to_you": "تم تخصيص العلامة 1% لك",
"user-posted-to-dual": "<strong>%1</strong> and <strong>%2</strong> have posted replies to: <strong>%3</strong>", "post_awaiting_review": "Post awaiting review",
"user-posted-to-triple": "<strong>%1</strong>, <strong>%2</strong> and <strong>%3</strong> have posted replies to: <strong>%4</strong>",
"user-posted-to-multiple": "<strong>%1</strong>, <strong>%2</strong> and %3 others have posted replies to: <strong>%4</strong>",
"user-posted-topic": "<strong>%1</strong> أنشأ موضوعًا جديدًا: <strong>%2</strong>",
"user-edited-post": "<strong>%1</strong> has edited a post in <strong>%2</strong>",
"user-posted-topic-with-tag": "<strong>%1</strong> has posted a new topic with tag <strong>%2</strong>",
"user-posted-topic-with-tag-dual": "<strong>%1</strong> has posted a new topic with tags <strong>%2</strong> and <strong>%3</strong>",
"user-posted-topic-with-tag-triple": "<strong>%1</strong> has posted a new topic with tags <strong>%2</strong>, <strong>%3</strong> and <strong>%4</strong>",
"user-posted-topic-with-tag-multiple": "<strong>%1</strong> has posted a new topic with tags <strong>%2</strong>",
"user-posted-topic-in-category": "<strong>%1</strong> has posted a new topic in <strong>%2</strong>",
"user-started-following-you": "<strong>%1</strong> صار يتابعك.",
"user-started-following-you-dual": "<strong>%1</strong> and <strong>%2</strong> started following you.",
"user-started-following-you-triple": "<strong>%1</strong>, <strong>%2</strong> and <strong>%3</strong> started following you.",
"user-started-following-you-multiple": "<strong>%1</strong>, <strong>%2</strong> and %3 others started following you.",
"new-register": "<strong>%1</strong> sent a registration request.",
"new-register-multiple": "There are <strong>%1</strong> registration requests awaiting review.",
"flag-assigned-to-you": "تم تخصيص العلامة 1% لك",
"post-awaiting-review": "Post awaiting review",
"profile-exported": "<strong>%1</strong> profile exported, click to download", "profile-exported": "<strong>%1</strong> profile exported, click to download",
"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",
@@ -77,25 +56,21 @@
"email-confirm-error-message": "حدث خطأ أثناء التحقق من عنوان بريدك الإلكتروني. ربما رمز التفعيل خاطئ أو انتهت صلاحيته.", "email-confirm-error-message": "حدث خطأ أثناء التحقق من عنوان بريدك الإلكتروني. ربما رمز التفعيل خاطئ أو انتهت صلاحيته.",
"email-confirm-sent": "تم إرسال بريد التفعيل.", "email-confirm-sent": "تم إرسال بريد التفعيل.",
"none": "None", "none": "None",
"notification-only": "التنبيهات فقط", "notification_only": "التنبيهات فقط",
"email-only": "البريد الالكتروني فقط", "email_only": "البريد الالكتروني فقط",
"notification-and-email": "التنبيهات والبريد اﻻلكتروني", "notification_and_email": "التنبيهات والبريد اﻻلكتروني",
"notificationType-upvote": "عندما يوافقك احدهم على منشورك", "notificationType_upvote": "عندما يوافقك احدهم على منشورك",
"notificationType-new-topic": "When someone you follow posts a topic", "notificationType_new-topic": "When someone you follow posts a topic",
"notificationType-new-topic-with-tag": "When a topic is posted with a tag you follow", "notificationType_new-reply": "When a new reply is posted in a topic you are watching",
"notificationType-new-topic-in-category": "When a topic is posted in a category you are watching", "notificationType_post-edit": "When a post is edited in a topic you are watching",
"notificationType-new-reply": "When a new reply is posted in a topic you are watching", "notificationType_follow": "When someone starts following you",
"notificationType-post-edit": "When a post is edited in a topic you are watching", "notificationType_new-chat": "When you receive a chat message",
"notificationType-follow": "When someone starts following you", "notificationType_new-group-chat": "When you receive a group chat message",
"notificationType-new-chat": "When you receive a chat message", "notificationType_group-invite": "When you receive a group invite",
"notificationType-new-group-chat": "When you receive a group chat message", "notificationType_group-leave": "When a user leaves your group",
"notificationType-new-public-chat": "When you receive a public group chat message", "notificationType_group-request-membership": "When someone requests to join a group you own",
"notificationType-group-invite": "When you receive a group invite", "notificationType_new-register": "When someone gets added to registration queue",
"notificationType-group-leave": "When a user leaves your group", "notificationType_post-queue": "When a new post is queued",
"notificationType-group-request-membership": "When someone requests to join a group you own", "notificationType_new-post-flag": "When a post is flagged",
"notificationType-new-register": "When someone gets added to registration queue", "notificationType_new-user-flag": "When a user is flagged"
"notificationType-post-queue": "When a new post is queued",
"notificationType-new-post-flag": "When a post is flagged",
"notificationType-new-user-flag": "When a user is flagged",
"notificationType-new-reward": "When you earn a new reward"
} }

View File

@@ -14,7 +14,6 @@
"flagged-content": "Flagged Content", "flagged-content": "Flagged Content",
"ip-blacklist": "IP Blacklist", "ip-blacklist": "IP Blacklist",
"post-queue": "Post Queue", "post-queue": "Post Queue",
"registration-queue": "Registration Queue",
"users/online": "اﻷعضاء المتصلون", "users/online": "اﻷعضاء المتصلون",
"users/latest": "أحدث اﻷعضاء", "users/latest": "أحدث اﻷعضاء",
"users/sort-posts": "الأعضاء الأكثر نشاطاً", "users/sort-posts": "الأعضاء الأكثر نشاطاً",
@@ -47,11 +46,9 @@
"account/latest-posts": "Latest posts made by %1", "account/latest-posts": "Latest posts made by %1",
"account/topics": "Topics created by %1", "account/topics": "Topics created by %1",
"account/groups": "%1's Groups", "account/groups": "%1's Groups",
"account/watched-categories": "%1's Watched Categories", "account/watched_categories": "%1's Watched Categories",
"account/watched-tags": "%1's Watched Tags",
"account/bookmarks": "%1's Bookmarked Posts", "account/bookmarks": "%1's Bookmarked Posts",
"account/settings": "خيارات المستخدم", "account/settings": "خيارات المستخدم",
"account/settings-of": "Changing settings of %1",
"account/watched": "Topics watched by %1", "account/watched": "Topics watched by %1",
"account/ignored": "Topics ignored by %1", "account/ignored": "Topics ignored by %1",
"account/upvoted": "Posts upvoted by %1", "account/upvoted": "Posts upvoted by %1",
@@ -62,7 +59,7 @@
"account/uploads": "Uploads by %1", "account/uploads": "Uploads by %1",
"account/sessions": "Login Sessions", "account/sessions": "Login Sessions",
"confirm": "تم التحقق من عنوان البريد الإلكتروني", "confirm": "تم التحقق من عنوان البريد الإلكتروني",
"maintenance.text": "%1 is currently undergoing maintenance.<br/>Please come back another time.", "maintenance.text": "جاري صيانة %1. المرجو العودة لاحقًا.",
"maintenance.messageIntro": "بالإضافة إلى ذلك، قام مدبر النظام بترك هذه الرسالة:", "maintenance.messageIntro": "بالإضافة إلى ذلك، قام مدبر النظام بترك هذه الرسالة:",
"throttled.text": "%1 is currently unavailable due to excessive load. Please come back another time." "throttled.text": "%1 is currently unavailable due to excessive load. Please come back another time."
} }

View File

@@ -1,14 +1,8 @@
{ {
"post-queue": "Post Queue", "post-queue": "Post Queue",
"no-queued-posts": "There are no posts in the post queue.", "description": "There are no posts in the post queue. <br> To enable this feature, go to <a href=\"%1\">Settings &rarr; Post &rarr; Post Queue</a> and enable <strong>Post Queue</strong>.",
"no-single-post": "The topic or post you are looking for is no longer in the queue. It has likely been approved or deleted already.",
"enabling-help": "The post queue is currently <strong>disabled</strong>. To enable this feature, go to <a href=\"%1\">Settings &rarr; Post &rarr; Post Queue</a> and enable <strong>Post Queue</strong>.",
"back-to-list": "Back to Post Queue",
"public-intro": "If you have any queued posts, they will be shown here.",
"public-description": "This forum is configured to automatically queue posts from new accounts, pending moderator approval.<br />If you have queued posts awaiting approval, you will be able to see them here.",
"user": "User", "user": "User",
"when": "When",
"category": "Category", "category": "Category",
"title": "Title", "title": "Title",
"content": "Content", "content": "Content",
@@ -25,7 +19,6 @@
"notify": "Notify", "notify": "Notify",
"notify-user": "Notify User", "notify-user": "Notify User",
"confirm-reject": "Do you want to reject this post?", "confirm-reject": "Do you want to reject this post?",
"confirm-remove": "Do you want to remove this post?",
"bulk-actions": "Bulk Actions", "bulk-actions": "Bulk Actions",
"accept-all": "Accept All", "accept-all": "Accept All",
"accept-selected": "Accept Selected", "accept-selected": "Accept Selected",
@@ -33,10 +26,6 @@
"reject-all-confirm": "Do you want to reject all posts?", "reject-all-confirm": "Do you want to reject all posts?",
"reject-selected": "Reject Selected", "reject-selected": "Reject Selected",
"reject-selected-confirm": "Do you want to reject %1 selected posts?", "reject-selected-confirm": "Do you want to reject %1 selected posts?",
"remove-all": "Remove all",
"remove-all-confirm": "Do you want to remove all posts?",
"remove-selected": "Remove Selected",
"remove-selected-confirm": "Do you want to remove %1 selected posts?",
"bulk-accept-success": "%1 posts accepted", "bulk-accept-success": "%1 posts accepted",
"bulk-reject-success": "%1 posts rejected" "bulk-reject-success": "%1 posts rejected"
} }

View File

@@ -5,7 +5,15 @@
"month": "شهر", "month": "شهر",
"year": "سنة", "year": "سنة",
"alltime": "دائمًا", "alltime": "دائمًا",
"no-recent-topics": "لايوجد مواضيع جديدة", "no_recent_topics": "لايوجد مواضيع جديدة",
"no-popular-topics": "لا يوجد مواضيع شائعة", "no_popular_topics": "لا يوجد مواضيع شائعة",
"load-new-posts": "Load new posts" "there-is-a-new-topic": "يوجد موضوع جديد",
"there-is-a-new-topic-and-a-new-post": "يوجد موضوع جديد و رد جديد",
"there-is-a-new-topic-and-new-posts": "يوجد موضوع جديد و %1 ردود جديدة ",
"there-are-new-topics": "يوجد %1 مواضيع جديدة",
"there-are-new-topics-and-a-new-post": "يوجد %1 مواضيع جديدة و رد جديد",
"there-are-new-topics-and-new-posts": "يوجد %1 مواضيع جديدة و %2 مشاركات جديدة",
"there-is-a-new-post": "يوجد مشاركة جديدة",
"there-are-new-posts": "يوجد %1 مشاركات جديدة",
"click-here-to-reload": "إضغط هنا لإعادة التحميل"
} }

View File

@@ -1,32 +1,31 @@
{ {
"register": "تسجيل", "register": "تسجيل",
"already-have-account": "Already have an account?", "cancel_registration": "إلغاء التسجيل",
"cancel-registration": "إلغاء التسجيل",
"help.email": "افتراضيا، سيتم إخفاء بريدك الإلكتروني من العامة.", "help.email": "افتراضيا، سيتم إخفاء بريدك الإلكتروني من العامة.",
"help.username-restrictions": "اسم مستخدم فريدة من نوعها بين 1% و 2% حرفا. بإمكان الآخرين مناداتك بـ @<span id='yourUsername'>اسم المستخدم</span>.", "help.username_restrictions": "اسم مستخدم فريدة من نوعها بين 1% و 2% حرفا. بإمكان الآخرين مناداتك بـ @<span id='yourUsername'>اسم المستخدم</span>.",
"help.minimum-password-length": "كلمة المرور يجب أن تتكون على الأقل من 1% أحرف/حروف", "help.minimum_password_length": "كلمة المرور يجب أن تتكون على الأقل من 1% أحرف/حروف",
"email-address": "عنوان البريد الإلكتروني", "email_address": "عنوان البريد الإلكتروني",
"email-address-placeholder": "ادخل عنوان البريد الإلكتروني", "email_address_placeholder": "ادخل عنوان البريد الإلكتروني",
"username": "اسم المستخدم", "username": "اسم المستخدم",
"username-placeholder": "أدخل اسم المستخدم", "username_placeholder": "أدخل اسم المستخدم",
"password": "كلمة المرور", "password": "كلمة المرور",
"password-placeholder": "أدخل كلمة المرور", "password_placeholder": "أدخل كلمة المرور",
"confirm-password": "تأكيد كلمة المرور", "confirm_password": "تأكيد كلمة المرور",
"confirm-password-placeholder": "تأكيد كلمة المرور", "confirm_password_placeholder": "تأكيد كلمة المرور",
"register-now-button": "قم بالتسجيل الآن", "register_now_button": "قم بالتسجيل الآن",
"alternative-registration": "طريقة تسجيل بديلة", "alternative_registration": "طريقة تسجيل بديلة",
"terms-of-use": "شروط الاستخدام", "terms_of_use": "شروط الاستخدام",
"agree-to-terms-of-use": "أوافق على شروط الاستخدام", "agree_to_terms_of_use": "أوافق على شروط الاستخدام",
"terms-of-use-error": "يجب عليك الموافقة على شروط الاستخدام", "terms_of_use_error": "يجب عليك الموافقة على شروط الاستخدام",
"registration-added-to-queue": "تمت إضافتك في قائمة الإنتضار. ستتلقى رسالة إلكترونية عند الموافقة على تسجيلك من قبل الإدارة.", "registration-added-to-queue": "تمت إضافتك في قائمة الإنتضار. ستتلقى رسالة إلكترونية عند الموافقة على تسجيلك من قبل الإدارة.",
"registration-queue-average-time": "Our average time for approving memberships is %1 hours %2 minutes.", "registration-queue-average-time": "Our average time for approving memberships is %1 hours %2 minutes.",
"registration-queue-auto-approve-time": "Your membership to this forum will be fully activated in up to %1 hours.", "registration-queue-auto-approve-time": "Your membership to this forum will be fully activated in up to %1 hours.",
"interstitial.intro": "We'd like some additional information in order to update your account&hellip;", "interstitial.intro": "We'd like some additional information in order to update your account&hellip;",
"interstitial.intro-new": "We'd like some additional information before we can create your account&hellip;", "interstitial.intro-new": "We'd like some additional information before we can create your account&hellip;",
"interstitial.errors-found": "Please review the entered information:", "interstitial.errors-found": "Please review the entered information:",
"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-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-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" "invite.error-invalid-data": "The registration data received does not correspond to our records. Please contact an administrator for more details"

View File

@@ -1,18 +1,18 @@
{ {
"reset-password": "إعادة تعيين كلمة المرور", "reset_password": "إعادة تعيين كلمة المرور",
"update-password": "تحديث كلمة المرور", "update_password": "تحديث كلمة المرور",
"password-changed.title": "تم تغير كلمة المرور", "password_changed.title": "تم تغير كلمة المرور",
"password-changed.message": "<p>تم تغير كلمة المرور بنجاح، الرجاء <a href='/login'>إعادة الدخول</a></p>", "password_changed.message": "<p>تم تغير كلمة المرور بنجاح، الرجاء <a href='/login'>إعادة الدخول</a></p>",
"wrong-reset-code.title": "رمز إعادة التعيين غير صحيح", "wrong_reset_code.title": "رمز إعادة التعيين غير صحيح",
"wrong-reset-code.message": "رمز إعادة التعين غير صحيح، يرجى المحاولة مرة أخرى أو <a href='/reset'>اطلب رمزا جديدا</a>", "wrong_reset_code.message": "رمز إعادة التعين غير صحيح، يرجى المحاولة مرة أخرى أو <a href='/reset'>اطلب رمزا جديدا</a>",
"new-password": "كلمة المرور الجديدة", "new_password": "كلمة المرور الجديدة",
"repeat-password": "تأكيد كلمة المرور", "repeat_password": "تأكيد كلمة المرور",
"changing-password": "Changing Password", "changing_password": "Changing Password",
"enter-email": "يرجى إدخال <strong>عنوان البريد الإلكتروني</strong> الخاص بك وسوف نرسل لك رسالة بالبريد الالكتروني مع تعليمات حول كيفية إستعادة حسابك.", "enter_email": "يرجى إدخال <strong>عنوان البريد الإلكتروني</strong> الخاص بك وسوف نرسل لك رسالة بالبريد الالكتروني مع تعليمات حول كيفية إستعادة حسابك.",
"enter-email-address": "ادخل عنوان البريد الإلكتروني", "enter_email_address": "ادخل عنوان البريد الإلكتروني",
"password-reset-sent": "If the specified address corresponds to an existing user account, a password reset email was sent. Please note that only one email will be sent per minute.", "password_reset_sent": "If the specified address corresponds to an existing user account, a password reset email was sent. Please note that only one email will be sent per minute.",
"invalid-email": "بريد إلكتروني غير صالح أو غير موجود", "invalid_email": "بريد إلكتروني غير صالح أو غير موجود",
"password-too-short": "كلمة المرور التي أدخلتها قصيرة، الرجاء اختر كلمة مرور مختلفة", "password_too_short": "كلمة المرور التي أدخلتها قصيرة، الرجاء اختر كلمة مرور مختلفة",
"passwords-do-not-match": "كلمتا السر التي أدخلتهما غير متطابقتان", "passwords_do_not_match": "كلمتا السر التي أدخلتهما غير متطابقتان",
"password-expired": "لقد انتهت صلاحية كلمة المرور الخاصة بك، الرجاء اختيار كلمة مرور جديدة" "password_expired": "لقد انتهت صلاحية كلمة المرور الخاصة بك، الرجاء اختيار كلمة مرور جديدة"
} }

View File

@@ -1,10 +0,0 @@
{
"awarded-x-reputation": "You have been awarded <strong>%1</strong> reputation",
"awarded-group-membership": "You have been added to the group <strong>%1</strong>",
"essentials/user.reputation-conditional-value": "<span class=\"text-xs\">(Reputation %1 %2)</span>",
"essentials/user.postcount-conditional-value": "<span class=\"text-xs\">(Post Count %1 %2)</span>",
"essentials/user.lastonline-conditional-value": "<span class=\"text-xs\">(Last Online %1 %2)</span>",
"essentials/user.joindate-conditional-value": "<span class=\"text-xs\">(Join Date %1 %2)</span>",
"essentials/user.daysregistered-conditional-value": "<span class=\"text-xs\">(Days Registered %1 %2)</span>"
}

View File

@@ -1,41 +1,21 @@
{ {
"type-to-search": "Type to search", "results_matching": "%1 نتيجة (نتائج) موافقة لـ \"%2\", (%3 ثواني)",
"results-matching": "%1 نتيجة (نتائج) موافقة لـ \"%2\", (%3 ثواني)",
"no-matches": "لم يتم العثور على نتائج.", "no-matches": "لم يتم العثور على نتائج.",
"advanced-search": "بحث متقدم", "advanced-search": "بحث متقدم",
"in": "في", "in": "في",
"in-titles": "In titles", "titles": "العناوين",
"in-titles-posts": "In titles and posts", "titles-posts": "العناوين والمشاركات",
"in-posts": "In posts",
"in-categories": "In categories",
"in-users": "In users",
"in-tags": "In tags",
"categories": "Categories",
"all-categories": "All categories",
"categories-x": "Categories: %1",
"categories-watched-categories": "Categories: Watched categories",
"type-a-category": "Type a category",
"tags": "Tags",
"tags-x": "Tags: %1",
"type-a-tag": "Type a tag",
"match-words": "Match words", "match-words": "Match words",
"match-all-words": "Match all words",
"match-any-word": "Match any word",
"all": "All", "all": "All",
"any": "Any", "any": "Any",
"posted-by": "مشاركة من طرف", "posted-by": "مشاركة من طرف",
"posted-by-usernames": "Posted by: %1", "in-categories": "في الفئات",
"type-a-username": "Type a username",
"search-child-categories": "بحث في الفئات الفرعية", "search-child-categories": "بحث في الفئات الفرعية",
"has-tags": "Has tags", "has-tags": "Has tags",
"reply-count": "عدد المشاركات", "reply-count": "عدد المشاركات",
"replies": "Replies",
"replies-atleast-count": "Replies: At least %1",
"replies-atmost-count": "Replies: At most %1",
"at-least": "على اﻷقل", "at-least": "على اﻷقل",
"at-most": "على اﻷكثر", "at-most": "على اﻷكثر",
"relevance": "Relevance", "relevance": "Relevance",
"time": "Time",
"post-time": "تاريخ المشاركة", "post-time": "تاريخ المشاركة",
"votes": "Votes", "votes": "Votes",
"newer-than": "أحدث من", "newer-than": "أحدث من",
@@ -48,22 +28,7 @@
"three-months": "ثلاثة أشهر", "three-months": "ثلاثة أشهر",
"six-months": "ستة أشهر", "six-months": "ستة أشهر",
"one-year": "عام", "one-year": "عام",
"time-newer-than-86400": "Time: Newer than yesterday",
"time-older-than-86400": "Time: Older than yesterday",
"time-newer-than-604800": "Time: Newer than one week",
"time-older-than-604800": "Time: Older than one week",
"time-newer-than-1209600": "Time: Newer than two weeks",
"time-older-than-1209600": "Time: Older than two weeks",
"time-newer-than-2592000": "Time: Newer than one month",
"time-older-than-2592000": "Time: Older than one month",
"time-newer-than-7776000": "Time: Newer than three months",
"time-older-than-7776000": "Time: Older than three months",
"time-newer-than-15552000": "Time: Newer than six months",
"time-older-than-15552000": "Time: Older than six months",
"time-newer-than-31104000": "Time: Newer than one year",
"time-older-than-31104000": "Time: Older than one year",
"sort-by": "عرض حسب", "sort-by": "عرض حسب",
"sort": "Sort",
"last-reply-time": "تاريخ آخر رد", "last-reply-time": "تاريخ آخر رد",
"topic-title": "عنوان الموضوع", "topic-title": "عنوان الموضوع",
"topic-votes": "Topic votes", "topic-votes": "Topic votes",
@@ -74,36 +39,11 @@
"category": "فئة", "category": "فئة",
"descending": "في ترتيب تنازلي", "descending": "في ترتيب تنازلي",
"ascending": "في ترتيب تصاعدي", "ascending": "في ترتيب تصاعدي",
"sort-by-relevance-desc": "Sort by: Relevance in descending order",
"sort-by-relevance-asc": "Sort by: Relevance in ascending order",
"sort-by-timestamp-desc": "Sort by: Post time in descending order",
"sort-by-timestamp-asc": "Sort by: Post time in ascending order",
"sort-by-votes-desc": "Sort by: Votes in descending order",
"sort-by-votes-asc": "Sort by: Votes in ascending order",
"sort-by-topic.lastposttime-desc": "Sort by: Last reply time in descending order",
"sort-by-topic.lastposttime-asc": "Sort by: Last reply time in ascending order",
"sort-by-topic.title-desc": "Sort by: Topic title in descending order",
"sort-by-topic.title-asc": "Sort by: Topic title in ascending order",
"sort-by-topic.postcount-desc": "Sort by: Number of replies in descending order",
"sort-by-topic.postcount-asc": "Sort by: Number of replies in ascending order",
"sort-by-topic.viewcount-desc": "Sort by: Number of views in descending order",
"sort-by-topic.viewcount-asc": "Sort by: Number of views in ascending order",
"sort-by-topic.votes-desc": "Sort by: Topic votes in descending order",
"sort-by-topic.votes-asc": "Sort by: Topic votes in ascending order",
"sort-by-topic.timestamp-desc": "Sort by: Topic start date in descending order",
"sort-by-topic.timestamp-asc": "Sort by: Topic start date in ascending order",
"sort-by-user.username-desc": "Sort by: Username in descending order",
"sort-by-user.username-asc": "Sort by: Username in ascending order",
"sort-by-category.name-desc": "Sort by: Category in descending order",
"sort-by-category.name-asc": "Sort by: Category in ascending order",
"save": "Save",
"save-preferences": "حفظ التفضيلات", "save-preferences": "حفظ التفضيلات",
"clear-preferences": "ازالة التفضيلات", "clear-preferences": "ازالة التفضيلات",
"search-preferences-saved": "تم حفظ تفضيلات البحث", "search-preferences-saved": "تم حفظ تفضيلات البحث",
"search-preferences-cleared": "تم ازالة تفضيلات البحث", "search-preferences-cleared": "تم ازالة تفضيلات البحث",
"show-results-as": "عرض النتائج كـ", "show-results-as": "عرض النتائج كـ",
"show-results-as-topics": "Show results as topics",
"show-results-as-posts": "Show results as posts",
"see-more-results": "See more results (%1)", "see-more-results": "See more results (%1)",
"search-in-category": "Search in \"%1\"" "search-in-category": "Search in \"%1\""
} }

View File

@@ -1,12 +0,0 @@
{
"sign-in-with-twitter": "تسجيل الدخول باستخدام تويتر",
"sign-up-with-twitter": "التسجيل باستخدام تويتر",
"sign-in-with-github": "تسجيل الدخول باستخدام جيت هب",
"sign-up-with-github": "التسجيل باستخدام جيت هب",
"sign-in-with-google": "تسجيل الدخول باستخدام قوقل",
"sign-up-with-google": "التسجيل باستخدام قوقل",
"log-in-with-facebook": "تسجيل الدخول باستخدام فيسبوك",
"continue-with-facebook": "التسجيل باستخدام فيسبوك",
"sign-in-with-linkedin": "Sign in with LinkedIn",
"sign-up-with-linkedin": "Sign up with LinkedIn"
}

View File

@@ -1,17 +1,8 @@
{ {
"all-tags": "All tags", "no_tag_topics": "لا يوجد مواضيع بهذه الكلمة الدلالية.",
"no-tag-topics": "لا يوجد مواضيع بهذه الكلمة الدلالية.",
"no-tags-found": "No tags found",
"tags": "الكلمات الدلالية", "tags": "الكلمات الدلالية",
"enter-tags-here": "Enter tags here, between %1 and %2 characters each.", "enter_tags_here": "Enter tags here, between %1 and %2 characters each.",
"enter-tags-here-short": "أدخل الكلمات الدلالية...", "enter_tags_here_short": "أدخل الكلمات الدلالية...",
"no-tags": "لا يوجد كلمات دلالية بعد.", "no_tags": "لا يوجد كلمات دلالية بعد.",
"select-tags": "Select Tags", "select_tags": "Select Tags"
"tag-whitelist": "Tag Whitelist",
"watching": "Watching",
"not-watching": "Not Watching",
"watching.description": "Notify me of new topics.",
"not-watching.description": "Do not notify me of new topics.",
"following-tag.message": "You will now be receiving notifications when somebody posts a topic with this tag.",
"not-following-tag.message": "You will not receive notifications when somebody posts a topic with this tag."
} }

View File

@@ -1,17 +0,0 @@
{
"theme-name": "Harmony Theme",
"skins": "Skins",
"collapse": "Collapse",
"expand": "Expand",
"login-register-to-search": "Login or register to search.",
"settings.title": "Theme settings",
"settings.enableQuickReply": "Enable quick reply",
"settings.centerHeaderElements": "Center header elements",
"settings.mobileTopicTeasers": "Show topic teasers on mobile",
"settings.stickyToolbar": "Sticky toolbar",
"settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page",
"settings.autohideBottombar": "Auto hide bottom bar",
"settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down",
"settings.openSidebars": "Open sidebars",
"settings.chatModals": "Enable chat modals"
}

View File

@@ -1,10 +0,0 @@
{
"settings.title": "Theme settings",
"settings.intro": "You can customise your theme settings here. Settings are stored on a per-device basis, so you are able to have different settings on different devices (phone, tablet, desktop, etc.)",
"settings.mobile-menu-side": "Switch which side each mobile menu is on",
"settings.autoHidingNavbar": "Automatically hide the navbar on scroll",
"settings.autoHidingNavbar-xs": "Very small screens (e.g. phones in portrait mode)",
"settings.autoHidingNavbar-sm": "Smaller screens (e.g. phones, some tablets)",
"settings.autoHidingNavbar-md": "Medium sized screens (e.g. tablets in landscape mode)",
"settings.autoHidingNavbar-lg": "Larger screens (e.g. desktop computers)"
}

View File

@@ -1,4 +1,4 @@
{ {
"title": "Top", "title": "Top",
"no-top-topics": "No top topics" "no_top_topics": "No top topics"
} }

View File

@@ -1,23 +1,23 @@
{ {
"topic": "موضوع", "topic": "موضوع",
"title": "العنوان", "title": "Title",
"no-topics-found": "لا توجد مواضيع !", "no_topics_found": "لا توجد مواضيع !",
"no-posts-found": "لا توجد مشاركات!", "no_posts_found": "لا توجد مشاركات!",
"post-is-deleted": "هذه المشاركة محذوفة!", "post_is_deleted": "هذه المشاركة محذوفة!",
"topic-is-deleted": "هذا الموضوع محذوف", "topic_is_deleted": "هذا الموضوع محذوف",
"profile": "الملف الشخصي", "profile": "الملف الشخصي",
"posted-by": "كتب من طرف %1", "posted_by": "كتب من طرف %1",
"posted-by-guest": "كتب من طرف زائر", "posted_by_guest": "كتب من طرف زائر",
"chat": "دردشة", "chat": "دردشة",
"notify-me": "تلق تنبيهات بالردود الجديدة في هذا الموضوع", "notify_me": "تلق تنبيهات بالردود الجديدة في هذا الموضوع",
"quote": "اقتبس", "quote": "اقتبس",
"reply": "رد", "reply": "رد",
"replies-to-this-post": "%1 الردود", "replies_to_this_post": "%1 Replies",
"one-reply-to-this-post": "1 رد", "one_reply_to_this_post": "1 Reply",
"last-reply-time": "آخر رد", "last_reply_time": "Last reply",
"reply-as-topic": "رد بموضوع", "reply-as-topic": "رد بموضوع",
"guest-login-reply": "يجب عليك تسجيل الدخول للرد", "guest-login-reply": "يجب عليك تسجيل الدخول للرد",
"login-to-view": "سجل الدخول للمشاهدة", "login-to-view": "🔒 Log in to view",
"edit": "تعديل", "edit": "تعديل",
"delete": "حذف", "delete": "حذف",
"delete-event": "Delete Event", "delete-event": "Delete Event",
@@ -32,162 +32,142 @@
"tools": "أدوات", "tools": "أدوات",
"locked": "مقفل", "locked": "مقفل",
"pinned": "مثبت", "pinned": "مثبت",
"pinned-with-expiry": "مثبت حتى %1", "pinned-with-expiry": "Pinned until %1",
"scheduled": "Scheduled", "scheduled": "Scheduled",
"moved": "منقول", "moved": "منقول",
"moved-from": "Moved from %1", "moved-from": "Moved from %1",
"copy-code": "Copy Code",
"copy-ip": "Copy IP", "copy-ip": "Copy IP",
"ban-ip": "Ban IP", "ban-ip": "Ban IP",
"view-history": "Edit History", "view-history": "Edit History",
"wrote-ago": "wrote <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>", "locked-by": "Locked by",
"wrote-on": "wrote on <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>", "unlocked-by": "Unlocked by",
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <a href=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>", "pinned-by": "Pinned by",
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <a href=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>", "unpinned-by": "Unpinned by",
"user-locked-topic-ago": "%1 locked this topic %2", "deleted-by": "Deleted by",
"user-locked-topic-on": "%1 locked this topic on %2", "restored-by": "Restored by",
"user-unlocked-topic-ago": "%1 unlocked this topic %2", "moved-from-by": "Moved from %1 by",
"user-unlocked-topic-on": "%1 unlocked this topic on %2", "queued-by": "Post queued for approval &rarr;",
"user-pinned-topic-ago": "%1 pinned this topic %2", "backlink": "Referenced by",
"user-pinned-topic-on": "%1 pinned this topic on %2", "forked-by": "Forked by",
"user-unpinned-topic-ago": "%1 unpinned this topic %2", "bookmark_instructions": "اضغط هنا للعودة لأخر مشاركة مقروءة في الموضوع",
"user-unpinned-topic-on": "%1 unpinned this topic on %2",
"user-deleted-topic-ago": "%1 deleted this topic %2",
"user-deleted-topic-on": "%1 deleted this topic on %2",
"user-restored-topic-ago": "%1 restored this topic %2",
"user-restored-topic-on": "%1 restored this topic on %2",
"user-moved-topic-from-ago": "%1 moved this topic from %2 %3",
"user-moved-topic-from-on": "%1 moved this topic from %2 on %3",
"user-queued-post-ago": "%1 <a href=\"%2\">queued</a> post for approval %3",
"user-queued-post-on": "%1 <a href=\"%2\">queued</a> post for approval on %3",
"user-referenced-topic-ago": "%1 <a href=\"%2\">referenced</a> this topic %3",
"user-referenced-topic-on": "%1 <a href=\"%2\">referenced</a> this topic on %3",
"user-forked-topic-ago": "%1 <a href=\"%2\">forked</a> this topic %3",
"user-forked-topic-on": "%1 <a href=\"%2\">forked</a> this topic on %3",
"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", "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>",
"forked-message": "This topic was forked from <a href=\"%1\">%2</a>", "deleted_message": "هذه المشاركة محذوفة. فقط من لهم صلاحية الإشراف على ا لمشاركات يمكنهم معاينتها.",
"deleted-message": "هذه المشاركة محذوفة. فقط من لهم صلاحية الإشراف على ا لمشاركات يمكنهم معاينتها.", "following_topic.message": "ستستلم تنبيها عند كل مشاركة جديدة في هذا الموضوع.",
"following-topic.message": "ستستلم تنبيها عند كل مشاركة جديدة في هذا الموضوع.", "not_following_topic.message": "You will see this topic in the unread topics list, but you will not receive notifications when somebody posts to this topic.",
"not-following-topic.message": "You will see this topic in the unread topics list, but you will not receive notifications when somebody posts to this topic.", "ignoring_topic.message": "You will no longer see this topic in the unread topics list. You will be notified when you are mentioned or your post is up voted.",
"ignoring-topic.message": "You will no longer see this topic in the unread topics list. You will be notified when you are mentioned or your post is up voted.", "login_to_subscribe": "المرجو إنشاء حساب أو تسجيل الدخول حتى يمكنك متابعة هذا الموضوع.",
"login-to-subscribe": "المرجو إنشاء حساب أو تسجيل الدخول حتى يمكنك متابعة هذا الموضوع.",
"markAsUnreadForAll.success": "تم تحديد الموضوع على أنه غير مقروء.", "markAsUnreadForAll.success": "تم تحديد الموضوع على أنه غير مقروء.",
"mark-unread": "حدده كغير مقروء", "mark_unread": "حدده كغير مقروء",
"mark-unread.success": "الموضوع حدد على أنه غير مقروء", "mark_unread.success": "الموضوع حدد على أنه غير مقروء",
"watch": "مراقبة", "watch": "مراقبة",
"unwatch": "الغاء المراقبة", "unwatch": "الغاء المراقبة",
"watch.title": "استلم تنبيها بالردود الجديدة في هذا الموضوع", "watch.title": "استلم تنبيها بالردود الجديدة في هذا الموضوع",
"unwatch.title": "ألغ مراقبة هذا الموضوع", "unwatch.title": "ألغ مراقبة هذا الموضوع",
"share-this-post": "انشر هذا الموضوع", "share_this_post": "انشر هذا الموضوع",
"watching": "مراقبة", "watching": "مراقبة",
"not-watching": "غير مراقب", "not-watching": "غير مراقب",
"ignoring": "تجاهل", "ignoring": "تجاهل",
"watching.description": "بلغني بالردود الجديدة<br/>\nاظهر الموضوع في غير مقروء", "watching.description": "بلغني بالردود الجديدة<br/>\nاظهر الموضوع في غير مقروء",
"not-watching.description": "Do not notify me of new replies.<br/>Show topic in unread if category is not ignored.", "not-watching.description": "Do not notify me of new replies.<br/>Show topic in unread if category is not ignored.",
"ignoring.description": "Do not notify me of new replies.<br/>Do not show topic in unread.", "ignoring.description": "Do not notify me of new replies.<br/>Do not show topic in unread.",
"thread-tools.title": "أدوات الموضوع", "thread_tools.title": "أدوات الموضوع",
"thread-tools.markAsUnreadForAll": "Mark Unread For All", "thread_tools.markAsUnreadForAll": "Mark Unread For All",
"thread-tools.pin": "علق الموضوع", "thread_tools.pin": "علق الموضوع",
"thread-tools.unpin": "إلغاء تعليق الموضوع", "thread_tools.unpin": "إلغاء تعليق الموضوع",
"thread-tools.lock": "أقفل الموضوع", "thread_tools.lock": "أقفل الموضوع",
"thread-tools.unlock": "إلغاء إقفال الموضوع", "thread_tools.unlock": "إلغاء إقفال الموضوع",
"thread-tools.move": "نقل الموضوع", "thread_tools.move": "نقل الموضوع",
"thread-tools.move-posts": "Move Posts", "thread_tools.move-posts": "Move Posts",
"thread-tools.move-all": "نقل الكل", "thread_tools.move_all": "نقل الكل",
"thread-tools.change-owner": "Change Owner", "thread_tools.change_owner": "Change Owner",
"thread-tools.select-category": "Select Category", "thread_tools.select_category": "Select Category",
"thread-tools.fork": "إنشاء فرع الموضوع", "thread_tools.fork": "إنشاء فرع الموضوع",
"thread-tools.tag": "Tag Topic", "thread_tools.delete": "حذف الموضوع",
"thread-tools.delete": "حذف الموضوع", "thread_tools.delete-posts": "مشاركات محذوفة",
"thread-tools.delete-posts": "مشاركات محذوفة", "thread_tools.delete_confirm": "هل أنت متأكد أنك تريد حذف هذا الموضوع؟",
"thread-tools.delete-confirm": "هل أنت متأكد أنك تريد حذف هذا الموضوع؟", "thread_tools.restore": "استعادة الموضوع",
"thread-tools.restore": "استعادة الموضوع", "thread_tools.restore_confirm": "هل أنت متأكد أنك تريد استعادة هذا الموضوع؟",
"thread-tools.restore-confirm": "هل أنت متأكد أنك تريد استعادة هذا الموضوع؟", "thread_tools.purge": "تطهير الموضوع",
"thread-tools.purge": "تطهير الموضوع", "thread_tools.purge_confirm": "هل أنت متأكد أنك تريد تطهير هذا الموضوع؟",
"thread-tools.purge-confirm": "هل أنت متأكد أنك تريد تطهير هذا الموضوع؟", "thread_tools.merge_topics": "Merge Topics",
"thread-tools.merge-topics": "Merge Topics", "thread_tools.merge": "Merge",
"thread-tools.merge": "Merge Topic", "topic_move_success": "This topic will be moved to \"%1\" shortly. Click here to undo.",
"topic-move-success": "This topic will be moved to \"%1\" shortly. Click here to undo.", "topic_move_multiple_success": "These topics will be moved to \"%1\" shortly. Click here to undo.",
"topic-move-multiple-success": "These topics will be moved to \"%1\" shortly. Click here to undo.", "topic_move_all_success": "All topics will be moved to \"%1\" shortly. Click here to undo.",
"topic-move-all-success": "All topics will be moved to \"%1\" shortly. Click here to undo.", "topic_move_undone": "Topic move undone",
"topic-move-undone": "Topic move undone", "topic_move_posts_success": "Posts will be moved shortly. Click here to undo.",
"topic-move-posts-success": "Posts will be moved shortly. Click here to undo.", "topic_move_posts_undone": "Post move undone",
"topic-move-posts-undone": "Post move undone", "post_delete_confirm": "هل أنت متأكد أنك تريد حذف هذه المشاركة؟",
"post-delete-confirm": "هل أنت متأكد أنك تريد حذف هذه المشاركة؟", "post_restore_confirm": "هل أنت متأكد أنك تريد استعادة هذه المشاركة؟",
"post-restore-confirm": "هل أنت متأكد أنك تريد استعادة هذه المشاركة؟", "post_purge_confirm": "هل أنت متأكد أنك تريد تطهير هذه المشاركة؟",
"post-purge-confirm": "هل أنت متأكد أنك تريد تطهير هذه المشاركة؟",
"pin-modal-expiry": "Expiration Date", "pin-modal-expiry": "Expiration Date",
"pin-modal-help": "You can optionally set an expiration date for the pinned topic(s) here. Alternatively, you can leave this field blank to have the topic stay pinned until it is manually unpinned.", "pin-modal-help": "You can optionally set an expiration date for the pinned topic(s) here. Alternatively, you can leave this field blank to have the topic stay pinned until it is manually unpinned.",
"load-categories": "تحميل الفئات", "load_categories": "تحميل الفئات",
"confirm-move": "انقل", "confirm_move": "انقل",
"confirm-fork": "فرع", "confirm_fork": "فرع",
"bookmark": "Bookmark", "bookmark": "Bookmark",
"bookmarks": "Bookmarks", "bookmarks": "Bookmarks",
"bookmarks.has-no-bookmarks": "You haven't bookmarked any posts yet.", "bookmarks.has_no_bookmarks": "You haven't bookmarked any posts yet.",
"copy-permalink": "Copy Permalink", "copy-permalink": "Copy Permalink",
"loading-more-posts": "تحميل المزيد من المشاركات", "loading_more_posts": "تحميل المزيد من المشاركات",
"move-topic": "نقل الموضوع", "move_topic": "نقل الموضوع",
"move-topics": "نقل المواضيع", "move_topics": "نقل المواضيع",
"move-post": "نقل المشاركة", "move_post": "نقل المشاركة",
"post-moved": "تم نقل المشاركة", "post_moved": "تم نقل المشاركة",
"fork-topic": "فرع الموضوع", "fork_topic": "فرع الموضوع",
"enter-new-topic-title": "Enter new topic title", "enter-new-topic-title": "Enter new topic title",
"fork-topic-instruction": "Click the posts you want to fork, enter a title for the new topic and click fork topic", "fork_topic_instruction": "إضغط على المشاركات التي تريد تفريعها",
"fork-no-pids": "لم تختر أي مشاركة", "fork_no_pids": "لم تختر أي مشاركة",
"no-posts-selected": "No posts selected!", "no-posts-selected": "No posts selected!",
"x-posts-selected": "%1 post(s) selected", "x-posts-selected": "%1 post(s) selected",
"x-posts-will-be-moved-to-y": "%1 post(s) will be moved to \"%2\"", "x-posts-will-be-moved-to-y": "%1 post(s) will be moved to \"%2\"",
"fork-pid-count": "1% مشاركة محددة", "fork_pid_count": "1% مشاركة محددة",
"fork-success": "تم إنشاء فرع للموضوع بنجاح! إضغط هنا لمعاينة الفرع.", "fork_success": "تم إنشاء فرع للموضوع بنجاح! إضغط هنا لمعاينة الفرع.",
"delete-posts-instruction": "Click the posts you want to delete/purge", "delete_posts_instruction": "Click the posts you want to delete/purge",
"merge-topics-instruction": "Click the topics you want to merge or search for them", "merge_topics_instruction": "Click the topics you want to merge or search for them",
"merge-topic-list-title": "List of topics to be merged", "merge-topic-list-title": "List of topics to be merged",
"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",
"topic-id": "Topic ID", "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", "move_posts_instruction": "Click the posts you want to move then enter a topic ID or go to the target topic",
"move-topic-instruction": "Select the target category and then click move", "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.hide": "Hide",
"composer.discard": "نبذ التغييرات", "composer.discard": "نبذ التغييرات",
"composer.submit": "حفظ", "composer.submit": "حفظ",
"composer.additional-options": "Additional Options", "composer.additional-options": "Additional Options",
"composer.post-later": "Post Later",
"composer.schedule": "Schedule", "composer.schedule": "Schedule",
"composer.replying-to": "الرد على %1", "composer.replying_to": "الرد على %1",
"composer.new-topic": "موضوع جديد", "composer.new_topic": "موضوع جديد",
"composer.editing-in": "Editing post in %1", "composer.editing": "Editing",
"composer.uploading": "جاري الرفع", "composer.uploading": "جاري الرفع",
"composer.thumb-url-label": "ألصق رابط الصورة المصغرة للموضوع", "composer.thumb_url_label": "ألصق رابط الصورة المصغرة للموضوع",
"composer.thumb-title": "إضافة صورة مصغرة للموضوع", "composer.thumb_title": "إضافة صورة مصغرة للموضوع",
"composer.thumb-url-placeholder": "http://example.com/thumb.png", "composer.thumb_url_placeholder": "http://example.com/thumb.png",
"composer.thumb-file-label": "أو قم برفع ملف", "composer.thumb_file_label": "أو قم برفع ملف",
"composer.thumb-remove": "تفريغ الخانات", "composer.thumb_remove": "تفريغ الخانات",
"composer.drag-and-drop-images": "اسحب وأسقص الصور هنا", "composer.drag_and_drop_images": "اسحب وأسقص الصور هنا",
"more-users-and-guests": "%1 مستخدم(ين) و %2 زائر(ين)", "more_users_and_guests": "%1 مستخدم(ين) و %2 زائر(ين)",
"more-users": "%1 مستخدم(ين)", "more_users": "%1 مستخدم(ين)",
"more-guests": "%1 زائر(ين)", "more_guests": "%1 زائر(ين)",
"users-and-others": "%1 و %2 آخرين", "users_and_others": "%1 و %2 آخرين",
"sort-by": "ترتيب حسب", "sort_by": "ترتيب حسب",
"oldest-to-newest": "من الأقدم إلى الأحدث", "oldest_to_newest": "من الأقدم إلى الأحدث",
"newest-to-oldest": "من الأحدث إلى الأقدم", "newest_to_oldest": "من الأحدث إلى الأقدم",
"most-votes": "Most Votes", "most_votes": "Most Votes",
"most-posts": "Most Posts", "most_posts": "Most Posts",
"most-views": "Most Views", "most_views": "Most Views",
"stale.title": "Create new topic instead?", "stale.title": "Create new topic instead?",
"stale.warning": "The topic you are replying to is quite old. Would you like to create a new topic instead, and reference this one in your reply?", "stale.warning": "The topic you are replying to is quite old. Would you like to create a new topic instead, and reference this one in your reply?",
"stale.create": "موضوع جديد", "stale.create": "موضوع جديد",
"stale.reply-anyway": "الرد على هذا الموضوع", "stale.reply_anyway": "الرد على هذا الموضوع ",
"link-back": "رد: [%1](%2)", "link_back": "رد: [%1](%2)",
"diffs.title": "Post Edit History", "diffs.title": "Post Edit History",
"diffs.description": "This post has <strong>%1</strong> revisions. Click one of the revisions below to see the post content at that point in time.", "diffs.description": "This post has <strong>%1</strong> revisions. Click one of the revisions below to see the post content at that point in time.",
"diffs.no-revisions-description": "This post has <strong>%1</strong> revisions.", "diffs.no-revisions-description": "This post has <strong>%1</strong> revisions.",
@@ -198,13 +178,11 @@
"diffs.post-restored": "Post successfully restored to earlier revision", "diffs.post-restored": "Post successfully restored to earlier revision",
"diffs.delete": "Delete this revision", "diffs.delete": "Delete this revision",
"diffs.deleted": "Revision deleted", "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",
"last-post": "Last post", "last-post": "Last post",
"go-to-my-next-post": "Go to my next post", "go-to-my-next-post": "Go to my next post",
"no-more-next-post": "You don't have more posts in this topic", "no-more-next-post": "You don't have more posts in this topic",
"post-quick-reply": "Quick reply", "post-quick-reply": "Post quick reply"
"navigator.index": "Post %1 of %2",
"navigator.unread": "%1 unread"
} }

View File

@@ -1,12 +1,12 @@
{ {
"title": "غير مقروء", "title": "غير مقروء",
"no-unread-topics": "ليس هناك أي موضوع غير مقروء", "no_unread_topics": "ليس هناك أي موضوع غير مقروء",
"load-more": "حمل المزيد", "load_more": "حمل المزيد",
"mark-as-read": "حدد غير مقروء", "mark_as_read": "حدد غير مقروء",
"selected": "المحددة", "selected": "المحددة",
"all": "الكل", "all": "الكل",
"all-categories": "كل الفئات", "all_categories": "كل الفئات",
"topics-marked-as-read.success": "تم تحديد المواضيع على أنها مقروءة!", "topics_marked_as_read.success": "تم تحديد المواضيع على أنها مقروءة!",
"all-topics": "كل المواضيع", "all-topics": "كل المواضيع",
"new-topics": "مواضيع جديدة", "new-topics": "مواضيع جديدة",
"watched-topics": "المواضيع المتابعة", "watched-topics": "المواضيع المتابعة",

View File

@@ -1,30 +1,30 @@
{ {
"banned": "محظور", "banned": "محظور",
"muted": "كتم", "muted": "Muted",
"offline": "غير متصل", "offline": "غير متصل",
"deleted": "محذوف", "deleted": "محذوف",
"username": "إسم المستخدم", "username": "إسم المستخدم",
"joindate": "تاريخ الإنضمام", "joindate": "تاريخ الإنضمام",
"postcount": "عدد المشاركات", "postcount": "عدد المشاركات",
"email": "البريد الإلكتروني", "email": "البريد الإلكتروني",
"confirm-email": "تأكيد عنوان البريد الإلكتروني", "confirm_email": "تأكيد عنوان البريد الإلكتروني",
"account-info": "معلومات الحساب", "account_info": "معلومات الحساب",
"admin-actions-label": "الإجراءات الإدارية", "admin_actions_label": "Administrative Actions",
"ban-account": "حظر الحساب", "ban_account": "حظر الحساب",
"ban-account-confirm": "هل تريد حقاً حظر هاذا العضو؟", "ban_account_confirm": "هل تريد حقاً حظر هاذا العضو؟",
"unban-account": "إزالة حظر الحساب", "unban_account": "إزالة حظر الحساب",
"mute-account": "Mute Account", "mute_account": "Mute Account",
"unmute-account": "Unmute Account", "unmute_account": "Unmute Account",
"delete-account": "حذف الحساب", "delete_account": "حذف الحساب",
"delete-account-as-admin": "Delete <strong>Account</strong>", "delete_account_as_admin": "Delete <strong>Account</strong>",
"delete-content": "Delete Account <strong>Content</strong>", "delete_content": "Delete Account <strong>Content</strong>",
"delete-all": "Delete <strong>Account</strong> and <strong>Content</strong>", "delete_all": "Delete <strong>Account</strong> and <strong>Content</strong>",
"delete-account-confirm": "Are you sure you want to anonymize your posts and delete your account?<br /><strong>This action is irreversible and you will not be able to recover any of your data</strong><br /><br />Enter your password to confirm that you wish to destroy this account.", "delete_account_confirm": "Are you sure you want to anonymize your posts and delete your account?<br /><strong>This action is irreversible and you will not be able to recover any of your data</strong><br /><br />Enter your password to confirm that you wish to destroy this account.",
"delete-this-account-confirm": "Are you sure you want to delete this account while leaving its contents behind?<br /><strong>This action is irreversible, posts will be anonymized, and you will not be able to restore post associations with the deleted account</strong><br /><br />", "delete_this_account_confirm": "Are you sure you want to delete this account while leaving its contents behind?<br /><strong>This action is irreversible, posts will be anonymized, and you will not be able to restore post associations with the deleted account</strong><br /><br />",
"delete-account-content-confirm": "Are you sure you want to delete this account's content (posts/topics/uploads)? <br /><strong>This action is irreversible and you will not be able to recover any data</strong><br /><br />", "delete_account_content_confirm": "Are you sure you want to delete this account's content (posts/topics/uploads)? <br /><strong>This action is irreversible and you will not be able to recover any data</strong><br /><br />",
"delete-all-confirm": "Are you sure you want to delete this account and all of its content (posts/topics/uploads)? <br /><strong>This action is irreversible and you will not be able to recover any data</strong><br /><br />", "delete_all_confirm": "Are you sure you want to delete this account and all of its content (posts/topics/uploads)? <br /><strong>This action is irreversible and you will not be able to recover any data</strong><br /><br />",
"account-deleted": "تم حذف الحساب", "account-deleted": "تم حذف الحساب",
"account-content-deleted": "تم حذف محتوى حساب", "account-content-deleted": "Account content deleted",
"fullname": "الاسم الكامل", "fullname": "الاسم الكامل",
"website": "الموقع الإلكتروني", "website": "الموقع الإلكتروني",
"location": "الموقع", "location": "الموقع",
@@ -32,98 +32,92 @@
"joined": "تاريخ التسجيل", "joined": "تاريخ التسجيل",
"lastonline": "تاريخ آخر دخول", "lastonline": "تاريخ آخر دخول",
"profile": "الملف الشخصي", "profile": "الملف الشخصي",
"profile-views": "عدد المشاهدات", "profile_views": "عدد المشاهدات",
"reputation": "السمعة", "reputation": "السمعة",
"bookmarks": "المفضلات", "bookmarks": "Bookmarks",
"watched-categories": "الأقسام المُتابعة", "watched_categories": "Watched categories",
"watched-tags": "Watched tags", "change_all": "Change All",
"change-all": "غير الكل",
"watched": "متابع", "watched": "متابع",
"ignored": "تم تجاهله", "ignored": "تم تجاهله",
"default-category-watch-state": "حالة مشاهدة اﻻقسام الافتراضية", "default-category-watch-state": "Default category watch state",
"followers": "المتابعون", "followers": "المتابعون",
"following": "يتابع", "following": "يتابع",
"blocks": "الكتل", "blocks": "Blocks",
"blocked-users": "Blocked users", "block_toggle": "Toggle Block",
"block-toggle": "تبديل الكتلة", "block_user": "Block User",
"block-user": "أحظر المستخدم", "unblock_user": "Unblock User",
"unblock-user": "ألغ حظر المستخدم",
"aboutme": "معلومة عنك او السيرة الذاتية", "aboutme": "معلومة عنك او السيرة الذاتية",
"signature": "توقيع", "signature": "توقيع",
"birthday": "عيد ميلاد", "birthday": "عيد ميلاد",
"chat": "محادثة", "chat": "محادثة",
"chat-with": "متابعة الدردشة مع %1", "chat_with": "متابعة الدردشة مع %1",
"new-chat-with": "بدء دردشة جديدة مع %1", "new_chat_with": "بدء دردشة جديدة مع %1",
"flag-profile": "ضع علامة على الملف الشخصي", "flag-profile": "Flag Profile",
"follow": "تابع", "follow": "تابع",
"unfollow": "إلغاء المتابعة", "unfollow": "إلغاء المتابعة",
"more": "المزيد", "more": "المزيد",
"profile-update-success": "تم تحديث الملف الشخصي بنجاح", "profile_update_success": "تم تحديث الملف الشخصي بنجاح",
"change-picture": "تغيير الصورة", "change_picture": "تغيير الصورة",
"change-username": "تغيير اسم المستخدم", "change_username": "تغيير اسم المستخدم",
"change-email": "تغيير البريد اﻹلكتروني", "change_email": "تغيير البريد اﻹلكتروني",
"email-updated": "Email Updated", "email_same_as_password": "Please enter your current password to continue &ndash; you've entered your new email again",
"email-same-as-password": "Please enter your current password to continue &ndash; you've entered your new email again",
"edit": "تعديل", "edit": "تعديل",
"edit-profile": "تعديل الملف الشخصي", "edit-profile": "تعديل الملف الشخصي",
"default-picture": "أيقونة افتراضية", "default_picture": "أيقونة افتراضية",
"uploaded-picture": "الصورة المرفوعة", "uploaded_picture": "الصورة المرفوعة",
"upload-new-picture": "رفع صورة جديدة", "upload_new_picture": "رفع صورة جديدة",
"upload-new-picture-from-url": "رفع صورة جديدة من رابط", "upload_new_picture_from_url": "رفع صورة جديدة من رابط",
"current-password": "كلمة السر الحالية", "current_password": "كلمة السر الحالية",
"new-password": "New Password", "change_password": "تغيير كلمة السر",
"change-password": "تغيير كلمة السر", "change_password_error": "كلمة سر غير صحيحة",
"change-password-error": "كلمة سر غير صحيحة", "change_password_error_wrong_current": "كلمة السر الحالية ليست صحيحة",
"change-password-error-wrong-current": "كلمة السر الحالية ليست صحيحة", "change_password_error_match": "كلمة السر غير مطابقة لتأكيد كلمة السر",
"change-password-error-match": "كلمة السر غير مطابقة لتأكيد كلمة السر", "change_password_error_privileges": "ليس لديك الصلاحيات الكافية لتغيير كلمة السر هذه.",
"change-password-error-privileges": "ليس لديك الصلاحيات الكافية لتغيير كلمة السر هذه.", "change_password_success": "تم تحديث كلمة السر خاصتك.",
"change-password-success": م تحديث كلمة السر خاصتك.", "confirm_password": أكيد كلمة السر",
"confirm-password": "تأكيد كلمة السر",
"password": "كلمة السر", "password": "كلمة السر",
"username-taken-workaround": "اسم المستخدم الذي اخترته مستخدم سابقا، لذلك قمنا بتغييره لك قليلا. أنت الآن مسجل بالاسم <strong>%1</strong>", "username_taken_workaround": "اسم المستخدم الذي اخترته مستخدم سابقا، لذلك قمنا بتغييره لك قليلا. أنت الآن مسجل بالاسم <strong>%1</strong>",
"password-same-as-username": "كلمة المرور مطابقة لاسم المستخدم الخاص بك، يرجى تحديد كلمة مرور أخرى.", "password_same_as_username": "كلمة المرور مطابقة لاسم المستخدم الخاص بك، يرجى تحديد كلمة مرور أخرى.",
"password-same-as-email": "كلمة المرور مطابقة لبريدك الإلكتروني، يرجى تحديد كلمة مرور أخرى.", "password_same_as_email": "كلمة المرور مطابقة لبريدك الإلكتروني، يرجى تحديد كلمة مرور أخرى.",
"weak-password": "كلمة مرور ضعيفة.", "weak_password": "كلمة مرور ضعيفة.",
"upload-picture": "ارفع الصورة", "upload_picture": "ارفع الصورة",
"upload-a-picture": "رفع صورة", "upload_a_picture": "رفع صورة",
"remove-uploaded-picture": "إزالة الصورة المرفوعة", "remove_uploaded_picture": "إزالة الصورة المرفوعة",
"upload-cover-picture": "رفع صورة الغلاف", "upload_cover_picture": "رفع صورة الغلاف",
"remove-cover-picture-confirm": "هل تريد بالتأكيد إزالة صورة الغلاف؟", "remove_cover_picture_confirm": "هل تريد بالتأكيد إزالة صورة الغلاف؟",
"crop-picture": "إقتصاص الصورة", "crop_picture": "إقتصاص الصورة",
"upload-cropped-picture": "إقتصاص ورفع", "upload_cropped_picture": "إقتصاص ورفع",
"avatar-background-colour": "لون الخلفية للصورة الرمزية", "avatar-background-colour": "Avatar background colour",
"settings": "خيارات", "settings": "خيارات",
"show-email": "أظهر بريدي الإلكتروني", "show_email": "أظهر بريدي الإلكتروني",
"show-fullname": "أظهر اسمي الكامل", "show_fullname": "أظهر اسمي الكامل",
"restrict-chats": "لاتسمح بورود محادثات إلا من طرف المستخدمين الذين أتابعهم.", "restrict_chats": "لاتسمح بورود محادثات إلا من طرف المستخدمين الذين أتابعهم.",
"digest-label": "اشترك في النشرة الدورية", "digest_label": "اشترك في النشرة الدورية",
"digest-description": "استلام اشعارات بآخر مستجدات هذا القسم (التنبيهات والمواضيع الجديدة) عبر البريد الإلكتروني وفقا لجدول زمني محدد.", "digest_description": "استلام اشعارات بآخر مستجدات هذا القسم (التنبيهات والمواضيع الجديدة) عبر البريد الإلكتروني وفقا لجدول زمني محدد.",
"digest-off": "غير مفعل", "digest_off": "غير مفعل",
"digest-daily": "يوميا", "digest_daily": "يوميا",
"digest-weekly": "أسبوعيًّا", "digest_weekly": "أسبوعيًّا",
"digest-biweekly": "Bi-Weekly", "digest_biweekly": "Bi-Weekly",
"digest-monthly": "شهريًّا", "digest_monthly": "شهريًّا",
"has-no-follower": "هذا المستخدم ليس لديه أية متابعين :(", "has_no_follower": "هذا المستخدم ليس لديه أية متابعين :(",
"follows-no-one": "هذا المستخدم لا يتابع أحد :(", "follows_no_one": "هذا المستخدم لا يتابع أحد :(",
"has-no-posts": "هذا المستخدم لم يشارك حتى الآن.", "has_no_posts": "هذا المستخدم لم يشارك حتى الآن.",
"has-no-best-posts": "This user does not have any upvoted posts yet.", "has_no_best_posts": "This user does not have any upvoted posts yet.",
"has-no-topics": "هذا المستخدم لم يكتب أي موضوع حتى الآن.", "has_no_topics": "هذا المستخدم لم يكتب أي موضوع حتى الآن.",
"has-no-watched-topics": "هذا المستخدم لم يقم بمراقبة اية مواضيع حتى الآن.", "has_no_watched_topics": "هذا المستخدم لم يقم بمراقبة اية مواضيع حتى الآن.",
"has-no-ignored-topics": "هذا المستخدم لم يقم بتجاهل اية مواضيع حتى الآن.", "has_no_ignored_topics": "هذا المستخدم لم يقم بتجاهل اية مواضيع حتى الآن.",
"has-no-upvoted-posts": "هذا المستخدم لم يقم بالتصويت للأعلى لأي مشاركة حتى الآن.", "has_no_upvoted_posts": "هذا المستخدم لم يقم بالتصويت للأعلى لأي مشاركة حتى الآن.",
"has-no-downvoted-posts": "هذا المستخدم لم يقم بالتصويت للأسفل لأي مشاركة حتى الآن.", "has_no_downvoted_posts": "هذا المستخدم لم يقم بالتصويت للأسفل لأي مشاركة حتى الآن.",
"has-no-controversial-posts": "هذا المستخدم ﻻيمتلك تصويت للأسفل لأي مشاركة حتى الآن.", "has_no_controversial_posts": "This user does not have any downvoted posts yet.",
"has-no-blocks": "أنت لم تحظر اي مستخدم", "has_no_blocks": "You have blocked no users.",
"email-hidden": "البريد الإلكتروني مخفي", "email_hidden": "البريد الإلكتروني مخفي",
"hidden": "مخفي", "hidden": "مخفي",
"paginate-description": "عرض المواضيع والردود موزعة على صفحات عوضاً عن التمرير اللانهائي.", "paginate_description": "عرض المواضيع والردود موزعة على صفحات عوضاً عن التمرير اللانهائي.",
"topics-per-page": "المواضيع في كل صفحة", "topics_per_page": "المواضيع في كل صفحة",
"posts-per-page": "الردود في كل صفحة", "posts_per_page": "الردود في كل صفحة",
"category-topic-sort": "Category topic sort", "max_items_per_page": "أقصى %1",
"topic-post-sort": "Topic post sort", "acp_language": "Admin Page Language",
"max-items-per-page": "أقصى %1", "notifications": "Notifications",
"acp-language": "لغة صفحة اﻻدارة",
"notifications": "التنبيهات",
"upvote-notif-freq": "معدل تكرار تنبيهات التصويت للأعلى", "upvote-notif-freq": "معدل تكرار تنبيهات التصويت للأعلى",
"upvote-notif-freq.all": "كل التصويتات للأعلى", "upvote-notif-freq.all": "كل التصويتات للأعلى",
"upvote-notif-freq.first": "First Per Post", "upvote-notif-freq.first": "First Per Post",
@@ -132,24 +126,22 @@
"upvote-notif-freq.logarithmic": "On 10, 100, 1000...", "upvote-notif-freq.logarithmic": "On 10, 100, 1000...",
"upvote-notif-freq.disabled": "معطل", "upvote-notif-freq.disabled": "معطل",
"browsing": "خيارات التصفح", "browsing": "خيارات التصفح",
"open-links-in-new-tab": "فتح الروابط الخارجية في نافدة جديدة", "open_links_in_new_tab": "فتح الروابط الخارجية في نافدة جديدة",
"enable-topic-searching": "تفعيل خاصية البحث داخل المواضيع", "enable_topic_searching": "تفعيل خاصية البحث داخل المواضيع",
"topic-search-help": "إذا قمت بتفعيل ميزة البحث في-الموضوع، سيتم تجاوز الخيار الافتراضي للمتصفح مما يؤدي للبحث بكامل الموضوع بدلا عن البحث في الجزء الظاهر في الشاشة.", "topic_search_help": "إذا قمت بتفعيل ميزة البحث في-الموضوع، سيتم تجاوز الخيار الافتراضي للمتصفح مما يؤدي للبحث بكامل الموضوع بدلا عن البحث في الجزء الظاهر في الشاشة.",
"update-url-with-post-index": "Update url with post index while browsing topics", "update_url_with_post_index": "Update url with post index while browsing topics",
"scroll-to-my-post": "بعد اضافة رد على المشاركة, قم بإظهار المشاركة", "scroll_to_my_post": "بعد اضافة رد على المشاركة, قم بإظهار المشاركة",
"follow-topics-you-reply-to": "متابعة المواضيع التي تقوم بالرد عليها", "follow_topics_you_reply_to": "متابعة المواضيع التي تقوم بالرد عليها",
"follow-topics-you-create": "متابعة المواضيع التي تقوم بإنشائها", "follow_topics_you_create": "متابعة المواضيع التي تقوم بإنشائها",
"grouptitle": "عنوان المجموعة", "grouptitle": "عنوان المجموعة",
"group-order-help": "Select a group and use the arrows to order titles", "group-order-help": "Select a group and use the arrows to order titles",
"no-group-title": "لا يوجد عنوان للمجموعة", "no-group-title": "لا يوجد عنوان للمجموعة",
"select-skin": "إختر سمة", "select-skin": "إختر سمة",
"default": "Default (%1)",
"no-skin": "No Skin",
"select-homepage": "إختر الصفحة الرئيسية", "select-homepage": "إختر الصفحة الرئيسية",
"homepage": "الصفحة الرئيسية", "homepage": "الصفحة الرئيسية",
"homepage-description": "حدد صفحة لاستخدامها كصفحة رئيسية للمنتدى أو \"لا شيء\" لاستخدام الصفحة الرئيسية الافتراضية.", "homepage_description": "حدد صفحة لاستخدامها كصفحة رئيسية للمنتدى أو \"لا شيء\" لاستخدام الصفحة الرئيسية الافتراضية.",
"custom-route": "مسار الصفحة الرئيسية المخصصة", "custom_route": "مسار الصفحة الرئيسية المخصصة",
"custom-route-help": "Enter a route name here, without any preceding slash (e.g. \"recent\" or \"category/2/general-discussion\")", "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": "انقر هنا لربط مع",
@@ -176,35 +168,32 @@
"info.moderation-note.success": "تم حفظ ملاحظة الإشراف", "info.moderation-note.success": "تم حفظ ملاحظة الإشراف",
"info.moderation-note.add": "إضافة ملاحظة", "info.moderation-note.add": "إضافة ملاحظة",
"sessions.description": "This page allows you to view any active sessions on this forum and revoke them if necessary. You can revoke your own session by logging out of your account.", "sessions.description": "This page allows you to view any active sessions on this forum and revoke them if necessary. You can revoke your own session by logging out of your account.",
"revoke-session": "Revoke Session",
"browser-version-on-platform": "%1 %2 on %3",
"consent.title": "Your Rights &amp; Consent", "consent.title": "Your Rights &amp; Consent",
"consent.lead": "This community forum collects and processes your personal information.", "consent.lead": "This community forum collects and processes your personal information.",
"consent.intro": "We use this information strictly to personalise your experience in this community, as well as to associate the posts you make to your user account. During the registration step you were asked to provide a username and email address, you can also optionally provide additional information to complete your user profile on this website.<br /><br />We retain this information for the life of your user account, and you are able to withdraw consent at any time by deleting your account. At any time you may request a copy of your contribution to this website, via your Rights &amp; Consent page.<br /><br />If you have any questions or concerns, we encourage you to reach out to this forum's administrative team.", "consent.intro": "We use this information strictly to personalise your experience in this community, as well as to associate the posts you make to your user account. During the registration step you were asked to provide a username and email address, you can also optionally provide additional information to complete your user profile on this website.<br /><br />We retain this information for the life of your user account, and you are able to withdraw consent at any time by deleting your account. At any time you may request a copy of your contribution to this website, via your Rights &amp; Consent page.<br /><br />If you have any questions or concerns, we encourage you to reach out to this forum's administrative team.",
"consent.email-intro": "Occasionally, we may send emails to your registered email address in order to provide updates and/or to notify you of new activity that is pertinent to you. You can customise the frequency of the community digest (including disabling it outright), as well as select which types of notifications to receive via email, via your user settings page.", "consent.email_intro": "Occasionally, we may send emails to your registered email address in order to provide updates and/or to notify you of new activity that is pertinent to you. You can customise the frequency of the community digest (including disabling it outright), as well as select which types of notifications to receive via email, via your user settings page.",
"consent.digest-frequency": "Unless explicitly changed in your user settings, this community delivers email digests every %1.", "consent.digest_frequency": "Unless explicitly changed in your user settings, this community delivers email digests every %1.",
"consent.digest-off": "Unless explicitly changed in your user settings, this community does not send out email digests", "consent.digest_off": "Unless explicitly changed in your user settings, this community does not send out email digests",
"consent.received": "You have provided consent for this website to collect and process your information. No additional action is required.", "consent.received": "You have provided consent for this website to collect and process your information. No additional action is required.",
"consent.not-received": "You have not provided consent for data collection and processing. At any time this website&apos;s administration may elect to delete your account in order to become compliant with the General Data Protection Regulation.", "consent.not_received": "You have not provided consent for data collection and processing. At any time this website&apos;s administration may elect to delete your account in order to become compliant with the General Data Protection Regulation.",
"consent.give": "Give consent", "consent.give": "Give consent",
"consent.right-of-access": "You have the Right of Access", "consent.right_of_access": "You have the Right of Access",
"consent.right-of-access-description": "You have the right to access any data collected by this website upon request. You can retrieve a copy of this data by clicking the appropriate button below.", "consent.right_of_access_description": "You have the right to access any data collected by this website upon request. You can retrieve a copy of this data by clicking the appropriate button below.",
"consent.right-to-rectification": "You have the Right to Rectification", "consent.right_to_rectification": "You have the Right to Rectification",
"consent.right-to-rectification-description": "You have the right to change or update any inaccurate data provided to us. Your profile can be updated by editing your profile, and post content can always be edited. If this is not the case, please contact this site&apos;s administrative team.", "consent.right_to_rectification_description": "You have the right to change or update any inaccurate data provided to us. Your profile can be updated by editing your profile, and post content can always be edited. If this is not the case, please contact this site&apos;s administrative team.",
"consent.right-to-erasure": "You have the Right to Erasure", "consent.right_to_erasure": "You have the Right to Erasure",
"consent.right-to-erasure-description": "At any time, you are able to revoke your consent to data collection and/or processing by deleting your account. Your individual profile can be deleted, although your posted content will remain. If you wish to delete both your account <strong>and</strong> your content, please contact the administrative team for this website.", "consent.right_to_erasure_description": "At any time, you are able to revoke your consent to data collection and/or processing by deleting your account. Your individual profile can be deleted, although your posted content will remain. If you wish to delete both your account <strong>and</strong> your content, please contact the administrative team for this website.",
"consent.right-to-data-portability": "You have the Right to Data Portability", "consent.right_to_data_portability": "You have the Right to Data Portability",
"consent.right-to-data-portability-description": "You may request from us a machine-readable export of any collected data about you and your account. You can do so by clicking the appropriate button below.", "consent.right_to_data_portability_description": "You may request from us a machine-readable export of any collected data about you and your account. You can do so by clicking the appropriate button below.",
"consent.export-profile": "Export Profile (.json)", "consent.export_profile": "Export Profile (.json)",
"consent.export-profile-success": "Exporting profile, you will get a notification when it is complete.", "consent.export-profile-success": "Exporting profile, you will get a notification when it is complete.",
"consent.export-uploads": "Export Uploaded Content (.zip)", "consent.export_uploads": "Export Uploaded Content (.zip)",
"consent.export-uploads-success": "Exporting uploads, you will get a notification when it is complete.", "consent.export-uploads-success": "Exporting uploads, you will get a notification when it is complete.",
"consent.export-posts": "Export Posts (.csv)", "consent.export_posts": "Export Posts (.csv)",
"consent.export-posts-success": "Exporting posts, you will get a notification when it is complete.", "consent.export-posts-success": "Exporting posts, you will get a notification when it is complete.",
"emailUpdate.intro": "Please enter your email address below. This forum uses your email address for scheduled digest and notifications, as well as for account recovery in the event of a lost password.", "emailUpdate.intro": "Please enter your email address below. This forum uses your email address for scheduled digest and notifications, as well as for account recovery in the event of a lost password.",
"emailUpdate.optional": "<strong>This field is optional</strong>. You are not obligated to provide your email address, but without a validated email you will not be able to recover your account or login with your email.", "emailUpdate.optional": "<strong>This field is optional</strong>. You are not obligated to provide your email address, but without a validated email you will not be able to recover your account or login with your email.",
"emailUpdate.required": "<strong>This field is required</strong>.", "emailUpdate.required": "<strong>This field is required</strong>.",
"emailUpdate.change-instructions": "A confirmation email will be sent to the entered email address with a unique link. Accessing that link will confirm your ownership of the email address and it will become active on your account. At any time, you are able to update your email on file from within your account page.", "emailUpdate.change-instructions": "A confirmation email will be sent to the entered email address with a unique link. Accessing that link will confirm your ownership of the email address and it will become active on your account. At any time, you are able to update your email on file from within your account page.",
"emailUpdate.password-challenge": "Please enter your password in order to verify account ownership.", "emailUpdate.password-challenge": "Please enter your password in order to verify account ownership."
"emailUpdate.pending": "Your email address has not yet been confirmed, but an email has been sent out requesting confirmation. If you wish to invalidate that request and send a new confirmation request, please fill in the form below."
} }

View File

@@ -1,24 +1,23 @@
{ {
"all-users": "All Users", "latest_users": "أحدث الأعضاء",
"latest-users": "أحدث الأعضاء", "top_posters": "اﻷكثر مشاركة",
"top-posters": "اﻷكثر مشاركة", "most_reputation": "أعلى سمعة",
"most-reputation": "أعلى سمعة", "most_flags": "Most Flags",
"most-flags": "معظم الأعلام",
"search": "بحث", "search": "بحث",
"enter-username": "أدخل اسم مستخدم للبحث", "enter_username": "أدخل اسم مستخدم للبحث",
"search-user-for-chat": "Search for a user to start chat", "search-user-for-chat": "ابحث عن مستخدم لبدء محادثة ",
"load-more": "حمل المزيد", "load_more": "حمل المزيد",
"users-found-search-took": "تم إيجاد %1 مستخدمـ(ين)! استغرق البحث %2 ثانية.", "users-found-search-took": "تم إيجاد %1 مستخدمـ(ين)! استغرق البحث %2 ثانية.",
"filter-by": "تصفية بحسب", "filter-by": "Filter By",
"online-only": "المتصلون فقط", "online-only": "المتصلون فقط",
"invite": "دعوة", "invite": "دعوة",
"prompt-email": "البريد الإلكتروني:", "prompt-email": "Emails:",
"groups-to-join": "المجموعات التي سيتم الانضمام إليها عند قبول الدعوة:", "groups-to-join": "Groups to be joined when invite is accepted:",
"invitation-email-sent": "تم إرسال دعوة بالبريد الإلكتروني إلى %1", "invitation-email-sent": "تم إرسال دعوة بالبريد الإلكتروني إلى %1",
"user-list": "قائمة اﻷعضاء", "user_list": "قائمة اﻷعضاء",
"recent-topics": "أحدث المواضيع", "recent_topics": "أحدث المواضيع",
"popular-topics": "المواضيع الأكثر شهرة", "popular_topics": "المواضيع الأكثر شهرة",
"unread-topics": "المواضيع الغير مقروءة", "unread_topics": "المواضيع الغير مقروءة",
"categories": "الأقسام", "categories": "الأقسام",
"tags": "الوسوم", "tags": "الوسوم",
"no-users-found": "لم يتم العثور على مستخدمين!" "no-users-found": "لم يتم العثور على مستخدمين!"

View File

@@ -7,12 +7,5 @@
"changes-saved": "Промените са запазени", "changes-saved": "Промените са запазени",
"changes-saved-message": "Промените Ви в настройките на NodeBB бяха запазени.", "changes-saved-message": "Промените Ви в настройките на NodeBB бяха запазени.",
"changes-not-saved": "Промените не са запазени", "changes-not-saved": "Промените не са запазени",
"changes-not-saved-message": "Възникна проблем при запазването на промените Ви по NodeBB. (%1)", "changes-not-saved-message": "Възникна проблем при запазването на промените Ви по NodeBB. (%1)"
"save-changes": "Запазване на промените",
"min": "Мин.:",
"max": "Макс.:",
"view": "Преглед",
"edit": "Редактиране",
"add": "Добавяне",
"select-icon": "Изберете иконка"
} }

View File

@@ -1,5 +1,4 @@
{ {
"cache": "Кеш",
"post-cache": "Кеш за публикации", "post-cache": "Кеш за публикации",
"group-cache": "Кеш за групи", "group-cache": "Кеш за групи",
"local-cache": "Локален кеш", "local-cache": "Локален кеш",

View File

@@ -5,7 +5,7 @@
"uptime-seconds": "Активно време в секунди", "uptime-seconds": "Активно време в секунди",
"uptime-days": "Активно време в дни", "uptime-days": "Активно време в дни",
"mongo": "MongoDB", "mongo": "Mongo",
"mongo.version": "Версия на MongoDB", "mongo.version": "Версия на MongoDB",
"mongo.storage-engine": "Система за съхранение", "mongo.storage-engine": "Система за съхранение",
"mongo.collections": "Колекции", "mongo.collections": "Колекции",

View File

@@ -1,5 +1,4 @@
{ {
"errors": "Грешки",
"figure-x": "Фигура %1", "figure-x": "Фигура %1",
"error-events-per-day": "<code>%1</code> събития на ден", "error-events-per-day": "<code>%1</code> събития на ден",
"error.404": "Страницата не е намерена (Грешка 404)", "error.404": "Страницата не е намерена (Грешка 404)",

View File

@@ -9,5 +9,5 @@
"filter-type": "Вид събитие", "filter-type": "Вид събитие",
"filter-start": "Начална дата", "filter-start": "Начална дата",
"filter-end": "Крайна дата", "filter-end": "Крайна дата",
"filter-per-page": "На страница" "filter-perPage": "На страница"
} }

View File

@@ -1,8 +1,7 @@
{ {
"customise": "Персонализиране", "custom-css": "Персонализиран CSS/LESS",
"custom-css": "Персонализиран CSS/SASS", "custom-css.description": "Въведете своите собствени декларации на CSS/LESS, те ще бъдат приложени след всички останали стилове.",
"custom-css.description": "Въведете своите собствени декларации на CSS/SASS. Те ще бъдат приложени след всички останали стилове.", "custom-css.enable": "Включване на персонализиран CSS/LESS",
"custom-css.enable": "Включване на персонализиран CSS/SASS",
"custom-js": "Персонализиран код на Javascript", "custom-js": "Персонализиран код на Javascript",
"custom-js.description": "Въведете свой собствен код на javascript тук. Той ще бъде изпълнен след като страницата се зареди напълно.", "custom-js.description": "Въведете свой собствен код на javascript тук. Той ще бъде изпълнен след като страницата се зареди напълно.",
@@ -13,8 +12,5 @@
"custom-header.enable": "Включване на персонализирана заглавна част", "custom-header.enable": "Включване на персонализирана заглавна част",
"custom-css.livereload": "Включване на моменталното презареждане", "custom-css.livereload": "Включване на моменталното презареждане",
"custom-css.livereload.description": "Ако включите това, всички сесии на всяко устройство, където използвате акаунта си, ще се презареждат, когато натискате „Запазване“.", "custom-css.livereload.description": "Ако включите това, всички сесии на всяко устройство, където използвате акаунта си, ще се презареждат, когато натискате „Запазване“."
"bsvariables": "_variables.scss",
"bsvariables.description": "Тук може да промените променливите на bootstrap. Можете също да използвате и инструмент като <a href=\"https://bootstrap.build/app\">bootstrap.build</a> и да копирате резултата от него тук.<br/>Промените изискват повторно изграждане и рестартиране.",
"bsvariables.enable": "Включване на _variables.scss"
} }

View File

@@ -1,16 +1,7 @@
{ {
"skins": "Облици",
"bootswatch-skins": "Облици от Bootswatch",
"custom-skins": "Персонализирани облици",
"add-skin": "Добавяне на облик",
"save-custom-skins": "Запазване на персонализираните облици",
"save-custom-skins-success": "Персонализираните облици са запазени успешно",
"custom-skin-name": "Име на персонализирания облик",
"custom-skin-variables": "Променливи на персонализирания облик",
"loading": "Зареждане на облиците…", "loading": "Зареждане на облиците…",
"homepage": "Начална страница", "homepage": "Начална страница",
"select-skin": "Изберете облик", "select-skin": "Изберете облик",
"revert-skin": "Отмяна на облика",
"current-skin": "Текущ облик", "current-skin": "Текущ облик",
"skin-updated": "Обликът е променен", "skin-updated": "Обликът е променен",
"applied-success": "Обликът „%1“ беше успешно приложен", "applied-success": "Обликът „%1“ беше успешно приложен",

View File

@@ -1,9 +1,7 @@
{ {
"themes": "Теми",
"checking-for-installed": "Проверяване за инсталирани теми…", "checking-for-installed": "Проверяване за инсталирани теми…",
"homepage": "Начална страница", "homepage": "Начална страница",
"select-theme": "Изберете тема", "select-theme": "Изберете тема",
"revert-theme": "Отмяна на темата",
"current-theme": "Текуща тема", "current-theme": "Текуща тема",
"no-themes": "Няма намерени инсталирани теми", "no-themes": "Няма намерени инсталирани теми",
"revert-confirm": "Наистина ли искате да възстановите стандартната тема на NodeBB?", "revert-confirm": "Наистина ли искате да възстановите стандартната тема на NodeBB?",

View File

@@ -26,13 +26,13 @@
"updates": "Обновления", "updates": "Обновления",
"running-version": "Вие използвате <strong>NodeBB версия <span id=\"version\">%1</span></strong>.", "running-version": "Вие използвате <strong>NodeBB версия <span id=\"version\">%1</span></strong>.",
"keep-updated": "Стремете се винаги да използвате най-новата версия на NodeBB, за да се възползвате от последните подобрения на сигурността и поправки на проблеми.", "keep-updated": "Стремете се винаги да използвате най-новата версия на NodeBB, за да се възползвате от последните подобрения на сигурността и поправки на проблеми.",
"up-to-date": "Вие използвате <strong>най-новата версия</strong> <i class=\"fa fa-check\"></i>", "up-to-date": "<p>Вие използвате <strong>най-новата версия</strong> <i class=\"fa fa-check\"></i></p>",
"upgrade-available": "Има нова версия (%1). Ако имате възможност, <a href=\"https://docs.nodebb.org/configuring/upgrade/\" target=\"_blank\">обновете NodeBB</a>.", "upgrade-available": "<p>Има нова версия (версия %1). Ако имате възможност, <a href=\"https://docs.nodebb.org/configuring/upgrade/\" target=\"_blank\">обновете NodeBB</a>.</p>",
"prerelease-upgrade-available": "Това е остаряла предварителна версия на NodeBB. Има нова версия (%1). Ако имате възможност, <a href=\"https://docs.nodebb.org/configuring/upgrade/\" target=\"_blank\">обновете NodeBB</a>.", "prerelease-upgrade-available": "<p>Това е остаряла предварителна версия на NodeBB. Има нова версия (версия %1). Ако имате възможност, <a href=\"https://docs.nodebb.org/configuring/upgrade/\" target=\"_blank\">обновете NodeBB</a>.</p>",
"prerelease-warning": "Това е <strong>предварителна версия</strong> на NodeBB. Възможно е да има неочаквани неизправности. <i class=\"fa fa-exclamation-triangle\"></i>", "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": "<span>Форумът работи в режим за разработчици, така че може да бъде уязвим. Моля, свържете се със системния си администратор.</span>",
"latest-lookup-failed": "Не може да бъде извършена проверка за последната налична версия на NodeBB", "latest-lookup-failed": "<p>Не може да бъде извършена проверка за последната налична версия на NodeBB</p>",
"notices": "Забележки", "notices": "Забележки",
"restart-not-required": "Не се изисква рестартиране", "restart-not-required": "Не се изисква рестартиране",
@@ -48,7 +48,6 @@
"restart-disabled": "Възможностите за повторно изграждане и рестартиране на NodeBB са изключени, тъй като изглежда, че NodeBB не се изпълнява чрез подходящия демон.", "restart-disabled": "Възможностите за повторно изграждане и рестартиране на NodeBB са изключени, тъй като изглежда, че NodeBB не се изпълнява чрез подходящия демон.",
"maintenance-mode": "Режим на профилактика", "maintenance-mode": "Режим на профилактика",
"maintenance-mode-title": "Щракнете тук, за да зададете режим на профилактика на NodeBB", "maintenance-mode-title": "Щракнете тук, за да зададете режим на профилактика на NodeBB",
"dark-mode": "Тъмен режим",
"realtime-chart-updates": "Актуализации на таблиците в реално време", "realtime-chart-updates": "Актуализации на таблиците в реално време",
"active-users": "Дейни потребители", "active-users": "Дейни потребители",
@@ -84,15 +83,8 @@
"back-to-dashboard": "Назад към таблото", "back-to-dashboard": "Назад към таблото",
"details.no-users": "В избрания период не са се регистрирали нови потребители", "details.no-users": "В избрания период не са се регистрирали нови потребители",
"details.no-topics": "В избрания период не са публикувани нови теми", "details.no-topics": "В избрания период не са публикувани нови теми",
"details.no-searches": "В избрания период не са правени търсения", "details.no-searches": "Все още не са правени търсения",
"details.no-logins": "В избрания период не са отчетени вписвания", "details.no-logins": "В избрания период не са отчетени вписвания",
"details.logins-static": "NodeBB запазва данни за сесията в продължение на %1 дни, така че в следната таблица могат да се видят само последните активни сесии", "details.logins-static": "NodeBB запазва данни за сесията в продължение на %1 дни, така че в следната таблица могат да се видят само последните активни сесии",
"details.logins-login-time": "Време на вписване", "details.logins-login-time": "Време на вписване"
"start": "Начало",
"end": "Край",
"filter": "Филтриране",
"view-as-json": "Преглед като JSON",
"expand-analytics": "Разгъване на данните за анализ",
"clear-search-history": "Изчистване на историята на търсенията",
"clear-search-history-confirm": "Наистина ли искате да изчистите историята на търсенията?"
} }

View File

@@ -1,5 +1,4 @@
{ {
"logger": "Журнал",
"logger-settings": "Настройки на журнала", "logger-settings": "Настройки на журнала",
"description": "Ако поставите отметки тук, Вие ще виждате журнала в терминала си. Ако посочите пътечка, то вместо това журналите ще бъдат записвани във файл. Журналът чрез HTTP е удобен за получаване на статистика за това кога, кои и какви хора посещават форума Ви. В допълнение към следенето на заявките чрез HTTP, можем също да следим и събитията на socket.io. Журналът на Socket.io, в комбинация с redis-cli, може да Ви бъде много полезно, ако искате да разучите как работи NodeBB.", "description": "Ако поставите отметки тук, Вие ще виждате журнала в терминала си. Ако посочите пътечка, то вместо това журналите ще бъдат записвани във файл. Журналът чрез HTTP е удобен за получаване на статистика за това кога, кои и какви хора посещават форума Ви. В допълнение към следенето на заявките чрез HTTP, можем също да следим и събитията на socket.io. Журналът на Socket.io, в комбинация с redis-cli, може да Ви бъде много полезно, ако искате да разучите как работи NodeBB.",
"explanation": "За да включите или изключите журналите в реално време, просто поставете или премахнете отметките в настройките на журнала. Няма нужда от рестартиране.", "explanation": "За да включите или изключите журналите в реално време, просто поставете или премахнете отметките в настройките на журнала. Няма нужда от рестартиране.",

View File

@@ -1,5 +1,4 @@
{ {
"plugins": "Добавки",
"trending": "Популярни", "trending": "Популярни",
"installed": "Инсталирани", "installed": "Инсталирани",
"active": "Включени", "active": "Включени",

View File

@@ -1,12 +1,10 @@
{ {
"rewards": "Награди", "rewards": "Награди",
"add-reward": "Добавяне на награда",
"condition-if-users": "Ако потребителският(ата/ото)", "condition-if-users": "Ако потребителският(ата/ото)",
"condition-is": "Е:", "condition-is": "Е:",
"condition-then": "Тогава:", "condition-then": "Тогава:",
"max-claims": "Колко пъти може да бъде получавана наградата", "max-claims": "Колко пъти може да бъде получавана наградата",
"zero-infinite": "0 = безкраен брой пъти", "zero-infinite": "0 = безкраен брой пъти",
"select-reward": "Изберете награда",
"delete": "Изтриване", "delete": "Изтриване",
"enable": "Включване", "enable": "Включване",
"disable": "Изключване", "disable": "Изключване",

View File

@@ -1,17 +1,16 @@
{ {
"widgets": "Джаджи",
"available": "Налични джаджи", "available": "Налични джаджи",
"explanation": "Изберете джаджа от падащото меню, а след това я завлачете и пуснете в областта за джаджи в някой от шаблоните вляво.", "explanation": "Изберете джаджа от падащото меню, а след това я завлачете и пуснете в областта за джаджи в някой от шаблоните вляво.",
"none-installed": "Няма намерени джаджи! Включете добавката с основните джаджи в контролния панел за <a href=\"%1\">добавките</a>.", "none-installed": "Няма намерени джаджи! Включете добавката с основните джаджи в контролния панел за <a href=\"%1\">добавките</a>.",
"clone-from": "Клониране на джаджите от", "clone-from": "Клониране на джаджите от",
"containers.available": "Налични контейнери", "containers.available": "Налични контейнери",
"containers.explanation": "Завлачете и пуснете върху някоя джаджа", "containers.explanation": "Завлачете и пуснете върху някоя активна джаджа",
"containers.none": "Няма", "containers.none": "Няма",
"container.well": "Кладенец", "container.well": "Кладенец",
"container.jumbotron": "Джъмботрон", "container.jumbotron": "Джъмботрон",
"container.card": "Карта", "container.panel": "Панел",
"container.card-header": "Заглавна част на карта", "container.panel-header": "Заглавна част на панел",
"container.card-body": "Основна част на карта", "container.panel-body": "Основна част на панел",
"container.alert": "Предупреждение", "container.alert": "Предупреждение",
"alert.confirm-delete": "Наистина ли искате да изтриете джаджата?", "alert.confirm-delete": "Наистина ли искате да изтриете джаджата?",
@@ -27,9 +26,5 @@
"container.placeholder": "Завлачете и пуснете контейнер или въведете HTML тук.", "container.placeholder": "Завлачете и пуснете контейнер или въведете HTML тук.",
"show-to-groups": "Показване на групите", "show-to-groups": "Показване на групите",
"hide-from-groups": "Скриване от групите", "hide-from-groups": "Скриване от групите",
"start-date": "Начална дата", "hide-on-mobile": "Скриване на мобилни устройства"
"end-date": "Крайна дата",
"hide-on-mobile": "Скриване на мобилни устройства",
"hide-drafts": "Скриване на черновите",
"show-drafts": "Показване на черновите"
} }

View File

@@ -1,11 +1,10 @@
{ {
"manage-admins-and-mods": "Управление на администраторите и модераторите",
"administrators": "Администратори", "administrators": "Администратори",
"global-moderators": "Глобални модератори", "global-moderators": "Глобални модератори",
"moderators": "Модератори", "moderators": "Модератори",
"no-global-moderators": "Няма глобални модератори", "no-global-moderators": "Няма глобални модератори",
"no-sub-categories": "Няма подкатегории", "no-sub-categories": "Няма подкатегории",
"view-children": "Преглед на подкатегориите (%1)", "subcategories": "%1 подкатегории",
"no-moderators": "Няма модератори", "no-moderators": "Няма модератори",
"add-administrator": "Добавяне на администратор", "add-administrator": "Добавяне на администратор",
"add-global-moderator": "Добавяне на глобален модератор", "add-global-moderator": "Добавяне на глобален модератор",

View File

@@ -1,11 +1,7 @@
{ {
"manage-categories": "Управление на категориите",
"add-category": "Добавяне на категория",
"jump-to": "Прехвърляне към…",
"settings": "Настройки на категорията", "settings": "Настройки на категорията",
"edit-category": "Редактиране на категорията",
"privileges": "Правомощия", "privileges": "Правомощия",
"back-to-categories": "Назад към категориите",
"name": "Име на категорията", "name": "Име на категорията",
"description": "Описание на категорията", "description": "Описание на категорията",
"bg-color": "Цвят на фона", "bg-color": "Цвят на фона",
@@ -19,10 +15,8 @@
"post-queue": "Опашка за публикации", "post-queue": "Опашка за публикации",
"tag-whitelist": "Списък от разрешени етикети", "tag-whitelist": "Списък от разрешени етикети",
"upload-image": "Качване на изображение", "upload-image": "Качване на изображение",
"upload": "Качване",
"delete-image": "Премахване", "delete-image": "Премахване",
"category-image": "Изображение на категорията", "category-image": "Изображение на категорията",
"image-and-icon": "Изображение и иконка",
"parent-category": "Базова категория", "parent-category": "Базова категория",
"optional-parent-category": "(Незадължително) Базова категория", "optional-parent-category": "(Незадължително) Базова категория",
"top-level": "Най-горно ниво", "top-level": "Най-горно ниво",
@@ -37,7 +31,6 @@
"disable": "Изключване", "disable": "Изключване",
"edit": "Редактиране", "edit": "Редактиране",
"analytics": "Анализи", "analytics": "Анализи",
"view-category": "Преглед на категорията", "view-category": "Преглед на категорията",
"set-order": "Запазване на реда", "set-order": "Запазване на реда",
"set-order-help": "Задаването на позиция за категорията ще я премести на желаното място и ще промени местата на другите категории, ако е необходимо. Най-малкият възможен номер е 1, което ще постави категорията най-отгоре.", "set-order-help": "Задаването на позиция за категорията ще я премести на желаното място и ще промени местата на другите категории, ако е необходимо. Най-малкият възможен номер е 1, което ще постави категорията най-отгоре.",

View File

@@ -1,10 +1,4 @@
{ {
"manage-groups": "Управление на групите",
"add-group": "Добавяне на група",
"edit-group": "Редактиране на групата",
"back-to-groups": "Назад към групите",
"view-group": "Преглед на групата",
"icon-and-title": "Иконка и заглавие",
"name": "Име на групата", "name": "Име на групата",
"badge": "Емблема", "badge": "Емблема",
"properties": "Свойства", "properties": "Свойства",
@@ -16,7 +10,7 @@
"edit": "Редактиране", "edit": "Редактиране",
"delete": "Изтриване", "delete": "Изтриване",
"privileges": "Правомощия", "privileges": "Правомощия",
"members-csv": "Членове (CSV)", "download-csv": "CSV",
"search-placeholder": "Търсене", "search-placeholder": "Търсене",
"create": "Създаване на група", "create": "Създаване на група",
"description-placeholder": "Кратко описание на групата", "description-placeholder": "Кратко описание на групата",
@@ -45,5 +39,6 @@
"revert": "Отмяна", "revert": "Отмяна",
"edit.no-users-found": "Няма намерени потребители", "edit.no-users-found": "Няма намерени потребители",
"edit.confirm-remove-user": "Наистина ли искате да премахнете този потребител?" "edit.confirm-remove-user": "Наистина ли искате да премахнете този потребител?",
"edit.save-success": "Промените са запазени!"
} }

View File

@@ -1,6 +1,4 @@
{ {
"manage-privileges": "Управление на правомощията",
"discard-changes": "Отхвърляне на промените",
"global": "Глобални", "global": "Глобални",
"admin": "Администратор", "admin": "Администратор",
"group-privileges": "Правомощия за групите", "group-privileges": "Правомощия за групите",
@@ -8,7 +6,6 @@
"edit-privileges": "Редактиране на правомощията", "edit-privileges": "Редактиране на правомощията",
"select-clear-all": "Избиране/изчистване на всичко", "select-clear-all": "Избиране/изчистване на всичко",
"chat": "Разговор", "chat": "Разговор",
"chat-with-privileged": "Разговор с някого с по-високи правомощия",
"upload-images": "Качване на изображения", "upload-images": "Качване на изображения",
"upload-files": "Качване на файлове", "upload-files": "Качване на файлове",
"signature": "Подпис", "signature": "Подпис",
@@ -34,7 +31,7 @@
"edit-posts": "Редактиране на публикации", "edit-posts": "Редактиране на публикации",
"view-edit-history": "Преглед на историята на редакциите", "view-edit-history": "Преглед на историята на редакциите",
"delete-posts": "Изтриване на публикации", "delete-posts": "Изтриване на публикации",
"view-deleted": "Преглед на изтритите публикации", "view_deleted": "Преглед на изтритите публикации",
"upvote-posts": "Положително гласуване за публикации", "upvote-posts": "Положително гласуване за публикации",
"downvote-posts": "Отрицателно гласуване за публикации", "downvote-posts": "Отрицателно гласуване за публикации",
"delete-topics": "Изтриване на теми", "delete-topics": "Изтриване на теми",
@@ -52,6 +49,7 @@
"alert.confirm-moderate": "<strong>Наистина ли искате да дадете правомощието за модериране на тази потребителска група?</strong> Тази група е публична и всеки може свободно да се присъедини към нея.", "alert.confirm-moderate": "<strong>Наистина ли искате да дадете правомощието за модериране на тази потребителска група?</strong> Тази група е публична и всеки може свободно да се присъедини към нея.",
"alert.confirm-admins-mods": "<strong>Наистина ли искате да дадете правото „Администратори и модератори“ на този потребител/група?</strong> Потребителите с това право могат да променят правомощията на други групи, <em>включително да им дават правото на супер администратори</em>", "alert.confirm-admins-mods": "<strong>Наистина ли искате да дадете правото „Администратори и модератори“ на този потребител/група?</strong> Потребителите с това право могат да променят правомощията на други групи, <em>включително да им дават правото на супер администратори</em>",
"alert.confirm-save": "Моля, потвърдете желанието си да запазите тези правомощия", "alert.confirm-save": "Моля, потвърдете желанието си да запазите тези правомощия",
"alert.saved": "Промените по правомощията са запазени и приложени",
"alert.confirm-discard": "Наистина ли искате да отхвърлите промените по правомощията?", "alert.confirm-discard": "Наистина ли искате да отхвърлите промените по правомощията?",
"alert.discarded": "Промените по правомощията са отхвърлени", "alert.discarded": "Промените по правомощията са отхвърлени",
"alert.confirm-copyToAll": "Наистина ли искате да приложите този набор от <strong>%1</strong> към <strong>всички категории</strong>?", "alert.confirm-copyToAll": "Наистина ли искате да приложите този набор от <strong>%1</strong> към <strong>всички категории</strong>?",

View File

@@ -1,11 +1,9 @@
{ {
"manage-tags": "Управление на етикетите",
"none": "Форумът все още няма теми с етикети.", "none": "Форумът все още няма теми с етикети.",
"bg-color": "Цвят на фона", "bg-color": "Цвят на фона",
"text-color": "Цвят на текста", "text-color": "Цвят на текста",
"description": "Изберете етикетите чрез щракване или влачене. Използвайте <code>CTRL</code>, за да изберете няколко етикета.", "description": "Изберете етикетите чрез щракване или влачене. Използвайте <code>CTRL</code>, за да изберете няколко етикета.",
"create": "Създаване на етикет", "create": "Създаване на етикет",
"add-tag": "Добавяне на етикет",
"modify": "Редактиране на етикети", "modify": "Редактиране на етикети",
"rename": "Преименуване на етикети", "rename": "Преименуване на етикети",
"delete": "Изтриване на избраните етикети", "delete": "Изтриване на избраните етикети",

View File

@@ -1,5 +1,4 @@
{ {
"manage-uploads": "Управление на качванията",
"upload-file": "Качване на файл", "upload-file": "Качване на файл",
"filename": "Име на файла", "filename": "Име на файла",
"usage": "Използване в публикации", "usage": "Използване в публикации",

View File

@@ -1,29 +1,22 @@
{ {
"manage-users": "Управление на потребителите",
"users": "Потребители", "users": "Потребители",
"edit": "Действия", "edit": "Действия",
"make-admin": "Даване на администраторски права", "make-admin": "Даване на администраторски права",
"remove-admin": "Отнемане на администраторски права", "remove-admin": "Отнемане на администраторски права",
"change-email": "Промяна на е-пощата",
"new-email": "Нова е-поща",
"validate-email": "Проверка на е-пощата", "validate-email": "Проверка на е-пощата",
"send-validation-email": "Изпращане на е-писмо за потвърждение", "send-validation-email": "Изпращане на е-писмо за потвърждение",
"change-password": "Промяна на паролата",
"password-reset-email": "Изпращане на е-писмо за възстановяване на паролата", "password-reset-email": "Изпращане на е-писмо за възстановяване на паролата",
"force-password-reset": "Принудително подновяване на паролата и отписване на потребителя", "force-password-reset": "Принудително подновяване на паролата и отписване на потребителя",
"ban": "Блокиране", "ban": "Блокиране на потребителя/ите",
"ban-users": "Блокиране на потребителя/ите",
"temp-ban": "Блокиране на потребителя/ите временно", "temp-ban": "Блокиране на потребителя/ите временно",
"unban": "Деблокиране на потребителя/ите", "unban": "Деблокиране на потребителя/ите",
"reset-lockout": "Нулиране на заключването", "reset-lockout": "Нулиране на заключването",
"reset-flags": "Анулиране на докладите", "reset-flags": "Анулиране на докладите",
"delete": "Изтриване", "delete": "Изтриване на <strong>потребителя/ите</strong>",
"delete-users": "Изтриване на <strong>потребителя/ите</strong>",
"delete-content": "Изтриване на <strong>съдържанието</strong> на потребителя/ите", "delete-content": "Изтриване на <strong>съдържанието</strong> на потребителя/ите",
"purge": "Изтриване на <strong>потребителя/ите</strong> и <strong>съдържанието</strong>", "purge": "Изтриване на <strong>потребителя/ите</strong> и <strong>съдържанието</strong>",
"download-csv": "Сваляне във формат „CSV“", "download-csv": "Сваляне във формат „CSV“",
"manage-groups": "Управление на групите", "manage-groups": "Управление на групите",
"set-reputation": "Задаване на репутация",
"add-group": "Добавяне на група", "add-group": "Добавяне на група",
"create": "Създаване на потребител", "create": "Създаване на потребител",
"invite": "Поканване по е-поща", "invite": "Поканване по е-поща",
@@ -56,10 +49,6 @@
"users.username": "потребителско име", "users.username": "потребителско име",
"users.email": "е-поща", "users.email": "е-поща",
"users.no-email": "(няма е-поща)", "users.no-email": "(няма е-поща)",
"users.validated": "Потвърдена",
"users.not-validated": "Непотвърдена",
"users.validation-pending": "Очаква потвърждение",
"users.validation-expired": "Изтекла давност на потвърждението",
"users.ip": "IP адрес", "users.ip": "IP адрес",
"users.postcount": "брой публикации", "users.postcount": "брой публикации",
"users.reputation": "репутация", "users.reputation": "репутация",
@@ -86,7 +75,6 @@
"alerts.button-ban-x": "Блокиране на %1 потребител(и)", "alerts.button-ban-x": "Блокиране на %1 потребител(и)",
"alerts.unban-success": "Потребителят/ите е/са деблокиран(и)!", "alerts.unban-success": "Потребителят/ите е/са деблокиран(и)!",
"alerts.lockout-reset-success": "Заключването/ията е/са нулирано/и!", "alerts.lockout-reset-success": "Заключването/ията е/са нулирано/и!",
"alerts.password-change-success": "Паролата/ите е/са променени!",
"alerts.flag-reset-success": "Докладът/ите е/са анулиран(и)!", "alerts.flag-reset-success": "Докладът/ите е/са анулиран(и)!",
"alerts.no-remove-yourself-admin": "Не можете да отнемете собствените си права на администратор!", "alerts.no-remove-yourself-admin": "Не можете да отнемете собствените си права на администратор!",
"alerts.make-admin-success": "Потребителят вече ще бъде администратор.", "alerts.make-admin-success": "Потребителят вече ще бъде администратор.",
@@ -112,7 +100,6 @@
"alerts.create": "Създаване на потребител", "alerts.create": "Създаване на потребител",
"alerts.button-create": "Създаване", "alerts.button-create": "Създаване",
"alerts.button-cancel": "Отказ", "alerts.button-cancel": "Отказ",
"alerts.button-change": "Промяна",
"alerts.error-passwords-different": "Паролите са различни!", "alerts.error-passwords-different": "Паролите са различни!",
"alerts.error-x": "<strong>Грешка</strong><p>%1</p>", "alerts.error-x": "<strong>Грешка</strong><p>%1</p>",
"alerts.create-success": "Потребителят е създаден!", "alerts.create-success": "Потребителят е създаден!",
@@ -120,10 +107,6 @@
"alerts.prompt-email": "Е-пощи: ", "alerts.prompt-email": "Е-пощи: ",
"alerts.email-sent-to": "Беше изпратено е-писмо за потвърждение до %1", "alerts.email-sent-to": "Беше изпратено е-писмо за потвърждение до %1",
"alerts.x-users-found": "Намерени потребители: %1 (%2 секунди)", "alerts.x-users-found": "Намерени потребители: %1 (%2 секунди)",
"alerts.select-a-single-user-to-change-email": "Изберете един потребител, чиято е-поща да промените",
"export-users-started": "Изнасяне на потребителите във формат „csv“… Това може да отнеме известно време. Ще получите известие, когато е готово.", "export-users-started": "Изнасяне на потребителите във формат „csv“… Това може да отнеме известно време. Ще получите известие, когато е готово.",
"export-users-completed": "Потребителите са изнесени във формат „csv“, щракнете за сваляне.", "export-users-completed": "Потребителите са изнесени във формат „csv“, щракнете за сваляне."
"email": "Е-поща",
"password": "Парола",
"manage": "Управление"
} }

View File

@@ -14,7 +14,6 @@
"manage/users": "Потребители", "manage/users": "Потребители",
"manage/admins-mods": "Администратори и модератори", "manage/admins-mods": "Администратори и модератори",
"manage/registration": "Регистрационна опашка", "manage/registration": "Регистрационна опашка",
"manage/flagged-content": "Докладвано съдържание",
"manage/post-queue": "Опашка за публикации", "manage/post-queue": "Опашка за публикации",
"manage/groups": "Групи", "manage/groups": "Групи",
"manage/ip-blacklist": "Черен списък за IP адреси", "manage/ip-blacklist": "Черен списък за IP адреси",
@@ -69,13 +68,11 @@
"advanced/logs": "Журнали", "advanced/logs": "Журнали",
"advanced/errors": "Грешки", "advanced/errors": "Грешки",
"advanced/cache": "Кеш", "advanced/cache": "Кеш",
"development/logger": "Журнал", "development/logger": "Система на журнала",
"development/info": "Информация", "development/info": "Информация",
"rebuild-and-restart-forum": "Повторно изграждане и рестартиране на форума", "rebuild-and-restart-forum": "Повторно изграждане и рестартиране на форума",
"rebuild-and-restart": "Повторно изграждане и рестартиране",
"restart-forum": "Рестартиране на форума", "restart-forum": "Рестартиране на форума",
"restart": "Рестартиране",
"logout": "Изход", "logout": "Изход",
"view-forum": "Преглед на форума", "view-forum": "Преглед на форума",

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