Compare commits

..

120 Commits

Author SHA1 Message Date
Julian Lam
cc481f1234 fix: tests 2022-04-08 14:12:42 -04:00
Julian Lam
714c782e00 fix: remove secret as an installer question 2022-04-08 11:07:13 -04:00
Julian Lam
593be8cf8b chore: temporarily enable tests on webpack5 2022-04-08 11:02:45 -04:00
Julian Lam
508228c9e5 feat: remove \'secret\' from \'config.json\', in favour of having it stored in the database 2022-04-08 11:02:33 -04:00
Julian Lam
73d9d9ad03 fix: move handler for nconf sessionKey into defaults() 2022-04-08 10:21:05 -04:00
Julian Lam
829331c671 fix: typo in hook name 2022-03-30 16:59:04 -04:00
Julian Lam
0746689eec fix: #10443, regression where sorted-list items did not render into the DOM in the predicted order [breaking] 2022-03-30 16:46:08 -04:00
Julian Lam
833fcadf43 Merge branch 'master' into webpack5 2022-03-23 16:37:21 -04:00
Barış Soner Uşaklı
69772827fd Merge branch 'master' into webpack5 2022-03-21 20:34:55 -04:00
Barış Soner Uşaklı
374e7099f6 Merge branch 'master' into webpack5 2022-03-18 23:58:53 -04:00
Julian Lam
c10561a55b Merge remote-tracking branch 'origin/master' into webpack5 2022-03-18 15:04:32 -04:00
Julian Lam
9a79fe930e Merge branch 'master' into webpack5 2022-03-17 13:40:08 -04:00
Julian Lam
e9b2fabf83 fix: column counts for other privileges 2022-03-17 13:36:50 -04:00
Barış Soner Uşaklı
3dc2acd739 refactor: generateTopicClass 2022-03-16 17:25:34 -04:00
Barış Soner Uşaklı
2b7684d839 Merge branch 'master' into webpack5 2022-03-16 17:25:20 -04:00
Barış Soner Uşaklı
73898b7824 Merge branch 'master' into webpack5 2022-03-16 15:34:03 -04:00
Julian Lam
8a4614f147 Merge remote-tracking branch 'origin/master' into webpack5 2022-03-15 15:16:27 -04:00
Julian Lam
bf2941aa2c Merge branch 'master' into webpack5 2022-03-15 13:57:25 -04:00
Julian Lam
76f877a886 Merge remote-tracking branch 'origin/master' into webpack5 2022-03-15 10:19:54 -04:00
Barış Soner Uşaklı
fbae265458 refactor: closes #10301 2022-03-11 15:32:37 -05:00
Barış Soner Uşaklı
ca7c924dde test: use document.addEventListener 2022-03-11 14:36:56 -05:00
Barış Soner Uşaklı
6b3acfd798 change istaller to use build/public 2022-03-11 14:27:34 -05:00
Barış Soner Uşaklı
b75da2cc4e test: jquery ready 2022-03-11 14:09:47 -05:00
Barış Soner Uşaklı
bfe920eb45 Merge branch 'master' into webpack5 2022-03-11 14:09:33 -05:00
Barış Soner Uşaklı
d55ae3bfd5 refactor: require server side utils 2022-03-10 19:57:11 -05:00
Barış Soner Uşaklı
33320b46b9 feat: allow app.require('bootbox'/'benchpressjs') 2022-03-10 19:38:41 -05:00
Barış Soner Uşaklı
8b30d47028 Merge branch 'webpack5' of https://github.com/NodeBB/NodeBB into webpack5 2022-03-10 18:58:41 -05:00
Julian Lam
767b2688b6 refactor: privileges system to use a Map in the backend instead of separate objects for keys and labels (#10378)
* refactor: privileges system to use a Map in the backend instead of separate objects for keys and labels

- Existing hooks are preserved (to be deprecated at a later date, possibly)
- New init hooks are called on NodeBB start, and provide a one-stop shop to add new privileges, instead of having to add to four different hooks

* docs: fix typo in comment

* test: spec changes
2022-03-10 17:08:03 -05:00
Julian Lam
ab62569547 refactor: privileges system to use a Map in the backend instead of separate objects for keys and labels (#10378)
* refactor: privileges system to use a Map in the backend instead of separate objects for keys and labels

- Existing hooks are preserved (to be deprecated at a later date, possibly)
- New init hooks are called on NodeBB start, and provide a one-stop shop to add new privileges, instead of having to add to four different hooks

* docs: fix typo in comment

* test: spec changes
2022-03-10 16:33:56 -05:00
Barış Soner Uşaklı
add1e4e5fa Merge branch 'master' into webpack5 2022-03-10 12:15:05 -05:00
Barış Soner Uşaklı
748f352a77 refactor: cleanup, require timeago locale earlier
remove translator.prepareDOM, it is in header.tpl html tag
2022-03-09 22:58:12 -05:00
Barış Soner Uşaklı
7c04a74d38 fix: get rid of extra timeago files 2022-03-09 22:04:19 -05:00
Barış Soner Uşaklı
644252c227 Merge branch 'master' into webpack5 2022-03-09 15:05:28 -05:00
Barış Soner Uşaklı
689f0e4b58 fix: optional params 2022-03-08 14:44:23 -05:00
Barış Soner Uşaklı
8a31abadd4 feat: add translateKeys 2022-03-08 14:39:01 -05:00
Barış Soner Uşaklı
06aa3adb77 Merge branch 'master' into webpack5 2022-03-08 14:38:53 -05:00
Barış Soner Uşaklı
2e2728bdaa Merge branch 'master' into webpack5 2022-03-07 18:44:58 -05:00
Barış Soner Uşaklı
43ab5cd7fe Merge branch 'master' into webpack5 2022-03-07 18:21:44 -05:00
Barış Soner Uşaklı
9d85863daa Merge branch 'master' into webpack5 2022-03-04 13:30:57 -05:00
Barış Soner Uşaklı
9570d39b4c Merge branch 'master' into webpack5 2022-03-03 18:16:31 -05:00
Barış Soner Uşaklı
e6d3233bff Merge branch 'master' into webpack5 2022-03-03 12:50:49 -05:00
Barış Soner Uşaklı
4dbe116715 Merge branch 'master' into webpack5 2022-03-02 18:31:57 -05:00
Barış Soner Uşaklı
643efbee12 Merge branch 'master' into webpack5 2022-03-02 17:51:23 -05:00
Julian Lam
8d7d048100 chore: bump prerelease version 2022-03-02 16:53:29 -05:00
Barış Soner Uşaklı
68a6e6b8bf Merge branch 'master' into webpack5 2022-03-02 15:28:50 -05:00
Julian Lam
594c6f3ec3 Merge branch 'master' into webpack5 2022-03-01 14:30:56 -05:00
Barış Soner Uşaklı
032fa84016 Merge branch 'master' into webpack5 2022-03-01 13:38:50 -05:00
Barış Soner Uşaklı
f2efd56e23 Merge branch 'master' into webpack5 2022-02-28 20:38:03 -05:00
Barış Soner Uşaklı
1fc79792d9 lint: use relative path for now 2022-02-28 15:43:43 -05:00
Barış Soner Uşaklı
072d339410 refactor: cleanup
remove test page, remove dupe functions in utils.common
2022-02-28 15:38:46 -05:00
Barış Soner Uşaklı
bdb1f8dbbb Merge branch 'master' into webpack5 2022-02-28 12:11:33 -05:00
Barış Soner Uşaklı
30e5953507 Merge branch 'master' into webpack5 2022-02-25 18:42:57 -05:00
Barış Soner Uşaklı
f89babdca9 test: add debug for random failing test 2022-02-25 17:59:47 -05:00
Barış Soner Uşaklı
73762df143 Merge branch 'master' into webpack5 2022-02-25 14:43:18 -05:00
Barış Soner Uşaklı
691811de1d refactor: fix comments 2022-02-25 12:21:33 -05:00
Barış Soner Uşaklı
6cf1a721a7 Merge branch 'webpack5' of https://github.com/NodeBB/NodeBB into webpack5 2022-02-25 12:19:59 -05:00
Barış Soner Uşaklı
62d658d621 lint: ignore 2022-02-25 12:19:52 -05:00
Julian Lam
adf63f50e1 fix: more specific selector 2022-02-25 12:08:45 -05:00
Barış Soner Uşaklı
322bd599f9 test: fix filename 2022-02-25 12:04:44 -05:00
Barış Soner Uşaklı
9d33193cb7 refactor: use build/public for webpack 2022-02-25 11:50:43 -05:00
Julian Lam
7b1eba058f feat: deprecate /plugins shorthand route, closes #10343 2022-02-25 10:57:34 -05:00
Barış Soner Uşaklı
57a64b7809 refactor: add server side helpers.js 2022-02-25 09:59:33 -05:00
Barış Soner Uşaklı
eb8d07b3a6 Merge branch 'master' into webpack5 2022-02-25 09:57:48 -05:00
Barış Soner Uşaklı
36f8831315 refactor: disable cache on templates
loadTemplate is called once by benchpress and the result is cache internally
2022-02-23 18:58:34 -05:00
Julian Lam
522663d599 chore: tagging v2.0.0-beta.0 pre-release version 💥 :shipit: 🎉 🚀 2022-02-23 15:52:51 -05:00
Julian Lam
a61bbc8427 fix(deps): use webpack5 branch of 2factor plugin 2022-02-23 15:52:24 -05:00
Barış Soner Uşaklı
315566db6f refactor: get rid of template500Function 2022-02-22 19:08:12 -05:00
Barış Soner Uşaklı
1523d0cc50 refactor: move hooks to top 2022-02-22 19:02:55 -05:00
Barış Soner Uşaklı
e190ff875a feat: add chunkFile name with contenthash 2022-02-22 16:37:40 -05:00
Barış Soner Uşaklı
54091c818c Merge branch 'master' into webpack5 2022-02-22 16:12:43 -05:00
Barış Soner Uşaklı
57468fb690 Merge branch 'master' into webpack5 2022-02-21 20:13:30 -05:00
Barış Soner Uşaklı
b9cc5c0905 feat: webpack webinstaller 2022-02-21 19:04:19 -05:00
Barış Soner Uşaklı
66651d42fb Merge branch 'master' into webpack5 2022-02-21 18:22:04 -05:00
Barış Soner Uşaklı
48ab453a39 Merge branch 'master' into webpack5 2022-02-20 14:09:15 -05:00
Barış Soner Uşaklı
6c29b2a71f chore: use webpack branch 2022-02-20 11:48:13 -05:00
Barış Soner Uşaklı
4be5a723b5 chore: use github branch 2022-02-19 19:03:49 -05:00
Barış Soner Uşaklı
c14f72bbad refactor: go back to using app.require 2022-02-19 19:01:06 -05:00
Barış Soner Uşaklı
799acf83c4 refactor: rename function to app.require 2022-02-19 18:59:28 -05:00
Barış Soner Uşaklı
1dceb2b223 lint: fix 2022-02-19 18:13:45 -05:00
Barış Soner Uşaklı
a4c5dcce6c test: lint and test fixes 2022-02-19 18:07:08 -05:00
Barış Soner Uşaklı
eafd187941 Merge branch 'master' into webpack5 2022-02-19 12:58:18 -05:00
Barış Soner Uşaklı
0faae7343f refactor: cropper alias 2022-02-19 12:06:30 -05:00
Barış Soner Uşaklı
a7fc159353 fix: ace 2022-02-19 11:35:47 -05:00
Barış Soner Uşaklı
3b8f35a51d get rid of conditional import in app.js 2022-02-18 18:57:39 -05:00
Barış Soner Uşaklı
ba792b2920 Merge branch 'master' into webpack5 2022-02-18 17:25:37 -05:00
Barış Soner Uşaklı
6e6515fc47 Merge branch 'master' into webpack5 2022-02-18 17:18:20 -05:00
Barış Soner Uşaklı
29aaa9ee2d refactor: more cleanup
use everything from build/public folder
2022-02-18 17:18:13 -05:00
Barış Soner Uşaklı
45d5b5a586 refactor: dont need dist 2022-02-18 14:13:49 -05:00
Barış Soner Uşaklı
6bfc53fc6f test: composer 2022-02-17 22:24:05 -05:00
Barış Soner Uşaklı
cb34728421 test: maybe fix build test 2022-02-17 22:10:33 -05:00
Julian Lam
66c45996e1 fix: point to proper ACP bundle 2022-02-17 21:55:29 -05:00
Julian Lam
2e55ddc07c fix: remove unnecessary line break 2022-02-17 21:55:18 -05:00
Julian Lam
fec28a7e9e fix: restore use of assets/nodebb.min.js, at least for now 2022-02-17 21:26:51 -05:00
Barış Soner Uşaklı
1803c29ec9 test: fix one more test
remove 500-embed.tpl
2022-02-17 20:36:49 -05:00
Julian Lam
9dccd439f9 fix: move webpack modules necessary for build, into dependencies 2022-02-17 17:00:11 -05:00
Barış Soner Uşaklı
a9df137965 test: disable testing route 2022-02-17 16:48:50 -05:00
Barış Soner Uşaklı
d60cb6c6e5 refactor: add aliases 2022-02-17 16:35:42 -05:00
Barış Soner Uşaklı
862381008a test: move and disable bundle test 2022-02-17 16:12:04 -05:00
Barış Soner Uşaklı
d010a61854 test: fix db require blowing up tests 2022-02-17 15:35:08 -05:00
Barış Soner Uşaklı
fe610f0daf test: log stack 2022-02-17 15:13:14 -05:00
Barış Soner Uşaklı
70f35e56ec Merge branch 'master' into webpack5 2022-02-17 15:12:00 -05:00
Barış Soner Uşaklı
13e3b9440b Merge branch 'master' into webpack5 2022-02-17 14:47:48 -05:00
Barış Soner Uşaklı
ab673e362b Merge branch 'master' into webpack5 2022-02-17 14:16:21 -05:00
Barış Soner Uşaklı
b5b6e56f3c Merge branch 'master' into webpack5 2022-02-17 14:10:37 -05:00
Barış Soner Uşaklı
00aadc047f test: require correct utils 2022-02-17 13:14:30 -05:00
Barış Soner Uşaklı
306a8dd2cf test: require correct utils module 2022-02-17 13:10:28 -05:00
Barış Soner Uşaklı
4b35f654a3 test: more test fixes 2022-02-17 13:03:46 -05:00
Barış Soner Uşaklı
d3969e5656 test: fix require path 2022-02-17 12:33:12 -05:00
Barış Soner Uşaklı
1a0b82f434 test: fixe util tests 2022-02-17 12:27:18 -05:00
Barış Soner Uşaklı
3c129d7e8f Merge branch 'master' into webpack5 2022-02-17 11:23:42 -05:00
Barış Soner Uşaklı
2ea55c4311 Merge branch 'master' into webpack5 2022-02-15 20:54:08 -05:00
Barış Soner Uşaklı
1da1f21c79 fix: bundle serialize/deserizeli so plugins dont break 2022-02-15 13:24:28 -05:00
Barış Soner Uşaklı
3d4adaced4 fix: acp settings pages, fix sortable on manage categories
embedded require in html not allowed
2022-02-15 12:58:30 -05:00
Barış Soner Uşaklı
68d88345e7 feat: reenable admin 2022-02-15 12:41:11 -05:00
Barış Soner Uşaklı
cc3298e688 refactor: remove commented old code 2022-02-15 10:47:19 -05:00
Barış Soner Uşaklı
668add8cab Merge branch 'master' into webpack5 2022-02-15 10:43:32 -05:00
Barış Soner Uşaklı
fd97f9ffcc fix: fix taskbar warning
add app.importScript
copy public/src/modules to build folder
2022-02-15 10:43:22 -05:00
Barış Soner Uşaklı
36f172c1ac fix: gruntfile fixes 2022-02-14 22:04:05 -05:00
Barış Soner Uşaklı
163936e2fd Merge branch 'master' into webpack5 2022-02-14 21:50:39 -05:00
Barış Soner Uşaklı
a1a1e8da18 feat: webpack 5 part 1 2022-02-14 21:35:33 -05:00
2386 changed files with 47066 additions and 45120 deletions

View File

@@ -18,3 +18,12 @@ logs/
.eslintrc .eslintrc
test/files test/files
*.min.js *.min.js
/public/src/app.js
/public/src/client.js
/public/src/admin/admin.js
/public/src/modules/translator.common.js
/public/src/modules/pictureCropper.js
/public/src/modules/ace-editor.js
/public/src/client/account/header.js
/public/src/client/test.js

32
.github/ISSUE_TEMPLATE.md vendored Normal file
View File

@@ -0,0 +1,32 @@
<!--
== Github Issues are for bug reports and feature requests only ==
== Please visit https://community.nodebb.org for other support ==
== Found a security exploit? Please email us at security@nodebb.org instead for immediate attention ==
== → DO NOT SUBMIT VULNERABILITIES TO THE PUBLIC BUG TRACKER ==
-->
<!-- ++ Please include the following information when submitting a bug report ++ -->
- **NodeBB version:**
- **NodeBB git hash:**
- **NodeJS version:**
<!-- (to find your git hash, execute `git rev-parse HEAD` from the main NodeBB directory) -->
- **Installed NodeBB Plugins:**
<!-- (to find installed plugins run ./nodebb plugins) -->
- **Database type:** mongo, redis, or postgres
- **Database version:**
<!-- `mongod --version`, `redis-server --version`, or `postgres --version` -->
- **Exact steps to cause this issue:**
<!--
1. First I did this...
2. Then, I clicked on this item...
A quick note: MP4 and MOV formatted video files are now allowed to be uploaded to GH.
Please upload if reproduction steps are hard to describe or reproduce reliably.
-->
- **What you expected:**
<!-- e.g. I expected *abc* to *xyz* -->
- **What happened instead:**
<!-- e.g. Instead, I got *zyx* and NodeBB set fire to my house -->
<!-- Thank you! -->

View File

@@ -1,81 +0,0 @@
name: Bug Report
description: File a bug report
labels: ["bug"]
body:
- type: markdown
attributes:
value: |
Github Issues are for bug reports and feature requests only
Please visit https://community.nodebb.org for other support
Found a security exploit? Please email us at security@nodebb.org instead for immediate attention
### → DO NOT SUBMIT VULNERABILITIES TO THE PUBLIC BUG TRACKER ←
- type: input
attributes:
label: NodeBB version
placeholder: e.g. v2.2.0
- type: input
attributes:
label: NodeBB git hash
description: to find your git hash, execute `git rev-parse HEAD` from the main NodeBB directory
placeholder: e.g. 783250ee6f8c51cdc243ce3b8d9f1a080517247e
- type: input
attributes:
label: NodeJS version
placeholder: e.g. v16.15.1
- type: textarea
attributes:
label: Installed NodeBB plugins
description: to find installed plugins run `./nodebb plugins`
placeholder: |
e.g.
* nodebb-plugin-2factor@5.0.1 (installed, disabled)
* nodebb-plugin-composer-default@8.0.0 (installed, enabled)
* nodebb-plugin-dbsearch@5.1.5 (installed, disabled)
* nodebb-plugin-emoji@4.0.4 (installed, enabled)
* nodebb-plugin-emoji-android@3.0.0 (installed, enabled)
* nodebb-plugin-markdown@10.0.0 (installed, enabled)
* nodebb-plugin-mentions@3.0.11 (installed, enabled)
* nodebb-plugin-spam-be-gone@1.0.0 (installed, disabled)
* nodebb-rewards-essentials@0.2.1 (installed, enabled)
* nodebb-theme-lavender@6.0.0 (installed, disabled)
* nodebb-theme-persona@12.0.11 (installed, enabled)
* nodebb-theme-slick@2.0.2 (installed, disabled)
* nodebb-theme-vanilla@12.1.18 (installed, disabled)
* nodebb-widget-essentials@6.0.0 (installed, enabled)
- type: dropdown
attributes:
label: Database type
multiple: true
options:
- MongoDB
- Redis
- PostgreSQL
- type: input
attributes:
label: Database version
description: "`mongod --version`, `redis-server --version`, or `postgres --version`"
placeholder: e.g. v5.0.9
- type: textarea
attributes:
label: Exact steps to cause this issue
placeholder: |
1. First I did this...
2. Then, I clicked on this item...
A quick note: MP4 and MOV formatted video files are now allowed to be uploaded to GH.
Please upload if reproduction steps are hard to describe or reproduce reliably.
- type: textarea
attributes:
label: What you expected
placeholder: e.g. I expected *abc* to *xyz*
- type: textarea
attributes:
label: What happened instead
placeholder: e.g. Instead, I got *zyx* and NodeBB set fire to my house
- type: textarea
attributes:
label: Anything else?
description: Any additional context about the issue you're encountering
- type: markdown
attributes:
value: "**Thank you!**"

View File

@@ -1,5 +0,0 @@
blank_issues_enabled: true
contact_links:
- name: Community Forum
url: https://community.nodebb.org
about: Github Issues are for bug reports and feature requests only, please use community forum for other support

View File

@@ -1,24 +0,0 @@
name: Feature Request
description: Suggest a new feature
labels: ["enhancement"]
body:
- type: markdown
attributes:
value: |
Github Issues are for bug reports and feature requests only
Please visit https://community.nodebb.org for other support
Found a security exploit? Please email us at security@nodebb.org instead for immediate attention
### → DO NOT SUBMIT VULNERABILITIES TO THE PUBLIC BUG TRACKER ←
- type: textarea
attributes:
label: Description
validations:
required: true
- type: input
attributes:
label: Community forum reference
description: If this feature was already discussed on the Community Forum link it here
placeholder: https://community.nodebb.org/topic/0/example-feature-request
- type: markdown
attributes:
value: "**Thank you!**"

6
.github/dependabot.yml vendored Normal file
View File

@@ -0,0 +1,6 @@
version: 2
updates:
- package-ecosystem: npm
directory: "/install"
schedule:
interval: daily

View File

@@ -11,9 +11,6 @@ on:
workflow_dispatch: workflow_dispatch:
# 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:
contents: read
jobs: jobs:
release: release:
runs-on: ubuntu-latest runs-on: ubuntu-latest
@@ -24,20 +21,20 @@ jobs:
fetch-depth: 0 fetch-depth: 0
- name: Set up QEMU - name: Set up QEMU
uses: docker/setup-qemu-action@v2 uses: docker/setup-qemu-action@v1
- name: Set up Docker Buildx - name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2 uses: docker/setup-buildx-action@v1
- name: Login to Docker Hub - name: Login to Docker Hub
uses: docker/login-action@v2 uses: docker/login-action@v1
with: with:
username: ${{ secrets.DOCKERHUB_USERNAME }} username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }} password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Docker meta - name: Docker meta
id: meta id: meta
uses: docker/metadata-action@v4 uses: docker/metadata-action@v3
with: with:
images: nodebb/docker images: nodebb/docker
tags: | tags: |
@@ -46,7 +43,7 @@ jobs:
type=raw,value=latest type=raw,value=latest
- name: Build and push Docker images - name: Build and push Docker images
uses: docker/build-push-action@v4 uses: docker/build-push-action@v2
with: with:
context: . context: .
file: ./Dockerfile file: ./Dockerfile

View File

@@ -5,43 +5,37 @@ on:
branches: branches:
- master - master
- develop - develop
- bootstrap5 - webpack5
pull_request: pull_request:
branches: branches:
- master - master
- develop - develop
- bootstrap5 - webpack5
defaults: defaults:
run: run:
shell: bash shell: bash
permissions:
contents: read
jobs: jobs:
test: test:
permissions:
checks: write # for coverallsapp/github-action to create new checks
contents: read # for actions/checkout to fetch code
name: Lint and test name: Lint and test
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
os: [ubuntu-latest] os: [ubuntu-latest]
node: [16, 18] node: [12, 14, 16]
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: 16 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: 16 node: 14
database: mongo-dev database: mongo-dev
lint: true lint: true
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
@@ -50,7 +44,7 @@ jobs:
services: services:
postgres: postgres:
image: 'postgres:15-alpine' image: 'postgres:10-alpine'
env: env:
POSTGRES_USER: postgres POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres POSTGRES_PASSWORD: postgres
@@ -65,7 +59,7 @@ jobs:
- 5432:5432 - 5432:5432
redis: redis:
image: 'redis:2.8.23' image: 'redis:2.8.9'
# 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"
@@ -77,7 +71,7 @@ jobs:
- 6379:6379 - 6379:6379
mongo: mongo:
image: 'mongo:3.7' image: 'mongo:3.6'
ports: ports:
# Maps port 27017 on service container to the host # Maps port 27017 on service container to the host
- 27017:27017 - 27017:27017
@@ -103,7 +97,6 @@ jobs:
SETUP: >- SETUP: >-
{ {
"url": "http://127.0.0.1:4567", "url": "http://127.0.0.1:4567",
"secret": "abcdef",
"admin:username": "admin", "admin:username": "admin",
"admin:email": "test@example.org", "admin:email": "test@example.org",
"admin:password": "hAN3Eg8W", "admin:password": "hAN3Eg8W",
@@ -131,7 +124,6 @@ jobs:
SETUP: >- SETUP: >-
{ {
"url": "http://127.0.0.1:4567", "url": "http://127.0.0.1:4567",
"secret": "abcdef",
"admin:username": "admin", "admin:username": "admin",
"admin:email": "test@example.org", "admin:email": "test@example.org",
"admin:password": "hAN3Eg8W", "admin:password": "hAN3Eg8W",
@@ -162,7 +154,6 @@ jobs:
SETUP: >- SETUP: >-
{ {
"url": "http://127.0.0.1:4567/forum", "url": "http://127.0.0.1:4567/forum",
"secret": "abcdef",
"admin:username": "admin", "admin:username": "admin",
"admin:email": "test@example.org", "admin:email": "test@example.org",
"admin:password": "hAN3Eg8W", "admin:password": "hAN3Eg8W",
@@ -194,7 +185,7 @@ jobs:
run: npm run coverage run: npm run coverage
- name: Test coverage - name: Test coverage
uses: coverallsapp/github-action@v2.0.0 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 }}
@@ -202,13 +193,11 @@ jobs:
parallel: true parallel: true
finish: finish:
permissions:
checks: write # for coverallsapp/github-action to create new checks
needs: test needs: test
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Coveralls Finished - name: Coveralls Finished
uses: coverallsapp/github-action@v2.0.0 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

7222
.tx/config

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -20,7 +20,6 @@ const prestart = require('./src/prestart');
prestart.loadConfig(configFile); prestart.loadConfig(configFile);
const db = require('./src/database'); const db = require('./src/database');
const plugins = require('./src/plugins');
module.exports = function (grunt) { module.exports = function (grunt) {
const args = []; const args = [];
@@ -41,41 +40,55 @@ module.exports = function (grunt) {
grunt.registerTask('init', async function () { grunt.registerTask('init', async function () {
const done = this.async(); const done = this.async();
let pluginList = []; let plugins = [];
if (!process.argv.includes('--core')) { if (!process.argv.includes('--core')) {
await db.init(); await db.init();
pluginList = await plugins.getActive(); plugins = await db.getSortedSetRange('plugins:active', 0, -1);
addBaseThemes(pluginList); addBaseThemes(plugins);
if (!pluginList.includes('nodebb-plugin-composer-default')) { if (!plugins.includes('nodebb-plugin-composer-default')) {
pluginList.push('nodebb-plugin-composer-default'); plugins.push('nodebb-plugin-composer-default');
} }
if (!pluginList.includes('nodebb-theme-persona')) { if (!plugins.includes('nodebb-theme-persona')) {
pluginList.push('nodebb-theme-persona'); plugins.push('nodebb-theme-persona');
} }
} }
const styleUpdated_Client = pluginList.map(p => `node_modules/${p}/*.scss`) const styleUpdated_Client = plugins.map(p => `node_modules/${p}/*.less`)
.concat(pluginList.map(p => `node_modules/${p}/*.css`)) .concat(plugins.map(p => `node_modules/${p}/*.css`))
.concat(pluginList.map(p => `node_modules/${p}/+(public|static|scss)/**/*.scss`)) .concat(plugins.map(p => `node_modules/${p}/+(public|static|less)/**/*.less`))
.concat(pluginList.map(p => `node_modules/${p}/+(public|static)/**/*.css`)); .concat(plugins.map(p => `node_modules/${p}/+(public|static)/**/*.css`));
const clientUpdated = pluginList.map(p => `node_modules/${p}/+(public|static)/**/*.js`); const styleUpdated_Admin = plugins.map(p => `node_modules/${p}/*.less`)
const serverUpdated = pluginList.map(p => `node_modules/${p}/*.js`) .concat(plugins.map(p => `node_modules/${p}/*.css`))
.concat(pluginList.map(p => `node_modules/${p}/+(lib|src)/**/*.js`)); .concat(plugins.map(p => `node_modules/${p}/+(public|static|less)/**/*.less`))
.concat(plugins.map(p => `node_modules/${p}/+(public|static)/**/*.css`));
const templatesUpdated = pluginList.map(p => `node_modules/${p}/+(public|static|templates)/**/*.tpl`); const clientUpdated = plugins.map(p => `node_modules/${p}/+(public|static)/**/*.js`);
const langUpdated = pluginList.map(p => `node_modules/${p}/+(public|static|languages)/**/*.json`); const serverUpdated = plugins.map(p => `node_modules/${p}/*.js`)
.concat(plugins.map(p => `node_modules/${p}/+(lib|src)/**/*.js`));
const templatesUpdated = plugins.map(p => `node_modules/${p}/+(public|static|templates)/**/*.tpl`);
const langUpdated = plugins.map(p => `node_modules/${p}/+(public|static|languages)/**/*.json`);
grunt.config(['watch'], { grunt.config(['watch'], {
styleUpdated: { styleUpdated_Client: {
files: [ files: [
'public/scss/**/*.scss', 'public/less/**/*.less',
...styleUpdated_Client, ...styleUpdated_Client,
], ],
options: { options: {
interval: 1000, interval: 1000,
}, },
}, },
styleUpdated_Admin: {
files: [
'public/less/**/*.less',
...styleUpdated_Admin,
],
options: {
interval: 1000,
},
},
clientUpdated: { clientUpdated: {
files: [ files: [
'public/src/**/*.js', 'public/src/**/*.js',
@@ -124,9 +137,10 @@ module.exports = function (grunt) {
}); });
const build = require('./src/meta/build'); const build = require('./src/meta/build');
if (!grunt.option('skip')) { if (!grunt.option('skip')) {
await build.build(true, { watch: true }); await build.build(true, { webpack: false });
} }
run(); run();
await build.webpack({ watch: true });
done(); done();
}); });
@@ -153,14 +167,16 @@ module.exports = function (grunt) {
grunt.event.removeAllListeners('watch'); grunt.event.removeAllListeners('watch');
grunt.event.on('watch', (action, filepath, target) => { grunt.event.on('watch', (action, filepath, target) => {
let compiling; let compiling;
if (target === 'styleUpdated') { if (target === 'styleUpdated_Client') {
compiling = ['clientCSS', 'acpCSS']; compiling = 'clientCSS';
} else if (target === 'styleUpdated_Admin') {
compiling = 'acpCSS';
} else if (target === 'clientUpdated') { } else if (target === 'clientUpdated') {
compiling = ['js']; compiling = 'js';
} else if (target === 'templatesUpdated') { } else if (target === 'templatesUpdated') {
compiling = ['tpl']; compiling = 'tpl';
} else if (target === 'langUpdated') { } else if (target === 'langUpdated') {
compiling = ['lang']; compiling = 'lang';
} else if (target === 'serverUpdated') { } else if (target === 'serverUpdated') {
// empty require cache // empty require cache
const paths = ['./src/meta/build.js', './src/meta/index.js']; const paths = ['./src/meta/build.js', './src/meta/index.js'];
@@ -168,7 +184,7 @@ module.exports = function (grunt) {
return run(); return run();
} }
require('./src/meta/build').build(compiling, { webpack: false }, (err) => { require('./src/meta/build').build([compiling], { webpack: false }, (err) => {
if (err) { if (err) {
winston.error(err.stack); winston.error(err.stack);
} }
@@ -179,10 +195,10 @@ module.exports = function (grunt) {
}); });
}; };
function addBaseThemes(pluginList) { function addBaseThemes(plugins) {
let themeId = pluginList.find(p => p.includes('nodebb-theme-')); let themeId = plugins.find(p => p.includes('nodebb-theme-'));
if (!themeId) { if (!themeId) {
return pluginList; return plugins;
} }
let baseTheme; let baseTheme;
do { do {
@@ -193,9 +209,9 @@ function addBaseThemes(pluginList) {
} }
if (baseTheme) { if (baseTheme) {
pluginList.push(baseTheme); plugins.push(baseTheme);
themeId = baseTheme; themeId = baseTheme;
} }
} while (baseTheme); } while (baseTheme);
return pluginList; return plugins;
} }

View File

@@ -3,7 +3,6 @@
[![Workflow](https://github.com/NodeBB/NodeBB/actions/workflows/test.yaml/badge.svg)](https://github.com/NodeBB/NodeBB/actions/workflows/test.yaml) [![Workflow](https://github.com/NodeBB/NodeBB/actions/workflows/test.yaml/badge.svg)](https://github.com/NodeBB/NodeBB/actions/workflows/test.yaml)
[![Coverage Status](https://coveralls.io/repos/github/NodeBB/NodeBB/badge.svg?branch=master)](https://coveralls.io/github/NodeBB/NodeBB?branch=master) [![Coverage Status](https://coveralls.io/repos/github/NodeBB/NodeBB/badge.svg?branch=master)](https://coveralls.io/github/NodeBB/NodeBB?branch=master)
[![Code Climate](https://codeclimate.com/github/NodeBB/NodeBB/badges/gpa.svg)](https://codeclimate.com/github/NodeBB/NodeBB) [![Code Climate](https://codeclimate.com/github/NodeBB/NodeBB/badges/gpa.svg)](https://codeclimate.com/github/NodeBB/NodeBB)
[![](https://dcbadge.vercel.app/api/server/p6YKPXu7er?style=flat)](https://discord.gg/p6YKPXu7er)
[**NodeBB Forum Software**](https://nodebb.org) is powered by Node.js and supports either Redis, MongoDB, or a PostgreSQL database. It utilizes web sockets for instant interactions and real-time notifications. NodeBB takes the best of the modern web: real-time streaming discussions, mobile responsiveness, and rich RESTful read/write APIs, while staying true to the original bulletin board/forum format &rarr; categorical hierarchies, local user accounts, and asynchronous messaging. [**NodeBB Forum Software**](https://nodebb.org) is powered by Node.js and supports either Redis, MongoDB, or a PostgreSQL database. It utilizes web sockets for instant interactions and real-time notifications. NodeBB takes the best of the modern web: real-time streaming discussions, mobile responsiveness, and rich RESTful read/write APIs, while staying true to the original bulletin board/forum format &rarr; categorical hierarchies, local user accounts, and asynchronous messaging.
@@ -35,7 +34,7 @@ Our minimalist "Persona" theme gets you going right away, no coding experience r
* 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 LESS or CSS. NodeBB's base theme utilizes [Bootstrap 3](http://getbootstrap.com/) but themes can choose to use a different framework altogether. * If you are a designer, [NodeBB needs themes](http://community.nodebb.org/category/10/nodebb-themes)! NodeBB's theming system allows 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://www.transifex.com/projects/p/nodebb/) for internationalization.
* Please don't forget to **like**, **follow**, and **star our repo**! Join our growing [community](http://community.nodebb.org) to keep up to date with the latest NodeBB development. * Please don't forget to **like**, **follow**, and **star our repo**! Join our growing [community](http://community.nodebb.org) to keep up to date with the latest NodeBB development.
## Requirements ## Requirements
@@ -77,7 +76,7 @@ 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](http://docs.nodebb.org) * [Documentation & Installation Instructions](http://docs.nodebb.org)
* [Help translate NodeBB](https://explore.transifex.com/nodebb/nodebb/) * [Help translate NodeBB](https://www.transifex.com/projects/p/nodebb/)
* [NodeBB Blog](http://blog.nodebb.org) * [NodeBB Blog](http://blog.nodebb.org)
* [Premium Hosting for NodeBB](http://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

4
app.js
View File

@@ -38,7 +38,7 @@ global.env = process.env.NODE_ENV || 'production';
// Alternate configuration file support // Alternate configuration file support
const configFile = path.resolve(__dirname, nconf.any(['config', 'CONFIG']) || 'config.json'); const configFile = path.resolve(__dirname, nconf.any(['config', 'CONFIG']) || 'config.json');
const configExists = file.existsSync(configFile) || (nconf.get('url') && nconf.get('secret') && nconf.get('database')); const configExists = file.existsSync(configFile) || (nconf.get('url') && nconf.get('database'));
const prestart = require('./src/prestart'); const prestart = require('./src/prestart');
@@ -71,7 +71,7 @@ if (nconf.get('setup') || nconf.get('install')) {
}); });
} else if (nconf.get('activate')) { } else if (nconf.get('activate')) {
require('./src/cli/manage').activate(nconf.get('activate')); require('./src/cli/manage').activate(nconf.get('activate'));
} else if (nconf.get('plugins') && typeof nconf.get('plugins') !== 'object') { } else if (nconf.get('plugins')) {
require('./src/cli/manage').listPlugins(); require('./src/cli/manage').listPlugins();
} else if (nconf.get('build')) { } else if (nconf.get('build')) {
require('./src/cli/manage').build(nconf.get('build')); require('./src/cli/manage').build(nconf.get('build'));

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,
@@ -26,7 +25,6 @@
"postQueue": 0, "postQueue": 0,
"postQueueReputationThreshold": 0, "postQueueReputationThreshold": 0,
"groupsExemptFromPostQueue": ["administrators", "Global Moderators"], "groupsExemptFromPostQueue": ["administrators", "Global Moderators"],
"groupsExemptFromMaintenanceMode": ["administrators", "Global Moderators"],
"minimumPostLength": 8, "minimumPostLength": 8,
"maximumPostLength": 32767, "maximumPostLength": 32767,
"systemTags": "", "systemTags": "",
@@ -47,7 +45,6 @@
"allowMultipleBadges": 0, "allowMultipleBadges": 0,
"maximumFileSize": 2048, "maximumFileSize": 2048,
"stripEXIFData": 1, "stripEXIFData": 1,
"orphanExpiryDays": 0,
"resizeImageWidthThreshold": 2000, "resizeImageWidthThreshold": 2000,
"resizeImageWidth": 760, "resizeImageWidth": 760,
"rejectImageWidth": 5000, "rejectImageWidth": 5000,
@@ -80,12 +77,10 @@
"reputation:disabled": 0, "reputation:disabled": 0,
"downvote:disabled": 0, "downvote:disabled": 0,
"disableSignatures": 0, "disableSignatures": 0,
"signatures:hideDuplicates": 0,
"upvotesPerDay": 20, "upvotesPerDay": 20,
"upvotesPerUserPerDay": 6, "upvotesPerUserPerDay": 6,
"downvotesPerDay": 10, "downvotesPerDay": 10,
"downvotesPerUserPerDay": 3, "downvotesPerUserPerDay": 3,
"min:rep:chat": 0,
"min:rep:downvote": 0, "min:rep:downvote": 0,
"min:rep:upvote": 0, "min:rep:upvote": 0,
"min:rep:flag": 0, "min:rep:flag": 0,
@@ -96,8 +91,6 @@
"min:rep:signature": 0, "min:rep:signature": 0,
"flags:limitPerTarget": 0, "flags:limitPerTarget": 0,
"flags:autoFlagOnDownvoteThreshold": 0, "flags:autoFlagOnDownvoteThreshold": 0,
"flags:actionOnResolve": "rescind",
"flags:actionOnReject": "rescind",
"notificationType_upvote": "notification", "notificationType_upvote": "notification",
"notificationType_new-topic": "notification", "notificationType_new-topic": "notification",
"notificationType_new-reply": "notification", "notificationType_new-reply": "notification",
@@ -148,7 +141,6 @@
"maximumRelatedTopics": 0, "maximumRelatedTopics": 0,
"disableEmailSubscriptions": 0, "disableEmailSubscriptions": 0,
"emailConfirmInterval": 10, "emailConfirmInterval": 10,
"emailConfirmExpiry": 24,
"removeEmailNotificationImages": 0, "removeEmailNotificationImages": 0,
"sendValidationEmail": 1, "sendValidationEmail": 1,
"includeUnverifiedEmails": 0, "includeUnverifiedEmails": 0,
@@ -160,7 +152,6 @@
"digestHour": 17, "digestHour": 17,
"passwordExpiryDays": 0, "passwordExpiryDays": 0,
"cross-origin-embedder-policy": 0, "cross-origin-embedder-policy": 0,
"cross-origin-opener-policy": "same-origin",
"cross-origin-resource-policy": "same-origin", "cross-origin-resource-policy": "same-origin",
"hsts-maxage": 31536000, "hsts-maxage": 31536000,
"hsts-subdomains": 0, "hsts-subdomains": 0,
@@ -182,6 +173,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

@@ -2,7 +2,7 @@
{ {
"widget": "html", "widget": "html",
"data" : { "data" : {
"html": "<footer id=\"footer\" class=\"container footer d-flex flex-column align-items-center gap-1 mb-2\">\n\t<span>Powered by <a class=\"link-secondary text-decoration-underline\" target=\"_blank\" href=\"https://nodebb.org\">NodeBB</a></span>\n\t<span><a class=\"link-secondary\" target=\"_blank\" href=\"//github.com/NodeBB/NodeBB/graphs/contributors\"><i class=\"fa fa-users\"></i> <span class=\"text-decoration-underline\">Contributors<span></a></span>\n</footer>", "html": "<footer id=\"footer\" class=\"container footer\">\r\n\t<div>\r\n\t\tPowered by <a target=\"_blank\" href=\"https://nodebb.org\">NodeBB</a> | <a target=\"_blank\" href=\"//github.com/NodeBB/NodeBB/graphs/contributors\">Contributors</a>\r\n\t</div>\r\n</footer>",
"title":"", "title":"",
"container":"" "container":""
} }

View File

@@ -4,7 +4,7 @@
"title": "[[global:header.categories]]", "title": "[[global:header.categories]]",
"enabled": true, "enabled": true,
"iconClass": "fa-list", "iconClass": "fa-list",
"textClass": "d-lg-none", "textClass": "visible-xs-inline",
"text": "[[global:header.categories]]" "text": "[[global:header.categories]]"
}, },
{ {
@@ -13,7 +13,7 @@
"title": "[[global:header.unread]]", "title": "[[global:header.unread]]",
"enabled": true, "enabled": true,
"iconClass": "fa-inbox", "iconClass": "fa-inbox",
"textClass": "d-lg-none", "textClass": "visible-xs-inline",
"text": "[[global:header.unread]]", "text": "[[global:header.unread]]",
"groups": ["registered-users"] "groups": ["registered-users"]
}, },
@@ -22,7 +22,7 @@
"title": "[[global:header.recent]]", "title": "[[global:header.recent]]",
"enabled": true, "enabled": true,
"iconClass": "fa-clock-o", "iconClass": "fa-clock-o",
"textClass": "d-lg-none", "textClass": "visible-xs-inline",
"text": "[[global:header.recent]]" "text": "[[global:header.recent]]"
}, },
{ {
@@ -30,7 +30,7 @@
"title": "[[global:header.tags]]", "title": "[[global:header.tags]]",
"enabled": true, "enabled": true,
"iconClass": "fa-tags", "iconClass": "fa-tags",
"textClass": "d-lg-none", "textClass": "visible-xs-inline",
"text": "[[global:header.tags]]" "text": "[[global:header.tags]]"
}, },
{ {
@@ -38,7 +38,7 @@
"title": "[[global:header.popular]]", "title": "[[global:header.popular]]",
"enabled": true, "enabled": true,
"iconClass": "fa-fire", "iconClass": "fa-fire",
"textClass": "d-lg-none", "textClass": "visible-xs-inline",
"text": "[[global:header.popular]]" "text": "[[global:header.popular]]"
}, },
{ {
@@ -46,7 +46,7 @@
"title": "[[global:header.users]]", "title": "[[global:header.users]]",
"enabled": true, "enabled": true,
"iconClass": "fa-user", "iconClass": "fa-user",
"textClass": "d-lg-none", "textClass": "visible-xs-inline",
"text": "[[global:header.users]]" "text": "[[global:header.users]]"
}, },
{ {
@@ -54,7 +54,7 @@
"title": "[[global:header.groups]]", "title": "[[global:header.groups]]",
"enabled": true, "enabled": true,
"iconClass": "fa-group", "iconClass": "fa-group",
"textClass": "d-lg-none", "textClass": "visible-xs-inline",
"text": "[[global:header.groups]]" "text": "[[global:header.groups]]"
}, },
{ {
@@ -62,7 +62,7 @@
"title": "[[global:header.admin]]", "title": "[[global:header.admin]]",
"enabled": true, "enabled": true,
"iconClass": "fa-cogs", "iconClass": "fa-cogs",
"textClass": "d-lg-none", "textClass": "visible-xs-inline",
"text": "[[global:header.admin]]", "text": "[[global:header.admin]]",
"groups": ["administrators"] "groups": ["administrators"]
} }

View File

@@ -2,8 +2,8 @@
"name": "nodebb", "name": "nodebb",
"license": "GPL-3.0", "license": "GPL-3.0",
"description": "NodeBB Forum", "description": "NodeBB Forum",
"version": "3.0.0-rc.1", "version": "2.0.0-beta.1",
"homepage": "https://www.nodebb.org", "homepage": "http://www.nodebb.org",
"repository": { "repository": {
"type": "git", "type": "git",
"url": "https://github.com/NodeBB/NodeBB/" "url": "https://github.com/NodeBB/NodeBB/"
@@ -29,151 +29,139 @@
}, },
"dependencies": { "dependencies": {
"@adactive/bootstrap-tagsinput": "0.8.2", "@adactive/bootstrap-tagsinput": "0.8.2",
"@isaacs/ttlcache": "1.2.1", "ace-builds": "1.4.14",
"@popperjs/core": "2.11.6", "archiver": "5.3.0",
"ace-builds": "1.16.0", "async": "3.2.3",
"archiver": "5.3.1", "autoprefixer": "10.4.4",
"async": "3.2.4",
"autoprefixer": "10.4.14",
"bcryptjs": "2.4.3", "bcryptjs": "2.4.3",
"benchpressjs": "2.5.1", "benchpressjs": "2.4.3",
"body-parser": "1.20.2", "body-parser": "1.19.2",
"bootbox": "6.0.0", "bootbox": "5.5.2",
"bootstrap": "5.2.3", "bootstrap": "3.4.1",
"bootswatch": "5.2.3",
"chalk": "4.1.2", "chalk": "4.1.2",
"chart.js": "2.9.4", "chart.js": "2.9.4",
"cli-graph": "3.2.2", "cli-graph": "3.2.2",
"clipboard": "2.0.11", "clipboard": "2.0.10",
"colors": "1.4.0", "colors": "1.4.0",
"commander": "10.0.0", "commander": "7.2.0",
"compare-versions": "5.0.3", "compare-versions": "4.1.3",
"compression": "1.7.4", "compression": "1.7.4",
"connect-flash": "0.1.1", "connect-flash": "0.1.1",
"connect-mongo": "5.0.0", "connect-mongo": "4.6.0",
"connect-multiparty": "2.2.0", "connect-multiparty": "2.2.0",
"connect-pg-simple": "8.0.0", "connect-pg-simple": "7.0.0",
"connect-redis": "7.0.1", "connect-redis": "6.1.3",
"cookie-parser": "1.4.6", "cookie-parser": "1.4.6",
"cron": "2.3.0", "cron": "1.8.2",
"cropperjs": "1.5.13", "cropperjs": "1.5.12",
"csrf-sync": "4.0.0", "csurf": "1.11.0",
"daemon": "1.1.0", "daemon": "1.1.0",
"diff": "5.1.0", "diff": "5.0.0",
"esbuild": "0.17.12", "express": "4.17.3",
"express": "4.18.2", "express-session": "1.17.2",
"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", "graceful-fs": "4.2.9",
"graceful-fs": "4.2.11", "helmet": "5.0.2",
"helmet": "5.1.1", "html-to-text": "8.1.0",
"html-to-text": "9.0.4",
"ipaddr.js": "2.0.1", "ipaddr.js": "2.0.1",
"jquery": "3.6.4", "jquery": "3.6.0",
"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.1",
"jsesc": "3.0.2", "jsesc": "3.0.2",
"json2csv": "5.0.7", "json2csv": "5.0.7",
"jsonwebtoken": "9.0.0", "jsonwebtoken": "8.5.1",
"less": "4.1.3", "less": "4.1.2",
"lodash": "4.17.21", "lodash": "4.17.21",
"logrotate-stream": "0.2.9", "logrotate-stream": "0.2.8",
"lru-cache": "8.0.4", "lru-cache": "6.0.0",
"material-design-lite": "1.3.0", "material-design-lite": "1.3.0",
"mime": "3.0.0", "mime": "3.0.0",
"mkdirp": "2.1.5", "mkdirp": "1.0.4",
"mongodb": "5.1.0", "mongodb": "4.4.1",
"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.0", "@nodebb/bootswatch": "3.4.2",
"nodebb-plugin-2factor": "7.0.4", "nconf": "0.11.3",
"nodebb-plugin-composer-default": "10.0.42", "nodebb-plugin-2factor": "https://github.com/NodeBB/nodebb-plugin-2factor#webpack5",
"nodebb-plugin-dbsearch": "6.0.0", "nodebb-plugin-composer-default": "https://github.com/nodebb/nodebb-plugin-composer-default.git#webpack5",
"nodebb-plugin-emoji": "5.0.5", "nodebb-plugin-dbsearch": "5.1.3",
"nodebb-plugin-emoji-android": "4.0.0", "nodebb-plugin-emoji": "https://github.com/NodeBB/nodebb-plugin-emoji.git#webpack5",
"nodebb-plugin-markdown": "12.0.2", "nodebb-plugin-emoji-android": "2.0.5",
"nodebb-plugin-mentions": "4.0.4", "nodebb-plugin-markdown": "https://github.com/julianlam/nodebb-plugin-markdown.git#webpack5",
"nodebb-plugin-ntfy": "1.0.15", "nodebb-plugin-mentions": "3.0.7",
"nodebb-plugin-spam-be-gone": "2.0.6", "nodebb-plugin-spam-be-gone": "https://github.com/akhoury/nodebb-plugin-spam-be-gone.git#webpack5",
"nodebb-rewards-essentials": "0.2.2", "nodebb-rewards-essentials": "0.2.1",
"nodebb-theme-harmony": "1.0.0-beta.81", "nodebb-theme-lavender": "https://github.com/nodebb/nodebb-theme-lavender.git#webpack5",
"nodebb-theme-lavender": "7.0.9", "nodebb-theme-persona": "https://github.com/nodebb/nodebb-theme-persona.git#webpack5",
"nodebb-theme-peace": "2.0.19", "nodebb-theme-slick": "https://github.com/pichalite/nodebb-theme-slick.git#webpack5",
"nodebb-theme-persona": "13.0.51", "nodebb-theme-vanilla": "12.1.17",
"nodebb-widget-essentials": "7.0.6", "nodebb-widget-essentials": "https://github.com/nodebb/nodebb-widget-essentials.git#webpack5",
"nodemailer": "6.9.1", "nodemailer": "6.7.3",
"nprogress": "0.2.0", "nprogress": "0.2.0",
"passport": "0.6.0", "passport": "0.5.2",
"passport-http-bearer": "1.0.1", "passport-http-bearer": "1.0.1",
"passport-local": "1.0.0", "passport-local": "1.0.0",
"pg": "8.10.0", "pg": "8.7.3",
"pg-cursor": "2.9.0", "pg-cursor": "2.7.3",
"postcss": "8.4.21", "postcss": "8.4.12",
"postcss-clean": "1.2.0", "postcss-clean": "1.2.0",
"progress-webpack-plugin": "1.0.16", "prompt": "1.2.2",
"prompt": "1.3.0", "ioredis": "4.28.5",
"ioredis": "5.3.1",
"request": "2.88.2", "request": "2.88.2",
"request-promise-native": "1.0.9", "request-promise-native": "1.0.9",
"rimraf": "4.4.0", "rimraf": "3.0.2",
"rss": "1.2.2", "rss": "1.2.2",
"rtlcss": "4.0.0", "sanitize-html": "2.7.0",
"sanitize-html": "2.10.0", "semver": "7.3.5",
"sass": "1.59.3",
"semver": "7.3.8",
"serve-favicon": "2.5.0", "serve-favicon": "2.5.0",
"sharp": "0.31.3", "sharp": "0.30.3",
"sitemap": "7.1.1", "sitemap": "7.1.1",
"slideout": "1.0.1", "slideout": "1.0.1",
"socket.io": "4.6.1", "socket.io": "4.4.1",
"socket.io-client": "4.6.1", "socket.io-adapter-cluster": "1.0.1",
"@socket.io/redis-adapter": "8.1.0", "socket.io-client": "4.4.1",
"@socket.io/redis-adapter": "7.1.0",
"sortablejs": "1.15.0", "sortablejs": "1.15.0",
"spdx-license-list": "6.6.0", "spdx-license-list": "6.4.0",
"spider-detector": "2.0.0", "spider-detector": "2.0.0",
"terser-webpack-plugin": "5.3.7",
"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.9.0", "uglify-es": "3.3.9",
"webpack": "5.76.2", "validator": "13.7.0",
"visibilityjs": "2.0.2",
"webpack": "^5.68.0",
"webpack-merge": "5.8.0", "webpack-merge": "5.8.0",
"winston": "3.8.2", "winston": "3.6.0",
"xml": "1.0.1", "xml": "1.0.1",
"xregexp": "5.1.1", "xregexp": "5.1.0",
"yargs": "17.7.1", "yargs": "17.4.0",
"zxcvbn": "4.4.2" "zxcvbn": "4.4.2"
}, },
"devDependencies": { "devDependencies": {
"@apidevtools/swagger-parser": "10.1.0", "@apidevtools/swagger-parser": "10.0.3",
"@commitlint/cli": "17.4.4", "@commitlint/cli": "16.2.3",
"@commitlint/config-angular": "17.4.4", "@commitlint/config-angular": "16.2.3",
"coveralls": "3.1.1", "coveralls": "3.1.1",
"eslint": "8.36.0", "eslint": "8.11.0",
"eslint-config-nodebb": "0.2.1", "eslint-config-nodebb": "0.1.1",
"eslint-plugin-import": "2.27.5", "eslint-plugin-import": "2.25.4",
"grunt": "1.6.1", "grunt": "1.4.1",
"grunt-contrib-watch": "1.1.0", "grunt-contrib-watch": "1.1.0",
"husky": "8.0.3", "husky": "7.0.4",
"jsdom": "21.1.1", "jsdom": "19.0.0",
"lint-staged": "13.2.0", "lint-staged": "12.3.7",
"mocha": "10.2.0", "mocha": "9.2.2",
"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.11.0" "smtp-server": "3.10.0"
},
"optionalDependencies": {
"sass-embedded": "1.59.3"
},
"resolutions": {
"*/jquery": "3.6.4"
}, },
"bugs": { "bugs": {
"url": "https://github.com/NodeBB/NodeBB/issues" "url": "https://github.com/NodeBB/NodeBB/issues"
@@ -182,6 +170,11 @@
"node": ">=12" "node": ">=12"
}, },
"maintainers": [ "maintainers": [
{
"name": "Andrew Rodrigues",
"email": "andrew@nodebb.org",
"url": "https://github.com/psychobunny"
},
{ {
"name": "Julian Lam", "name": "Julian Lam",
"email": "julian@nodebb.org", "email": "julian@nodebb.org",

View File

@@ -6,6 +6,7 @@ const bodyParser = require('body-parser');
const fs = require('fs'); const fs = require('fs');
const path = require('path'); const path = require('path');
const childProcess = require('child_process'); const childProcess = require('child_process');
const less = require('less');
const webpack = require('webpack'); const webpack = require('webpack');
const nconf = require('nconf'); const nconf = require('nconf');
@@ -13,7 +14,6 @@ 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 app = express(); const app = express();
let server; let server;
@@ -58,7 +58,7 @@ web.install = async function (port) {
winston.info(`Launching web installer on port ${port}`); winston.info(`Launching web installer on port ${port}`);
app.use(express.static('public', {})); app.use(express.static('public', {}));
app.use('/assets', express.static(path.join(__dirname, '../build/public'), {})); app.use('/assets', express.static(path.join(__dirname, '../build/webpack'), {}));
app.engine('tpl', (filepath, options, callback) => { app.engine('tpl', (filepath, options, callback) => {
filepath = filepath.replace(/\.tpl$/, '.js'); filepath = filepath.replace(/\.tpl$/, '.js');
@@ -73,7 +73,7 @@ web.install = async function (port) {
try { try {
await Promise.all([ await Promise.all([
compileTemplate(), compileTemplate(),
compileSass(), compileLess(),
runWebpack(), runWebpack(),
copyCSS(), copyCSS(),
loadDefaults(), loadDefaults(),
@@ -206,20 +206,15 @@ async function launch(req, res) {
} }
const filesToDelete = [ const filesToDelete = [
path.join(__dirname, '../public', 'installer.css'), 'installer.css',
path.join(__dirname, '../public', 'bootstrap.min.css'), 'installer.min.js',
path.join(__dirname, '../build/public', 'installer.min.js'), 'bootstrap.min.css',
]; ];
try {
await Promise.all( await Promise.all(
filesToDelete.map( filesToDelete.map(
filename => fs.promises.unlink(filename) filename => fs.promises.unlink(path.join(__dirname, '../public', filename))
) )
); );
} catch (err) {
console.log(err.stack);
}
child.unref(); child.unref();
process.exit(0); process.exit(0);
} catch (err) { } catch (err) {
@@ -247,28 +242,23 @@ async function compileTemplate() {
]); ]);
} }
async function compileSass() { async function compileLess() {
try { try {
const installSrc = path.join(__dirname, '../public/scss/install.scss'); const installSrc = path.join(__dirname, '../public/less/install.less');
const style = await fs.promises.readFile(installSrc); const style = await fs.promises.readFile(installSrc);
const scssOutput = sass.compileString(String(style), { const css = await less.render(String(style), { filename: path.resolve(installSrc) });
loadPaths: [ await fs.promises.writeFile(path.join(__dirname, '../public/installer.css'), css.css);
path.join(__dirname, '../public/scss'),
],
});
await fs.promises.writeFile(path.join(__dirname, '../public/installer.css'), scssOutput.css.toString());
} catch (err) { } catch (err) {
winston.error(`Unable to compile SASS: \n${err.stack}`); winston.error(`Unable to compile LESS: \n${err.stack}`);
throw err; throw err;
} }
} }
async function copyCSS() { async function copyCSS() {
await fs.promises.copyFile( const src = await fs.promises.readFile(
path.join(__dirname, '../node_modules/bootstrap/dist/css/bootstrap.min.css'), path.join(__dirname, '../node_modules/bootstrap/dist/css/bootstrap.min.css'), 'utf8'
path.join(__dirname, '../public/bootstrap.min.css'),
); );
await fs.promises.writeFile(path.join(__dirname, '../public/bootstrap.min.css'), src);
} }
async function loadDefaults() { async function loadDefaults() {

View File

@@ -3,7 +3,7 @@
The files here are read-only and overwritten daily (if there are changes) by the The files here are read-only and overwritten daily (if there are changes) by the
helper bot [Misty](https://github.com/nodebb-misty). helper bot [Misty](https://github.com/nodebb-misty).
Our localisation efforts are handled via [our Transifex Project](https://explore.transifex.com/nodebb/nodebb/), Our localisation efforts are handled via [our Transifex Project](https://www.transifex.com/nodebb/nodebb/),
and any pull requests made to this directory will be automatically closed because and any pull requests made to this directory will be automatically closed because
localisations can go out-of-sync when edited directly. localisations can go out-of-sync when edited directly.

View File

@@ -1,3 +0,0 @@
# The files here are not meant to be edited directly
Please see the &rarr; [Internalization README](../README.md).

View File

@@ -4,6 +4,8 @@
"acp-title": "لوحة تحكم إدارة NodeBB | %1", "acp-title": "لوحة تحكم إدارة NodeBB | %1",
"settings-header-contents": "محتويات", "settings-header-contents": "محتويات",
"changes-not-saved": "لم يتم حفظ التغييرات", "changes-saved": "Changes Saved",
"changes-not-saved-message": "حدثت مشكلة أثناء حفظ التغييرات في NodeBB. (%1)" "changes-saved-message": "Your changes to the NodeBB configuration have been saved.",
"changes-not-saved": "Changes Not Saved",
"changes-not-saved-message": "NodeBB encountered a problem saving your changes. (%1)"
} }

View File

@@ -1,8 +1,5 @@
{ {
"post-cache": "التخزين المؤقت للمشاركات", "post-cache": "التخزين المؤقت للمشاركات",
"group-cache": "التخزين المؤقت للمجموعات",
"local-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": "Mongo", "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": "الذاكرة المعينة", "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

@@ -3,7 +3,7 @@
"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": "نوع الحدث",

View File

@@ -1,14 +1,14 @@
{ {
"custom-css": "Custom CSS/SASS", "custom-css": "Custom CSS/LESS",
"custom-css.description": "Enter your own CSS/SASS declarations here, which will be applied after all other styles.", "custom-css.description": "Enter your own CSS/LESS declarations here, which will be applied after all other styles.",
"custom-css.enable": "Enable Custom CSS/SASS", "custom-css.enable": "Enable Custom CSS/LESS",
"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": "تفعيل إعادة التحميل المباشرة",

View File

@@ -7,5 +7,5 @@
"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": "<p>المنتدى <strong>يعمل على أحدث إصدار</strong> <i class=\"fa fa-check\"></i></p>", "up-to-date": "<p>المنتدى <strong>يعمل على أحدث إصدار</strong> <i class=\"fa fa-check\"></i></p>",
"upgrade-available": "<p> هناك إصدار جديد برقم (v%1). خذ بعين الاعتبار <a href=\"https://docs.nodebb.org/configuring/upgrade/\" target=\"_blank\"> ترقية NodeBB </a>.</p>", "upgrade-available": "<p>A new version (v%1) has been released. Consider <a href=\"https://docs.nodebb.org/configuring/upgrade/\" target=\"_blank\">upgrading your NodeBB</a>.</p>",
"prerelease-upgrade-available": "<p>هذا إصدار منتهي من الاصدارات المسبقة من NodeBB. هناك إصدار جديد برقم (v٪ 1). ضع في اعتبارك <a href=\"https://docs.nodebb.org/configuring/upgrade/\" target=\"_blank\">ترقية NodeBB إليه</a>.</p>", "prerelease-upgrade-available": "<p>This is an outdated pre-release version of NodeBB. A new version (v%1) has been released. Consider <a href=\"https://docs.nodebb.org/configuring/upgrade/\" target=\"_blank\">upgrading your NodeBB</a>.</p>",
"prerelease-warning": "<p>هذه نسخة <strong>ماقبل الإصدار</strong> من NodeBB. قد تحدث أخطاء غير مقصودة. <i class=\"fa fa-exclamation-triangle\"></i></p>", "prerelease-warning": "<p>هذه نسخة <strong>ماقبل الإصدار</strong> من NodeBB. قد تحدث أخطاء غير مقصودة. <i class=\"fa fa-exclamation-triangle\"></i></p>",
"fallback-emailer-not-found": "مرسل البريد الإلكتروني الاحتياطي غير موجود!", "fallback-emailer-not-found": "Fallback emailer not found!",
"running-in-development": "المنتدى قيد التشغيل في وضع \"المطورين\". وقد تكون هناك ثغرات أمنية مفتوحة؛ من فضلك تواصل مع مسؤول نظامك.", "running-in-development": "المنتدى قيد التشغيل في وضع \"المطورين\". وقد تكون هناك ثغرات أمنية مفتوحة؛ من فضلك تواصل مع مسؤول نظامك.",
"latest-lookup-failed": "<p>فشل البحث عن أحدث إصدار متوفر من NodeBB</p>", "latest-lookup-failed": "<p>Failed to look up latest available version of NodeBB</p>",
"notices": "إشعارات", "notices": "إشعارات",
"restart-not-required": "إعادة التشغيل غير مطلوب", "restart-not-required": "إعادة التشغيل غير مطلوب",
@@ -42,10 +42,10 @@
"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",
"realtime-chart-updates": "التحديث الفوري للرسم البياني", "realtime-chart-updates": "التحديث الفوري للرسم البياني",
@@ -54,10 +54,10 @@
"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": "تواجد المستخدمين",
@@ -68,26 +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 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,12 +1,12 @@
{ {
"logger-settings": "إعدادات المسجِّل", "logger-settings": "Logger Settings",
"description": "من خلال تمكين مربعات الاختيار ، ستتلقى سجلات إلى جهازك الطرفي. إذا حددت مسارًا ، فسيتم بعد ذلك حفظ السجلات في ملف بدلاً من ذلك. يعد تسجيل HTTP مفيدًا لجمع الإحصائيات حول من ومتى وماذا يصل الأشخاص في المنتدى. بالإضافة إلى تسجيل طلبات HTTP ، يمكننا أيضًا تسجيل أحداث socket.io. يمكن أن يكون تسجيل Socket.io ، جنبًا إلى جنب مع شاشة redis-cli ، مفيدًا جدًا في تعلم العناصر الداخلية لـ NodeBB.", "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.",
"explanation": "ما عليك سوى تحديدأو/ إلغاء تحديد إعدادات التسجيل لتمكين أو تعطيل التسجيل أثناء التنقل. لا حاجة لإعادة التشغيل.", "explanation": "Simply check/uncheck the logging settings to enable or disable logging on the fly. No restart needed.",
"enable-http": "تمكين سجلات HTTP", "enable-http": "Enable HTTP logging",
"enable-socket": "تفعيل تسجيل أحداث socket.io", "enable-socket": "Enable socket.io event logging",
"file-path": "مسار ملف السجل", "file-path": "Path to log file",
"file-path-placeholder": "/path/to/log/file.log ::: اتركه فارغا لاظهار السجلات لنافذة الطرفية", "file-path-placeholder": "/path/to/log/file.log ::: leave blank to log to your terminal",
"control-panel": "لوحة تحكم المسجل", "control-panel": "Logger Control Panel",
"update-settings": "تحديث إعدادات المسجل" "update-settings": "Update Logger Settings"
} }

View File

@@ -1,15 +1,15 @@
{ {
"rewards": "المكافآت", "rewards": "Rewards",
"condition-if-users": "إذا كان للمستخدم", "condition-if-users": "If User's",
"condition-is": "يكون: ", "condition-is": "Is:",
"condition-then": "عندئذ:", "condition-then": "Then:",
"max-claims": "عدد المرات التي يمكن فيها المطالبة بالمكافأة", "max-claims": "Amount of times reward is claimable",
"zero-infinite": "أدخل 0 للقيمة اللانهائية", "zero-infinite": "Enter 0 for infinite",
"delete": "احذف", "delete": "Delete",
"enable": "مكّن", "enable": "Enable",
"disable": "عطّل", "disable": "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

@@ -8,9 +8,9 @@
"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?",

View File

@@ -1,10 +1,8 @@
{ {
"administrators": "Administrators", "administrators": "Administrators",
"global-moderators": "Global Moderators", "global-moderators": "Global Moderators",
"moderators": "Moderators",
"no-global-moderators": "No Global Moderators", "no-global-moderators": "No Global Moderators",
"no-sub-categories": "No subcategories", "moderators-of-category": "%1 Moderators",
"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

@@ -39,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

@@ -49,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

@@ -91,7 +91,6 @@
"alerts.validate-email-success": "Emails validated", "alerts.validate-email-success": "Emails validated",
"alerts.validate-force-password-reset-success": "User(s) passwords have been reset and their existing sessions have been revoked.", "alerts.validate-force-password-reset-success": "User(s) passwords have been reset and their existing sessions have been revoked.",
"alerts.password-reset-confirm": "Do you want to send password reset email(s) to these user(s)?", "alerts.password-reset-confirm": "Do you want to send password reset email(s) to these user(s)?",
"alerts.password-reset-email-sent": "Password reset email sent.",
"alerts.confirm-delete": "<strong>Warning!</strong><p>Do you really want to delete <strong>user(s)</strong>?</p><p>This action is not reversible! Only the user account will be deleted, their posts and topics will remain.</p>", "alerts.confirm-delete": "<strong>Warning!</strong><p>Do you really want to delete <strong>user(s)</strong>?</p><p>This action is not reversible! Only the user account will be deleted, their posts and topics will remain.</p>",
"alerts.delete-success": "User(s) Deleted!", "alerts.delete-success": "User(s) Deleted!",
"alerts.confirm-delete-content": "<strong>Warning!</strong><p>Do you really want to delete these user(s) <strong>content</strong>?</p><p>This action is not reversible! The users' accounts will remain, but their posts and topics will be deleted.</p>", "alerts.confirm-delete-content": "<strong>Warning!</strong><p>Do you really want to delete these user(s) <strong>content</strong>?</p><p>This action is not reversible! The users' accounts will remain, but their posts and topics will be deleted.</p>",

View File

@@ -76,7 +76,7 @@
"logout": "Log out", "logout": "Log out",
"view-forum": "View Forum", "view-forum": "View Forum",
"search.placeholder": "Search settings", "search.placeholder": "Press &quot;/&quot; to search for settings",
"search.no-results": "No results...", "search.no-results": "No results...",
"search.search-forum": "Search the forum for <strong></strong>", "search.search-forum": "Search the forum for <strong></strong>",
"search.keep-typing": "Type more to see results...", "search.keep-typing": "Type more to see results...",

View File

@@ -3,7 +3,6 @@
"maintenance-mode.help": "When the forum is in maintenance mode, all requests will be redirected to a static holding page. Administrators are exempt from this redirection, and are able to access the site normally.", "maintenance-mode.help": "When the forum is in maintenance mode, all requests will be redirected to a static holding page. Administrators are exempt from this redirection, and are able to access the site normally.",
"maintenance-mode.status": "Maintenance Mode Status Code", "maintenance-mode.status": "Maintenance Mode Status Code",
"maintenance-mode.message": "Maintenance Message", "maintenance-mode.message": "Maintenance Message",
"maintenance-mode.groups-exempt-from-maintenance-mode": "Select groups that should be exempt from maintenance mode",
"headers": "Headers", "headers": "Headers",
"headers.allow-from": "Set ALLOW-FROM to Place NodeBB in an iFrame", "headers.allow-from": "Set ALLOW-FROM to Place NodeBB in an iFrame",
"headers.csp-frame-ancestors": "Set Content-Security-Policy frame-ancestors header to Place NodeBB in an iFrame", "headers.csp-frame-ancestors": "Set Content-Security-Policy frame-ancestors header to Place NodeBB in an iFrame",
@@ -18,10 +17,7 @@
"headers.acah": "Access-Control-Allow-Headers", "headers.acah": "Access-Control-Allow-Headers",
"headers.coep": "Cross-Origin-Embedder-Policy", "headers.coep": "Cross-Origin-Embedder-Policy",
"headers.coep-help": "When enabled (default), will set the header to <code>require-corp</code>", "headers.coep-help": "When enabled (default), will set the header to <code>require-corp</code>",
"headers.coop": "Cross-Origin-Opener-Policy",
"headers.corp": "Cross-Origin-Resource-Policy", "headers.corp": "Cross-Origin-Resource-Policy",
"headers.permissions-policy": "Permissions-Policy",
"headers.permissions-policy-help": "Allows setting permissions policy header, for example \"geolocation=*, camera=()\", see <a href=\"https://github.com/w3c/webappsec-permissions-policy/blob/main/permissions-policy-explainer.md\">this</a> for more info.",
"hsts": "Strict Transport Security", "hsts": "Strict Transport Security",
"hsts.enabled": "Enabled HSTS (recommended)", "hsts.enabled": "Enabled HSTS (recommended)",
"hsts.maxAge": "HSTS Max Age", "hsts.maxAge": "HSTS Max Age",

View File

@@ -11,9 +11,6 @@
"uid": "User ID", "uid": "User ID",
"uid-help-text": "Specify a User ID to associate with this token. If the user ID is <code>0</code>, it will be considered a <em>master</em> token, which can assume the identity of other users based on the <code>_uid</code> parameter", "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-ago": "Last used <span class=\"timeago\" title=\"%1\"></span>.",
"last-seen-on": "Last used on <span class=\"timeago\" title=\"%1\"></span>.",
"last-seen-never": "This key has never been used.",
"no-description": "No description specified.", "no-description": "No description specified.",
"token-on-save": "Token will be generated once form is saved" "token-on-save": "Token will be generated once form is saved"
} }

View File

@@ -5,18 +5,14 @@
"from": "From Name", "from": "From Name",
"from-help": "The from name to display in the email.", "from-help": "The from name to display in the email.",
"confirmation-settings": "Confirmation",
"confirmation.expiry": "Hours to keep email confirmation link valid",
"smtp-transport": "SMTP Transport", "smtp-transport": "SMTP Transport",
"smtp-transport.enabled": "Enable SMTP Transport", "smtp-transport.enabled": "Enable SMTP Transport",
"smtp-transport-help": "You can select from a list of well-known services or enter a custom one.", "smtp-transport-help": "You can select from a list of well-known services or enter a custom one.",
"smtp-transport.service": "Select a service", "smtp-transport.service": "Select a service",
"smtp-transport.service-custom": "Custom Service", "smtp-transport.service-custom": "Custom Service",
"smtp-transport.service-help": "Select a service name above in order to use the known information about it. Alternatively, select &quot;Custom Service&quot; and enter the details below.", "smtp-transport.service-help": "Select a service name above in order to use the known information about it. Alternatively, select 'Custom Service' and enter the details below.",
"smtp-transport.gmail-warning1": "If you are using GMail as your email provider, you will have to generate an &quot;App Password&quot; in order for NodeBB to authenticate successfully. You can generate one at the <a href=\"https://myaccount.google.com/apppasswords\">App Passwords <i class=\"fa fa-external-link\"></i></a> page.", "smtp-transport.gmail-warning1": "There have been reports of the Gmail service not working on accounts with heightened security. In those scenarios, you will have to <a href=\"https://www.google.com/settings/security/lesssecureapps\">configure your GMail account to allow less secure apps</a>.",
"smtp-transport.gmail-warning2": "For more information about this workaround, <a href=\"https://nodemailer.com/usage/using-gmail/\">please consult this NodeMailer article <i class=\"fa fa-external-link\"></i></a> on the issue. An alternative would be to utilise a third-party emailer plugin such as SendGrid, Mailgun, etc. <a href=\"../extend/plugins\">Browse available plugins here</a>.", "smtp-transport.gmail-warning2": "For more information about this workaround, <a href=\"https://nodemailer.com/usage/using-gmail/\">please consult this NodeMailer article on the issue.</a> An alternative would be to utilise a third-party emailer plugin such as SendGrid, Mailgun, etc. <a href=\"../extend/plugins\">Browse available plugins here</a>.",
"smtp-transport.auto-enable-toast": "It looks like you&apos;re configuring an SMTP transport. We enabled the \"SMTP Transport\" option for you.",
"smtp-transport.host": "SMTP Host", "smtp-transport.host": "SMTP Host",
"smtp-transport.port": "SMTP Port", "smtp-transport.port": "SMTP Port",
"smtp-transport.security": "Connection security", "smtp-transport.security": "Connection security",

View File

@@ -12,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

@@ -51,7 +51,6 @@
"signature.disable": "Disable signatures", "signature.disable": "Disable signatures",
"signature.no-links": "Disable links in signatures", "signature.no-links": "Disable links in signatures",
"signature.no-images": "Disable images in signatures", "signature.no-images": "Disable images in signatures",
"signature.hide-duplicates": "Hide duplicate signatures in topics",
"signature.max-length": "Maximum Signature Length", "signature.max-length": "Maximum Signature Length",
"composer": "Composer Settings", "composer": "Composer Settings",
"composer-help": "The following settings govern the functionality and/or appearance of the post composer shown\n\t\t\t\tto users when they create new topics, or reply to existing topics.", "composer-help": "The following settings govern the functionality and/or appearance of the post composer shown\n\t\t\t\tto users when they create new topics, or reply to existing topics.",

View File

@@ -10,7 +10,6 @@
"min-rep-downvote": "Minimum reputation to downvote posts", "min-rep-downvote": "Minimum reputation to downvote posts",
"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-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",
@@ -23,9 +22,5 @@
"flags.limit-per-target-placeholder": "Default: 0", "flags.limit-per-target-placeholder": "Default: 0",
"flags.limit-per-target-help": "When a post or user is flagged multiple times, each additional flag is considered a &quot;report&quot; and added to the original flag. Set this option to a number other than zero to limit the number of reports an item can receive.", "flags.limit-per-target-help": "When a post or user is flagged multiple times, each additional flag is considered a &quot;report&quot; and added to the original flag. Set this option to a number other than zero to limit the number of reports an item can receive.",
"flags.auto-flag-on-downvote-threshold": "Number of downvotes to auto flag posts (Set to 0 to disable, default: 0)", "flags.auto-flag-on-downvote-threshold": "Number of downvotes to auto flag posts (Set to 0 to disable, default: 0)",
"flags.auto-resolve-on-ban": "Automatically resolve all of a user's tickets when they are banned", "flags.auto-resolve-on-ban": "Automatically resolve all of a user's tickets when they are banned"
"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.nothing": "Do nothing",
"flags.action.rescind": "Rescind the notification send to moderators/administrators"
} }

View File

@@ -1,11 +1,8 @@
{ {
"posts": "المشاركات", "posts": "المشاركات",
"orphans": "Orphaned Files",
"private": "جعل الملفات التي تم رفعها خاصة", "private": "جعل الملفات التي تم رفعها خاصة",
"strip-exif-data": "Strip EXIF Data", "strip-exif-data": "Strip EXIF Data",
"preserve-orphaned-uploads": "Keep uploaded files on disk after a post is purged", "preserve-orphaned-uploads": "Keep uploaded files on disk after a post is purged",
"orphanExpiryDays": "Days to keep orphaned files",
"orphanExpiryDays-help": "After this many days, orphaned uploads will be deleted from the file system.<br />Set 0 or leave blank to disable.",
"private-extensions": "File extensions to make private", "private-extensions": "File extensions to make private",
"private-uploads-extensions-help": "Enter comma-separated list of file extensions to make private here (e.g. <code>pdf,xls,doc</code>). An empty list means all files are private.", "private-uploads-extensions-help": "Enter comma-separated list of file extensions to make private here (e.g. <code>pdf,xls,doc</code>). An empty list means all files are private.",
"resize-image-width-threshold": "Resize images if they are wider than specified width", "resize-image-width-threshold": "Resize images if they are wider than specified width",

View File

@@ -1,7 +1,7 @@
{ {
"authentication": "المصادقة", "authentication": "المصادقة",
"email-confirm-interval": "لا يمكن للمستخدم إعادة إرسال رسالة تأكيد البريد الالكتروني حتى مرور", "email-confirm-interval": "لا يمكن للمستخدم إعادة إرسال رسالة تأكيد البريد الالكتروني حتى مرور",
"email-confirm-interval2": "minutes have elapsed", "email-confirm-email2": "دقائق",
"allow-login-with": "السماح بتسجيل الدخول باستخدام", "allow-login-with": "السماح بتسجيل الدخول باستخدام",
"allow-login-with.username-email": "اسم المستخدم أو البريد الالكتروني", "allow-login-with.username-email": "اسم المستخدم أو البريد الالكتروني",
"allow-login-with.username": "اسم المستخدم فقط", "allow-login-with.username": "اسم المستخدم فقط",
@@ -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": "تسجيل المستخدم",

View File

@@ -61,8 +61,6 @@
"no-group": "مجموعة غير موجودة", "no-group": "مجموعة غير موجودة",
"no-user": "اسم مستخدم غير موجود", "no-user": "اسم مستخدم غير موجود",
"no-teaser": "مقتطف غير موجود", "no-teaser": "مقتطف غير موجود",
"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": "الموضوع مقفول",
@@ -89,7 +87,6 @@
"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",
"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)",
"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)",
@@ -157,13 +154,9 @@
"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.",
"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-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-flag": "You need %1 reputation to flag this post", "not-enough-reputation-to-flag": "You need %1 reputation to flag this post",
@@ -210,8 +203,6 @@
"no-connection": "There seems to be a problem with your internet connection", "no-connection": "There seems to be a problem with your internet connection",
"socket-reconnect-failed": "Unable to reach the server at this time. Click here to try again, or try again later", "socket-reconnect-failed": "Unable to reach the server at this time. Click here to try again, or try again later",
"plugin-not-whitelisted": "Unable to install plugin &ndash; only plugins whitelisted by the NodeBB Package Manager can be installed via the ACP", "plugin-not-whitelisted": "Unable to install plugin &ndash; only plugins whitelisted by the NodeBB Package Manager can be installed via the ACP",
"plugins-set-in-configuration": "You are not allowed to change plugin state as they are defined at runtime (config.json, environmental variables or terminal arguments), please modify the configuration instead.",
"theme-not-set-in-configuration": "When defining active plugins in configuration, changing themes requires adding the new theme to the list of active plugins before updating it in the ACP",
"topic-event-unrecognized": "Topic event '%1' unrecognized", "topic-event-unrecognized": "Topic event '%1' unrecognized",
"cant-set-child-as-parent": "Can't set child as parent category", "cant-set-child-as-parent": "Can't set child as parent category",
"cant-set-self-as-parent": "Can't set self as parent category", "cant-set-self-as-parent": "Can't set self as parent category",
@@ -224,6 +215,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

@@ -3,27 +3,25 @@
"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",
"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",
@@ -40,20 +38,16 @@
"delete-post": "حذف المشاركة", "delete-post": "حذف المشاركة",
"purge-post": "Purge Post", "purge-post": "Purge Post",
"restore-post": "استرجاع المشاركة", "restore-post": "استرجاع المشاركة",
"delete": "Delete Flag",
"user-view": "مشاهدة الملف الشخصي", "user-view": "مشاهدة الملف الشخصي",
"user-edit": "تعديل الملف الشخصي", "user-edit": "تعديل الملف الشخصي",
"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?",
"note-added": "Note Added", "note-added": "Note Added",
"note-deleted": "Note Deleted", "note-deleted": "Note Deleted",
"flag-deleted": "Flag Deleted",
"history": "Account &amp; Flag History", "history": "Account &amp; Flag History",
"no-history": "No flag history.", "no-history": "No flag history.",

View File

@@ -37,13 +37,9 @@
"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": "الصفحة التالية",
@@ -58,8 +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",
"best": "الأفضل", "best": "الأفضل",
"controversial": "Controversial", "controversial": "Controversial",
"votes": "Votes", "votes": "Votes",
@@ -74,7 +69,6 @@
"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",
@@ -88,13 +82,11 @@
"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": "عدم الإزعاج",
@@ -130,7 +122,5 @@
"edited": "حُرِر", "edited": "حُرِر",
"disabled": "معطل", "disabled": "معطل",
"select": "تحديد", "select": "تحديد",
"user-search-prompt": "Type something here to find users...", "user-search-prompt": "Type something here to find users..."
"hidden": "Hidden",
"sort": "Sort"
} }

View File

@@ -1,6 +1,5 @@
{ {
"groups": "المجموعات", "groups": "المجموعات",
"members": "Members",
"view_group": "معاينة المجموعة", "view_group": "معاينة المجموعة",
"owner": "مالك المجموعة", "owner": "مالك المجموعة",
"new_group": "أنشئ مجموعة جديدة", "new_group": "أنشئ مجموعة جديدة",

View File

@@ -1,17 +1,13 @@
{ {
"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": "You are looking at older messages, click here to 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 يكتب رسالة...", "chat.user_typing": "%1 يكتب رسالة...",
"chat.user_has_messaged_you": "%1 أرسل لك رسالة.", "chat.user_has_messaged_you": "%1 أرسل لك رسالة.",
"chat.see_all": "All chats", "chat.see_all": "عرض كل المحادثات",
"chat.mark_all_read": "Mark all read", "chat.mark_all_read": "Mark all chats 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": "آخر الدردشات",
@@ -46,7 +42,6 @@
"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": "هل أنت متأكد أنك تريد التخلي عن التغييرات؟",
@@ -70,9 +65,6 @@
"composer.schedule-time": "Time", "composer.schedule-time": "Time",
"composer.cancel-scheduling": "Cancel Scheduling", "composer.cancel-scheduling": "Cancel Scheduling",
"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": "تأكيد",

View File

@@ -1,8 +1,8 @@
{ {
"title": "التنبيهات", "title": "التنبيهات",
"no_notifs": "ليس لديك أية تنبيهات جديدة", "no_notifs": "ليس لديك أية تنبيهات جديدة",
"see_all": "All notifications", "see_all": "عرض كل التنبيهات",
"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",

View File

@@ -49,7 +49,6 @@
"account/watched_categories": "%1's Watched Categories", "account/watched_categories": "%1's Watched Categories",
"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",

View File

@@ -1,12 +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": "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",
"user": "User", "user": "User",
"when": "When",
"category": "Category", "category": "Category",
"title": "Title", "title": "Title",
"content": "Content", "content": "Content",
@@ -21,20 +17,5 @@
"reject": "Reject", "reject": "Reject",
"remove": "Remove", "remove": "Remove",
"notify": "Notify", "notify": "Notify",
"notify-user": "Notify User", "notify-user": "Notify User"
"confirm-reject": "Do you want to reject this post?",
"confirm-remove": "Do you want to remove this post?",
"bulk-actions": "Bulk Actions",
"accept-all": "Accept All",
"accept-selected": "Accept Selected",
"reject-all": "Reject All",
"reject-all-confirm": "Do you want to reject all posts?",
"reject-selected": "Reject Selected",
"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-reject-success": "%1 posts rejected"
} }

View File

@@ -1,6 +1,5 @@
{ {
"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>.",

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,7 +1,5 @@
{ {
"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": "أدخل الكلمات الدلالية...",

View File

@@ -39,30 +39,16 @@
"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 <span class=\"timeago\" title=\"%1\"></span>", "locked-by": "Locked by",
"wrote-on": "wrote on <span class=\"timeago\" title=\"%1\"></span>", "unlocked-by": "Unlocked by",
"replied-to-user-ago": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <span class=\"timeago\" title=\"%4\"></span>", "pinned-by": "Pinned by",
"replied-to-user-on": "replied to <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> on <span class=\"timeago\" title=\"%4\"></span>", "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",
"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": "اضغط هنا للعودة لأخر مشاركة مقروءة في الموضوع", "bookmark_instructions": "اضغط هنا للعودة لأخر مشاركة مقروءة في الموضوع",
"flag-post": "Flag this post", "flag-post": "Flag this post",
"flag-user": "Flag this user", "flag-user": "Flag this user",
@@ -109,7 +95,7 @@
"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 Topic", "thread_tools.merge": "Merge",
"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.",
@@ -127,7 +113,6 @@
"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",
"loading_more_posts": "تحميل المزيد من المشاركات", "loading_more_posts": "تحميل المزيد من المشاركات",
"move_topic": "نقل الموضوع", "move_topic": "نقل الموضوع",
"move_topics": "نقل المواضيع", "move_topics": "نقل المواضيع",
@@ -135,7 +120,7 @@
"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",
@@ -150,11 +135,9 @@
"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",
@@ -200,7 +183,5 @@
"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,6 +1,5 @@
{ {
"banned": "محظور", "banned": "محظور",
"muted": "كتم ",
"offline": "غير متصل", "offline": "غير متصل",
"deleted": "محذوف", "deleted": "محذوف",
"username": "إسم المستخدم", "username": "إسم المستخدم",
@@ -9,7 +8,7 @@
"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": "إزالة حظر الحساب",
@@ -24,7 +23,7 @@
"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": "الموقع",
@@ -34,26 +33,25 @@
"profile": "الملف الشخصي", "profile": "الملف الشخصي",
"profile_views": "عدد المشاهدات", "profile_views": "عدد المشاهدات",
"reputation": "السمعة", "reputation": "السمعة",
"bookmarks": "المفضلات", "bookmarks": "Bookmarks",
"watched_categories": "الأقسام المُتابعة", "watched_categories": "Watched categories",
"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": "المزيد",
@@ -69,7 +67,6 @@
"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": "كلمة السر الحالية ليست صحيحة",
@@ -89,7 +86,7 @@
"remove_cover_picture_confirm": "هل تريد بالتأكيد إزالة صورة الغلاف؟", "remove_cover_picture_confirm": "هل تريد بالتأكيد إزالة صورة الغلاف؟",
"crop_picture": "إقتصاص الصورة", "crop_picture": "إقتصاص الصورة",
"upload_cropped_picture": "إقتصاص ورفع", "upload_cropped_picture": "إقتصاص ورفع",
"avatar-background-colour": "لون الخلفية للصورة الرمزية", "avatar-background-colour": "Avatar background colour",
"settings": "خيارات", "settings": "خيارات",
"show_email": "أظهر بريدي الإلكتروني", "show_email": "أظهر بريدي الإلكتروني",
"show_fullname": "أظهر اسمي الكامل", "show_fullname": "أظهر اسمي الكامل",
@@ -110,18 +107,16 @@
"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",
"topic-post-sort": "Topic post sort",
"max_items_per_page": "أقصى %1", "max_items_per_page": "أقصى %1",
"acp_language": "لغة صفحة اﻻدارة", "acp_language": "Admin Page Language",
"notifications": "التنبيهات", "notifications": "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",
@@ -161,10 +156,6 @@
"info.banned-permanently": "محظور بشكل دائم", "info.banned-permanently": "محظور بشكل دائم",
"info.banned-reason-label": "سبب", "info.banned-reason-label": "سبب",
"info.banned-no-reason": "لم يتم إعطاء سبب.", "info.banned-no-reason": "لم يتم إعطاء سبب.",
"info.mute-history": "Recent Mute History",
"info.no-mute-history": "This user has never been muted",
"info.muted-until": "Muted until %1",
"info.muted-expiry": "Expiry",
"info.muted-no-reason": "No reason given.", "info.muted-no-reason": "No reason given.",
"info.username-history": "سجل اسم المستخدم", "info.username-history": "سجل اسم المستخدم",
"info.email-history": "سجل البريد الإلكتروني", "info.email-history": "سجل البريد الإلكتروني",
@@ -172,8 +163,6 @@
"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.",
@@ -200,6 +189,5 @@
"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."
} }

View File

@@ -1,19 +1,18 @@
{ {
"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": "أحدث المواضيع",

View File

@@ -1,3 +0,0 @@
# The files here are not meant to be edited directly
Please see the &rarr; [Internalization README](../README.md).

View File

@@ -4,6 +4,8 @@
"acp-title": "%1 | Контролен панел за администратори на NodeBB", "acp-title": "%1 | Контролен панел за администратори на NodeBB",
"settings-header-contents": "Съдържание", "settings-header-contents": "Съдържание",
"changes-saved": "Промените са запазени",
"changes-saved-message": "Промените Ви в настройките на NodeBB бяха запазени.",
"changes-not-saved": "Промените не са запазени", "changes-not-saved": "Промените не са запазени",
"changes-not-saved-message": "Възникна проблем при запазването на промените Ви по NodeBB. (%1)" "changes-not-saved-message": "Възникна проблем при запазването на промените Ви по NodeBB. (%1)"
} }

View File

@@ -1,8 +1,5 @@
{ {
"post-cache": "Кеш за публикации", "post-cache": "Кеш за публикации",
"group-cache": "Кеш за групи",
"local-cache": "Локален кеш",
"object-cache": "Кеш за обекти",
"percent-full": "Запълненост: %1%", "percent-full": "Запълненост: %1%",
"post-cache-size": "Размер на кеша за публикации", "post-cache-size": "Размер на кеша за публикации",
"items-in-cache": "Елементи в кеша" "items-in-cache": "Елементи в кеша"

View File

@@ -1,7 +1,7 @@
{ {
"custom-css": "Персонализиран CSS/SASS", "custom-css": "Персонализиран CSS/LESS",
"custom-css.description": "Въведете своите собствени декларации на CSS/SASS. Те ще бъдат приложени след всички останали стилове.", "custom-css.description": "Въведете своите собствени декларации на CSS/LESS, те ще бъдат приложени след всички останали стилове.",
"custom-css.enable": "Включване на персонализиран CSS/SASS", "custom-css.enable": "Включване на персонализиран CSS/LESS",
"custom-js": "Персонализиран код на Javascript", "custom-js": "Персонализиран код на Javascript",
"custom-js.description": "Въведете свой собствен код на javascript тук. Той ще бъде изпълнен след като страницата се зареди напълно.", "custom-js.description": "Въведете свой собствен код на javascript тук. Той ще бъде изпълнен след като страницата се зареди напълно.",

View File

@@ -83,11 +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 File

@@ -8,9 +8,9 @@
"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": "Наистина ли искате да изтриете джаджата?",

View File

@@ -1,10 +1,8 @@
{ {
"administrators": "Администратори", "administrators": "Администратори",
"global-moderators": "Глобални модератори", "global-moderators": "Глобални модератори",
"moderators": "Модератори",
"no-global-moderators": "Няма глобални модератори", "no-global-moderators": "Няма глобални модератори",
"no-sub-categories": "Няма подкатегории", "moderators-of-category": "%1 модератори",
"subcategories": "%1 подкатегории",
"no-moderators": "Няма модератори", "no-moderators": "Няма модератори",
"add-administrator": "Добавяне на администратор", "add-administrator": "Добавяне на администратор",
"add-global-moderator": "Добавяне на глобален модератор", "add-global-moderator": "Добавяне на глобален модератор",

View File

@@ -39,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

@@ -49,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

@@ -91,7 +91,6 @@
"alerts.validate-email-success": "Е-пощите са проверени", "alerts.validate-email-success": "Е-пощите са проверени",
"alerts.validate-force-password-reset-success": "Паролата на потребителя (или паролите на потребителите) беше подновена и сесията му беше прекратена.", "alerts.validate-force-password-reset-success": "Паролата на потребителя (или паролите на потребителите) беше подновена и сесията му беше прекратена.",
"alerts.password-reset-confirm": "Искате ли да изпратите е-писмо/а за възстановяване на паролата на този/тези потребител(и)?", "alerts.password-reset-confirm": "Искате ли да изпратите е-писмо/а за възстановяване на паролата на този/тези потребител(и)?",
"alerts.password-reset-email-sent": "Е-писмото за възстановяване на паролата е изпратено.",
"alerts.confirm-delete": "<strong>ВНИМАНИЕ!</strong><p>Наистина ли искате да изтриете <strong>потребителя/ите</strong>?</p> <p>Това действие е необратимо! Ще бъде изтрит само профилът на потребителя/ите, неговите/техните публикациите и теми ще останат.</p>", "alerts.confirm-delete": "<strong>ВНИМАНИЕ!</strong><p>Наистина ли искате да изтриете <strong>потребителя/ите</strong>?</p> <p>Това действие е необратимо! Ще бъде изтрит само профилът на потребителя/ите, неговите/техните публикациите и теми ще останат.</p>",
"alerts.delete-success": "Потребителят/ите е/са изтрит(и)!", "alerts.delete-success": "Потребителят/ите е/са изтрит(и)!",
"alerts.confirm-delete-content": "<strong>ВНИМАНИЕ!</strong><p>Наистина ли искате да изтриете <strong>съдържанието</strong> на този потребител или тези потребители?</p> <p>Това действие е необратимо! Профилите на потребителите ще останат, но всички техни публикации и теми ще бъдат изтрити.</p>", "alerts.confirm-delete-content": "<strong>ВНИМАНИЕ!</strong><p>Наистина ли искате да изтриете <strong>съдържанието</strong> на този потребител или тези потребители?</p> <p>Това действие е необратимо! Профилите на потребителите ще останат, но всички техни публикации и теми ще бъдат изтрити.</p>",

View File

@@ -76,7 +76,7 @@
"logout": "Изход", "logout": "Изход",
"view-forum": "Преглед на форума", "view-forum": "Преглед на форума",
"search.placeholder": "Търсене на настройки", "search.placeholder": "Натиснете „/“ за търсене на настройки",
"search.no-results": "Няма резултати…", "search.no-results": "Няма резултати…",
"search.search-forum": "Търсене във форума за <strong></strong>", "search.search-forum": "Търсене във форума за <strong></strong>",
"search.keep-typing": "Продължете да пишете, за да видите още резултати…", "search.keep-typing": "Продължете да пишете, за да видите още резултати…",

View File

@@ -3,7 +3,6 @@
"maintenance-mode.help": "Когато форумът е в режим на профилактика, всички заявки ще бъдат пренасочвани към статична страница за изчакване, с изключение на администраторите, които ще могат да използват уеб сайта нормално.", "maintenance-mode.help": "Когато форумът е в режим на профилактика, всички заявки ще бъдат пренасочвани към статична страница за изчакване, с изключение на администраторите, които ще могат да използват уеб сайта нормално.",
"maintenance-mode.status": "Код на състоянието за режима на профилактика", "maintenance-mode.status": "Код на състоянието за режима на профилактика",
"maintenance-mode.message": "Съобщение за профилактиката", "maintenance-mode.message": "Съобщение за профилактиката",
"maintenance-mode.groups-exempt-from-maintenance-mode": "Изберете групи, които да бъдат изключени от режима на профилактика",
"headers": "Заглавни части", "headers": "Заглавни части",
"headers.allow-from": "Задайте „ALLOW-FROM“, за да поставите NodeBB в „iFrame“", "headers.allow-from": "Задайте „ALLOW-FROM“, за да поставите NodeBB в „iFrame“",
"headers.csp-frame-ancestors": "Задайте заглавката „Content-Security-Policy frame-ancestors“ за да поставите NodeBB „iFrame“", "headers.csp-frame-ancestors": "Задайте заглавката „Content-Security-Policy frame-ancestors“ за да поставите NodeBB „iFrame“",
@@ -18,10 +17,7 @@
"headers.acah": "Access-Control-Allow-Headers", "headers.acah": "Access-Control-Allow-Headers",
"headers.coep": "Cross-Origin-Embedder-Policy", "headers.coep": "Cross-Origin-Embedder-Policy",
"headers.coep-help": "Когато е включено (по подразбиране), стойността на заглавката ще бъде <code>require-corp</code>", "headers.coep-help": "Когато е включено (по подразбиране), стойността на заглавката ще бъде <code>require-corp</code>",
"headers.coop": "Cross-Origin-Opener-Policy",
"headers.corp": "Cross-Origin-Resource-Policy", "headers.corp": "Cross-Origin-Resource-Policy",
"headers.permissions-policy": "Permissions-Policy",
"headers.permissions-policy-help": "Позволява задаването на стойност в заглавката „permissions-policy“ (политика за разрешенията), като например „geolocation=*, camera=()“. Вижте <a href=\"https://github.com/w3c/webappsec-permissions-policy/blob/main/permissions-policy-explainer.md\">тук</a> за повече информация.",
"hsts": "Стриктна транспортна сигурност", "hsts": "Стриктна транспортна сигурност",
"hsts.enabled": "Включване на HSTS (препоръчително)", "hsts.enabled": "Включване на HSTS (препоръчително)",
"hsts.maxAge": "Максимална възраст на HSTS", "hsts.maxAge": "Максимална възраст на HSTS",

View File

@@ -11,9 +11,6 @@
"uid": "Потребителски ИД", "uid": "Потребителски ИД",
"uid-help-text": "Посочете потребителски ИД, който да бъде свързан с този код. Ако ИД е <code>0</code>, това ще се счита за <em>главен</em> код, който може да приема идентичността на всеки от другите потребители чрез параметъра <code>_uid</code>", "uid-help-text": "Посочете потребителски ИД, който да бъде свързан с този код. Ако ИД е <code>0</code>, това ще се счита за <em>главен</em> код, който може да приема идентичността на всеки от другите потребители чрез параметъра <code>_uid</code>",
"description": "Описание", "description": "Описание",
"last-seen-ago": "Последно използван <span class=\"timeago\" title=\"%1\"></span>.",
"last-seen-on": "Последно използван на <span class=\"timeago\" title=\"%1\"></span>.",
"last-seen-never": "Този ключ не е използван никога.",
"no-description": "Няма описание.", "no-description": "Няма описание.",
"token-on-save": "Кодът ще бъде създаден след като данните бъдат запазени" "token-on-save": "Кодът ще бъде създаден след като данните бъдат запазени"
} }

View File

@@ -5,18 +5,14 @@
"from": "Име за полето „От“", "from": "Име за полето „От“",
"from-help": "Името на изпращача, което да бъде показано в е-писмото.", "from-help": "Името на изпращача, което да бъде показано в е-писмото.",
"confirmation-settings": "Потвърждение",
"confirmation.expiry": "Продължителност на давността на връзката за потвърждаване, в часове",
"smtp-transport": "Транспорт чрез SMTP", "smtp-transport": "Транспорт чрез SMTP",
"smtp-transport.enabled": "Включване на транспорта чрез SMTP", "smtp-transport.enabled": "Включване на транспорта чрез SMTP",
"smtp-transport-help": "Можете да изберете от списък от познати услуги, или да въведете такава ръчно.", "smtp-transport-help": "Можете да изберете от списък от познати услуги, или да въведете такава ръчно.",
"smtp-transport.service": "Изберете услуга", "smtp-transport.service": "Изберете услуга",
"smtp-transport.service-custom": "Персонализирана услуга", "smtp-transport.service-custom": "Персонализирана услуга",
"smtp-transport.service-help": "Изберете името на услугата по-горе, за да използвате известните данни за нея. Или изберете „Персонализирана услуга“ и въведете данните ѝ по-долу.", "smtp-transport.service-help": "Изберете името на услугата по-горе, за да използвате известните данни за нея. Или изберете „Персонализирана услуга“ и въведете данните ѝ по-долу.",
"smtp-transport.gmail-warning1": "Ако използвате GMail, ще трябва да създадете „Парола за приложение“, за да може NodeBB да използва данните за удостоверяване. Можете да създадете такава в страницата с <a href=\"https://myaccount.google.com/apppasswords\">Пароли за приложения<i class=\"fa fa-external-link\"></i></a>.", "smtp-transport.gmail-warning1": "Има доклади, че услугата на Gmail не работи за акаунти с подсилена защита. В тези случаи ще трябва да <a href=\"https://www.google.com/settings/security/lesssecureapps\">настроите своя акаунт в GMail така, че да позволява използването на по-малко защитени приложения</a>.",
"smtp-transport.gmail-warning2": "За повече информация относно това обиколно решение, <a href=\"https://nodemailer.com/usage/using-gmail/\">моля, прегледайте тази статия за проблема в „NodeMailer“<i class=\"fa fa-external-link\"></i></a>. Друго решение би било използването на добавка за е-поща от трета страна, като например „SendGrid“, „Mailgun“ и т.н. <a href=\"../extend/plugins\">Вижте наличните добавки тук</a>.", "smtp-transport.gmail-warning2": "За повече информация относно това обиколно решение, <a href=\"https://nodemailer.com/usage/using-gmail/\">моля, прегледайте тази статия за проблема в „NodeMailer“.</a> Друго решение би било използването на добавка за е-поща от трета страна, като например „SendGrid“, „Mailgun“ и т.н. <a href=\"../extend/plugins\">Вижте наличните добавки тук</a>.",
"smtp-transport.auto-enable-toast": "Изглежда настройвате функционалност, която изисква транспорт чрез SMTP. Включихме настройката „Транспорт чрез SMTP“, за да не го правите Вие.",
"smtp-transport.host": "SMTP сървър", "smtp-transport.host": "SMTP сървър",
"smtp-transport.port": "SMTP порт", "smtp-transport.port": "SMTP порт",
"smtp-transport.security": "Сигурност на връзката", "smtp-transport.security": "Сигурност на връзката",

View File

@@ -12,7 +12,7 @@
"groups": "Групи:", "groups": "Групи:",
"open-new-window": "Отваряне в нов прозорец", "open-new-window": "Отваряне в нов прозорец",
"dropdown": "Падащо меню", "dropdown": "Падащо меню",
"dropdown-placeholder": "Въведете елементите на падащото меню по-долу. Пример: <br/>&lt;li&gt;&lt;a class=&quot;dropdown-item&quot; href&#x3D;&quot;https://myforum.com&quot;&gt;Връзка 1&lt;/a&gt;&lt;/li&gt;", "dropdown-placeholder": "Въведете елементите на падащото меню по-долу. Пример: <br/>&lt;li&gt;&lt;a href&#x3D;&quot;https://myforum.com&quot;&gt;Връзка 1&lt;/a&gt;&lt;/li&gt;",
"btn.delete": "Изтриване", "btn.delete": "Изтриване",
"btn.disable": "Изключване", "btn.disable": "Изключване",

View File

@@ -51,7 +51,6 @@
"signature.disable": "Забраняване на подписите", "signature.disable": "Забраняване на подписите",
"signature.no-links": "Забраняване на поставянето на връзки в подписите", "signature.no-links": "Забраняване на поставянето на връзки в подписите",
"signature.no-images": "Забраняване на поставянето на изображения в подписите", "signature.no-images": "Забраняване на поставянето на изображения в подписите",
"signature.hide-duplicates": "Скриване на дублираните подписи в темите",
"signature.max-length": "Максимална дължина на подписите", "signature.max-length": "Максимална дължина на подписите",
"composer": "Настройки за съставянето", "composer": "Настройки за съставянето",
"composer-help": "Следващите настройки определят функционалностите и/или вида на елемента за съставяне на\n\\t\\t\\t\\tпубликация, който се използва от потребителите, когато те създават нови теми или отговорят в съществуващи.", "composer-help": "Следващите настройки определят функционалностите и/или вида на елемента за съставяне на\n\\t\\t\\t\\tпубликация, който се използва от потребителите, когато те създават нови теми или отговорят в съществуващи.",

View File

@@ -10,7 +10,6 @@
"min-rep-downvote": "Минимална репутация, необходима за отрицателно гласуване за публикации", "min-rep-downvote": "Минимална репутация, необходима за отрицателно гласуване за публикации",
"downvotes-per-day": "Отрицателни гласувания за ден (задайте 0 за неограничен брой)", "downvotes-per-day": "Отрицателни гласувания за ден (задайте 0 за неограничен брой)",
"downvotes-per-user-per-day": "Отрицателни гласувания за потребител за ден (задайте 0 за неограничен брой)", "downvotes-per-user-per-day": "Отрицателни гласувания за потребител за ден (задайте 0 за неограничен брой)",
"min-rep-chat": "Минимална репутация, необходима за изпращане на съобщения в разговори",
"min-rep-flag": "Минимална репутация, необходима за докладване на публикации", "min-rep-flag": "Минимална репутация, необходима за докладване на публикации",
"min-rep-website": "Минимална репутация, необходима за добавяне на полето „Уебсайт“ към профила на потребителя", "min-rep-website": "Минимална репутация, необходима за добавяне на полето „Уебсайт“ към профила на потребителя",
"min-rep-aboutme": "Минимална репутация, необходима за добавяне на полето „За мен“ към профила на потребителя", "min-rep-aboutme": "Минимална репутация, необходима за добавяне на полето „За мен“ към профила на потребителя",
@@ -23,9 +22,5 @@
"flags.limit-per-target-placeholder": "По подразбиране: 0", "flags.limit-per-target-placeholder": "По подразбиране: 0",
"flags.limit-per-target-help": "Когато публикация или потребител бъде докладван няколко пъти, това се добавя към един общ доклад. Задайте на тази настройка стойност по-голяма от нула, за да ограничите броя на докладванията, които могат да бъдат натрупани към една публикация или потребител.", "flags.limit-per-target-help": "Когато публикация или потребител бъде докладван няколко пъти, това се добавя към един общ доклад. Задайте на тази настройка стойност по-голяма от нула, за да ограничите броя на докладванията, които могат да бъдат натрупани към една публикация или потребител.",
"flags.auto-flag-on-downvote-threshold": "Брой отрицателни гласове, при които публикациите да бъдат докладвани автоматично (0 = изключено, по подразбиране: 0)", "flags.auto-flag-on-downvote-threshold": "Брой отрицателни гласове, при които публикациите да бъдат докладвани автоматично (0 = изключено, по подразбиране: 0)",
"flags.auto-resolve-on-ban": "Автоматично премахване на всички доклади за потребител, когато той бъде блокиран", "flags.auto-resolve-on-ban": "Автоматично премахване на всички доклади за потребител, когато той бъде блокиран"
"flags.action-on-resolve": "Когато докладване бъде разрешено, да се направи следното",
"flags.action-on-reject": "Когато докладване бъде отхвърлено, да се направи следното",
"flags.action.nothing": "Да не се прави нищо",
"flags.action.rescind": "Да се отмени известието, изпратено до модераторите/администраторите"
} }

View File

@@ -1,11 +1,8 @@
{ {
"posts": "Публикации", "posts": "Публикации",
"orphans": "Неизползвани файлове",
"private": "Качените файлове да бъдат частни", "private": "Качените файлове да бъдат частни",
"strip-exif-data": "Премахване на данните EXIF", "strip-exif-data": "Премахване на данните EXIF",
"preserve-orphaned-uploads": "Запазване на качените файлове на диска дори след изтриването на публикацията", "preserve-orphaned-uploads": "Запазване на качените файлове на диска дори след изтриването на публикацията",
"orphanExpiryDays": "Брой дни за съхранение на неизползваните файлове",
"orphanExpiryDays-help": "След толкова на брой дни неизползваните качени файлове ще бъдат изтривани.<br />Задайте 0 или оставете празно, за да изключите тази функционалност.",
"private-extensions": "Файлови разширения, които да бъдат частни", "private-extensions": "Файлови разширения, които да бъдат частни",
"private-uploads-extensions-help": "Въведете списък от файлови разширения, разделени със запетаи, които искате да бъдат частни (например <code>pdf,xls,doc</code>). Ако оставите това поле празно, всички файлове ще бъдат частни.", "private-uploads-extensions-help": "Въведете списък от файлови разширения, разделени със запетаи, които искате да бъдат частни (например <code>pdf,xls,doc</code>). Ако оставите това поле празно, всички файлове ще бъдат частни.",
"resize-image-width-threshold": "Преоразмеряване на изображенията, ако са по-широки от определената ширина", "resize-image-width-threshold": "Преоразмеряване на изображенията, ако са по-широки от определената ширина",

View File

@@ -1,7 +1,7 @@
{ {
"authentication": "Удостоверяване", "authentication": "Удостоверяване",
"email-confirm-interval": "Потребителят не може да изпраща повторно е-писмото за потвърждение, преди да са минали", "email-confirm-interval": "Потребителят не може да изпраща повторно е-писмото за потвърждение, преди да са минали",
"email-confirm-interval2": "минути са изминали", "email-confirm-email2": "минути",
"allow-login-with": "Позволяване на вписването чрез", "allow-login-with": "Позволяване на вписването чрез",
"allow-login-with.username-email": "Потребителско име или е-поща", "allow-login-with.username-email": "Потребителско име или е-поща",
"allow-login-with.username": "Само потребителско име", "allow-login-with.username": "Само потребителско име",
@@ -23,14 +23,12 @@
"login-attempts": "Брой опити за вписване на час", "login-attempts": "Брой опити за вписване на час",
"login-attempts-help": "Ако опитите за вписване на потребител минат тази граница, акаунтът ще бъде заключен за определено време.", "login-attempts-help": "Ако опитите за вписване на потребител минат тази граница, акаунтът ще бъде заключен за определено време.",
"lockout-duration": "Продължителност на заключването на акаунта (в минути)", "lockout-duration": "Продължителност на заключването на акаунта (в минути)",
"login-days": "Брой дни за помнене на сесията за вписване на потребителя", "login-days": "Продължителност на запомнянето на сесията за вписване на потребителя (в дни)",
"password-expiry-days": "Изискване на промяна на паролата през определен период от дни", "password-expiry-days": "Изискване на промяна на паролата през определен период от дни",
"session-time": "Продължителност на сесията", "session-time": "Продължителност на сесията",
"session-time-days": "Дни", "session-time-days": "Дни",
"session-time-seconds": "Секунди", "session-time-seconds": "Секунди",
"session-time-help": "Тези стойности се използват за определяне на дължината на периода, през който потребителите ще останат вписани в системата, ако поставят отметка в полето „Запомнете ме“ при вписването. Имайте предвид, че ще се използва само една от тези стойности. Ако няма стойност за <i>секунди</i>, ще се използва стойността за <i>дни</i>. Ако няма и стойност за <i>дни</i>, то ще се използва стандартната стойност от <i>14 дни</i>.", "session-time-help": "Тези стойности се използват за определяне на дължината на периода, през който потребителите ще останат вписани в системата, ако поставят отметка в полето „Запомнете ме“ при вписването. Имайте предвид, че ще се използва само една от тези стойности. Ако няма стойност за <i>секунди</i>, ще се използва стойността за <i>дни</i>. Ако няма и стойност за <i>дни</i>, то ще се използва стандартната стойност от <i>14 дни</i>.",
"session-duration": "Продължителност на сесията, ако „Запомнете ме“ не е отбелязано (в секунди)",
"session-duration-help": "По подразбиране (или ако стойността е <code>0</code>) потребителят ще остане вписан докато не изтече сесията му (обикновено докато браузърът или разделът не бъде затворен). Използвайте тази настройка, ако искате да определите точно време (в секунди), след което сесията на потребителя да бъде прекратена.",
"online-cutoff": "Брой минути, след които потребителят ще бъде смятан за неактивен", "online-cutoff": "Брой минути, след които потребителят ще бъде смятан за неактивен",
"online-cutoff-help": "Ако потребителят не извършва никакви действия през този период, ще бъде смятан за неактивен и няма да получава известия в реално време.", "online-cutoff-help": "Ако потребителят не извършва никакви действия през този период, ще бъде смятан за неактивен и няма да получава известия в реално време.",
"registration": "Регистриране на потребителите", "registration": "Регистриране на потребителите",

View File

@@ -61,8 +61,6 @@
"no-group": "Групата не съществува", "no-group": "Групата не съществува",
"no-user": "Потребителят не съществува", "no-user": "Потребителят не съществува",
"no-teaser": "Резюмето не съществува", "no-teaser": "Резюмето не съществува",
"no-flag": "Докладът не съществува",
"no-chat-room": "Стаята за разговори не съществува",
"no-privileges": "Нямате достатъчно права за това действие.", "no-privileges": "Нямате достатъчно права за това действие.",
"category-disabled": "Категорията е изключена", "category-disabled": "Категорията е изключена",
"topic-locked": "Темата е заключена", "topic-locked": "Темата е заключена",
@@ -89,7 +87,6 @@
"category-not-selected": "Не е избрана категория.", "category-not-selected": "Не е избрана категория.",
"too-many-posts": "Можете да публикувате веднъж на %1 секунда/и моля, изчакайте малко, преди да опитате да публикувате отново", "too-many-posts": "Можете да публикувате веднъж на %1 секунда/и моля, изчакайте малко, преди да опитате да публикувате отново",
"too-many-posts-newbie": "Като нов потребител, Вие можете да публикувате веднъж на %1 секунда/и, докато не натрупате %2 репутация моля, изчакайте малко, преди да опитате да публикувате отново", "too-many-posts-newbie": "Като нов потребител, Вие можете да публикувате веднъж на %1 секунда/и, докато не натрупате %2 репутация моля, изчакайте малко, преди да опитате да публикувате отново",
"already-posting": "В момента публикувате",
"tag-too-short": "Моля, въведете по-дълъг етикет. Етикетите трябва да съдържат поне %1 символ(а)", "tag-too-short": "Моля, въведете по-дълъг етикет. Етикетите трябва да съдържат поне %1 символ(а)",
"tag-too-long": "Моля, въведете по-кратък етикет. Етикетите трябва да съдържат не повече от %1 символ(а)", "tag-too-long": "Моля, въведете по-кратък етикет. Етикетите трябва да съдържат не повече от %1 символ(а)",
"not-enough-tags": "Недостатъчно етикети. Темите трябва да имат поне %1 етикет(а)", "not-enough-tags": "Недостатъчно етикети. Темите трябва да имат поне %1 етикет(а)",
@@ -157,13 +154,9 @@
"chat-deleted-already": "Това съобщение вече е изтрито.", "chat-deleted-already": "Това съобщение вече е изтрито.",
"chat-restored-already": "Това съобщение вече е възстановено.", "chat-restored-already": "Това съобщение вече е възстановено.",
"chat-room-does-not-exist": "Стаята за разговори не съществува.", "chat-room-does-not-exist": "Стаята за разговори не съществува.",
"cant-add-users-to-chat-room": "Към стаята за разговори не могат да бъдат добавяни потребители.",
"cant-remove-users-from-chat-room": "От стаята за разговори не могат да бъдат премахвани потребители.",
"chat-room-name-too-long": "Името на стаята за разговори е твърде дълго.",
"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": "Репутацията Ви трябва да бъде поне %1, за да участвате в разговори",
"not-enough-reputation-to-upvote": "Репутацията Ви трябва да бъде поне %1, за да гласувате положително", "not-enough-reputation-to-upvote": "Репутацията Ви трябва да бъде поне %1, за да гласувате положително",
"not-enough-reputation-to-downvote": "Репутацията Ви трябва да бъде поне %1, за да гласувате отрицателно", "not-enough-reputation-to-downvote": "Репутацията Ви трябва да бъде поне %1, за да гласувате отрицателно",
"not-enough-reputation-to-flag": "Репутацията Ви трябва да бъде поне %1, за да докладвате тази публикация", "not-enough-reputation-to-flag": "Репутацията Ви трябва да бъде поне %1, за да докладвате тази публикация",
@@ -210,8 +203,6 @@
"no-connection": "Изглежда има проблем с връзката Ви с Интернет", "no-connection": "Изглежда има проблем с връзката Ви с Интернет",
"socket-reconnect-failed": "В момента сървърът е недостъпен. Натиснете тук, за да опитате отново, или опитайте пак по-късно.", "socket-reconnect-failed": "В момента сървърът е недостъпен. Натиснете тук, за да опитате отново, или опитайте пак по-късно.",
"plugin-not-whitelisted": "Добавката не може да бъде инсталирана само добавки, одобрени от пакетния мениджър на NodeBB могат да бъдат инсталирани чрез ACP", "plugin-not-whitelisted": "Добавката не може да бъде инсталирана само добавки, одобрени от пакетния мениджър на NodeBB могат да бъдат инсталирани чрез ACP",
"plugins-set-in-configuration": "Не можете да променяте състоянието на добавката, тъй като то се определя по време на работата ѝ (чрез config.json, променливи на средата или аргументи при изпълнение). Вместо това може да промените конфигурацията.",
"theme-not-set-in-configuration": "Когато определяте активните добавки в конфигурацията, промяната на темите изисква да се добави новата тема към активните добавки, преди актуализирането ѝ в ACP",
"topic-event-unrecognized": "Събитието „%1“ на темата е неизвестно", "topic-event-unrecognized": "Събитието „%1“ на темата е неизвестно",
"cant-set-child-as-parent": "Дъщерна категория не може да се зададе като базова такава", "cant-set-child-as-parent": "Дъщерна категория не може да се зададе като базова такава",
"cant-set-self-as-parent": "Категорията не може да се зададе като базова категория на себе си", "cant-set-self-as-parent": "Категорията не може да се зададе като базова категория на себе си",
@@ -224,6 +215,5 @@
"api.429": "Направили сте твърде много заявки. Моля, опитайте отново по-късно.", "api.429": "Направили сте твърде много заявки. Моля, опитайте отново по-късно.",
"api.500": "При обработката на заявката Ви възникна неочаквана грешка.", "api.500": "При обработката на заявката Ви възникна неочаквана грешка.",
"api.501": "Пътят, който се опитвате да извикате, все още не съществува. Моля, опитайте отново утре.", "api.501": "Пътят, който се опитвате да извикате, все още не съществува. Моля, опитайте отново утре.",
"api.503": "Пътят, който се опитвате да извикате, в момента не е достъпен, поради настройките на сървъра.", "api.503": "Пътят, който се опитвате да извикате, в момента не е достъпен, поради настройките на сървъра."
"api.reauth-required": "Ресурсът, който се опитвате да достъпите, изисква (повторно) удостоверяване."
} }

View File

@@ -3,27 +3,25 @@
"reports": "Доклади", "reports": "Доклади",
"first-reported": "Първо докладване", "first-reported": "Първо докладване",
"no-flags": "Ура! Няма намерени доклади.", "no-flags": "Ура! Няма намерени доклади.",
"x-flags-found": "Намерени доклади: %1.",
"assignee": "Назначен", "assignee": "Назначен",
"update": "Обновяване", "update": "Обновяване",
"updated": "Обновено", "updated": "Обновено",
"resolved": "Разрешен", "resolved": "Разрешен",
"target-purged": "Съдържанието, за което се отнася този доклад, е било изтрито и вече не е налично.", "target-purged": "Съдържанието, за което се отнася този доклад, е било изтрито и вече не е налично.",
"target-aboutme-empty": "Този потребител не е попълнил нищо в секцията за себе си.",
"graph-label": "Дневни етикети", "graph-label": "Дневни етикети",
"quick-filters": "Бързи филтри", "quick-filters": "Бързи филтри",
"filter-active": "В този списък с доклади има един или повече филтри", "filter-active": "В този списък с доклади има един или повече филтри",
"filter-reset": "Премахване на филтрите", "filter-reset": "Премахване на филтрите",
"filters": "Настройки на филтрите", "filters": "Настройки на филтрите",
"filter-reporterId": "Докладвал", "filter-reporterId": "Потр. ид. на докладвалия",
"filter-targetUid": "Докладван", "filter-targetUid": "Потр. ид. на докладвания",
"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": "Назначен", "filter-assignee": "Потр. ид. на назначения",
"filter-cid": "Категория", "filter-cid": "Категория",
"filter-quick-mine": "Назначени на мен", "filter-quick-mine": "Назначени на мен",
"filter-cid-all": "Всички категории", "filter-cid-all": "Всички категории",
@@ -40,20 +38,16 @@
"delete-post": "Изтриване на публикацията", "delete-post": "Изтриване на публикацията",
"purge-post": "Изчистване на публикацията", "purge-post": "Изчистване на публикацията",
"restore-post": "Възстановяване на публикацията", "restore-post": "Възстановяване на публикацията",
"delete": "Изтриване на доклада",
"user-view": "Преглед на профила", "user-view": "Преглед на профила",
"user-edit": "Редактиране на профила", "user-edit": "Редактиране на профила",
"notes": "Бележки към доклада", "notes": "Бележки към доклада",
"add-note": "Добавяне на бележка", "add-note": "Добавяне на бележка",
"edit-note": "Редактиране на бележката",
"no-notes": "Няма споделени бележки.", "no-notes": "Няма споделени бележки.",
"delete-note-confirm": "Наистина ли искате да изтриете тази бележка към доклада?", "delete-note-confirm": "Наистина ли искате да изтриете тази бележка към доклада?",
"delete-flag-confirm": "Наистина ли искате да изтриете този доклад?",
"note-added": "Бележката е добавена", "note-added": "Бележката е добавена",
"note-deleted": "Бележката е изтрита", "note-deleted": "Бележката е изтрита",
"flag-deleted": "Докладът е изтрит",
"history": "Акаунт и история на докладванията", "history": "Акаунт и история на докладванията",
"no-history": "Няма история на доклада.", "no-history": "Няма история на доклада.",

View File

@@ -37,13 +37,9 @@
"header.notifications": "Известия", "header.notifications": "Известия",
"header.search": "Търсене", "header.search": "Търсене",
"header.profile": "Профил", "header.profile": "Профил",
"header.account": "Акаунт",
"header.navigation": "Навигация", "header.navigation": "Навигация",
"header.manage": "Управление",
"header.drafts": "Чернови",
"notifications.loading": "Зареждане на известията", "notifications.loading": "Зареждане на известията",
"chats.loading": "Зареждане на разговорите", "chats.loading": "Зареждане на разговорите",
"drafts.loading": "Зареждане на черновите",
"motd.welcome": "Добре дошли в NodeBB, системата за дискусии на бъдещето.", "motd.welcome": "Добре дошли в NodeBB, системата за дискусии на бъдещето.",
"previouspage": "Предишна страница", "previouspage": "Предишна страница",
"nextpage": "Следваща страница", "nextpage": "Следваща страница",
@@ -58,8 +54,7 @@
"users": "Потребители", "users": "Потребители",
"topics": "Теми", "topics": "Теми",
"posts": "Публ.", "posts": "Публ.",
"x-posts": "<span class=\"formatted-number\">%1</span> публикации", "x-posts": "%1 публикации",
"x-topics": "<span class=\"formatted-number\">%1</span> теми",
"best": "Най-добри", "best": "Най-добри",
"controversial": "Противоречиви", "controversial": "Противоречиви",
"votes": "Гласове", "votes": "Гласове",
@@ -74,7 +69,6 @@
"reputation": "Репутация", "reputation": "Репутация",
"lastpost": "Последна публикация", "lastpost": "Последна публикация",
"firstpost": "Първа публикация", "firstpost": "Първа публикация",
"about": "Относно",
"read_more": "още", "read_more": "още",
"more": "Още", "more": "Още",
"none": "Нищо", "none": "Нищо",
@@ -88,13 +82,11 @@
"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": "Редактирано %1",
"norecentposts": "Няма скорошни публикации", "norecentposts": "Няма скорошни публикации",
"norecenttopics": "Няма скорошни теми", "norecenttopics": "Няма скорошни теми",
"recentposts": "Скорошни публикации", "recentposts": "Скорошни публикации",
"recentips": "Наскоро ползвани IP адреси", "recentips": "Наскоро ползвани IP адреси",
"moderator_tools": "Модераторски инструменти", "moderator_tools": "Модераторски инструменти",
"status": "Състояние",
"online": "На линия", "online": "На линия",
"away": "Отсъстващ", "away": "Отсъстващ",
"dnd": "Отпочиващ", "dnd": "Отпочиващ",
@@ -130,7 +122,5 @@
"edited": "Редактирано", "edited": "Редактирано",
"disabled": "Изключено", "disabled": "Изключено",
"select": "Избиране", "select": "Избиране",
"user-search-prompt": "Започнете да пишете, за да потърсите потребител…", "user-search-prompt": "Започнете да пишете, за да потърсите потребител…"
"hidden": "Скрито",
"sort": "Подреждане"
} }

View File

@@ -1,6 +1,5 @@
{ {
"groups": "Групи", "groups": "Групи",
"members": "Членове",
"view_group": "Преглед на групата", "view_group": "Преглед на групата",
"owner": "Собственик на групата", "owner": "Собственик на групата",
"new_group": "Създаване на нова група", "new_group": "Създаване на нова група",

View File

@@ -1,17 +1,13 @@
{ {
"chat.chatting_with": "Разговор с", "chat.chatting_with": "Разговор с",
"chat.placeholder": "Въведете съобщение тук или пуснете снимки и натиснете Ентер за изпращане", "chat.placeholder": "Въведете съобщение тук или пуснете снимки и натиснете Ентер за изпращане",
"chat.placeholder.mobile": "Въведете съобщение тук",
"chat.scroll-up-alert": "В момента разглеждате по-стари съобщения. Щракнете тук, за да се прехвърлите към най-новото съобщение.", "chat.scroll-up-alert": "В момента разглеждате по-стари съобщения. Щракнете тук, за да се прехвърлите към най-новото съобщение.",
"chat.usernames-and-x-others": "%1 и %2 други",
"chat.chat-with-usernames": "Разговор с %1",
"chat.chat-with-usernames-and-x-others": "Разговор с %1 и %2 други",
"chat.send": "Изпращане", "chat.send": "Изпращане",
"chat.no_active": "Нямате текущи разговори.", "chat.no_active": "Нямате текущи разговори.",
"chat.user_typing": "%1 пише...", "chat.user_typing": "%1 пише...",
"chat.user_has_messaged_you": "%1 Ви написа съобщение.", "chat.user_has_messaged_you": "%1 Ви написа съобщение.",
"chat.see_all": "Всички разговори", "chat.see_all": "Вижте всички разговори",
"chat.mark_all_read": "Отбелязване на всички като прочетени", "chat.mark_all_read": "Отбелязване на всички разговори като прочетени",
"chat.no-messages": "Моля, изберете получател, за да видите историята на съобщенията", "chat.no-messages": "Моля, изберете получател, за да видите историята на съобщенията",
"chat.no-users-in-room": "Няма потребители в тази стая", "chat.no-users-in-room": "Няма потребители в тази стая",
"chat.recent-chats": "Скорошни разговори", "chat.recent-chats": "Скорошни разговори",
@@ -46,7 +42,6 @@
"composer.compose": "Писане", "composer.compose": "Писане",
"composer.show_preview": "Показване на прегледа", "composer.show_preview": "Показване на прегледа",
"composer.hide_preview": "Скриване на прегледа", "composer.hide_preview": "Скриване на прегледа",
"composer.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": "Наистина ли искате да отхвърлите тази публикация?",
@@ -70,9 +65,6 @@
"composer.schedule-time": "Час", "composer.schedule-time": "Час",
"composer.cancel-scheduling": "Отмяна на насрочването", "composer.cancel-scheduling": "Отмяна на насрочването",
"composer.set-schedule-date": "Задаване на дата", "composer.set-schedule-date": "Задаване на дата",
"composer.discard-all-drafts": "Изтриване на всички чернови",
"composer.no-drafts": "Нямате никакви чернови",
"composer.discard-draft-confirm": "Искате ли да изтриете тази чернова?",
"bootbox.ok": "Добре", "bootbox.ok": "Добре",
"bootbox.cancel": "Отказ", "bootbox.cancel": "Отказ",
"bootbox.confirm": "Потвърждаване", "bootbox.confirm": "Потвърждаване",

View File

@@ -1,8 +1,8 @@
{ {
"title": "Известия", "title": "Известия",
"no_notifs": "Нямате нови известия", "no_notifs": "Нямате нови известия",
"see_all": "Всички известия", "see_all": "Показване на всички известия",
"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",

View File

@@ -49,7 +49,6 @@
"account/watched_categories": "Следените категории на %1", "account/watched_categories": "Следените категории на %1",
"account/bookmarks": "Отметнатите публикации на %1", "account/bookmarks": "Отметнатите публикации на %1",
"account/settings": "Потребителски настройки", "account/settings": "Потребителски настройки",
"account/settings-of": "Променят се настройките на %1",
"account/watched": "Теми, следени от %1", "account/watched": "Теми, следени от %1",
"account/ignored": "Теми, пренебрегвани от %1", "account/ignored": "Теми, пренебрегвани от %1",
"account/upvoted": "Публикации, получили положителен глас от %1", "account/upvoted": "Публикации, получили положителен глас от %1",

View File

@@ -1,12 +1,8 @@
{ {
"post-queue": "Опашка за публикации", "post-queue": "Опашка за публикации",
"no-queued-posts": "В опашката за публикации няма нищо.", "description": "Няма публикации в опашката. <br> За да включите тази функционалност, идете в <a href=\"%1\">Настройки &rarr; Публикуване &rarr; Опашка за публикации</a> и включете <strong>Опашката за публикации</strong>.",
"no-single-post": "Темата или публикацията, която търсите, вече не се намира в опашката. Вероятно или е била одобрена, или изтрита.",
"enabling-help": "За да включите тази функционалност, идете в <a href=\"%1\">Настройки &rarr; Публикуване &rarr; Опашка за публикации</a> и включете <strong>Опашката за публикации</strong>.",
"back-to-list": "Назад към Опашката за публикации",
"user": "Потребител", "user": "Потребител",
"when": "When",
"category": "Категория", "category": "Категория",
"title": "Заглавие", "title": "Заглавие",
"content": "Съдържание", "content": "Съдържание",
@@ -21,20 +17,5 @@
"reject": "Отказване", "reject": "Отказване",
"remove": "Премахване", "remove": "Премахване",
"notify": "Известяване", "notify": "Известяване",
"notify-user": "Известяване на потребителя", "notify-user": "Известяване на потребителя"
"confirm-reject": "Искате ли да отхвърлите тази публикация?",
"confirm-remove": "Искате ли да премахнете тази публикация?",
"bulk-actions": "Групови действия",
"accept-all": "Приемане на всички",
"accept-selected": "Приемане на избраните",
"reject-all": "Отхвърляне на всички",
"reject-all-confirm": "Наистина ли искате да отхвърлите всички публикации?",
"reject-selected": "Отхвърляне на избраните",
"reject-selected-confirm": "Наистина ли искате да отхвърлите %1 избрани публикации?",
"remove-all": "Премахване на всички",
"remove-all-confirm": "Наистина ли искате да премахнете всички публикации?",
"remove-selected": "Премахване на избраните",
"remove-selected-confirm": "Наистина ли искате да премахнете избраните %1 публикации?",
"bulk-accept-success": "Одобрени публикации: %1",
"bulk-reject-success": "Отхвърлени публикации: %1"
} }

View File

@@ -1,6 +1,5 @@
{ {
"register": "Регистрация", "register": "Регистрация",
"already-have-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>.",

View File

@@ -1,41 +1,21 @@
{ {
"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": "В заглавията", "titles": "Заглавия",
"in-titles-posts": "В заглавията и публикациите", "titles-posts": "Заглавия и публикации",
"in-posts": "В публикациите", "match-words": "Съвпадащи думи",
"in-categories": "В категориите",
"in-users": "В потребителите",
"in-tags": "В етикетите",
"categories": "Категории",
"all-categories": "Всички категории",
"categories-x": "Категории: %1",
"categories-watched-categories": "Категории: Следени категории",
"type-a-category": "Въведете категория",
"tags": "Етикети",
"tags-x": "Етикети: %1",
"type-a-tag": "Въведете етикет",
"match-words": "Съвпадение на думите",
"match-all-words": "Съвпадение на всички думи",
"match-any-word": "Съвпадение на някоя дума",
"all": "Всички", "all": "Всички",
"any": "Която и да е", "any": "Която и да е",
"posted-by": "Публикувано от", "posted-by": "Публикувано от",
"posted-by-usernames": "Публикувано от: %1", "in-categories": "В категории",
"type-a-username": "Въведете потребителско име",
"search-child-categories": "Претърсване на подкатегориите", "search-child-categories": "Претърсване на подкатегориите",
"has-tags": "Има етикети", "has-tags": "Има етикети",
"reply-count": "Брой на отговорите", "reply-count": "Брой на отговорите",
"replies": "Отговори",
"replies-atleast-count": "Отговори: Поне %1",
"replies-atmost-count": "Отговори: Не повече от %1",
"at-least": "Поне", "at-least": "Поне",
"at-most": "Най-много", "at-most": "Най-много",
"relevance": "Уместност", "relevance": "Уместност",
"time": "Време",
"post-time": "Време на публикуване", "post-time": "Време на публикуване",
"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-older-than-86400": "Време: Преди вчера",
"time-newer-than-604800": "Време: По-нови от една седмица",
"time-older-than-604800": "Време: По-стари от една седмица",
"time-newer-than-1209600": "Време: По-нови от две седмици",
"time-older-than-1209600": "Време: По-стари от две седмици",
"time-newer-than-2592000": "Време: По-нови от един месец",
"time-older-than-2592000": "Време: По-стари от един месец",
"time-newer-than-7776000": "Време: По-нови от три месеца",
"time-older-than-7776000": "Време: По-стари от три месеца",
"time-newer-than-15552000": "Време: По-нови от шест месеца",
"time-older-than-15552000": "Време: По-стари от шест месеца",
"time-newer-than-31104000": "Време: По-нови от една година",
"time-older-than-31104000": "Време: По-стари от една година",
"sort-by": "Подреждане по", "sort-by": "Подреждане по",
"sort": "Подреждане",
"last-reply-time": "Време на последния отговор", "last-reply-time": "Време на последния отговор",
"topic-title": "Заглавие на темата", "topic-title": "Заглавие на темата",
"topic-votes": "Гласувания за темата", "topic-votes": "Гласувания за темата",
@@ -74,36 +39,11 @@
"category": "Категория", "category": "Категория",
"descending": "В низходящ ред", "descending": "В низходящ ред",
"ascending": "Във възходящ ред", "ascending": "Във възходящ ред",
"sort-by-relevance-desc": "Подреждане по: Съответствие, в низходящ ред",
"sort-by-relevance-asc": "Подреждане по: Съответствие, във възходящ ред",
"sort-by-timestamp-desc": "Подреждане по: Време на публикуване, в низходящ ред",
"sort-by-timestamp-asc": "Подреждане по: Време на публикуване, във възходящ ред",
"sort-by-votes-desc": "Подреждане по: Брой гласове, в низходящ ред",
"sort-by-votes-asc": "Подреждане по: Брой гласове, във възходящ ред",
"sort-by-topic.lastposttime-desc": "Подреждане по: Време на последния отговор, в низходящ ред",
"sort-by-topic.lastposttime-asc": "Подреждане по: Време на последния отговор, във възходящ ред",
"sort-by-topic.title-desc": "Подреждане по: Заглавие на темата, в низходящ ред",
"sort-by-topic.title-asc": "Подреждане по: Заглавие на темата, във възходящ ред",
"sort-by-topic.postcount-desc": "Подреждане по: Брой отговори, в низходящ ред",
"sort-by-topic.postcount-asc": "Подреждане по: Брой отговори, във възходящ ред",
"sort-by-topic.viewcount-desc": "Подреждане по: Брой преглеждания, в низходящ ред",
"sort-by-topic.viewcount-asc": "Подреждане по: Брой преглеждания, във възходящ ред",
"sort-by-topic.votes-desc": "Подреждане по: Брой гласове за темата, в низходящ ред",
"sort-by-topic.votes-asc": "Подреждане по: Брой гласове за темата, във възходящ ред",
"sort-by-topic.timestamp-desc": "Подреждане по: Начална дата на темата, в низходящ ред",
"sort-by-topic.timestamp-asc": "Подреждане по: Начална дата на темата, във възходящ ред",
"sort-by-user.username-desc": "Подреждане по: Потребителско име, в низходящ ред",
"sort-by-user.username-asc": "Подреждане по: Потребителско име, във възходящ ред",
"sort-by-category.name-desc": "Подреждане по: Категория, в низходящ ред",
"sort-by-category.name-asc": "Подреждане по: Категория, във възходящ ред",
"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-posts": "Показване на резултатите като публикации",
"see-more-results": "Показване на още резултати (%1)", "see-more-results": "Показване на още резултати (%1)",
"search-in-category": "Търсене в „%1“" "search-in-category": "Търсене в „%1“"
} }

View File

@@ -1,7 +1,5 @@
{ {
"all-tags": "Всички етикети",
"no_tag_topics": "Няма теми с този етикет.", "no_tag_topics": "Няма теми с този етикет.",
"no-tags-found": "Няма намерени етикети",
"tags": "Етикети", "tags": "Етикети",
"enter_tags_here": "Тук въведете етикети, всеки между %1 и %2 знака.", "enter_tags_here": "Тук въведете етикети, всеки между %1 и %2 знака.",
"enter_tags_here_short": "Въведете етикети...", "enter_tags_here_short": "Въведете етикети...",

View File

@@ -39,30 +39,16 @@
"copy-ip": "Копиране на IP адреса", "copy-ip": "Копиране на IP адреса",
"ban-ip": "Блокиране на IP адреса", "ban-ip": "Блокиране на IP адреса",
"view-history": "История на редакциите", "view-history": "История на редакциите",
"wrote-ago": "писа <span class=\"timeago\" title=\"%1\"></span>", "locked-by": "Заключена от",
"wrote-on": "писа на <span class=\"timeago\" title=\"%1\"></span>", "unlocked-by": "Отключена от",
"replied-to-user-ago": "отговори на <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> <span class=\"timeago\" title=\"%4\"></span>", "pinned-by": "Закачена от",
"replied-to-user-on": "отговори на <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> на <span class=\"timeago\" title=\"%4\"></span>", "unpinned-by": "Откачена от",
"user-locked-topic-ago": "%1 заключи тази тема %2", "deleted-by": "Изтрита от",
"user-locked-topic-on": "%1 заключи тази тема на %2", "restored-by": "Възстановена от",
"user-unlocked-topic-ago": "%1 отключи тази тема %2", "moved-from-by": "Преместена от %1 от",
"user-unlocked-topic-on": "%1 отключи тази тема на %2", "queued-by": "Публикацията е добавена в опашката за одобрение &rarr;",
"user-pinned-topic-ago": "%1 закачи тази тема %2", "backlink": "Спомената от",
"user-pinned-topic-on": "%1 закачи тази тема на %2", "forked-by": "Разделена от",
"user-unpinned-topic-ago": "%1 откачи тази тема %2",
"user-unpinned-topic-on": "%1 откачи тази тема на %2",
"user-deleted-topic-ago": "%1 изтри тази тема %2",
"user-deleted-topic-on": "%1 изтри тази тема на %2",
"user-restored-topic-ago": "%1 възстанови тази тема %2",
"user-restored-topic-on": "%1 възстанови тази тема на %2",
"user-moved-topic-from-ago": "%1 премести тази тема от %2 %3",
"user-moved-topic-from-on": "%1 премести тази тема от %2 на %3",
"user-queued-post-ago": "%1 добави тази публикация в <a href=\"%2\">опашката за одобрение</a> %3",
"user-queued-post-on": "%1 добави тази публикация в <a href=\"%2\">опашката</a> за одобрение на %3",
"user-referenced-topic-ago": "%1 <a href=\"%2\">направи препратка</a> към тази тема %3",
"user-referenced-topic-on": "%1 <a href=\"%2\">направи препратка</a> към тази тема на %3",
"user-forked-topic-ago": "%1 <a href=\"%2\">раздели</a> тази тема %3",
"user-forked-topic-on": "%1 <a href=\"%2\">раздели</a> тази тема на %3",
"bookmark_instructions": "Щракнете тук, за да се върнете към последно прочетената публикация в тази тема.", "bookmark_instructions": "Щракнете тук, за да се върнете към последно прочетената публикация в тази тема.",
"flag-post": "Докладване на тази публикация", "flag-post": "Докладване на тази публикация",
"flag-user": "Докладване на този потребител", "flag-user": "Докладване на този потребител",
@@ -109,7 +95,7 @@
"thread_tools.purge": "Изчистване на темата", "thread_tools.purge": "Изчистване на темата",
"thread_tools.purge_confirm": "Наистина ли искате да изчистите тази тема?", "thread_tools.purge_confirm": "Наистина ли искате да изчистите тази тема?",
"thread_tools.merge_topics": "Сливане на темите", "thread_tools.merge_topics": "Сливане на темите",
"thread_tools.merge": "Сливане на темата", "thread_tools.merge": "Сливане",
"topic_move_success": "Темата ще бъде преместена в „%1“ след малко. Натиснете тук, за да отмените преместването.", "topic_move_success": "Темата ще бъде преместена в „%1“ след малко. Натиснете тук, за да отмените преместването.",
"topic_move_multiple_success": "Темите ще бъдат преместени в „%1“ след малко. Натиснете тук, за да отмените преместването.", "topic_move_multiple_success": "Темите ще бъдат преместени в „%1“ след малко. Натиснете тук, за да отмените преместването.",
"topic_move_all_success": "Всички теми ще бъдат преместени в „%1“ след малко. Натиснете тук, за да отмените преместването.", "topic_move_all_success": "Всички теми ще бъдат преместени в „%1“ след малко. Натиснете тук, за да отмените преместването.",
@@ -127,7 +113,6 @@
"bookmark": "Отметка", "bookmark": "Отметка",
"bookmarks": "Отметки", "bookmarks": "Отметки",
"bookmarks.has_no_bookmarks": "Все още не сте си запазвали отметки към никакви публикации.", "bookmarks.has_no_bookmarks": "Все още не сте си запазвали отметки към никакви публикации.",
"copy-permalink": "Копиране на постоянна връзка",
"loading_more_posts": "Зареждане на още публикации", "loading_more_posts": "Зареждане на още публикации",
"move_topic": "Преместване на темата", "move_topic": "Преместване на темата",
"move_topics": "Преместване на темите", "move_topics": "Преместване на темите",
@@ -135,7 +120,7 @@
"post_moved": "Публикацията беше преместена!", "post_moved": "Публикацията беше преместена!",
"fork_topic": "Разделяне на темата", "fork_topic": "Разделяне на темата",
"enter-new-topic-title": "Въведете заглавието на новата тема", "enter-new-topic-title": "Въведете заглавието на новата тема",
"fork_topic_instruction": "Щракнете върху публикациите, които искате да разделите, въведете име за новата тема, и натиснете „Разделяне на темата“", "fork_topic_instruction": "Натиснете публикациите, които искате да отделите",
"fork_no_pids": "Няма избрани публикации!", "fork_no_pids": "Няма избрани публикации!",
"no-posts-selected": "Няма избрани публикации!", "no-posts-selected": "Няма избрани публикации!",
"x-posts-selected": "Избрани публикации: %1", "x-posts-selected": "Избрани публикации: %1",
@@ -150,11 +135,9 @@
"merge-new-title-for-topic": "Ново заглавие за темата", "merge-new-title-for-topic": "Ново заглавие за темата",
"topic-id": "Ид. на темата", "topic-id": "Ид. на темата",
"move_posts_instruction": "Щракнете върху публикациите, които искате да преместите, а след това въведете ид. на тема или отидете в целевата тема", "move_posts_instruction": "Щракнете върху публикациите, които искате да преместите, а след това въведете ид. на тема или отидете в целевата тема",
"move_topic_instruction": "Изберете целевата категория и натиснете „Преместване“",
"change_owner_instruction": "Натиснете публикациите, които искате да прехвърлите на друг потребител", "change_owner_instruction": "Натиснете публикациите, които искате да прехвърлите на друг потребител",
"composer.title_placeholder": "Въведете заглавието на темата си тук...", "composer.title_placeholder": "Въведете заглавието на темата си тук...",
"composer.handle_placeholder": "Въведете името тук", "composer.handle_placeholder": "Въведете името тук",
"composer.hide": "Скриване",
"composer.discard": "Отхвърляне", "composer.discard": "Отхвърляне",
"composer.submit": "Публикуване", "composer.submit": "Публикуване",
"composer.additional-options": "Допълнителни настройки", "composer.additional-options": "Допълнителни настройки",
@@ -200,7 +183,5 @@
"last-post": "Последна публикация", "last-post": "Последна публикация",
"go-to-my-next-post": "Към следващата ми публикация", "go-to-my-next-post": "Към следващата ми публикация",
"no-more-next-post": "Нямате повече публикации в тази тема", "no-more-next-post": "Нямате повече публикации в тази тема",
"post-quick-reply": "Бърз отговор", "post-quick-reply": "Пускане на бърза публикация"
"navigator.index": "Публикация %1 от %2",
"navigator.unread": "%1 непрочетени"
} }

View File

@@ -1,6 +1,5 @@
{ {
"banned": "Блокиран", "banned": "Блокиран",
"muted": "Заглушен",
"offline": "Извън линия", "offline": "Извън линия",
"deleted": "Изтрит", "deleted": "Изтрит",
"username": "Потребителско име", "username": "Потребителско име",
@@ -43,7 +42,6 @@
"followers": "Последователи", "followers": "Последователи",
"following": "Следва", "following": "Следва",
"blocks": "Блокира", "blocks": "Блокира",
"blocked-users": "Блокирани потребители",
"block_toggle": "Превключване на блокирането", "block_toggle": "Превключване на блокирането",
"block_user": "Блокиране на потребителя", "block_user": "Блокиране на потребителя",
"unblock_user": "Отблокиране на потребителя", "unblock_user": "Отблокиране на потребителя",
@@ -69,7 +67,6 @@
"upload_new_picture": "Качване на нова снимка", "upload_new_picture": "Качване на нова снимка",
"upload_new_picture_from_url": "Качване на нова снимка от адрес", "upload_new_picture_from_url": "Качване на нова снимка от адрес",
"current_password": "Текуща парола", "current_password": "Текуща парола",
"new_password": "Нова парола",
"change_password": "Промяна на паролата", "change_password": "Промяна на паролата",
"change_password_error": "Грешна парола!", "change_password_error": "Грешна парола!",
"change_password_error_wrong_current": "Текущата Ви парола е грешна!", "change_password_error_wrong_current": "Текущата Ви парола е грешна!",
@@ -117,8 +114,6 @@
"paginate_description": "Разделяне на темите и публикациите на страници, вместо да се превърта безкрайно", "paginate_description": "Разделяне на темите и публикациите на страници, вместо да се превърта безкрайно",
"topics_per_page": "Теми на страница", "topics_per_page": "Теми на страница",
"posts_per_page": "Публикации на страница", "posts_per_page": "Публикации на страница",
"category-topic-sort": "Подреждане на темите в категория",
"topic-post-sort": "Подреждане на публикациите в тема",
"max_items_per_page": "Най-много %1", "max_items_per_page": "Най-много %1",
"acp_language": "Език на администраторската страница", "acp_language": "Език на администраторската страница",
"notifications": "Известия", "notifications": "Известия",
@@ -161,10 +156,6 @@
"info.banned-permanently": "Блокиран за постоянно", "info.banned-permanently": "Блокиран за постоянно",
"info.banned-reason-label": "Причина", "info.banned-reason-label": "Причина",
"info.banned-no-reason": "Няма посочена причина.", "info.banned-no-reason": "Няма посочена причина.",
"info.mute-history": "Скорошна история на заглушаванията",
"info.no-mute-history": "Този потребител никога не е бил заглушаван",
"info.muted-until": "Заглушен до %1",
"info.muted-expiry": "Давност",
"info.muted-no-reason": "Няма посочена причина.", "info.muted-no-reason": "Няма посочена причина.",
"info.username-history": "История на потребителските имена", "info.username-history": "История на потребителските имена",
"info.email-history": "Историята на е-пощите", "info.email-history": "Историята на е-пощите",
@@ -172,8 +163,6 @@
"info.moderation-note.success": "Модераторската бележка е запазена", "info.moderation-note.success": "Модераторската бележка е запазена",
"info.moderation-note.add": "Добавяне на бележка", "info.moderation-note.add": "Добавяне на бележка",
"sessions.description": "На тази страница можете да видите активните си сесии на този форум и да ги анулирате, ако желаете. Можете да анулирате текущата си сесия, като се отпишете от акаунта си.", "sessions.description": "На тази страница можете да видите активните си сесии на този форум и да ги анулирате, ако желаете. Можете да анулирате текущата си сесия, като се отпишете от акаунта си.",
"revoke-session": "Анулиране на сесията",
"browser-version-on-platform": "%1 %2 на %3",
"consent.title": "Вашите права и съгласие", "consent.title": "Вашите права и съгласие",
"consent.lead": "Този обществен форум събира и обработва лична информация.", "consent.lead": "Този обществен форум събира и обработва лична информация.",
"consent.intro": "Използваме тази информация, само за да персонализираме взаимодействието Ви с форума, както и за да свържем публикациите Ви с Вашия потребителски акаунт. По време на регистрацията ще трябва да въведете потребителско име и е-поща, но ако искате, можете да предоставите и допълнителна информация, за да завършите потребителския си профил в уеб сайта.<br /><br />Ние съхраняваме тази информация докато съществува потребителският Ви акаунт. Във всеки един момент можете да оттеглите съгласието си за това, като изтриете акаунта си. Във всеки един момент можете да изискате копие на въведеното от Вас в уеб сайт, чрез страницата за „Права и съгласие“.<br /><br />Ако имате въпроси или притеснения, можете да се свържете с екипа от администратори на форума.", "consent.intro": "Използваме тази информация, само за да персонализираме взаимодействието Ви с форума, както и за да свържем публикациите Ви с Вашия потребителски акаунт. По време на регистрацията ще трябва да въведете потребителско име и е-поща, но ако искате, можете да предоставите и допълнителна информация, за да завършите потребителския си профил в уеб сайта.<br /><br />Ние съхраняваме тази информация докато съществува потребителският Ви акаунт. Във всеки един момент можете да оттеглите съгласието си за това, като изтриете акаунта си. Във всеки един момент можете да изискате копие на въведеното от Вас в уеб сайт, чрез страницата за „Права и съгласие“.<br /><br />Ако имате въпроси или притеснения, можете да се свържете с екипа от администратори на форума.",
@@ -200,6 +189,5 @@
"emailUpdate.intro": "Въведете е-пощата си по-долу. Този форум използва е-пощата за планирани резюмета и известия, както и за възстановяване на акаунта, в случай на забравена парола.", "emailUpdate.intro": "Въведете е-пощата си по-долу. Този форум използва е-пощата за планирани резюмета и известия, както и за възстановяване на акаунта, в случай на забравена парола.",
"emailUpdate.optional": "<strong>Това поле не е задължително</strong>. Не сте длъжен/на да предоставяте адрес на е-поща, но без проверена е-поща, няма да можете да възстановите акаунта си в случай на проблем, нито ще можете да се вписвате с е-пощата си.", "emailUpdate.optional": "<strong>Това поле не е задължително</strong>. Не сте длъжен/на да предоставяте адрес на е-поща, но без проверена е-поща, няма да можете да възстановите акаунта си в случай на проблем, нито ще можете да се вписвате с е-пощата си.",
"emailUpdate.required": "<strong>Това поле е задължително</strong>.", "emailUpdate.required": "<strong>Това поле е задължително</strong>.",
"emailUpdate.change-instructions": "Ще Ви изпратим е-писмо за потвърждение на посочената е-поща, което ще съдържа уникална връзка. Щом последвате тази връзка, притежанието Ви на тази е-поща ще бъде потвърдено и тя ще бъде свързана с акаунта Ви. Ще можете да промените тази е-поща по всяко време, от страницата на акаунта си.", "emailUpdate.change-instructions": "Ще Ви изпратим е-писмо за потвърждение на посочената е-поща, което ще съдържа уникална връзка. Щом последвате тази връзка, притежанието Ви на тази е-поща ще бъде потвърдено и тя ще бъде свързана с акаунта Ви. Ще можете да промените тази е-поща по всяко време, от страницата на акаунта си."
"emailUpdate.password-challenge": "Въведете паролата си, за да потвърдите, че акаунтът е Ваш."
} }

View File

@@ -1,12 +1,11 @@
{ {
"all-users": "Всички потребители",
"latest_users": "Последни потребители", "latest_users": "Последни потребители",
"top_posters": "С най-много публикации", "top_posters": "С най-много публикации",
"most_reputation": "С най-много репутация", "most_reputation": "С най-много репутация",
"most_flags": "С най-много доклади", "most_flags": "С най-много доклади",
"search": "Търсене", "search": "Търсене",
"enter_username": "Въведете потребителско име, което да потърсите", "enter_username": "Въведете потребителско име, което да потърсите",
"search-user-for-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": "Филтриране",

View File

@@ -1,3 +0,0 @@
# The files here are not meant to be edited directly
Please see the &rarr; [Internalization README](../README.md).

View File

@@ -4,6 +4,8 @@
"acp-title": "%1 | NodeBB এডমিন কন্ট্রোল প্যানেল", "acp-title": "%1 | NodeBB এডমিন কন্ট্রোল প্যানেল",
"settings-header-contents": "কনটেন্টস", "settings-header-contents": "কনটেন্টস",
"changes-saved": "Changes 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",
"changes-not-saved-message": "NodeBB encountered a problem saving your changes. (%1)" "changes-not-saved-message": "NodeBB encountered a problem saving your changes. (%1)"
} }

View File

@@ -1,8 +1,5 @@
{ {
"post-cache": "Post Cache", "post-cache": "Post Cache",
"group-cache": "Group Cache",
"local-cache": "Local Cache",
"object-cache": "Object Cache",
"percent-full": "%1% Full", "percent-full": "%1% Full",
"post-cache-size": "Post Cache Size", "post-cache-size": "Post Cache Size",
"items-in-cache": "Items in Cache" "items-in-cache": "Items in Cache"

View File

@@ -1,7 +1,7 @@
{ {
"custom-css": "Custom CSS/SASS", "custom-css": "Custom CSS/LESS",
"custom-css.description": "Enter your own CSS/SASS declarations here, which will be applied after all other styles.", "custom-css.description": "Enter your own CSS/LESS declarations here, which will be applied after all other styles.",
"custom-css.enable": "Enable Custom CSS/SASS", "custom-css.enable": "Enable Custom CSS/LESS",
"custom-js": "Custom Javascript", "custom-js": "Custom Javascript",
"custom-js.description": "Enter your own javascript here. It will be executed after the page is loaded completely.", "custom-js.description": "Enter your own javascript here. It will be executed after the page is loaded completely.",

View File

@@ -83,11 +83,8 @@
"back-to-dashboard": "Back to Dashboard", "back-to-dashboard": "Back to Dashboard",
"details.no-users": "No users have joined within the selected timeframe", "details.no-users": "No users have joined within the selected timeframe",
"details.no-topics": "No topics have been posted within the selected timeframe", "details.no-topics": "No topics have been posted within the selected timeframe",
"details.no-searches": "No searches have been made within the selected timeframe", "details.no-searches": "No searches have been made yet",
"details.no-logins": "No logins have been recorded within the selected timeframe", "details.no-logins": "No logins have been recorded within the selected timeframe",
"details.logins-static": "NodeBB only saves session data for %1 days, and so this table below will only show the most recently active sessions", "details.logins-static": "NodeBB only saves session data for %1 days, and so this table below will only show the most recently active sessions",
"details.logins-login-time": "Login Time", "details.logins-login-time": "Login Time"
"start": "Start",
"end": "End",
"filter": "Filter"
} }

View File

@@ -8,9 +8,9 @@
"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?",

View File

@@ -1,10 +1,8 @@
{ {
"administrators": "Administrators", "administrators": "Administrators",
"global-moderators": "Global Moderators", "global-moderators": "Global Moderators",
"moderators": "Moderators",
"no-global-moderators": "No Global Moderators", "no-global-moderators": "No Global Moderators",
"no-sub-categories": "No subcategories", "moderators-of-category": "%1 Moderators",
"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

@@ -39,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!"
} }

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