Compare commits

..

3 Commits

Author SHA1 Message Date
Barış Soner Uşaklı
3ef045f7d1 test: lower dep 2023-05-22 12:28:26 -04:00
Barış Soner Uşaklı
ea7b68db71 test: cswsh 2023-05-22 12:19:14 -04:00
Barış Soner Uşaklı
b7e35408f4 change error 2023-05-22 12:09:00 -04:00
4424 changed files with 65112 additions and 122597 deletions

View File

View File

View File

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

20
.eslintignore Normal file
View File

@@ -0,0 +1,20 @@
node_modules/
*.sublime-project
*.sublime-workspace
.project
.vagrant
.DS_Store
logs/
/public/templates
/public/uploads
/public/vendor
/public/src/modules/string.js
.idea/
.vscode/
*.ipr
*.iws
/coverage
/build
.eslintrc
test/files
*.min.js

3
.eslintrc Normal file
View File

@@ -0,0 +1,3 @@
{
"extends": "nodebb"
}

View File

@@ -16,119 +16,46 @@ permissions:
packages: write packages: write
jobs: jobs:
build: release:
strategy:
matrix:
include:
- os: ubuntu-latest
platforms: linux/amd64
required: true
- os: ubuntu-24.04-arm
platforms: linux/arm64
required: true
- os: ubuntu-24.04-arm
platforms: linux/arm/v7
required: false
continue-on-error: ${{ !matrix.required }}
runs-on: ${{ matrix.os }}
steps:
- name: Prepare
run: |
platform=${{ matrix.platforms }}
echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV
echo "IMAGE=ghcr.io/${GITHUB_REPOSITORY@L}" >> $GITHUB_ENV
- uses: actions/checkout@v5
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Docker meta
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.IMAGE }}
- name: Cache node_modules
id: cache-node-modules
uses: actions/cache@v4
with:
path: var-cache-node-modules
key: var-cache-node-modules-${{ hashFiles('Dockerfile', 'install/package.json') }}
- name: Build and push Docker images
id: build
uses: docker/build-push-action@v6
with:
cache-from: type=gha
cache-to: type=gha,mode=min
context: .
file: ./Dockerfile
platforms: ${{ matrix.platforms }}
labels: ${{ steps.meta.outputs.labels }}
tags: ${{ env.IMAGE }}
outputs: type=image,push-by-digest=true,name-canonical=true,push=true
- name: Export digest
run: |
mkdir -p ${{ runner.temp }}/digests
digest="${{ steps.build.outputs.digest }}"
touch "${{ runner.temp }}/digests/${digest#sha256:}"
- name: Upload digest
uses: actions/upload-artifact@v4
with:
name: digests-${{ env.PLATFORM_PAIR }}
path: ${{ runner.temp }}/digests/*
if-no-files-found: error
retention-days: 1
merge:
runs-on: ubuntu-latest runs-on: ubuntu-latest
needs:
- build
steps: steps:
- name: Prepare
run: | - uses: actions/checkout@v3
echo "IMAGE=ghcr.io/${GITHUB_REPOSITORY@L}" >> $GITHUB_ENV
echo "CURRENT_DATE_NST=$(date +'%Y%m%d-%H%M%S' -d '-3 hours -30 minutes')" >> $GITHUB_ENV
- name: Download digests
uses: actions/download-artifact@v5
with: with:
path: ${{ runner.temp }}/digests fetch-depth: 0
pattern: digests-*
merge-multiple: true - name: Set up QEMU
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx - name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3 uses: docker/setup-buildx-action@v2
- name: Login to GitHub Container Registry - name: Login to GitHub Container Registry
uses: docker/login-action@v3 uses: docker/login-action@v2
with: with:
registry: ghcr.io registry: ghcr.io
username: ${{ github.repository_owner }} username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }} password: ${{ secrets.GITHUB_TOKEN }}
- name: Docker meta - name: Docker meta
id: meta id: meta
uses: docker/metadata-action@v5 uses: docker/metadata-action@v4
with: with:
images: ${{ env.IMAGE }} images: ghcr.io/${{ github.repository }}
tags: | tags: |
type=semver,pattern={{version}} type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}} type=semver,pattern={{major}}.{{minor}}
type=semver,pattern={{major}}.x type=semver,pattern={{major}}.x
type=raw,value=latest,enable={{is_default_branch}} type=raw,value=latest,enable={{is_default_branch}}
type=ref,event=branch,enable=${{ github.event.repository.default_branch != github.ref }} type=ref,event=branch,enable=${{ github.event.repository.default_branch != github.ref }}
type=raw,value=${{ env.CURRENT_DATE_NST }}
flavor: | - name: Build and push Docker images
latest=true uses: docker/build-push-action@v4
- name: Create manifest list and push with:
working-directory: ${{ runner.temp }}/digests context: .
run: | file: ./Dockerfile
docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \ push: true
$(printf '${{ env.IMAGE }}@sha256:%s ' *) tags: ${{ steps.meta.outputs.tags }}
- name: Inspect image platforms: linux/amd64,linux/arm64,linux/arm/v7
run: | cache-from: type=gha
docker buildx imagetools inspect ${{ env.IMAGE }}:${{ steps.meta.outputs.version }} cache-to: type=gha,mode=max

View File

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

5
.gitignore vendored
View File

@@ -69,7 +69,4 @@ package-lock.json
/package.json /package.json
*.mongodb *.mongodb
link-plugins.sh link-plugins.sh
test.sh test.sh
.docker/**
!**/.gitkeep

5702
.tx/config

File diff suppressed because it is too large Load Diff

View File

@@ -1,22 +0,0 @@
'use strict';
const { readFile, writeFile } = require('fs').promises;
(async () => {
const contents = await readFile('./config', { encoding: 'utf-8' });
const blocks = contents
.split('\n\n')
.map((block) => {
block = block.split('\n').sort((a, b) => {
if (!a.startsWith('trans') || !b.startsWith('trans')) {
return 0;
}
return a.localeCompare(b);
})
return block.join('\n');
});
await writeFile('./config', blocks.join('\n\n'), { encoding: 'utf-8' });
})();

File diff suppressed because it is too large Load Diff

View File

@@ -1,76 +1,41 @@
FROM node:lts as build FROM --platform=$BUILDPLATFORM node:lts as npm
RUN mkdir -p /usr/src/build && \
chown -R node:node /usr/src/build
WORKDIR /usr/src/build
ARG NODE_ENV
ENV NODE_ENV $NODE_ENV
COPY --chown=node:node install/package.json /usr/src/build/package.json
USER node
RUN npm install --omit=dev
FROM node:lts
RUN mkdir -p /usr/src/app && \
chown -R node:node /usr/src/app
WORKDIR /usr/src/app
ARG NODE_ENV
ENV NODE_ENV $NODE_ENV
COPY --chown=node:node --from=npm /usr/src/build /usr/src/app
USER node
RUN npm rebuild && \
npm cache clean --force
COPY --chown=node:node . /usr/src/app
ENV NODE_ENV=production \ ENV NODE_ENV=production \
DAEMON=false \ daemon=false \
SILENT=false \ silent=false
USER=nodebb \
UID=1001 \
GID=1001
WORKDIR /usr/src/app/
COPY . /usr/src/app/
# Install corepack to allow usage of other package managers
RUN corepack enable
# Removing unnecessary files for us
RUN find . -mindepth 1 -maxdepth 1 -name '.*' ! -name '.' ! -name '..' -exec bash -c 'echo "Deleting {}"; rm -rf {}' \;
# Prepage package.json
RUN cp /usr/src/app/install/package.json /usr/src/app/
RUN apt-get update \
&& DEBIAN_FRONTEND=noninteractive \
apt-get -y --no-install-recommends install \
tini
RUN groupadd --gid ${GID} ${USER} \
&& useradd --uid ${UID} --gid ${GID} --home-dir /usr/src/app/ --shell /bin/bash ${USER} \
&& chown -R ${USER}:${USER} /usr/src/app/
USER ${USER}
RUN npm install --omit=dev \
&& rm -rf .npm
# TODO: generate lockfiles for each package manager
## pnpm import \
FROM node:lts-slim AS final
ENV NODE_ENV=production \
DAEMON=false \
SILENT=false \
USER=nodebb \
UID=1001 \
GID=1001
WORKDIR /usr/src/app/
RUN corepack enable \
&& groupadd --gid ${GID} ${USER} \
&& useradd --uid ${UID} --gid ${GID} --home-dir /usr/src/app/ --shell /bin/bash ${USER} \
&& mkdir -p /usr/src/app/logs/ /opt/config/ \
&& chown -R ${USER}:${USER} /usr/src/app/ /opt/config/
COPY --from=build --chown=${USER}:${USER} /usr/src/app/ /usr/src/app/install/docker/setup.json /usr/src/app/
COPY --from=build --chown=${USER}:${USER} /usr/bin/tini /usr/src/app/install/docker/entrypoint.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/entrypoint.sh \
&& chmod +x /usr/local/bin/tini
# TODO: Have docker-compose use environment variables to create files like setup.json and config.json.
# COPY --from=hairyhenderson/gomplate:stable /gomplate /usr/local/bin/gomplate
USER ${USER}
EXPOSE 4567 EXPOSE 4567
VOLUME ["/usr/src/app/node_modules", "/usr/src/app/build", "/usr/src/app/public/uploads", "/opt/config/"] CMD test -n "${SETUP}" && ./nodebb setup || node ./nodebb build; node ./nodebb start
# Utilising tini as our init system within the Docker container for graceful start-up and termination.
# Tini serves as an uncomplicated init system, adept at managing the reaping of zombie processes and forwarding signals.
# This approach is crucial to circumvent issues with unmanaged subprocesses and signal handling in containerised environments.
# By integrating tini, we enhance the reliability and stability of our Docker containers.
# Ensures smooth start-up and shutdown processes, and reliable, safe handling of signal processing.
ENTRYPOINT ["tini", "--", "entrypoint.sh"]

View File

@@ -49,8 +49,8 @@ module.exports = function (grunt) {
if (!pluginList.includes('nodebb-plugin-composer-default')) { if (!pluginList.includes('nodebb-plugin-composer-default')) {
pluginList.push('nodebb-plugin-composer-default'); pluginList.push('nodebb-plugin-composer-default');
} }
if (!pluginList.includes('nodebb-theme-harmony')) { if (!pluginList.includes('nodebb-theme-persona')) {
pluginList.push('nodebb-theme-harmony'); pluginList.push('nodebb-theme-persona');
} }
} }
@@ -173,10 +173,7 @@ module.exports = function (grunt) {
winston.error(err.stack); winston.error(err.stack);
} }
if (worker) { if (worker) {
worker.send({ worker.send({ compiling: compiling });
compiling: compiling,
livereload: true, // Send livereload event via Socket.IO for instant browser refresh
});
} }
}); });
}); });

View File

@@ -39,15 +39,14 @@ Our minimalist "Harmony" theme gets you going right away, no coding experience r
NodeBB requires the following software to be installed: NodeBB requires the following software to be installed:
* A version of Node.js at least 20 or greater ([installation/upgrade instructions](https://github.com/nodesource/distributions)) * A version of Node.js at least 16 or greater ([installation/upgrade instructions](https://github.com/nodesource/distributions))
* MongoDB, version 5 or greater **or** Redis, version 7.2 or greater * MongoDB, version 3.6 or greater **or** Redis, version 2.8.9 or greater
* If you are using [clustering](https://docs.nodebb.org/configuring/scaling/) you need Redis installed and configured. * If you are using [clustering](https://docs.nodebb.org/configuring/scaling/) you need Redis installed and configured.
* nginx, version 1.3.13 or greater (**only if** intending to use nginx to proxy requests to a NodeBB) * nginx, version 1.3.13 or greater (**only if** intending to use nginx to proxy requests to a NodeBB)
## Installation ## Installation
[Please refer to platform-specific installation documentation](https://docs.nodebb.org/installing/os). [Please refer to platform-specific installation documentation](https://docs.nodebb.org/installing/os)
If installing via the cloud (or using Docker), [please see cloud-based installation documentation](https://docs.nodebb.org/installing/cloud/).
## Securing NodeBB ## Securing NodeBB
@@ -60,7 +59,6 @@ It is important to ensure that your NodeBB and database servers are secured. Bea
2. Use `iptables` to secure your server from unintended open ports. In Ubuntu, `ufw` provides a friendlier interface to working with `iptables`. 2. Use `iptables` to secure your server from unintended open ports. In Ubuntu, `ufw` provides a friendlier interface to working with `iptables`.
* e.g. If your NodeBB is proxied, no ports should be open except 80 (and possibly 22, for SSH access) * e.g. If your NodeBB is proxied, no ports should be open except 80 (and possibly 22, for SSH access)
## Upgrading NodeBB ## Upgrading NodeBB
Detailed upgrade instructions are listed in [Upgrading NodeBB](https://docs.nodebb.org/configuring/upgrade/) Detailed upgrade instructions are listed in [Upgrading NodeBB](https://docs.nodebb.org/configuring/upgrade/)

View File

@@ -1,78 +0,0 @@
FROM node:lts AS git
ENV USER=nodebb \
UID=1001 \
GID=1001
WORKDIR /usr/src/app/
RUN groupadd --gid ${GID} ${USER} \
&& useradd --uid ${UID} --gid ${GID} --home-dir /usr/src/app/ --shell /bin/bash ${USER} \
&& chown -R ${USER}:${USER} /usr/src/app/
RUN apt-get update \
&& apt-get -y --no-install-recommends install tini
USER ${USER}
# Change to the git branch you want to test
RUN git clone --recurse-submodules -j8 --depth 1 https://github.com/NodeBB/NodeBB.git .
RUN find . -mindepth 1 -maxdepth 1 -name '.*' ! -name '.' ! -name '..' -exec bash -c 'echo "Deleting {}"; rm -rf {}' \;
FROM node:lts AS node_modules_touch
ENV NODE_ENV=development \
USER=nodebb \
UID=1001 \
GID=1001
WORKDIR /usr/src/app/
RUN corepack enable \
&& groupadd --gid ${GID} ${USER} \
&& useradd --uid ${UID} --gid ${GID} --home-dir /usr/src/app/ --shell /bin/bash ${USER} \
&& chown -R ${USER}:${USER} /usr/src/app/
COPY --from=git --chown=${USER}:${USER} /usr/src/app/install/package.json /usr/src/app/
USER ${USER}
RUN npm install \
&& rm -rf .npm
FROM node:lts-slim AS final
ENV NODE_ENV=development \
DAEMON=false \
SILENT=false \
USER=nodebb \
UID=1001 \
GID=1001
WORKDIR /usr/src/app/
RUN corepack enable \
&& groupadd --gid ${GID} ${USER} \
&& useradd --uid ${UID} --gid ${GID} --home-dir /usr/src/app/ --shell /bin/bash ${USER} \
&& mkdir -p /usr/src/app/logs/ /opt/config/ \
&& chown -R ${USER}:${USER} /usr/src/app/ /opt/config/
COPY --from=git --chown=${USER}:${USER} /usr/src/app/ /usr/src/app/install/docker/setup.json /usr/src/app/
COPY --from=git --chown=${USER}:${USER} /usr/bin/tini /usr/src/app/install/docker/entrypoint.sh /usr/local/bin/
COPY --from=node_modules_touch --chown=${USER}:${USER} /usr/src/app/ /usr/src/app/
COPY --from=git --chown=${USER}:${USER} /usr/src/app/ /usr/src/app/
RUN chmod +x /usr/local/bin/entrypoint.sh \
&& chmod +x /usr/local/bin/tini
# TODO: Have docker-compose use environment variables to create files like setup.json and config.json.
# COPY --from=hairyhenderson/gomplate:stable /gomplate /usr/local/bin/gomplate
USER ${USER}
EXPOSE 4567
VOLUME ["/usr/src/app/node_modules", "/usr/src/app/build", "/usr/src/app/public/uploads", "/opt/config/"]
ENTRYPOINT ["tini", "--", "entrypoint.sh"]

View File

@@ -1,70 +0,0 @@
version: '3.8'
services:
nodebb:
build: .
# image: ghcr.io/nodebb/nodebb:latest
restart: unless-stopped
ports:
- '4567:4567' # comment this out if you don't want to expose NodeBB to the host, or change the first number to any port you want
volumes:
- nodebb-build:/usr/src/app/build
- nodebb-uploads:/usr/src/app/public/uploads
- nodebb-config:/opt/config
- ./install/docker/setup.json:/usr/src/app/setup.json
postgres:
image: postgres:17.6-alpine
restart: unless-stopped
environment:
POSTGRES_USER: nodebb
POSTGRES_PASSWORD: nodebb
POSTGRES_DB: nodebb
volumes:
- postgres-data:/var/lib/postgresql/data
redis:
image: redis:8.2.1-alpine
restart: unless-stopped
command: ['redis-server', '--appendonly', 'yes', '--loglevel', 'warning']
# command: ["redis-server", "--save", "60", "1", "--loglevel", "warning"] # uncomment if you want to use snapshotting instead of AOF
volumes:
- redis-data:/data
profiles:
- redis
volumes:
postgres-data:
driver: local
driver_opts:
o: bind
type: none
device: ./.docker/database/postgresql/data
redis-data:
driver: local
driver_opts:
o: bind
type: none
device: ./.docker/database/redis
nodebb-build:
driver: local
driver_opts:
o: bind
type: none
device: ./.docker/build
nodebb-uploads:
driver: local
driver_opts:
o: bind
type: none
device: ./.docker/public/uploads
nodebb-config:
driver: local
driver_opts:
o: bind
type: none
device: ./.docker/config

View File

@@ -1,51 +0,0 @@
version: '3.8'
services:
nodebb:
build: .
# image: ghcr.io/nodebb/nodebb:latest
restart: unless-stopped
ports:
- '4567:4567' # comment this out if you don't want to expose NodeBB to the host, or change the first number to any port you want
volumes:
- nodebb-build:/usr/src/app/build
- nodebb-uploads:/usr/src/app/public/uploads
- nodebb-config:/opt/config
- ./install/docker/setup.json:/usr/src/app/setup.json
redis:
image: redis:8.2.1-alpine
restart: unless-stopped
command: ['redis-server', '--appendonly', 'yes', '--loglevel', 'warning']
# command: ["redis-server", "--save", "60", "1", "--loglevel", "warning"] # uncomment if you want to use snapshotting instead of AOF
volumes:
- redis-data:/data
volumes:
redis-data:
driver: local
driver_opts:
o: bind
type: none
device: ./.docker/database/redis
nodebb-build:
driver: local
driver_opts:
o: bind
type: none
device: ./.docker/build
nodebb-uploads:
driver: local
driver_opts:
o: bind
type: none
device: ./.docker/public/uploads
nodebb-config:
driver: local
driver_opts:
o: bind
type: none
device: ./.docker/config

View File

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

View File

@@ -1,65 +0,0 @@
'use strict';
import serverConfig from 'eslint-config-nodebb';
import publicConfig from 'eslint-config-nodebb/public';
import commonRules from 'eslint-config-nodebb/common';
import { defineConfig } from 'eslint/config';
import stylisticJs from '@stylistic/eslint-plugin'
import js from '@eslint/js';
import globals from 'globals';
export default defineConfig([
{
ignores: [
'node_modules/',
'.project',
'.vagrant',
'.DS_Store',
'.tx',
'logs/',
'public/uploads/',
'public/vendor/',
'.idea/',
'.vscode/',
'*.ipr',
'*.iws',
'coverage/',
'build/',
'test/files/',
'*.min.js',
'install/docker/',
],
},
// tests
{
plugins: {
js,
'@stylistic/js': stylisticJs,
},
extends: ['js/recommended'],
files: ['test/**/*.js'],
languageOptions: {
ecmaVersion: 2020,
sourceType: 'commonjs',
globals: {
...globals.node,
...globals.browser,
it: 'readonly',
describe: 'readonly',
before: 'readonly',
beforeEach: 'readonly',
after: 'readonly',
afterEach: 'readonly',
},
},
rules: {
...commonRules,
'no-unused-vars': 'off',
'no-prototype-builtins': 'off',
}
},
...publicConfig,
...serverConfig
]);

View File

@@ -20,14 +20,12 @@
"disableChat": 0, "disableChat": 0,
"chatEditDuration": 0, "chatEditDuration": 0,
"chatDeleteDuration": 0, "chatDeleteDuration": 0,
"chatMessageDelay": 2000, "chatMessageDelay": 200,
"newbieChatMessageDelay": 120000,
"notificationSendDelay": 60, "notificationSendDelay": 60,
"newbieReputationThreshold": 3, "newbiePostDelayThreshold": 3,
"postQueue": 0, "postQueue": 0,
"postQueueReputationThreshold": 0, "postQueueReputationThreshold": 0,
"groupsExemptFromPostQueue": ["administrators", "Global Moderators"], "groupsExemptFromPostQueue": ["administrators", "Global Moderators"],
"groupsExemptFromNewUserRestrictions": ["administrators", "Global Moderators"],
"groupsExemptFromMaintenanceMode": ["administrators", "Global Moderators"], "groupsExemptFromMaintenanceMode": ["administrators", "Global Moderators"],
"minimumPostLength": 8, "minimumPostLength": 8,
"maximumPostLength": 32767, "maximumPostLength": 32767,
@@ -36,23 +34,22 @@
"maximumTagsPerTopic": 5, "maximumTagsPerTopic": 5,
"minimumTagLength": 3, "minimumTagLength": 3,
"maximumTagLength": 15, "maximumTagLength": 15,
"undoTimeout": 0, "undoTimeout": 10000,
"allowTopicsThumbnail": 1, "allowTopicsThumbnail": 1,
"registrationType": "normal", "registrationType": "normal",
"registrationApprovalType": "normal", "registrationApprovalType": "normal",
"allowAccountDelete": 1, "allowAccountDelete": 1,
"privateUploads": 0, "privateUploads": 0,
"allowedFileExtensions": "png,jpg,bmp,txt,webp,webm,mp4,gif", "allowedFileExtensions": "png,jpg,bmp,txt",
"uploadRateLimitThreshold": 10, "uploadRateLimitThreshold": 10,
"uploadRateLimitCooldown": 60, "uploadRateLimitCooldown": 60,
"allowUserHomePage": 1, "allowUserHomePage": 1,
"allowMultipleBadges": 1, "allowMultipleBadges": 0,
"maximumFileSize": 2048, "maximumFileSize": 2048,
"stripEXIFData": 1, "stripEXIFData": 1,
"orphanExpiryDays": 0, "orphanExpiryDays": 0,
"resizeImageWidthThreshold": 2000, "resizeImageWidthThreshold": 2000,
"resizeImageWidth": 760, "resizeImageWidth": 760,
"resizeImageKeepOriginal": 1,
"rejectImageWidth": 5000, "rejectImageWidth": 5000,
"rejectImageHeight": 5000, "rejectImageHeight": 5000,
"resizeImageQuality": 80, "resizeImageQuality": 80,
@@ -67,8 +64,6 @@
"maximumAboutMeLength": 1000, "maximumAboutMeLength": 1000,
"maximumUsersInChatRoom": 0, "maximumUsersInChatRoom": 0,
"maximumChatMessageLength": 1000, "maximumChatMessageLength": 1000,
"maximumRemoteChatMessageLength": 5000,
"maximumChatRoomNameLength": 50,
"maximumProfileImageSize": 256, "maximumProfileImageSize": 256,
"maximumCoverImageSize": 2048, "maximumCoverImageSize": 2048,
"profileImageDimension": 200, "profileImageDimension": 200,
@@ -76,7 +71,7 @@
"profile:keepAllUserImages": 0, "profile:keepAllUserImages": 0,
"gdpr_enabled": 1, "gdpr_enabled": 1,
"allowProfileImageUploads": 1, "allowProfileImageUploads": 1,
"teaserPost": "last-post", "teaserPost": "last-reply",
"showPostPreviewsOnHover": 1, "showPostPreviewsOnHover": 1,
"allowPrivateGroups": 1, "allowPrivateGroups": 1,
"unreadCutoff": 2, "unreadCutoff": 2,
@@ -93,7 +88,6 @@
"min:rep:chat": 0, "min:rep:chat": 0,
"min:rep:downvote": 0, "min:rep:downvote": 0,
"min:rep:upvote": 0, "min:rep:upvote": 0,
"min:rep:post-links": 0,
"min:rep:flag": 0, "min:rep:flag": 0,
"min:rep:profile-picture": 0, "min:rep:profile-picture": 0,
"min:rep:cover-picture": 0, "min:rep:cover-picture": 0,
@@ -101,21 +95,16 @@
"min:rep:aboutme": 0, "min:rep:aboutme": 0,
"min:rep:signature": 0, "min:rep:signature": 0,
"flags:limitPerTarget": 0, "flags:limitPerTarget": 0,
"flags:postFlagsPerDay": 10,
"flags:userFlagsPerDay": 10,
"flags:autoFlagOnDownvoteThreshold": 0, "flags:autoFlagOnDownvoteThreshold": 0,
"flags:actionOnResolve": "rescind", "flags:actionOnResolve": "rescind",
"flags:actionOnReject": "rescind", "flags:actionOnReject": "rescind",
"notificationType_upvote": "notification", "notificationType_upvote": "notification",
"notificationType_new-topic": "notification", "notificationType_new-topic": "notification",
"notificationType_new-topic-with-tag": "notification",
"notificationType_new-topic-in-category": "notification",
"notificationType_new-reply": "notification", "notificationType_new-reply": "notification",
"notificationType_post-edit": "notification", "notificationType_post-edit": "notification",
"notificationType_follow": "notification", "notificationType_follow": "notification",
"notificationType_new-chat": "notification", "notificationType_new-chat": "notification",
"notificationType_new-group-chat": "notification", "notificationType_new-group-chat": "notification",
"notificationType_new-public-chat": "none",
"notificationType_group-invite": "notification", "notificationType_group-invite": "notification",
"notificationType_group-leave": "notification", "notificationType_group-leave": "notification",
"notificationType_group-request-membership": "notification", "notificationType_group-request-membership": "notification",
@@ -142,13 +131,11 @@
"sitemapTopics": 500, "sitemapTopics": 500,
"maintenanceMode": 0, "maintenanceMode": 0,
"maintenanceModeStatus": 503, "maintenanceModeStatus": 503,
"upvoteVisibility": "all", "votesArePublic": 0,
"downvoteVisibility": "privileged",
"maximumInvites": 0, "maximumInvites": 0,
"username:disableEdit": 0, "username:disableEdit": 0,
"email:disableEdit": 0, "email:disableEdit": 0,
"email:smtpTransport:pool": 0, "email:smtpTransport:pool": 0,
"email:smtpTransport:allow-self-signed": 0,
"hideFullname": 0, "hideFullname": 0,
"hideEmail": 0, "hideEmail": 0,
"showFullnameAsDisplayName": 0, "showFullnameAsDisplayName": 0,
@@ -185,7 +172,7 @@
"onlineCutoff": 30, "onlineCutoff": 30,
"timeagoCutoff": 30, "timeagoCutoff": 30,
"necroThreshold": 7, "necroThreshold": 7,
"categoryWatchState": "tracking", "categoryWatchState": "watching",
"submitPluginUsage": 1, "submitPluginUsage": 1,
"showAverageApprovalTime": 1, "showAverageApprovalTime": 1,
"autoApproveTime": 0, "autoApproveTime": 0,
@@ -196,12 +183,5 @@
"composer:allowPluginHelp": 1, "composer:allowPluginHelp": 1,
"maxReconnectionAttempts": 5, "maxReconnectionAttempts": 5,
"reconnectionDelay": 1500, "reconnectionDelay": 1500,
"disableCustomUserSkins": 0, "disableCustomUserSkins": 0
"activitypubEnabled": 1, }
"activitypubAllowLoopback": 0,
"activitypubProbe": 1,
"activitypubProbeTimeout": 2000,
"activitypubContentPruneDays": 30,
"activitypubUserPruneDays": 7,
"activitypubFilter": 0
}

View File

@@ -41,14 +41,6 @@
"textClass": "d-lg-none", "textClass": "d-lg-none",
"text": "[[global:header.popular]]" "text": "[[global:header.popular]]"
}, },
{
"route": "/world",
"title": "[[global:header.world]]",
"enabled": true,
"iconClass": "fa-globe",
"textClass": "d-lg-none",
"text": "[[global:header.world]]"
},
{ {
"route": "/users", "route": "/users",
"title": "[[global:header.users]]", "title": "[[global:header.users]]",

View File

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

View File

@@ -1,198 +0,0 @@
#!/bin/bash
set -e
# Function to set default values for environment variables
set_defaults() {
export CONFIG_DIR="${CONFIG_DIR:-/opt/config}"
export CONFIG="$CONFIG_DIR/config.json"
export NODEBB_INIT_VERB="${NODEBB_INIT_VERB:-install}"
export NODEBB_BUILD_VERB="${NODEBB_BUILD_VERB:-build}"
export START_BUILD="${START_BUILD:-${FORCE_BUILD_BEFORE_START:-false}}"
export SETUP="${SETUP:-}"
export PACKAGE_MANAGER="${PACKAGE_MANAGER:-npm}"
export OVERRIDE_UPDATE_LOCK="${OVERRIDE_UPDATE_LOCK:-false}"
}
# Function to check if a directory exists and is writable
check_directory() {
local dir="$1"
if [ ! -d "$dir" ]; then
echo "Error: Directory $dir does not exist. Creating..."
mkdir -p "$dir" || {
echo "Error: Failed to create directory $dir"
exit 1
}
fi
if [ ! -w "$dir" ]; then
echo "Warning: No write permission for directory $dir, attempting to fix..."
chown -R $USER:$USER "$dir" || true # attempt to change ownership, do not exit on failure
chmod -R 760 "$dir" || true # attempt to change permissions, do not exit on failure
if [ ! -w "$dir" ]; then
echo "Error: No write permission for directory $dir. Exiting..."
exit 1
fi
fi
}
# Function to copy or link package.json and lock files based on package manager
copy_or_link_files() {
local src_dir="$1"
local dest_dir="$2"
local package_manager="$3"
local lock_file
case "$package_manager" in
yarn) lock_file="yarn.lock" ;;
npm) lock_file="package-lock.json" ;;
pnpm) lock_file="pnpm-lock.yaml" ;;
*)
echo "Unknown package manager: $package_manager"
exit 1
;;
esac
# Check if source and destination files are the same
if [ "$(realpath "$src_dir/package.json")" != "$(realpath "$dest_dir/package.json")" ] || [ "$OVERRIDE_UPDATE_LOCK" = true ]; then
cp "$src_dir/package.json" "$dest_dir/package.json"
fi
if [ "$(realpath "$src_dir/$lock_file")" != "$(realpath "$dest_dir/$lock_file")" ] || [ "$OVERRIDE_UPDATE_LOCK" = true ]; then
cp "$src_dir/$lock_file" "$dest_dir/$lock_file"
fi
# Remove unnecessary lock files in src_dir
rm -f "$src_dir/"{yarn.lock,package-lock.json,pnpm-lock.yaml}
# Symbolically link the copied files in src_dir to dest_dir
ln -fs "$dest_dir/package.json" "$src_dir/package.json"
ln -fs "$dest_dir/$lock_file" "$src_dir/$lock_file"
}
# Function to install dependencies using pnpm
install_dependencies() {
case "$PACKAGE_MANAGER" in
yarn) yarn install || {
echo "Failed to install dependencies with yarn"
exit 1
} ;;
npm) npm install || {
echo "Failed to install dependencies with npm"
exit 1
} ;;
pnpm) pnpm install || {
echo "Failed to install dependencies with pnpm"
exit 1
} ;;
*)
echo "Unknown package manager: $PACKAGE_MANAGER"
exit 1
;;
esac
}
# Function to start setup session
start_setup_session() {
local config="$1"
echo "Starting setup session"
exec /usr/src/app/nodebb setup --config="$config"
}
# Handle building and upgrading NodeBB
build_forum() {
local config="$1"
local start_build="$2"
local package_hash=$(md5sum install/package.json | head -c 32)
if [ "$package_hash" != "$(cat $CONFIG_DIR/install_hash.md5 || true)" ]; then
echo "package.json was updated. Upgrading..."
/usr/src/app/nodebb upgrade --config="$config" || {
echo "Failed to build NodeBB. Exiting..."
exit 1
}
elif [ "$start_build" = true ]; then
echo "Build before start is enabled. Building..."
/usr/src/app/nodebb "${NODEBB_BUILD_VERB}" --config="$config" || {
echo "Failed to build NodeBB. Exiting..."
exit 1
}
else
echo "No changes in package.json. Skipping build..."
return
fi
echo -n $package_hash > $CONFIG_DIR/install_hash.md5
}
# Function to start forum
start_forum() {
local config="$1"
local start_build="$2"
build_forum "$config" "$start_build"
case "$PACKAGE_MANAGER" in
yarn)
yarn start --config="$config" --no-silent --no-daemon || {
echo "Failed to start forum with yarn"
exit 1
}
;;
npm)
npm start -- --config="$config" --no-silent --no-daemon || {
echo "Failed to start forum with npm"
exit 1
}
;;
pnpm)
pnpm start -- --config="$config" --no-silent --no-daemon || {
echo "Failed to start forum with pnpm"
exit 1
}
;;
*)
echo "Unknown package manager: $PACKAGE_MANAGER"
exit 1
;;
esac
}
# Function to start installation session
start_installation_session() {
local nodebb_init_verb="$1"
local config="$2"
echo "Config file not found at $config"
echo "Starting installation session"
exec /usr/src/app/nodebb "$nodebb_init_verb" --config="$config"
}
# Function for debugging and logging
debug_log() {
local message="$1"
echo "DEBUG: $message"
}
# Main function
main() {
set_defaults
check_directory "$CONFIG_DIR"
copy_or_link_files /usr/src/app "$CONFIG_DIR" "$PACKAGE_MANAGER"
install_dependencies
debug_log "PACKAGE_MANAGER: $PACKAGE_MANAGER"
debug_log "CONFIG location: $CONFIG"
debug_log "START_BUILD: $START_BUILD"
if [ -n "$SETUP" ]; then
start_setup_session "$CONFIG"
fi
if [ -f "$CONFIG" ]; then
start_forum "$CONFIG" "$START_BUILD"
else
start_installation_session "$NODEBB_INIT_VERB" "$CONFIG"
fi
}
# Execute main function
main "$@"

View File

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

View File

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

View File

@@ -2,7 +2,7 @@
"name": "nodebb", "name": "nodebb",
"license": "GPL-3.0", "license": "GPL-3.0",
"description": "NodeBB Forum", "description": "NodeBB Forum",
"version": "4.6.2", "version": "3.1.4",
"homepage": "https://www.nodebb.org", "homepage": "https://www.nodebb.org",
"repository": { "repository": {
"type": "git", "type": "git",
@@ -29,166 +29,157 @@
}, },
"dependencies": { "dependencies": {
"@adactive/bootstrap-tagsinput": "0.8.2", "@adactive/bootstrap-tagsinput": "0.8.2",
"@fontsource-utils/scss": "0.2.2", "@isaacs/ttlcache": "1.4.0",
"@fontsource/inter": "5.2.8", "@popperjs/core": "2.11.7",
"@fontsource/poppins": "5.2.7", "ace-builds": "1.21.1",
"@fortawesome/fontawesome-free": "6.7.2", "archiver": "5.3.1",
"@isaacs/ttlcache": "1.4.1", "async": "3.2.4",
"@nodebb/spider-detector": "2.0.3", "autoprefixer": "10.4.14",
"@popperjs/core": "2.11.8", "bcryptjs": "2.4.3",
"@textcomplete/contenteditable": "0.1.13", "benchpressjs": "2.5.1",
"@textcomplete/core": "0.1.13", "body-parser": "1.20.2",
"@textcomplete/textarea": "0.1.13", "bootbox": "6.0.0",
"ace-builds": "1.43.3", "bootstrap": "5.2.3",
"archiver": "7.0.1", "bootswatch": "5.2.3",
"async": "3.2.6",
"autoprefixer": "10.4.21",
"bcryptjs": "3.0.2",
"benchpressjs": "2.5.5",
"body-parser": "2.2.0",
"bootbox": "6.0.4",
"bootstrap": "5.3.8",
"bootswatch": "5.3.8",
"chalk": "4.1.2", "chalk": "4.1.2",
"chart.js": "4.5.0", "chart.js": "2.9.4",
"cli-graph": "3.2.2", "cli-graph": "3.2.2",
"clipboard": "2.0.11", "clipboard": "2.0.11",
"commander": "14.0.1", "colors": "1.4.0",
"compare-versions": "6.1.1", "commander": "10.0.1",
"compression": "1.8.1", "compare-versions": "5.0.3",
"compression": "1.7.4",
"connect-flash": "0.1.1", "connect-flash": "0.1.1",
"connect-mongo": "5.1.0", "connect-mongo": "5.0.0",
"connect-pg-simple": "10.0.0", "connect-multiparty": "2.2.0",
"connect-redis": "9.0.0", "connect-pg-simple": "8.0.0",
"cookie-parser": "1.4.7", "connect-redis": "7.1.0",
"cron": "4.3.3", "cookie-parser": "1.4.6",
"cropperjs": "1.6.2", "cron": "2.3.0",
"csrf-sync": "4.2.1", "cropperjs": "1.5.13",
"csrf-sync": "4.0.1",
"daemon": "1.1.0", "daemon": "1.1.0",
"diff": "8.0.2", "diff": "5.1.0",
"esbuild": "0.25.10", "esbuild": "0.17.19",
"express": "4.21.2", "express": "4.18.2",
"express-session": "1.18.2", "express-session": "1.17.3",
"express-useragent": "1.0.15", "express-useragent": "1.0.15",
"fetch-cookie": "3.1.0",
"file-loader": "6.2.0", "file-loader": "6.2.0",
"fs-extra": "11.3.2", "fs-extra": "11.1.1",
"graceful-fs": "4.2.11", "graceful-fs": "4.2.11",
"helmet": "7.2.0", "helmet": "7.0.0",
"html-to-text": "9.0.5", "html-to-text": "9.0.5",
"imagesloaded": "5.0.0", "ipaddr.js": "2.0.1",
"ipaddr.js": "2.2.0", "jquery": "3.7.0",
"jquery": "3.7.1",
"jquery-deserialize": "2.0.0", "jquery-deserialize": "2.0.0",
"jquery-form": "4.3.0", "jquery-form": "4.3.0",
"jquery-serializeobject": "1.0.0", "jquery-serializeobject": "1.0.0",
"jquery-ui": "1.14.1", "jquery-ui": "1.13.2",
"jsesc": "3.1.0", "jsesc": "3.0.2",
"json2csv": "5.0.7", "json2csv": "5.0.7",
"jsonwebtoken": "9.0.2", "jsonwebtoken": "9.0.0",
"less": "4.1.3",
"lodash": "4.17.21", "lodash": "4.17.21",
"logrotate-stream": "0.2.9", "logrotate-stream": "0.2.9",
"lru-cache": "11.2.2", "lru-cache": "9.1.1",
"material-design-lite": "1.3.0",
"mime": "3.0.0", "mime": "3.0.0",
"mkdirp": "3.0.1", "mkdirp": "3.0.1",
"mongodb": "6.20.0", "mongodb": "5.5.0",
"morgan": "1.10.1", "morgan": "1.10.0",
"mousetrap": "1.6.5", "mousetrap": "1.6.5",
"multer": "2.0.2", "multiparty": "4.2.3",
"nconf": "0.13.0", "nconf": "0.12.0",
"nodebb-plugin-2factor": "7.6.0", "nodebb-plugin-2factor": "7.0.5",
"nodebb-plugin-composer-default": "10.3.1", "nodebb-plugin-composer-default": "10.1.5",
"nodebb-plugin-dbsearch": "6.3.2", "nodebb-plugin-dbsearch": "6.0.1",
"nodebb-plugin-emoji": "6.0.5", "nodebb-plugin-emoji": "5.0.15",
"nodebb-plugin-emoji-android": "4.1.1", "nodebb-plugin-emoji-android": "4.0.0",
"nodebb-plugin-markdown": "13.2.1", "nodebb-plugin-markdown": "12.0.4",
"nodebb-plugin-mentions": "4.7.6", "nodebb-plugin-mentions": "4.1.1",
"nodebb-plugin-spam-be-gone": "2.3.2", "nodebb-plugin-ntfy": "1.0.15",
"nodebb-plugin-web-push": "0.7.5", "nodebb-plugin-spam-be-gone": "2.0.7",
"nodebb-rewards-essentials": "1.0.2", "nodebb-rewards-essentials": "0.2.3",
"nodebb-theme-harmony": "2.1.21", "nodebb-theme-harmony": "1.0.34",
"nodebb-theme-lavender": "7.1.19", "nodebb-theme-lavender": "7.0.9",
"nodebb-theme-peace": "2.2.49", "nodebb-theme-peace": "2.0.26",
"nodebb-theme-persona": "14.1.15", "nodebb-theme-persona": "13.0.69",
"nodebb-widget-essentials": "7.0.40", "nodebb-widget-essentials": "7.0.12",
"nodemailer": "7.0.6", "nodemailer": "6.9.2",
"nprogress": "0.2.0", "nprogress": "0.2.0",
"passport": "0.7.0", "passport": "0.6.0",
"passport-http-bearer": "1.0.1", "passport-http-bearer": "1.0.1",
"passport-local": "1.0.0", "passport-local": "1.0.0",
"pg": "8.16.3", "pg": "8.11.0",
"pg-cursor": "2.15.3", "pg-cursor": "2.10.0",
"postcss": "8.5.6", "postcss": "8.4.23",
"postcss-clean": "1.2.0", "postcss-clean": "1.2.0",
"pretty": "^2.0.0",
"progress-webpack-plugin": "1.0.16", "progress-webpack-plugin": "1.0.16",
"prompt": "1.3.0", "prompt": "1.3.0",
"redis": "5.8.2", "ioredis": "5.3.2",
"rimraf": "6.0.1", "request": "2.88.2",
"request-promise-native": "1.0.9",
"rimraf": "5.0.1",
"rss": "1.2.2", "rss": "1.2.2",
"rtlcss": "4.3.0", "rtlcss": "4.1.0",
"sanitize-html": "2.17.0", "sanitize-html": "2.10.0",
"sass": "1.93.2", "sass": "1.62.1",
"satori": "0.18.3", "semver": "7.5.1",
"sbd": "^1.0.19", "serve-favicon": "2.5.0",
"semver": "7.7.2", "sharp": "0.32.1",
"serve-favicon": "2.5.1", "sitemap": "7.1.1",
"sharp": "0.34.4", "slideout": "1.0.1",
"sitemap": "8.0.0", "socket.io": "4.6.1",
"socket.io": "4.8.1", "socket.io-client": "4.6.1",
"socket.io-client": "4.8.1", "@socket.io/redis-adapter": "8.2.0",
"@socket.io/redis-adapter": "8.3.0", "sortablejs": "1.15.0",
"sortablejs": "1.15.6", "spdx-license-list": "6.6.0",
"spdx-license-list": "6.10.0", "spider-detector": "2.0.0",
"terser-webpack-plugin": "5.3.14", "terser-webpack-plugin": "5.3.9",
"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",
"tough-cookie": "6.0.0", "validator": "13.9.0",
"undici": "^7.10.0", "webpack": "5.83.1",
"validator": "13.15.15", "webpack-merge": "5.8.0",
"webpack": "5.102.0", "winston": "3.8.2",
"webpack-merge": "6.0.1",
"winston": "3.17.0",
"workerpool": "9.3.4",
"xml": "1.0.1", "xml": "1.0.1",
"xregexp": "5.1.2", "xregexp": "5.1.1",
"yargs": "17.7.2", "yargs": "17.7.2",
"zxcvbn": "4.4.2" "zxcvbn": "4.4.2"
}, },
"devDependencies": { "devDependencies": {
"@apidevtools/swagger-parser": "10.1.0", "@apidevtools/swagger-parser": "10.1.0",
"@commitlint/cli": "20.0.0", "@commitlint/cli": "17.6.3",
"@commitlint/config-angular": "20.0.0", "@commitlint/config-angular": "17.6.3",
"coveralls": "3.1.1", "coveralls": "3.1.1",
"@eslint/js": "9.36.0", "eslint": "8.41.0",
"@stylistic/eslint-plugin": "5.4.0", "eslint-config-nodebb": "0.2.1",
"eslint-config-nodebb": "1.1.11", "eslint-plugin-import": "2.27.5",
"eslint-plugin-import": "2.32.0",
"grunt": "1.6.1", "grunt": "1.6.1",
"grunt-contrib-watch": "1.1.0", "grunt-contrib-watch": "1.1.0",
"husky": "8.0.3", "husky": "8.0.3",
"jsdom": "27.0.0", "jsdom": "22.0.0",
"lint-staged": "16.2.3", "lint-staged": "13.2.2",
"mocha": "11.7.2", "mocha": "10.2.0",
"mocha-lcov-reporter": "1.3.0", "mocha-lcov-reporter": "1.3.0",
"mockdate": "3.0.5", "mockdate": "3.0.5",
"nyc": "17.1.0", "nyc": "15.1.0",
"smtp-server": "3.14.0" "smtp-server": "3.11.0"
}, },
"optionalDependencies": { "optionalDependencies": {
"sass-embedded": "1.93.2" "sass-embedded": "1.62.0"
}, },
"resolutions": { "resolutions": {
"*/jquery": "3.7.1" "*/jquery": "3.7.0"
}, },
"bugs": { "bugs": {
"url": "https://github.com/NodeBB/NodeBB/issues" "url": "https://github.com/NodeBB/NodeBB/issues"
}, },
"engines": { "engines": {
"node": ">=20" "node": ">=12"
}, },
"maintainers": [ "maintainers": [
{ {

View File

@@ -2,7 +2,6 @@
const winston = require('winston'); const winston = require('winston');
const express = require('express'); const express = require('express');
const session = require('express-session');
const bodyParser = require('body-parser'); const bodyParser = require('body-parser');
const fs = require('fs'); const fs = require('fs');
const path = require('path'); const path = require('path');
@@ -14,10 +13,7 @@ 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 utils = require('../src/utils'); const sass = require('../src/utils').getSass();
const sass = utils.getSass();
const { generateToken, csrfSynchronisedProtection } = require('../src/middleware/csrf');
const app = express(); const app = express();
let server; let server;
@@ -54,9 +50,6 @@ let installing = false;
let success = false; let success = false;
let error = false; let error = false;
let launchUrl; let launchUrl;
let timeStart = 0;
const totalTime = 1000 * 60 * 3;
const viewsDir = path.join(paths.baseDir, 'build/public/templates'); const viewsDir = path.join(paths.baseDir, 'build/public/templates');
@@ -77,13 +70,6 @@ web.install = async function (port) {
app.use(bodyParser.urlencoded({ app.use(bodyParser.urlencoded({
extended: true, extended: true,
})); }));
app.use(session({
secret: utils.generateUUID(),
resave: false,
saveUninitialized: false,
}));
try { try {
await Promise.all([ await Promise.all([
compileTemplate(), compileTemplate(),
@@ -114,34 +100,13 @@ function launchExpress(port) {
} }
function setupRoutes() { function setupRoutes() {
app.get('/', csrfSynchronisedProtection, welcome); app.get('/', welcome);
app.post('/', csrfSynchronisedProtection, install); app.post('/', install);
app.get('/testdb', testDatabase); app.post('/launch', launch);
app.get('/ping', ping); app.get('/ping', ping);
app.get('/sping', ping); app.get('/sping', ping);
} }
async function testDatabase(req, res) {
let db;
try {
const keys = Object.keys(req.query);
const dbName = keys[0].split(':')[0];
db = require(`../src/database/${dbName}`);
const opts = {};
keys.forEach((key) => {
opts[key.replace(`${dbName}:`, '')] = req.query[key];
});
await db.init(opts);
const global = await db.getObject('global');
await db.close();
res.json({ success: 1, dbfull: !!global });
} catch (err) {
res.json({ error: err.stack });
}
}
function ping(req, res) { function ping(req, res) {
res.status(200).send(req.path === '/sping' ? 'healthy' : '200'); res.status(200).send(req.path === '/sping' ? 'healthy' : '200');
} }
@@ -158,6 +123,7 @@ function welcome(req, res) {
}); });
const defaults = require('./data/defaults.json'); const defaults = require('./data/defaults.json');
res.render('install/index', { res.render('install/index', {
url: nconf.get('url') || (`${req.protocol}://${req.get('host')}`), url: nconf.get('url') || (`${req.protocol}://${req.get('host')}`),
launchUrl: launchUrl, launchUrl: launchUrl,
@@ -170,8 +136,6 @@ function welcome(req, res) {
minimumPasswordLength: defaults.minimumPasswordLength, minimumPasswordLength: defaults.minimumPasswordLength,
minimumPasswordStrength: defaults.minimumPasswordStrength, minimumPasswordStrength: defaults.minimumPasswordStrength,
installing: installing, installing: installing,
percentInstalled: installing ? ((Date.now() - timeStart) / totalTime * 100).toFixed(2) : 0,
csrf_token: generateToken(req),
}); });
} }
@@ -179,15 +143,12 @@ function install(req, res) {
if (installing) { if (installing) {
return welcome(req, res); return welcome(req, res);
} }
timeStart = Date.now();
req.setTimeout(0); req.setTimeout(0);
installing = true; installing = true;
const database = nconf.get('database') || req.body.database || 'mongo'; const database = nconf.get('database') || req.body.database || 'mongo';
const setupEnvVars = { const setupEnvVars = {
...process.env, ...process.env,
CONFIG: nconf.get('config'),
NODEBB_CONFIG: nconf.get('config'),
NODEBB_URL: nconf.get('url') || req.body.url || (`${req.protocol}://${req.get('host')}`), NODEBB_URL: nconf.get('url') || req.body.url || (`${req.protocol}://${req.get('host')}`),
NODEBB_PORT: nconf.get('port') || 4567, NODEBB_PORT: nconf.get('port') || 4567,
NODEBB_ADMIN_USERNAME: nconf.get('admin:username') || req.body['admin:username'], NODEBB_ADMIN_USERNAME: nconf.get('admin:username') || req.body['admin:username'],
@@ -209,22 +170,21 @@ function install(req, res) {
const child = require('child_process').fork('app', ['--setup'], { const child = require('child_process').fork('app', ['--setup'], {
env: setupEnvVars, env: setupEnvVars,
}); });
child.on('error', (err) => {
error = true;
success = false;
winston.error(err.stack);
});
child.on('close', (data) => { child.on('close', (data) => {
installing = false;
success = data === 0; success = data === 0;
error = data !== 0; error = data !== 0;
launch();
welcome(req, res);
}); });
welcome(req, res);
} }
async function launch() { async function launch(req, res) {
try { try {
res.json({});
server.close(); server.close();
req.setTimeout(0);
let child; let child;
if (!nconf.get('launchCmd')) { if (!nconf.get('launchCmd')) {

View File

@@ -26,7 +26,7 @@ if (!fs.existsSync(logDir)) {
mkdirp.sync(path.dirname(outputLogFilePath)); mkdirp.sync(path.dirname(outputLogFilePath));
} }
const output = logrotate({ file: outputLogFilePath, size: '10m', keep: 3, compress: true }); const output = logrotate({ file: outputLogFilePath, size: '1m', keep: 3, compress: true });
const silent = nconf.get('silent') === 'false' ? false : nconf.get('silent') !== false; const silent = nconf.get('silent') === 'false' ? false : nconf.get('silent') !== false;
let numProcs; let numProcs;
const workers = []; const workers = [];
@@ -99,13 +99,6 @@ Loader.start = function () {
function forkWorker(index, isPrimary) { function forkWorker(index, isPrimary) {
const ports = getPorts(); const ports = getPorts();
const args = []; const args = [];
const execArgv = [];
if (nconf.get('max-memory')) {
execArgv.push(`--max-old-space-size=${nconf.get('max-memory')}`);
}
if (nconf.get('expose-gc')) {
execArgv.push('--expose-gc');
}
if (!ports[index]) { if (!ports[index]) {
return console.log(`[cluster] invalid port for worker : ${index} ports: ${ports.length}`); return console.log(`[cluster] invalid port for worker : ${index} ports: ${ports.length}`);
@@ -114,10 +107,10 @@ function forkWorker(index, isPrimary) {
process.env.isPrimary = isPrimary; process.env.isPrimary = isPrimary;
process.env.isCluster = nconf.get('isCluster') || ports.length > 1; process.env.isCluster = nconf.get('isCluster') || ports.length > 1;
process.env.port = ports[index]; process.env.port = ports[index];
const worker = fork(appPath, args, { const worker = fork(appPath, args, {
silent: silent, silent: silent,
env: process.env, env: process.env,
execArgv: execArgv,
}); });
worker.index = index; worker.index = index;

3
public/.eslintrc Normal file
View File

@@ -0,0 +1,3 @@
{
"extends": "nodebb/public"
}

View File

@@ -1,41 +0,0 @@
<html>
<head>
<title>Internal Server Error</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" type="text/css" href="/assets/5xx.css" />
<script type="text/javascript">
window.onload = function() {
let count = 0;
const bounce = document.getElementById('click-me');
bounce.onclick = function() {
count++;
bounce.className = '';
setTimeout(function() {
bounce.className = 'animated bounce';
}, 50);
if (count > 5) {
document.getElementById('hide').className = '';
}
};
}
</script>
</head>
<body>
<div class="wrapper">
<div class="center">
<h1 id="click-me" class="animated bounce">500</h1>
<p>
<strong>Internal server error. </strong>
</p>
<p>
{message}
</p>
<p>
&nbsp;<small id="hide" class="hide">Alright. You can stop clicking... it's not going to make the site come back sooner!</small>
</p>
</div>
</div>
</body>
</html>

View File

@@ -2,12 +2,148 @@
<head> <head>
<title>Excessive Load Warning</title> <title>Excessive Load Warning</title>
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" type="text/css" href="/assets/5xx.css" /> <style type="text/css">
body {
background: #00A9EA;
color: white;
/* see public/less/admin/vars.less for documentation on system font family */
font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", Helvetica, Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
text-align: center;
-webkit-transform-style: preserve-3d;
-moz-transform-style: preserve-3d;
transform-style: preserve-3d;
}
h1 {
font-size: 250px;
color: #fff;
opacity: 0.5;
margin: 10px;
cursor: pointer;
-moz-user-select: none;
-khtml-user-select: none;
-webkit-user-select: none;
}
p {
font-size: 20px;
}
p strong {
font-size: 28px;
}
@media (max-width: 640px) {
h1 {
font-size: 125px;
}
p {
font-size: 16px;
}
p strong {
font-size: 20px;
}
}
.center {
position: relative;
top: 50%;
-webkit-transform: translateY(50%);
-ms-transform: translateY(50%);
transform: translateY(50%);
}
@-webkit-keyframes bounce {
0%, 20%, 53%, 80%, 100% {
-webkit-transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
-webkit-transform: translate3d(0,0,0);
transform: translate3d(0,0,0);
}
40%, 43% {
-webkit-transition-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
transition-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
-webkit-transform: translate3d(0, -30px, 0);
transform: translate3d(0, -30px, 0);
}
70% {
-webkit-transition-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
transition-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
-webkit-transform: translate3d(0, -15px, 0);
transform: translate3d(0, -15px, 0);
}
90% {
-webkit-transform: translate3d(0,-4px,0);
transform: translate3d(0,-4px,0);
}
}
@keyframes bounce {
0%, 20%, 53%, 80%, 100% {
-webkit-transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
-webkit-transform: translate3d(0,0,0);
transform: translate3d(0,0,0);
}
40%, 43% {
-webkit-transition-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
transition-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
-webkit-transform: translate3d(0, -30px, 0);
transform: translate3d(0, -30px, 0);
}
70% {
-webkit-transition-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
transition-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
-webkit-transform: translate3d(0, -15px, 0);
transform: translate3d(0, -15px, 0);
}
90% {
-webkit-transform: translate3d(0,-4px,0);
transform: translate3d(0,-4px,0);
}
}
.bounce {
-webkit-animation-name: bounce;
animation-name: bounce;
-webkit-transform-origin: center bottom;
-ms-transform-origin: center bottom;
transform-origin: center bottom;
}
.animated {
-webkit-animation-duration: 1s;
animation-duration: 1s;
-webkit-animation-fill-mode: both;
animation-fill-mode: both;
}
.animated.infinite {
-webkit-animation-iteration-count: infinite;
animation-iteration-count: infinite;
}
.animated.hinge {
-webkit-animation-duration: 2s;
animation-duration: 2s;
}
.hide {
display: none;
}
</style>
<script type="text/javascript"> <script type="text/javascript">
window.onload = function() { window.onload = function() {
let count = 0; var count = 0,
const bounce = document.getElementById('click-me'); bounce = document.getElementById('click-me');
bounce.onclick = function() { bounce.onclick = function() {
count++; count++;
bounce.className = ''; bounce.className = '';

View File

@@ -1,135 +0,0 @@
body {
background: #00A9EA;
color: white;
font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", Helvetica, Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
text-align: center;
-webkit-transform-style: preserve-3d;
-moz-transform-style: preserve-3d;
transform-style: preserve-3d;
}
h1 {
font-size: 250px;
color: #fff;
opacity: 0.5;
margin: 10px;
cursor: pointer;
-moz-user-select: none;
-khtml-user-select: none;
-webkit-user-select: none;
}
p {
font-size: 20px;
}
p strong {
font-size: 28px;
}
@media (max-width: 640px) {
h1 {
font-size: 125px;
}
p {
font-size: 16px;
}
p strong {
font-size: 20px;
}
}
.center {
position: relative;
top: 50%;
-webkit-transform: translateY(50%);
-ms-transform: translateY(50%);
transform: translateY(50%);
}
@-webkit-keyframes bounce {
0%, 20%, 53%, 80%, 100% {
-webkit-transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
-webkit-transform: translate3d(0,0,0);
transform: translate3d(0,0,0);
}
40%, 43% {
-webkit-transition-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
transition-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
-webkit-transform: translate3d(0, -30px, 0);
transform: translate3d(0, -30px, 0);
}
70% {
-webkit-transition-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
transition-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
-webkit-transform: translate3d(0, -15px, 0);
transform: translate3d(0, -15px, 0);
}
90% {
-webkit-transform: translate3d(0,-4px,0);
transform: translate3d(0,-4px,0);
}
}
@keyframes bounce {
0%, 20%, 53%, 80%, 100% {
-webkit-transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
-webkit-transform: translate3d(0,0,0);
transform: translate3d(0,0,0);
}
40%, 43% {
-webkit-transition-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
transition-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
-webkit-transform: translate3d(0, -30px, 0);
transform: translate3d(0, -30px, 0);
}
70% {
-webkit-transition-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
transition-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
-webkit-transform: translate3d(0, -15px, 0);
transform: translate3d(0, -15px, 0);
}
90% {
-webkit-transform: translate3d(0,-4px,0);
transform: translate3d(0,-4px,0);
}
}
.bounce {
-webkit-animation-name: bounce;
animation-name: bounce;
-webkit-transform-origin: center bottom;
-ms-transform-origin: center bottom;
transform-origin: center bottom;
}
.animated {
-webkit-animation-duration: 1s;
animation-duration: 1s;
-webkit-animation-fill-mode: both;
animation-fill-mode: both;
}
.animated.infinite {
-webkit-animation-iteration-count: infinite;
animation-iteration-count: infinite;
}
.animated.hinge {
-webkit-animation-duration: 2s;
animation-duration: 2s;
}
.hide {
display: none;
}

View File

@@ -4,15 +4,6 @@
"acp-title": "لوحة تحكم إدارة NodeBB | %1", "acp-title": "لوحة تحكم إدارة NodeBB | %1",
"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-message": "حدثت مشكلة أثناء حفظ التغييرات في NodeBB. (%1)", "changes-not-saved-message": "حدثت مشكلة أثناء حفظ التغييرات في NodeBB. (%1)"
"save-changes": "Save changes",
"min": "Min:",
"max": "Max:",
"view": "View",
"edit": "Edit",
"add": "Add",
"select-icon": "Select Icon"
} }

View File

@@ -1,5 +1,4 @@
{ {
"cache": "Cache",
"post-cache": "التخزين المؤقت للمشاركات", "post-cache": "التخزين المؤقت للمشاركات",
"group-cache": "التخزين المؤقت للمجموعات", "group-cache": "التخزين المؤقت للمجموعات",
"local-cache": "تخزين مؤقت محلي", "local-cache": "تخزين مؤقت محلي",

View File

@@ -5,7 +5,7 @@
"uptime-seconds": "مدة التشغيل بالثواني", "uptime-seconds": "مدة التشغيل بالثواني",
"uptime-days": "مدة التشغيل بالأيام", "uptime-days": "مدة التشغيل بالأيام",
"mongo": "MongoDB", "mongo": "Mongo",
"mongo.version": "اصدار MongoDB", "mongo.version": "اصدار MongoDB",
"mongo.storage-engine": "محرك التخزين", "mongo.storage-engine": "محرك التخزين",
"mongo.collections": "التجميعات", "mongo.collections": "التجميعات",
@@ -17,7 +17,7 @@
"mongo.file-size": "حجم الملف", "mongo.file-size": "حجم الملف",
"mongo.resident-memory": "الذاكرة الساكنة", "mongo.resident-memory": "الذاكرة الساكنة",
"mongo.virtual-memory": "الذاكرة الإفتراضية", "mongo.virtual-memory": "الذاكرة الإفتراضية",
"mongo.mapped-memory": "Mapped Memory", "mongo.mapped-memory": "الذاكرة المعينة",
"mongo.bytes-in": "البايتات الواردة", "mongo.bytes-in": "البايتات الواردة",
"mongo.bytes-out": "البايتات الصادرة", "mongo.bytes-out": "البايتات الصادرة",
"mongo.num-requests": "عدد الطلبات", "mongo.num-requests": "عدد الطلبات",

View File

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

View File

@@ -9,9 +9,5 @@
"filter-type": "نوع الحدث", "filter-type": "نوع الحدث",
"filter-start": "تاريخ البدء", "filter-start": "تاريخ البدء",
"filter-end": "تاريخ الانتهاء", "filter-end": "تاريخ الانتهاء",
"filter-user": "Filter by User", "filter-perPage": "لكل صفحة"
"filter-user.placeholder": "قم بكتابة اسم مستخدم للتصفية...",
"filter-group": "Filter by Group",
"filter-group.placeholder": "قم بكتابة اسم مجموعة للتصفية...",
"filter-per-page": "لكل صفحة"
} }

View File

@@ -1,5 +1,4 @@
{ {
"customise": "Customise",
"custom-css": "Custom CSS/SASS", "custom-css": "Custom CSS/SASS",
"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/SASS declarations here, which will be applied after all other styles.",
"custom-css.enable": "Enable Custom CSS/SASS", "custom-css.enable": "Enable Custom CSS/SASS",
@@ -13,8 +12,5 @@
"custom-header.enable": "تفعيل الترويسة المخصصة", "custom-header.enable": "تفعيل الترويسة المخصصة",
"custom-css.livereload": "تفعيل إعادة التحميل المباشرة", "custom-css.livereload": "تفعيل إعادة التحميل المباشرة",
"custom-css.livereload.description": "فعل هذا الخيار لإجبار جميع الجلسات في الأجهزة التي قمت بتسجيل الدخول فيها بحسابك على التحديث عند النقر على زر الحفظ", "custom-css.livereload.description": "فعل هذا الخيار لإجبار جميع الجلسات في الأجهزة التي قمت بتسجيل الدخول فيها بحسابك على التحديث عند النقر على زر الحفظ"
"bsvariables": "_variables.scss",
"bsvariables.description": "Override bootstrap variables here. You can also use a tool like <a href=\"https://bootstrap.build/app\">bootstrap.build</a> and paste the output here.<br/>Changes require a rebuild & restart.",
"bsvariables.enable": "Enable _variables.scss"
} }

View File

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

View File

@@ -1,9 +1,7 @@
{ {
"themes": "Themes",
"checking-for-installed": "جاري التحقق من القوالب المثبتة...", "checking-for-installed": "جاري التحقق من القوالب المثبتة...",
"homepage": "الصفحة الرئيسية", "homepage": "الصفحة الرئيسية",
"select-theme": "إختيار القالب", "select-theme": "إختيار القالب",
"revert-theme": "Revert Theme",
"current-theme": "القالب المستخدم حالياً", "current-theme": "القالب المستخدم حالياً",
"no-themes": "لم يتم العثور على قوالب مثبتة", "no-themes": "لم يتم العثور على قوالب مثبتة",
"revert-confirm": "هل أنت متأكد من أنك ترغب في استعادة قااب NodeBB الافتراضي؟", "revert-confirm": "هل أنت متأكد من أنك ترغب في استعادة قااب NodeBB الافتراضي؟",

View File

@@ -26,13 +26,13 @@
"updates": "تحديثات", "updates": "تحديثات",
"running-version": "المنتدى يعمل حاليا على <strong>NodeBB الإصدار<span id=\"version\">%1</span></strong>.", "running-version": "المنتدى يعمل حاليا على <strong>NodeBB الإصدار<span id=\"version\">%1</span></strong>.",
"keep-updated": "تأكد دائما من أن NodeBB يعمل على احدث إصدار للحصول على أحدث التصحيحات الأمنية وإصلاحات الأخطاء.", "keep-updated": "تأكد دائما من أن NodeBB يعمل على احدث إصدار للحصول على أحدث التصحيحات الأمنية وإصلاحات الأخطاء.",
"up-to-date": "You are <strong>up-to-date</strong> <i class=\"fa fa-check\"></i>", "up-to-date": "<p>المنتدى <strong>يعمل على أحدث إصدار</strong> <i class=\"fa fa-check\"></i></p>",
"upgrade-available": "A new version (v%1) has been released. Consider <a href=\"https://docs.nodebb.org/configuring/upgrade/\" target=\"_blank\">upgrading your NodeBB</a>.", "upgrade-available": "<p> هناك إصدار جديد برقم (v%1). خذ بعين الاعتبار <a href=\"https://docs.nodebb.org/configuring/upgrade/\" target=\"_blank\"> ترقية NodeBB </a>.</p>",
"prerelease-upgrade-available": "This is an outdated pre-release version of NodeBB. A new version (v%1) has been released. Consider <a href=\"https://docs.nodebb.org/configuring/upgrade/\" target=\"_blank\">upgrading your NodeBB</a>.", "prerelease-upgrade-available": "<p>هذا إصدار منتهي من الاصدارات المسبقة من NodeBB. هناك إصدار جديد برقم (v٪ 1). ضع في اعتبارك <a href=\"https://docs.nodebb.org/configuring/upgrade/\" target=\"_blank\">ترقية NodeBB إليه</a>.</p>",
"prerelease-warning": "This is a <strong>pre-release</strong> version of NodeBB. Unintended bugs may occur. <i class=\"fa fa-exclamation-triangle\"></i>", "prerelease-warning": "<p>هذه نسخة <strong>ماقبل الإصدار</strong> من NodeBB. قد تحدث أخطاء غير مقصودة. <i class=\"fa fa-exclamation-triangle\"></i></p>",
"fallback-emailer-not-found": "مرسل البريد الإلكتروني الاحتياطي غير موجود!", "fallback-emailer-not-found": "مرسل البريد الإلكتروني الاحتياطي غير موجود!",
"running-in-development": "Forum is running in development mode. The forum may be open to potential vulnerabilities; please contact your system administrator", "running-in-development": "المنتدى قيد التشغيل في وضع \"المطورين\". وقد تكون هناك ثغرات أمنية مفتوحة؛ من فضلك تواصل مع مسؤول نظامك.",
"latest-lookup-failed": "Failed to look up latest available version of NodeBB", "latest-lookup-failed": "<p>فشل البحث عن أحدث إصدار متوفر من NodeBB</p>",
"notices": "إشعارات", "notices": "إشعارات",
"restart-not-required": "إعادة التشغيل غير مطلوب", "restart-not-required": "إعادة التشغيل غير مطلوب",
@@ -48,7 +48,6 @@
"restart-disabled": "تم تعطيل إعادة بناء NodeBB وإعادة تشغيله حيث لا يبدو أنك تقوم بتشغيله عبر البرنامج الخفي المناسب.", "restart-disabled": "تم تعطيل إعادة بناء NodeBB وإعادة تشغيله حيث لا يبدو أنك تقوم بتشغيله عبر البرنامج الخفي المناسب.",
"maintenance-mode": "وضع الصيانة", "maintenance-mode": "وضع الصيانة",
"maintenance-mode-title": "انقر هنا لإعداد وضع الصيانة لـNodeBB", "maintenance-mode-title": "انقر هنا لإعداد وضع الصيانة لـNodeBB",
"dark-mode": "Dark Mode",
"realtime-chart-updates": "التحديث الفوري للرسم البياني", "realtime-chart-updates": "التحديث الفوري للرسم البياني",
"active-users": "المستخدمين النشطين", "active-users": "المستخدمين النشطين",
@@ -75,7 +74,6 @@
"graphs.page-views-registered": "زيارات الصفحات المسجلة", "graphs.page-views-registered": "زيارات الصفحات المسجلة",
"graphs.page-views-guest": "زيارات الصفحات للزوار", "graphs.page-views-guest": "زيارات الصفحات للزوار",
"graphs.page-views-bot": "زيارات الصفحات الآلية", "graphs.page-views-bot": "زيارات الصفحات الآلية",
"graphs.page-views-ap": "ActivityPub Page Views",
"graphs.unique-visitors": "زوار فريدين", "graphs.unique-visitors": "زوار فريدين",
"graphs.registered-users": "مستخدمين مسجلين", "graphs.registered-users": "مستخدمين مسجلين",
"graphs.guest-users": "المستخدمين الزوار", "graphs.guest-users": "المستخدمين الزوار",
@@ -91,12 +89,5 @@
"details.logins-login-time": "وقت تسجيل الدخول", "details.logins-login-time": "وقت تسجيل الدخول",
"start": "بدء", "start": "بدء",
"end": "إنهاء", "end": "إنهاء",
"filter": "تصفية", "filter": "تصفية"
"view-as-json": "View as JSON",
"expand-analytics": "Expand analytics",
"clear-search-history": "Clear Search History",
"clear-search-history-confirm": "Are you sure you want to clear entire search history?",
"search-term": "Term",
"search-count": "Count",
"view-all": "View all"
} }

View File

@@ -3,7 +3,7 @@
"ip": "رقم الآي بي <strong> %1 </strong>", "ip": "رقم الآي بي <strong> %1 </strong>",
"nodes-responded": "عدد %1 نقطة/نقاط استجابوا خلال %2 جزء من الثانية.", "nodes-responded": "عدد %1 نقطة/نقاط استجابوا خلال %2 جزء من الثانية.",
"host": "المضيف", "host": "المضيف",
"primary": "primary / jobs", "primary": "primary / run jobs",
"pid": "pid", "pid": "pid",
"nodejs": "nodejs", "nodejs": "nodejs",
"online": "online", "online": "online",
@@ -19,7 +19,6 @@
"registered": "Registered", "registered": "Registered",
"sockets": "Sockets", "sockets": "Sockets",
"connection-count": "Connection Count",
"guests": "Guests", "guests": "Guests",
"info": "Info" "info": "Info"

View File

@@ -1,5 +1,4 @@
{ {
"logger": "Logger",
"logger-settings": "إعدادات المسجِّل", "logger-settings": "إعدادات المسجِّل",
"description": "من خلال تمكين مربعات الاختيار ، ستتلقى سجلات إلى جهازك الطرفي. إذا حددت مسارًا ، فسيتم بعد ذلك حفظ السجلات في ملف بدلاً من ذلك. يعد تسجيل HTTP مفيدًا لجمع الإحصائيات حول من ومتى وماذا يصل الأشخاص في المنتدى. بالإضافة إلى تسجيل طلبات HTTP ، يمكننا أيضًا تسجيل أحداث socket.io. يمكن أن يكون تسجيل Socket.io ، جنبًا إلى جنب مع شاشة redis-cli ، مفيدًا جدًا في تعلم العناصر الداخلية لـ NodeBB.", "description": "من خلال تمكين مربعات الاختيار ، ستتلقى سجلات إلى جهازك الطرفي. إذا حددت مسارًا ، فسيتم بعد ذلك حفظ السجلات في ملف بدلاً من ذلك. يعد تسجيل HTTP مفيدًا لجمع الإحصائيات حول من ومتى وماذا يصل الأشخاص في المنتدى. بالإضافة إلى تسجيل طلبات HTTP ، يمكننا أيضًا تسجيل أحداث socket.io. يمكن أن يكون تسجيل Socket.io ، جنبًا إلى جنب مع شاشة redis-cli ، مفيدًا جدًا في تعلم العناصر الداخلية لـ NodeBB.",
"explanation": "ما عليك سوى تحديدأو/ إلغاء تحديد إعدادات التسجيل لتمكين أو تعطيل التسجيل أثناء التنقل. لا حاجة لإعادة التشغيل.", "explanation": "ما عليك سوى تحديدأو/ إلغاء تحديد إعدادات التسجيل لتمكين أو تعطيل التسجيل أثناء التنقل. لا حاجة لإعادة التشغيل.",

View File

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

View File

@@ -1,12 +1,10 @@
{ {
"rewards": "المكافآت", "rewards": "المكافآت",
"add-reward": "Add reward",
"condition-if-users": "إذا كان للمستخدم", "condition-if-users": "إذا كان للمستخدم",
"condition-is": "يكون: ", "condition-is": "يكون: ",
"condition-then": "عندئذ:", "condition-then": "عندئذ:",
"max-claims": "عدد المرات التي يمكن فيها المطالبة بالمكافأة", "max-claims": "عدد المرات التي يمكن فيها المطالبة بالمكافأة",
"zero-infinite": "أدخل 0 للقيمة اللانهائية", "zero-infinite": "أدخل 0 للقيمة اللانهائية",
"select-reward": "Select reward",
"delete": "احذف", "delete": "احذف",
"enable": "مكّن", "enable": "مكّن",
"disable": "عطّل", "disable": "عطّل",

View File

@@ -1,19 +1,16 @@
{ {
"widgets": "Widgets",
"available": "Available Widgets", "available": "Available Widgets",
"explanation": "Select a widget from the dropdown menu and then drag and drop it into a template's widget area on the left.", "explanation": "Select a widget from the dropdown menu and then drag and drop it into a template's widget area on the left.",
"none-installed": "No widgets found! Activate the widget essentials plugin in the <a href=\"%1\">plugins</a> control panel.", "none-installed": "No widgets found! Activate the widget essentials plugin in the <a href=\"%1\">plugins</a> control panel.",
"clone-from": "Clone widgets from", "clone-from": "Clone widgets from",
"containers.available": "Available Containers", "containers.available": "Available Containers",
"containers.explanation": "Drag and drop on top of any widget", "containers.explanation": "Drag and drop on top of any active widget",
"containers.none": "None", "containers.none": "None",
"container.well": "Well", "container.well": "Well",
"container.jumbotron": "Jumbotron", "container.jumbotron": "Jumbotron",
"container.card": "Card", "container.card": "Card",
"container.card-header": "Card Header", "container.card-header": "Card Header",
"container.card-body": "Card Body", "container.card-body": "Card Body",
"container.title": "Title",
"container.body": "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?",
@@ -31,7 +28,5 @@
"hide-from-groups": "Hide from groups", "hide-from-groups": "Hide from groups",
"start-date": "Start date", "start-date": "Start date",
"end-date": "End date", "end-date": "End date",
"hide-on-mobile": "Hide on mobile", "hide-on-mobile": "Hide on mobile"
"hide-drafts": "Hide drafts",
"show-drafts": "Show drafts"
} }

View File

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

View File

@@ -1,25 +1,9 @@
{ {
"manage-categories": "Manage Categories",
"add-category": "Add category",
"add-local-category": "Add Local category",
"add-remote-category": "Add Remote category",
"remove": "Remove",
"rename": "Rename",
"jump-to": "Jump to...",
"settings": "اعدادات القسم", "settings": "اعدادات القسم",
"edit-category": "Edit Category",
"privileges": "الصلاحيات", "privileges": "الصلاحيات",
"back-to-categories": "Back to categories",
"id": "Category ID",
"name": "Category Name", "name": "Category Name",
"handle": "Category Handle",
"handle.help": "Your category handle is used as a representation of this category across other networks, similar to a username. A category handle must not match an existing username or user group.",
"description": "Category Description", "description": "Category Description",
"federatedDescription": "Federated Description",
"federatedDescription.help": "This text will be appended to the category description when queried by other websites/apps.",
"federatedDescription.default": "This is a forum category containing topical discussion. You can start new discussions by mentioning this category.",
"topic-template": "Topic Template",
"topic-template.help": "Define a template for new topics created in this category.",
"bg-color": "Background Colour", "bg-color": "Background Colour",
"text-color": "Text Colour", "text-color": "Text Colour",
"bg-image-size": "Background Image Size", "bg-image-size": "Background Image Size",
@@ -31,10 +15,8 @@
"post-queue": "Post queue", "post-queue": "Post queue",
"tag-whitelist": "Tag Whitelist", "tag-whitelist": "Tag Whitelist",
"upload-image": "Upload Image", "upload-image": "Upload Image",
"upload": "Upload",
"delete-image": "Remove", "delete-image": "Remove",
"category-image": "Category Image", "category-image": "Category Image",
"image-and-icon": "Image & Icon",
"parent-category": "Parent Category", "parent-category": "Parent Category",
"optional-parent-category": "(Optional) Parent Category", "optional-parent-category": "(Optional) Parent Category",
"top-level": "Top Level", "top-level": "Top Level",
@@ -49,8 +31,6 @@
"disable": "Disable", "disable": "Disable",
"edit": "Edit", "edit": "Edit",
"analytics": "Analytics", "analytics": "Analytics",
"federation": "Federation",
"view-category": "View category", "view-category": "View category",
"set-order": "Set order", "set-order": "Set order",
"set-order-help": "Setting the order of the category will move this category to that order and update the order of other categories as necessary. Minimum order is 1 which puts the category at the top.", "set-order-help": "Setting the order of the category will move this category to that order and update the order of other categories as necessary. Minimum order is 1 which puts the category at the top.",
@@ -89,32 +69,10 @@
"analytics.topics-daily": "<strong>Figure 3</strong> &ndash; Daily topics created in this category</small>", "analytics.topics-daily": "<strong>Figure 3</strong> &ndash; Daily topics created in this category</small>",
"analytics.posts-daily": "<strong>Figure 4</strong> &ndash; Daily posts made in this category</small>", "analytics.posts-daily": "<strong>Figure 4</strong> &ndash; Daily posts made in this category</small>",
"federation.title": "Federation settings for \"%1\" category",
"federation.disabled": "Federation is disabled site-wide, so category federation settings are currently unavailable.",
"federation.disabled-cta": "Federation Settings &rarr;",
"federation.syncing-header": "Synchronization",
"federation.syncing-intro": "A category can follow a \"Group Actor\" via the ActivityPub protocol. If content is received from one of the actors listed below, it will be automatically added to this category.",
"federation.syncing-caveat": "N.B. Setting up syncing here establishes a one-way synchronization. NodeBB attempts to subscribe/follow the actor, but the reverse cannot be assumed.",
"federation.syncing-none": "This category is not currently following anybody.",
"federation.syncing-add": "Synchronize with...",
"federation.syncing-actorUri": "Actor",
"federation.syncing-follow": "Follow",
"federation.syncing-unfollow": "Unfollow",
"federation.followers": "Remote users following this category",
"federation.followers-handle": "Handle",
"federation.followers-id": "ID",
"federation.followers-none": "No followers.",
"federation.followers-autofill": "Autofill",
"alert.created": "Created", "alert.created": "Created",
"alert.create-success": "Category successfully created!", "alert.create-success": "Category successfully created!",
"alert.none-active": "You have no active categories.", "alert.none-active": "You have no active categories.",
"alert.create": "Create a Category", "alert.create": "Create a Category",
"alert.add": "Add a Category",
"alert.add-help": "Remote categories can be added to the categories listing by specifying their handle.<br /><br /><strong>Note</strong> — The remote category may not reflect all topics published unless at least one local user tracks/watches it.",
"alert.rename": "Rename a Remote Category",
"alert.rename-help": "Please enter a new name for this category. Leave blank to restore original name.",
"alert.confirm-remove": "Do you really want to remove this category? You can add it back at any time.",
"alert.confirm-purge": "<p class=\"lead\">Do you really want to purge this category \"%1\"?</p><h5><strong class=\"text-danger\">Warning!</strong> All topics and posts in this category will be purged!</h5> <p class=\"help-block\">Purging a category will remove all topics and posts, and delete the category from the database. If you want to remove a category <em>temporarily</em>, you'll want to \"disable\" the category instead.</p>", "alert.confirm-purge": "<p class=\"lead\">Do you really want to purge this category \"%1\"?</p><h5><strong class=\"text-danger\">Warning!</strong> All topics and posts in this category will be purged!</h5> <p class=\"help-block\">Purging a category will remove all topics and posts, and delete the category from the database. If you want to remove a category <em>temporarily</em>, you'll want to \"disable\" the category instead.</p>",
"alert.purge-success": "Category purged!", "alert.purge-success": "Category purged!",
"alert.copy-success": "Settings Copied!", "alert.copy-success": "Settings Copied!",

View File

@@ -1,10 +1,4 @@
{ {
"manage-groups": "Manage Groups",
"add-group": "Add group",
"edit-group": "Edit Group",
"back-to-groups": "Back to groups",
"view-group": "View group",
"icon-and-title": "Icon & Title",
"name": "اسم المجموعة", "name": "اسم المجموعة",
"badge": "Badge", "badge": "Badge",
"properties": "Properties", "properties": "Properties",
@@ -16,7 +10,7 @@
"edit": "Edit", "edit": "Edit",
"delete": "Delete", "delete": "Delete",
"privileges": "Privileges", "privileges": "Privileges",
"members-csv": "Members (CSV)", "download-csv": "CSV",
"search-placeholder": "Search", "search-placeholder": "Search",
"create": "Create Group", "create": "Create Group",
"description-placeholder": "A short description about your group", "description-placeholder": "A short description about your group",

View File

@@ -1,6 +1,4 @@
{ {
"manage-privileges": "Manage Privileges",
"discard-changes": "Discard changes",
"global": "Global", "global": "Global",
"admin": "Admin", "admin": "Admin",
"group-privileges": "Group Privileges", "group-privileges": "Group Privileges",
@@ -8,7 +6,6 @@
"edit-privileges": "Edit Privileges", "edit-privileges": "Edit Privileges",
"select-clear-all": "Select/Clear All", "select-clear-all": "Select/Clear All",
"chat": "Chat", "chat": "Chat",
"chat-with-privileged": "Chat with Privileged",
"upload-images": "Upload Images", "upload-images": "Upload Images",
"upload-files": "Upload Files", "upload-files": "Upload Files",
"signature": "Signature", "signature": "Signature",
@@ -34,7 +31,7 @@
"edit-posts": "Edit Posts", "edit-posts": "Edit Posts",
"view-edit-history": "View Edit History", "view-edit-history": "View Edit History",
"delete-posts": "Delete Posts", "delete-posts": "Delete Posts",
"view-deleted": "View Deleted Posts", "view_deleted": "View Deleted Posts",
"upvote-posts": "Upvote Posts", "upvote-posts": "Upvote Posts",
"downvote-posts": "Downvote Posts", "downvote-posts": "Downvote Posts",
"delete-topics": "Delete Topics", "delete-topics": "Delete Topics",

View File

@@ -1,11 +1,9 @@
{ {
"manage-tags": "Manage Tags",
"none": "Your forum does not have any topics with tags yet.", "none": "Your forum does not have any topics with tags yet.",
"bg-color": "Background Colour", "bg-color": "Background Colour",
"text-color": "Text Colour", "text-color": "Text Colour",
"description": "Select tags by clicking or dragging, use <code>CTRL</code> to select multiple tags.", "description": "Select tags by clicking or dragging, use <code>CTRL</code> to select multiple tags.",
"create": "Create Tag", "create": "Create Tag",
"add-tag": "Add tag",
"modify": "Modify Tags", "modify": "Modify Tags",
"rename": "Rename Tags", "rename": "Rename Tags",
"delete": "Delete Selected Tags", "delete": "Delete Selected Tags",

View File

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

View File

@@ -1,28 +0,0 @@
{
"title": "Manage Custom User Fields",
"create-field": "Create Field",
"edit-field": "Edit Field",
"manage-custom-fields": "Manage Custom Fields",
"type-of-input": "Type of input",
"key": "Key",
"name": "Name",
"icon": "Icon",
"type": "Type",
"min-rep": "Minimum Reputation",
"input-type-text": "Input (Text)",
"input-type-link": "Input (Link)",
"input-type-number": "Input (Number)",
"input-type-date": "Input (Date)",
"input-type-select": "Select",
"input-type-select-multi": "Select Multiple",
"select-options": "Options",
"select-options-help": "Add one option per line for the select element",
"minimum-reputation": "Minimum reputation",
"minimum-reputation-help": "If a user has less than this value they won't be able to use this field",
"delete-field-confirm-x": "Do you really want to delete custom field \"%1\"?",
"custom-fields-saved": "Custom fields saved",
"visibility": "Visibility",
"visibility-all": "Everyone can see the field",
"visibility-loggedin": "Only logged in users can see the field",
"visibility-privileged": "Only privileged users like admins & moderators can see the field"
}

View File

@@ -1,30 +1,22 @@
{ {
"manage-users": "Manage Users",
"users": "المستخدمين", "users": "المستخدمين",
"edit": "Actions", "edit": "Actions",
"make-admin": "Make Admin", "make-admin": "Make Admin",
"remove-admin": "Remove Admin", "remove-admin": "Remove Admin",
"change-email": "Change Email",
"new-email": "New Email",
"validate-email": "Validate Email", "validate-email": "Validate Email",
"send-validation-email": "Send Validation Email", "send-validation-email": "Send Validation Email",
"change-password": "Change Password",
"password-reset-email": "Send Password Reset Email", "password-reset-email": "Send Password Reset Email",
"force-password-reset": "Force Password Reset & Log User Out", "force-password-reset": "Force Password Reset & Log User Out",
"ban": "Ban", "ban": "Ban User(s)",
"ban-users": "Ban User(s)",
"temp-ban": "Ban User(s) Temporarily", "temp-ban": "Ban User(s) Temporarily",
"unban": "Unban User(s)", "unban": "Unban User(s)",
"reset-lockout": "Reset Lockout", "reset-lockout": "Reset Lockout",
"reset-flags": "Reset Flags", "reset-flags": "Reset Flags",
"delete": "Delete", "delete": "Delete <strong>User(s)</strong>",
"delete-users": "Delete <strong>User(s)</strong>",
"delete-content": "Delete User(s) <strong>Content</strong>", "delete-content": "Delete User(s) <strong>Content</strong>",
"purge": "Delete <strong>User(s)</strong> and <strong>Content</strong>", "purge": "Delete <strong>User(s)</strong> and <strong>Content</strong>",
"download-csv": "Download CSV", "download-csv": "Download CSV",
"custom-user-fields": "Custom User Fields",
"manage-groups": "Manage Groups", "manage-groups": "Manage Groups",
"set-reputation": "Set Reputation",
"add-group": "Add Group", "add-group": "Add Group",
"create": "Create User", "create": "Create User",
"invite": "Invite by Email", "invite": "Invite by Email",
@@ -57,10 +49,6 @@
"users.username": "username", "users.username": "username",
"users.email": "email", "users.email": "email",
"users.no-email": "(no email)", "users.no-email": "(no email)",
"users.validated": "Validated",
"users.not-validated": "Not Validated",
"users.validation-pending": "Validation Pending",
"users.validation-expired": "Validation Expired",
"users.ip": "IP", "users.ip": "IP",
"users.postcount": "postcount", "users.postcount": "postcount",
"users.reputation": "reputation", "users.reputation": "reputation",
@@ -87,7 +75,6 @@
"alerts.button-ban-x": "Ban %1 user(s)", "alerts.button-ban-x": "Ban %1 user(s)",
"alerts.unban-success": "User(s) unbanned!", "alerts.unban-success": "User(s) unbanned!",
"alerts.lockout-reset-success": "Lockout(s) reset!", "alerts.lockout-reset-success": "Lockout(s) reset!",
"alerts.password-change-success": "Password(s) changed!",
"alerts.flag-reset-success": "Flags(s) reset!", "alerts.flag-reset-success": "Flags(s) reset!",
"alerts.no-remove-yourself-admin": "You can't remove yourself as Administrator!", "alerts.no-remove-yourself-admin": "You can't remove yourself as Administrator!",
"alerts.make-admin-success": "User is now administrator.", "alerts.make-admin-success": "User is now administrator.",
@@ -113,7 +100,6 @@
"alerts.create": "Create User", "alerts.create": "Create User",
"alerts.button-create": "Create", "alerts.button-create": "Create",
"alerts.button-cancel": "Cancel", "alerts.button-cancel": "Cancel",
"alerts.button-change": "Change",
"alerts.error-passwords-different": "Passwords must match!", "alerts.error-passwords-different": "Passwords must match!",
"alerts.error-x": "<strong>Error</strong><p>%1</p>", "alerts.error-x": "<strong>Error</strong><p>%1</p>",
"alerts.create-success": "User created!", "alerts.create-success": "User created!",
@@ -121,32 +107,6 @@
"alerts.prompt-email": "Emails: ", "alerts.prompt-email": "Emails: ",
"alerts.email-sent-to": "An invitation email has been sent to %1", "alerts.email-sent-to": "An invitation email has been sent to %1",
"alerts.x-users-found": "%1 user(s) found, (%2 seconds)", "alerts.x-users-found": "%1 user(s) found, (%2 seconds)",
"alerts.select-a-single-user-to-change-email": "Select a single user to change email",
"export": "Export",
"export-users-fields-title": "Select CSV Fields",
"export-field-email": "Email",
"export-field-username": "Username",
"export-field-uid": "UID",
"export-field-ip": "IP",
"export-field-joindate": "Join date",
"export-field-lastonline": "Last Online",
"export-field-lastposttime": "Last Post Time",
"export-field-reputation": "Reputation",
"export-field-postcount": "Post Count",
"export-field-topiccount": "Topic Count",
"export-field-profileviews": "Profile Views",
"export-field-followercount": "Follower Count",
"export-field-followingcount": "Following Count",
"export-field-fullname": "Full Name",
"export-field-website": "Website",
"export-field-location": "Location",
"export-field-birthday": "Birthday",
"export-field-signature": "Signature",
"export-field-aboutme": "About Me",
"export-users-started": "Exporting users as csv, this might take a while. You will receive a notification when it is complete.", "export-users-started": "Exporting users as csv, this might take a while. You will receive a notification when it is complete.",
"export-users-completed": "Users exported as csv, click here to download.", "export-users-completed": "Users exported as csv, click here to download."
"email": "Email",
"password": "Password",
"manage": "Manage"
} }

View File

@@ -14,7 +14,6 @@
"manage/users": "الأعضاء", "manage/users": "الأعضاء",
"manage/admins-mods": "Admins & Mods", "manage/admins-mods": "Admins & Mods",
"manage/registration": "قائمة انتظار التسجيل", "manage/registration": "قائمة انتظار التسجيل",
"manage/flagged-content": "Flagged Content",
"manage/post-queue": "قائمة انتظار المشاركة", "manage/post-queue": "قائمة انتظار المشاركة",
"manage/groups": "المجموعات", "manage/groups": "المجموعات",
"manage/ip-blacklist": "قائمة حظر عناوين IP", "manage/ip-blacklist": "قائمة حظر عناوين IP",
@@ -38,7 +37,6 @@
"settings/tags": "الكلمات المفتاحية", "settings/tags": "الكلمات المفتاحية",
"settings/notifications": "التنبيهات", "settings/notifications": "التنبيهات",
"settings/api": "API Access", "settings/api": "API Access",
"settings/activitypub": "Federation (ActivityPub)",
"settings/sounds": "Sounds", "settings/sounds": "Sounds",
"settings/social": "Social", "settings/social": "Social",
"settings/cookies": "Cookies", "settings/cookies": "Cookies",
@@ -74,9 +72,7 @@
"development/info": "Info", "development/info": "Info",
"rebuild-and-restart-forum": "Rebuild & Restart Forum", "rebuild-and-restart-forum": "Rebuild & Restart Forum",
"rebuild-and-restart": "Rebuild & Restart",
"restart-forum": "Restart Forum", "restart-forum": "Restart Forum",
"restart": "Restart",
"logout": "Log out", "logout": "Log out",
"view-forum": "View Forum", "view-forum": "View Forum",

View File

@@ -1,48 +0,0 @@
{
"intro-lead": "What is Federation?",
"intro-body": "NodeBB is able to communicate with other NodeBB instances that support it. This is achieved through a protocol called <a href=\"https://activitypub.rocks/\">ActivityPub</a>. If enabled, NodeBB will also be able to communicate with other apps and websites that use ActivityPub (e.g. Mastodon, Peertube, etc.)",
"general": "General",
"pruning": "Content Pruning",
"content-pruning": "Days to keep remote content",
"content-pruning-help": "Note that remote content that has received engagement (a reply or a upvote/downvote) will be preserved. (0 for disabled)",
"user-pruning": "Days to cache remote user accounts",
"user-pruning-help": "Remote user accounts will only be pruned if they have no posts. Otherwise they will be re-retrieved. (0 for disabled)",
"enabled": "Enable Federation",
"enabled-help": "If enabled, will allow this NodeBB will be able to communicate with all Activitypub-enabled clients on the wider fediverse.",
"allowLoopback": "Allow loopback processing",
"allowLoopback-help": "Useful for debugging purposes only. You should probably leave this disabled.",
"probe": "Open in App",
"probe-enabled": "Try to open ActivityPub-enabled resources in NodeBB",
"probe-enabled-help": "If enabled, NodeBB will check every external link for an ActivityPub equivalent, and load it in NodeBB instead.",
"probe-timeout": "Lookup Timeout (milliseconds)",
"probe-timeout-help": "(Default: 2000) If the lookup query does not receive a response within the set timeframe, will send the user to the link directly instead. Adjust this number higher if sites are responding slowly and you wish to give extra time.",
"rules": "Categorization",
"rules-intro": "Content discovered via ActivityPub can be automatically categorized based on certain rules (e.g. hashtag)",
"rules.modal.title": "How it works",
"rules.modal.instructions": "Any incoming content is checked against these categorization rules, and matching content is automatically moved into the category of choice.<br /><br /><strong>N.B.</strong> Content that is already categorized (i.e. in a remote category) will not pass through these rules.",
"rules.add": "Add New Rule",
"rules.help-hashtag": "Topics containing this case-insensitive hashtag will match. Do not enter the <code>#</code> symbol",
"rules.help-user": "Topics created by the entered user will match. Enter a handle or full ID (e.g. <code>bob@example.org</code> or <code>https://example.org/users/bob</code>.",
"rules.type": "Type",
"rules.value": "Value",
"rules.cid": "Category",
"relays": "Relays",
"relays.intro": "A relay improves discovery of content to and from your NodeBB. Subscribing to a relay means content received by the relay is forwarded here, and content posted here is syndicated outward by the relay.",
"relays.warning": "Note: Relays can send larges amounts of traffic in, and may increase storage and processing costs.",
"relays.litepub": "NodeBB follows the LitePub-style relay standard. The URL you enter here should end with <code>/actor</code>.",
"relays.add": "Add New Relay",
"relays.relay": "Relay",
"relays.state": "State",
"relays.state-0": "Pending",
"relays.state-1": "Receiving only",
"relays.state-2": "Active",
"server-filtering": "Filtering",
"count": "This NodeBB is currently aware of <strong>%1</strong> server(s)",
"server.filter-help": "Specify servers you would like to bar from federating with your NodeBB. Alternatively, you may opt to selectively <em>allow</em> federation with specific servers, instead. Both options are supported, although they are mutually exclusive.",
"server.filter-help-hostname": "Enter just the instance hostname below (e.g. <code>example.org</code>), separated by line breaks.",
"server.filter-allow-list": "Use this as an Allow List instead"
}

View File

@@ -41,6 +41,9 @@
"sockets.default-placeholder": "Default: %1", "sockets.default-placeholder": "Default: %1",
"sockets.delay": "Reconnection Delay", "sockets.delay": "Reconnection Delay",
"analytics.settings": "Analytics Settings",
"analytics.max-cache": "Analytics Cache Max Value",
"analytics.max-cache-help": "On high-traffic installs, the cache could be exhausted continuously if there are more concurrent active users than the Max Cache value. (Restart required)",
"compression.settings": "Compression Settings", "compression.settings": "Compression Settings",
"compression.enable": "Enable Compression", "compression.enable": "Enable Compression",
"compression.help": "This setting enables gzip compression. For a high-traffic website in production, the best way to put compression in place is to implement it at a reverse proxy level. You can enable it here for testing purposes." "compression.help": "This setting enables gzip compression. For a high-traffic website in production, the best way to put compression in place is to implement it at a reverse proxy level. You can enable it here for testing purposes."

View File

@@ -21,8 +21,6 @@
"last-seen-never": "This key has never been used.", "last-seen-never": "This key has never been used.",
"no-description": "No description specified.", "no-description": "No description specified.",
"actions": "Actions", "actions": "Actions",
"edit": "Edit",
"roll": "Roll",
"delete-confirm": "Are you sure you wish to delete this token? It will not be recoverable.", "delete-confirm": "Are you sure you wish to delete this token? It will not be recoverable.",
"roll-confirm": "Are you sure you wish to regenerate this token? The old token will be immediately revoked and will not be recoverable." "roll-confirm": "Are you sure you wish to regenerate this token? The old token will be immediately revoked and will not be recoverable."

View File

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

View File

@@ -28,8 +28,6 @@
"smtp-transport.password": "Password", "smtp-transport.password": "Password",
"smtp-transport.pool": "Enable pooled connections", "smtp-transport.pool": "Enable pooled connections",
"smtp-transport.pool-help": "Pooling connections prevents NodeBB from creating a new connection for every email. This option only applies if SMTP Transport is enabled.", "smtp-transport.pool-help": "Pooling connections prevents NodeBB from creating a new connection for every email. This option only applies if SMTP Transport is enabled.",
"smtp-transport.allow-self-signed": "Allow self-signed certificates",
"smtp-transport.allow-self-signed-help": "Enabling this setting will allow you to use self-signed or invalid TLS certificates.",
"template": "Edit Email Template", "template": "Edit Email Template",
"template.select": "Select Email Template", "template.select": "Select Email Template",

View File

@@ -1,13 +1,11 @@
{ {
"general-settings": "General Settings",
"on-this-page": "On this page:",
"site-settings": "اعدادات الموقع", "site-settings": "اعدادات الموقع",
"title": "عنوان الموقع", "title": "عنوان الموقع",
"title.short": "عنوان قصير", "title.short": "عنوان قصير",
"title.short-placeholder": "ان لم تقم بكتابة عنوان مختصر, سيتم استخدام عنوان الموقع الكلي", "title.short-placeholder": "ان لم تقم بكتابة عنوان مختصر, سيتم استخدام عنوان الموقع الكلي",
"title.url": "Title Link URL", "title.url": "Title Link URL",
"title.url-placeholder": "The URL of the site title", "title.url-placeholder": "The URL of the site title",
"title.url-help": "When the title is clicked, send users to this address. If left blank, user will be sent to the forum index. Note: This is not the external URL used in emails, etc. That is set by the <code>url</code> property in config.json", "title.url-help": "When the title is clicked, send users to this address. If left blank, user will be sent to the forum index. <br> Note: This is not the external URL used in emails, etc. That is set by the <code>url</code> property in config.json",
"title.name": "اسم المنتدي", "title.name": "اسم المنتدي",
"title.show-in-header": "Show Site Title in Header", "title.show-in-header": "Show Site Title in Header",
"browser-title": "عنوان المتصفح", "browser-title": "عنوان المتصفح",
@@ -15,10 +13,10 @@
"title-layout": "Title Layout", "title-layout": "Title Layout",
"title-layout-help": "Define how the browser title will be structured ie. &#123;pageTitle&#125; | &#123;browserTitle&#125;", "title-layout-help": "Define how the browser title will be structured ie. &#123;pageTitle&#125; | &#123;browserTitle&#125;",
"description.placeholder": "A short description about your community", "description.placeholder": "A short description about your community",
"description": "Site Description", "description": "وصف الموقع",
"keywords": "الكلمات الدليله للموقع", "keywords": "الكلمات الدليله للموقع",
"keywords-placeholder": "Keywords describing your community, comma-separated", "keywords-placeholder": "Keywords describing your community, comma-separated",
"logo-and-icons": "Site Logo & Icons", "logo": "شعار الموقع",
"logo.image": "صورة", "logo.image": "صورة",
"logo.image-placeholder": "Path to a logo to display on forum header", "logo.image-placeholder": "Path to a logo to display on forum header",
"logo.upload": "رفع", "logo.upload": "رفع",
@@ -48,16 +46,5 @@
"background-color-help": "Color used for splash screen background when website is installed as a PWA", "background-color-help": "Color used for splash screen background when website is installed as a PWA",
"undo-timeout": "Undo Timeout", "undo-timeout": "Undo Timeout",
"undo-timeout-help": "Some operations such as moving topics will allow for the moderator to undo their action within a certain timeframe. Set to 0 to disable undo completely.", "undo-timeout-help": "Some operations such as moving topics will allow for the moderator to undo their action within a certain timeframe. Set to 0 to disable undo completely.",
"topic-tools": "Topic Tools", "topic-tools": "Topic Tools"
"home-page": "Home Page", }
"home-page-route": "Home Page Route",
"home-page-description": "Choose what page is shown when users navigate to the root URL of your forum.",
"custom-route": "Custom Route",
"allow-user-home-pages": "Allow User Home Pages",
"home-page-title": "Title of the home page (default \"Home\")",
"default-language": "اللغة الافتراضية",
"auto-detect": "الكشف عن إعدادات اللغة للزوار بشكل آلي",
"default-language-help": "تُحدد اللغة الافتراضية إعدادات اللغة لجميع المستخدمين الذين يزورون المنتدى. <br />يمكن للأعضاء تجاوز اللغة الافتراضية من خلال صفحة إعدادات الحساب الخاصة بهم.",
"post-sharing": "Post Sharing",
"info-plugins-additional": "Plugins can add additional networks for sharing posts."
}

View File

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

View File

@@ -0,0 +1,8 @@
{
"home-page": "Home Page",
"description": "Choose what page is shown when users navigate to the root URL of your forum.",
"home-page-route": "Home Page Route",
"custom-route": "Custom Route",
"allow-user-home-pages": "Allow User Home Pages",
"home-page-title": "Title of the home page (default \"Home\")"
}

View File

@@ -0,0 +1,6 @@
{
"language-settings": "اعدادات اللغة",
"description": "تُحدد اللغة الافتراضية إعدادات اللغة لجميع المستخدمين الذين يزورون المنتدى. <br />يمكن للأعضاء تجاوز اللغة الافتراضية من خلال صفحة إعدادات الحساب الخاصة بهم.",
"default-language": "اللغة الافتراضية",
"auto-detect": "الكشف عن إعدادات اللغة للزوار بشكل آلي"
}

View File

@@ -1,5 +1,4 @@
{ {
"navigation": "Navigation",
"icon": "Icon:", "icon": "Icon:",
"change-icon": "change", "change-icon": "change",
"route": "Route:", "route": "Route:",
@@ -10,7 +9,7 @@
"id": "ID: <small>optional</small>", "id": "ID: <small>optional</small>",
"properties": "Properties:", "properties": "Properties:",
"show-to-groups": "Show to 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 class=&quot;dropdown-item&quot; href&#x3D;&quot;https://myforum.com&quot;&gt;Link 1&lt;/a&gt;&lt;/li&gt;",

View File

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

View File

@@ -2,14 +2,7 @@
"reputation": "Reputation Settings", "reputation": "Reputation Settings",
"disable": "Disable Reputation System", "disable": "Disable Reputation System",
"disable-down-voting": "Disable Down Voting", "disable-down-voting": "Disable Down Voting",
"upvote-visibility": "Up Vote visibility", "votes-are-public": "All Votes Are Public",
"upvote-visibility-all": "Everyone can see up votes",
"upvote-visibility-loggedin": "Only logged in users can see up votes",
"upvote-visibility-privileged": "Only privileged users like admins & moderators can see up votes",
"downvote-visibility": "Down Vote visibility",
"downvote-visibility-all": "Everyone can see down votes",
"downvote-visibility-loggedin": "Only logged in users can see down votes",
"downvote-visibility-privileged": "Only privileged users like admins & moderators can see down votes",
"thresholds": "Activity Thresholds", "thresholds": "Activity Thresholds",
"min-rep-upvote": "Minimum reputation to upvote posts", "min-rep-upvote": "Minimum reputation to upvote posts",
"upvotes-per-day": "Upvotes per day (set to 0 for unlimited upvotes)", "upvotes-per-day": "Upvotes per day (set to 0 for unlimited upvotes)",
@@ -18,8 +11,8 @@
"downvotes-per-day": "Downvotes per day (set to 0 for unlimited downvotes)", "downvotes-per-day": "Downvotes per day (set to 0 for unlimited downvotes)",
"downvotes-per-user-per-day": "Downvotes per user per day (set to 0 for unlimited downvotes)", "downvotes-per-user-per-day": "Downvotes per user per day (set to 0 for unlimited downvotes)",
"min-rep-chat": "Minimum reputation to send chat messages", "min-rep-chat": "Minimum reputation to send chat messages",
"min-rep-post-links": "Minimum reputation to post links",
"min-rep-flag": "Minimum reputation to flag posts", "min-rep-flag": "Minimum reputation to flag posts",
"min-rep-website": "Minimum reputation to add \"Website\" to user profile",
"min-rep-aboutme": "Minimum reputation to add \"About me\" to user profile", "min-rep-aboutme": "Minimum reputation to add \"About me\" to user profile",
"min-rep-signature": "Minimum reputation to add \"Signature\" to user profile", "min-rep-signature": "Minimum reputation to add \"Signature\" to user profile",
"min-rep-profile-picture": "Minimum reputation to add \"Profile Picture\" to user profile", "min-rep-profile-picture": "Minimum reputation to add \"Profile Picture\" to user profile",
@@ -29,15 +22,10 @@
"flags.limit-per-target": "Maximum number of times something can be flagged", "flags.limit-per-target": "Maximum number of times something can be flagged",
"flags.limit-per-target-placeholder": "Default: 0", "flags.limit-per-target-placeholder": "Default: 0",
"flags.limit-per-target-help": "When a post or user is flagged multiple times, each additional flag is considered a &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.limit-post-flags-per-day": "Maximum number of times a user can flag posts in a day", "flags.auto-flag-on-downvote-threshold": "Number of downvotes to auto flag posts (Set to 0 to disable, default: 0)",
"flags.limit-post-flags-per-day-help": "Set to 0 to disable, (default: 10)",
"flags.limit-user-flags-per-day": "Maximum number of times a user can flag users in a day",
"flags.limit-user-flags-per-day-help": "Set to 0 to disable, (default: 10)",
"flags.auto-flag-on-downvote-threshold": "Number of downvotes to auto flag posts",
"flags.auto-flag-on-downvote-threshold-help": "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-resolve": "Do the following when a flag is resolved",
"flags.action-on-reject": "Do the following when a flag is rejected", "flags.action-on-reject": "Do the following when a flag is rejected",
"flags.action.nothing": "Do nothing", "flags.action.nothing": "Do nothing",
"flags.action.rescind": "Rescind the notification sent to moderators/administrators" "flags.action.rescind": "Rescind the notification send to moderators/administrators"
} }

View File

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

View File

@@ -3,7 +3,6 @@
"link-to-manage": "Manage Tags", "link-to-manage": "Manage Tags",
"system-tags": "System Tags", "system-tags": "System Tags",
"system-tags-help": "Only privileged users will be able to use these tags.", "system-tags-help": "Only privileged users will be able to use these tags.",
"tags-per-topic": "Tags per topic",
"min-per-topic": "Minimum Tags per Topic", "min-per-topic": "Minimum Tags per Topic",
"max-per-topic": "Maximum Tags per Topic", "max-per-topic": "Maximum Tags per Topic",
"min-length": "Minimum Tag Length", "min-length": "Minimum Tag Length",

View File

@@ -9,10 +9,9 @@
"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",
"resize-image-width-threshold-help": "(in pixels, default: 2000 pixels, set to 0 to disable)", "resize-image-width-threshold-help": "(in pixels, default: 1520 pixels, set to 0 to disable)",
"resize-image-width": "Resize images down to specified width", "resize-image-width": "Resize images down to specified width",
"resize-image-width-help": "(in pixels, default: 760 pixels, set to 0 to disable)", "resize-image-width-help": "(in pixels, default: 760 pixels, set to 0 to disable)",
"resize-image-keep-original": "Keep original image after resize",
"resize-image-quality": "Quality to use when resizing images", "resize-image-quality": "Quality to use when resizing images",
"resize-image-quality-help": "Use a lower quality setting to reduce the file size of resized images.", "resize-image-quality-help": "Use a lower quality setting to reduce the file size of resized images.",
"max-file-size": "الحد الأقصى لحجم الملف (بالكيبيبايت)", "max-file-size": "الحد الأقصى لحجم الملف (بالكيبيبايت)",

View File

@@ -6,8 +6,8 @@
"allow-login-with.username-email": "اسم المستخدم أو البريد الالكتروني", "allow-login-with.username-email": "اسم المستخدم أو البريد الالكتروني",
"allow-login-with.username": "اسم المستخدم فقط", "allow-login-with.username": "اسم المستخدم فقط",
"account-settings": "إعدادت الحساب", "account-settings": "إعدادت الحساب",
"gdpr-enabled": "Enable GDPR consent collection", "gdpr_enabled": "Enable GDPR consent collection",
"gdpr-enabled-help": "When enabled, all new registrants will be required to explicitly give consent for data collection and usage under the <a href=\"https://ec.europa.eu/info/priorities/justice-and-fundamental-rights/data-protection/2018-reform-eu-data-protection-rules/eu-data-protection-rules_en\">General Data Protection Regulation (GDPR)</a>. <strong>Note</strong>: Enabling GDPR does not force pre-existing users to provide consent. To do so, you will need to install the GDPR plugin.", "gdpr_enabled_help": "When enabled, all new registrants will be required to explicitly give consent for data collection and usage under the <a href=\"https://ec.europa.eu/info/priorities/justice-and-fundamental-rights/data-protection/2018-reform-eu-data-protection-rules/eu-data-protection-rules_en\">General Data Protection Regulation (GDPR)</a>. <strong>Note</strong>: Enabling GDPR does not force pre-existing users to provide consent. To do so, you will need to install the GDPR plugin.",
"disable-username-changes": "عدم السماح بتغيير اسم المستخدم", "disable-username-changes": "عدم السماح بتغيير اسم المستخدم",
"disable-email-changes": "عدم السماح بتغيير البريد الالكتروني", "disable-email-changes": "عدم السماح بتغيير البريد الالكتروني",
"disable-password-changes": "عدم السماح بتغيير كلمة المرور", "disable-password-changes": "عدم السماح بتغيير كلمة المرور",
@@ -59,12 +59,11 @@
"max-about-me-length": "الحد الأعلى من الأحرف في حقل \"عني\"", "max-about-me-length": "الحد الأعلى من الأحرف في حقل \"عني\"",
"terms-of-use": "شروط استخدام المنتدى <small>(تترك فارغة لتعطيلها)</small>", "terms-of-use": "شروط استخدام المنتدى <small>(تترك فارغة لتعطيلها)</small>",
"user-search": "بحث الأعضاء", "user-search": "بحث الأعضاء",
"user-search-results-per-page": "Number of users to display in search results", "user-search-results-per-page": "عدد النتائج المراد عرضها",
"default-user-settings": "إعدادات الأعضاء الافتراضية", "default-user-settings": "إعدادات الأعضاء الافتراضية",
"show-email": "عرض البريد الإلكتروني", "show-email": "عرض البريد الإلكتروني",
"show-fullname": "عرض الاسم الكامل", "show-fullname": "عرض الاسم الكامل",
"restrict-chat": "السماح فقط برسائل الدردشة من المستخدمين الذين أتبعهم", "restrict-chat": "السماح فقط برسائل الدردشة من المستخدمين الذين أتبعهم",
"disable-incoming-chats": "Disable incoming chat messages",
"outgoing-new-tab": "Open outgoing links in new tab", "outgoing-new-tab": "Open outgoing links in new tab",
"topic-search": "Enable In-Topic Searching", "topic-search": "Enable In-Topic Searching",
"update-url-with-post-index": "Update url with post index while browsing topics", "update-url-with-post-index": "Update url with post index while browsing topics",
@@ -80,19 +79,7 @@
"follow-replied-topics": "Follow topics that you reply to", "follow-replied-topics": "Follow topics that you reply to",
"default-notification-settings": "Default notification settings", "default-notification-settings": "Default notification settings",
"categoryWatchState": "Default category watch state", "categoryWatchState": "Default category watch state",
"categoryWatchState.tracking": "Tracking", "categoryWatchState.watching": "Watching",
"categoryWatchState.notwatching": "Not Watching", "categoryWatchState.notwatching": "Not Watching",
"categoryWatchState.ignoring": "Ignoring", "categoryWatchState.ignoring": "Ignoring"
"restrictions-new": "New User Restrictions", }
"restrictions.rep-threshold": "Reputation threshold before these restrictions are lifted",
"restrictions.seconds-between-new": "Seconds between posts for new users",
"restrictions.seconds-before-new": "Seconds before a new user can make their first post",
"restrictions.seconds-edit-after-new": "Number of seconds a post remains editable for new users (set to 0 to disable)",
"restrictions.milliseconds-between-messages": "Time between chat messages for new users (ms)",
"restrictions.groups-exempt-from-new-user-restrictions": "Select groups that should be exempt from the new user restrictions",
"guest-settings": "Guest Settings",
"handles.enabled": "Allow guest handles",
"handles.enabled-help": "This option exposes a new field that allows guests to pick a name to associate with each post they make. If disabled, they will simply be called \"Guest\"",
"topic-views.enabled": "Allow guests to increase topic view counts",
"reply-notifications.enabled": "Allow guests to generate reply notifications"
}

View File

@@ -1,9 +0,0 @@
{
"post-sort-option": "Post sort option, %1",
"topic-sort-option": "Topic sort option, %1",
"user-avatar-for": "User avatar for %1",
"profile-page-for": "Profile page for user %1",
"user-watched-tags": "User watched tags",
"delete-upload-button": "Delete upload button",
"group-page-link-for": "Group page link for %1"
}

View File

@@ -1,28 +1,21 @@
{ {
"category": "قسم", "category": "قسم",
"subcategories": "قسم فرعي", "subcategories": "قسم فرعي",
"uncategorized": "Uncategorized", "new_topic_button": "موضوع جديد",
"uncategorized.description": "Topics that do not strictly fit in with any existing categories",
"handle.description": "This category can be followed from the open social web via the handle %1",
"new-topic-button": "موضوع جديد",
"guest-login-post": "سجل الدخول للمشاركة", "guest-login-post": "سجل الدخول للمشاركة",
"no-topics": "<strong>لا توجد مواضيع في هذه القسم</strong>لم لا تحاول إنشاء موضوع؟<br />", "no_topics": "<strong>لا توجد مواضيع في هذه القسم</strong>لم لا تحاول إنشاء موضوع؟<br />",
"no-followers": "Nobody on this website is tracking or watching this category. Track or watch this category in order to begin receiving updates.",
"browsing": "تصفح", "browsing": "تصفح",
"no-replies": "لم يرد أحد", "no_replies": "لم يرد أحد",
"no-new-posts": "لا توجد مشاركات جديدة.", "no_new_posts": "لا توجد مشاركات جديدة.",
"watch": "تابع", "watch": "تابع",
"ignore": "تجاهل", "ignore": "تجاهل",
"watching": "متابع", "watching": "متابع",
"tracking": "Tracking",
"not-watching": "لست متابع", "not-watching": "لست متابع",
"ignoring": "متجاهل", "ignoring": "متجاهل",
"watching.description": "Notify me of new topics.<br/>Show topics in unread & recent", "watching.description": "أظهر المواضيع في الغير مقروء و الحديث",
"tracking.description": "Shows topics in unread & recent",
"not-watching.description": "Do not show topics in unread, show in recent", "not-watching.description": "Do not show topics in unread, show in recent",
"ignoring.description": "Do not show topics in unread & recent", "ignoring.description": "Do not show topics in unread and recent",
"watching.message": "You are now watching updates from this category and all subcategories", "watching.message": "You are now watching updates from this category and all subcategories",
"tracking.message": "You are now tracking updates from this category and all subcategories",
"notwatching.message": "You are not watching updates from this category and all subcategories", "notwatching.message": "You are not watching updates from this category and all subcategories",
"ignoring.message": "You are now ignoring updates from this category and all subcategories", "ignoring.message": "You are now ignoring updates from this category and all subcategories",
"watched-categories": "الأقسام المُتابعة", "watched-categories": "الأقسام المُتابعة",

View File

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

View File

@@ -3,7 +3,6 @@
"invalid-json": "Invalid JSON", "invalid-json": "Invalid JSON",
"wrong-parameter-type": "A value of type %3 was expected for property `%1`, but %2 was received instead", "wrong-parameter-type": "A value of type %3 was expected for property `%1`, but %2 was received instead",
"required-parameters-missing": "Required parameters were missing from this API call: %1", "required-parameters-missing": "Required parameters were missing from this API call: %1",
"reserved-ip-address": "Network requests to reserved IP ranges are not allowed.",
"not-logged-in": "لم تقم بتسجيل الدخول", "not-logged-in": "لم تقم بتسجيل الدخول",
"account-locked": "تم حظر حسابك مؤقتًا.", "account-locked": "تم حظر حسابك مؤقتًا.",
"search-requires-login": "البحث في المنتدى يتطلب حساب - الرجاء تسجيل الدخول أو التسجيل", "search-requires-login": "البحث في المنتدى يتطلب حساب - الرجاء تسجيل الدخول أو التسجيل",
@@ -33,7 +32,7 @@
"folder-exists": "Folder exists", "folder-exists": "Folder exists",
"invalid-pagination-value": "رقم الصفحة غير صحيح ، يجب أن يكون بين %1 و %2 .", "invalid-pagination-value": "رقم الصفحة غير صحيح ، يجب أن يكون بين %1 و %2 .",
"username-taken": "اسم المستخدم مأخوذ", "username-taken": "اسم المستخدم مأخوذ",
"email-taken": "Email address is already taken.", "email-taken": "البريد الالكتروني مأخوذ",
"email-nochange": "The email entered is the same as the email already on file.", "email-nochange": "The email entered is the same as the email already on file.",
"email-invited": "Email was already invited", "email-invited": "Email was already invited",
"email-not-confirmed": "Posting in some categories or topics is enabled once your email is confirmed, please click here to send a confirmation email.", "email-not-confirmed": "Posting in some categories or topics is enabled once your email is confirmed, please click here to send a confirmation email.",
@@ -43,21 +42,19 @@
"user-doesnt-have-email": "User \"%1\" does not have an email set.", "user-doesnt-have-email": "User \"%1\" does not have an email set.",
"email-confirm-failed": "لم نستطع تفعيل بريدك الإلكتروني، المرجو المحاولة لاحقًا.", "email-confirm-failed": "لم نستطع تفعيل بريدك الإلكتروني، المرجو المحاولة لاحقًا.",
"confirm-email-already-sent": "لقد تم ارسال بريد التأكيد، الرجاء اﻹنتظار 1% دقائق لإعادة اﻹرسال", "confirm-email-already-sent": "لقد تم ارسال بريد التأكيد، الرجاء اﻹنتظار 1% دقائق لإعادة اﻹرسال",
"confirm-email-expired": "Confirmation email expired",
"sendmail-not-found": "The sendmail executable could not be found, please ensure it is installed and executable by the user running NodeBB.", "sendmail-not-found": "The sendmail executable could not be found, please ensure it is installed and executable by the user running NodeBB.",
"digest-not-enabled": "This user does not have digests enabled, or the system default is not configured to send digests", "digest-not-enabled": "This user does not have digests enabled, or the system default is not configured to send digests",
"username-too-short": "اسم المستخدم قصير.", "username-too-short": "اسم المستخدم قصير.",
"username-too-long": "اسم المستخدم طويل", "username-too-long": "اسم المستخدم طويل",
"password-too-long": "كلمة السر طويلة", "password-too-long": "كلمة السر طويلة ",
"reset-rate-limited": "Too many password reset requests (rate limited)", "reset-rate-limited": "Too many password reset requests (rate limited)",
"reset-same-password": "Please use a password that is different from your current one", "reset-same-password": "Please use a password that is different from your current one",
"user-banned": "المستخدم محظور", "user-banned": "المستخدم محظور",
"user-banned-reason": "Sorry, this account has been banned (Reason: %1)", "user-banned-reason": "Sorry, this account has been banned (Reason: %1)",
"user-banned-reason-until": "Sorry, this account has been banned until %1 (Reason: %2)", "user-banned-reason-until": "Sorry, this account has been banned until %1 (Reason: %2)",
"user-too-new": "عذرا, يجب أن تنتظر 1% ثواني قبل قيامك بأول مشاركة", "user-too-new": "عذرا, يجب أن تنتظر 1% ثواني قبل قيامك بأول مشاركة",
"blacklisted-ip": "نأسف، لقد تم حظرك من استخدام وتصفح المنتدى. إذا كنت تعتقد أن هذا خطأ رجاءًا اتصل بالإدارة.", "blacklisted-ip": "نأسف، لقد تم حظرك من استخدام وتصفح المنتدى. إذا كنت تعتقد أن هذا خطأ رجاءًا اتصل بالإدارة. ",
"cant-blacklist-self-ip": "You can't blacklist your own IP", "ban-expiry-missing": "رجاءًا ضع تاريخ نهاية الحظر. ",
"ban-expiry-missing": "رجاءًا ضع تاريخ نهاية الحظر.",
"no-category": "قائمة غير موجودة", "no-category": "قائمة غير موجودة",
"no-topic": "موضوع غير موجود", "no-topic": "موضوع غير موجود",
"no-post": "رد غير موجود", "no-post": "رد غير موجود",
@@ -68,8 +65,7 @@
"no-chat-room": "Chat room does not exist", "no-chat-room": "Chat room does not exist",
"no-privileges": "لاتملك الصلاحيات اللازمة للقيام بهذه العملية", "no-privileges": "لاتملك الصلاحيات اللازمة للقيام بهذه العملية",
"category-disabled": "قائمة معطلة", "category-disabled": "قائمة معطلة",
"post-deleted": "Post deleted", "topic-locked": "الموضوع مقفول",
"topic-locked": "Topic locked",
"post-edit-duration-expired": "يسمح لك بتعديل مشاركتك حتى %1 ثانية من نشرها", "post-edit-duration-expired": "يسمح لك بتعديل مشاركتك حتى %1 ثانية من نشرها",
"post-edit-duration-expired-minutes": "يسمح لك بتعديل مشاركتك حتى %1 دقيقة من نشرها", "post-edit-duration-expired-minutes": "يسمح لك بتعديل مشاركتك حتى %1 دقيقة من نشرها",
"post-edit-duration-expired-minutes-seconds": "يسمح لك بتعديل مشاركتك حتى %1 دقيقة و %2 ثوان من نشرها", "post-edit-duration-expired-minutes-seconds": "يسمح لك بتعديل مشاركتك حتى %1 دقيقة و %2 ثوان من نشرها",
@@ -93,7 +89,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",
"too-many-posts-newbie-minutes": "As a new user, you can only post once every %1 minute(s) until you have earned %2 reputation - please wait before posting again",
"already-posting": "You are already posting", "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)",
@@ -123,7 +118,7 @@
"cant-make-banned-users-admin": "You can't make banned users admin.", "cant-make-banned-users-admin": "You can't make banned users admin.",
"cant-remove-last-admin": "رجاءًا ، أضف مدير أخر قبل حذف صلاحيات الإدارة من حسابك.", "cant-remove-last-admin": "رجاءًا ، أضف مدير أخر قبل حذف صلاحيات الإدارة من حسابك.",
"account-deletion-disabled": "Account deletion is disabled", "account-deletion-disabled": "Account deletion is disabled",
"cant-delete-admin": "رجاءًا أزل صلاحيات الإدارة قبل حذف الحساب.", "cant-delete-admin": "رجاءًا أزل صلاحيات الإدارة قبل حذف الحساب. ",
"already-deleting": "Already deleting", "already-deleting": "Already deleting",
"invalid-image": "Invalid image", "invalid-image": "Invalid image",
"invalid-image-type": "نوع الصورة غير مدعوم. الأنواع المدعومة هي : %1", "invalid-image-type": "نوع الصورة غير مدعوم. الأنواع المدعومة هي : %1",
@@ -152,12 +147,9 @@
"invalid-file": "ملف غير مقبول", "invalid-file": "ملف غير مقبول",
"uploads-are-disabled": "رفع الملفات غير مفعل", "uploads-are-disabled": "رفع الملفات غير مفعل",
"signature-too-long": "عذرا، توقيعك يجب ألا يتجاوز %1 حرفًا.", "signature-too-long": "عذرا، توقيعك يجب ألا يتجاوز %1 حرفًا.",
"about-me-too-long": "نأسف، ( عني ) لا يمكن أن يكون أكثر من %1 حرف.", "about-me-too-long": "نأسف، ( عني ) لا يمكن أن يكون أكثر من %1 حرف. ",
"cant-chat-with-yourself": "لايمكنك فتح محادثة مع نفسك", "cant-chat-with-yourself": "لايمكنك فتح محادثة مع نفسك",
"chat-restricted": "هذا المستخدم عطل المحادثات الواردة عليه. يجب أن يتبعك حتى تتمكن من فتح محادثة معه.", "chat-restricted": "هذا المستخدم عطل المحادثات الواردة عليه. يجب أن يتبعك حتى تتمكن من فتح محادثة معه.",
"chat-allow-list-user-already-added": "This user is already in your allow list",
"chat-deny-list-user-already-added": "This user is already in your deny list",
"chat-user-blocked": "You have been blocked by this user.",
"chat-disabled": "نظام المحادثة معطل.", "chat-disabled": "نظام المحادثة معطل.",
"too-many-messages": "لقد أرسلت الكثير من الرسائل، الرجاء اﻹنتظار قليلاً", "too-many-messages": "لقد أرسلت الكثير من الرسائل، الرجاء اﻹنتظار قليلاً",
"invalid-chat-message": "الرسالة غير صالحة.", "invalid-chat-message": "الرسالة غير صالحة.",
@@ -171,37 +163,24 @@
"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-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.", "cant-remove-users-from-chat-room": "Can't remove users from chat room.",
"chat-room-name-too-long": "Chat room name too long. Names can't be longer than %1 characters.", "chat-room-name-too-long": "Chat room name too long.",
"remote-chat-received-too-long": "You received a chat message from %1, but it was too long and was rejected.",
"already-voting-for-this-post": "لقد شاركت بالتصويت ، ألا تذكر؟", "already-voting-for-this-post": "لقد شاركت بالتصويت ، ألا تذكر؟",
"reputation-system-disabled": "نظام السمعة معطل", "reputation-system-disabled": "نظام السمعة معطل",
"downvoting-disabled": "التصويتات السلبية معطلة", "downvoting-disabled": "التصويتات السلبية معطلة",
"not-enough-reputation-to-chat": "You need %1 reputation to chat", "not-enough-reputation-to-chat": "You need %1 reputation to chat",
"not-enough-reputation-to-upvote": "You need %1 reputation to upvote", "not-enough-reputation-to-upvote": "You need %1 reputation to upvote",
"not-enough-reputation-to-downvote": "You need %1 reputation to downvote", "not-enough-reputation-to-downvote": "You need %1 reputation to downvote",
"not-enough-reputation-to-post-links": "You need %1 reputation to post links",
"not-enough-reputation-to-flag": "You need %1 reputation to flag this post", "not-enough-reputation-to-flag": "You need %1 reputation to flag this post",
"not-enough-reputation-min-rep-website": "You need %1 reputation to add a website", "not-enough-reputation-min-rep-website": "You need %1 reputation to add a website",
"not-enough-reputation-min-rep-aboutme": "You need %1 reputation to add an about me", "not-enough-reputation-min-rep-aboutme": "You need %1 reputation to add an about me",
"not-enough-reputation-min-rep-signature": "You need %1 reputation to add a signature", "not-enough-reputation-min-rep-signature": "You need %1 reputation to add a signature",
"not-enough-reputation-min-rep-profile-picture": "You need %1 reputation to add a profile picture", "not-enough-reputation-min-rep-profile-picture": "You need %1 reputation to add a profile picture",
"not-enough-reputation-min-rep-cover-picture": "You need %1 reputation to add a cover picture", "not-enough-reputation-min-rep-cover-picture": "You need %1 reputation to add a cover picture",
"not-enough-reputation-custom-field": "You need %1 reputation for %2",
"custom-user-field-value-too-long": "Custom field value too long, %1",
"custom-user-field-select-value-invalid": "Custom field selected option is invalid, %1",
"custom-user-field-invalid-text": "Custom field text is invalid, %1",
"custom-user-field-invalid-link": "Custom field link is invalid, %1",
"custom-user-field-invalid-number": "Custom field number is invalid, %1",
"custom-user-field-invalid-date": "Custom field date is invalid, %1",
"invalid-custom-user-field": "Invalid custom user field, \"%1\" is already used by NodeBB",
"post-already-flagged": "You have already flagged this post", "post-already-flagged": "You have already flagged this post",
"user-already-flagged": "You have already flagged this user", "user-already-flagged": "You have already flagged this user",
"post-flagged-too-many-times": "This post has been flagged by others already", "post-flagged-too-many-times": "This post has been flagged by others already",
"user-flagged-too-many-times": "This user has been flagged by others already", "user-flagged-too-many-times": "This user has been flagged by others already",
"too-many-post-flags-per-day": "You can only flag %1 post(s) per day",
"too-many-user-flags-per-day": "You can only flag %1 user(s) per day",
"cant-flag-privileged": "You are not allowed to flag the profiles or content of privileged users (moderators/global moderators/admins)", "cant-flag-privileged": "You are not allowed to flag the profiles or content of privileged users (moderators/global moderators/admins)",
"cant-locate-flag-report": "Cannot locate flag report",
"self-vote": "You cannot vote on your own post", "self-vote": "You cannot vote on your own post",
"too-many-upvotes-today": "You can only upvote %1 times a day", "too-many-upvotes-today": "You can only upvote %1 times a day",
"too-many-upvotes-today-user": "You can only upvote a user %1 times a day", "too-many-upvotes-today-user": "You can only upvote a user %1 times a day",
@@ -219,7 +198,6 @@
"not-in-room": "المستخدم غير موجود في الغرفة.", "not-in-room": "المستخدم غير موجود في الغرفة.",
"cant-kick-self": "لا يمكنك طرد نفسك من المجموعة.", "cant-kick-self": "لا يمكنك طرد نفسك من المجموعة.",
"no-users-selected": "لا يوجد مستخدم محدد.", "no-users-selected": "لا يوجد مستخدم محدد.",
"no-groups-selected": "No group(s) selected",
"invalid-home-page-route": "Invalid home page route", "invalid-home-page-route": "Invalid home page route",
"invalid-session": "Invalid Session", "invalid-session": "Invalid Session",
"invalid-session-text": "It looks like your login session is no longer active. Please refresh this page.", "invalid-session-text": "It looks like your login session is no longer active. Please refresh this page.",
@@ -235,14 +213,10 @@
"already-unblocked": "This user is already unblocked", "already-unblocked": "This user is already unblocked",
"no-connection": "There seems to be a problem with your internet connection", "no-connection": "There seems to be a problem with your internet connection",
"socket-reconnect-failed": "Unable to reach the server at this time. Click here to try again, or try again later", "socket-reconnect-failed": "Unable to reach the server at this time. Click here to try again, or try again later",
"invalid-plugin-id": "Invalid plugin ID",
"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",
"cannot-toggle-system-plugin": "You cannot toggle the state of a system plugin",
"plugin-installation-via-acp-disabled": "Plugin installation via ACP is disabled",
"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.", "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", "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",
"category.handle-taken": "Category handle is already taken, please choose another.",
"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",
"api.master-token-no-uid": "A master token was received without a corresponding `_uid` in the request body", "api.master-token-no-uid": "A master token was received without a corresponding `_uid` in the request body",
@@ -255,12 +229,5 @@
"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.", "api.reauth-required": "The resource you are trying to access requires (re-)authentication."
"activitypub.not-enabled": "Federation is not enabled on this server",
"activitypub.invalid-id": "Unable to resolve the input id, likely as it is malformed.",
"activitypub.get-failed": "Unable to retrieve the specified resource.",
"activitypub.pubKey-not-found": "Unable to resolve public key, so payload verification cannot take place.",
"activitypub.origin-mismatch": "The received object's origin does not match the sender's origin",
"activitypub.actor-mismatch": "The received activity is being carried out by an actor that is different from expected.",
"activitypub.not-implemented": "The request was denied because it or an aspect of it is not implemented by the recipient server"
} }

View File

@@ -1,6 +1,5 @@
{ {
"state": "الحالة", "state": "الحالة",
"report": "Report",
"reports": "Reports", "reports": "Reports",
"first-reported": "First Reported", "first-reported": "First Reported",
"no-flags": "Hooray! No flags found.", "no-flags": "Hooray! No flags found.",
@@ -9,8 +8,6 @@
"update": "تحديث", "update": "تحديث",
"updated": "تم التحديث", "updated": "تم التحديث",
"resolved": "Resolved", "resolved": "Resolved",
"report-added": "Added",
"report-rescinded": "Rescinded",
"target-purged": "The content this flag referred to has been purged and is no longer available.", "target-purged": "The content this flag referred to has been purged and is no longer available.",
"target-aboutme-empty": "This user has no &quot;About Me&quot; set.", "target-aboutme-empty": "This user has no &quot;About Me&quot; set.",
@@ -84,18 +81,12 @@
"modal-reason-offensive": "Offensive", "modal-reason-offensive": "Offensive",
"modal-reason-other": "Other (specify below)", "modal-reason-other": "Other (specify below)",
"modal-reason-custom": "Reason for reporting this content...", "modal-reason-custom": "Reason for reporting this content...",
"modal-notify-remote": "Forward this report to %1",
"modal-submit": "Submit Report", "modal-submit": "Submit Report",
"modal-submit-success": "Content has been flagged for moderation.", "modal-submit-success": "Content has been flagged for moderation.",
"modal-confirm-rescind": "Rescind Report?",
"bulk-actions": "Bulk Actions", "bulk-actions": "Bulk Actions",
"bulk-resolve": "Resolve Flag(s)", "bulk-resolve": "Resolve Flag(s)",
"confirm-purge": "Are you sure you want to permanently delete these flags?",
"purge-cancelled": "Flag Purge Cancelled",
"bulk-purge": "Purge Flag(s)",
"bulk-success": "%1 flags updated", "bulk-success": "%1 flags updated",
"flagged-timeago": "Flagged <span class=\"timeago\" title=\"%1\"></span>", "flagged-timeago-readable": "Flagged <span class=\"timeago\" title=\"%1\"></span> (%2)",
"auto-flagged": "[Auto Flagged] Received %1 downvotes." "auto-flagged": "[Auto Flagged] Received %1 downvotes."
} }

View File

@@ -13,26 +13,18 @@
"400.message": "It looks like this link is malformed, please double-check and try again.<br/><div class=\"text-sm text-muted\">Return to the <a href='%1/'>home page</a>.</div>", "400.message": "It looks like this link is malformed, please double-check and try again.<br/><div class=\"text-sm text-muted\">Return to the <a href='%1/'>home page</a>.</div>",
"register": "تسجيل", "register": "تسجيل",
"login": "دخول", "login": "دخول",
"please-log-in": "الرجاء تسجيل الدخول", "please_log_in": "الرجاء تسجيل الدخول",
"logout": "تسجيل الخروج", "logout": "تسجيل الخروج",
"posting-restriction-info": "إضافة مشاركات جديد حكر على الأعضاء المسجلين، انقر هنا لتسجيل الدخول.", "posting_restriction_info": "إضافة مشاركات جديد حكر على الأعضاء المسجلين، انقر هنا لتسجيل الدخول.",
"welcome-back": "مرحبًا بعودتك", "welcome_back": "مرحبًا بعودتك",
"you-have-successfully-logged-in": "تم سجيل الدخول بنجاح", "you_have_successfully_logged_in": "تم سجيل الدخول بنجاح",
"save-changes": "حفظ التغييرات", "save_changes": "حفظ التغييرات",
"save": "حفظ", "save": "حفظ",
"create": "Create",
"cancel": "Cancel", "cancel": "Cancel",
"close": "أغلق", "close": "أغلق",
"pagination": "الصفحات", "pagination": "الصفحات",
"pagination.previouspage": "Previous Page", "pagination.out_of": "%1 من %2",
"pagination.nextpage": "Next Page", "pagination.enter_index": "Go to post index",
"pagination.firstpage": "First Page",
"pagination.lastpage": "Last Page",
"pagination.out-of": "%1 من %2",
"pagination.enter-index": "Go to post index",
"pagination.go-to-page": "Go to page",
"pagination.page-x": "Page %1",
"header.brand-logo": "Brand Logo",
"header.admin": "مدير النظام", "header.admin": "مدير النظام",
"header.categories": "الأقسام", "header.categories": "الأقسام",
"header.recent": "حديث", "header.recent": "حديث",
@@ -50,15 +42,14 @@
"header.navigation": "الاستكشاف", "header.navigation": "الاستكشاف",
"header.manage": "Manage", "header.manage": "Manage",
"header.drafts": "Drafts", "header.drafts": "Drafts",
"header.world": "World",
"notifications.loading": "تحميل التنبيهات", "notifications.loading": "تحميل التنبيهات",
"chats.loading": "تحميل الدردشات", "chats.loading": "تحميل الدردشات",
"drafts.loading": "Loading Drafts", "drafts.loading": "Loading Drafts",
"motd.welcome": "مرحبا بكم في NodeBB، منصة المناقشة المستقبلية.", "motd.welcome": "مرحبا بكم في NodeBB، منصة المناقشة المستقبلية.",
"previouspage": "الصفحة السابقة",
"nextpage": "الصفحة التالية",
"alert.success": "نجاح", "alert.success": "نجاح",
"alert.error": "خطأ", "alert.error": "خطأ",
"alert.warning": "Warning",
"alert.info": "Info",
"alert.banned": "محظور", "alert.banned": "محظور",
"alert.banned.message": "You have just been banned, your access is now restricted.", "alert.banned.message": "You have just been banned, your access is now restricted.",
"alert.unbanned": "Unbanned", "alert.unbanned": "Unbanned",
@@ -82,42 +73,40 @@
"downvoted": "مصوت بالسالب", "downvoted": "مصوت بالسالب",
"views": "المشاهدات", "views": "المشاهدات",
"posters": "Posters", "posters": "Posters",
"watching": "Watching",
"reputation": "السمعة", "reputation": "السمعة",
"lastpost": "Last post", "lastpost": "Last post",
"firstpost": "First post", "firstpost": "First post",
"about": "About", "about": "About",
"read-more": "اقرأ المزيد", "read_more": "اقرأ المزيد",
"more": "المزيد", "more": "المزيد",
"none": "None", "none": "None",
"posted-ago-by-guest": "كتب %1 بواسطة زائر", "posted_ago_by_guest": "كتب %1 بواسطة زائر",
"posted-ago-by": "كتب %1 بواسطة %2", "posted_ago_by": "كتب %1 بواسطة %2",
"posted-ago": "كتب %1", "posted_ago": "كتب %1",
"posted-in": "كتب في %1", "posted_in": "كتب في %1",
"posted-in-by": "كتب في 1% بواسطة %2", "posted_in_by": "كتب في 1% بواسطة %2",
"posted-in-ago": "كتب في %1 %2", "posted_in_ago": "كتب في %1 %2",
"posted-in-ago-by": "كتب في %1 %2 من طرف %3", "posted_in_ago_by": "كتب في %1 %2 من طرف %3",
"user-posted-ago": "%1 كتب %2", "user_posted_ago": "%1 كتب %2",
"guest-posted-ago": "كتب زائر %1", "guest_posted_ago": "كتب زائر %1",
"last-edited-by": "اخر تحرير بواسطة 1%", "last_edited_by": "اخر تحرير بواسطة 1%",
"edited-timestamp": "Edited %1", "edited-timestamp": "Edited %1",
"norecentposts": "لاوجود لمشاركات جديدة", "norecentposts": "لاوجود لمشاركات جديدة",
"norecenttopics": "لاوجود لمواضيع جديدة", "norecenttopics": "لاوجود لمواضيع جديدة",
"recentposts": "آخر المشاركات", "recentposts": "آخر المشاركات",
"recentips": "آخر عناوين ال IP التي سجلت الدخول", "recentips": "آخر عناوين ال IP التي سجلت الدخول",
"moderator-tools": "أدوات المشرف", "moderator_tools": "أدوات المشرف",
"status": "Status", "status": "Status",
"online": "المتواجدون حاليًّا", "online": "المتواجدون حاليًّا",
"away": "غير متواجد", "away": "غير متواجد",
"dnd": "عدم الإزعاج", "dnd": "عدم الإزعاج",
"invisible": "مخفي", "invisible": "مخفي",
"offline": "غير متصل", "offline": "غير متصل",
"remote-user": "This user is from outside of this forum",
"email": "عنوان البريد الإلكتروني", "email": "عنوان البريد الإلكتروني",
"language": "اللغة", "language": "اللغة",
"guest": "زائر", "guest": "زائر",
"guests": "الزوار", "guests": "الزوار",
"former-user": "A Former User", "former_user": "A Former User",
"system-user": "System", "system-user": "System",
"unknown-user": "Unknown user", "unknown-user": "Unknown user",
"updated.title": "تم تحديث المنتدى", "updated.title": "تم تحديث المنتدى",
@@ -125,12 +114,12 @@
"privacy": "الخصوصية", "privacy": "الخصوصية",
"follow": "متابعة", "follow": "متابعة",
"unfollow": "إلغاء المتابعة", "unfollow": "إلغاء المتابعة",
"delete-all": "حذف الكل", "delete_all": "حذف الكل",
"map": "خريطة", "map": "خريطة",
"sessions": "الجلسة", "sessions": "الجلسة",
"ip-address": "عنوان الآي بي", "ip_address": "عنوان الآي بي",
"enter-page-number": "ادخل رقم الصفحة", "enter_page_number": "ادخل رقم الصفحة",
"upload-file": "ارفع ملف", "upload_file": "ارفع ملف",
"upload": "ارفع", "upload": "ارفع",
"uploads": "Uploads", "uploads": "Uploads",
"allowed-file-types": "صيغ الملفات المدعومة هي 1%", "allowed-file-types": "صيغ الملفات المدعومة هي 1%",
@@ -139,16 +128,13 @@
"play": "تشغيل", "play": "تشغيل",
"cookies.message": "هذا الموقع يستخدم ملفات تعريف الارتباط لضمان حصولك على أفضل تجربة على موقعنا.", "cookies.message": "هذا الموقع يستخدم ملفات تعريف الارتباط لضمان حصولك على أفضل تجربة على موقعنا.",
"cookies.accept": "فهمت الأمر!", "cookies.accept": "فهمت الأمر!",
"cookies.learn-more": "أعرف المزيد", "cookies.learn_more": "أعرف المزيد",
"edited": "حُرِر", "edited": "حُرِر",
"disabled": "معطل", "disabled": "معطل",
"select": "تحديد", "select": "تحديد",
"selected": "Selected",
"copied": "Copied", "copied": "Copied",
"user-search-prompt": "Type something here to find users...", "user-search-prompt": "Type something here to find users...",
"hidden": "Hidden", "hidden": "Hidden",
"sort": "Sort", "sort": "Sort",
"actions": "Actions", "actions": "Actions"
"rss-feed": "RSS Feed",
"skip-to-content": "Skip to content"
} }

View File

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

View File

@@ -1,12 +1,12 @@
{ {
"username-email": "اسم المستخدم / البريد الإلكتروني", "username-email": "اسم المستخدم / البريد الإلكتروني",
"username": "اسم المستخدم", "username": "اسم المستخدم",
"remember-me": "تذكرني؟", "remember_me": "تذكرني؟",
"forgot-password": "نسيت كلمة المرور؟", "forgot_password": "نسيت كلمة المرور؟",
"alternative-logins": "تسجيلات الدخول البديلة", "alternative_logins": "تسجيلات الدخول البديلة",
"failed-login-attempt": "تسجيل الدخول غير ناجح", "failed_login_attempt": "تسجيل الدخول غير ناجح",
"login-successful": "قمت بتسجيل الدخول بنجاح!", "login_successful": "قمت بتسجيل الدخول بنجاح!",
"dont-have-account": "لا تملك حساب؟", "dont_have_account": "لا تملك حساب؟",
"logged-out-due-to-inactivity": "لقد تم تسجيل خروجك من لوحة تحكم بسبب عدم نشاطك", "logged-out-due-to-inactivity": "لقد تم تسجيل خروجك من لوحة تحكم بسبب عدم نشاطك",
"caps-lock-enabled": "Caps Lock is enabled" "caps-lock-enabled": "Caps Lock is enabled"
} }

View File

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

View File

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

View File

@@ -14,7 +14,6 @@
"flagged-content": "Flagged Content", "flagged-content": "Flagged Content",
"ip-blacklist": "IP Blacklist", "ip-blacklist": "IP Blacklist",
"post-queue": "Post Queue", "post-queue": "Post Queue",
"registration-queue": "Registration Queue",
"users/online": "اﻷعضاء المتصلون", "users/online": "اﻷعضاء المتصلون",
"users/latest": "أحدث اﻷعضاء", "users/latest": "أحدث اﻷعضاء",
"users/sort-posts": "الأعضاء الأكثر نشاطاً", "users/sort-posts": "الأعضاء الأكثر نشاطاً",
@@ -36,7 +35,6 @@
"chat": "Chatting with %1", "chat": "Chatting with %1",
"flags": "Flags", "flags": "Flags",
"flag-details": "Flag %1 Details", "flag-details": "Flag %1 Details",
"world": "World",
"account/edit": "Editing \"%1\"", "account/edit": "Editing \"%1\"",
"account/edit/password": "Editing password of \"%1\"", "account/edit/password": "Editing password of \"%1\"",
"account/edit/username": "Editing username of \"%1\"", "account/edit/username": "Editing username of \"%1\"",
@@ -48,14 +46,12 @@
"account/latest-posts": "Latest posts made by %1", "account/latest-posts": "Latest posts made by %1",
"account/topics": "Topics created by %1", "account/topics": "Topics created by %1",
"account/groups": "%1's Groups", "account/groups": "%1's Groups",
"account/watched-categories": "%1's Watched Categories", "account/watched_categories": "%1's Watched Categories",
"account/watched-tags": "%1's Watched Tags",
"account/bookmarks": "%1's Bookmarked Posts", "account/bookmarks": "%1's Bookmarked Posts",
"account/settings": "خيارات المستخدم", "account/settings": "خيارات المستخدم",
"account/settings-of": "Changing settings of %1", "account/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/read": "Topics read by %1",
"account/upvoted": "Posts upvoted by %1", "account/upvoted": "Posts upvoted by %1",
"account/downvoted": "Posts downvoted by %1", "account/downvoted": "Posts downvoted by %1",
"account/best": "Best posts made by %1", "account/best": "Best posts made by %1",
@@ -63,7 +59,6 @@
"account/blocks": "Blocked users for %1", "account/blocks": "Blocked users for %1",
"account/uploads": "Uploads by %1", "account/uploads": "Uploads by %1",
"account/sessions": "Login Sessions", "account/sessions": "Login Sessions",
"account/shares": "Topics shared by %1",
"confirm": "تم التحقق من عنوان البريد الإلكتروني", "confirm": "تم التحقق من عنوان البريد الإلكتروني",
"maintenance.text": "%1 is currently undergoing maintenance.<br/>Please come back another time.", "maintenance.text": "%1 is currently undergoing maintenance.<br/>Please come back another time.",
"maintenance.messageIntro": "بالإضافة إلى ذلك، قام مدبر النظام بترك هذه الرسالة:", "maintenance.messageIntro": "بالإضافة إلى ذلك، قام مدبر النظام بترك هذه الرسالة:",

View File

@@ -3,10 +3,8 @@
"post-queue": "Post Queue", "post-queue": "Post Queue",
"no-queued-posts": "There are no posts in the post queue.", "no-queued-posts": "There are no posts in the post queue.",
"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.", "no-single-post": "The topic or post you are looking for is no longer in the queue. It has likely been approved or deleted already.",
"enabling-help": "The post queue is currently <strong>disabled</strong>. To enable this feature, go to <a href=\"%1\">Settings &rarr; Post &rarr; Post Queue</a> and enable <strong>Post Queue</strong>.", "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", "back-to-list": "Back to Post Queue",
"public-intro": "If you have any queued posts, they will be shown here.",
"public-description": "This forum is configured to automatically queue posts from new accounts, pending moderator approval.<br />If you have queued posts awaiting approval, you will be able to see them here.",
"user": "User", "user": "User",
"when": "When", "when": "When",
"category": "Category", "category": "Category",
@@ -38,6 +36,5 @@
"remove-selected": "Remove Selected", "remove-selected": "Remove Selected",
"remove-selected-confirm": "Do you want to remove %1 selected posts?", "remove-selected-confirm": "Do you want to remove %1 selected posts?",
"bulk-accept-success": "%1 posts accepted", "bulk-accept-success": "%1 posts accepted",
"bulk-reject-success": "%1 posts rejected", "bulk-reject-success": "%1 posts rejected"
"links-in-this-post": "Links in this post"
} }

View File

@@ -5,9 +5,7 @@
"month": "شهر", "month": "شهر",
"year": "سنة", "year": "سنة",
"alltime": "دائمًا", "alltime": "دائمًا",
"no-recent-topics": "لايوجد مواضيع جديدة", "no_recent_topics": "لايوجد مواضيع جديدة",
"no-popular-topics": "لا يوجد مواضيع شائعة", "no_popular_topics": "لا يوجد مواضيع شائعة",
"load-new-posts": "Load new posts", "load-new-posts": "Load new posts"
"uncategorized.title": "All known topics",
"uncategorized.intro": "This page shows a chronological listing of every topic that this forum has received.<br />The views and opinions expressed in the topics below are not moderated and may not represent the views and opinions of this website."
} }

View File

@@ -1,32 +1,32 @@
{ {
"register": "تسجيل", "register": "تسجيل",
"already-have-account": "Already have an account?", "already-have-account": "Already have an account?",
"cancel-registration": "إلغاء التسجيل", "cancel_registration": "إلغاء التسجيل",
"help.email": "افتراضيا، سيتم إخفاء بريدك الإلكتروني من العامة.", "help.email": "افتراضيا، سيتم إخفاء بريدك الإلكتروني من العامة.",
"help.username-restrictions": "اسم مستخدم فريدة من نوعها بين 1% و 2% حرفا. بإمكان الآخرين مناداتك بـ @<span id='yourUsername'>اسم المستخدم</span>.", "help.username_restrictions": "اسم مستخدم فريدة من نوعها بين 1% و 2% حرفا. بإمكان الآخرين مناداتك بـ @<span id='yourUsername'>اسم المستخدم</span>.",
"help.minimum-password-length": "كلمة المرور يجب أن تتكون على الأقل من 1% أحرف/حروف", "help.minimum_password_length": "كلمة المرور يجب أن تتكون على الأقل من 1% أحرف/حروف",
"email-address": "عنوان البريد الإلكتروني", "email_address": "عنوان البريد الإلكتروني",
"email-address-placeholder": "ادخل عنوان البريد الإلكتروني", "email_address_placeholder": "ادخل عنوان البريد الإلكتروني",
"username": "اسم المستخدم", "username": "اسم المستخدم",
"username-placeholder": "أدخل اسم المستخدم", "username_placeholder": "أدخل اسم المستخدم",
"password": "كلمة المرور", "password": "كلمة المرور",
"password-placeholder": "أدخل كلمة المرور", "password_placeholder": "أدخل كلمة المرور",
"confirm-password": "تأكيد كلمة المرور", "confirm_password": "تأكيد كلمة المرور",
"confirm-password-placeholder": "تأكيد كلمة المرور", "confirm_password_placeholder": "تأكيد كلمة المرور",
"register-now-button": "قم بالتسجيل الآن", "register_now_button": "قم بالتسجيل الآن",
"alternative-registration": "طريقة تسجيل بديلة", "alternative_registration": "طريقة تسجيل بديلة",
"terms-of-use": "شروط الاستخدام", "terms_of_use": "شروط الاستخدام",
"agree-to-terms-of-use": "أوافق على شروط الاستخدام", "agree_to_terms_of_use": "أوافق على شروط الاستخدام",
"terms-of-use-error": "يجب عليك الموافقة على شروط الاستخدام", "terms_of_use_error": "يجب عليك الموافقة على شروط الاستخدام",
"registration-added-to-queue": "تمت إضافتك في قائمة الإنتضار. ستتلقى رسالة إلكترونية عند الموافقة على تسجيلك من قبل الإدارة.", "registration-added-to-queue": "تمت إضافتك في قائمة الإنتضار. ستتلقى رسالة إلكترونية عند الموافقة على تسجيلك من قبل الإدارة.",
"registration-queue-average-time": "Our average time for approving memberships is %1 hours %2 minutes.", "registration-queue-average-time": "Our average time for approving memberships is %1 hours %2 minutes.",
"registration-queue-auto-approve-time": "Your membership to this forum will be fully activated in up to %1 hours.", "registration-queue-auto-approve-time": "Your membership to this forum will be fully activated in up to %1 hours.",
"interstitial.intro": "We'd like some additional information in order to update your account&hellip;", "interstitial.intro": "We'd like some additional information in order to update your account&hellip;",
"interstitial.intro-new": "We'd like some additional information before we can create your account&hellip;", "interstitial.intro-new": "We'd like some additional information before we can create your account&hellip;",
"interstitial.errors-found": "Please review the entered information:", "interstitial.errors-found": "Please review the entered information:",
"gdpr-agree-data": "I consent to the collection and processing of my personal information on this website.", "gdpr_agree_data": "I consent to the collection and processing of my personal information on this website.",
"gdpr-agree-email": "I consent to receive digest and notification emails from this website.", "gdpr_agree_email": "I consent to receive digest and notification emails from this website.",
"gdpr-consent-denied": "You must give consent to this site to collect/process your information, and to send you emails.", "gdpr_consent_denied": "You must give consent to this site to collect/process your information, and to send you emails.",
"invite.error-admin-only": "Direct user registration has been disabled. Please contact an administrator for more details.", "invite.error-admin-only": "Direct user registration has been disabled. Please contact an administrator for more details.",
"invite.error-invite-only": "Direct user registration has been disabled. You must be invited by an existing user in order to access this forum.", "invite.error-invite-only": "Direct user registration has been disabled. You must be invited by an existing user in order to access this forum.",
"invite.error-invalid-data": "The registration data received does not correspond to our records. Please contact an administrator for more details" "invite.error-invalid-data": "The registration data received does not correspond to our records. Please contact an administrator for more details"

View File

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

View File

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

View File

@@ -1,13 +1,12 @@
{ {
"type-to-search": "Type to search", "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", "in-titles": "In titles",
"in-titles-posts": "In titles and posts", "in-titles-posts": "In titles and posts",
"in-posts": "In posts", "in-posts": "In posts",
"in-bookmarks": "In bookmarks",
"in-categories": "In categories", "in-categories": "In categories",
"in-users": "In users", "in-users": "In users",
"in-tags": "In tags", "in-tags": "In tags",

View File

@@ -6,9 +6,5 @@
"sign-in-with-google": "تسجيل الدخول باستخدام قوقل", "sign-in-with-google": "تسجيل الدخول باستخدام قوقل",
"sign-up-with-google": "التسجيل باستخدام قوقل", "sign-up-with-google": "التسجيل باستخدام قوقل",
"log-in-with-facebook": "تسجيل الدخول باستخدام فيسبوك", "log-in-with-facebook": "تسجيل الدخول باستخدام فيسبوك",
"continue-with-facebook": "التسجيل باستخدام فيسبوك", "continue-with-facebook": "التسجيل باستخدام فيسبوك"
"sign-in-with-linkedin": "Sign in with LinkedIn",
"sign-up-with-linkedin": "Sign up with LinkedIn",
"sign-in-with-wordpress": "Sign in with WordPress",
"sign-up-with-wordpress": "Sign up with WordPress"
} }

View File

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

View File

@@ -1,23 +1,15 @@
{ {
"theme-name": "Harmony Theme",
"skins": "Skins", "skins": "Skins",
"collapse": "Collapse", "collapse": "Collapse",
"expand": "Expand", "expand": "Expand",
"sidebar-toggle": "Sidebar Toggle",
"login-register-to-search": "Login or register to search.", "login-register-to-search": "Login or register to search.",
"settings.title": "Theme settings", "settings.title": "Theme settings",
"settings.enableQuickReply": "Enable quick reply", "settings.enableQuickReply": "Enable quick reply",
"settings.enableBreadcrumbs": "Show breadcrumbs in Category and Topic pages",
"settings.enableBreadcrumbs.why": "Breadcrumbs are visible in most pages for ease-of-navigation. The base design of the category and topic pages has alternative means to link back to parent pages, but the breadcrumb can be toggled off to reduce clutter.",
"settings.centerHeaderElements": "Center header elements", "settings.centerHeaderElements": "Center header elements",
"settings.mobileTopicTeasers": "Show topic teasers on mobile", "settings.mobileTopicTeasers": "Show topic teasers on mobile",
"settings.stickyToolbar": "Sticky toolbar", "settings.stickyToolbar": "Sticky toolbar",
"settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page", "settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page",
"settings.topicSidebarTools": "Topic sidebar tools", "settings.autohideBottombar": "Auto hide bottom bar",
"settings.topicSidebarTools.help": "This option will move the topic tools to the sidebar on desktop", "settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down",
"settings.autohideBottombar": "Auto hide mobile navigation bar",
"settings.autohideBottombar.help": "The mobile bar will be hidden when the page is scrolled down",
"settings.topMobilebar": "Move the mobile navigation bar to the top",
"settings.openSidebars": "Open sidebars",
"settings.chatModals": "Enable chat modals" "settings.chatModals": "Enable chat modals"
} }

View File

@@ -1,4 +1,4 @@
{ {
"title": "أعلى الصفحة", "title": "Top",
"no-top-topics": "لا توجد مواضيع أعلى الصفحة" "no_top_topics": "No top topics"
} }

View File

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

View File

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

View File

@@ -1,31 +1,28 @@
{ {
"user-menu": "قائمة المستخدم",
"banned": "محظور", "banned": "محظور",
"unbanned": "Unbanned", "muted": "كتم ",
"muted": "كتم",
"unmuted": "Unmuted",
"offline": "غير متصل", "offline": "غير متصل",
"deleted": "محذوف", "deleted": "محذوف",
"username": "إسم المستخدم", "username": "إسم المستخدم",
"joindate": "تاريخ الإنضمام", "joindate": "تاريخ الإنضمام",
"postcount": "عدد المشاركات", "postcount": "عدد المشاركات",
"email": "البريد الإلكتروني", "email": "البريد الإلكتروني",
"confirm-email": "تأكيد عنوان البريد الإلكتروني", "confirm_email": "تأكيد عنوان البريد الإلكتروني",
"account-info": "معلومات الحساب", "account_info": "معلومات الحساب",
"admin-actions-label": "الإجراءات الإدارية", "admin_actions_label": "الإجراءات الإدارية",
"ban-account": "حظر الحساب", "ban_account": "حظر الحساب",
"ban-account-confirm": "هل تريد حقاً حظر هاذا العضو؟", "ban_account_confirm": "هل تريد حقاً حظر هاذا العضو؟",
"unban-account": "إزالة حظر الحساب", "unban_account": "إزالة حظر الحساب",
"mute-account": "كتم الحساب", "mute_account": "Mute Account",
"unmute-account": "Unmute Account", "unmute_account": "Unmute Account",
"delete-account": "حذف الحساب", "delete_account": "حذف الحساب",
"delete-account-as-admin": "Delete <strong>Account</strong>", "delete_account_as_admin": "Delete <strong>Account</strong>",
"delete-content": "Delete Account <strong>Content</strong>", "delete_content": "Delete Account <strong>Content</strong>",
"delete-all": "Delete <strong>Account</strong> and <strong>Content</strong>", "delete_all": "Delete <strong>Account</strong> and <strong>Content</strong>",
"delete-account-confirm": "Are you sure you want to anonymize your posts and delete your account?<br /><strong>This action is irreversible and you will not be able to recover any of your data</strong><br /><br />Enter your password to confirm that you wish to destroy this account.", "delete_account_confirm": "Are you sure you want to anonymize your posts and delete your account?<br /><strong>This action is irreversible and you will not be able to recover any of your data</strong><br /><br />Enter your password to confirm that you wish to destroy this account.",
"delete-this-account-confirm": "Are you sure you want to delete this account while leaving its contents behind?<br /><strong>This action is irreversible, posts will be anonymized, and you will not be able to restore post associations with the deleted account</strong><br /><br />", "delete_this_account_confirm": "Are you sure you want to delete this account while leaving its contents behind?<br /><strong>This action is irreversible, posts will be anonymized, and you will not be able to restore post associations with the deleted account</strong><br /><br />",
"delete-account-content-confirm": "Are you sure you want to delete this account's content (posts/topics/uploads)? <br /><strong>This action is irreversible and you will not be able to recover any data</strong><br /><br />", "delete_account_content_confirm": "Are you sure you want to delete this account's content (posts/topics/uploads)? <br /><strong>This action is irreversible and you will not be able to recover any data</strong><br /><br />",
"delete-all-confirm": "Are you sure you want to delete this account and all of its content (posts/topics/uploads)? <br /><strong>This action is irreversible and you will not be able to recover any data</strong><br /><br />", "delete_all_confirm": "Are you sure you want to delete this account and all of its content (posts/topics/uploads)? <br /><strong>This action is irreversible and you will not be able to recover any data</strong><br /><br />",
"account-deleted": "تم حذف الحساب", "account-deleted": "تم حذف الحساب",
"account-content-deleted": "تم حذف محتوى حساب", "account-content-deleted": "تم حذف محتوى حساب",
"fullname": "الاسم الكامل", "fullname": "الاسم الكامل",
@@ -35,109 +32,95 @@
"joined": "تاريخ التسجيل", "joined": "تاريخ التسجيل",
"lastonline": "تاريخ آخر دخول", "lastonline": "تاريخ آخر دخول",
"profile": "الملف الشخصي", "profile": "الملف الشخصي",
"profile-views": "عدد المشاهدات", "profile_views": "عدد المشاهدات",
"reputation": "السمعة", "reputation": "السمعة",
"bookmarks": "المفضلات", "bookmarks": "المفضلات",
"watched-categories": "الأقسام المُتابعة", "watched_categories": "الأقسام المُتابعة",
"watched-tags": "الوسوم المُتابعة", "change_all": "غير الكل",
"change-all": "غير الكل",
"watched": "متابع", "watched": "متابع",
"ignored": "تم تجاهله", "ignored": "تم تجاهله",
"read": "Read",
"default-category-watch-state": "حالة مشاهدة اﻻقسام الافتراضية", "default-category-watch-state": "حالة مشاهدة اﻻقسام الافتراضية",
"followers": "المتابعون", "followers": "المتابعون",
"following": "يتابع", "following": "يتابع",
"shares": "Shares",
"blocks": "الكتل", "blocks": "الكتل",
"blocked-users": "Blocked users", "blocked-users": "Blocked users",
"block-toggle": "تبديل الكتلة", "block_toggle": "تبديل الكتلة",
"block-user": "أحظر المستخدم", "block_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",
"view-remote": "View Original",
"flag-profile": "ضع علامة على الملف الشخصي", "flag-profile": "ضع علامة على الملف الشخصي",
"profile-flagged": "Already flagged",
"follow": "تابع", "follow": "تابع",
"unfollow": "إلغاء المتابعة", "unfollow": "إلغاء المتابعة",
"cancel-follow": "Cancel follow request",
"more": "المزيد", "more": "المزيد",
"profile-update-success": "تم تحديث الملف الشخصي بنجاح", "profile_update_success": "تم تحديث الملف الشخصي بنجاح",
"change-picture": "تغيير الصورة", "change_picture": "تغيير الصورة",
"change-username": "تغيير اسم المستخدم", "change_username": "تغيير اسم المستخدم",
"change-email": "تغيير البريد اﻹلكتروني", "change_email": "تغيير البريد اﻹلكتروني",
"email-updated": "Email Updated", "email_same_as_password": "Please enter your current password to continue &ndash; you've entered your new email again",
"email-same-as-password": "Please enter your current password to continue &ndash; you've entered your new email again",
"edit": "تعديل", "edit": "تعديل",
"edit-profile": "تعديل الملف الشخصي", "edit-profile": "تعديل الملف الشخصي",
"default-picture": "أيقونة افتراضية", "default_picture": "أيقونة افتراضية",
"uploaded-picture": "الصورة المرفوعة", "uploaded_picture": "الصورة المرفوعة",
"upload-new-picture": "رفع صورة جديدة", "upload_new_picture": "رفع صورة جديدة",
"upload-new-picture-from-url": "رفع صورة جديدة من رابط", "upload_new_picture_from_url": "رفع صورة جديدة من رابط",
"current-password": "كلمة السر الحالية", "current_password": "كلمة السر الحالية",
"new-password": "كلمة السر الجديدة", "new_password": "New Password",
"change-password": "تغيير كلمة السر", "change_password": "تغيير كلمة السر",
"change-password-error": "كلمة سر غير صحيحة", "change_password_error": "كلمة سر غير صحيحة",
"change-password-error-wrong-current": "كلمة السر الحالية ليست صحيحة", "change_password_error_wrong_current": "كلمة السر الحالية ليست صحيحة",
"change-password-error-same-password": "كلمة السر الجديدة مطابقة لكلمة السر الحالية, فضلاً قم بإدخال كلمة سر جديدة.", "change_password_error_match": "كلمة السر غير مطابقة لتأكيد كلمة السر",
"change-password-error-match": "كلمة السر غير مطابقة لتأكيد كلمة السر", "change_password_error_privileges": "ليس لديك الصلاحيات الكافية لتغيير كلمة السر هذه.",
"change-password-error-privileges": "ليس لديك الصلاحيات الكافية لتغيير كلمة السر هذه.", "change_password_success": "تم تحديث كلمة السر خاصتك.",
"change-password-success": م تحديث كلمة السر خاصتك.", "confirm_password": أكيد كلمة السر",
"confirm-password": "تأكيد كلمة السر",
"password": "كلمة السر", "password": "كلمة السر",
"username-taken-workaround": "اسم المستخدم الذي اخترته مستخدم سابقا، لذلك قمنا بتغييره لك قليلا. أنت الآن مسجل بالاسم <strong>%1</strong>", "username_taken_workaround": "اسم المستخدم الذي اخترته مستخدم سابقا، لذلك قمنا بتغييره لك قليلا. أنت الآن مسجل بالاسم <strong>%1</strong>",
"password-same-as-username": "كلمة المرور مطابقة لاسم المستخدم الخاص بك، يرجى تحديد كلمة مرور أخرى.", "password_same_as_username": "كلمة المرور مطابقة لاسم المستخدم الخاص بك، يرجى تحديد كلمة مرور أخرى.",
"password-same-as-email": "كلمة المرور مطابقة لبريدك الإلكتروني، يرجى تحديد كلمة مرور أخرى.", "password_same_as_email": "كلمة المرور مطابقة لبريدك الإلكتروني، يرجى تحديد كلمة مرور أخرى.",
"weak-password": "كلمة مرور ضعيفة.", "weak_password": "كلمة مرور ضعيفة.",
"upload-picture": "ارفع الصورة", "upload_picture": "ارفع الصورة",
"upload-a-picture": "رفع صورة", "upload_a_picture": "رفع صورة",
"remove-uploaded-picture": "إزالة الصورة المرفوعة", "remove_uploaded_picture": "إزالة الصورة المرفوعة",
"upload-cover-picture": "رفع صورة الغلاف", "upload_cover_picture": "رفع صورة الغلاف",
"remove-cover-picture-confirm": "هل تريد بالتأكيد إزالة صورة الغلاف؟", "remove_cover_picture_confirm": "هل تريد بالتأكيد إزالة صورة الغلاف؟",
"crop-picture": "إقتصاص الصورة", "crop_picture": "إقتصاص الصورة",
"upload-cropped-picture": "إقتصاص ورفع", "upload_cropped_picture": "إقتصاص ورفع",
"avatar-background-colour": "لون الخلفية للصورة الرمزية", "avatar-background-colour": "لون الخلفية للصورة الرمزية",
"settings": "خيارات", "settings": "خيارات",
"show-email": "أظهر بريدي الإلكتروني", "show_email": "أظهر بريدي الإلكتروني",
"show-fullname": "أظهر اسمي الكامل", "show_fullname": "أظهر اسمي الكامل",
"restrict-chats": "لاتسمح بورود محادثات إلا من طرف المستخدمين الذين أتابعهم.", "restrict_chats": "لاتسمح بورود محادثات إلا من طرف المستخدمين الذين أتابعهم.",
"disable-incoming-chats": "Disable incoming chat messages <a data-bs-toggle=\"tooltip\" href=\"#\" title=\"Admins and moderators can still send you messages\"><i class=\"fa-solid fa-circle-info\"></i></a>", "digest_label": "اشترك في النشرة الدورية",
"chat-allow-list": "Allow chat messages from the following users", "digest_description": "استلام اشعارات بآخر مستجدات هذا القسم (التنبيهات والمواضيع الجديدة) عبر البريد الإلكتروني وفقا لجدول زمني محدد.",
"chat-deny-list": "Deny chat messages from the following users", "digest_off": "غير مفعل",
"chat-list-add-user": "Add user", "digest_daily": "يوميا",
"digest-label": "اشترك في النشرة الدورية", "digest_weekly": "أسبوعيًّا",
"digest-description": "استلام اشعارات بآخر مستجدات هذا القسم (التنبيهات والمواضيع الجديدة) عبر البريد الإلكتروني وفقا لجدول زمني محدد.", "digest_biweekly": "Bi-Weekly",
"digest-off": "غير مفعل", "digest_monthly": "شهريًّا",
"digest-daily": "يوميا", "has_no_follower": "هذا المستخدم ليس لديه أية متابعين :(",
"digest-weekly": "أسبوعيًّا", "follows_no_one": "هذا المستخدم لا يتابع أحد :(",
"digest-biweekly": "Bi-Weekly", "has_no_posts": "هذا المستخدم لم يشارك حتى الآن.",
"digest-monthly": "شهريًّا", "has_no_best_posts": "This user does not have any upvoted posts yet.",
"has-no-follower": "هذا المستخدم ليس لديه أية متابعين :(", "has_no_topics": "هذا المستخدم لم يكتب أي موضوع حتى الآن.",
"follows-no-one": "هذا المستخدم لا يتابع أحد :(", "has_no_watched_topics": "هذا المستخدم لم يقم بمراقبة اية مواضيع حتى الآن.",
"has-no-posts": "هذا المستخدم لم يشارك حتى الآن.", "has_no_ignored_topics": "هذا المستخدم لم يقم بتجاهل اية مواضيع حتى الآن.",
"has-no-best-posts": "This user does not have any upvoted posts yet.", "has_no_upvoted_posts": "هذا المستخدم لم يقم بالتصويت للأعلى لأي مشاركة حتى الآن.",
"has-no-topics": "هذا المستخدم لم يكتب أي موضوع حتى الآن.", "has_no_downvoted_posts": "هذا المستخدم لم يقم بالتصويت للأسفل لأي مشاركة حتى الآن.",
"has-no-watched-topics": "هذا المستخدم لم يقم بمراقبة اية مواضيع حتى الآن.", "has_no_controversial_posts": "هذا المستخدم ﻻيمتلك تصويت للأسفل لأي مشاركة حتى الآن.",
"has-no-ignored-topics": "هذا المستخدم لم يقم بتجاهل اية مواضيع حتى الآن.", "has_no_blocks": "أنت لم تحظر اي مستخدم",
"has-no-read-topics": "هذا المستخدم لم يقم بقراءة أي مشاركة حتى الاّن.", "email_hidden": "البريد الإلكتروني مخفي",
"has-no-upvoted-posts": "هذا المستخدم لم يقم بالتصويت للأعلى لأي مشاركة حتى الآن.",
"has-no-downvoted-posts": "هذا المستخدم لم يقم بالتصويت للأسفل لأي مشاركة حتى الآن.",
"has-no-controversial-posts": "هذا المستخدم ﻻيمتلك تصويت للأسفل لأي مشاركة حتى الآن.",
"has-no-blocks": "أنت لم تحظر اي مستخدم",
"has-no-shares": "This user has not shared any topics.",
"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", "category-topic-sort": "Category topic sort",
"topic-post-sort": "Topic post sort", "topic-post-sort": "Topic post sort",
"max-items-per-page": "أقصى %1", "max_items_per_page": "أقصى %1",
"acp-language": "لغة صفحة اﻻدارة", "acp_language": "لغة صفحة اﻻدارة",
"notifications": "التنبيهات", "notifications": "التنبيهات",
"upvote-notif-freq": "معدل تكرار تنبيهات التصويت للأعلى", "upvote-notif-freq": "معدل تكرار تنبيهات التصويت للأعلى",
"upvote-notif-freq.all": "كل التصويتات للأعلى", "upvote-notif-freq.all": "كل التصويتات للأعلى",
@@ -147,28 +130,22 @@
"upvote-notif-freq.logarithmic": "On 10, 100, 1000...", "upvote-notif-freq.logarithmic": "On 10, 100, 1000...",
"upvote-notif-freq.disabled": "معطل", "upvote-notif-freq.disabled": "معطل",
"browsing": "خيارات التصفح", "browsing": "خيارات التصفح",
"open-links-in-new-tab": "فتح الروابط الخارجية في نافدة جديدة", "open_links_in_new_tab": "فتح الروابط الخارجية في نافدة جديدة",
"enable-topic-searching": "تفعيل خاصية البحث داخل المواضيع", "enable_topic_searching": "تفعيل خاصية البحث داخل المواضيع",
"topic-search-help": "إذا قمت بتفعيل ميزة البحث في-الموضوع، سيتم تجاوز الخيار الافتراضي للمتصفح مما يؤدي للبحث بكامل الموضوع بدلا عن البحث في الجزء الظاهر في الشاشة.", "topic_search_help": "إذا قمت بتفعيل ميزة البحث في-الموضوع، سيتم تجاوز الخيار الافتراضي للمتصفح مما يؤدي للبحث بكامل الموضوع بدلا عن البحث في الجزء الظاهر في الشاشة.",
"update-url-with-post-index": "Update url with post index while browsing topics", "update_url_with_post_index": "Update url with post index while browsing topics",
"scroll-to-my-post": "بعد اضافة رد على المشاركة, قم بإظهار المشاركة", "scroll_to_my_post": "بعد اضافة رد على المشاركة, قم بإظهار المشاركة",
"follow-topics-you-reply-to": "متابعة المواضيع التي تقوم بالرد عليها", "follow_topics_you_reply_to": "متابعة المواضيع التي تقوم بالرد عليها",
"follow-topics-you-create": "متابعة المواضيع التي تقوم بإنشائها", "follow_topics_you_create": "متابعة المواضيع التي تقوم بإنشائها",
"grouptitle": "عنوان المجموعة", "grouptitle": "عنوان المجموعة",
"group-order-help": "Select a group and use the arrows to order titles", "group-order-help": "Select a group and use the arrows to order titles",
"show-group-title": "Show group title",
"hide-group-title": "Hide group title",
"order-group-up": "Order group up",
"order-group-down": "Order group down",
"no-group-title": "لا يوجد عنوان للمجموعة", "no-group-title": "لا يوجد عنوان للمجموعة",
"select-skin": "إختر سمة", "select-skin": "إختر سمة",
"default": "Default (%1)",
"no-skin": "No Skin",
"select-homepage": "إختر الصفحة الرئيسية", "select-homepage": "إختر الصفحة الرئيسية",
"homepage": "الصفحة الرئيسية", "homepage": "الصفحة الرئيسية",
"homepage-description": "حدد صفحة لاستخدامها كصفحة رئيسية للمنتدى أو \"لا شيء\" لاستخدام الصفحة الرئيسية الافتراضية.", "homepage_description": "حدد صفحة لاستخدامها كصفحة رئيسية للمنتدى أو \"لا شيء\" لاستخدام الصفحة الرئيسية الافتراضية.",
"custom-route": "مسار الصفحة الرئيسية المخصصة", "custom_route": "مسار الصفحة الرئيسية المخصصة",
"custom-route-help": "Enter a route name here, without any preceding slash (e.g. \"recent\" or \"category/2/general-discussion\")", "custom_route_help": "Enter a route name here, without any preceding slash (e.g. \"recent\" or \"category/2/general-discussion\")",
"sso.title": "خدمات تسجيل الدخول الموحد", "sso.title": "خدمات تسجيل الدخول الموحد",
"sso.associated": "مرتبط مع", "sso.associated": "مرتبط مع",
"sso.not-associated": "انقر هنا لربط مع", "sso.not-associated": "انقر هنا لربط مع",
@@ -176,16 +153,11 @@
"sso.dissociate-confirm-title": "تأكيد الفصل", "sso.dissociate-confirm-title": "تأكيد الفصل",
"sso.dissociate-confirm": "هل تريد بالتأكيد فصل حسابك عن %1؟", "sso.dissociate-confirm": "هل تريد بالتأكيد فصل حسابك عن %1؟",
"info.latest-flags": "أحدث العلامات", "info.latest-flags": "أحدث العلامات",
"info.profile": "Profile",
"info.post": "Post",
"info.view-flag": "View flag",
"info.reported-by": "Reported by:",
"info.no-flags": "لم يتم العثور على مشاركات معلمة", "info.no-flags": "لم يتم العثور على مشاركات معلمة",
"info.ban-history": "سجل الحظر الأحدث", "info.ban-history": "سجل الحظر الأحدث",
"info.no-ban-history": "هذا المستخدم لم يتم حظره مطلقا", "info.no-ban-history": "هذا المستخدم لم يتم حظره مطلقا",
"info.banned-until": "محظور حتى %1", "info.banned-until": "محظور حتى %1",
"info.banned-expiry": "Expiry", "info.banned-expiry": "Expiry",
"info.ban-expired": "Ban expired",
"info.banned-permanently": "محظور بشكل دائم", "info.banned-permanently": "محظور بشكل دائم",
"info.banned-reason-label": "سبب", "info.banned-reason-label": "سبب",
"info.banned-no-reason": "لم يتم إعطاء سبب.", "info.banned-no-reason": "لم يتم إعطاء سبب.",
@@ -205,25 +177,25 @@
"consent.title": "Your Rights &amp; Consent", "consent.title": "Your Rights &amp; Consent",
"consent.lead": "This community forum collects and processes your personal information.", "consent.lead": "This community forum collects and processes your personal information.",
"consent.intro": "We use this information strictly to personalise your experience in this community, as well as to associate the posts you make to your user account. During the registration step you were asked to provide a username and email address, you can also optionally provide additional information to complete your user profile on this website.<br /><br />We retain this information for the life of your user account, and you are able to withdraw consent at any time by deleting your account. At any time you may request a copy of your contribution to this website, via your Rights &amp; Consent page.<br /><br />If you have any questions or concerns, we encourage you to reach out to this forum's administrative team.", "consent.intro": "We use this information strictly to personalise your experience in this community, as well as to associate the posts you make to your user account. During the registration step you were asked to provide a username and email address, you can also optionally provide additional information to complete your user profile on this website.<br /><br />We retain this information for the life of your user account, and you are able to withdraw consent at any time by deleting your account. At any time you may request a copy of your contribution to this website, via your Rights &amp; Consent page.<br /><br />If you have any questions or concerns, we encourage you to reach out to this forum's administrative team.",
"consent.email-intro": "Occasionally, we may send emails to your registered email address in order to provide updates and/or to notify you of new activity that is pertinent to you. You can customise the frequency of the community digest (including disabling it outright), as well as select which types of notifications to receive via email, via your user settings page.", "consent.email_intro": "Occasionally, we may send emails to your registered email address in order to provide updates and/or to notify you of new activity that is pertinent to you. You can customise the frequency of the community digest (including disabling it outright), as well as select which types of notifications to receive via email, via your user settings page.",
"consent.digest-frequency": "Unless explicitly changed in your user settings, this community delivers email digests every %1.", "consent.digest_frequency": "Unless explicitly changed in your user settings, this community delivers email digests every %1.",
"consent.digest-off": "Unless explicitly changed in your user settings, this community does not send out email digests", "consent.digest_off": "Unless explicitly changed in your user settings, this community does not send out email digests",
"consent.received": "You have provided consent for this website to collect and process your information. No additional action is required.", "consent.received": "You have provided consent for this website to collect and process your information. No additional action is required.",
"consent.not-received": "You have not provided consent for data collection and processing. At any time this website&apos;s administration may elect to delete your account in order to become compliant with the General Data Protection Regulation.", "consent.not_received": "You have not provided consent for data collection and processing. At any time this website&apos;s administration may elect to delete your account in order to become compliant with the General Data Protection Regulation.",
"consent.give": "Give consent", "consent.give": "Give consent",
"consent.right-of-access": "You have the Right of Access", "consent.right_of_access": "You have the Right of Access",
"consent.right-of-access-description": "You have the right to access any data collected by this website upon request. You can retrieve a copy of this data by clicking the appropriate button below.", "consent.right_of_access_description": "You have the right to access any data collected by this website upon request. You can retrieve a copy of this data by clicking the appropriate button below.",
"consent.right-to-rectification": "You have the Right to Rectification", "consent.right_to_rectification": "You have the Right to Rectification",
"consent.right-to-rectification-description": "You have the right to change or update any inaccurate data provided to us. Your profile can be updated by editing your profile, and post content can always be edited. If this is not the case, please contact this site&apos;s administrative team.", "consent.right_to_rectification_description": "You have the right to change or update any inaccurate data provided to us. Your profile can be updated by editing your profile, and post content can always be edited. If this is not the case, please contact this site&apos;s administrative team.",
"consent.right-to-erasure": "You have the Right to Erasure", "consent.right_to_erasure": "You have the Right to Erasure",
"consent.right-to-erasure-description": "At any time, you are able to revoke your consent to data collection and/or processing by deleting your account. Your individual profile can be deleted, although your posted content will remain. If you wish to delete both your account <strong>and</strong> your content, please contact the administrative team for this website.", "consent.right_to_erasure_description": "At any time, you are able to revoke your consent to data collection and/or processing by deleting your account. Your individual profile can be deleted, although your posted content will remain. If you wish to delete both your account <strong>and</strong> your content, please contact the administrative team for this website.",
"consent.right-to-data-portability": "You have the Right to Data Portability", "consent.right_to_data_portability": "You have the Right to Data Portability",
"consent.right-to-data-portability-description": "You may request from us a machine-readable export of any collected data about you and your account. You can do so by clicking the appropriate button below.", "consent.right_to_data_portability_description": "You may request from us a machine-readable export of any collected data about you and your account. You can do so by clicking the appropriate button below.",
"consent.export-profile": "Export Profile (.json)", "consent.export_profile": "Export Profile (.json)",
"consent.export-profile-success": "Exporting profile, you will get a notification when it is complete.", "consent.export-profile-success": "Exporting profile, you will get a notification when it is complete.",
"consent.export-uploads": "Export Uploaded Content (.zip)", "consent.export_uploads": "Export Uploaded Content (.zip)",
"consent.export-uploads-success": "Exporting uploads, you will get a notification when it is complete.", "consent.export-uploads-success": "Exporting uploads, you will get a notification when it is complete.",
"consent.export-posts": "Export Posts (.csv)", "consent.export_posts": "Export Posts (.csv)",
"consent.export-posts-success": "Exporting posts, you will get a notification when it is complete.", "consent.export-posts-success": "Exporting posts, you will get a notification when it is complete.",
"emailUpdate.intro": "Please enter your email address below. This forum uses your email address for scheduled digest and notifications, as well as for account recovery in the event of a lost password.", "emailUpdate.intro": "Please enter your email address below. This forum uses your email address for scheduled digest and notifications, as well as for account recovery in the event of a lost password.",
"emailUpdate.optional": "<strong>This field is optional</strong>. You are not obligated to provide your email address, but without a validated email you will not be able to recover your account or login with your email.", "emailUpdate.optional": "<strong>This field is optional</strong>. You are not obligated to provide your email address, but without a validated email you will not be able to recover your account or login with your email.",

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