mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-12-17 05:50:25 +01:00
Compare commits
3 Commits
socket.io-
...
v2.0.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6e011b8ff5 | ||
|
|
e93ecc74fb | ||
|
|
1fcfde9d98 |
@@ -18,3 +18,12 @@ logs/
|
||||
.eslintrc
|
||||
test/files
|
||||
*.min.js
|
||||
|
||||
/public/src/app.js
|
||||
/public/src/client.js
|
||||
/public/src/admin/admin.js
|
||||
/public/src/modules/translator.common.js
|
||||
/public/src/modules/pictureCropper.js
|
||||
/public/src/modules/ace-editor.js
|
||||
/public/src/client/account/header.js
|
||||
/public/src/client/test.js
|
||||
32
.github/ISSUE_TEMPLATE.md
vendored
Normal file
32
.github/ISSUE_TEMPLATE.md
vendored
Normal file
@@ -0,0 +1,32 @@
|
||||
<!--
|
||||
== Github Issues are for bug reports and feature requests only ==
|
||||
== Please visit https://community.nodebb.org for other support ==
|
||||
== Found a security exploit? Please email us at security@nodebb.org instead for immediate attention ==
|
||||
== → DO NOT SUBMIT VULNERABILITIES TO THE PUBLIC BUG TRACKER ==
|
||||
-->
|
||||
|
||||
<!-- ++ Please include the following information when submitting a bug report ++ -->
|
||||
|
||||
- **NodeBB version:**
|
||||
- **NodeBB git hash:**
|
||||
- **NodeJS version:**
|
||||
<!-- (to find your git hash, execute `git rev-parse HEAD` from the main NodeBB directory) -->
|
||||
- **Installed NodeBB Plugins:**
|
||||
<!-- (to find installed plugins run ./nodebb plugins) -->
|
||||
- **Database type:** mongo, redis, or postgres
|
||||
- **Database version:**
|
||||
<!-- `mongod --version`, `redis-server --version`, or `postgres --version` -->
|
||||
- **Exact steps to cause this issue:**
|
||||
<!--
|
||||
1. First I did this...
|
||||
2. Then, I clicked on this item...
|
||||
|
||||
A quick note: MP4 and MOV formatted video files are now allowed to be uploaded to GH.
|
||||
Please upload if reproduction steps are hard to describe or reproduce reliably.
|
||||
-->
|
||||
- **What you expected:**
|
||||
<!-- e.g. I expected *abc* to *xyz* -->
|
||||
- **What happened instead:**
|
||||
<!-- e.g. Instead, I got *zyx* and NodeBB set fire to my house -->
|
||||
|
||||
<!-- Thank you! -->
|
||||
81
.github/ISSUE_TEMPLATE/bug-report.yml
vendored
81
.github/ISSUE_TEMPLATE/bug-report.yml
vendored
@@ -1,81 +0,0 @@
|
||||
name: Bug Report
|
||||
description: File a bug report
|
||||
labels: ["bug"]
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Github Issues are for bug reports and feature requests only
|
||||
Please visit https://community.nodebb.org for other support
|
||||
Found a security exploit? Please email us at security@nodebb.org instead for immediate attention
|
||||
### → DO NOT SUBMIT VULNERABILITIES TO THE PUBLIC BUG TRACKER ←
|
||||
- type: input
|
||||
attributes:
|
||||
label: NodeBB version
|
||||
placeholder: e.g. v2.2.0
|
||||
- type: input
|
||||
attributes:
|
||||
label: NodeBB git hash
|
||||
description: to find your git hash, execute `git rev-parse HEAD` from the main NodeBB directory
|
||||
placeholder: e.g. 783250ee6f8c51cdc243ce3b8d9f1a080517247e
|
||||
- type: input
|
||||
attributes:
|
||||
label: NodeJS version
|
||||
placeholder: e.g. v16.15.1
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Installed NodeBB plugins
|
||||
description: to find installed plugins run `./nodebb plugins`
|
||||
placeholder: |
|
||||
e.g.
|
||||
* nodebb-plugin-2factor@5.0.1 (installed, disabled)
|
||||
* nodebb-plugin-composer-default@8.0.0 (installed, enabled)
|
||||
* nodebb-plugin-dbsearch@5.1.5 (installed, disabled)
|
||||
* nodebb-plugin-emoji@4.0.4 (installed, enabled)
|
||||
* nodebb-plugin-emoji-android@3.0.0 (installed, enabled)
|
||||
* nodebb-plugin-markdown@10.0.0 (installed, enabled)
|
||||
* nodebb-plugin-mentions@3.0.11 (installed, enabled)
|
||||
* nodebb-plugin-spam-be-gone@1.0.0 (installed, disabled)
|
||||
* nodebb-rewards-essentials@0.2.1 (installed, enabled)
|
||||
* nodebb-theme-lavender@6.0.0 (installed, disabled)
|
||||
* nodebb-theme-persona@12.0.11 (installed, enabled)
|
||||
* nodebb-theme-slick@2.0.2 (installed, disabled)
|
||||
* nodebb-theme-vanilla@12.1.18 (installed, disabled)
|
||||
* nodebb-widget-essentials@6.0.0 (installed, enabled)
|
||||
- type: dropdown
|
||||
attributes:
|
||||
label: Database type
|
||||
multiple: true
|
||||
options:
|
||||
- MongoDB
|
||||
- Redis
|
||||
- PostgreSQL
|
||||
- type: input
|
||||
attributes:
|
||||
label: Database version
|
||||
description: "`mongod --version`, `redis-server --version`, or `postgres --version`"
|
||||
placeholder: e.g. v5.0.9
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Exact steps to cause this issue
|
||||
placeholder: |
|
||||
1. First I did this...
|
||||
2. Then, I clicked on this item...
|
||||
|
||||
A quick note: MP4 and MOV formatted video files are now allowed to be uploaded to GH.
|
||||
Please upload if reproduction steps are hard to describe or reproduce reliably.
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: What you expected
|
||||
placeholder: e.g. I expected *abc* to *xyz*
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: What happened instead
|
||||
placeholder: e.g. Instead, I got *zyx* and NodeBB set fire to my house
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Anything else?
|
||||
description: Any additional context about the issue you're encountering
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: "**Thank you!**"
|
||||
5
.github/ISSUE_TEMPLATE/config.yml
vendored
5
.github/ISSUE_TEMPLATE/config.yml
vendored
@@ -1,5 +0,0 @@
|
||||
blank_issues_enabled: true
|
||||
contact_links:
|
||||
- name: Community Forum
|
||||
url: https://community.nodebb.org
|
||||
about: Github Issues are for bug reports and feature requests only, please use community forum for other support
|
||||
24
.github/ISSUE_TEMPLATE/feature-request.yml
vendored
24
.github/ISSUE_TEMPLATE/feature-request.yml
vendored
@@ -1,24 +0,0 @@
|
||||
name: Feature Request
|
||||
description: Suggest a new feature
|
||||
labels: ["enhancement"]
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Github Issues are for bug reports and feature requests only
|
||||
Please visit https://community.nodebb.org for other support
|
||||
Found a security exploit? Please email us at security@nodebb.org instead for immediate attention
|
||||
### → DO NOT SUBMIT VULNERABILITIES TO THE PUBLIC BUG TRACKER ←
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Description
|
||||
validations:
|
||||
required: true
|
||||
- type: input
|
||||
attributes:
|
||||
label: Community forum reference
|
||||
description: If this feature was already discussed on the Community Forum link it here
|
||||
placeholder: https://community.nodebb.org/topic/0/example-feature-request
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: "**Thank you!**"
|
||||
6
.github/dependabot.yml
vendored
Normal file
6
.github/dependabot.yml
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: npm
|
||||
directory: "/install"
|
||||
schedule:
|
||||
interval: daily
|
||||
32
.github/workflows/docker.yml
vendored
32
.github/workflows/docker.yml
vendored
@@ -11,51 +11,41 @@ on:
|
||||
workflow_dispatch:
|
||||
|
||||
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
|
||||
permissions:
|
||||
contents: read
|
||||
packages: write
|
||||
|
||||
jobs:
|
||||
release:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v2
|
||||
uses: docker/setup-qemu-action@v1
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v2
|
||||
uses: docker/setup-buildx-action@v1
|
||||
|
||||
- name: Login to GitHub Container Registry
|
||||
uses: docker/login-action@v2
|
||||
- name: Login to Docker Hub
|
||||
uses: docker/login-action@v1
|
||||
with:
|
||||
registry: ghcr.io
|
||||
username: ${{ github.repository_owner }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
|
||||
- name: Docker meta
|
||||
id: meta
|
||||
uses: docker/metadata-action@v4
|
||||
uses: docker/metadata-action@v3
|
||||
with:
|
||||
images: ghcr.io/${{ github.repository }}
|
||||
images: nodebb/docker
|
||||
tags: |
|
||||
type=semver,pattern={{version}}
|
||||
type=semver,pattern={{major}}.{{minor}}
|
||||
type=semver,pattern={{major}}.x
|
||||
type=raw,value=latest,enable={{is_default_branch}}
|
||||
type=ref,event=branch,enable=${{ github.event.repository.default_branch != github.ref }}
|
||||
type=raw,value=latest
|
||||
|
||||
- name: Build and push Docker images
|
||||
uses: docker/build-push-action@v4
|
||||
uses: docker/build-push-action@v2
|
||||
with:
|
||||
context: .
|
||||
file: ./Dockerfile
|
||||
push: true
|
||||
tags: ${{ steps.meta.outputs.tags }}
|
||||
platforms: linux/amd64,linux/arm64,linux/arm/v7
|
||||
cache-from: type=gha
|
||||
cache-to: type=gha,mode=max
|
||||
|
||||
26
.github/workflows/test.yaml
vendored
26
.github/workflows/test.yaml
vendored
@@ -5,43 +5,35 @@ on:
|
||||
branches:
|
||||
- master
|
||||
- develop
|
||||
- bootstrap5
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
- develop
|
||||
- bootstrap5
|
||||
|
||||
defaults:
|
||||
run:
|
||||
shell: bash
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
test:
|
||||
permissions:
|
||||
checks: write # for coverallsapp/github-action to create new checks
|
||||
contents: read # for actions/checkout to fetch code
|
||||
name: Lint and test
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os: [ubuntu-latest]
|
||||
node: [16, 18]
|
||||
node: [14, 16]
|
||||
database: [mongo-dev, mongo, redis, postgres]
|
||||
include:
|
||||
# only run coverage once
|
||||
- os: ubuntu-latest
|
||||
node: 16
|
||||
node: 14
|
||||
coverage: true
|
||||
# test under development once
|
||||
- database: mongo-dev
|
||||
test_env: development
|
||||
# only run eslint once
|
||||
- os: ubuntu-latest
|
||||
node: 16
|
||||
node: 14
|
||||
database: mongo-dev
|
||||
lint: true
|
||||
runs-on: ${{ matrix.os }}
|
||||
@@ -50,7 +42,7 @@ jobs:
|
||||
|
||||
services:
|
||||
postgres:
|
||||
image: 'postgres:15-alpine'
|
||||
image: 'postgres:10-alpine'
|
||||
env:
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_PASSWORD: postgres
|
||||
@@ -65,7 +57,7 @@ jobs:
|
||||
- 5432:5432
|
||||
|
||||
redis:
|
||||
image: 'redis:7.0.11'
|
||||
image: 'redis:2.8.9'
|
||||
# Set health checks to wait until redis has started
|
||||
options: >-
|
||||
--health-cmd "redis-cli ping"
|
||||
@@ -77,7 +69,7 @@ jobs:
|
||||
- 6379:6379
|
||||
|
||||
mongo:
|
||||
image: 'mongo:3.7'
|
||||
image: 'mongo:3.6'
|
||||
ports:
|
||||
# Maps port 27017 on service container to the host
|
||||
- 27017:27017
|
||||
@@ -194,7 +186,7 @@ jobs:
|
||||
run: npm run coverage
|
||||
|
||||
- name: Test coverage
|
||||
uses: coverallsapp/github-action@v2.1.2
|
||||
uses: coverallsapp/github-action@1.1.3
|
||||
if: matrix.coverage
|
||||
with:
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
@@ -202,13 +194,11 @@ jobs:
|
||||
parallel: true
|
||||
|
||||
finish:
|
||||
permissions:
|
||||
checks: write # for coverallsapp/github-action to create new checks
|
||||
needs: test
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Coveralls Finished
|
||||
uses: coverallsapp/github-action@v2.1.2
|
||||
uses: coverallsapp/github-action@1.1.3
|
||||
with:
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
parallel-finished: true
|
||||
|
||||
7544
.tx/config
7544
.tx/config
File diff suppressed because it is too large
Load Diff
1939
CHANGELOG.md
1939
CHANGELOG.md
File diff suppressed because it is too large
Load Diff
20
Dockerfile
20
Dockerfile
@@ -1,19 +1,3 @@
|
||||
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 && \
|
||||
@@ -23,11 +7,11 @@ WORKDIR /usr/src/app
|
||||
ARG NODE_ENV
|
||||
ENV NODE_ENV $NODE_ENV
|
||||
|
||||
COPY --chown=node:node --from=npm /usr/src/build /usr/src/app
|
||||
COPY --chown=node:node install/package.json /usr/src/app/package.json
|
||||
|
||||
USER node
|
||||
|
||||
RUN npm rebuild && \
|
||||
RUN npm install --only=prod && \
|
||||
npm cache clean --force
|
||||
|
||||
COPY --chown=node:node . /usr/src/app
|
||||
|
||||
90
Gruntfile.js
90
Gruntfile.js
@@ -20,7 +20,6 @@ const prestart = require('./src/prestart');
|
||||
prestart.loadConfig(configFile);
|
||||
|
||||
const db = require('./src/database');
|
||||
const plugins = require('./src/plugins');
|
||||
|
||||
module.exports = function (grunt) {
|
||||
const args = [];
|
||||
@@ -41,39 +40,53 @@ module.exports = function (grunt) {
|
||||
|
||||
grunt.registerTask('init', async function () {
|
||||
const done = this.async();
|
||||
let pluginList = [];
|
||||
let plugins = [];
|
||||
if (!process.argv.includes('--core')) {
|
||||
await db.init();
|
||||
pluginList = await plugins.getActive();
|
||||
addBaseThemes(pluginList);
|
||||
if (!pluginList.includes('nodebb-plugin-composer-default')) {
|
||||
pluginList.push('nodebb-plugin-composer-default');
|
||||
plugins = await db.getSortedSetRange('plugins:active', 0, -1);
|
||||
addBaseThemes(plugins);
|
||||
if (!plugins.includes('nodebb-plugin-composer-default')) {
|
||||
plugins.push('nodebb-plugin-composer-default');
|
||||
}
|
||||
if (!pluginList.includes('nodebb-theme-persona')) {
|
||||
pluginList.push('nodebb-theme-persona');
|
||||
if (!plugins.includes('nodebb-theme-persona')) {
|
||||
plugins.push('nodebb-theme-persona');
|
||||
}
|
||||
}
|
||||
|
||||
const styleUpdated_Client = pluginList.map(p => `node_modules/${p}/*.scss`)
|
||||
.concat(pluginList.map(p => `node_modules/${p}/*.css`))
|
||||
.concat(pluginList.map(p => `node_modules/${p}/+(public|static|scss)/**/*.scss`))
|
||||
.concat(pluginList.map(p => `node_modules/${p}/+(public|static)/**/*.css`));
|
||||
const styleUpdated_Client = plugins.map(p => `node_modules/${p}/*.less`)
|
||||
.concat(plugins.map(p => `node_modules/${p}/*.css`))
|
||||
.concat(plugins.map(p => `node_modules/${p}/+(public|static|less)/**/*.less`))
|
||||
.concat(plugins.map(p => `node_modules/${p}/+(public|static)/**/*.css`));
|
||||
|
||||
const clientUpdated = pluginList.map(p => `node_modules/${p}/+(public|static)/**/*.js`);
|
||||
const serverUpdated = pluginList.map(p => `node_modules/${p}/*.js`)
|
||||
.concat(pluginList.map(p => `node_modules/${p}/+(lib|src)/**/*.js`));
|
||||
const styleUpdated_Admin = plugins.map(p => `node_modules/${p}/*.less`)
|
||||
.concat(plugins.map(p => `node_modules/${p}/*.css`))
|
||||
.concat(plugins.map(p => `node_modules/${p}/+(public|static|less)/**/*.less`))
|
||||
.concat(plugins.map(p => `node_modules/${p}/+(public|static)/**/*.css`));
|
||||
|
||||
const clientUpdated = plugins.map(p => `node_modules/${p}/+(public|static)/**/*.js`);
|
||||
const serverUpdated = plugins.map(p => `node_modules/${p}/*.js`)
|
||||
.concat(plugins.map(p => `node_modules/${p}/+(lib|src)/**/*.js`));
|
||||
|
||||
const templatesUpdated = plugins.map(p => `node_modules/${p}/+(public|static|templates)/**/*.tpl`);
|
||||
const langUpdated = plugins.map(p => `node_modules/${p}/+(public|static|languages)/**/*.json`);
|
||||
|
||||
const templatesUpdated = pluginList.map(p => `node_modules/${p}/+(public|static|templates)/**/*.tpl`);
|
||||
const langUpdated = pluginList.map(p => `node_modules/${p}/+(public|static|languages)/**/*.json`);
|
||||
const interval = 100;
|
||||
grunt.config(['watch'], {
|
||||
styleUpdated: {
|
||||
styleUpdated_Client: {
|
||||
files: [
|
||||
'public/scss/**/*.scss',
|
||||
'public/less/**/*.less',
|
||||
...styleUpdated_Client,
|
||||
],
|
||||
options: {
|
||||
interval: interval,
|
||||
interval: 1000,
|
||||
},
|
||||
},
|
||||
styleUpdated_Admin: {
|
||||
files: [
|
||||
'public/less/**/*.less',
|
||||
...styleUpdated_Admin,
|
||||
],
|
||||
options: {
|
||||
interval: 1000,
|
||||
},
|
||||
},
|
||||
clientUpdated: {
|
||||
@@ -84,7 +97,7 @@ module.exports = function (grunt) {
|
||||
'node_modules/benchpressjs/build/benchpress.js',
|
||||
],
|
||||
options: {
|
||||
interval: interval,
|
||||
interval: 1000,
|
||||
},
|
||||
},
|
||||
serverUpdated: {
|
||||
@@ -99,7 +112,7 @@ module.exports = function (grunt) {
|
||||
'!src/upgrades/**',
|
||||
],
|
||||
options: {
|
||||
interval: interval,
|
||||
interval: 1000,
|
||||
},
|
||||
},
|
||||
templatesUpdated: {
|
||||
@@ -108,7 +121,7 @@ module.exports = function (grunt) {
|
||||
...templatesUpdated,
|
||||
],
|
||||
options: {
|
||||
interval: interval,
|
||||
interval: 1000,
|
||||
},
|
||||
},
|
||||
langUpdated: {
|
||||
@@ -118,15 +131,16 @@ module.exports = function (grunt) {
|
||||
...langUpdated,
|
||||
],
|
||||
options: {
|
||||
interval: interval,
|
||||
interval: 1000,
|
||||
},
|
||||
},
|
||||
});
|
||||
const build = require('./src/meta/build');
|
||||
if (!grunt.option('skip')) {
|
||||
await build.build(true, { watch: true });
|
||||
await build.build(true, { webpack: false });
|
||||
}
|
||||
run();
|
||||
await build.webpack({ watch: true });
|
||||
done();
|
||||
});
|
||||
|
||||
@@ -153,14 +167,16 @@ module.exports = function (grunt) {
|
||||
grunt.event.removeAllListeners('watch');
|
||||
grunt.event.on('watch', (action, filepath, target) => {
|
||||
let compiling;
|
||||
if (target === 'styleUpdated') {
|
||||
compiling = ['clientCSS', 'acpCSS'];
|
||||
if (target === 'styleUpdated_Client') {
|
||||
compiling = 'clientCSS';
|
||||
} else if (target === 'styleUpdated_Admin') {
|
||||
compiling = 'acpCSS';
|
||||
} else if (target === 'clientUpdated') {
|
||||
compiling = ['js'];
|
||||
compiling = 'js';
|
||||
} else if (target === 'templatesUpdated') {
|
||||
compiling = ['tpl'];
|
||||
compiling = 'tpl';
|
||||
} else if (target === 'langUpdated') {
|
||||
compiling = ['lang'];
|
||||
compiling = 'lang';
|
||||
} else if (target === 'serverUpdated') {
|
||||
// empty require cache
|
||||
const paths = ['./src/meta/build.js', './src/meta/index.js'];
|
||||
@@ -168,7 +184,7 @@ module.exports = function (grunt) {
|
||||
return run();
|
||||
}
|
||||
|
||||
require('./src/meta/build').build(compiling, { webpack: false }, (err) => {
|
||||
require('./src/meta/build').build([compiling], { webpack: false }, (err) => {
|
||||
if (err) {
|
||||
winston.error(err.stack);
|
||||
}
|
||||
@@ -179,10 +195,10 @@ module.exports = function (grunt) {
|
||||
});
|
||||
};
|
||||
|
||||
function addBaseThemes(pluginList) {
|
||||
let themeId = pluginList.find(p => p.includes('nodebb-theme-'));
|
||||
function addBaseThemes(plugins) {
|
||||
let themeId = plugins.find(p => p.includes('nodebb-theme-'));
|
||||
if (!themeId) {
|
||||
return pluginList;
|
||||
return plugins;
|
||||
}
|
||||
let baseTheme;
|
||||
do {
|
||||
@@ -193,9 +209,9 @@ function addBaseThemes(pluginList) {
|
||||
}
|
||||
|
||||
if (baseTheme) {
|
||||
pluginList.push(baseTheme);
|
||||
plugins.push(baseTheme);
|
||||
themeId = baseTheme;
|
||||
}
|
||||
} while (baseTheme);
|
||||
return pluginList;
|
||||
return plugins;
|
||||
}
|
||||
|
||||
22
README.md
22
README.md
@@ -3,7 +3,6 @@
|
||||
[](https://github.com/NodeBB/NodeBB/actions/workflows/test.yaml)
|
||||
[](https://coveralls.io/github/NodeBB/NodeBB?branch=master)
|
||||
[](https://codeclimate.com/github/NodeBB/NodeBB)
|
||||
[](https://discord.gg/p6YKPXu7er)
|
||||
|
||||
[**NodeBB Forum Software**](https://nodebb.org) is powered by Node.js and supports either Redis, MongoDB, or a PostgreSQL database. It utilizes web sockets for instant interactions and real-time notifications. NodeBB takes the best of the modern web: real-time streaming discussions, mobile responsiveness, and rich RESTful read/write APIs, while staying true to the original bulletin board/forum format → categorical hierarchies, local user accounts, and asynchronous messaging.
|
||||
|
||||
@@ -24,22 +23,25 @@ NodeBB's theming engine is highly flexible and does not restrict your design cho
|
||||
[](http://i.imgur.com/LmHtPho.png)
|
||||
[](http://i.imgur.com/paiJPJk.jpg)
|
||||
|
||||
Our minimalist "Harmony" theme gets you going right away, no coding experience required.
|
||||
Our minimalist "Persona" theme gets you going right away, no coding experience required.
|
||||
|
||||
[](http://i.imgur.com/HwNEXGu.png)
|
||||
[](http://i.imgur.com/II1byYs.png)
|
||||
|
||||
|
||||

|
||||
|
||||
## How can I follow along/contribute?
|
||||
|
||||
* If you are a developer, feel free to check out the source and submit pull requests. We also have a wide array of [plugins](http://community.nodebb.org/category/7/nodebb-plugins) which would be a great starting point for learning the codebase.
|
||||
* If you are a designer, [NodeBB needs themes](http://community.nodebb.org/category/10/nodebb-themes)! NodeBB's theming system allows extension of the base templates as well as styling via SCSS or CSS. NodeBB's base theme utilizes [Bootstrap 5](http://getbootstrap.com/) as a frontend toolkit.
|
||||
* If you know languages other than English you can help us translate NodeBB. We use [Transifex](https://explore.transifex.com/nodebb/nodebb/) for internationalization.
|
||||
* If you are a designer, [NodeBB needs themes](http://community.nodebb.org/category/10/nodebb-themes)! NodeBB's theming system allows extension of the base templates as well as styling via LESS or CSS. NodeBB's base theme utilizes [Bootstrap 3](http://getbootstrap.com/) but themes can choose to use a different framework altogether.
|
||||
* If you know languages other than English you can help us translate NodeBB. We use [Transifex](https://www.transifex.com/projects/p/nodebb/) for internationalization.
|
||||
* Please don't forget to **like**, **follow**, and **star our repo**! Join our growing [community](http://community.nodebb.org) to keep up to date with the latest NodeBB development.
|
||||
|
||||
## Requirements
|
||||
|
||||
NodeBB requires the following software to be installed:
|
||||
|
||||
* A version of Node.js at least 16 or greater ([installation/upgrade instructions](https://github.com/nodesource/distributions))
|
||||
* A version of Node.js at least 12 or greater ([installation/upgrade instructions](https://github.com/nodesource/distributions))
|
||||
* MongoDB, version 3.6 or greater **or** Redis, version 2.8.9 or greater
|
||||
* 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)
|
||||
@@ -73,10 +75,10 @@ Interested in a sublicense agreement for use of NodeBB in a non-free/restrictive
|
||||
|
||||
* [Demo](https://try.nodebb.org)
|
||||
* [Developer Community](http://community.nodebb.org)
|
||||
* [Documentation & Installation Instructions](https://docs.nodebb.org)
|
||||
* [Help translate NodeBB](https://explore.transifex.com/nodebb/nodebb/)
|
||||
* [NodeBB Blog](https://nodebb.org/blog)
|
||||
* [Premium Hosting for NodeBB](https://www.nodebb.org/ "NodeBB")
|
||||
* [Documentation & Installation Instructions](http://docs.nodebb.org)
|
||||
* [Help translate NodeBB](https://www.transifex.com/projects/p/nodebb/)
|
||||
* [NodeBB Blog](http://blog.nodebb.org)
|
||||
* [Premium Hosting for NodeBB](http://www.nodebb.org/ "NodeBB")
|
||||
* Unofficial IRC community – channel `#nodebb` on Libera.chat
|
||||
* [Follow us on Twitter](http://www.twitter.com/NodeBB/ "NodeBB Twitter")
|
||||
* [Like us on Facebook](http://www.facebook.com/NodeBB/ "NodeBB Facebook")
|
||||
|
||||
2
app.js
2
app.js
@@ -71,7 +71,7 @@ if (nconf.get('setup') || nconf.get('install')) {
|
||||
});
|
||||
} else if (nconf.get('activate')) {
|
||||
require('./src/cli/manage').activate(nconf.get('activate'));
|
||||
} else if (nconf.get('plugins') && typeof nconf.get('plugins') !== 'object') {
|
||||
} else if (nconf.get('plugins')) {
|
||||
require('./src/cli/manage').listPlugins();
|
||||
} else if (nconf.get('build')) {
|
||||
require('./src/cli/manage').build(nconf.get('build'));
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
"defaultLang": "en-GB",
|
||||
"loginDays": 14,
|
||||
"loginSeconds": 0,
|
||||
"sessionDuration": 0,
|
||||
"loginAttempts": 5,
|
||||
"lockoutDuration": 60,
|
||||
"adminReloginDuration": 60,
|
||||
@@ -16,7 +15,7 @@
|
||||
"postDeleteDuration": 0,
|
||||
"enablePostHistory": 1,
|
||||
"topicBacklinks": 1,
|
||||
"postCacheSize": 20971520,
|
||||
"postCacheSize": 10485760,
|
||||
"disableChat": 0,
|
||||
"chatEditDuration": 0,
|
||||
"chatDeleteDuration": 0,
|
||||
@@ -26,7 +25,6 @@
|
||||
"postQueue": 0,
|
||||
"postQueueReputationThreshold": 0,
|
||||
"groupsExemptFromPostQueue": ["administrators", "Global Moderators"],
|
||||
"groupsExemptFromMaintenanceMode": ["administrators", "Global Moderators"],
|
||||
"minimumPostLength": 8,
|
||||
"maximumPostLength": 32767,
|
||||
"systemTags": "",
|
||||
@@ -47,7 +45,6 @@
|
||||
"allowMultipleBadges": 0,
|
||||
"maximumFileSize": 2048,
|
||||
"stripEXIFData": 1,
|
||||
"orphanExpiryDays": 0,
|
||||
"resizeImageWidthThreshold": 2000,
|
||||
"resizeImageWidth": 760,
|
||||
"rejectImageWidth": 5000,
|
||||
@@ -80,7 +77,6 @@
|
||||
"reputation:disabled": 0,
|
||||
"downvote:disabled": 0,
|
||||
"disableSignatures": 0,
|
||||
"signatures:hideDuplicates": 0,
|
||||
"upvotesPerDay": 20,
|
||||
"upvotesPerUserPerDay": 6,
|
||||
"downvotesPerDay": 10,
|
||||
@@ -96,8 +92,6 @@
|
||||
"min:rep:signature": 0,
|
||||
"flags:limitPerTarget": 0,
|
||||
"flags:autoFlagOnDownvoteThreshold": 0,
|
||||
"flags:actionOnResolve": "rescind",
|
||||
"flags:actionOnReject": "rescind",
|
||||
"notificationType_upvote": "notification",
|
||||
"notificationType_new-topic": "notification",
|
||||
"notificationType_new-reply": "notification",
|
||||
@@ -148,7 +142,6 @@
|
||||
"maximumRelatedTopics": 0,
|
||||
"disableEmailSubscriptions": 0,
|
||||
"emailConfirmInterval": 10,
|
||||
"emailConfirmExpiry": 24,
|
||||
"removeEmailNotificationImages": 0,
|
||||
"sendValidationEmail": 1,
|
||||
"includeUnverifiedEmails": 0,
|
||||
@@ -160,7 +153,6 @@
|
||||
"digestHour": 17,
|
||||
"passwordExpiryDays": 0,
|
||||
"cross-origin-embedder-policy": 0,
|
||||
"cross-origin-opener-policy": "same-origin",
|
||||
"cross-origin-resource-policy": "same-origin",
|
||||
"hsts-maxage": 31536000,
|
||||
"hsts-subdomains": 0,
|
||||
@@ -182,6 +174,5 @@
|
||||
"composer:showHelpTab": 1,
|
||||
"composer:allowPluginHelp": 1,
|
||||
"maxReconnectionAttempts": 5,
|
||||
"reconnectionDelay": 1500,
|
||||
"disableCustomUserSkins": 0
|
||||
"reconnectionDelay": 1500
|
||||
}
|
||||
@@ -2,7 +2,7 @@
|
||||
{
|
||||
"widget": "html",
|
||||
"data" : {
|
||||
"html": "<footer id=\"footer\" class=\"container footer d-flex flex-column align-items-center gap-1 mb-2\">\n\t<span>Powered by <a class=\"link-secondary text-decoration-underline\" target=\"_blank\" href=\"https://nodebb.org\">NodeBB</a></span>\n\t<span><a class=\"link-secondary\" target=\"_blank\" href=\"//github.com/NodeBB/NodeBB/graphs/contributors\"><i class=\"fa fa-users\"></i> <span class=\"text-decoration-underline\">Contributors<span></a></span>\n</footer>",
|
||||
"html": "<footer id=\"footer\" class=\"container footer\">\r\n\t<div>\r\n\t\tPowered by <a target=\"_blank\" href=\"https://nodebb.org\">NodeBB</a> | <a target=\"_blank\" href=\"//github.com/NodeBB/NodeBB/graphs/contributors\">Contributors</a>\r\n\t</div>\r\n</footer>",
|
||||
"title":"",
|
||||
"container":""
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
"title": "[[global:header.categories]]",
|
||||
"enabled": true,
|
||||
"iconClass": "fa-list",
|
||||
"textClass": "d-lg-none",
|
||||
"textClass": "visible-xs-inline",
|
||||
"text": "[[global:header.categories]]"
|
||||
},
|
||||
{
|
||||
@@ -13,7 +13,7 @@
|
||||
"title": "[[global:header.unread]]",
|
||||
"enabled": true,
|
||||
"iconClass": "fa-inbox",
|
||||
"textClass": "d-lg-none",
|
||||
"textClass": "visible-xs-inline",
|
||||
"text": "[[global:header.unread]]",
|
||||
"groups": ["registered-users"]
|
||||
},
|
||||
@@ -22,7 +22,7 @@
|
||||
"title": "[[global:header.recent]]",
|
||||
"enabled": true,
|
||||
"iconClass": "fa-clock-o",
|
||||
"textClass": "d-lg-none",
|
||||
"textClass": "visible-xs-inline",
|
||||
"text": "[[global:header.recent]]"
|
||||
},
|
||||
{
|
||||
@@ -30,7 +30,7 @@
|
||||
"title": "[[global:header.tags]]",
|
||||
"enabled": true,
|
||||
"iconClass": "fa-tags",
|
||||
"textClass": "d-lg-none",
|
||||
"textClass": "visible-xs-inline",
|
||||
"text": "[[global:header.tags]]"
|
||||
},
|
||||
{
|
||||
@@ -38,7 +38,7 @@
|
||||
"title": "[[global:header.popular]]",
|
||||
"enabled": true,
|
||||
"iconClass": "fa-fire",
|
||||
"textClass": "d-lg-none",
|
||||
"textClass": "visible-xs-inline",
|
||||
"text": "[[global:header.popular]]"
|
||||
},
|
||||
{
|
||||
@@ -46,7 +46,7 @@
|
||||
"title": "[[global:header.users]]",
|
||||
"enabled": true,
|
||||
"iconClass": "fa-user",
|
||||
"textClass": "d-lg-none",
|
||||
"textClass": "visible-xs-inline",
|
||||
"text": "[[global:header.users]]"
|
||||
},
|
||||
{
|
||||
@@ -54,7 +54,7 @@
|
||||
"title": "[[global:header.groups]]",
|
||||
"enabled": true,
|
||||
"iconClass": "fa-group",
|
||||
"textClass": "d-lg-none",
|
||||
"textClass": "visible-xs-inline",
|
||||
"text": "[[global:header.groups]]"
|
||||
},
|
||||
{
|
||||
@@ -62,7 +62,7 @@
|
||||
"title": "[[global:header.admin]]",
|
||||
"enabled": true,
|
||||
"iconClass": "fa-cogs",
|
||||
"textClass": "d-lg-none",
|
||||
"textClass": "visible-xs-inline",
|
||||
"text": "[[global:header.admin]]",
|
||||
"groups": ["administrators"]
|
||||
}
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
"name": "nodebb",
|
||||
"license": "GPL-3.0",
|
||||
"description": "NodeBB Forum",
|
||||
"version": "3.1.4",
|
||||
"homepage": "https://www.nodebb.org",
|
||||
"version": "2.0.0",
|
||||
"homepage": "http://www.nodebb.org",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/NodeBB/NodeBB/"
|
||||
@@ -29,152 +29,141 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@adactive/bootstrap-tagsinput": "0.8.2",
|
||||
"@isaacs/ttlcache": "1.4.0",
|
||||
"@popperjs/core": "2.11.7",
|
||||
"ace-builds": "1.21.1",
|
||||
"ace-builds": "1.4.14",
|
||||
"archiver": "5.3.1",
|
||||
"async": "3.2.4",
|
||||
"autoprefixer": "10.4.14",
|
||||
"async": "3.2.3",
|
||||
"autoprefixer": "10.4.7",
|
||||
"bcryptjs": "2.4.3",
|
||||
"benchpressjs": "2.5.1",
|
||||
"body-parser": "1.20.2",
|
||||
"bootbox": "6.0.0",
|
||||
"bootstrap": "5.2.3",
|
||||
"bootswatch": "5.2.3",
|
||||
"benchpressjs": "2.4.3",
|
||||
"body-parser": "1.20.0",
|
||||
"bootbox": "5.5.3",
|
||||
"bootstrap": "3.4.1",
|
||||
"chalk": "4.1.2",
|
||||
"chart.js": "2.9.4",
|
||||
"cli-graph": "3.2.2",
|
||||
"clipboard": "2.0.11",
|
||||
"clipboard": "2.0.10",
|
||||
"colors": "1.4.0",
|
||||
"commander": "10.0.1",
|
||||
"compare-versions": "5.0.3",
|
||||
"commander": "7.2.0",
|
||||
"compare-versions": "4.1.3",
|
||||
"compression": "1.7.4",
|
||||
"connect-flash": "0.1.1",
|
||||
"connect-mongo": "5.0.0",
|
||||
"connect-mongo": "4.6.0",
|
||||
"connect-multiparty": "2.2.0",
|
||||
"connect-pg-simple": "8.0.0",
|
||||
"connect-redis": "7.1.0",
|
||||
"connect-pg-simple": "7.0.0",
|
||||
"connect-redis": "6.1.3",
|
||||
"cookie-parser": "1.4.6",
|
||||
"cron": "2.3.0",
|
||||
"cropperjs": "1.5.13",
|
||||
"csrf-sync": "4.0.1",
|
||||
"cron": "1.8.3",
|
||||
"cropperjs": "1.5.12",
|
||||
"csurf": "1.11.0",
|
||||
"daemon": "1.1.0",
|
||||
"diff": "5.1.0",
|
||||
"esbuild": "0.17.19",
|
||||
"express": "4.18.2",
|
||||
"express-session": "1.17.3",
|
||||
"diff": "5.0.0",
|
||||
"express": "4.18.1",
|
||||
"express-session": "1.17.2",
|
||||
"express-useragent": "1.0.15",
|
||||
"file-loader": "6.2.0",
|
||||
"fs-extra": "11.1.1",
|
||||
"graceful-fs": "4.2.11",
|
||||
"helmet": "7.0.0",
|
||||
"html-to-text": "9.0.5",
|
||||
"fs-extra": "10.1.0",
|
||||
"graceful-fs": "4.2.10",
|
||||
"helmet": "5.0.2",
|
||||
"html-to-text": "8.2.0",
|
||||
"ipaddr.js": "2.0.1",
|
||||
"jquery": "3.7.0",
|
||||
"jquery": "3.6.0",
|
||||
"jquery-deserialize": "2.0.0",
|
||||
"jquery-form": "4.3.0",
|
||||
"jquery-serializeobject": "1.0.0",
|
||||
"jquery-ui": "1.13.2",
|
||||
"jquery-ui": "1.13.1",
|
||||
"jsesc": "3.0.2",
|
||||
"json2csv": "5.0.7",
|
||||
"jsonwebtoken": "9.0.0",
|
||||
"less": "4.1.3",
|
||||
"jsonwebtoken": "8.5.1",
|
||||
"less": "4.1.2",
|
||||
"lodash": "4.17.21",
|
||||
"logrotate-stream": "0.2.9",
|
||||
"lru-cache": "9.1.1",
|
||||
"logrotate-stream": "0.2.8",
|
||||
"lru-cache": "6.0.0",
|
||||
"material-design-lite": "1.3.0",
|
||||
"mime": "3.0.0",
|
||||
"mkdirp": "3.0.1",
|
||||
"mongodb": "5.5.0",
|
||||
"mkdirp": "1.0.4",
|
||||
"mongodb": "4.5.0",
|
||||
"morgan": "1.10.0",
|
||||
"mousetrap": "1.6.5",
|
||||
"multiparty": "4.2.3",
|
||||
"@nodebb/bootswatch": "3.4.2",
|
||||
"nconf": "0.12.0",
|
||||
"nodebb-plugin-2factor": "7.0.5",
|
||||
"nodebb-plugin-composer-default": "10.1.5",
|
||||
"nodebb-plugin-dbsearch": "6.0.1",
|
||||
"nodebb-plugin-emoji": "5.0.15",
|
||||
"nodebb-plugin-emoji-android": "4.0.0",
|
||||
"nodebb-plugin-markdown": "12.0.4",
|
||||
"nodebb-plugin-mentions": "4.1.1",
|
||||
"nodebb-plugin-ntfy": "1.0.15",
|
||||
"nodebb-plugin-spam-be-gone": "2.0.7",
|
||||
"nodebb-rewards-essentials": "0.2.3",
|
||||
"nodebb-theme-harmony": "1.0.34",
|
||||
"nodebb-theme-lavender": "7.0.9",
|
||||
"nodebb-theme-peace": "2.0.26",
|
||||
"nodebb-theme-persona": "13.0.69",
|
||||
"nodebb-widget-essentials": "7.0.12",
|
||||
"nodemailer": "6.9.2",
|
||||
"nodebb-plugin-2factor": "4.0.0",
|
||||
"nodebb-plugin-composer-default": "8.0.0",
|
||||
"nodebb-plugin-dbsearch": "5.1.5",
|
||||
"nodebb-plugin-emoji": "4.0.2",
|
||||
"nodebb-plugin-emoji-android": "3.0.0",
|
||||
"nodebb-plugin-markdown": "10.0.0",
|
||||
"nodebb-plugin-mentions": "3.0.10",
|
||||
"nodebb-plugin-spam-be-gone": "1.0.0",
|
||||
"nodebb-rewards-essentials": "0.2.1",
|
||||
"nodebb-theme-lavender": "6.0.0",
|
||||
"nodebb-theme-persona": "12.0.1",
|
||||
"nodebb-theme-slick": "2.0.0",
|
||||
"nodebb-theme-vanilla": "12.1.17",
|
||||
"nodebb-widget-essentials": "6.0.0",
|
||||
"nodemailer": "6.7.4",
|
||||
"nprogress": "0.2.0",
|
||||
"passport": "0.6.0",
|
||||
"passport": "0.5.2",
|
||||
"passport-http-bearer": "1.0.1",
|
||||
"passport-local": "1.0.0",
|
||||
"pg": "8.11.0",
|
||||
"pg-cursor": "2.10.0",
|
||||
"postcss": "8.4.23",
|
||||
"pg": "8.7.3",
|
||||
"pg-cursor": "2.7.3",
|
||||
"postcss": "8.4.13",
|
||||
"postcss-clean": "1.2.0",
|
||||
"progress-webpack-plugin": "1.0.16",
|
||||
"prompt": "1.3.0",
|
||||
"ioredis": "5.3.2",
|
||||
"ioredis": "5.0.4",
|
||||
"request": "2.88.2",
|
||||
"request-promise-native": "1.0.9",
|
||||
"rimraf": "5.0.1",
|
||||
"rimraf": "3.0.2",
|
||||
"rss": "1.2.2",
|
||||
"rtlcss": "4.1.0",
|
||||
"sanitize-html": "2.10.0",
|
||||
"sass": "1.62.1",
|
||||
"semver": "7.5.1",
|
||||
"sanitize-html": "2.7.0",
|
||||
"semver": "7.3.7",
|
||||
"serve-favicon": "2.5.0",
|
||||
"sharp": "0.32.1",
|
||||
"sharp": "0.30.4",
|
||||
"sitemap": "7.1.1",
|
||||
"slideout": "1.0.1",
|
||||
"socket.io": "4.6.1",
|
||||
"socket.io-client": "4.6.1",
|
||||
"@socket.io/redis-adapter": "8.2.0",
|
||||
"socket.io": "4.5.0",
|
||||
"socket.io-adapter-cluster": "1.0.1",
|
||||
"socket.io-client": "4.5.0",
|
||||
"@socket.io/redis-adapter": "7.2.0",
|
||||
"sortablejs": "1.15.0",
|
||||
"spdx-license-list": "6.6.0",
|
||||
"spdx-license-list": "6.5.0",
|
||||
"spider-detector": "2.0.0",
|
||||
"terser-webpack-plugin": "5.3.9",
|
||||
"textcomplete": "0.18.2",
|
||||
"textcomplete.contenteditable": "0.1.1",
|
||||
"timeago": "1.6.7",
|
||||
"tinycon": "0.6.8",
|
||||
"toobusy-js": "0.5.1",
|
||||
"validator": "13.9.0",
|
||||
"webpack": "5.83.1",
|
||||
"uglify-es": "3.3.9",
|
||||
"validator": "13.7.0",
|
||||
"visibilityjs": "2.0.2",
|
||||
"webpack": "5.72.0",
|
||||
"webpack-merge": "5.8.0",
|
||||
"winston": "3.8.2",
|
||||
"winston": "3.7.2",
|
||||
"xml": "1.0.1",
|
||||
"xregexp": "5.1.1",
|
||||
"yargs": "17.7.2",
|
||||
"xregexp": "5.1.0",
|
||||
"yargs": "17.4.1",
|
||||
"zxcvbn": "4.4.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@apidevtools/swagger-parser": "10.1.0",
|
||||
"@commitlint/cli": "17.6.3",
|
||||
"@commitlint/config-angular": "17.6.3",
|
||||
"@apidevtools/swagger-parser": "10.0.3",
|
||||
"@commitlint/cli": "16.2.4",
|
||||
"@commitlint/config-angular": "16.2.4",
|
||||
"coveralls": "3.1.1",
|
||||
"eslint": "8.41.0",
|
||||
"eslint-config-nodebb": "0.2.1",
|
||||
"eslint-plugin-import": "2.27.5",
|
||||
"grunt": "1.6.1",
|
||||
"eslint": "8.14.0",
|
||||
"eslint-config-nodebb": "0.1.1",
|
||||
"eslint-plugin-import": "2.26.0",
|
||||
"grunt": "1.5.2",
|
||||
"grunt-contrib-watch": "1.1.0",
|
||||
"husky": "8.0.3",
|
||||
"jsdom": "22.0.0",
|
||||
"lint-staged": "13.2.2",
|
||||
"mocha": "10.2.0",
|
||||
"husky": "7.0.4",
|
||||
"jsdom": "19.0.0",
|
||||
"lint-staged": "12.4.1",
|
||||
"mocha": "10.0.0",
|
||||
"mocha-lcov-reporter": "1.3.0",
|
||||
"mockdate": "3.0.5",
|
||||
"nyc": "15.1.0",
|
||||
"smtp-server": "3.11.0"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"sass-embedded": "1.62.0"
|
||||
},
|
||||
"resolutions": {
|
||||
"*/jquery": "3.7.0"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/NodeBB/NodeBB/issues"
|
||||
},
|
||||
@@ -182,6 +171,11 @@
|
||||
"node": ">=12"
|
||||
},
|
||||
"maintainers": [
|
||||
{
|
||||
"name": "Andrew Rodrigues",
|
||||
"email": "andrew@nodebb.org",
|
||||
"url": "https://github.com/psychobunny"
|
||||
},
|
||||
{
|
||||
"name": "Julian Lam",
|
||||
"email": "julian@nodebb.org",
|
||||
|
||||
@@ -6,14 +6,14 @@ const bodyParser = require('body-parser');
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const childProcess = require('child_process');
|
||||
const less = require('less');
|
||||
|
||||
const webpack = require('webpack');
|
||||
const nconf = require('nconf');
|
||||
|
||||
const Benchpress = require('benchpressjs');
|
||||
const { mkdirp } = require('mkdirp');
|
||||
const mkdirp = require('mkdirp');
|
||||
const { paths } = require('../src/constants');
|
||||
const sass = require('../src/utils').getSass();
|
||||
|
||||
const app = express();
|
||||
let server;
|
||||
@@ -73,7 +73,7 @@ web.install = async function (port) {
|
||||
try {
|
||||
await Promise.all([
|
||||
compileTemplate(),
|
||||
compileSass(),
|
||||
compileLess(),
|
||||
runWebpack(),
|
||||
copyCSS(),
|
||||
loadDefaults(),
|
||||
@@ -247,28 +247,23 @@ async function compileTemplate() {
|
||||
]);
|
||||
}
|
||||
|
||||
async function compileSass() {
|
||||
async function compileLess() {
|
||||
try {
|
||||
const installSrc = path.join(__dirname, '../public/scss/install.scss');
|
||||
const installSrc = path.join(__dirname, '../public/less/install.less');
|
||||
const style = await fs.promises.readFile(installSrc);
|
||||
const scssOutput = sass.compileString(String(style), {
|
||||
loadPaths: [
|
||||
path.join(__dirname, '../public/scss'),
|
||||
],
|
||||
});
|
||||
|
||||
await fs.promises.writeFile(path.join(__dirname, '../public/installer.css'), scssOutput.css.toString());
|
||||
const css = await less.render(String(style), { filename: path.resolve(installSrc) });
|
||||
await fs.promises.writeFile(path.join(__dirname, '../public/installer.css'), css.css);
|
||||
} catch (err) {
|
||||
winston.error(`Unable to compile SASS: \n${err.stack}`);
|
||||
winston.error(`Unable to compile LESS: \n${err.stack}`);
|
||||
throw err;
|
||||
}
|
||||
}
|
||||
|
||||
async function copyCSS() {
|
||||
await fs.promises.copyFile(
|
||||
path.join(__dirname, '../node_modules/bootstrap/dist/css/bootstrap.min.css'),
|
||||
path.join(__dirname, '../public/bootstrap.min.css'),
|
||||
const src = await fs.promises.readFile(
|
||||
path.join(__dirname, '../node_modules/bootstrap/dist/css/bootstrap.min.css'), 'utf8'
|
||||
);
|
||||
await fs.promises.writeFile(path.join(__dirname, '../public/bootstrap.min.css'), src);
|
||||
}
|
||||
|
||||
async function loadDefaults() {
|
||||
|
||||
21
loader.js
21
loader.js
@@ -6,7 +6,7 @@ const url = require('url');
|
||||
const path = require('path');
|
||||
const { fork } = require('child_process');
|
||||
const logrotate = require('logrotate-stream');
|
||||
const { mkdirp } = require('mkdirp');
|
||||
const mkdirp = require('mkdirp');
|
||||
|
||||
const file = require('./src/file');
|
||||
const pkg = require('./package.json');
|
||||
@@ -30,7 +30,9 @@ const output = logrotate({ file: outputLogFilePath, size: '1m', keep: 3, compres
|
||||
const silent = nconf.get('silent') === 'false' ? false : nconf.get('silent') !== false;
|
||||
let numProcs;
|
||||
const workers = [];
|
||||
const Loader = {};
|
||||
const Loader = {
|
||||
timesStarted: 0,
|
||||
};
|
||||
const appPath = path.join(__dirname, 'app.js');
|
||||
|
||||
Loader.init = function () {
|
||||
@@ -55,6 +57,21 @@ Loader.displayStartupMessages = function () {
|
||||
|
||||
Loader.addWorkerEvents = function (worker) {
|
||||
worker.on('exit', (code, signal) => {
|
||||
if (code !== 0) {
|
||||
if (Loader.timesStarted < numProcs * 3) {
|
||||
Loader.timesStarted += 1;
|
||||
if (Loader.crashTimer) {
|
||||
clearTimeout(Loader.crashTimer);
|
||||
}
|
||||
Loader.crashTimer = setTimeout(() => {
|
||||
Loader.timesStarted = 0;
|
||||
}, 10000);
|
||||
} else {
|
||||
console.log(`${numProcs * 3} restarts in 10 seconds, most likely an error on startup. Halting.`);
|
||||
process.exit();
|
||||
}
|
||||
}
|
||||
|
||||
console.log(`[cluster] Child Process (${worker.pid}) has exited (code: ${code}, signal: ${signal})`);
|
||||
if (!(worker.suicide || code === 0)) {
|
||||
console.log('[cluster] Spinning up another process...');
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
The files here are read-only and overwritten daily (if there are changes) by the
|
||||
helper bot [Misty](https://github.com/nodebb-misty).
|
||||
|
||||
Our localisation efforts are handled via [our Transifex Project](https://explore.transifex.com/nodebb/nodebb/),
|
||||
Our localisation efforts are handled via [our Transifex Project](https://www.transifex.com/nodebb/nodebb/),
|
||||
and any pull requests made to this directory will be automatically closed because
|
||||
localisations can go out-of-sync when edited directly.
|
||||
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
# The files here are not meant to be edited directly
|
||||
|
||||
Please see the → [Internalization README](../README.md).
|
||||
@@ -4,6 +4,8 @@
|
||||
|
||||
"acp-title": "لوحة تحكم إدارة NodeBB | %1",
|
||||
"settings-header-contents": "محتويات",
|
||||
"changes-not-saved": "لم يتم حفظ التغييرات",
|
||||
"changes-not-saved-message": "حدثت مشكلة أثناء حفظ التغييرات في NodeBB. (%1)"
|
||||
"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 encountered a problem saving your changes. (%1)"
|
||||
}
|
||||
@@ -1,8 +1,5 @@
|
||||
{
|
||||
"post-cache": "التخزين المؤقت للمشاركات",
|
||||
"group-cache": "التخزين المؤقت للمجموعات",
|
||||
"local-cache": "تخزين مؤقت محلي",
|
||||
"object-cache": "تخزين مؤقت للأشياء",
|
||||
"percent-full": "1% كاملة",
|
||||
"post-cache-size": "حجم التخزين المؤقت للمشاركات",
|
||||
"items-in-cache": "العناصر في التخزين المؤقت"
|
||||
|
||||
@@ -1,52 +1,52 @@
|
||||
{
|
||||
"x-b": "٪1 بايت",
|
||||
"x-mb": "٪1 ميقا بايت",
|
||||
"x-gb": "٪1 قيقا بايت",
|
||||
"uptime-seconds": "مدة التشغيل بالثواني",
|
||||
"uptime-days": "مدة التشغيل بالأيام",
|
||||
"x-b": "%1 b",
|
||||
"x-mb": "%1 mb",
|
||||
"x-gb": "%1 gb",
|
||||
"uptime-seconds": "Uptime in Seconds",
|
||||
"uptime-days": "Uptime in Days",
|
||||
|
||||
"mongo": "Mongo",
|
||||
"mongo.version": "اصدار MongoDB",
|
||||
"mongo.storage-engine": "محرك التخزين",
|
||||
"mongo.collections": "التجميعات",
|
||||
"mongo.objects": "العناصر",
|
||||
"mongo.avg-object-size": "معدل حجم العناصر",
|
||||
"mongo.data-size": "حجم البيانات",
|
||||
"mongo.storage-size": "حجم التخرين",
|
||||
"mongo.index-size": "حجم الفهرس",
|
||||
"mongo.file-size": "حجم الملف",
|
||||
"mongo.resident-memory": "الذاكرة الساكنة",
|
||||
"mongo.version": "MongoDB Version",
|
||||
"mongo.storage-engine": "Storage Engine",
|
||||
"mongo.collections": "Collections",
|
||||
"mongo.objects": "Objects",
|
||||
"mongo.avg-object-size": "Avg. Object Size",
|
||||
"mongo.data-size": "Data Size",
|
||||
"mongo.storage-size": "Storage Size",
|
||||
"mongo.index-size": "Index Size",
|
||||
"mongo.file-size": "File Size",
|
||||
"mongo.resident-memory": "Resident Memory",
|
||||
"mongo.virtual-memory": "الذاكرة الإفتراضية",
|
||||
"mongo.mapped-memory": "الذاكرة المعينة",
|
||||
"mongo.bytes-in": "البايتات الواردة",
|
||||
"mongo.bytes-out": "البايتات الصادرة",
|
||||
"mongo.num-requests": "عدد الطلبات",
|
||||
"mongo.raw-info": "معلومات MongoDB الأولية",
|
||||
"mongo.unauthorized": "لم يستطع NodeBB من الاستعلام عن احصاءات قواعد البيانات ل MongoDB. الرجاء التأكد من أن المستخدم في NodeBB يحتوي على دور "clusterMonitor" ال "admin" لقواعد البيانات.",
|
||||
"mongo.mapped-memory": "Mapped Memory",
|
||||
"mongo.bytes-in": "Bytes In",
|
||||
"mongo.bytes-out": "Bytes Out",
|
||||
"mongo.num-requests": "Number of Requests",
|
||||
"mongo.raw-info": "MongoDB Raw Info",
|
||||
"mongo.unauthorized": "NodeBB was unable to query the MongoDB database for relevant statistics. Please ensure that the user in use by NodeBB contains the "clusterMonitor" role for the "admin" database.",
|
||||
|
||||
"redis": "Redis",
|
||||
"redis.version": "إصدار Redis",
|
||||
"redis.keys": "المفاتيح",
|
||||
"redis.expires": "ينتهي ",
|
||||
"redis.avg-ttl": "متوسط وقت الانعاش",
|
||||
"redis.connected-clients": "العميل المتصل",
|
||||
"redis.connected-slaves": "البدلاء المتصلين",
|
||||
"redis.blocked-clients": "العملاء المحظورون",
|
||||
"redis.version": "Redis Version",
|
||||
"redis.keys": "Keys",
|
||||
"redis.expires": "Expires",
|
||||
"redis.avg-ttl": "Average TTL",
|
||||
"redis.connected-clients": "Connected Clients",
|
||||
"redis.connected-slaves": "Connected Slaves",
|
||||
"redis.blocked-clients": "Blocked Clients",
|
||||
"redis.used-memory": "الذاكرة المستخدمة",
|
||||
"redis.memory-frag-ratio": "نسبة تجزئة الذاكرة",
|
||||
"redis.memory-frag-ratio": "Memory Fragmentation Ratio",
|
||||
"redis.total-connections-recieved": "إجمالي الاتصالات المستلمة",
|
||||
"redis.total-commands-processed": "إجمالي الأوامر التي تمت معالجتها",
|
||||
"redis.iops": "العمليات اللحظية في الثانية",
|
||||
"redis.iinput": "الإدخال الفوري في الثانية",
|
||||
"redis.ioutput": "المخرجات الفورية في الثانية",
|
||||
"redis.total-input": "مجموع المدخلات",
|
||||
"redis.total-output": "مجموع المخرجات",
|
||||
"redis.iops": "Instantaneous Ops. Per Second",
|
||||
"redis.iinput": "Instantaneous Input Per Second",
|
||||
"redis.ioutput": "Instantaneous Output Per Second",
|
||||
"redis.total-input": "Total Input",
|
||||
"redis.total-output": "Total Ouput",
|
||||
|
||||
"redis.keyspace-hits": "المفاتيح المضغوطة",
|
||||
"redis.keyspace-misses": "المفاتيح المخفقة",
|
||||
"redis.raw-info": "معلومات Redis الأولية",
|
||||
"redis.keyspace-hits": "Keyspace Hits",
|
||||
"redis.keyspace-misses": "Keyspace Misses",
|
||||
"redis.raw-info": "Redis Raw Info",
|
||||
|
||||
"postgres": "Postgres",
|
||||
"postgres.version": "إصدار PostgreSQL",
|
||||
"postgres.raw-info": "معلومات Postgres الأولية"
|
||||
"postgres.version": "PostgreSQL Version",
|
||||
"postgres.raw-info": "Postgres Raw Info"
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"no-events": "لا توجد أحداث",
|
||||
"control-panel": "لوحة تحكم الأحداث",
|
||||
"delete-events": "حذف الاحداث",
|
||||
"confirm-delete-all-events": "هل أنت متاكد أنك تريد حذف كل سجل اﻻحداث؟",
|
||||
"confirm-delete-all-events": "Are you sure you want to delete all logged events?",
|
||||
"filters": "تصفية",
|
||||
"filters-apply": "تطبيق التصفية",
|
||||
"filter-type": "نوع الحدث",
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
{
|
||||
"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.enable": "Enable Custom CSS/SASS",
|
||||
"custom-css": "Custom CSS/LESS",
|
||||
"custom-css.description": "Enter your own CSS/LESS declarations here, which will be applied after all other styles.",
|
||||
"custom-css.enable": "Enable Custom CSS/LESS",
|
||||
|
||||
"custom-js": "Javascript مخصصة",
|
||||
"custom-js.description": "أدخل Javascript الخاص بك هنا. سيتم تنفيذها بعد تحميل الصفحة بالكامل.",
|
||||
"custom-js.enable": "تفعيل Javascript المخصصة",
|
||||
|
||||
"custom-header": "ترويسة مخصصة",
|
||||
"custom-header.description": "أدخل وسوم HTML المخصصة هنا (مثل: Meta Tags, وغيرها)، والتي سيتم تضمينها لجزئية <code><head></code> من ترميز المنتدى. يُسمح بعلامات البرمجة النصية، ولكن لا يُنصح بها ، نظرًا لأن علامة التبويب <a href=\"#custom-js\" data-toggle=\"tab\"> Custom Javascript </a> متاحة.",
|
||||
"custom-header.description": "Enter custom HTML here (ex. Meta Tags, etc.), which will be appended to the <code><head></code> section of your forum's markup. Script tags are allowed, but are discouraged, as the <a href=\"#custom-js\" data-toggle=\"tab\">Custom Javascript</a> tab is available.",
|
||||
"custom-header.enable": "تفعيل الترويسة المخصصة",
|
||||
|
||||
"custom-css.livereload": "تفعيل إعادة التحميل المباشرة",
|
||||
|
||||
@@ -7,5 +7,5 @@
|
||||
"revert-confirm": "هل أنت متأكد من أنك ترغب في استعادة قااب NodeBB الافتراضي؟",
|
||||
"theme-changed": "تم تغيير القالب",
|
||||
"revert-success": "لقد قمت بنجاح بإستعادة القالب الأساسي لـNodeBB",
|
||||
"restart-to-activate": "يرجى إعادة بناء وإعادة تشغيل NodeBB لتنشيط هذا الثيم."
|
||||
"restart-to-activate": "Please rebuild and restart your NodeBB to fully activate this theme."
|
||||
}
|
||||
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"forum-traffic": "حركة المنتدى",
|
||||
"forum-traffic": "Forum Traffic",
|
||||
"page-views": "مشاهدات الصفحات",
|
||||
"unique-visitors": "زائرين فريدين",
|
||||
"logins": "عمليات تسجيل الدخول",
|
||||
"new-users": "مستخدم جديد",
|
||||
"logins": "Logins",
|
||||
"new-users": "New Users",
|
||||
"posts": "مشاركات",
|
||||
"topics": "مواضيع",
|
||||
"page-views-seven": "آخر 7 ايام",
|
||||
@@ -15,24 +15,24 @@
|
||||
"page-views-custom-help": "أدخل نطاقا زمنيا لمرات مشاهدة الصفحات التي ترغب في عرضها. إذا لم يظهر منتقي التاريخ، فإن التنسيق المقبول هو <code>YYYY-MM-DD</code>",
|
||||
"page-views-custom-error": "الرجاء إدخال نطاق تاريخ صالح بالتنسيق <code>YYYY-MM-DD</code>",
|
||||
|
||||
"stats.yesterday": "الأمس",
|
||||
"stats.today": "اليوم",
|
||||
"stats.last-week": "الاسبوع الماضي",
|
||||
"stats.this-week": "هذا الاسبوع",
|
||||
"stats.last-month": "الشهر الماضي",
|
||||
"stats.this-month": "هذا الشهر",
|
||||
"stats.yesterday": "Yesterday",
|
||||
"stats.today": "Today",
|
||||
"stats.last-week": "Last Week",
|
||||
"stats.this-week": "This Week",
|
||||
"stats.last-month": "Last Month",
|
||||
"stats.this-month": "This Month",
|
||||
"stats.all": "كل الوقت",
|
||||
|
||||
"updates": "تحديثات",
|
||||
"running-version": "المنتدى يعمل حاليا على <strong>NodeBB الإصدار<span id=\"version\">%1</span></strong>.",
|
||||
"keep-updated": "تأكد دائما من أن NodeBB يعمل على احدث إصدار للحصول على أحدث التصحيحات الأمنية وإصلاحات الأخطاء.",
|
||||
"up-to-date": "<p>المنتدى <strong>يعمل على أحدث إصدار</strong> <i class=\"fa fa-check\"></i></p>",
|
||||
"upgrade-available": "<p> هناك إصدار جديد برقم (v%1). خذ بعين الاعتبار <a href=\"https://docs.nodebb.org/configuring/upgrade/\" target=\"_blank\"> ترقية NodeBB </a>.</p>",
|
||||
"prerelease-upgrade-available": "<p>هذا إصدار منتهي من الاصدارات المسبقة من NodeBB. هناك إصدار جديد برقم (v٪ 1). ضع في اعتبارك <a href=\"https://docs.nodebb.org/configuring/upgrade/\" target=\"_blank\">ترقية NodeBB إليه</a>.</p>",
|
||||
"upgrade-available": "<p>A new version (v%1) has been released. Consider <a href=\"https://docs.nodebb.org/configuring/upgrade/\" target=\"_blank\">upgrading your NodeBB</a>.</p>",
|
||||
"prerelease-upgrade-available": "<p>This is an outdated pre-release version of NodeBB. A new version (v%1) has been released. Consider <a href=\"https://docs.nodebb.org/configuring/upgrade/\" target=\"_blank\">upgrading your NodeBB</a>.</p>",
|
||||
"prerelease-warning": "<p>هذه نسخة <strong>ماقبل الإصدار</strong> من NodeBB. قد تحدث أخطاء غير مقصودة. <i class=\"fa fa-exclamation-triangle\"></i></p>",
|
||||
"fallback-emailer-not-found": "مرسل البريد الإلكتروني الاحتياطي غير موجود!",
|
||||
"fallback-emailer-not-found": "Fallback emailer not found!",
|
||||
"running-in-development": "المنتدى قيد التشغيل في وضع \"المطورين\". وقد تكون هناك ثغرات أمنية مفتوحة؛ من فضلك تواصل مع مسؤول نظامك.",
|
||||
"latest-lookup-failed": "<p>فشل البحث عن أحدث إصدار متوفر من NodeBB</p>",
|
||||
"latest-lookup-failed": "<p>Failed to look up latest available version of NodeBB</p>",
|
||||
|
||||
"notices": "إشعارات",
|
||||
"restart-not-required": "إعادة التشغيل غير مطلوب",
|
||||
@@ -42,10 +42,10 @@
|
||||
"search-plugin-tooltip": "نصب إضافة البحث من صفحة الإضافات البرمجية لتنشيط وظيفة البحث",
|
||||
|
||||
"control-panel": "التحكم بالنظام",
|
||||
"rebuild-and-restart": "أعد البناء & وأعد التشغيل",
|
||||
"restart": "أعد التشغيل",
|
||||
"restart-warning": "ستؤدي إعادة بناء أو إعادة تشغيل NodeBB إلى إنقطاع الاتصال بالمنتدى لبضع ثوان.",
|
||||
"restart-disabled": "تم تعطيل إعادة بناء NodeBB وإعادة تشغيله حيث لا يبدو أنك تقوم بتشغيله عبر البرنامج الخفي المناسب.",
|
||||
"rebuild-and-restart": "Rebuild & Restart",
|
||||
"restart": "Restart",
|
||||
"restart-warning": "Rebuilding or Restarting your NodeBB will drop all existing connections for a few seconds.",
|
||||
"restart-disabled": "Rebuilding and Restarting your NodeBB has been disabled as you do not seem to be running it via the appropriate daemon.",
|
||||
"maintenance-mode": "وضع الصيانة",
|
||||
"maintenance-mode-title": "انقر هنا لإعداد وضع الصيانة لـNodeBB",
|
||||
"realtime-chart-updates": "التحديث الفوري للرسم البياني",
|
||||
@@ -54,10 +54,10 @@
|
||||
"active-users.users": "الأعضاء",
|
||||
"active-users.guests": "الزوار",
|
||||
"active-users.total": "المجموع",
|
||||
"active-users.connections": "روابط الاتصال",
|
||||
"active-users.connections": "Connections",
|
||||
|
||||
"guest-registered-users": "الزائر مقابل المستخدمين المسجلين",
|
||||
"guest": "الزائر",
|
||||
"guest-registered-users": "Guest vs Registered Users",
|
||||
"guest": "Guest",
|
||||
"registered": "مسجل",
|
||||
|
||||
"user-presence": "تواجد المستخدمين",
|
||||
@@ -68,26 +68,23 @@
|
||||
"unread": "غير مقروء",
|
||||
|
||||
"high-presence-topics": "مواضيع ذات حضور قوي",
|
||||
"popular-searches": "عمليات البحث الشائعة",
|
||||
"popular-searches": "Popular Searches",
|
||||
|
||||
"graphs.page-views": "مشاهدات الصفحة",
|
||||
"graphs.page-views-registered": "زيارات الصفحات المسجلة",
|
||||
"graphs.page-views-guest": "زيارات الصفحات للزوار",
|
||||
"graphs.page-views-bot": "زيارات الصفحات الآلية",
|
||||
"graphs.page-views-registered": "Page Views Registered",
|
||||
"graphs.page-views-guest": "Page Views Guest",
|
||||
"graphs.page-views-bot": "Page Views Bot",
|
||||
"graphs.unique-visitors": "زوار فريدين",
|
||||
"graphs.registered-users": "مستخدمين مسجلين",
|
||||
"graphs.guest-users": "المستخدمين الزوار",
|
||||
"last-restarted-by": "آخر إعادة تشغيل بواسطة",
|
||||
"no-users-browsing": "لا يوجد مستخدمين يتصفحون",
|
||||
"graphs.guest-users": "Guest Users",
|
||||
"last-restarted-by": "Last restarted by",
|
||||
"no-users-browsing": "No users browsing",
|
||||
|
||||
"back-to-dashboard": "العودة للوحة التحكم",
|
||||
"details.no-users": "لم ينضم أي مستخدم خلال الإطار الزمني المحدد",
|
||||
"details.no-topics": "لم يتم نشر أي مواضيع خلال الإطار الزمني المحدد",
|
||||
"details.no-searches": "لم يتم إجراء أي بحث خلال الإطار الزمني المحدد",
|
||||
"details.no-logins": "لم يوثق أي تسجيل دخول خلال الإطار الزمني المحدد",
|
||||
"details.logins-static": "يقوم NodeBB بحفظ بيانات الجلسة لمدة ٪1 يوم/أيام فقط، ولذا فإن هذا الجدول أدناه سيعرض فقط أحدث الجلسات النشطة",
|
||||
"details.logins-login-time": "وقت تسجيل الدخول",
|
||||
"start": "بدء",
|
||||
"end": "إنهاء",
|
||||
"filter": "تصفية"
|
||||
"back-to-dashboard": "Back to Dashboard",
|
||||
"details.no-users": "No users have joined within the selected timeframe",
|
||||
"details.no-topics": "No topics have been posted within the selected timeframe",
|
||||
"details.no-searches": "No searches have been made yet",
|
||||
"details.no-logins": "No logins have been recorded within the selected timeframe",
|
||||
"details.logins-static": "NodeBB only saves session data for %1 days, and so this table below will only show the most recently active sessions",
|
||||
"details.logins-login-time": "Login Time"
|
||||
}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"you-are-on": "أنت في <strong> %1:%2 </strong>",
|
||||
"ip": "رقم الآي بي <strong> %1 </strong>",
|
||||
"nodes-responded": "عدد %1 نقطة/نقاط استجابوا خلال %2 جزء من الثانية.",
|
||||
"host": "المضيف",
|
||||
"you-are-on": "You are on <strong>%1:%2</strong>",
|
||||
"ip": "IP <strong>%1</strong>",
|
||||
"nodes-responded": "%1 nodes responded within %2ms!",
|
||||
"host": "host",
|
||||
"primary": "primary / run jobs",
|
||||
"pid": "pid",
|
||||
"nodejs": "nodejs",
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"logger-settings": "إعدادات المسجِّل",
|
||||
"description": "من خلال تمكين مربعات الاختيار ، ستتلقى سجلات إلى جهازك الطرفي. إذا حددت مسارًا ، فسيتم بعد ذلك حفظ السجلات في ملف بدلاً من ذلك. يعد تسجيل HTTP مفيدًا لجمع الإحصائيات حول من ومتى وماذا يصل الأشخاص في المنتدى. بالإضافة إلى تسجيل طلبات HTTP ، يمكننا أيضًا تسجيل أحداث socket.io. يمكن أن يكون تسجيل Socket.io ، جنبًا إلى جنب مع شاشة redis-cli ، مفيدًا جدًا في تعلم العناصر الداخلية لـ NodeBB.",
|
||||
"explanation": "ما عليك سوى تحديدأو/ إلغاء تحديد إعدادات التسجيل لتمكين أو تعطيل التسجيل أثناء التنقل. لا حاجة لإعادة التشغيل.",
|
||||
"enable-http": "تمكين سجلات HTTP",
|
||||
"enable-socket": "تفعيل تسجيل أحداث socket.io",
|
||||
"file-path": "مسار ملف السجل",
|
||||
"file-path-placeholder": "/path/to/log/file.log ::: اتركه فارغا لاظهار السجلات لنافذة الطرفية",
|
||||
"logger-settings": "Logger Settings",
|
||||
"description": "By enabling the check boxes, you will receive logs to your terminal. If you specify a path, logs will then be saved to a file instead. HTTP logging is useful for collecting statistics about who, when, and what people access on your forum. In addition to logging HTTP requests, we can also log socket.io events. Socket.io logging, in combination with redis-cli monitor, can be very helpful for learning NodeBB's internals.",
|
||||
"explanation": "Simply check/uncheck the logging settings to enable or disable logging on the fly. No restart needed.",
|
||||
"enable-http": "Enable HTTP logging",
|
||||
"enable-socket": "Enable socket.io event logging",
|
||||
"file-path": "Path to log file",
|
||||
"file-path-placeholder": "/path/to/log/file.log ::: leave blank to log to your terminal",
|
||||
|
||||
"control-panel": "لوحة تحكم المسجل",
|
||||
"update-settings": "تحديث إعدادات المسجل"
|
||||
"control-panel": "Logger Control Panel",
|
||||
"update-settings": "Update Logger Settings"
|
||||
}
|
||||
@@ -1,15 +1,15 @@
|
||||
{
|
||||
"rewards": "المكافآت",
|
||||
"condition-if-users": "إذا كان للمستخدم",
|
||||
"condition-is": "يكون: ",
|
||||
"condition-then": "عندئذ:",
|
||||
"max-claims": "عدد المرات التي يمكن فيها المطالبة بالمكافأة",
|
||||
"zero-infinite": "أدخل 0 للقيمة اللانهائية",
|
||||
"delete": "احذف",
|
||||
"enable": "مكّن",
|
||||
"disable": "عطّل",
|
||||
"rewards": "Rewards",
|
||||
"condition-if-users": "If User's",
|
||||
"condition-is": "Is:",
|
||||
"condition-then": "Then:",
|
||||
"max-claims": "Amount of times reward is claimable",
|
||||
"zero-infinite": "Enter 0 for infinite",
|
||||
"delete": "Delete",
|
||||
"enable": "Enable",
|
||||
"disable": "Disable",
|
||||
|
||||
"alert.delete-success": "المكافآت المحذوفة بنجاح",
|
||||
"alert.no-inputs-found": "مكافأة غير قانونية - لم يتم العثور على مدخلات!",
|
||||
"alert.save-success": "المكافآت المحفوظة بنجاح"
|
||||
"alert.delete-success": "Successfully deleted reward",
|
||||
"alert.no-inputs-found": "Illegal reward - no inputs found!",
|
||||
"alert.save-success": "Successfully saved rewards"
|
||||
}
|
||||
@@ -8,9 +8,9 @@
|
||||
"containers.none": "None",
|
||||
"container.well": "Well",
|
||||
"container.jumbotron": "Jumbotron",
|
||||
"container.card": "Card",
|
||||
"container.card-header": "Card Header",
|
||||
"container.card-body": "Card Body",
|
||||
"container.panel": "Panel",
|
||||
"container.panel-header": "Panel Header",
|
||||
"container.panel-body": "Panel Body",
|
||||
"container.alert": "Alert",
|
||||
|
||||
"alert.confirm-delete": "Are you sure you wish to delete this widget?",
|
||||
@@ -26,7 +26,5 @@
|
||||
"container.placeholder": "Drag and drop a container or enter HTML here.",
|
||||
"show-to-groups": "Show to groups",
|
||||
"hide-from-groups": "Hide from groups",
|
||||
"start-date": "Start date",
|
||||
"end-date": "End date",
|
||||
"hide-on-mobile": "Hide on mobile"
|
||||
}
|
||||
@@ -1,10 +1,8 @@
|
||||
{
|
||||
"administrators": "Administrators",
|
||||
"global-moderators": "Global Moderators",
|
||||
"moderators": "Moderators",
|
||||
"no-global-moderators": "No Global Moderators",
|
||||
"no-sub-categories": "No subcategories",
|
||||
"subcategories": "%1 subcategories",
|
||||
"moderators-of-category": "%1 Moderators",
|
||||
"no-moderators": "No Moderators",
|
||||
"add-administrator": "Add Administrator",
|
||||
"add-global-moderator": "Add Global Moderator",
|
||||
|
||||
@@ -39,5 +39,6 @@
|
||||
"revert": "Revert",
|
||||
|
||||
"edit.no-users-found": "No Users Found",
|
||||
"edit.confirm-remove-user": "Are you sure you want to remove this user?"
|
||||
"edit.confirm-remove-user": "Are you sure you want to remove this user?",
|
||||
"edit.save-success": "Changes saved!"
|
||||
}
|
||||
@@ -49,6 +49,7 @@
|
||||
"alert.confirm-moderate": "<strong>Are you sure you wish to grant the moderation privilege to this user group?</strong> This group is public, and any users can join at will.",
|
||||
"alert.confirm-admins-mods": "<strong>Are you sure you wish to grant the "Admins & Mods" privilege to this user/group?</strong> Users with this privilege are able to promote and demote other users into privileged positions, <em>including super administrator</em>",
|
||||
"alert.confirm-save": "Please confirm your intention to save these privileges",
|
||||
"alert.saved": "Privilege changes saved and applied",
|
||||
"alert.confirm-discard": "Are you sure you wish to discard your privilege changes?",
|
||||
"alert.discarded": "Privilege changes discarded",
|
||||
"alert.confirm-copyToAll": "Are you sure you wish to apply this set of <strong>%1</strong> to <strong>all categories</strong>?",
|
||||
|
||||
@@ -1,20 +1,20 @@
|
||||
{
|
||||
"queue": "الطابور",
|
||||
"queue": "Queue",
|
||||
"description": "There are no users in the registration queue. <br> To enable this feature, go to <a href=\"%1\">Settings → User → User Registration</a> and set <strong>Registration Type</strong> to \"Admin Approval\".",
|
||||
|
||||
"list.name": "اﻹسم",
|
||||
"list.email": "البريد الإلكتروني",
|
||||
"list.name": "Name",
|
||||
"list.email": "Email",
|
||||
"list.ip": "IP",
|
||||
"list.time": "التوقيت",
|
||||
"list.time": "Time",
|
||||
"list.username-spam": "Frequency: %1 Appears: %2 Confidence: %3",
|
||||
"list.email-spam": "Frequency: %1 Appears: %2",
|
||||
"list.ip-spam": "Frequency: %1 Appears: %2",
|
||||
|
||||
"invitations": "الدعوات",
|
||||
"invitations": "Invitations",
|
||||
"invitations.description": "Below is a complete list of invitations sent. Use ctrl-f to search through the list by email or username. <br><br>The username will be displayed to the right of the emails for users who have redeemed their invitations.",
|
||||
"invitations.inviter-username": "أسم المستخدم الداعي",
|
||||
"invitations.invitee-email": "البريد اﻻلكتروني للمدعو",
|
||||
"invitations.invitee-username": "اسم المستخم للمدعو (اذا كان مسجل)",
|
||||
"invitations.inviter-username": "Inviter Username",
|
||||
"invitations.invitee-email": "Invitee Email",
|
||||
"invitations.invitee-username": "Invitee Username (if registered)",
|
||||
|
||||
"invitations.confirm-delete": "هل أنت متأكد من أنك تريد حذف هذه الدعوة؟"
|
||||
"invitations.confirm-delete": "Are you sure you wish to delete this invitation?"
|
||||
}
|
||||
@@ -91,7 +91,6 @@
|
||||
"alerts.validate-email-success": "Emails validated",
|
||||
"alerts.validate-force-password-reset-success": "User(s) passwords have been reset and their existing sessions have been revoked.",
|
||||
"alerts.password-reset-confirm": "Do you want to send password reset email(s) to these user(s)?",
|
||||
"alerts.password-reset-email-sent": "Password reset email sent.",
|
||||
"alerts.confirm-delete": "<strong>Warning!</strong><p>Do you really want to delete <strong>user(s)</strong>?</p><p>This action is not reversible! Only the user account will be deleted, their posts and topics will remain.</p>",
|
||||
"alerts.delete-success": "User(s) Deleted!",
|
||||
"alerts.confirm-delete-content": "<strong>Warning!</strong><p>Do you really want to delete these user(s) <strong>content</strong>?</p><p>This action is not reversible! The users' accounts will remain, but their posts and topics will be deleted.</p>",
|
||||
|
||||
@@ -76,7 +76,7 @@
|
||||
"logout": "Log out",
|
||||
"view-forum": "View Forum",
|
||||
|
||||
"search.placeholder": "Search settings",
|
||||
"search.placeholder": "Press "/" to search for settings",
|
||||
"search.no-results": "No results...",
|
||||
"search.search-forum": "Search the forum for <strong></strong>",
|
||||
"search.keep-typing": "Type more to see results...",
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
"maintenance-mode.help": "When the forum is in maintenance mode, all requests will be redirected to a static holding page. Administrators are exempt from this redirection, and are able to access the site normally.",
|
||||
"maintenance-mode.status": "Maintenance Mode Status Code",
|
||||
"maintenance-mode.message": "Maintenance Message",
|
||||
"maintenance-mode.groups-exempt-from-maintenance-mode": "Select groups that should be exempt from maintenance mode",
|
||||
"headers": "Headers",
|
||||
"headers.allow-from": "Set ALLOW-FROM to Place NodeBB in an iFrame",
|
||||
"headers.csp-frame-ancestors": "Set Content-Security-Policy frame-ancestors header to Place NodeBB in an iFrame",
|
||||
@@ -18,10 +17,7 @@
|
||||
"headers.acah": "Access-Control-Allow-Headers",
|
||||
"headers.coep": "Cross-Origin-Embedder-Policy",
|
||||
"headers.coep-help": "When enabled (default), will set the header to <code>require-corp</code>",
|
||||
"headers.coop": "Cross-Origin-Opener-Policy",
|
||||
"headers.corp": "Cross-Origin-Resource-Policy",
|
||||
"headers.permissions-policy": "Permissions-Policy",
|
||||
"headers.permissions-policy-help": "Allows setting permissions policy header, for example \"geolocation=*, camera=()\", see <a href=\"https://github.com/w3c/webappsec-permissions-policy/blob/main/permissions-policy-explainer.md\">this</a> for more info.",
|
||||
"hsts": "Strict Transport Security",
|
||||
"hsts.enabled": "Enabled HSTS (recommended)",
|
||||
"hsts.maxAge": "HSTS Max Age",
|
||||
|
||||
@@ -3,25 +3,14 @@
|
||||
"settings": "Settings",
|
||||
"lead-text": "From this page you can configure access to the Write API in NodeBB.",
|
||||
"intro": "By default, the Write API authenticates users based on their session cookie, but NodeBB also supports Bearer authentication via tokens generated via this page.",
|
||||
"warning": "<strong>Be advised</strong> — treat tokens like passwords. If they are leaked, your account should be considered compromised.",
|
||||
"docs": "Click here to access the full API specification",
|
||||
|
||||
"require-https": "Require API usage via HTTPS only",
|
||||
"require-https-caveat": "<strong>Note</strong>: Some installations involving load balancers may proxy their requests to NodeBB using HTTP, in which case this option should remain disabled.",
|
||||
|
||||
"uid": "User ID",
|
||||
"token": "Token",
|
||||
"uid-help-text": "Specify a User ID to associate with this token. If the user ID is <code>0</code>, it will be considered a <em>master</em> token, which can assume the identity of other users based on the <code>_uid</code> parameter",
|
||||
"description": "Description",
|
||||
"last-seen": "Last seen",
|
||||
"created": "Created",
|
||||
"create-token": "Create Token",
|
||||
"update-token": "Update Token",
|
||||
"master-token": "Master token",
|
||||
"last-seen-never": "This key has never been used.",
|
||||
"no-description": "No description specified.",
|
||||
"actions": "Actions",
|
||||
|
||||
"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."
|
||||
"token-on-save": "Token will be generated once form is saved"
|
||||
}
|
||||
@@ -5,18 +5,14 @@
|
||||
"from": "From Name",
|
||||
"from-help": "The from name to display in the email.",
|
||||
|
||||
"confirmation-settings": "Confirmation",
|
||||
"confirmation.expiry": "Hours to keep email confirmation link valid",
|
||||
|
||||
"smtp-transport": "SMTP Transport",
|
||||
"smtp-transport.enabled": "Enable SMTP Transport",
|
||||
"smtp-transport-help": "You can select from a list of well-known services or enter a custom one.",
|
||||
"smtp-transport.service": "Select a service",
|
||||
"smtp-transport.service-custom": "Custom Service",
|
||||
"smtp-transport.service-help": "Select a service name above in order to use the known information about it. Alternatively, select "Custom Service" and enter the details below.",
|
||||
"smtp-transport.gmail-warning1": "If you are using GMail as your email provider, you will have to generate an "App Password" in order for NodeBB to authenticate successfully. You can generate one at the <a href=\"https://myaccount.google.com/apppasswords\">App Passwords <i class=\"fa fa-external-link\"></i></a> page.",
|
||||
"smtp-transport.gmail-warning2": "For more information about this workaround, <a href=\"https://nodemailer.com/usage/using-gmail/\">please consult this NodeMailer article <i class=\"fa fa-external-link\"></i></a> on the issue. An alternative would be to utilise a third-party emailer plugin such as SendGrid, Mailgun, etc. <a href=\"../extend/plugins\">Browse available plugins here</a>.",
|
||||
"smtp-transport.auto-enable-toast": "It looks like you're configuring an SMTP transport. We enabled the \"SMTP Transport\" option for you.",
|
||||
"smtp-transport.service-help": "Select a service name above in order to use the known information about it. Alternatively, select 'Custom Service' and enter the details below.",
|
||||
"smtp-transport.gmail-warning1": "There have been reports of the Gmail service not working on accounts with heightened security. In those scenarios, you will have to <a href=\"https://www.google.com/settings/security/lesssecureapps\">configure your GMail account to allow less secure apps</a>.",
|
||||
"smtp-transport.gmail-warning2": "For more information about this workaround, <a href=\"https://nodemailer.com/usage/using-gmail/\">please consult this NodeMailer article on the issue.</a> An alternative would be to utilise a third-party emailer plugin such as SendGrid, Mailgun, etc. <a href=\"../extend/plugins\">Browse available plugins here</a>.",
|
||||
"smtp-transport.host": "SMTP Host",
|
||||
"smtp-transport.port": "SMTP Port",
|
||||
"smtp-transport.security": "Connection security",
|
||||
@@ -42,7 +38,7 @@
|
||||
"subscriptions.hour-help": "Please enter a number representing the hour to send scheduled email digests (e.g. <code>0</code> for midnight, <code>17</code> for 5:00pm). Keep in mind that this is the hour according to the server itself, and may not exactly match your system clock.<br /> The approximate server time is: <span id=\"serverTime\"></span><br /> The next daily digest is scheduled to be sent <span id=\"nextDigestTime\"></span>",
|
||||
"notifications.remove-images": "Remove images from email notifications",
|
||||
"require-email-address": "Require new users to specify an email address",
|
||||
"require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means new users will have to enter <strong>and confirm</strong> an email address in order to proceed with registration and subsequent access to the forum. <strong>It does not ensure user will enter a real email address, nor even an address they own.</strong>",
|
||||
"require-email-address-warning": "By default, users can opt-out of entering an email address by leaving the field blank. Enabling this option means they have to enter an email address in order to proceed with registration. <strong>It does not ensure user will enter a real email address, nor even an address they own.</strong>",
|
||||
"send-validation-email": "Send validation emails when an email is added or changed",
|
||||
"include-unverified-emails": "Send emails to recipients who have not explicitly confirmed their emails",
|
||||
"include-unverified-warning": "By default, users with emails associated with their account have already been verified, but there are situations where this is not the case (e.g. SSO logins, grandfathered users, etc). <strong>Enable this setting at your own risk</strong> – sending emails to unverified addresses may be a violation of regional anti-spam laws.",
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
"groups": "Groups:",
|
||||
"open-new-window": "Open in a new window",
|
||||
"dropdown": "Dropdown",
|
||||
"dropdown-placeholder": "Place your dropdown menu items below, ie: <br/><li><a class="dropdown-item" href="https://myforum.com">Link 1</a></li>",
|
||||
"dropdown-placeholder": "Place your dropdown menu items below, ie: <br/><li><a href="https://myforum.com">Link 1</a></li>",
|
||||
|
||||
"btn.delete": "Delete",
|
||||
"btn.disable": "Disable",
|
||||
|
||||
@@ -51,7 +51,6 @@
|
||||
"signature.disable": "Disable signatures",
|
||||
"signature.no-links": "Disable links in signatures",
|
||||
"signature.no-images": "Disable images in signatures",
|
||||
"signature.hide-duplicates": "Hide duplicate signatures in topics",
|
||||
"signature.max-length": "Maximum Signature Length",
|
||||
"composer": "Composer Settings",
|
||||
"composer-help": "The following settings govern the functionality and/or appearance of the post composer shown\n\t\t\t\tto users when they create new topics, or reply to existing topics.",
|
||||
|
||||
@@ -23,9 +23,5 @@
|
||||
"flags.limit-per-target-placeholder": "Default: 0",
|
||||
"flags.limit-per-target-help": "When a post or user is flagged multiple times, each additional flag is considered a "report" and added to the original flag. Set this option to a number other than zero to limit the number of reports an item can receive.",
|
||||
"flags.auto-flag-on-downvote-threshold": "Number of downvotes to auto flag posts (Set to 0 to disable, default: 0)",
|
||||
"flags.auto-resolve-on-ban": "Automatically resolve all of a user's tickets when they are banned",
|
||||
"flags.action-on-resolve": "Do the following when a flag is resolved",
|
||||
"flags.action-on-reject": "Do the following when a flag is rejected",
|
||||
"flags.action.nothing": "Do nothing",
|
||||
"flags.action.rescind": "Rescind the notification send to moderators/administrators"
|
||||
"flags.auto-resolve-on-ban": "Automatically resolve all of a user's tickets when they are banned"
|
||||
}
|
||||
@@ -1,11 +1,8 @@
|
||||
{
|
||||
"posts": "المشاركات",
|
||||
"orphans": "Orphaned Files",
|
||||
"private": "جعل الملفات التي تم رفعها خاصة",
|
||||
"strip-exif-data": "Strip EXIF Data",
|
||||
"preserve-orphaned-uploads": "Keep uploaded files on disk after a post is purged",
|
||||
"orphanExpiryDays": "Days to keep orphaned files",
|
||||
"orphanExpiryDays-help": "After this many days, orphaned uploads will be deleted from the file system.<br />Set 0 or leave blank to disable.",
|
||||
"private-extensions": "File extensions to make private",
|
||||
"private-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",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"authentication": "المصادقة",
|
||||
"email-confirm-interval": "لا يمكن للمستخدم إعادة إرسال رسالة تأكيد البريد الالكتروني حتى مرور",
|
||||
"email-confirm-interval2": "minutes have elapsed",
|
||||
"email-confirm-email2": "دقائق",
|
||||
"allow-login-with": "السماح بتسجيل الدخول باستخدام",
|
||||
"allow-login-with.username-email": "اسم المستخدم أو البريد الالكتروني",
|
||||
"allow-login-with.username": "اسم المستخدم فقط",
|
||||
@@ -29,8 +29,6 @@
|
||||
"session-time-days": "Days",
|
||||
"session-time-seconds": "Seconds",
|
||||
"session-time-help": "These values are used to govern how long a user stays logged in when they check "Remember Me" on login. Note that only one of these values will be used. If there is no <i>seconds</i> value we fall back to <i>days</i>. If there is no <i>days</i> value we default to <i>14 days</i>.",
|
||||
"session-duration": "Session length if \"Remember Me\" is not checked (seconds)",
|
||||
"session-duration-help": "By default — or if set to <code>0</code> — a user will stay logged in for the duration of the session (e.g. however long the browser window/tab remains open). Set this value to explicitly invalidate the session after the specified number of seconds.",
|
||||
"online-cutoff": "Minutes after user is considered inactive",
|
||||
"online-cutoff-help": "If user performs no actions for this duration, they are considered inactive and they do not receive realtime updates.",
|
||||
"registration": "تسجيل المستخدم",
|
||||
|
||||
@@ -62,7 +62,6 @@
|
||||
"no-user": "اسم مستخدم غير موجود",
|
||||
"no-teaser": "مقتطف غير موجود",
|
||||
"no-flag": "Flag does not exist",
|
||||
"no-chat-room": "Chat room does not exist",
|
||||
"no-privileges": "لاتملك الصلاحيات اللازمة للقيام بهذه العملية",
|
||||
"category-disabled": "قائمة معطلة",
|
||||
"topic-locked": "الموضوع مقفول",
|
||||
@@ -89,10 +88,8 @@
|
||||
"category-not-selected": "Category not selected.",
|
||||
"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",
|
||||
"already-posting": "You are already posting",
|
||||
"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-not-allowed": "Tag not allowed",
|
||||
"not-enough-tags": "Not enough tags. Topics must have at least %1 tag(s)",
|
||||
"too-many-tags": "Too many tags. Topics can't have more than %1 tag(s)",
|
||||
"cant-use-system-tag": "You can not use this system tag.",
|
||||
@@ -102,7 +99,6 @@
|
||||
"guest-upload-disabled": "خاصية رفع الملفات غير مفعلة للزوار.",
|
||||
"cors-error": "Unable to upload image due to misconfigured CORS",
|
||||
"upload-ratelimit-reached": "You have uploaded too many files at one time. Please try again later.",
|
||||
"upload-error-fallback": "Unable to upload image — %1",
|
||||
"scheduling-to-past": "Please select a date in the future.",
|
||||
"invalid-schedule-date": "Please enter a valid date and time.",
|
||||
"cant-pin-scheduled": "Scheduled topics cannot be (un)pinned.",
|
||||
@@ -136,8 +132,6 @@
|
||||
"group-already-requested": "سبق وتم تسجيل طلب العضوية",
|
||||
"group-join-disabled": "You are not able to join this group at this time",
|
||||
"group-leave-disabled": "You are not able to leave this group at this time",
|
||||
"group-user-not-pending": "User does not have a pending request to join this group.",
|
||||
"gorup-user-not-invited": "User has not been invited to join this group.",
|
||||
"post-already-deleted": "سبق وتم حذف هذا الرد",
|
||||
"post-already-restored": "سبق وتم إلغاء حذف هذا الرد",
|
||||
"topic-already-deleted": "سبق وتم حذف هذا الموضوع",
|
||||
@@ -161,9 +155,6 @@
|
||||
"chat-deleted-already": "This chat message has already been deleted.",
|
||||
"chat-restored-already": "This chat message has already been restored.",
|
||||
"chat-room-does-not-exist": "Chat room does not exist.",
|
||||
"cant-add-users-to-chat-room": "Can't add users to chat room.",
|
||||
"cant-remove-users-from-chat-room": "Can't remove users from chat room.",
|
||||
"chat-room-name-too-long": "Chat room name too long.",
|
||||
"already-voting-for-this-post": "لقد شاركت بالتصويت ، ألا تذكر؟",
|
||||
"reputation-system-disabled": "نظام السمعة معطل",
|
||||
"downvoting-disabled": "التصويتات السلبية معطلة",
|
||||
@@ -214,8 +205,6 @@
|
||||
"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",
|
||||
"plugin-not-whitelisted": "Unable to install plugin – only plugins whitelisted by the NodeBB Package Manager can be installed via the ACP",
|
||||
"plugins-set-in-configuration": "You are not allowed to change plugin state as they are defined at runtime (config.json, environmental variables or terminal arguments), please modify the configuration instead.",
|
||||
"theme-not-set-in-configuration": "When defining active plugins in configuration, changing themes requires adding the new theme to the list of active plugins before updating it in the ACP",
|
||||
"topic-event-unrecognized": "Topic event '%1' unrecognized",
|
||||
"cant-set-child-as-parent": "Can't set child as parent category",
|
||||
"cant-set-self-as-parent": "Can't set self as parent category",
|
||||
@@ -228,6 +217,5 @@
|
||||
"api.429": "You have made too many requests, please try again later",
|
||||
"api.500": "An unexpected error was encountered while attempting to service your request.",
|
||||
"api.501": "The route you are trying to call is not implemented yet, please try again tomorrow",
|
||||
"api.503": "The route you are trying to call is not currently available due to a server configuration",
|
||||
"api.reauth-required": "The resource you are trying to access requires (re-)authentication."
|
||||
"api.503": "The route you are trying to call is not currently available due to a server configuration"
|
||||
}
|
||||
@@ -3,27 +3,25 @@
|
||||
"reports": "Reports",
|
||||
"first-reported": "First Reported",
|
||||
"no-flags": "Hooray! No flags found.",
|
||||
"x-flags-found": "%1 flag(s) found.",
|
||||
"assignee": "المحال إليه",
|
||||
"update": "تحديث",
|
||||
"updated": "تم التحديث",
|
||||
"resolved": "Resolved",
|
||||
"target-purged": "The content this flag referred to has been purged and is no longer available.",
|
||||
"target-aboutme-empty": "This user has no "About Me" set.",
|
||||
|
||||
"graph-label": "Daily Flags",
|
||||
"quick-filters": "Quick Filters",
|
||||
"filter-active": "There are one or more filters active in this list of flags",
|
||||
"filter-reset": "ازالة الفلاتر",
|
||||
"filters": "خيارات الفلتر",
|
||||
"filter-reporterId": "Reporter",
|
||||
"filter-targetUid": "Reportee",
|
||||
"filter-reporterId": "Reporter UID",
|
||||
"filter-targetUid": "Flagged UID",
|
||||
"filter-type": "عنوان العلامة",
|
||||
"filter-type-all": "كل المحتوي",
|
||||
"filter-type-post": "مشاركة",
|
||||
"filter-type-user": "مستخدم",
|
||||
"filter-state": "الحالة",
|
||||
"filter-assignee": "Assignee",
|
||||
"filter-assignee": "Assignee UID",
|
||||
"filter-cid": "Category",
|
||||
"filter-quick-mine": "Assigned to me",
|
||||
"filter-cid-all": "All categories",
|
||||
@@ -47,7 +45,6 @@
|
||||
|
||||
"notes": "Flag Notes",
|
||||
"add-note": "اضافة ملاحظة",
|
||||
"edit-note": "Edit Note",
|
||||
"no-notes": "No shared notes.",
|
||||
"delete-note-confirm": "Are you sure you want to delete this flag note?",
|
||||
"delete-flag-confirm": "Are you sure you want to delete this flag?",
|
||||
|
||||
@@ -4,13 +4,13 @@
|
||||
"buttons.close": "أغلق",
|
||||
"403.title": "غير مسموح بالدخول",
|
||||
"403.message": "يبدو أنك قد تعثرت على صفحة لا تمتلك الصلاحية للدخول إليها",
|
||||
"403.login": "Perhaps you should <a class=\"alert-link\" href='%1/login'>try logging in</a>?",
|
||||
"403.login": "ربما يجب عليك <a href='%1/login'>تسجل دخولك</a>.",
|
||||
"404.title": "لم يتم العثور",
|
||||
"404.message": "You seem to have stumbled upon a page that does not exist.<br/><div class=\"text-sm text-muted\">Return to the <a href='%1/'>home page</a>.</div>",
|
||||
"404.message": "الصفحة غير موجودة. العودة لـ <a href='%1/'>الرئيسية</a>",
|
||||
"500.title": "خطأ داخلي",
|
||||
"500.message": "عفوا! يبدو وكأنه شيء ذهب على نحو خاطئ!",
|
||||
"400.title": "طلب سيئ",
|
||||
"400.message": "It looks like this link is malformed, please double-check and try again.<br/><div class=\"text-sm text-muted\">Return to the <a href='%1/'>home page</a>.</div>",
|
||||
"400.message": "الرابط غير صحيح. رجاءًا تأكد من الرابط أو ارجع لـ <a href='%1/'>الرئيسية</a>",
|
||||
"register": "تسجيل",
|
||||
"login": "دخول",
|
||||
"please_log_in": "الرجاء تسجيل الدخول",
|
||||
@@ -20,7 +20,6 @@
|
||||
"you_have_successfully_logged_in": "تم سجيل الدخول بنجاح",
|
||||
"save_changes": "حفظ التغييرات",
|
||||
"save": "حفظ",
|
||||
"cancel": "Cancel",
|
||||
"close": "أغلق",
|
||||
"pagination": "الصفحات",
|
||||
"pagination.out_of": "%1 من %2",
|
||||
@@ -38,13 +37,9 @@
|
||||
"header.notifications": "التنبيهات",
|
||||
"header.search": "بحث",
|
||||
"header.profile": "ملف",
|
||||
"header.account": "Account",
|
||||
"header.navigation": "الاستكشاف",
|
||||
"header.manage": "Manage",
|
||||
"header.drafts": "Drafts",
|
||||
"notifications.loading": "تحميل التنبيهات",
|
||||
"chats.loading": "تحميل الدردشات",
|
||||
"drafts.loading": "Loading Drafts",
|
||||
"motd.welcome": "مرحبا بكم في NodeBB، منصة المناقشة المستقبلية.",
|
||||
"previouspage": "الصفحة السابقة",
|
||||
"nextpage": "الصفحة التالية",
|
||||
@@ -59,9 +54,7 @@
|
||||
"users": "الأعضاء",
|
||||
"topics": "المواضيع",
|
||||
"posts": "المشاركات",
|
||||
"x-posts": "<span class=\"formatted-number\">%1</span> posts",
|
||||
"x-topics": "<span class=\"formatted-number\">%1</span> topics",
|
||||
"x-reputation": "<span class=\"formatted-number\">%1</span> reputation",
|
||||
"x-posts": "%1 posts",
|
||||
"best": "الأفضل",
|
||||
"controversial": "Controversial",
|
||||
"votes": "Votes",
|
||||
@@ -76,7 +69,6 @@
|
||||
"reputation": "السمعة",
|
||||
"lastpost": "Last post",
|
||||
"firstpost": "First post",
|
||||
"about": "About",
|
||||
"read_more": "اقرأ المزيد",
|
||||
"more": "المزيد",
|
||||
"none": "None",
|
||||
@@ -90,13 +82,11 @@
|
||||
"user_posted_ago": "%1 كتب %2",
|
||||
"guest_posted_ago": "كتب زائر %1",
|
||||
"last_edited_by": "اخر تحرير بواسطة 1%",
|
||||
"edited-timestamp": "Edited %1",
|
||||
"norecentposts": "لاوجود لمشاركات جديدة",
|
||||
"norecenttopics": "لاوجود لمواضيع جديدة",
|
||||
"recentposts": "آخر المشاركات",
|
||||
"recentips": "آخر عناوين ال IP التي سجلت الدخول",
|
||||
"moderator_tools": "أدوات المشرف",
|
||||
"status": "Status",
|
||||
"online": "المتواجدون حاليًّا",
|
||||
"away": "غير متواجد",
|
||||
"dnd": "عدم الإزعاج",
|
||||
@@ -132,9 +122,5 @@
|
||||
"edited": "حُرِر",
|
||||
"disabled": "معطل",
|
||||
"select": "تحديد",
|
||||
"copied": "Copied",
|
||||
"user-search-prompt": "Type something here to find users...",
|
||||
"hidden": "Hidden",
|
||||
"sort": "Sort",
|
||||
"actions": "Actions"
|
||||
"user-search-prompt": "Type something here to find users..."
|
||||
}
|
||||
@@ -1,7 +1,5 @@
|
||||
{
|
||||
"all-groups": "All groups",
|
||||
"groups": "المجموعات",
|
||||
"members": "Members",
|
||||
"view_group": "معاينة المجموعة",
|
||||
"owner": "مالك المجموعة",
|
||||
"new_group": "أنشئ مجموعة جديدة",
|
||||
|
||||
@@ -1,17 +1,13 @@
|
||||
{
|
||||
"chat.chatting_with": "Chat with",
|
||||
"chat.placeholder": "Type chat message here, drag & drop images, press enter to send",
|
||||
"chat.placeholder.mobile": "Type chat message here",
|
||||
"chat.scroll-up-alert": "Go to most recent message",
|
||||
"chat.usernames-and-x-others": "%1 & %2 others",
|
||||
"chat.chat-with-usernames": "Chat with %1",
|
||||
"chat.chat-with-usernames-and-x-others": "Chat with %1 & %2 others",
|
||||
"chat.scroll-up-alert": "You are looking at older messages, click here to go to most recent message.",
|
||||
"chat.send": "أرسل",
|
||||
"chat.no_active": "لا يوجد لديك دردشات نشطة.",
|
||||
"chat.user_typing": "%1 يكتب رسالة...",
|
||||
"chat.user_has_messaged_you": "%1 أرسل لك رسالة.",
|
||||
"chat.see_all": "All chats",
|
||||
"chat.mark_all_read": "Mark all read",
|
||||
"chat.see_all": "عرض كل المحادثات",
|
||||
"chat.mark_all_read": "Mark all chats read",
|
||||
"chat.no-messages": "المرجو اختيار مرسل إليه لمعاينة تاريخ الدردشات",
|
||||
"chat.no-users-in-room": "No users in this room",
|
||||
"chat.recent-chats": "آخر الدردشات",
|
||||
@@ -46,7 +42,6 @@
|
||||
"composer.compose": "اكتب",
|
||||
"composer.show_preview": "عرض المعاينة",
|
||||
"composer.hide_preview": "إخفاء المعاينة",
|
||||
"composer.help": "Help",
|
||||
"composer.user_said_in": "%1 كتب في %2",
|
||||
"composer.user_said": "%1 كتب:",
|
||||
"composer.discard": "هل أنت متأكد أنك تريد التخلي عن التغييرات؟",
|
||||
@@ -69,11 +64,7 @@
|
||||
"composer.schedule-date": "Date",
|
||||
"composer.schedule-time": "Time",
|
||||
"composer.cancel-scheduling": "Cancel Scheduling",
|
||||
"composer.change-schedule-date": "Change Date",
|
||||
"composer.set-schedule-date": "Set Date",
|
||||
"composer.discard-all-drafts": "Discard all drafts",
|
||||
"composer.no-drafts": "You have no drafts",
|
||||
"composer.discard-draft-confirm": "Do you want to discard this draft?",
|
||||
"bootbox.ok": "OK",
|
||||
"bootbox.cancel": "إلغاء",
|
||||
"bootbox.confirm": "تأكيد",
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"title": "التنبيهات",
|
||||
"no_notifs": "ليس لديك أية تنبيهات جديدة",
|
||||
"see_all": "All notifications",
|
||||
"mark_all_read": "Mark all read",
|
||||
"see_all": "عرض كل التنبيهات",
|
||||
"mark_all_read": "اجعل كل التنبيهات مقروءة",
|
||||
"back_to_home": "عودة إلى %1",
|
||||
"outgoing_link": "رابط خارجي",
|
||||
"outgoing_link_message": "أنت تغادر اﻻن %1",
|
||||
|
||||
@@ -49,7 +49,6 @@
|
||||
"account/watched_categories": "%1's Watched Categories",
|
||||
"account/bookmarks": "%1's Bookmarked Posts",
|
||||
"account/settings": "خيارات المستخدم",
|
||||
"account/settings-of": "Changing settings of %1",
|
||||
"account/watched": "Topics watched by %1",
|
||||
"account/ignored": "Topics ignored by %1",
|
||||
"account/upvoted": "Posts upvoted by %1",
|
||||
@@ -60,7 +59,7 @@
|
||||
"account/uploads": "Uploads by %1",
|
||||
"account/sessions": "Login Sessions",
|
||||
"confirm": "تم التحقق من عنوان البريد الإلكتروني",
|
||||
"maintenance.text": "%1 is currently undergoing maintenance.<br/>Please come back another time.",
|
||||
"maintenance.text": "جاري صيانة %1. المرجو العودة لاحقًا.",
|
||||
"maintenance.messageIntro": "بالإضافة إلى ذلك، قام مدبر النظام بترك هذه الرسالة:",
|
||||
"throttled.text": "%1 is currently unavailable due to excessive load. Please come back another time."
|
||||
}
|
||||
@@ -1,12 +1,8 @@
|
||||
|
||||
{
|
||||
"post-queue": "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.",
|
||||
"enabling-help": "To enable this feature, go to <a href=\"%1\">Settings → Post → Post Queue</a> and enable <strong>Post Queue</strong>.",
|
||||
"back-to-list": "Back to Post Queue",
|
||||
"description": "There are no posts in the post queue. <br> To enable this feature, go to <a href=\"%1\">Settings → Post → Post Queue</a> and enable <strong>Post Queue</strong>.",
|
||||
"user": "User",
|
||||
"when": "When",
|
||||
"category": "Category",
|
||||
"title": "Title",
|
||||
"content": "Content",
|
||||
@@ -23,7 +19,6 @@
|
||||
"notify": "Notify",
|
||||
"notify-user": "Notify User",
|
||||
"confirm-reject": "Do you want to reject this post?",
|
||||
"confirm-remove": "Do you want to remove this post?",
|
||||
"bulk-actions": "Bulk Actions",
|
||||
"accept-all": "Accept All",
|
||||
"accept-selected": "Accept Selected",
|
||||
@@ -31,10 +26,6 @@
|
||||
"reject-all-confirm": "Do you want to reject all posts?",
|
||||
"reject-selected": "Reject Selected",
|
||||
"reject-selected-confirm": "Do you want to reject %1 selected posts?",
|
||||
"remove-all": "Remove all",
|
||||
"remove-all-confirm": "Do you want to remove all posts?",
|
||||
"remove-selected": "Remove Selected",
|
||||
"remove-selected-confirm": "Do you want to remove %1 selected posts?",
|
||||
"bulk-accept-success": "%1 posts accepted",
|
||||
"bulk-reject-success": "%1 posts rejected"
|
||||
}
|
||||
@@ -7,5 +7,13 @@
|
||||
"alltime": "دائمًا",
|
||||
"no_recent_topics": "لايوجد مواضيع جديدة",
|
||||
"no_popular_topics": "لا يوجد مواضيع شائعة",
|
||||
"load-new-posts": "Load new posts"
|
||||
"there-is-a-new-topic": "يوجد موضوع جديد",
|
||||
"there-is-a-new-topic-and-a-new-post": "يوجد موضوع جديد و رد جديد",
|
||||
"there-is-a-new-topic-and-new-posts": "يوجد موضوع جديد و %1 ردود جديدة ",
|
||||
"there-are-new-topics": "يوجد %1 مواضيع جديدة",
|
||||
"there-are-new-topics-and-a-new-post": "يوجد %1 مواضيع جديدة و رد جديد",
|
||||
"there-are-new-topics-and-new-posts": "يوجد %1 مواضيع جديدة و %2 مشاركات جديدة",
|
||||
"there-is-a-new-post": "يوجد مشاركة جديدة",
|
||||
"there-are-new-posts": "يوجد %1 مشاركات جديدة",
|
||||
"click-here-to-reload": "إضغط هنا لإعادة التحميل"
|
||||
}
|
||||
@@ -1,6 +1,5 @@
|
||||
{
|
||||
"register": "تسجيل",
|
||||
"already-have-account": "Already have an account?",
|
||||
"cancel_registration": "إلغاء التسجيل",
|
||||
"help.email": "افتراضيا، سيتم إخفاء بريدك الإلكتروني من العامة.",
|
||||
"help.username_restrictions": "اسم مستخدم فريدة من نوعها بين 1% و 2% حرفا. بإمكان الآخرين مناداتك بـ @<span id='yourUsername'>اسم المستخدم</span>.",
|
||||
|
||||
@@ -1,41 +1,21 @@
|
||||
{
|
||||
"type-to-search": "Type to search",
|
||||
"results_matching": "%1 نتيجة (نتائج) موافقة لـ \"%2\", (%3 ثواني)",
|
||||
"no-matches": "لم يتم العثور على نتائج.",
|
||||
"advanced-search": "بحث متقدم",
|
||||
"in": "في",
|
||||
"in-titles": "In titles",
|
||||
"in-titles-posts": "In titles and posts",
|
||||
"in-posts": "In posts",
|
||||
"in-categories": "In categories",
|
||||
"in-users": "In users",
|
||||
"in-tags": "In tags",
|
||||
"categories": "Categories",
|
||||
"all-categories": "All categories",
|
||||
"categories-x": "Categories: %1",
|
||||
"categories-watched-categories": "Categories: Watched categories",
|
||||
"type-a-category": "Type a category",
|
||||
"tags": "Tags",
|
||||
"tags-x": "Tags: %1",
|
||||
"type-a-tag": "Type a tag",
|
||||
"titles": "العناوين",
|
||||
"titles-posts": "العناوين والمشاركات",
|
||||
"match-words": "Match words",
|
||||
"match-all-words": "Match all words",
|
||||
"match-any-word": "Match any word",
|
||||
"all": "All",
|
||||
"any": "Any",
|
||||
"posted-by": "مشاركة من طرف",
|
||||
"posted-by-usernames": "Posted by: %1",
|
||||
"type-a-username": "Type a username",
|
||||
"in-categories": "في الفئات",
|
||||
"search-child-categories": "بحث في الفئات الفرعية",
|
||||
"has-tags": "Has tags",
|
||||
"reply-count": "عدد المشاركات",
|
||||
"replies": "Replies",
|
||||
"replies-atleast-count": "Replies: At least %1",
|
||||
"replies-atmost-count": "Replies: At most %1",
|
||||
"at-least": "على اﻷقل",
|
||||
"at-most": "على اﻷكثر",
|
||||
"relevance": "Relevance",
|
||||
"time": "Time",
|
||||
"post-time": "تاريخ المشاركة",
|
||||
"votes": "Votes",
|
||||
"newer-than": "أحدث من",
|
||||
@@ -48,22 +28,7 @@
|
||||
"three-months": "ثلاثة أشهر",
|
||||
"six-months": "ستة أشهر",
|
||||
"one-year": "عام",
|
||||
"time-newer-than-86400": "Time: Newer than yesterday",
|
||||
"time-older-than-86400": "Time: Older than yesterday",
|
||||
"time-newer-than-604800": "Time: Newer than one week",
|
||||
"time-older-than-604800": "Time: Older than one week",
|
||||
"time-newer-than-1209600": "Time: Newer than two weeks",
|
||||
"time-older-than-1209600": "Time: Older than two weeks",
|
||||
"time-newer-than-2592000": "Time: Newer than one month",
|
||||
"time-older-than-2592000": "Time: Older than one month",
|
||||
"time-newer-than-7776000": "Time: Newer than three months",
|
||||
"time-older-than-7776000": "Time: Older than three months",
|
||||
"time-newer-than-15552000": "Time: Newer than six months",
|
||||
"time-older-than-15552000": "Time: Older than six months",
|
||||
"time-newer-than-31104000": "Time: Newer than one year",
|
||||
"time-older-than-31104000": "Time: Older than one year",
|
||||
"sort-by": "عرض حسب",
|
||||
"sort": "Sort",
|
||||
"last-reply-time": "تاريخ آخر رد",
|
||||
"topic-title": "عنوان الموضوع",
|
||||
"topic-votes": "Topic votes",
|
||||
@@ -74,36 +39,11 @@
|
||||
"category": "فئة",
|
||||
"descending": "في ترتيب تنازلي",
|
||||
"ascending": "في ترتيب تصاعدي",
|
||||
"sort-by-relevance-desc": "Sort by: Relevance in descending order",
|
||||
"sort-by-relevance-asc": "Sort by: Relevance in ascending order",
|
||||
"sort-by-timestamp-desc": "Sort by: Post time in descending order",
|
||||
"sort-by-timestamp-asc": "Sort by: Post time in ascending order",
|
||||
"sort-by-votes-desc": "Sort by: Votes in descending order",
|
||||
"sort-by-votes-asc": "Sort by: Votes in ascending order",
|
||||
"sort-by-topic.lastposttime-desc": "Sort by: Last reply time in descending order",
|
||||
"sort-by-topic.lastposttime-asc": "Sort by: Last reply time in ascending order",
|
||||
"sort-by-topic.title-desc": "Sort by: Topic title in descending order",
|
||||
"sort-by-topic.title-asc": "Sort by: Topic title in ascending order",
|
||||
"sort-by-topic.postcount-desc": "Sort by: Number of replies in descending order",
|
||||
"sort-by-topic.postcount-asc": "Sort by: Number of replies in ascending order",
|
||||
"sort-by-topic.viewcount-desc": "Sort by: Number of views in descending order",
|
||||
"sort-by-topic.viewcount-asc": "Sort by: Number of views in ascending order",
|
||||
"sort-by-topic.votes-desc": "Sort by: Topic votes in descending order",
|
||||
"sort-by-topic.votes-asc": "Sort by: Topic votes in ascending order",
|
||||
"sort-by-topic.timestamp-desc": "Sort by: Topic start date in descending order",
|
||||
"sort-by-topic.timestamp-asc": "Sort by: Topic start date in ascending order",
|
||||
"sort-by-user.username-desc": "Sort by: Username in descending order",
|
||||
"sort-by-user.username-asc": "Sort by: Username in ascending order",
|
||||
"sort-by-category.name-desc": "Sort by: Category in descending order",
|
||||
"sort-by-category.name-asc": "Sort by: Category in ascending order",
|
||||
"save": "Save",
|
||||
"save-preferences": "حفظ التفضيلات",
|
||||
"clear-preferences": "ازالة التفضيلات",
|
||||
"search-preferences-saved": "تم حفظ تفضيلات البحث",
|
||||
"search-preferences-cleared": "تم ازالة تفضيلات البحث",
|
||||
"show-results-as": "عرض النتائج كـ",
|
||||
"show-results-as-topics": "Show results as topics",
|
||||
"show-results-as-posts": "Show results as posts",
|
||||
"see-more-results": "See more results (%1)",
|
||||
"search-in-category": "Search in \"%1\""
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
{
|
||||
"sign-in-with-twitter": "تسجيل الدخول باستخدام تويتر",
|
||||
"sign-up-with-twitter": "التسجيل باستخدام تويتر",
|
||||
"sign-in-with-github": "تسجيل الدخول باستخدام جيت هب",
|
||||
"sign-up-with-github": "التسجيل باستخدام جيت هب",
|
||||
"sign-in-with-google": "تسجيل الدخول باستخدام قوقل",
|
||||
"sign-up-with-google": "التسجيل باستخدام قوقل",
|
||||
"log-in-with-facebook": "تسجيل الدخول باستخدام فيسبوك",
|
||||
"continue-with-facebook": "التسجيل باستخدام فيسبوك"
|
||||
}
|
||||
@@ -1,11 +1,8 @@
|
||||
{
|
||||
"all-tags": "All tags",
|
||||
"no_tag_topics": "لا يوجد مواضيع بهذه الكلمة الدلالية.",
|
||||
"no-tags-found": "No tags found",
|
||||
"tags": "الكلمات الدلالية",
|
||||
"enter_tags_here": "Enter tags here, between %1 and %2 characters each.",
|
||||
"enter_tags_here_short": "أدخل الكلمات الدلالية...",
|
||||
"no_tags": "لا يوجد كلمات دلالية بعد.",
|
||||
"select_tags": "Select Tags",
|
||||
"tag-whitelist": "Tag Whitelist"
|
||||
"select_tags": "Select Tags"
|
||||
}
|
||||
@@ -1,15 +0,0 @@
|
||||
{
|
||||
"skins": "Skins",
|
||||
"collapse": "Collapse",
|
||||
"expand": "Expand",
|
||||
"login-register-to-search": "Login or register to search.",
|
||||
"settings.title": "Theme settings",
|
||||
"settings.enableQuickReply": "Enable quick reply",
|
||||
"settings.centerHeaderElements": "Center header elements",
|
||||
"settings.mobileTopicTeasers": "Show topic teasers on mobile",
|
||||
"settings.stickyToolbar": "Sticky toolbar",
|
||||
"settings.stickyToolbar.help": "The toolbar on topic and category pages will stick to the top of the page",
|
||||
"settings.autohideBottombar": "Auto hide bottom bar",
|
||||
"settings.autohideBottombar.help": "The bottom bar on mobile view will be hidden when the page is scrolled down",
|
||||
"settings.chatModals": "Enable chat modals"
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
{
|
||||
"settings.title": "Theme settings",
|
||||
"settings.intro": "You can customise your theme settings here. Settings are stored on a per-device basis, so you are able to have different settings on different devices (phone, tablet, desktop, etc.)",
|
||||
"settings.mobile-menu-side": "Switch which side each mobile menu is on",
|
||||
"settings.autoHidingNavbar": "Automatically hide the navbar on scroll",
|
||||
"settings.autoHidingNavbar-xs": "Very small screens (e.g. phones in portrait mode)",
|
||||
"settings.autoHidingNavbar-sm": "Smaller screens (e.g. phones, some tablets)",
|
||||
"settings.autoHidingNavbar-md": "Medium sized screens (e.g. tablets in landscape mode)",
|
||||
"settings.autoHidingNavbar-lg": "Larger screens (e.g. desktop computers)"
|
||||
}
|
||||
@@ -36,34 +36,19 @@
|
||||
"scheduled": "Scheduled",
|
||||
"moved": "منقول",
|
||||
"moved-from": "Moved from %1",
|
||||
"copy-code": "Copy Code",
|
||||
"copy-ip": "Copy IP",
|
||||
"ban-ip": "Ban IP",
|
||||
"view-history": "Edit History",
|
||||
"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>",
|
||||
"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 hrf=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"user-locked-topic-ago": "%1 locked this topic %2",
|
||||
"user-locked-topic-on": "%1 locked this topic on %2",
|
||||
"user-unlocked-topic-ago": "%1 unlocked this topic %2",
|
||||
"user-unlocked-topic-on": "%1 unlocked this topic on %2",
|
||||
"user-pinned-topic-ago": "%1 pinned this topic %2",
|
||||
"user-pinned-topic-on": "%1 pinned this topic on %2",
|
||||
"user-unpinned-topic-ago": "%1 unpinned this topic %2",
|
||||
"user-unpinned-topic-on": "%1 unpinned this topic on %2",
|
||||
"user-deleted-topic-ago": "%1 deleted this topic %2",
|
||||
"user-deleted-topic-on": "%1 deleted this topic on %2",
|
||||
"user-restored-topic-ago": "%1 restored this topic %2",
|
||||
"user-restored-topic-on": "%1 restored this topic on %2",
|
||||
"user-moved-topic-from-ago": "%1 moved this topic from %2 %3",
|
||||
"user-moved-topic-from-on": "%1 moved this topic from %2 on %3",
|
||||
"user-queued-post-ago": "%1 <a href=\"%2\">queued</a> post for approval %3",
|
||||
"user-queued-post-on": "%1 <a href=\"%2\">queued</a> post for approval on %3",
|
||||
"user-referenced-topic-ago": "%1 <a href=\"%2\">referenced</a> this topic %3",
|
||||
"user-referenced-topic-on": "%1 <a href=\"%2\">referenced</a> this topic on %3",
|
||||
"user-forked-topic-ago": "%1 <a href=\"%2\">forked</a> this topic %3",
|
||||
"user-forked-topic-on": "%1 <a href=\"%2\">forked</a> this topic on %3",
|
||||
"locked-by": "Locked by",
|
||||
"unlocked-by": "Unlocked by",
|
||||
"pinned-by": "Pinned by",
|
||||
"unpinned-by": "Unpinned by",
|
||||
"deleted-by": "Deleted by",
|
||||
"restored-by": "Restored by",
|
||||
"moved-from-by": "Moved from %1 by",
|
||||
"queued-by": "Post queued for approval →",
|
||||
"backlink": "Referenced by",
|
||||
"forked-by": "Forked by",
|
||||
"bookmark_instructions": "اضغط هنا للعودة لأخر مشاركة مقروءة في الموضوع",
|
||||
"flag-post": "Flag this post",
|
||||
"flag-user": "Flag this user",
|
||||
@@ -102,7 +87,6 @@
|
||||
"thread_tools.change_owner": "Change Owner",
|
||||
"thread_tools.select_category": "Select Category",
|
||||
"thread_tools.fork": "إنشاء فرع الموضوع",
|
||||
"thread_tools.tag": "Tag Topic",
|
||||
"thread_tools.delete": "حذف الموضوع",
|
||||
"thread_tools.delete-posts": "مشاركات محذوفة",
|
||||
"thread_tools.delete_confirm": "هل أنت متأكد أنك تريد حذف هذا الموضوع؟",
|
||||
@@ -111,7 +95,7 @@
|
||||
"thread_tools.purge": "تطهير الموضوع",
|
||||
"thread_tools.purge_confirm": "هل أنت متأكد أنك تريد تطهير هذا الموضوع؟",
|
||||
"thread_tools.merge_topics": "Merge Topics",
|
||||
"thread_tools.merge": "Merge Topic",
|
||||
"thread_tools.merge": "Merge",
|
||||
"topic_move_success": "This topic will be moved to \"%1\" shortly. Click here to undo.",
|
||||
"topic_move_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.",
|
||||
@@ -129,7 +113,6 @@
|
||||
"bookmark": "Bookmark",
|
||||
"bookmarks": "Bookmarks",
|
||||
"bookmarks.has_no_bookmarks": "You haven't bookmarked any posts yet.",
|
||||
"copy-permalink": "Copy Permalink",
|
||||
"loading_more_posts": "تحميل المزيد من المشاركات",
|
||||
"move_topic": "نقل الموضوع",
|
||||
"move_topics": "نقل المواضيع",
|
||||
@@ -137,7 +120,7 @@
|
||||
"post_moved": "تم نقل المشاركة",
|
||||
"fork_topic": "فرع الموضوع",
|
||||
"enter-new-topic-title": "Enter new topic title",
|
||||
"fork_topic_instruction": "Click the posts you want to fork, enter a title for the new topic and click fork topic",
|
||||
"fork_topic_instruction": "إضغط على المشاركات التي تريد تفريعها",
|
||||
"fork_no_pids": "لم تختر أي مشاركة",
|
||||
"no-posts-selected": "No posts selected!",
|
||||
"x-posts-selected": "%1 post(s) selected",
|
||||
@@ -152,15 +135,12 @@
|
||||
"merge-new-title-for-topic": "New title for topic",
|
||||
"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_topic_instruction": "Select the target category and then click move",
|
||||
"change_owner_instruction": "Click the posts you want to assign to another user",
|
||||
"composer.title_placeholder": "أدخل عنوان موضوعك هنا...",
|
||||
"composer.handle_placeholder": "Enter your name/handle here",
|
||||
"composer.hide": "Hide",
|
||||
"composer.discard": "نبذ التغييرات",
|
||||
"composer.submit": "حفظ",
|
||||
"composer.additional-options": "Additional Options",
|
||||
"composer.post-later": "Post Later",
|
||||
"composer.schedule": "Schedule",
|
||||
"composer.replying_to": "الرد على %1",
|
||||
"composer.new_topic": "موضوع جديد",
|
||||
@@ -203,7 +183,5 @@
|
||||
"last-post": "Last post",
|
||||
"go-to-my-next-post": "Go to my next post",
|
||||
"no-more-next-post": "You don't have more posts in this topic",
|
||||
"post-quick-reply": "Quick reply",
|
||||
"navigator.index": "Post %1 of %2",
|
||||
"navigator.unread": "%1 unread"
|
||||
"post-quick-reply": "Post quick reply"
|
||||
}
|
||||
@@ -1,6 +1,5 @@
|
||||
{
|
||||
"banned": "محظور",
|
||||
"muted": "كتم ",
|
||||
"offline": "غير متصل",
|
||||
"deleted": "محذوف",
|
||||
"username": "إسم المستخدم",
|
||||
@@ -9,7 +8,7 @@
|
||||
"email": "البريد الإلكتروني",
|
||||
"confirm_email": "تأكيد عنوان البريد الإلكتروني",
|
||||
"account_info": "معلومات الحساب",
|
||||
"admin_actions_label": "الإجراءات الإدارية",
|
||||
"admin_actions_label": "Administrative Actions",
|
||||
"ban_account": "حظر الحساب",
|
||||
"ban_account_confirm": "هل تريد حقاً حظر هاذا العضو؟",
|
||||
"unban_account": "إزالة حظر الحساب",
|
||||
@@ -24,7 +23,7 @@
|
||||
"delete_account_content_confirm": "Are you sure you want to delete this account's content (posts/topics/uploads)? <br /><strong>This action is irreversible and you will not be able to recover any data</strong><br /><br />",
|
||||
"delete_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-content-deleted": "تم حذف محتوى حساب",
|
||||
"account-content-deleted": "Account content deleted",
|
||||
"fullname": "الاسم الكامل",
|
||||
"website": "الموقع الإلكتروني",
|
||||
"location": "الموقع",
|
||||
@@ -34,26 +33,25 @@
|
||||
"profile": "الملف الشخصي",
|
||||
"profile_views": "عدد المشاهدات",
|
||||
"reputation": "السمعة",
|
||||
"bookmarks": "المفضلات",
|
||||
"watched_categories": "الأقسام المُتابعة",
|
||||
"change_all": "غير الكل",
|
||||
"bookmarks": "Bookmarks",
|
||||
"watched_categories": "Watched categories",
|
||||
"change_all": "Change All",
|
||||
"watched": "متابع",
|
||||
"ignored": "تم تجاهله",
|
||||
"default-category-watch-state": "حالة مشاهدة اﻻقسام الافتراضية",
|
||||
"default-category-watch-state": "Default category watch state",
|
||||
"followers": "المتابعون",
|
||||
"following": "يتابع",
|
||||
"blocks": "الكتل",
|
||||
"blocked-users": "Blocked users",
|
||||
"block_toggle": "تبديل الكتلة",
|
||||
"block_user": "أحظر المستخدم",
|
||||
"unblock_user": "ألغ حظر المستخدم",
|
||||
"blocks": "Blocks",
|
||||
"block_toggle": "Toggle Block",
|
||||
"block_user": "Block User",
|
||||
"unblock_user": "Unblock User",
|
||||
"aboutme": "معلومة عنك او السيرة الذاتية",
|
||||
"signature": "توقيع",
|
||||
"birthday": "عيد ميلاد",
|
||||
"chat": "محادثة",
|
||||
"chat_with": "متابعة الدردشة مع %1",
|
||||
"new_chat_with": "بدء دردشة جديدة مع %1",
|
||||
"flag-profile": "ضع علامة على الملف الشخصي",
|
||||
"flag-profile": "Flag Profile",
|
||||
"follow": "تابع",
|
||||
"unfollow": "إلغاء المتابعة",
|
||||
"more": "المزيد",
|
||||
@@ -69,7 +67,6 @@
|
||||
"upload_new_picture": "رفع صورة جديدة",
|
||||
"upload_new_picture_from_url": "رفع صورة جديدة من رابط",
|
||||
"current_password": "كلمة السر الحالية",
|
||||
"new_password": "New Password",
|
||||
"change_password": "تغيير كلمة السر",
|
||||
"change_password_error": "كلمة سر غير صحيحة",
|
||||
"change_password_error_wrong_current": "كلمة السر الحالية ليست صحيحة",
|
||||
@@ -89,7 +86,7 @@
|
||||
"remove_cover_picture_confirm": "هل تريد بالتأكيد إزالة صورة الغلاف؟",
|
||||
"crop_picture": "إقتصاص الصورة",
|
||||
"upload_cropped_picture": "إقتصاص ورفع",
|
||||
"avatar-background-colour": "لون الخلفية للصورة الرمزية",
|
||||
"avatar-background-colour": "Avatar background colour",
|
||||
"settings": "خيارات",
|
||||
"show_email": "أظهر بريدي الإلكتروني",
|
||||
"show_fullname": "أظهر اسمي الكامل",
|
||||
@@ -110,18 +107,16 @@
|
||||
"has_no_ignored_topics": "هذا المستخدم لم يقم بتجاهل اية مواضيع حتى الآن.",
|
||||
"has_no_upvoted_posts": "هذا المستخدم لم يقم بالتصويت للأعلى لأي مشاركة حتى الآن.",
|
||||
"has_no_downvoted_posts": "هذا المستخدم لم يقم بالتصويت للأسفل لأي مشاركة حتى الآن.",
|
||||
"has_no_controversial_posts": "هذا المستخدم ﻻيمتلك تصويت للأسفل لأي مشاركة حتى الآن.",
|
||||
"has_no_blocks": "أنت لم تحظر اي مستخدم",
|
||||
"has_no_controversial_posts": "This user does not have any downvoted posts yet.",
|
||||
"has_no_blocks": "You have blocked no users.",
|
||||
"email_hidden": "البريد الإلكتروني مخفي",
|
||||
"hidden": "مخفي",
|
||||
"paginate_description": "عرض المواضيع والردود موزعة على صفحات عوضاً عن التمرير اللانهائي.",
|
||||
"topics_per_page": "المواضيع في كل صفحة",
|
||||
"posts_per_page": "الردود في كل صفحة",
|
||||
"category-topic-sort": "Category topic sort",
|
||||
"topic-post-sort": "Topic post sort",
|
||||
"max_items_per_page": "أقصى %1",
|
||||
"acp_language": "لغة صفحة اﻻدارة",
|
||||
"notifications": "التنبيهات",
|
||||
"acp_language": "Admin Page Language",
|
||||
"notifications": "Notifications",
|
||||
"upvote-notif-freq": "معدل تكرار تنبيهات التصويت للأعلى",
|
||||
"upvote-notif-freq.all": "كل التصويتات للأعلى",
|
||||
"upvote-notif-freq.first": "First Per Post",
|
||||
@@ -161,10 +156,6 @@
|
||||
"info.banned-permanently": "محظور بشكل دائم",
|
||||
"info.banned-reason-label": "سبب",
|
||||
"info.banned-no-reason": "لم يتم إعطاء سبب.",
|
||||
"info.mute-history": "Recent Mute History",
|
||||
"info.no-mute-history": "This user has never been muted",
|
||||
"info.muted-until": "Muted until %1",
|
||||
"info.muted-expiry": "Expiry",
|
||||
"info.muted-no-reason": "No reason given.",
|
||||
"info.username-history": "سجل اسم المستخدم",
|
||||
"info.email-history": "سجل البريد الإلكتروني",
|
||||
@@ -172,8 +163,6 @@
|
||||
"info.moderation-note.success": "تم حفظ ملاحظة الإشراف",
|
||||
"info.moderation-note.add": "إضافة ملاحظة",
|
||||
"sessions.description": "This page allows you to view any active sessions on this forum and revoke them if necessary. You can revoke your own session by logging out of your account.",
|
||||
"revoke-session": "Revoke Session",
|
||||
"browser-version-on-platform": "%1 %2 on %3",
|
||||
"consent.title": "Your Rights & Consent",
|
||||
"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 & Consent page.<br /><br />If you have any questions or concerns, we encourage you to reach out to this forum's administrative team.",
|
||||
@@ -200,7 +189,5 @@
|
||||
"emailUpdate.intro": "Please enter your email address below. This forum uses your email address for scheduled digest and notifications, as well as for account recovery in the event of a lost password.",
|
||||
"emailUpdate.optional": "<strong>This field is optional</strong>. You are not obligated to provide your email address, but without a validated email you will not be able to recover your account or login with your email.",
|
||||
"emailUpdate.required": "<strong>This field is required</strong>.",
|
||||
"emailUpdate.change-instructions": "A confirmation email will be sent to the entered email address with a unique link. Accessing that link will confirm your ownership of the email address and it will become active on your account. At any time, you are able to update your email on file from within your account page.",
|
||||
"emailUpdate.password-challenge": "Please enter your password in order to verify account ownership.",
|
||||
"emailUpdate.pending": "Your email address has not yet been confirmed, but an email has been sent out requesting confirmation. If you wish to invalidate that request and send a new confirmation request, please fill in the form below."
|
||||
"emailUpdate.change-instructions": "A confirmation email will be sent to the entered email address with a unique link. Accessing that link will confirm your ownership of the email address and it will become active on your account. At any time, you are able to update your email on file from within your account page."
|
||||
}
|
||||
@@ -1,19 +1,18 @@
|
||||
{
|
||||
"all-users": "All Users",
|
||||
"latest_users": "أحدث الأعضاء",
|
||||
"top_posters": "اﻷكثر مشاركة",
|
||||
"most_reputation": "أعلى سمعة",
|
||||
"most_flags": "معظم الأعلام",
|
||||
"most_flags": "Most Flags",
|
||||
"search": "بحث",
|
||||
"enter_username": "أدخل اسم مستخدم للبحث",
|
||||
"search-user-for-chat": "Search for a user to start chat",
|
||||
"search-user-for-chat": "ابحث عن مستخدم لبدء محادثة ",
|
||||
"load_more": "حمل المزيد",
|
||||
"users-found-search-took": "تم إيجاد %1 مستخدمـ(ين)! استغرق البحث %2 ثانية.",
|
||||
"filter-by": "تصفية بحسب",
|
||||
"filter-by": "Filter By",
|
||||
"online-only": "المتصلون فقط",
|
||||
"invite": "دعوة",
|
||||
"prompt-email": "البريد الإلكتروني:",
|
||||
"groups-to-join": "المجموعات التي سيتم الانضمام إليها عند قبول الدعوة:",
|
||||
"prompt-email": "Emails:",
|
||||
"groups-to-join": "Groups to be joined when invite is accepted:",
|
||||
"invitation-email-sent": "تم إرسال دعوة بالبريد الإلكتروني إلى %1",
|
||||
"user_list": "قائمة اﻷعضاء",
|
||||
"recent_topics": "أحدث المواضيع",
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
# The files here are not meant to be edited directly
|
||||
|
||||
Please see the → [Internalization README](../README.md).
|
||||
@@ -4,6 +4,8 @@
|
||||
|
||||
"acp-title": "%1 | Контролен панел за администратори на NodeBB",
|
||||
"settings-header-contents": "Съдържание",
|
||||
"changes-saved": "Промените са запазени",
|
||||
"changes-saved-message": "Промените Ви в настройките на NodeBB бяха запазени.",
|
||||
"changes-not-saved": "Промените не са запазени",
|
||||
"changes-not-saved-message": "Възникна проблем при запазването на промените Ви по NodeBB. (%1)"
|
||||
}
|
||||
@@ -1,8 +1,5 @@
|
||||
{
|
||||
"post-cache": "Кеш за публикации",
|
||||
"group-cache": "Кеш за групи",
|
||||
"local-cache": "Локален кеш",
|
||||
"object-cache": "Кеш за обекти",
|
||||
"percent-full": "Запълненост: %1%",
|
||||
"post-cache-size": "Размер на кеша за публикации",
|
||||
"items-in-cache": "Елементи в кеша"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"custom-css": "Персонализиран CSS/SASS",
|
||||
"custom-css.description": "Въведете своите собствени декларации на CSS/SASS. Те ще бъдат приложени след всички останали стилове.",
|
||||
"custom-css.enable": "Включване на персонализиран CSS/SASS",
|
||||
"custom-css": "Персонализиран CSS/LESS",
|
||||
"custom-css.description": "Въведете своите собствени декларации на CSS/LESS, те ще бъдат приложени след всички останали стилове.",
|
||||
"custom-css.enable": "Включване на персонализиран CSS/LESS",
|
||||
|
||||
"custom-js": "Персонализиран код на Javascript",
|
||||
"custom-js.description": "Въведете свой собствен код на javascript тук. Той ще бъде изпълнен след като страницата се зареди напълно.",
|
||||
|
||||
@@ -83,11 +83,8 @@
|
||||
"back-to-dashboard": "Назад към таблото",
|
||||
"details.no-users": "В избрания период не са се регистрирали нови потребители",
|
||||
"details.no-topics": "В избрания период не са публикувани нови теми",
|
||||
"details.no-searches": "В избрания период не са правени търсения",
|
||||
"details.no-searches": "Все още не са правени търсения",
|
||||
"details.no-logins": "В избрания период не са отчетени вписвания",
|
||||
"details.logins-static": "NodeBB запазва данни за сесията в продължение на %1 дни, така че в следната таблица могат да се видят само последните активни сесии",
|
||||
"details.logins-login-time": "Време на вписване",
|
||||
"start": "Начало",
|
||||
"end": "Край",
|
||||
"filter": "Филтриране"
|
||||
"details.logins-login-time": "Време на вписване"
|
||||
}
|
||||
|
||||
@@ -8,9 +8,9 @@
|
||||
"containers.none": "Няма",
|
||||
"container.well": "Кладенец",
|
||||
"container.jumbotron": "Джъмботрон",
|
||||
"container.card": "Карта",
|
||||
"container.card-header": "Заглавна част на карта",
|
||||
"container.card-body": "Основна част на карта",
|
||||
"container.panel": "Панел",
|
||||
"container.panel-header": "Заглавна част на панел",
|
||||
"container.panel-body": "Основна част на панел",
|
||||
"container.alert": "Предупреждение",
|
||||
|
||||
"alert.confirm-delete": "Наистина ли искате да изтриете джаджата?",
|
||||
@@ -26,7 +26,5 @@
|
||||
"container.placeholder": "Завлачете и пуснете контейнер или въведете HTML тук.",
|
||||
"show-to-groups": "Показване на групите",
|
||||
"hide-from-groups": "Скриване от групите",
|
||||
"start-date": "Начална дата",
|
||||
"end-date": "Крайна дата",
|
||||
"hide-on-mobile": "Скриване на мобилни устройства"
|
||||
}
|
||||
@@ -1,10 +1,8 @@
|
||||
{
|
||||
"administrators": "Администратори",
|
||||
"global-moderators": "Глобални модератори",
|
||||
"moderators": "Модератори",
|
||||
"no-global-moderators": "Няма глобални модератори",
|
||||
"no-sub-categories": "Няма подкатегории",
|
||||
"subcategories": "%1 подкатегории",
|
||||
"moderators-of-category": "%1 модератори",
|
||||
"no-moderators": "Няма модератори",
|
||||
"add-administrator": "Добавяне на администратор",
|
||||
"add-global-moderator": "Добавяне на глобален модератор",
|
||||
|
||||
@@ -39,5 +39,6 @@
|
||||
"revert": "Отмяна",
|
||||
|
||||
"edit.no-users-found": "Няма намерени потребители",
|
||||
"edit.confirm-remove-user": "Наистина ли искате да премахнете този потребител?"
|
||||
"edit.confirm-remove-user": "Наистина ли искате да премахнете този потребител?",
|
||||
"edit.save-success": "Промените са запазени!"
|
||||
}
|
||||
@@ -49,6 +49,7 @@
|
||||
"alert.confirm-moderate": "<strong>Наистина ли искате да дадете правомощието за модериране на тази потребителска група?</strong> Тази група е публична и всеки може свободно да се присъедини към нея.",
|
||||
"alert.confirm-admins-mods": "<strong>Наистина ли искате да дадете правото „Администратори и модератори“ на този потребител/група?</strong> Потребителите с това право могат да променят правомощията на други групи, <em>включително да им дават правото на супер администратори</em>",
|
||||
"alert.confirm-save": "Моля, потвърдете желанието си да запазите тези правомощия",
|
||||
"alert.saved": "Промените по правомощията са запазени и приложени",
|
||||
"alert.confirm-discard": "Наистина ли искате да отхвърлите промените по правомощията?",
|
||||
"alert.discarded": "Промените по правомощията са отхвърлени",
|
||||
"alert.confirm-copyToAll": "Наистина ли искате да приложите този набор от <strong>%1</strong> към <strong>всички категории</strong>?",
|
||||
|
||||
@@ -91,7 +91,6 @@
|
||||
"alerts.validate-email-success": "Е-пощите са проверени",
|
||||
"alerts.validate-force-password-reset-success": "Паролата на потребителя (или паролите на потребителите) беше подновена и сесията му беше прекратена.",
|
||||
"alerts.password-reset-confirm": "Искате ли да изпратите е-писмо/а за възстановяване на паролата на този/тези потребител(и)?",
|
||||
"alerts.password-reset-email-sent": "Е-писмото за възстановяване на паролата е изпратено.",
|
||||
"alerts.confirm-delete": "<strong>ВНИМАНИЕ!</strong><p>Наистина ли искате да изтриете <strong>потребителя/ите</strong>?</p> <p>Това действие е необратимо! Ще бъде изтрит само профилът на потребителя/ите, неговите/техните публикациите и теми ще останат.</p>",
|
||||
"alerts.delete-success": "Потребителят/ите е/са изтрит(и)!",
|
||||
"alerts.confirm-delete-content": "<strong>ВНИМАНИЕ!</strong><p>Наистина ли искате да изтриете <strong>съдържанието</strong> на този потребител или тези потребители?</p> <p>Това действие е необратимо! Профилите на потребителите ще останат, но всички техни публикации и теми ще бъдат изтрити.</p>",
|
||||
|
||||
@@ -76,7 +76,7 @@
|
||||
"logout": "Изход",
|
||||
"view-forum": "Преглед на форума",
|
||||
|
||||
"search.placeholder": "Търсене на настройки",
|
||||
"search.placeholder": "Натиснете „/“ за търсене на настройки",
|
||||
"search.no-results": "Няма резултати…",
|
||||
"search.search-forum": "Търсене във форума за <strong></strong>",
|
||||
"search.keep-typing": "Продължете да пишете, за да видите още резултати…",
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
"maintenance-mode.help": "Когато форумът е в режим на профилактика, всички заявки ще бъдат пренасочвани към статична страница за изчакване, с изключение на администраторите, които ще могат да използват уеб сайта нормално.",
|
||||
"maintenance-mode.status": "Код на състоянието за режима на профилактика",
|
||||
"maintenance-mode.message": "Съобщение за профилактиката",
|
||||
"maintenance-mode.groups-exempt-from-maintenance-mode": "Изберете групи, които да бъдат изключени от режима на профилактика",
|
||||
"headers": "Заглавни части",
|
||||
"headers.allow-from": "Задайте „ALLOW-FROM“, за да поставите NodeBB в „iFrame“",
|
||||
"headers.csp-frame-ancestors": "Задайте заглавката „Content-Security-Policy frame-ancestors“ за да поставите NodeBB „iFrame“",
|
||||
@@ -18,10 +17,7 @@
|
||||
"headers.acah": "Access-Control-Allow-Headers",
|
||||
"headers.coep": "Cross-Origin-Embedder-Policy",
|
||||
"headers.coep-help": "Когато е включено (по подразбиране), стойността на заглавката ще бъде <code>require-corp</code>",
|
||||
"headers.coop": "Cross-Origin-Opener-Policy",
|
||||
"headers.corp": "Cross-Origin-Resource-Policy",
|
||||
"headers.permissions-policy": "Permissions-Policy",
|
||||
"headers.permissions-policy-help": "Позволява задаването на стойност в заглавката „permissions-policy“ (политика за разрешенията), като например „geolocation=*, camera=()“. Вижте <a href=\"https://github.com/w3c/webappsec-permissions-policy/blob/main/permissions-policy-explainer.md\">тук</a> за повече информация.",
|
||||
"hsts": "Стриктна транспортна сигурност",
|
||||
"hsts.enabled": "Включване на HSTS (препоръчително)",
|
||||
"hsts.maxAge": "Максимална възраст на HSTS",
|
||||
|
||||
@@ -1,27 +1,16 @@
|
||||
{
|
||||
"tokens": "Идентификатор",
|
||||
"tokens": "Кодове",
|
||||
"settings": "Настройки",
|
||||
"lead-text": "На тази страница можете да настроите достъпа до ППИ за писане в NodeBB.",
|
||||
"intro": "По подразбиране ППИ за писане удостоверява потребителите чрез бисквитката им за сесията, но NodeBB поддържа и удостоверяване чрез метода „Bearer“, използвайки идентификаторите от тази страница.",
|
||||
"warning": "<strong>Внимавайте</strong> – отнасяйте се с идентификаторите като с пароли. Ако някой се сдобие с тях, може да получи достъп до акаунта Ви.",
|
||||
"intro": "По подразбиране ППИ за писане удостоверява потребителите чрез бисквитката им за сесията, но NodeBB поддържа и удостоверяване чрез метода „Bearer“, използвайки кодовете от тази страница.",
|
||||
"docs": "Щракнете тук за достъп до пълната документация на ППИ",
|
||||
|
||||
"require-https": "Ползването на ППИ да работи само чрез HTTPS",
|
||||
"require-https-caveat": "<strong>Забележка</strong>: В някои случаи, когато се ползват програми за балансиране на натоварването, е възможно заявките към NodeBB да се препращат чрез HTTP – тогава тази настройка трябва да остане изключена.",
|
||||
|
||||
"uid": "Потребителски ИД",
|
||||
"token": "Идентификатор",
|
||||
"uid-help-text": "Посочете потребителски ИД, който да бъде свързан с този код. Ако ИД е <code>0</code>, това ще се счита за <em>главен</em> код, който може да приема идентичността на всеки от другите потребители чрез параметъра <code>_uid</code>",
|
||||
"description": "Описание",
|
||||
"last-seen": "Последно видян",
|
||||
"created": "Създаден",
|
||||
"create-token": "Създаване на идентификатор",
|
||||
"update-token": "Промяна на идентификатора",
|
||||
"master-token": "Главен идентификатор",
|
||||
"last-seen-never": "Този ключ не е използван никога.",
|
||||
"no-description": "Няма описание.",
|
||||
"actions": "Действия",
|
||||
|
||||
"delete-confirm": "Наистина ли искате да изтриете този идентификатор? След това няма да може да го възстановите.",
|
||||
"roll-confirm": "Наистина ли искате да пресъздадете този идентификатор? Старият ще бъде премахнат незабавно и няма да може да бъде възстановен."
|
||||
"token-on-save": "Кодът ще бъде създаден след като данните бъдат запазени"
|
||||
}
|
||||
@@ -5,18 +5,14 @@
|
||||
"from": "Име за полето „От“",
|
||||
"from-help": "Името на изпращача, което да бъде показано в е-писмото.",
|
||||
|
||||
"confirmation-settings": "Потвърждение",
|
||||
"confirmation.expiry": "Продължителност на давността на връзката за потвърждаване, в часове",
|
||||
|
||||
"smtp-transport": "Транспорт чрез SMTP",
|
||||
"smtp-transport.enabled": "Включване на транспорта чрез SMTP",
|
||||
"smtp-transport-help": "Можете да изберете от списък от познати услуги, или да въведете такава ръчно.",
|
||||
"smtp-transport.service": "Изберете услуга",
|
||||
"smtp-transport.service-custom": "Персонализирана услуга",
|
||||
"smtp-transport.service-help": "Изберете името на услугата по-горе, за да използвате известните данни за нея. Или изберете „Персонализирана услуга“ и въведете данните ѝ по-долу.",
|
||||
"smtp-transport.gmail-warning1": "Ако използвате GMail, ще трябва да създадете „Парола за приложение“, за да може NodeBB да използва данните за удостоверяване. Можете да създадете такава в страницата с <a href=\"https://myaccount.google.com/apppasswords\">Пароли за приложения<i class=\"fa fa-external-link\"></i></a>.",
|
||||
"smtp-transport.gmail-warning2": "За повече информация относно това обиколно решение, <a href=\"https://nodemailer.com/usage/using-gmail/\">моля, прегледайте тази статия за проблема в „NodeMailer“<i class=\"fa fa-external-link\"></i></a>. Друго решение би било използването на добавка за е-поща от трета страна, като например „SendGrid“, „Mailgun“ и т.н. <a href=\"../extend/plugins\">Вижте наличните добавки тук</a>.",
|
||||
"smtp-transport.auto-enable-toast": "Изглежда настройвате функционалност, която изисква транспорт чрез SMTP. Включихме настройката „Транспорт чрез SMTP“, за да не го правите Вие.",
|
||||
"smtp-transport.gmail-warning1": "Има доклади, че услугата на Gmail не работи за акаунти с подсилена защита. В тези случаи ще трябва да <a href=\"https://www.google.com/settings/security/lesssecureapps\">настроите своя акаунт в GMail така, че да позволява използването на по-малко защитени приложения</a>.",
|
||||
"smtp-transport.gmail-warning2": "За повече информация относно това обиколно решение, <a href=\"https://nodemailer.com/usage/using-gmail/\">моля, прегледайте тази статия за проблема в „NodeMailer“.</a> Друго решение би било използването на добавка за е-поща от трета страна, като например „SendGrid“, „Mailgun“ и т.н. <a href=\"../extend/plugins\">Вижте наличните добавки тук</a>.",
|
||||
"smtp-transport.host": "SMTP сървър",
|
||||
"smtp-transport.port": "SMTP порт",
|
||||
"smtp-transport.security": "Сигурност на връзката",
|
||||
@@ -42,7 +38,7 @@
|
||||
"subscriptions.hour-help": "Моля, въведете число, представляващо часа, в който да се разпращат е-писма с подготвеното резюме (напр.. <code>0</code> за полунощ, <code>17</code> за 5 следобед). Имайте предвид, че този час е според часовата зона на сървъра и може да не съвпада с часовника на системата Ви.<br /> Приблизителното време на сървъра е: <span id=\"serverTime\"></span><br /> Изпращането на следващия ежедневен бюлетин е планирано за <span id=\"nextDigestTime\"></span>",
|
||||
"notifications.remove-images": "Премахване на изображенията от известията по е-поща",
|
||||
"require-email-address": "Новите потребители задължително трябва да предоставят е-поща",
|
||||
"require-email-address-warning": "По подразбиране потребителите могат да не въвеждат адрес на е-поща, като оставят полето празно. Ако включите това, новите потребители задължително ще трябва да предоставят <strong>и потвърдят</strong> е-поща, за да могат да се регистрират и да получат достъп до форума. <strong>Това не означава, че потребителят ще въведе истинска е-поща, нито че тя ще е негова.</strong>",
|
||||
"require-email-address-warning": "По подразбиране потребителите могат да не въвеждат адрес на е-поща, като оставят полето празно. Ако включите това, те задължително ще трябва да предоставят е-поща, за да могат да се регистрират. <strong>Това не означава, че потребителят ще въведе съществуваща е-поща, нито че тя ще е негова.</strong>",
|
||||
"send-validation-email": "Изпращане на е-писма за потвърждение, когато бъде добавена или променена е-поща",
|
||||
"include-unverified-emails": "Изпращане на е-писма към получатели, които не са потвърдили изрично е-пощата си",
|
||||
"include-unverified-warning": "За потребителите, които имат свързана е-поща с регистрацията си, тя се смята за потвърдена. Но има ситуации, в които това не е така (например при ползване на регистрация от друга система, но и в други случаи), <strong>Включете тази настройка на собствен риск</strong> – изпращането на е-писма към непотвърдени адреси може да нарушава определени местни закони против нежеланата поща.",
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
"groups": "Групи:",
|
||||
"open-new-window": "Отваряне в нов прозорец",
|
||||
"dropdown": "Падащо меню",
|
||||
"dropdown-placeholder": "Въведете елементите на падащото меню по-долу. Пример: <br/><li><a class="dropdown-item" href="https://myforum.com">Връзка 1</a></li>",
|
||||
"dropdown-placeholder": "Въведете елементите на падащото меню по-долу. Пример: <br/><li><a href="https://myforum.com">Връзка 1</a></li>",
|
||||
|
||||
"btn.delete": "Изтриване",
|
||||
"btn.disable": "Изключване",
|
||||
|
||||
@@ -51,7 +51,6 @@
|
||||
"signature.disable": "Забраняване на подписите",
|
||||
"signature.no-links": "Забраняване на поставянето на връзки в подписите",
|
||||
"signature.no-images": "Забраняване на поставянето на изображения в подписите",
|
||||
"signature.hide-duplicates": "Скриване на дублираните подписи в темите",
|
||||
"signature.max-length": "Максимална дължина на подписите",
|
||||
"composer": "Настройки за съставянето",
|
||||
"composer-help": "Следващите настройки определят функционалностите и/или вида на елемента за съставяне на\n\\t\\t\\t\\tпубликация, който се използва от потребителите, когато те създават нови теми или отговорят в съществуващи.",
|
||||
|
||||
@@ -23,9 +23,5 @@
|
||||
"flags.limit-per-target-placeholder": "По подразбиране: 0",
|
||||
"flags.limit-per-target-help": "Когато публикация или потребител бъде докладван няколко пъти, това се добавя към един общ доклад. Задайте на тази настройка стойност по-голяма от нула, за да ограничите броя на докладванията, които могат да бъдат натрупани към една публикация или потребител.",
|
||||
"flags.auto-flag-on-downvote-threshold": "Брой отрицателни гласове, при които публикациите да бъдат докладвани автоматично (0 = изключено, по подразбиране: 0)",
|
||||
"flags.auto-resolve-on-ban": "Автоматично премахване на всички доклади за потребител, когато той бъде блокиран",
|
||||
"flags.action-on-resolve": "Когато докладване бъде разрешено, да се направи следното",
|
||||
"flags.action-on-reject": "Когато докладване бъде отхвърлено, да се направи следното",
|
||||
"flags.action.nothing": "Да не се прави нищо",
|
||||
"flags.action.rescind": "Да се отмени известието, изпратено до модераторите/администраторите"
|
||||
"flags.auto-resolve-on-ban": "Автоматично премахване на всички доклади за потребител, когато той бъде блокиран"
|
||||
}
|
||||
@@ -1,11 +1,8 @@
|
||||
{
|
||||
"posts": "Публикации",
|
||||
"orphans": "Неизползвани файлове",
|
||||
"private": "Качените файлове да бъдат частни",
|
||||
"strip-exif-data": "Премахване на данните EXIF",
|
||||
"preserve-orphaned-uploads": "Запазване на качените файлове на диска дори след изтриването на публикацията",
|
||||
"orphanExpiryDays": "Брой дни за съхранение на неизползваните файлове",
|
||||
"orphanExpiryDays-help": "След толкова на брой дни неизползваните качени файлове ще бъдат изтривани.<br />Задайте 0 или оставете празно, за да изключите тази функционалност.",
|
||||
"private-extensions": "Файлови разширения, които да бъдат частни",
|
||||
"private-uploads-extensions-help": "Въведете списък от файлови разширения, разделени със запетаи, които искате да бъдат частни (например <code>pdf,xls,doc</code>). Ако оставите това поле празно, всички файлове ще бъдат частни.",
|
||||
"resize-image-width-threshold": "Преоразмеряване на изображенията, ако са по-широки от определената ширина",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"authentication": "Удостоверяване",
|
||||
"email-confirm-interval": "Потребителят не може да изпраща повторно е-писмото за потвърждение, преди да са минали",
|
||||
"email-confirm-interval2": "минути са изминали",
|
||||
"email-confirm-email2": "минути",
|
||||
"allow-login-with": "Позволяване на вписването чрез",
|
||||
"allow-login-with.username-email": "Потребителско име или е-поща",
|
||||
"allow-login-with.username": "Само потребителско име",
|
||||
@@ -23,14 +23,12 @@
|
||||
"login-attempts": "Брой опити за вписване на час",
|
||||
"login-attempts-help": "Ако опитите за вписване на потребител минат тази граница, акаунтът ще бъде заключен за определено време.",
|
||||
"lockout-duration": "Продължителност на заключването на акаунта (в минути)",
|
||||
"login-days": "Брой дни за помнене на сесията за вписване на потребителя",
|
||||
"login-days": "Продължителност на запомнянето на сесията за вписване на потребителя (в дни)",
|
||||
"password-expiry-days": "Изискване на промяна на паролата през определен период от дни",
|
||||
"session-time": "Продължителност на сесията",
|
||||
"session-time-days": "Дни",
|
||||
"session-time-seconds": "Секунди",
|
||||
"session-time-help": "Тези стойности се използват за определяне на дължината на периода, през който потребителите ще останат вписани в системата, ако поставят отметка в полето „Запомнете ме“ при вписването. Имайте предвид, че ще се използва само една от тези стойности. Ако няма стойност за <i>секунди</i>, ще се използва стойността за <i>дни</i>. Ако няма и стойност за <i>дни</i>, то ще се използва стандартната стойност от <i>14 дни</i>.",
|
||||
"session-duration": "Продължителност на сесията, ако „Запомнете ме“ не е отбелязано (в секунди)",
|
||||
"session-duration-help": "По подразбиране (или ако стойността е <code>0</code>) потребителят ще остане вписан докато не изтече сесията му (обикновено докато браузърът или разделът не бъде затворен). Използвайте тази настройка, ако искате да определите точно време (в секунди), след което сесията на потребителя да бъде прекратена.",
|
||||
"online-cutoff": "Брой минути, след които потребителят ще бъде смятан за неактивен",
|
||||
"online-cutoff-help": "Ако потребителят не извършва никакви действия през този период, ще бъде смятан за неактивен и няма да получава известия в реално време.",
|
||||
"registration": "Регистриране на потребителите",
|
||||
|
||||
@@ -62,7 +62,6 @@
|
||||
"no-user": "Потребителят не съществува",
|
||||
"no-teaser": "Резюмето не съществува",
|
||||
"no-flag": "Докладът не съществува",
|
||||
"no-chat-room": "Стаята за разговори не съществува",
|
||||
"no-privileges": "Нямате достатъчно права за това действие.",
|
||||
"category-disabled": "Категорията е изключена",
|
||||
"topic-locked": "Темата е заключена",
|
||||
@@ -89,10 +88,8 @@
|
||||
"category-not-selected": "Не е избрана категория.",
|
||||
"too-many-posts": "Можете да публикувате веднъж на %1 секунда/и – моля, изчакайте малко, преди да опитате да публикувате отново",
|
||||
"too-many-posts-newbie": "Като нов потребител, Вие можете да публикувате веднъж на %1 секунда/и, докато не натрупате %2 репутация – моля, изчакайте малко, преди да опитате да публикувате отново",
|
||||
"already-posting": "В момента публикувате",
|
||||
"tag-too-short": "Моля, въведете по-дълъг етикет. Етикетите трябва да съдържат поне %1 символ(а)",
|
||||
"tag-too-long": "Моля, въведете по-кратък етикет. Етикетите трябва да съдържат не повече от %1 символ(а)",
|
||||
"tag-not-allowed": "Етикетът не е разрешен",
|
||||
"not-enough-tags": "Недостатъчно етикети. Темите трябва да имат поне %1 етикет(а)",
|
||||
"too-many-tags": "Твърде много етикети. Темите не могат да имат повече от %1 етикет(а)",
|
||||
"cant-use-system-tag": "Не можете да използвате този системен етикет.",
|
||||
@@ -102,7 +99,6 @@
|
||||
"guest-upload-disabled": "Качването не е разрешено за гости",
|
||||
"cors-error": "Изображението не може да бъде качено поради неправилни настройки на CORS",
|
||||
"upload-ratelimit-reached": "Качили сте твърде много файлове наведнъж. Моля, опитайте отново по-късно.",
|
||||
"upload-error-fallback": "Изображението не може да бъде качено – %1",
|
||||
"scheduling-to-past": "Изберете дата в бъдещето.",
|
||||
"invalid-schedule-date": "Въведете правилна дата и час.",
|
||||
"cant-pin-scheduled": "Насрочените теми не могат да бъдат закачени или разкачени.",
|
||||
@@ -136,8 +132,6 @@
|
||||
"group-already-requested": "Вашата заявка за членство вече е била изпратена",
|
||||
"group-join-disabled": "В момента не можете да се присъедините към тази група",
|
||||
"group-leave-disabled": "В момента не можете да напуснете тази група",
|
||||
"group-user-not-pending": "Потребителят няма изчакваща заявка за присъединяване към тази група.",
|
||||
"gorup-user-not-invited": "Потребителят не е бил поканен да се присъедини към тази група.",
|
||||
"post-already-deleted": "Тази публикация вече е изтрита",
|
||||
"post-already-restored": "Тази публикация вече е възстановена",
|
||||
"topic-already-deleted": "Тази тема вече е изтрита",
|
||||
@@ -161,9 +155,6 @@
|
||||
"chat-deleted-already": "Това съобщение вече е изтрито.",
|
||||
"chat-restored-already": "Това съобщение вече е възстановено.",
|
||||
"chat-room-does-not-exist": "Стаята за разговори не съществува.",
|
||||
"cant-add-users-to-chat-room": "Към стаята за разговори не могат да бъдат добавяни потребители.",
|
||||
"cant-remove-users-from-chat-room": "От стаята за разговори не могат да бъдат премахвани потребители.",
|
||||
"chat-room-name-too-long": "Името на стаята за разговори е твърде дълго.",
|
||||
"already-voting-for-this-post": "Вече сте дали глас за тази публикация.",
|
||||
"reputation-system-disabled": "Системата за репутация е изключена.",
|
||||
"downvoting-disabled": "Отрицателното гласуване е изключено",
|
||||
@@ -214,12 +205,10 @@
|
||||
"no-connection": "Изглежда има проблем с връзката Ви с Интернет",
|
||||
"socket-reconnect-failed": "В момента сървърът е недостъпен. Натиснете тук, за да опитате отново, или опитайте пак по-късно.",
|
||||
"plugin-not-whitelisted": "Добавката не може да бъде инсталирана – само добавки, одобрени от пакетния мениджър на NodeBB могат да бъдат инсталирани чрез ACP",
|
||||
"plugins-set-in-configuration": "Не можете да променяте състоянието на добавката, тъй като то се определя по време на работата ѝ (чрез config.json, променливи на средата или аргументи при изпълнение). Вместо това може да промените конфигурацията.",
|
||||
"theme-not-set-in-configuration": "Когато определяте активните добавки в конфигурацията, промяната на темите изисква да се добави новата тема към активните добавки, преди актуализирането ѝ в ACP",
|
||||
"topic-event-unrecognized": "Събитието „%1“ на темата е неизвестно",
|
||||
"cant-set-child-as-parent": "Дъщерна категория не може да се зададе като базова такава",
|
||||
"cant-set-self-as-parent": "Категорията не може да се зададе като базова категория на себе си",
|
||||
"api.master-token-no-uid": "Беше получен главен идентификатор без съответстващо поле `_uid` в тялото на заявката",
|
||||
"api.master-token-no-uid": "Беше получен главен код без съответстващо поле `_uid` в тялото на заявката",
|
||||
"api.400": "Нещо не беше наред с данните в заявката, които подадохте.",
|
||||
"api.401": "Няма намерена сесия. Моля, впишете се и опитайте отново.",
|
||||
"api.403": "Нямате право да изпълните тази команда",
|
||||
@@ -228,6 +217,5 @@
|
||||
"api.429": "Направили сте твърде много заявки. Моля, опитайте отново по-късно.",
|
||||
"api.500": "При обработката на заявката Ви възникна неочаквана грешка.",
|
||||
"api.501": "Пътят, който се опитвате да извикате, все още не съществува. Моля, опитайте отново утре.",
|
||||
"api.503": "Пътят, който се опитвате да извикате, в момента не е достъпен, поради настройките на сървъра.",
|
||||
"api.reauth-required": "Ресурсът, който се опитвате да достъпите, изисква (повторно) удостоверяване."
|
||||
"api.503": "Пътят, който се опитвате да извикате, в момента не е достъпен, поради настройките на сървъра."
|
||||
}
|
||||
@@ -3,27 +3,25 @@
|
||||
"reports": "Доклади",
|
||||
"first-reported": "Първо докладване",
|
||||
"no-flags": "Ура! Няма намерени доклади.",
|
||||
"x-flags-found": "Намерени доклади: %1.",
|
||||
"assignee": "Назначен",
|
||||
"update": "Обновяване",
|
||||
"updated": "Обновено",
|
||||
"resolved": "Разрешен",
|
||||
"target-purged": "Съдържанието, за което се отнася този доклад, е било изтрито и вече не е налично.",
|
||||
"target-aboutme-empty": "Този потребител не е попълнил нищо в секцията за себе си.",
|
||||
|
||||
"graph-label": "Дневни етикети",
|
||||
"quick-filters": "Бързи филтри",
|
||||
"filter-active": "В този списък с доклади има един или повече филтри",
|
||||
"filter-reset": "Премахване на филтрите",
|
||||
"filters": "Настройки на филтрите",
|
||||
"filter-reporterId": "Докладвал",
|
||||
"filter-targetUid": "Докладван",
|
||||
"filter-reporterId": "Потр. ид. на докладвалия",
|
||||
"filter-targetUid": "Потр. ид. на докладвания",
|
||||
"filter-type": "Вид на доклада",
|
||||
"filter-type-all": "Всичко",
|
||||
"filter-type-post": "Публикация",
|
||||
"filter-type-user": "Потребител",
|
||||
"filter-state": "Състояние",
|
||||
"filter-assignee": "Назначен",
|
||||
"filter-assignee": "Потр. ид. на назначения",
|
||||
"filter-cid": "Категория",
|
||||
"filter-quick-mine": "Назначени на мен",
|
||||
"filter-cid-all": "Всички категории",
|
||||
@@ -47,7 +45,6 @@
|
||||
|
||||
"notes": "Бележки към доклада",
|
||||
"add-note": "Добавяне на бележка",
|
||||
"edit-note": "Редактиране на бележката",
|
||||
"no-notes": "Няма споделени бележки.",
|
||||
"delete-note-confirm": "Наистина ли искате да изтриете тази бележка към доклада?",
|
||||
"delete-flag-confirm": "Наистина ли искате да изтриете този доклад?",
|
||||
|
||||
@@ -4,13 +4,13 @@
|
||||
"buttons.close": "Затваряне",
|
||||
"403.title": "Достъпът е отказан",
|
||||
"403.message": "Изглежда сте посетили страница, до която нямате достъп.",
|
||||
"403.login": "Може би трябва да <a class=\"alert-link\" href='%1/login'>опитате да се впишете</a>?",
|
||||
"403.login": "Може би трябва да <a href='%1/login'>опитате да се впишете</a>?",
|
||||
"404.title": "Не е намерена",
|
||||
"404.message": "Изглежда сте се опитали да посетите страница, която не съществува.<br/><div class=\"text-sm text-muted\">Върнете се към <a href='%1/'>началната страница</a>.</div>",
|
||||
"404.message": "Изглежда сте се опитали да посетите страница, която не съществува. Върнете се към <a href='%1/'>началната страница</a>.",
|
||||
"500.title": "Вътрешна грешка.",
|
||||
"500.message": "Опа! Изглежда нещо се обърка!",
|
||||
"400.title": "Грешна заявка.",
|
||||
"400.message": "Тази връзка изглежда повредена. Моля, проверете я и опитайте отново.<br/><div class=\"text-sm text-muted\">Или се върнете към <a href='%1/'>началната страница</a>.</div>",
|
||||
"400.message": "Тази връзка изглежда повредена. Моля, проверете я и опитайте отново. В противен случай се върнете на <a href='%1/'>началната страница</a>.",
|
||||
"register": "Регистрация",
|
||||
"login": "Вписване",
|
||||
"please_log_in": "Моля, впишете се",
|
||||
@@ -20,7 +20,6 @@
|
||||
"you_have_successfully_logged_in": "Вие влязохте успешно",
|
||||
"save_changes": "Запазване на промените",
|
||||
"save": "Запазване",
|
||||
"cancel": "Отказ",
|
||||
"close": "Затваряне",
|
||||
"pagination": "Странициране",
|
||||
"pagination.out_of": "%1 от %2",
|
||||
@@ -38,13 +37,9 @@
|
||||
"header.notifications": "Известия",
|
||||
"header.search": "Търсене",
|
||||
"header.profile": "Профил",
|
||||
"header.account": "Акаунт",
|
||||
"header.navigation": "Навигация",
|
||||
"header.manage": "Управление",
|
||||
"header.drafts": "Чернови",
|
||||
"notifications.loading": "Зареждане на известията",
|
||||
"chats.loading": "Зареждане на разговорите",
|
||||
"drafts.loading": "Зареждане на черновите",
|
||||
"motd.welcome": "Добре дошли в NodeBB, системата за дискусии на бъдещето.",
|
||||
"previouspage": "Предишна страница",
|
||||
"nextpage": "Следваща страница",
|
||||
@@ -59,9 +54,7 @@
|
||||
"users": "Потребители",
|
||||
"topics": "Теми",
|
||||
"posts": "Публ.",
|
||||
"x-posts": "<span class=\"formatted-number\">%1</span> публикации",
|
||||
"x-topics": "<span class=\"formatted-number\">%1</span> теми",
|
||||
"x-reputation": "<span class=\"formatted-number\">%1</span> репутация",
|
||||
"x-posts": "%1 публикации",
|
||||
"best": "Най-добри",
|
||||
"controversial": "Противоречиви",
|
||||
"votes": "Гласове",
|
||||
@@ -76,7 +69,6 @@
|
||||
"reputation": "Репутация",
|
||||
"lastpost": "Последна публикация",
|
||||
"firstpost": "Първа публикация",
|
||||
"about": "Относно",
|
||||
"read_more": "още",
|
||||
"more": "Още",
|
||||
"none": "Нищо",
|
||||
@@ -90,13 +82,11 @@
|
||||
"user_posted_ago": "%1 публикува %2",
|
||||
"guest_posted_ago": "гост публикува %1",
|
||||
"last_edited_by": "последно редактирано от %1",
|
||||
"edited-timestamp": "Редактирано %1",
|
||||
"norecentposts": "Няма скорошни публикации",
|
||||
"norecenttopics": "Няма скорошни теми",
|
||||
"recentposts": "Скорошни публикации",
|
||||
"recentips": "Наскоро ползвани IP адреси",
|
||||
"moderator_tools": "Модераторски инструменти",
|
||||
"status": "Състояние",
|
||||
"online": "На линия",
|
||||
"away": "Отсъстващ",
|
||||
"dnd": "Отпочиващ",
|
||||
@@ -132,9 +122,5 @@
|
||||
"edited": "Редактирано",
|
||||
"disabled": "Изключено",
|
||||
"select": "Избиране",
|
||||
"copied": "Копирано",
|
||||
"user-search-prompt": "Започнете да пишете, за да потърсите потребител…",
|
||||
"hidden": "Скрито",
|
||||
"sort": "Подреждане",
|
||||
"actions": "Действия"
|
||||
"user-search-prompt": "Започнете да пишете, за да потърсите потребител…"
|
||||
}
|
||||
@@ -1,7 +1,5 @@
|
||||
{
|
||||
"all-groups": "Всички групи",
|
||||
"groups": "Групи",
|
||||
"members": "Членове",
|
||||
"view_group": "Преглед на групата",
|
||||
"owner": "Собственик на групата",
|
||||
"new_group": "Създаване на нова група",
|
||||
|
||||
@@ -1,17 +1,13 @@
|
||||
{
|
||||
"chat.chatting_with": "Разговор с",
|
||||
"chat.placeholder": "Въведете съобщение тук или пуснете снимки и натиснете Ентер за изпращане",
|
||||
"chat.placeholder.mobile": "Въведете съобщение тук",
|
||||
"chat.scroll-up-alert": "Go to most recent message",
|
||||
"chat.usernames-and-x-others": "%1 и %2 други",
|
||||
"chat.chat-with-usernames": "Разговор с %1",
|
||||
"chat.chat-with-usernames-and-x-others": "Разговор с %1 и %2 други",
|
||||
"chat.scroll-up-alert": "В момента разглеждате по-стари съобщения. Щракнете тук, за да се прехвърлите към най-новото съобщение.",
|
||||
"chat.send": "Изпращане",
|
||||
"chat.no_active": "Нямате текущи разговори.",
|
||||
"chat.user_typing": "%1 пише...",
|
||||
"chat.user_has_messaged_you": "%1 Ви написа съобщение.",
|
||||
"chat.see_all": "Всички разговори",
|
||||
"chat.mark_all_read": "Отбелязване на всички като прочетени",
|
||||
"chat.see_all": "Вижте всички разговори",
|
||||
"chat.mark_all_read": "Отбелязване на всички разговори като прочетени",
|
||||
"chat.no-messages": "Моля, изберете получател, за да видите историята на съобщенията",
|
||||
"chat.no-users-in-room": "Няма потребители в тази стая",
|
||||
"chat.recent-chats": "Скорошни разговори",
|
||||
@@ -46,7 +42,6 @@
|
||||
"composer.compose": "Писане",
|
||||
"composer.show_preview": "Показване на прегледа",
|
||||
"composer.hide_preview": "Скриване на прегледа",
|
||||
"composer.help": "Помощ",
|
||||
"composer.user_said_in": "%1 каза в %2:",
|
||||
"composer.user_said": "%1 каза:",
|
||||
"composer.discard": "Наистина ли искате да отхвърлите тази публикация?",
|
||||
@@ -69,11 +64,7 @@
|
||||
"composer.schedule-date": "Дата",
|
||||
"composer.schedule-time": "Час",
|
||||
"composer.cancel-scheduling": "Отмяна на насрочването",
|
||||
"composer.change-schedule-date": "Промяна на датата",
|
||||
"composer.set-schedule-date": "Задаване на дата",
|
||||
"composer.discard-all-drafts": "Изтриване на всички чернови",
|
||||
"composer.no-drafts": "Нямате никакви чернови",
|
||||
"composer.discard-draft-confirm": "Искате ли да изтриете тази чернова?",
|
||||
"bootbox.ok": "Добре",
|
||||
"bootbox.cancel": "Отказ",
|
||||
"bootbox.confirm": "Потвърждаване",
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"title": "Известия",
|
||||
"no_notifs": "Нямате нови известия",
|
||||
"see_all": "Всички известия",
|
||||
"mark_all_read": "Отбелязване на всички като прочетени",
|
||||
"see_all": "Показване на всички известия",
|
||||
"mark_all_read": "Отбелязване на всички известия като прочетени",
|
||||
"back_to_home": "Назад към %1",
|
||||
"outgoing_link": "Външна връзка",
|
||||
"outgoing_link_message": "Напускате %1",
|
||||
|
||||
@@ -49,7 +49,6 @@
|
||||
"account/watched_categories": "Следените категории на %1",
|
||||
"account/bookmarks": "Отметнатите публикации на %1",
|
||||
"account/settings": "Потребителски настройки",
|
||||
"account/settings-of": "Променят се настройките на %1",
|
||||
"account/watched": "Теми, следени от %1",
|
||||
"account/ignored": "Теми, пренебрегвани от %1",
|
||||
"account/upvoted": "Публикации, получили положителен глас от %1",
|
||||
@@ -60,7 +59,7 @@
|
||||
"account/uploads": "Качвания от %1",
|
||||
"account/sessions": "Сесии на вписване",
|
||||
"confirm": "Е-пощата е потвърдена",
|
||||
"maintenance.text": "%1 в момента е в профилактика.<br/>Моля, върнете се по-късно.",
|
||||
"maintenance.text": "%1 в момента е в профилактика. Моля, върнете се по-късно.",
|
||||
"maintenance.messageIntro": "В допълнение, администраторът е оставил това съобщение:",
|
||||
"throttled.text": "%1 в момента е недостъпен, поради прекомерно натоварване. Моля, върнете се отново по-късно."
|
||||
}
|
||||
@@ -1,12 +1,8 @@
|
||||
|
||||
{
|
||||
"post-queue": "Опашка за публикации",
|
||||
"no-queued-posts": "В опашката за публикации няма нищо.",
|
||||
"no-single-post": "Темата или публикацията, която търсите, вече не се намира в опашката. Вероятно или е била одобрена, или изтрита.",
|
||||
"enabling-help": "За да включите тази функционалност, идете в <a href=\"%1\">Настройки → Публикуване → Опашка за публикации</a> и включете <strong>Опашката за публикации</strong>.",
|
||||
"back-to-list": "Назад към Опашката за публикации",
|
||||
"description": "Няма публикации в опашката. <br> За да включите тази функционалност, идете в <a href=\"%1\">Настройки → Публикуване → Опашка за публикации</a> и включете <strong>Опашката за публикации</strong>.",
|
||||
"user": "Потребител",
|
||||
"when": "Кога",
|
||||
"category": "Категория",
|
||||
"title": "Заглавие",
|
||||
"content": "Съдържание",
|
||||
@@ -23,7 +19,6 @@
|
||||
"notify": "Известяване",
|
||||
"notify-user": "Известяване на потребителя",
|
||||
"confirm-reject": "Искате ли да отхвърлите тази публикация?",
|
||||
"confirm-remove": "Искате ли да премахнете тази публикация?",
|
||||
"bulk-actions": "Групови действия",
|
||||
"accept-all": "Приемане на всички",
|
||||
"accept-selected": "Приемане на избраните",
|
||||
@@ -31,10 +26,6 @@
|
||||
"reject-all-confirm": "Наистина ли искате да отхвърлите всички публикации?",
|
||||
"reject-selected": "Отхвърляне на избраните",
|
||||
"reject-selected-confirm": "Наистина ли искате да отхвърлите %1 избрани публикации?",
|
||||
"remove-all": "Премахване на всички",
|
||||
"remove-all-confirm": "Наистина ли искате да премахнете всички публикации?",
|
||||
"remove-selected": "Премахване на избраните",
|
||||
"remove-selected-confirm": "Наистина ли искате да премахнете избраните %1 публикации?",
|
||||
"bulk-accept-success": "Одобрени публикации: %1",
|
||||
"bulk-reject-success": "Отхвърлени публикации: %1"
|
||||
}
|
||||
@@ -7,5 +7,13 @@
|
||||
"alltime": "Цялото време",
|
||||
"no_recent_topics": "Няма скорошни теми.",
|
||||
"no_popular_topics": "Няма популярни теми.",
|
||||
"load-new-posts": "Зареждане на новите публикации"
|
||||
"there-is-a-new-topic": "Има нова тема.",
|
||||
"there-is-a-new-topic-and-a-new-post": "Има нова тема и нова публикация.",
|
||||
"there-is-a-new-topic-and-new-posts": "Има нова тема и %1 нови публикации.",
|
||||
"there-are-new-topics": "Има %1 нови теми.",
|
||||
"there-are-new-topics-and-a-new-post": "Има %1 нови теми и нова публикация.",
|
||||
"there-are-new-topics-and-new-posts": "Има %1 нови теми и %2 нови публикации.",
|
||||
"there-is-a-new-post": "Има нова публикация",
|
||||
"there-are-new-posts": "Има %1 нови публикации.",
|
||||
"click-here-to-reload": "Натиснете тук, за да презаредите."
|
||||
}
|
||||
@@ -1,6 +1,5 @@
|
||||
{
|
||||
"register": "Регистрация",
|
||||
"already-have-account": "Вече имате акаунт?",
|
||||
"cancel_registration": "Отказ от регистриране",
|
||||
"help.email": "По подразбиране, Вашата е-поща ще бъде скрита за останалите.",
|
||||
"help.username_restrictions": "Уникално потребителско име с дължина между %1 и %2 символа. Другите ще могат да Ви споменават чрез @<span id='yourUsername'>потребител</span>.",
|
||||
|
||||
@@ -1,41 +1,21 @@
|
||||
{
|
||||
"type-to-search": "Пишете тук за търсене",
|
||||
"results_matching": "%1 резултат(а), отговарящи на „%2“, (%3 секунди)",
|
||||
"no-matches": "Няма съвпадения",
|
||||
"advanced-search": "Разширено търсене",
|
||||
"in": "В",
|
||||
"in-titles": "В заглавията",
|
||||
"in-titles-posts": "В заглавията и публикациите",
|
||||
"in-posts": "В публикациите",
|
||||
"in-categories": "В категориите",
|
||||
"in-users": "В потребителите",
|
||||
"in-tags": "В етикетите",
|
||||
"categories": "Категории",
|
||||
"all-categories": "Всички категории",
|
||||
"categories-x": "Категории: %1",
|
||||
"categories-watched-categories": "Категории: Следени категории",
|
||||
"type-a-category": "Въведете категория",
|
||||
"tags": "Етикети",
|
||||
"tags-x": "Етикети: %1",
|
||||
"type-a-tag": "Въведете етикет",
|
||||
"match-words": "Съвпадение на думите",
|
||||
"match-all-words": "Съвпадение на всички думи",
|
||||
"match-any-word": "Съвпадение на някоя дума",
|
||||
"titles": "Заглавия",
|
||||
"titles-posts": "Заглавия и публикации",
|
||||
"match-words": "Съвпадащи думи",
|
||||
"all": "Всички",
|
||||
"any": "Която и да е",
|
||||
"posted-by": "Публикувано от",
|
||||
"posted-by-usernames": "Публикувано от: %1",
|
||||
"type-a-username": "Въведете потребителско име",
|
||||
"in-categories": "В категории",
|
||||
"search-child-categories": "Претърсване на подкатегориите",
|
||||
"has-tags": "Има етикети",
|
||||
"reply-count": "Брой на отговорите",
|
||||
"replies": "Отговори",
|
||||
"replies-atleast-count": "Отговори: Поне %1",
|
||||
"replies-atmost-count": "Отговори: Не повече от %1",
|
||||
"at-least": "Поне",
|
||||
"at-most": "Най-много",
|
||||
"relevance": "Уместност",
|
||||
"time": "Време",
|
||||
"post-time": "Време на публикуване",
|
||||
"votes": "Гласове",
|
||||
"newer-than": "По-нови от",
|
||||
@@ -48,22 +28,7 @@
|
||||
"three-months": "Три месеца",
|
||||
"six-months": "Шест месеца",
|
||||
"one-year": "Една година",
|
||||
"time-newer-than-86400": "Време: От вчера досега",
|
||||
"time-older-than-86400": "Време: Преди вчера",
|
||||
"time-newer-than-604800": "Време: По-нови от една седмица",
|
||||
"time-older-than-604800": "Време: По-стари от една седмица",
|
||||
"time-newer-than-1209600": "Време: По-нови от две седмици",
|
||||
"time-older-than-1209600": "Време: По-стари от две седмици",
|
||||
"time-newer-than-2592000": "Време: По-нови от един месец",
|
||||
"time-older-than-2592000": "Време: По-стари от един месец",
|
||||
"time-newer-than-7776000": "Време: По-нови от три месеца",
|
||||
"time-older-than-7776000": "Време: По-стари от три месеца",
|
||||
"time-newer-than-15552000": "Време: По-нови от шест месеца",
|
||||
"time-older-than-15552000": "Време: По-стари от шест месеца",
|
||||
"time-newer-than-31104000": "Време: По-нови от една година",
|
||||
"time-older-than-31104000": "Време: По-стари от една година",
|
||||
"sort-by": "Подреждане по",
|
||||
"sort": "Подреждане",
|
||||
"last-reply-time": "Време на последния отговор",
|
||||
"topic-title": "Заглавие на темата",
|
||||
"topic-votes": "Гласувания за темата",
|
||||
@@ -74,36 +39,11 @@
|
||||
"category": "Категория",
|
||||
"descending": "В низходящ ред",
|
||||
"ascending": "Във възходящ ред",
|
||||
"sort-by-relevance-desc": "Подреждане по: Съответствие, в низходящ ред",
|
||||
"sort-by-relevance-asc": "Подреждане по: Съответствие, във възходящ ред",
|
||||
"sort-by-timestamp-desc": "Подреждане по: Време на публикуване, в низходящ ред",
|
||||
"sort-by-timestamp-asc": "Подреждане по: Време на публикуване, във възходящ ред",
|
||||
"sort-by-votes-desc": "Подреждане по: Брой гласове, в низходящ ред",
|
||||
"sort-by-votes-asc": "Подреждане по: Брой гласове, във възходящ ред",
|
||||
"sort-by-topic.lastposttime-desc": "Подреждане по: Време на последния отговор, в низходящ ред",
|
||||
"sort-by-topic.lastposttime-asc": "Подреждане по: Време на последния отговор, във възходящ ред",
|
||||
"sort-by-topic.title-desc": "Подреждане по: Заглавие на темата, в низходящ ред",
|
||||
"sort-by-topic.title-asc": "Подреждане по: Заглавие на темата, във възходящ ред",
|
||||
"sort-by-topic.postcount-desc": "Подреждане по: Брой отговори, в низходящ ред",
|
||||
"sort-by-topic.postcount-asc": "Подреждане по: Брой отговори, във възходящ ред",
|
||||
"sort-by-topic.viewcount-desc": "Подреждане по: Брой преглеждания, в низходящ ред",
|
||||
"sort-by-topic.viewcount-asc": "Подреждане по: Брой преглеждания, във възходящ ред",
|
||||
"sort-by-topic.votes-desc": "Подреждане по: Брой гласове за темата, в низходящ ред",
|
||||
"sort-by-topic.votes-asc": "Подреждане по: Брой гласове за темата, във възходящ ред",
|
||||
"sort-by-topic.timestamp-desc": "Подреждане по: Начална дата на темата, в низходящ ред",
|
||||
"sort-by-topic.timestamp-asc": "Подреждане по: Начална дата на темата, във възходящ ред",
|
||||
"sort-by-user.username-desc": "Подреждане по: Потребителско име, в низходящ ред",
|
||||
"sort-by-user.username-asc": "Подреждане по: Потребителско име, във възходящ ред",
|
||||
"sort-by-category.name-desc": "Подреждане по: Категория, в низходящ ред",
|
||||
"sort-by-category.name-asc": "Подреждане по: Категория, във възходящ ред",
|
||||
"save": "Запазване",
|
||||
"save-preferences": "Запазване на предпочитанията",
|
||||
"clear-preferences": "Изчистване на предпочитанията",
|
||||
"search-preferences-saved": "Предпочитанията за търсене бяха запазени",
|
||||
"search-preferences-cleared": "Предпочитанията за търсене бяха изчистени",
|
||||
"show-results-as": "Показване на резултатите като",
|
||||
"show-results-as-topics": "Показване на резултатите като теми",
|
||||
"show-results-as-posts": "Показване на резултатите като публикации",
|
||||
"see-more-results": "Показване на още резултати (%1)",
|
||||
"search-in-category": "Търсене в „%1“"
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
{
|
||||
"sign-in-with-twitter": "Вписване с Twitter",
|
||||
"sign-up-with-twitter": "Регистриране с Twitter",
|
||||
"sign-in-with-github": "Вписване с Github",
|
||||
"sign-up-with-github": "Регистриране с Github",
|
||||
"sign-in-with-google": "Вписване с Google",
|
||||
"sign-up-with-google": "Регистриране с Google",
|
||||
"log-in-with-facebook": "Вписване с Facebook",
|
||||
"continue-with-facebook": "Продължаване с Facebook"
|
||||
}
|
||||
@@ -1,11 +1,8 @@
|
||||
{
|
||||
"all-tags": "Всички етикети",
|
||||
"no_tag_topics": "Няма теми с този етикет.",
|
||||
"no-tags-found": "Няма намерени етикети",
|
||||
"tags": "Етикети",
|
||||
"enter_tags_here": "Тук въведете етикети, всеки между %1 и %2 знака.",
|
||||
"enter_tags_here_short": "Въведете етикети...",
|
||||
"no_tags": "Все още няма етикети.",
|
||||
"select_tags": "Изберете етикети",
|
||||
"tag-whitelist": "Списък от разрешени етикети"
|
||||
"select_tags": "Изберете етикети"
|
||||
}
|
||||
@@ -1,15 +0,0 @@
|
||||
{
|
||||
"skins": "Облици",
|
||||
"collapse": "Свиване",
|
||||
"expand": "Разгъване",
|
||||
"login-register-to-search": "Впишете се или се регистрирайте, за да можете да търсите.",
|
||||
"settings.title": "Настройки на темата",
|
||||
"settings.enableQuickReply": "Включване на бързите отговори",
|
||||
"settings.centerHeaderElements": "Центриране на заглавните елементи",
|
||||
"settings.mobileTopicTeasers": "Показване на резюмета на темите на мобилни устройства",
|
||||
"settings.stickyToolbar": "Статична лента с инструменти",
|
||||
"settings.stickyToolbar.help": "Лентата с инструменти в страниците с теми и категории ще стои винаги в горния край на страницата",
|
||||
"settings.autohideBottombar": "Автоматично скриване на долната лента",
|
||||
"settings.autohideBottombar.help": "В изгледа за мобилни устройства долната лента ще се скрива, когато страницата се превърта надолу",
|
||||
"settings.chatModals": "Включване на прозорците за разговори"
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
{
|
||||
"settings.title": "Настройки на темата",
|
||||
"settings.intro": "Тук може да промените настройките на темата. Тези настройки се съхраняват отделно на всяко устройство, така че може да имате различни настройки на различните си устройства (телефон, таблет, настолен компютър и т.н.)",
|
||||
"settings.mobile-menu-side": "Превключване на страната, от която да бъде всяко меню на мобилно устройство",
|
||||
"settings.autoHidingNavbar": "Автоматично скриване на навигационната лента при превъртане",
|
||||
"settings.autoHidingNavbar-xs": "Много малки екрани (напр. телефон в портретна ориентация)",
|
||||
"settings.autoHidingNavbar-sm": "По-малки екрани (напр. телефони, някои таблети)",
|
||||
"settings.autoHidingNavbar-md": "Средно големи екрани (напр. таблети в пейзажна ориентация)",
|
||||
"settings.autoHidingNavbar-lg": "По-големи екрани (напр. лаптопи и настолни компютри)"
|
||||
}
|
||||
@@ -36,34 +36,19 @@
|
||||
"scheduled": "Насрочена",
|
||||
"moved": "Преместена",
|
||||
"moved-from": "Преместена от %1",
|
||||
"copy-code": "Копиране на кода",
|
||||
"copy-ip": "Копиране на IP адреса",
|
||||
"ban-ip": "Блокиране на IP адреса",
|
||||
"view-history": "История на редакциите",
|
||||
"wrote-ago": "писа <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"wrote-on": "писа на <a href=\"%1\" class=\"timeago text-muted\" title=\"%2\"></a>",
|
||||
"replied-to-user-ago": "отговори на <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": "отговори на <a component=\"post/parent\" data-topid=\"%1\" href=\"%2\">%3</a> на <a hrf=\"%4\" class=\"timeago text-muted\" title=\"%5\"></a>",
|
||||
"user-locked-topic-ago": "%1 заключи тази тема %2",
|
||||
"user-locked-topic-on": "%1 заключи тази тема на %2",
|
||||
"user-unlocked-topic-ago": "%1 отключи тази тема %2",
|
||||
"user-unlocked-topic-on": "%1 отключи тази тема на %2",
|
||||
"user-pinned-topic-ago": "%1 закачи тази тема %2",
|
||||
"user-pinned-topic-on": "%1 закачи тази тема на %2",
|
||||
"user-unpinned-topic-ago": "%1 откачи тази тема %2",
|
||||
"user-unpinned-topic-on": "%1 откачи тази тема на %2",
|
||||
"user-deleted-topic-ago": "%1 изтри тази тема %2",
|
||||
"user-deleted-topic-on": "%1 изтри тази тема на %2",
|
||||
"user-restored-topic-ago": "%1 възстанови тази тема %2",
|
||||
"user-restored-topic-on": "%1 възстанови тази тема на %2",
|
||||
"user-moved-topic-from-ago": "%1 премести тази тема от %2 %3",
|
||||
"user-moved-topic-from-on": "%1 премести тази тема от %2 на %3",
|
||||
"user-queued-post-ago": "%1 добави тази публикация в <a href=\"%2\">опашката за одобрение</a> %3",
|
||||
"user-queued-post-on": "%1 добави тази публикация в <a href=\"%2\">опашката</a> за одобрение на %3",
|
||||
"user-referenced-topic-ago": "%1 <a href=\"%2\">направи препратка</a> към тази тема %3",
|
||||
"user-referenced-topic-on": "%1 <a href=\"%2\">направи препратка</a> към тази тема на %3",
|
||||
"user-forked-topic-ago": "%1 <a href=\"%2\">раздели</a> тази тема %3",
|
||||
"user-forked-topic-on": "%1 <a href=\"%2\">раздели</a> тази тема на %3",
|
||||
"locked-by": "Заключена от",
|
||||
"unlocked-by": "Отключена от",
|
||||
"pinned-by": "Закачена от",
|
||||
"unpinned-by": "Откачена от",
|
||||
"deleted-by": "Изтрита от",
|
||||
"restored-by": "Възстановена от",
|
||||
"moved-from-by": "Преместена от %1 от",
|
||||
"queued-by": "Публикацията е добавена в опашката за одобрение →",
|
||||
"backlink": "Спомената от",
|
||||
"forked-by": "Разделена от",
|
||||
"bookmark_instructions": "Щракнете тук, за да се върнете към последно прочетената публикация в тази тема.",
|
||||
"flag-post": "Докладване на тази публикация",
|
||||
"flag-user": "Докладване на този потребител",
|
||||
@@ -102,7 +87,6 @@
|
||||
"thread_tools.change_owner": "Промяна на собственика",
|
||||
"thread_tools.select_category": "Избиране на категория",
|
||||
"thread_tools.fork": "Разделяне на темата",
|
||||
"thread_tools.tag": "Поставяне на етикет на темата",
|
||||
"thread_tools.delete": "Изтриване на темата",
|
||||
"thread_tools.delete-posts": "Изтриване на публикациите",
|
||||
"thread_tools.delete_confirm": "Наистина ли искате да изтриете тази тема?",
|
||||
@@ -111,7 +95,7 @@
|
||||
"thread_tools.purge": "Изчистване на темата",
|
||||
"thread_tools.purge_confirm": "Наистина ли искате да изчистите тази тема?",
|
||||
"thread_tools.merge_topics": "Сливане на темите",
|
||||
"thread_tools.merge": "Сливане на темата",
|
||||
"thread_tools.merge": "Сливане",
|
||||
"topic_move_success": "Темата ще бъде преместена в „%1“ след малко. Натиснете тук, за да отмените преместването.",
|
||||
"topic_move_multiple_success": "Темите ще бъдат преместени в „%1“ след малко. Натиснете тук, за да отмените преместването.",
|
||||
"topic_move_all_success": "Всички теми ще бъдат преместени в „%1“ след малко. Натиснете тук, за да отмените преместването.",
|
||||
@@ -129,7 +113,6 @@
|
||||
"bookmark": "Отметка",
|
||||
"bookmarks": "Отметки",
|
||||
"bookmarks.has_no_bookmarks": "Все още не сте си запазвали отметки към никакви публикации.",
|
||||
"copy-permalink": "Копиране на постоянна връзка",
|
||||
"loading_more_posts": "Зареждане на още публикации",
|
||||
"move_topic": "Преместване на темата",
|
||||
"move_topics": "Преместване на темите",
|
||||
@@ -137,7 +120,7 @@
|
||||
"post_moved": "Публикацията беше преместена!",
|
||||
"fork_topic": "Разделяне на темата",
|
||||
"enter-new-topic-title": "Въведете заглавието на новата тема",
|
||||
"fork_topic_instruction": "Щракнете върху публикациите, които искате да разделите, въведете име за новата тема, и натиснете „Разделяне на темата“",
|
||||
"fork_topic_instruction": "Натиснете публикациите, които искате да отделите",
|
||||
"fork_no_pids": "Няма избрани публикации!",
|
||||
"no-posts-selected": "Няма избрани публикации!",
|
||||
"x-posts-selected": "Избрани публикации: %1",
|
||||
@@ -152,15 +135,12 @@
|
||||
"merge-new-title-for-topic": "Ново заглавие за темата",
|
||||
"topic-id": "Ид. на темата",
|
||||
"move_posts_instruction": "Щракнете върху публикациите, които искате да преместите, а след това въведете ид. на тема или отидете в целевата тема",
|
||||
"move_topic_instruction": "Изберете целевата категория и натиснете „Преместване“",
|
||||
"change_owner_instruction": "Натиснете публикациите, които искате да прехвърлите на друг потребител",
|
||||
"composer.title_placeholder": "Въведете заглавието на темата си тук...",
|
||||
"composer.handle_placeholder": "Въведете името тук",
|
||||
"composer.hide": "Скриване",
|
||||
"composer.discard": "Отхвърляне",
|
||||
"composer.submit": "Публикуване",
|
||||
"composer.additional-options": "Допълнителни настройки",
|
||||
"composer.post-later": "Публикуване по-късно",
|
||||
"composer.schedule": "Насрочване",
|
||||
"composer.replying_to": "Отговор на %1",
|
||||
"composer.new_topic": "Нова тема",
|
||||
@@ -203,7 +183,5 @@
|
||||
"last-post": "Последна публикация",
|
||||
"go-to-my-next-post": "Към следващата ми публикация",
|
||||
"no-more-next-post": "Нямате повече публикации в тази тема",
|
||||
"post-quick-reply": "Бърз отговор",
|
||||
"navigator.index": "Публикация %1 от %2",
|
||||
"navigator.unread": "%1 непрочетени"
|
||||
"post-quick-reply": "Пускане на бърза публикация"
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user