diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml
index ee3150384f..67aee91b9a 100644
--- a/.github/workflows/docker.yml
+++ b/.github/workflows/docker.yml
@@ -55,7 +55,7 @@ jobs:
- name: Cache node_modules
id: cache-node-modules
- uses: actions/cache@v3
+ uses: actions/cache@v4
with:
path: var-cache-node-modules
key: var-cache-node-modules-${{ hashFiles('Dockerfile', 'install/package.json') }}
diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml
index 7d430dd43f..c90428cbb2 100644
--- a/.github/workflows/test.yaml
+++ b/.github/workflows/test.yaml
@@ -63,7 +63,7 @@ jobs:
- 5432:5432
redis:
- image: 'redis:7.2.3'
+ image: 'redis:7.2.5'
# Set health checks to wait until redis has started
options: >-
--health-cmd "redis-cli ping"
diff --git a/CHANGELOG.md b/CHANGELOG.md
index cf08b1240e..30c9a42afd 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,257 @@
+#### v3.8.1 (2024-05-15)
+
+##### Chores
+
+* incrementing version number - v3.8.0 (e228a6eb)
+* update changelog for v3.8.0 (2ef2750d)
+* incrementing version number - v3.7.5 (6882894d)
+* incrementing version number - v3.7.4 (6678744c)
+* incrementing version number - v3.7.3 (2d62b6f6)
+* incrementing version number - v3.7.2 (cc257e7e)
+* incrementing version number - v3.7.1 (712365a5)
+* incrementing version number - v3.7.0 (9a6153d7)
+* incrementing version number - v3.6.7 (86a17e38)
+* incrementing version number - v3.6.6 (6604bf37)
+* incrementing version number - v3.6.5 (6c653625)
+* incrementing version number - v3.6.4 (83d131b4)
+* incrementing version number - v3.6.3 (fc7d2bfd)
+* incrementing version number - v3.6.2 (0f577a57)
+* incrementing version number - v3.6.1 (f1a69468)
+* incrementing version number - v3.6.0 (4cdf85f8)
+* incrementing version number - v3.5.3 (ed0e8783)
+* incrementing version number - v3.5.2 (52fbb2da)
+* incrementing version number - v3.5.1 (4c543488)
+* incrementing version number - v3.5.0 (d06fb4f0)
+* incrementing version number - v3.4.3 (5c984250)
+* incrementing version number - v3.4.2 (3f0dac38)
+* incrementing version number - v3.4.1 (01e69574)
+* incrementing version number - v3.4.0 (fd9247c5)
+* incrementing version number - v3.3.9 (5805e770)
+* incrementing version number - v3.3.8 (a5603565)
+* incrementing version number - v3.3.7 (b26f1744)
+* incrementing version number - v3.3.6 (7fb38792)
+* incrementing version number - v3.3.4 (a67f84ea)
+* incrementing version number - v3.3.3 (f94d239b)
+* incrementing version number - v3.3.2 (ec9dac97)
+* incrementing version number - v3.3.1 (151cc68f)
+* incrementing version number - v3.3.0 (fc1ad70f)
+* incrementing version number - v3.2.3 (b06d3e63)
+* incrementing version number - v3.2.2 (758ecfcd)
+* incrementing version number - v3.2.1 (20145074)
+* incrementing version number - v3.2.0 (9ecac38e)
+* incrementing version number - v3.1.7 (0b4e81ab)
+* incrementing version number - v3.1.6 (b3a3b130)
+* incrementing version number - v3.1.5 (ec19343a)
+* incrementing version number - v3.1.4 (2452783c)
+* incrementing version number - v3.1.3 (3b4e9d3f)
+* incrementing version number - v3.1.2 (40fa3489)
+* incrementing version number - v3.1.1 (40250733)
+* incrementing version number - v3.1.0 (0cb386bd)
+* incrementing version number - v3.0.1 (26f6ea49)
+* incrementing version number - v3.0.0 (224e08cd)
+
+##### Bug Fixes
+
+* wrong mention version (1d1f499b)
+
+##### Tests
+
+* use node 20 (a40f54aa)
+* remove node 18 (6bd22e53)
+
+#### v3.8.0 (2024-05-15)
+
+##### Chores
+
+* **deps:**
+ * update redis docker tag to v7.2.4 (#12272) (7a8116a4)
+ * update actions/cache action to v4 (#12563) (88ff9f9d)
+ * update postgres docker tag to v16.3 (#12560) (339f6267)
+ * update dependency sass-embedded to v1.77.1 (#12565) (07160062)
+ * update postgres docker tag to v16.3 (#12555) (b8a52863)
+ * update dependency sass-embedded to v1.77.0 (#12548) (0fa11561)
+ * update coverallsapp/github-action action to v2.3.0 (#12554) (b4023ff9)
+ * update dependency sass-embedded to v1.76.0 (#12542) (7ee42724)
+ * update commitlint monorepo to v19.3.0 (#12526) (dad57e04)
+ * update commitlint monorepo to v19.2.2 (#12515) (97519ca4)
+ * update dependency smtp-server to v3.13.4 (#12516) (4c468b5c)
+ * update dependency sass-embedded to v1.75.0 (#12499) (a2229e71)
+ * update dependency sass-embedded to v1.74.1 (#12468) (97a649e3)
+ * update dependency mocha to v10.4.0 (#12445) (449c0fcd)
+ * update dependency @commitlint/cli to v19.2.1 (#12420) (dc19c840)
+ * update dependency @commitlint/cli to v19.2.0 (#12412) (41212e8f)
+ * update dependency sass-embedded to v1.72.0 (#12406) (6d62e592)
+ * update commitlint monorepo to v19.1.0 (#12403) (3d095a6b)
+* up themes (1e3a321d)
+* incrementing version number - v3.7.5 (6882894d)
+* update changelog for v3.7.5 (febeede5)
+* incrementing version number - v3.7.4 (6678744c)
+* incrementing version number - v3.7.3 (2d62b6f6)
+* incrementing version number - v3.7.2 (cc257e7e)
+* up harmony (80a1a0e0)
+* up harmony (1a000eae)
+* incrementing version number - v3.7.1 (712365a5)
+* incrementing version number - v3.7.0 (9a6153d7)
+* incrementing version number - v3.6.7 (86a17e38)
+* incrementing version number - v3.6.6 (6604bf37)
+* incrementing version number - v3.6.5 (6c653625)
+* incrementing version number - v3.6.4 (83d131b4)
+* incrementing version number - v3.6.3 (fc7d2bfd)
+* incrementing version number - v3.6.2 (0f577a57)
+* incrementing version number - v3.6.1 (f1a69468)
+* incrementing version number - v3.6.0 (4cdf85f8)
+* incrementing version number - v3.5.3 (ed0e8783)
+* incrementing version number - v3.5.2 (52fbb2da)
+* incrementing version number - v3.5.1 (4c543488)
+* incrementing version number - v3.5.0 (d06fb4f0)
+* incrementing version number - v3.4.3 (5c984250)
+* incrementing version number - v3.4.2 (3f0dac38)
+* incrementing version number - v3.4.1 (01e69574)
+* incrementing version number - v3.4.0 (fd9247c5)
+* incrementing version number - v3.3.9 (5805e770)
+* incrementing version number - v3.3.8 (a5603565)
+* incrementing version number - v3.3.7 (b26f1744)
+* incrementing version number - v3.3.6 (7fb38792)
+* incrementing version number - v3.3.4 (a67f84ea)
+* incrementing version number - v3.3.3 (f94d239b)
+* incrementing version number - v3.3.2 (ec9dac97)
+* incrementing version number - v3.3.1 (151cc68f)
+* incrementing version number - v3.3.0 (fc1ad70f)
+* incrementing version number - v3.2.3 (b06d3e63)
+* incrementing version number - v3.2.2 (758ecfcd)
+* incrementing version number - v3.2.1 (20145074)
+* incrementing version number - v3.2.0 (9ecac38e)
+* incrementing version number - v3.1.7 (0b4e81ab)
+* incrementing version number - v3.1.6 (b3a3b130)
+* incrementing version number - v3.1.5 (ec19343a)
+* incrementing version number - v3.1.4 (2452783c)
+* incrementing version number - v3.1.3 (3b4e9d3f)
+* incrementing version number - v3.1.2 (40fa3489)
+* incrementing version number - v3.1.1 (40250733)
+* incrementing version number - v3.1.0 (0cb386bd)
+* incrementing version number - v3.0.1 (26f6ea49)
+* incrementing version number - v3.0.0 (224e08cd)
+* **i18n:**
+ * fallback strings for new resources: nodebb.flags, nodebb.user (19f8a77c)
+ * fallback strings for new resources: nodebb.user (7ad477af)
+ * fallback strings for new resources: nodebb.admin-settings-navigation (18eec147)
+ * fallback strings for new resources: nodebb.admin-advanced-events (213db951)
+ * fallback strings for new resources: nodebb.admin-manage-users (43f52737)
+
+##### New Features
+
+* track uid for email/username changes, closes #12454 (325d00ea)
+* closes #12477, allow editing moderation notes (af205cc4)
+* parse moderation notes as markdown (7d24b04b)
+* closes #12490, show profile flags on account info page (b429045f)
+* closes #12491, add unban & unmute history (985663fa)
+* new client-side hook to allow plugins to modify relogin url (c778f6eb)
+* closes #12453, filter events by user/group (4030f18a)
+* move all user profile pics to folder, closes #12449 (#12450) (8f9ac5c1)
+* allow customizing uploads.upload socket methods (dc67f54e)
+* allow custom fields in user csv export, closes #12401 (83ca23ca)
+
+##### Bug Fixes
+
+* **deps:**
+ * update dependency ace-builds to v1.33.2 (#12572) (19602dcd)
+ * update dependency esbuild to v0.21.2 (#12569) (dc4f32af)
+ * update dependency rimraf to v5.0.7 (#12568) (035ced85)
+ * update dependency sass to v1.77.1 (#12566) (7a64410a)
+ * update dependency rimraf to v5.0.6 (#12562) (185d61fc)
+ * update dependency validator to v13.12.0 (#12556) (7a009445)
+ * update dependency sass to v1.77.0 (#12550) (d3840280)
+ * update dependency mongodb to v6.6.1 (#12547) (751a143e)
+ * update dependency esbuild to v0.21.1 (#12549) (ed07cfcc)
+ * update dependency semver to v7.6.2 (#12552) (5264deca)
+ * update dependency mongodb to v6.6.0 (#12544) (4813772c)
+ * update dependency nodebb-plugin-composer-default to v10.2.35 (#12546) (8fcfb181)
+ * update dependency sass to v1.76.0 (#12541) (8f60603b)
+ * update dependency tough-cookie to v4.1.4 (#12540) (ad708c9f)
+ * update dependency lru-cache to v10.2.2 (#12532) (c036786c)
+ * update dependency jquery-ui to v1.13.3 (#12534) (3f62b892)
+ * update dependency nodebb-widget-essentials to v7.0.16 (#12535) (d5bfe32e)
+ * update dependency nodebb-plugin-composer-default to v10.2.34 (#12530) (bc51968e)
+ * update dependency ace-builds to v1.33.1 (#12527) (18a843bc)
+ * update fontsource monorepo (#12523) (bde9136b)
+ * update dependency ipaddr.js to v2.2.0 (#12522) (d6d0ebd5)
+ * update dependency cropperjs to v1.6.2 (#12524) (5e7ec5b6)
+ * update dependency ioredis to v5.4.1 (#12520) (66a35490)
+ * update dependency ioredis to v5.4.0 (#12519) (da0888e6)
+ * update dependency nodebb-plugin-spam-be-gone to v2.2.2 (#12518) (5b4471bf)
+ * update dependency nodebb-plugin-emoji to v5.1.15 (#12517) (20f8ba78)
+ * update dependency nodebb-theme-harmony to v1.2.49 (#12497) (c4cb9d36)
+ * update dependency nodebb-plugin-mentions to v4.5.2 (#12470) (37bdf753)
+ * update dependency ace-builds to v1.33.0 (#12501) (83a932e6)
+ * update dependency sass to v1.75.0 (#12500) (f5c3d4e1)
+ * update dependency nodebb-theme-harmony to v1.2.47 (#12487) (2bcd5239)
+ * update dependency cron to v3.1.7 (#12484) (6237d5fe)
+ * update dependency workerpool to v9.1.1 (#12475) (b6193629)
+ * update dependency nodebb-theme-persona to v13.3.13 (#12479) (01b3a06a)
+ * update dependency nodebb-theme-harmony to v1.2.46 (#12478) (499514a8)
+ * update dependency nodebb-theme-persona to v13.3.12 (#12467) (0f209fa4)
+ * update dependency nodebb-theme-harmony to v1.2.45 (#12466) (1fef883b)
+ * update dependency sass to v1.74.1 (#12469) (8f771b6f)
+ * update dependency pg-cursor to v2.10.5 (#12462) (dde7a498)
+ * update dependency pg to v8.11.5 (#12461) (623ccc53)
+ * update dependency @fortawesome/fontawesome-free to v6.5.2 (#12460) (1953277b)
+ * update dependency nodebb-plugin-mentions to v4.4.3 (#12463) (d24c4148)
+ * update dependency pg to v8.11.4 (#12455) (a7d9811e)
+ * update dependency @fontsource/poppins to v5.0.13 (#12457) (5c214930)
+ * update dependency pg-cursor to v2.10.4 (#12456) (af10aaaa)
+ * update dependency ace-builds to v1.32.9 (#12451) (deacf366)
+ * update dependency express to v4.19.2 (#12441) (263ca1ca)
+ * update dependency winston to v3.13.0 (#12440) (08be8f3c)
+ * update dependency webpack to v5.91.0 (#12426) (ca82d020)
+ * update dependency ace-builds to v1.32.8 (#12439) (23f46345)
+ * update dependency sanitize-html to v2.13.0 (#12427) (2550f26f)
+ * update dependency postcss to v8.4.38 (#12429) (ace6f12f)
+ * update dependency express to v4.19.1 (#12425) (a27b999f)
+ * update dependency autoprefixer to v10.4.19 (#12428) (fa57b81f)
+ * update dependency nodebb-theme-lavender to v7.1.8 (15c7691c)
+ * update dependency nodebb-plugin-mentions to v4.4.2 (#12410) (a8b631dd)
+ * update dependency postcss to v8.4.37 (#12417) (9c91f093)
+ * update dependency nodemailer to v6.9.13 (#12424) (c7a506a8)
+ * update dependency nodebb-plugin-ntfy to v1.7.4 (#12414) (4e119783)
+ * update dependency esbuild to v0.20.2 (#12411) (93fb1e0f)
+ * update socket.io packages to v4.7.5 (#12409) (6a730312)
+ * update dependency @socket.io/redis-adapter to v8.3.0 (#12405) (05219412)
+ * update dependency sass to v1.72.0 (#12407) (89684786)
+ * update dependency mongodb to v6.5.0 (#12402) (b163264e)
+ * update dependency archiver to v7.0.1 (#12400) (817a5468)
+ * update dependency nodemailer to v6.9.12 (#12398) (27d5aaa5)
+ * update dependency nodebb-theme-harmony to v1.2.38 (#12397) (b9a1fc3f)
+ * update fontsource monorepo (#12390) (8d6ef3d5)
+ * update dependency nodebb-plugin-mentions to v4.4.1 (#12393) (4d18c38b)
+ * update dependency winston to v3.12.0 (#12391) (98ff47ec)
+* chat message search, closes #12571 (49a510e9)
+* chat message search, closes #12571 (d926d9dd)
+* some issues with "small" docker improvements (#12564) (bc807c46)
+* use reference object for post summary v3 api call (2a58d099)
+* unintentional object pollution by buildForSelectCategories (88a5dfb7)
+* getCategoryById to return shallow clone of object (dc35bf8b)
+* #12533, go to post after changing owner (983a35e6)
+* topic selection in merge (f2892385)
+* closes #12474, fix search dropdown on mobile for merge (ce03680f)
+* #12481, remove priv groups from groupslug:groupname mapping (#12482) (7033d11e)
+* bump 2factor (4d2c95ca)
+* date on upgrade script (73f98568)
+* use CategoryObject in admins-mods schema def (4da1e9c4)
+* missing uid for modify event, closes #12394 (7c37f32d)
+* **docker:** support all previously used env variables correctly (#12567) (995b2de5)
+
+##### Refactors
+
+* add missing form-label class (36016ee1)
+* use groupslug:groupname for search and acp page (ee5c021c)
+
+##### Tests
+
+* fix schema (5eb8c90b)
+* fix redis tests (57422420)
+* fix moderation note test (fed5165f)
+* add back timestamp (c73f759c)
+
#### v3.7.5 (2024-05-03)
##### Chores
diff --git a/docker-compose-pgsql.yml b/docker-compose-pgsql.yml
index 579bb70a44..ba40c112d7 100644
--- a/docker-compose-pgsql.yml
+++ b/docker-compose-pgsql.yml
@@ -14,7 +14,7 @@ services:
- ./install/docker/setup.json:/usr/src/app/setup.json
postgres:
- image: postgres:16.1-alpine
+ image: postgres:16.3-alpine
restart: unless-stopped
environment:
POSTGRES_USER: nodebb
@@ -24,12 +24,14 @@ services:
- postgres-data:/var/lib/postgresql/data
redis:
- image: redis:7.2.3-alpine
+ image: redis:7.2.5-alpine
restart: unless-stopped
command: ['redis-server', '--appendonly', 'yes', '--loglevel', 'warning']
# command: ["redis-server", "--save", "60", "1", "--loglevel", "warning"] # uncomment if you want to use snapshotting instead of AOF
volumes:
- redis-data:/data
+ profiles:
+ - redis
volumes:
postgres-data:
diff --git a/docker-compose-redis.yml b/docker-compose-redis.yml
index c6d543d7c1..3aed150f99 100644
--- a/docker-compose-redis.yml
+++ b/docker-compose-redis.yml
@@ -14,7 +14,7 @@ services:
- ./install/docker/setup.json:/usr/src/app/setup.json
redis:
- image: redis:7.2.3-alpine
+ image: redis:7.2.5-alpine
restart: unless-stopped
command: ['redis-server', '--appendonly', 'yes', '--loglevel', 'warning']
# command: ["redis-server", "--save", "60", "1", "--loglevel", "warning"] # uncomment if you want to use snapshotting instead of AOF
diff --git a/docker-compose.yml b/docker-compose.yml
index 871d24ff5c..a80ffda67c 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -26,12 +26,26 @@ services:
- mongo-data:/data/db
- ./install/docker/mongodb-user-init.js:/docker-entrypoint-initdb.d/user-init.js
redis:
- image: redis:7.2.3-alpine
+ image: redis:7.2.5-alpine
restart: unless-stopped
command: ['redis-server', '--appendonly', 'yes', '--loglevel', 'warning']
# command: ['redis-server', '--save', '60', '1', '--loglevel', 'warning'] # uncomment if you want to use snapshotting instead of AOF
volumes:
- redis-data:/data
+ profiles:
+ - redis
+
+ postgres:
+ image: postgres:16.1-alpine
+ restart: unless-stopped
+ environment:
+ POSTGRES_USER: nodebb
+ POSTGRES_PASSWORD: nodebb
+ POSTGRES_DB: nodebb
+ volumes:
+ - postgres-data:/var/lib/postgresql/data
+ profiles:
+ - postgres
volumes:
mongo-data:
@@ -48,6 +62,13 @@ volumes:
type: none
device: ./.docker/database/redis
+ postgres-data:
+ driver: local
+ driver_opts:
+ o: bind
+ type: none
+ device: ./.docker/database/postgresql/data
+
nodebb-build:
driver: local
driver_opts:
diff --git a/install/docker/entrypoint.sh b/install/docker/entrypoint.sh
index fd0359192c..dd17d707e7 100755
--- a/install/docker/entrypoint.sh
+++ b/install/docker/entrypoint.sh
@@ -7,7 +7,8 @@ set_defaults() {
export CONFIG_DIR="${CONFIG_DIR:-/opt/config}"
export CONFIG="$CONFIG_DIR/config.json"
export NODEBB_INIT_VERB="${NODEBB_INIT_VERB:-install}"
- export START_BUILD="${START_BUILD:-false}"
+ export NODEBB_BUILD_VERB="${NODEBB_BUILD_VERB:-build}"
+ export START_BUILD="${START_BUILD:-${FORCE_BUILD_BEFORE_START:-false}}"
export SETUP="${SETUP:-}"
export PACKAGE_MANAGER="${PACKAGE_MANAGER:-npm}"
export OVERRIDE_UPDATE_LOCK="${OVERRIDE_UPDATE_LOCK:-false}"
@@ -24,8 +25,13 @@ check_directory() {
}
fi
if [ ! -w "$dir" ]; then
- echo "Error: No write permission for directory $dir"
- exit 1
+ echo "Warning: No write permission for directory $dir, attempting to fix..."
+ chown -R $USER:$USER "$dir" || true # attempt to change ownership, do not exit on failure
+ chmod -R 760 "$dir" || true # attempt to change permissions, do not exit on failure
+ if [ ! -w "$dir" ]; then
+ echo "Error: No write permission for directory $dir. Exiting..."
+ exit 1
+ fi
fi
}
@@ -47,11 +53,11 @@ copy_or_link_files() {
esac
# Check if source and destination files are the same
- if [ "$(realpath "$src_dir/package.json")" != "$(realpath "$dest_dir/package.json")" ]; then
+ if [ "$(realpath "$src_dir/package.json")" != "$(realpath "$dest_dir/package.json")" ] || [ "$OVERRIDE_UPDATE_LOCK" = true ]; then
cp "$src_dir/package.json" "$dest_dir/package.json"
fi
- if [ "$(realpath "$src_dir/$lock_file")" != "$(realpath "$dest_dir/$lock_file")" ]; then
+ if [ "$(realpath "$src_dir/$lock_file")" != "$(realpath "$dest_dir/$lock_file")" ] || [ "$OVERRIDE_UPDATE_LOCK" = true ]; then
cp "$src_dir/$lock_file" "$dest_dir/$lock_file"
fi
@@ -97,7 +103,7 @@ build_forum() {
local config="$1"
local start_build="$2"
local package_hash=$(md5sum install/package.json | head -c 32)
- if [ package_hash = "$(cat $CONFIG_DIR/install_hash.md5)" ]; then
+ if [ "$package_hash" = "$(cat $CONFIG_DIR/install_hash.md5 || true)" ]; then
echo "package.json was updated. Upgrading..."
/usr/src/app/nodebb upgrade --config="$config" || {
echo "Failed to build NodeBB. Exiting..."
diff --git a/install/package.json b/install/package.json
index 5ca62fc15e..dfb71ed3f8 100644
--- a/install/package.json
+++ b/install/package.json
@@ -2,7 +2,7 @@
"name": "nodebb",
"license": "GPL-3.0",
"description": "NodeBB Forum",
- "version": "3.7.5",
+ "version": "3.8.1",
"homepage": "https://www.nodebb.org",
"repository": {
"type": "git",
@@ -34,7 +34,7 @@
"@fortawesome/fontawesome-free": "6.5.2",
"@isaacs/ttlcache": "1.4.1",
"@popperjs/core": "2.11.8",
- "ace-builds": "1.33.1",
+ "ace-builds": "1.33.2",
"archiver": "7.0.1",
"async": "3.2.5",
"autoprefixer": "10.4.19",
@@ -45,7 +45,7 @@
"bootstrap": "5.3.3",
"bootswatch": "5.3.3",
"chalk": "4.1.2",
- "chart.js": "4.4.2",
+ "chart.js": "4.4.3",
"cheerio": "^1.0.0-rc.12",
"cli-graph": "3.2.2",
"clipboard": "2.0.11",
@@ -64,7 +64,7 @@
"csrf-sync": "4.0.3",
"daemon": "1.1.0",
"diff": "5.2.0",
- "esbuild": "0.21.1",
+ "esbuild": "0.21.3",
"express": "4.19.2",
"express-session": "1.18.0",
"express-useragent": "1.0.15",
@@ -89,13 +89,13 @@
"lru-cache": "10.2.2",
"mime": "3.0.0",
"mkdirp": "3.0.1",
- "mongodb": "6.6.1",
+ "mongodb": "6.6.2",
"morgan": "1.10.0",
"mousetrap": "1.6.5",
"multiparty": "4.2.3",
"nconf": "0.12.1",
- "nodebb-plugin-2factor": "7.5.0",
- "nodebb-plugin-composer-default": "10.2.35",
+ "nodebb-plugin-2factor": "7.5.1",
+ "nodebb-plugin-composer-default": "10.2.36",
"nodebb-plugin-dbsearch": "6.2.3",
"nodebb-plugin-emoji": "5.1.15",
"nodebb-plugin-emoji-android": "4.0.0",
@@ -121,11 +121,11 @@
"progress-webpack-plugin": "1.0.16",
"prompt": "1.3.0",
"ioredis": "5.4.1",
- "rimraf": "5.0.6",
+ "rimraf": "5.0.7",
"rss": "1.2.2",
"rtlcss": "4.1.1",
"sanitize-html": "2.13.0",
- "sass": "1.77.1",
+ "sass": "1.77.2",
"semver": "7.6.2",
"serve-favicon": "2.5.0",
"sharp": "0.32.6",
@@ -173,7 +173,7 @@
"smtp-server": "3.13.4"
},
"optionalDependencies": {
- "sass-embedded": "1.77.1"
+ "sass-embedded": "1.77.2"
},
"resolutions": {
"*/jquery": "3.7.1"
diff --git a/public/language/fa-IR/admin/admin.json b/public/language/fa-IR/admin/admin.json
index 34435717b6..ebf14c7704 100644
--- a/public/language/fa-IR/admin/admin.json
+++ b/public/language/fa-IR/admin/admin.json
@@ -4,15 +4,15 @@
"acp-title": "%1 | کنترل پنل مدیر کل نودبیبی",
"settings-header-contents": "محتوا",
- "changes-saved": "Changes Saved",
- "changes-saved-message": "Your changes to the NodeBB configuration have been saved.",
+ "changes-saved": "تغییرات ذخیره شد",
+ "changes-saved-message": "تغییرات شما در پیکربندی NodeBB ذخیره شده است.",
"changes-not-saved": "تغییرات ذخیره نشد",
- "changes-not-saved-message": "NodeBB encountered a problem saving your changes. (%1)",
- "save-changes": "Save changes",
- "min": "Min:",
- "max": "Max:",
- "view": "View",
- "edit": "Edit",
- "add": "Add",
- "select-icon": "Select Icon"
+ "changes-not-saved-message": "NodeBB در ذخیره تغییرات شما با مشکل مواجه شد. (% 1)",
+ "save-changes": "ذخیره تغییرات",
+ "min": "کمترین:",
+ "max": "بیشترین:",
+ "view": "نمایش",
+ "edit": "ویرایش",
+ "add": "اضافه",
+ "select-icon": "انتخاب نقشک"
}
\ No newline at end of file
diff --git a/public/language/fa-IR/admin/advanced/cache.json b/public/language/fa-IR/admin/advanced/cache.json
index b0aa10e284..498b0ea71e 100644
--- a/public/language/fa-IR/admin/advanced/cache.json
+++ b/public/language/fa-IR/admin/advanced/cache.json
@@ -1,10 +1,10 @@
{
- "cache": "Cache",
- "post-cache": "کش دیدگاه ",
- "group-cache": "Group Cache",
- "local-cache": "Local Cache",
- "object-cache": "Object Cache",
+ "cache": "نهانگاه",
+ "post-cache": "نهانگاه دیدگاه ",
+ "group-cache": "نهانگاه گروه",
+ "local-cache": "نهانگاه محلی",
+ "object-cache": "شئ نهانگاه",
"percent-full": "%1% تمام شده",
- "post-cache-size": "سایز کش دیدگاه",
- "items-in-cache": "موارد موجود در کش"
+ "post-cache-size": "اندازه نهانگاه فرسته",
+ "items-in-cache": "موارد موجود در نهانگاه"
}
\ No newline at end of file
diff --git a/public/language/fa-IR/admin/advanced/database.json b/public/language/fa-IR/admin/advanced/database.json
index 7d609b872c..da700c60ae 100644
--- a/public/language/fa-IR/admin/advanced/database.json
+++ b/public/language/fa-IR/admin/advanced/database.json
@@ -2,51 +2,51 @@
"x-b": "%1 b",
"x-mb": "%1 mb",
"x-gb": "%1 gb",
- "uptime-seconds": "آپتایم در ثانیه",
- "uptime-days": "آپتایم در روز",
+ "uptime-seconds": "زمان بهکار در ثانیه",
+ "uptime-days": "زمان بهکار در روز",
"mongo": "MongoDB",
- "mongo.version": "ورژن پایگاه داده مونگو دیبی",
- "mongo.storage-engine": "سیستم ذخیره سازی",
+ "mongo.version": "نگارش پایگاه داده MongoDB",
+ "mongo.storage-engine": "سامانه ذخیره سازی",
"mongo.collections": "مجموعه ها",
"mongo.objects": "اشیا ",
- "mongo.avg-object-size": "میانگین سایز اشیا",
- "mongo.data-size": "سایز اطلاعات",
+ "mongo.avg-object-size": "میانگین اندازه اشیا",
+ "mongo.data-size": "انداره اطلاعات",
"mongo.storage-size": "اندازه محل ذخیره سازی",
"mongo.index-size": "اندازه شاخص",
- "mongo.file-size": "اندازه فایل",
+ "mongo.file-size": "اندازه پرونده",
"mongo.resident-memory": "حافظه مقیم",
"mongo.virtual-memory": "حافظۀ مجازی",
- "mongo.mapped-memory": "Mapped Memory",
+ "mongo.mapped-memory": "حافظه نقشه شده",
"mongo.bytes-in": "بایت های ورودی",
"mongo.bytes-out": "بایت های خروجی",
"mongo.num-requests": "تعداد درخواست ها",
- "mongo.raw-info": "اطلاعات پایه پایگاه داده مونگو دی بی",
- "mongo.unauthorized": "NodeBB نتوانست پرس و جوی آماری را از مونگو دی بی دریافت کند لطفا مطمئن شوید کاربر که NodeBB به وسیله آن به مونگو دیبی متصل شده است مجوز clusterMonitor را برای مدیر داشته باشد",
+ "mongo.raw-info": "اطلاعات پایه پایگاه داده MongoDB",
+ "mongo.unauthorized": "NodeBB نتوانست پرس و جوی آماری را ازMongoDB دریافت کند. لطفا مطمئن شوید کاربری که NodeBB به وسیله آن به MongoDB متصل شده است مجوز clusterMonitor را برای مدیر داشته باشد.",
- "redis": "ردیس",
- "redis.version": "ورژن ردیس",
+ "redis": "Redis",
+ "redis.version": "نگارش Redis",
"redis.keys": "کلید ها",
"redis.expires": "انقضا",
"redis.avg-ttl": "میانگین TTL",
- "redis.connected-clients": "کلاینت های متصل شده",
+ "redis.connected-clients": "کارخواه های متصل شده",
"redis.connected-slaves": "Connected Slaves",
- "redis.blocked-clients": "Blocked Clients",
- "redis.used-memory": "Used Memory",
+ "redis.blocked-clients": "کارخواه های مسدود شده",
+ "redis.used-memory": "حافظهی درحال استفاده",
"redis.memory-frag-ratio": "Memory Fragmentation Ratio",
- "redis.total-connections-recieved": "Total Connections Received",
- "redis.total-commands-processed": "Total Commands Processed",
- "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.total-connections-recieved": "کل اتصالات دریافت شده",
+ "redis.total-commands-processed": "کل دستورات پردازش شده",
+ "redis.iops": "عملیات در ثانیه",
+ "redis.iinput": "ورودی در ثانیه",
+ "redis.ioutput": "خروجی در ثانیه",
+ "redis.total-input": "کل ورودیها",
+ "redis.total-output": "کل خروجیها",
"redis.keyspace-hits": "Keyspace Hits",
"redis.keyspace-misses": "Keyspace Misses",
- "redis.raw-info": "Redis Raw Info",
+ "redis.raw-info": "اطلاعات خام Redis",
- "postgres": "Postgres",
- "postgres.version": "PostgreSQL Version",
- "postgres.raw-info": "Postgres Raw Info"
+ "postgres": "PostgreSQL",
+ "postgres.version": "نگارش PostgreSQL",
+ "postgres.raw-info": "اطلاعات خام PostgreSQL"
}
diff --git a/public/language/fa-IR/admin/advanced/errors.json b/public/language/fa-IR/admin/advanced/errors.json
index cd1e4793d8..54fa86fa3e 100644
--- a/public/language/fa-IR/admin/advanced/errors.json
+++ b/public/language/fa-IR/admin/advanced/errors.json
@@ -1,15 +1,15 @@
{
- "errors": "Errors",
+ "errors": "خطاها",
"figure-x": "Figure %1",
- "error-events-per-day": "%1 events per day",
- "error.404": "ارور 404 یافت نشد",
- "error.503": "ارور 503 سرویس دردسترس نیست",
- "manage-error-log": "مدیریت Error Log",
- "export-error-log": "Export Error Log (CSV)",
- "clear-error-log": "پاک کردن Error Log",
+ "error-events-per-day": "%1 رویداد ها در روز",
+ "error.404": "خطای 404 یافت نشد",
+ "error.503": "خطای 503 سرویس دردسترس نیست",
+ "manage-error-log": "مدیریت گذارش خطاها",
+ "export-error-log": "خروجی گرفتن از گذارش خطاها با قالب csv",
+ "clear-error-log": "پاک کردن گذارش خطاها",
"route": "مسیر",
"count": "شمارش",
- "no-routes-not-found": "ایول! بدون ارور 404 !",
- "clear404-confirm": "آیا از پاک کردن ارور های 404 اطمینان دارید؟",
- "clear404-success": "ارور های 404 پاک شدند"
+ "no-routes-not-found": "ایول! بدون خطای 404!",
+ "clear404-confirm": "آیا از پاک کردن خطا های 404 اطمینان دارید؟",
+ "clear404-success": "\"خطای های 404\" پاک شدند"
}
\ No newline at end of file
diff --git a/public/language/fa-IR/admin/advanced/events.json b/public/language/fa-IR/admin/advanced/events.json
index f2488c1306..df1381ab28 100644
--- a/public/language/fa-IR/admin/advanced/events.json
+++ b/public/language/fa-IR/admin/advanced/events.json
@@ -2,16 +2,16 @@
"events": "رویداد ها",
"no-events": "رویدادی موجود نیست",
"control-panel": "کنترل پنل رویداد ها",
- "delete-events": "Delete Events",
- "confirm-delete-all-events": "Are you sure you want to delete all logged events?",
- "filters": "Filters",
- "filters-apply": "Apply Filters",
- "filter-type": "Event Type",
- "filter-start": "Start Date",
- "filter-end": "End Date",
- "filter-user": "Filter by User",
- "filter-user.placeholder": "Type user name to filter...",
- "filter-group": "Filter by Group",
- "filter-group.placeholder": "Type group name to filter...",
- "filter-per-page": "Per Page"
+ "delete-events": "حذف رویداد ها",
+ "confirm-delete-all-events": "آیا مطمئن هستید که می خواهید همه رویدادهای ثبت شده را حذف کنید؟",
+ "filters": "پالایه ها",
+ "filters-apply": "اعمال پالایه ها",
+ "filter-type": "نوع رویداد",
+ "filter-start": "زمان شروع",
+ "filter-end": "تاریخ پایان",
+ "filter-user": "پالایه کردن بر اساس کاربر",
+ "filter-user.placeholder": "نام کاربری را برای پالایه کردن کاربر بنویسید...",
+ "filter-group": "پالایه کردن بر اساس گروه",
+ "filter-group.placeholder": "نام گروه را برای پالایه کردن بنویسید...",
+ "filter-per-page": "در صفحه"
}
\ No newline at end of file
diff --git a/public/language/fa-IR/admin/advanced/logs.json b/public/language/fa-IR/admin/advanced/logs.json
index 37846be559..8fe83cc30d 100644
--- a/public/language/fa-IR/admin/advanced/logs.json
+++ b/public/language/fa-IR/admin/advanced/logs.json
@@ -1,6 +1,6 @@
{
"logs": "گزارشات",
- "control-panel": "کنترل پنل گزارشات",
+ "control-panel": "فرمانگاه گزارشات",
"reload": "بارگزاری مجدد گزارش ها",
"clear": "حذف گزارشات",
"clear-success": "گزارش ها پاک شدند"
diff --git a/public/language/fa-IR/admin/appearance/customise.json b/public/language/fa-IR/admin/appearance/customise.json
index 4495400030..344ce38b45 100644
--- a/public/language/fa-IR/admin/appearance/customise.json
+++ b/public/language/fa-IR/admin/appearance/customise.json
@@ -1,20 +1,20 @@
{
- "customise": "Customise",
- "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",
+ "customise": "سفارشیسازی",
+ "custom-css": "CSS/SASS سفارشی",
+ "custom-css.description": "اعلانهای CSS/SASS خود را در اینجا وارد کنید، که بعد از همهی استایلهای دیگر اعمال خواهند شد.",
+ "custom-css.enable": "فعالسازی CSS/SASS سفارشی",
"custom-js": "جائا اسکریپت سفارشی",
- "custom-js.description": "کد های جاوا اسکریپت خود را در این قسمت وارد کنید بعد از لود شدن تمام صفحه اجرا خواهند شد",
- "custom-js.enable": "به کارگیری جاوا اسکریپت سفارشی ",
+ "custom-js.description": "کد های جاوا اسکریپت خود را در این قسمت وارد کنید که بعد از بارگزاری تمام صفحه اجرا خواهند شد.",
+ "custom-js.enable": "بهکارگیری جاوا اسکریپت سفارشی ",
"custom-header": "هدر سفارشی",
- "custom-header.description": "Enter custom HTML here (ex. Meta Tags, etc.), which will be appended to the <head> section of your forum's markup. Script tags are allowed, but are discouraged, as the Custom Javascript tab is available.",
- "custom-header.enable": "Enable Custom Header",
+ "custom-header.description": "HTML سفارشی را در اینجا وارد کنید (مثلاً متا تگ ها و غیره)، که به <head> بخش نشانه گذاری انجمن شما برچسبهای اسکریپت مجاز هستند، اما از آنجایی که برگه جاوا اسکریپت سفارشی در دسترس است، توصیه نمیشود.",
+ "custom-header.enable": "بهکارگیری هدر سفارشی",
- "custom-css.livereload": "Enable Live Reload",
- "custom-css.livereload.description": "Enable this to force all sessions on every device under your account to refresh whenever you click save",
+ "custom-css.livereload": "بهکارگیری بارگزاری مجدد زنده",
+ "custom-css.livereload.description": "این را فعال کنید تا هر زمان که روی ذخیره کلیک میکنید، تمام جلسات در هر دستگاهی که در حساب شما قرار دارد مجبور به بازآوری شوند",
"bsvariables": "_variables.scss",
- "bsvariables.description": "Override bootstrap variables here. You can also use a tool like bootstrap.build and paste the output here.
Changes require a rebuild & restart.",
- "bsvariables.enable": "Enable _variables.scss"
+ "bsvariables.description": "در اینجا متغیرهای راهاندازی را لغو کنید. همچنین می توانید از ابزاری مانند bootstrap.build استفاده کنید و خروجی را در اینجا بچسبانید.
تغییرات نیاز به بازسازی و راه اندازی مجدد دارند.",
+ "bsvariables.enable": "بهکارگیری _variables.scss"
}
\ No newline at end of file
diff --git a/public/language/fa-IR/admin/appearance/skins.json b/public/language/fa-IR/admin/appearance/skins.json
index c98482f27b..a9f7b40def 100644
--- a/public/language/fa-IR/admin/appearance/skins.json
+++ b/public/language/fa-IR/admin/appearance/skins.json
@@ -1,18 +1,18 @@
{
- "skins": "Skins",
+ "skins": "پوستهها",
"bootswatch-skins": "Bootswatch Skins",
- "custom-skins": "Custom Skins",
- "add-skin": "Add Skin",
- "save-custom-skins": "Save Custom Skins",
- "save-custom-skins-success": "Custom skins saved successfully",
- "custom-skin-name": "Custom Skin Name",
- "custom-skin-variables": "Custom Skin Variables",
- "loading": "Loading Skins...",
- "homepage": "Homepage",
- "select-skin": "Select Skin",
- "revert-skin": "Revert Skin",
- "current-skin": "Current Skin",
- "skin-updated": "Skin Updated",
- "applied-success": "%1 skin was succesfully applied",
- "revert-success": "Skin reverted to base colours"
+ "custom-skins": "پوستههای سفارشی",
+ "add-skin": "افزودن پوسته",
+ "save-custom-skins": "ذخیره پوستههای سفارشی",
+ "save-custom-skins-success": "پوستههای سفارشی با موفقیت ذخیره شدند",
+ "custom-skin-name": "نام پوستهی سفارشی",
+ "custom-skin-variables": "متغیرهای سفارشی پوسته",
+ "loading": "بارگزاری پوستهها",
+ "homepage": "صفحه خانه",
+ "select-skin": "انتخاب پوسته",
+ "revert-skin": "بازگردانی پوسته",
+ "current-skin": "پوستهی جاری",
+ "skin-updated": "پوستههای بروزشده",
+ "applied-success": "% 1 پوسته با موفقیت اعمال شد",
+ "revert-success": "پوسته به رنگ های پایه بارگردانی شد"
}
\ No newline at end of file
diff --git a/public/language/fa-IR/admin/appearance/themes.json b/public/language/fa-IR/admin/appearance/themes.json
index a6b65e46f3..4f2db7b657 100644
--- a/public/language/fa-IR/admin/appearance/themes.json
+++ b/public/language/fa-IR/admin/appearance/themes.json
@@ -1,13 +1,13 @@
{
- "themes": "Themes",
- "checking-for-installed": "Checking for installed themes...",
- "homepage": "Homepage",
- "select-theme": "Select Theme",
- "revert-theme": "Revert Theme",
- "current-theme": "Current Theme",
- "no-themes": "No installed themes found",
- "revert-confirm": "Are you sure you wish to restore the default NodeBB theme?",
- "theme-changed": "Theme Changed",
- "revert-success": "You have successfully reverted your NodeBB back to it's default theme.",
- "restart-to-activate": "Please rebuild and restart your NodeBB to fully activate this theme."
+ "themes": "زمینهها",
+ "checking-for-installed": "در حال بررسی ژمینههای نصب شده...",
+ "homepage": "صفحهی خانه",
+ "select-theme": "گزینش زمینه",
+ "revert-theme": "بازگردانی زمینه",
+ "current-theme": "زمینهی جاری",
+ "no-themes": "هیچ زمینهی نصب شده ای یافت نشد",
+ "revert-confirm": "آیا مطمئن هستید که می خواهید زمینهی پیش فرض NodeBB را بازیابی کنید؟",
+ "theme-changed": "زمینه تغییر کرد",
+ "revert-success": "NodeBB خود را با موفقیت به زمینهی پیش فرض آن برگرداندید.",
+ "restart-to-activate": "لطفاً NodeBB خود را دوباره بسازید و مجدداً راه اندازی کنید تا این زمینه به طور کامل فعال شود."
}
\ No newline at end of file
diff --git a/public/language/fa-IR/admin/dashboard.json b/public/language/fa-IR/admin/dashboard.json
index e79db14d13..86b668d99a 100644
--- a/public/language/fa-IR/admin/dashboard.json
+++ b/public/language/fa-IR/admin/dashboard.json
@@ -1,30 +1,30 @@
{
- "forum-traffic": "Forum Traffic",
- "page-views": "Page Views",
- "unique-visitors": "Unique Visitors",
- "logins": "Logins",
- "new-users": "New Users",
- "posts": "Posts",
+ "forum-traffic": "شدآمد انجمن",
+ "page-views": "بازدید از صفحه",
+ "unique-visitors": "بازدیدکنندگان منحصر به فرد",
+ "logins": "ورودها",
+ "new-users": "کاربران جدید",
+ "posts": "فرستهها",
"topics": "موضوعها",
- "page-views-seven": "Last 7 Days",
- "page-views-thirty": "Last 30 Days",
- "page-views-last-day": "Last 24 hours",
- "page-views-custom": "Custom Date Range",
- "page-views-custom-start": "Range Start",
- "page-views-custom-end": "Range End",
- "page-views-custom-help": "Enter a date range of page views you would like to view. If no date picker is available, the accepted format is YYYY-MM-DD",
- "page-views-custom-error": "Please enter a valid date range in the format YYYY-MM-DD",
+ "page-views-seven": "هفت روز آخر",
+ "page-views-thirty": "۳۰ روز آخر",
+ "page-views-last-day": "۲۴ ساعت آخر",
+ "page-views-custom": "محدودهی تاریخ سفارشی",
+ "page-views-custom-start": "شروع محدوده",
+ "page-views-custom-end": "پایان محدوده",
+ "page-views-custom-help": "محدوده تاریخی از بازدیدهای صفحه را که می خواهید مشاهده کنید وارد کنید. اگر انتخابگر تاریخ در دسترس نباشد، قالب پذیرفته شده YYYY-MM-DD است",
+ "page-views-custom-error": "لطفاً یک محدوده تاریخی معتبر در قالب YYYY-MM-DD وارد کنید",
- "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": "همیشه",
+ "stats.yesterday": "دیروز",
+ "stats.today": "امروز",
+ "stats.last-week": "آخرین هفته",
+ "stats.this-week": "این هفته",
+ "stats.last-month": "آخرین ماه",
+ "stats.this-month": "این ماه",
+ "stats.all": "همهی زمانها",
- "updates": "Updates",
- "running-version": "You are running NodeBB v%1.",
+ "updates": "بروزرسانیها",
+ "running-version": "شما در حال اجراء NodeBB v 1% هستید.",
"keep-updated": "Always make sure that your NodeBB is up to date for the latest security patches and bug fixes.",
"up-to-date": "You are up-to-date ",
"upgrade-available": "A new version (v%1) has been released. Consider upgrading your NodeBB.",
diff --git a/public/language/fa-IR/category.json b/public/language/fa-IR/category.json
index e6d045ecb1..43f9d76a01 100644
--- a/public/language/fa-IR/category.json
+++ b/public/language/fa-IR/category.json
@@ -3,24 +3,24 @@
"subcategories": "زیر دستهبندی",
"new-topic-button": "موضوع تازه",
"guest-login-post": "برای ارسال پست وارد شوید",
- "no-topics": "هیچ پستی در این دستهبندی نیست.
چرا شما یکی نمیفرستید؟",
+ "no-topics": "هیچ فرستهای در این دستهبندی نیست.
چرا شما یکی نمیفرستید؟",
"browsing": "بینندهها",
"no-replies": "هیچ کسی پاسخ نداده است.",
- "no-new-posts": "هیچ پست جدیدی وجود ندارد.",
+ "no-new-posts": "هیچ فرستهی جدیدی وجود ندارد.",
"watch": "پیگیری",
"ignore": "نادیده گرفتن",
"watching": "درحال پیگیری",
- "tracking": "Tracking",
- "not-watching": "درحال پیگیری نیستید",
+ "tracking": "پیگیری کردن",
+ "not-watching": "مشاهده نکردن",
"ignoring": "در حال نادیده گرفتن",
- "watching.description": "Notify me of new topics.
Show topics in unread & recent",
- "tracking.description": "Shows topics in unread & recent",
- "not-watching.description": "موضوع ها را در بخش نخوانده ها نمایش نده و در بخش تازه ها نشان بده",
- "ignoring.description": "Do not show topics in unread & recent",
- "watching.message": "اکنون شما بهروزرسانیهای این دسته و تمام زیر دستههایش را پیگیری میکنید",
- "tracking.message": "You are now tracking updates from this category and all subcategories",
- "notwatching.message": "اکنون شما بهروزرسانیهای این دسته و همهی زیر دستههایش را پیگیری نمی کنید",
- "ignoring.message": "اکنون شما بهروزرسانیهای این دسته و همهی زیر دستههایش را نادیده گرفتهاید",
+ "watching.description": "موضوعات جدید را به من اطلاع بده.
موضوعات خوانده نشده و اخیر را نشان بده",
+ "tracking.description": "موضوعات خوانده نشده و اخیر را نشان می دهد",
+ "not-watching.description": "موضوع ها را در بخش نخوانده ها نمایش نده و در بخش اخیر نشان بده",
+ "ignoring.description": "موضوعات خوانده نشده و اخیر نشان داده نشود",
+ "watching.message": "اکنون شما بهروزرسانیهای این دستهبندی و تمام زیر دستهبندیهایش را مشاهده میکنید",
+ "tracking.message": "اکنون بهروزرسانیهای این دستهبندی و همه زیر دستهبندی هایش را دنبال میکنید",
+ "notwatching.message": "اکنون شما بهروزرسانیهای این دسته بندی و همهی زیر دسته بندیهایش را پیگیری نمی کنید",
+ "ignoring.message": "اکنون شما بهروزرسانیهای این دستهبندی و همهی زیر دستهبندیهایش را نادیده گرفتهاید",
"watched-categories": "دسته بندی های پیگیری شده",
- "x-more-categories": "1% دستههای بیشتر"
+ "x-more-categories": "1% دستهبندیهای بیشتر"
}
\ No newline at end of file
diff --git a/public/language/fa-IR/login.json b/public/language/fa-IR/login.json
index 750e6ac7fd..0398fe9644 100644
--- a/public/language/fa-IR/login.json
+++ b/public/language/fa-IR/login.json
@@ -3,7 +3,7 @@
"username": "نام کاربری",
"remember-me": "مرا به یاد بسپار؟",
"forgot-password": "رمز عبور را فراموش کردهاید؟",
- "alternative-logins": "روشهای ثبت نام جایگزین",
+ "alternative-logins": "روشهای ثبتنام جایگزین",
"failed-login-attempt": "ورود ناموفق",
"login-successful": "شما با موفقیت وارد شدهاید!",
"dont-have-account": "حساب کاربری ندارید؟",
diff --git a/public/language/fa-IR/modules.json b/public/language/fa-IR/modules.json
index 0086b8f2f0..cd43be0e87 100644
--- a/public/language/fa-IR/modules.json
+++ b/public/language/fa-IR/modules.json
@@ -1,6 +1,6 @@
{
- "chat.room-id": "Room %1",
- "chat.chatting-with": "چت با",
+ "chat.room-id": "اتاق %1",
+ "chat.chatting-with": "گفتوگو با",
"chat.placeholder": "پیام چت را اینجا بنویس، عکسها را اینجا درگ و دراپ کن، برای ارسال دکمه Enter را بزن",
"chat.placeholder.mobile": "پیام چت را اینجا بنویس",
"chat.scroll-up-alert": "Go to most recent message",
diff --git a/public/language/fa-IR/recent.json b/public/language/fa-IR/recent.json
index dcf34eb8bd..ffc08fcaf5 100644
--- a/public/language/fa-IR/recent.json
+++ b/public/language/fa-IR/recent.json
@@ -7,5 +7,5 @@
"alltime": "همه زمانها",
"no-recent-topics": "هیچ موضوع تازهای نیست.",
"no-popular-topics": "هیچ موضوع پربازدیدی وجود ندارد",
- "load-new-posts": "بارگذاری پستهای جدید"
+ "load-new-posts": "بارگذاری فرستههای جدید"
}
\ No newline at end of file
diff --git a/public/language/fa-IR/unread.json b/public/language/fa-IR/unread.json
index c457a7eb61..4c2c56e4f2 100644
--- a/public/language/fa-IR/unread.json
+++ b/public/language/fa-IR/unread.json
@@ -1,16 +1,16 @@
{
"title": "نخواندهها",
- "no-unread-topics": "جستار خوانده نشدهای وجود ندارد.",
+ "no-unread-topics": "موضوعات خوانده نشدهای وجود ندارد.",
"load-more": "بارگذاری بیشتر",
- "mark-as-read": "خوانده شده بگیر",
- "mark-as-unread": "Mark as Unread",
- "selected": "برگزیده",
+ "mark-as-read": "علامت زدن به عنوان خوانده شده",
+ "mark-as-unread": "علامت زدن به عنوان نخوانده شده",
+ "selected": "انتخاب شده",
"all": "همه",
- "all-categories": "تمام دسته ها",
+ "all-categories": "تمام دستهبندیها",
"topics-marked-as-read.success": "همه موضوع ها خوانده شدند",
"all-topics": "همه موضوع ها",
"new-topics": "موضوع های جدید",
- "watched-topics": "موضوع های پیگیری شده",
+ "watched-topics": "موضوع های تماشا شده",
"unreplied-topics": "موضوع های بدون پاسخ",
"multiple-categories-selected": "انتخاب چندگانه"
}
\ No newline at end of file
diff --git a/public/language/fa-IR/uploads.json b/public/language/fa-IR/uploads.json
index 9b22c754b9..b17922ff80 100644
--- a/public/language/fa-IR/uploads.json
+++ b/public/language/fa-IR/uploads.json
@@ -3,7 +3,7 @@
"select-file-to-upload": "فایل مورد نظر را برای بارگذاری انتخاب کنید!",
"upload-success": "فایل با موفقیت بارگذاری شد!",
"maximum-file-size": "حداکثر %1 کیلوبایت",
- "no-uploads-found": "No uploads found",
- "public-uploads-info": "آپلود ها عمومی هستند، همه کاربران می توانند آن ها را ببینند.",
- "private-uploads-info": "Uploads are private, only logged in users can see them."
+ "no-uploads-found": "هیچ بارگزاری یافت نشد",
+ "public-uploads-info": "بارگزاریها عمومی هستند، همه کاربران می توانند آن ها را ببینند.",
+ "private-uploads-info": "براگزاریها خصوصی هستند، فقط کاربرانی که وارد شده اند می توانند آنها را ببینند."
}
\ No newline at end of file
diff --git a/public/language/fa-IR/user.json b/public/language/fa-IR/user.json
index a55866ce70..6c2cf5dba9 100644
--- a/public/language/fa-IR/user.json
+++ b/public/language/fa-IR/user.json
@@ -1,45 +1,45 @@
{
- "user-menu": "User menu",
+ "user-menu": "فهرست کاربری",
"banned": "اخراج شده",
- "unbanned": "Unbanned",
- "muted": "Muted",
- "unmuted": "Unmuted",
+ "unbanned": "رفع مسدود شده",
+ "muted": "ساکت شده",
+ "unmuted": "باصدا شده",
"offline": "آفلاین",
"deleted": "حذف شده",
"username": "نام کاربری",
"joindate": "تاریخ عضویت",
"postcount": "تعداد پستها",
"email": "رایانامه",
- "confirm-email": "تأیید ایمیل",
- "account-info": "اطلاعات شناسه کاربری",
+ "confirm-email": "تأیید رایانامه",
+ "account-info": "اطلاعات حساب کاربری",
"admin-actions-label": "اقدامات مدیریتی",
- "ban-account": "اخراج کاربر",
+ "ban-account": "مسدود کردن کاربر",
"ban-account-confirm": "از مسدود کردن این کاربر اطمینان دارید؟",
"unban-account": "آزاد کردن حساب کاربری",
- "mute-account": "Mute Account",
- "unmute-account": "Unmute Account",
- "delete-account": "حذف حساب کاربری",
- "delete-account-as-admin": "Delete Account",
- "delete-content": "Delete Account Content",
- "delete-all": "Delete Account and Content",
- "delete-account-confirm": "Are you sure you want to anonymize your posts and delete your account?
This action is irreversible and you will not be able to recover any of your data
Enter your password to confirm that you wish to destroy this account.",
- "delete-this-account-confirm": "Are you sure you want to delete this account while leaving its contents behind?
This action is irreversible, posts will be anonymized, and you will not be able to restore post associations with the deleted account
",
- "delete-account-content-confirm": "Are you sure you want to delete this account's content (posts/topics/uploads)?
This action is irreversible and you will not be able to recover any data
",
- "delete-all-confirm": "Are you sure you want to delete this account and all of its content (posts/topics/uploads)?
This action is irreversible and you will not be able to recover any data
",
- "account-deleted": "حساب کاربری پاک شد",
- "account-content-deleted": "Account content deleted",
+ "mute-account": "ساکت کردن حساب کاربری",
+ "unmute-account": "باصدا کردن حساب کاربری",
+ "delete-account": "حذف کردن حساب کاربری",
+ "delete-account-as-admin": "حذف حساب کاربری",
+ "delete-content": "حذف محتویات (فرستهها/موضوعات/بارگزاریها) حساب کاربری",
+ "delete-all": "حذف حساب کاربری و محتویات آن (فرستهها/موضوعات/بارگزاریها)",
+ "delete-account-confirm": "آیا مطمئن هستید که می خواهید فرسته های خود را ناشناس کنید و حساب خود را حذف کنید؟
این عمل غیر قابل برگشت است و نمی توانید هیچ یک از داده های خود را بازیابی کنید.
رمز عبور خود را وارد کنید تا تأیید کنید که می خواهید این حساب را از بین ببرید.",
+ "delete-this-account-confirm": "آیا مطمئن هستید که میخواهید این حساب را در حالی که محتویات آن را پشت سر گذاشتهاید حذف کنید؟
این عمل غیرقابل برگشت است، پستها ناشناس میشوند و نمیتوانید ارتباط فرستهها را با حساب حذف شده بازیابی کنید.
",
+ "delete-account-content-confirm": "آیا مطمئن هستید که می خواهید محتوای این حساب (فرستهها/موضوعات/بارگزاریها) را حذف کنید؟
این عمل غیر قابل برگشت است و شما نمی توانید هیچ داده ای را بازیابی کنید
",
+ "delete-all-confirm": "آیا مطمئنید که میخواهید این حساب و تمام محتوای آن (فرستهها/موضوعات/براگزاریها) را حذف کنید؟
این عمل غیر قابل برگشت است و شما نمی توانید هیچ داده ای را بازیابی کنید
",
+ "account-deleted": "حساب کاربریِ پاک شده",
+ "account-content-deleted": "محتویات حساب کاربری پاک شده",
"fullname": "نام و نام خانوادگی",
"website": "تارنما",
"location": "محل سکونت",
"age": "سن",
"joined": "عضو شده",
"lastonline": "آخرین حضور",
- "profile": "پروفایل",
- "profile-views": "بازدیدهای نمایه",
+ "profile": "نمایه",
+ "profile-views": "دفعات بازدید از نمایه",
"reputation": "اعتبار",
"bookmarks": "نشانکها",
"watched-categories": "دسته بندی های پیگیری شده",
- "watched-tags": "Watched tags",
+ "watched-tags": "برچسب های پیگیری شده",
"change-all": "تغییر همه",
"watched": "موضوع های پیگیری شده",
"ignored": "نادیده گرفته شده",
@@ -51,37 +51,37 @@
"block-toggle": "مسدود کردن",
"block-user": "مسدود کردن کاربر",
"unblock-user": "رفع مسدودی کاربر",
- "aboutme": "درباره ی من",
+ "aboutme": "دربارهی من",
"signature": "امضا",
"birthday": "روز تولد",
"chat": "چت",
- "chat-with": "ادامه چت با %1",
- "new-chat-with": "شروع چت جدید با %1",
- "flag-profile": "گزارش پروفایل",
- "follow": "دنبال کن",
- "unfollow": "دنبال نکن",
+ "chat-with": "ادامه گفتوگو با %1",
+ "new-chat-with": "شروع گفتوگوی جدید با %1",
+ "flag-profile": "پرچم کردن نمایه",
+ "follow": "دنبال کردن",
+ "unfollow": "دنبال نکردن",
"more": "بیشتر",
- "profile-update-success": "پروفایل باموفقیت به روز شده است!",
+ "profile-update-success": "نمایه با موفقیت به روز شده است!",
"change-picture": "تغییر تصویر",
"change-username": "تغییر نام کاربری",
- "change-email": "تغییر ایمیل",
- "email-updated": "Email Updated",
- "email-same-as-password": "Please enter your current password to continue – you've entered your new email again",
+ "change-email": "تغیر نشانی رایانامه",
+ "email-updated": "رایانامه بروز شده",
+ "email-same-as-password": "لطفا رمز عبور فعلی خود را برای ادامه وارد کنید – شما دوباره نشانی رایانامه جدید خود را وارد کرده اید",
"edit": "ویرایش",
- "edit-profile": "ویرایش پروفایل",
- "default-picture": "آیکون پیش فرض",
+ "edit-profile": "ویرایش نمایه",
+ "default-picture": "نقشک پیش فرض",
"uploaded-picture": "تصویر بارشده",
"upload-new-picture": "بارگذاری تصویر تازه",
"upload-new-picture-from-url": "بارگذاری تصویر جدید از نشانی وب",
- "current-password": "کلمه عبور کنونی",
- "new-password": "New Password",
- "change-password": "تغیر کلمه عبور",
- "change-password-error": "کلمه عبور نامعتبر!",
- "change-password-error-wrong-current": "این کلمه عبورٔ شما نادرست است.",
- "change-password-error-match": "کلمه عبورها باید یکسان باشند.",
- "change-password-error-privileges": "شما اجازه تغییر این کلمه عبور را ندارید.",
- "change-password-success": "کلمه عبورتان تازه شد.",
- "confirm-password": "تکرار کلمه عبور",
+ "current-password": "گذرواژه کنونی",
+ "new-password": "گذرواژه جدید",
+ "change-password": "تغییر گذرواژه",
+ "change-password-error": "گذرواژه اشتباه است!",
+ "change-password-error-wrong-current": "گذرواژه شما نادرست است.",
+ "change-password-error-match": "گذارواژه ها باید یکسان باشند.",
+ "change-password-error-privileges": "شما اجازه تغییر این گذرواژه را ندارید.",
+ "change-password-success": "گذرواژهتان بروز شد.",
+ "confirm-password": "تکرار گذرواژه",
"password": "گذرواژه",
"username-taken-workaround": "نام کاربری که درخواست کردید قبلاً گرفته شده است، بنابراین ما آن را تغییر داده ایم. شما هماکنون با نام %1 شناخته میشوید.",
"password-same-as-username": "کلمه ی عبور شما با نام کاربری شما یکسان می باشند ، لطفا کلمه ی عبور دیگری را انتخاب کنید",
@@ -94,9 +94,9 @@
"remove-cover-picture-confirm": "آیا شما مطمئنید که می خواهید عکس کاور را حذف کنید؟",
"crop-picture": "برش عکس",
"upload-cropped-picture": "برش و بارگذاری",
- "avatar-background-colour": "Avatar background colour",
+ "avatar-background-colour": "رنگ پس زمینه چهرک",
"settings": "تنظیمات",
- "show-email": "نمایش ایمیلهای من",
+ "show-email": "نمایش نشانی رایانامه من",
"show-fullname": "نمایش نام کامل من (نام و نام خانوادگی)",
"restrict-chats": "فقط از کاربرانی که دنبال می کنم پیام خصوصی دریافت کنم",
"digest-label": "مشترک شدن در چکیده",
@@ -104,32 +104,32 @@
"digest-off": "خاموش",
"digest-daily": "روزانه",
"digest-weekly": "هفتگی",
- "digest-biweekly": "Bi-Weekly",
+ "digest-biweekly": "دو هفتهای",
"digest-monthly": "ماهانه",
"has-no-follower": "این کاربر هیچ دنبالکنندهای ندارد :(",
"follows-no-one": "این کاربر هیچ کسی را دنبال نمیکند :(",
"has-no-posts": "این کاربر تا به حال هیچ چیزی ارسال نکرده است.",
- "has-no-best-posts": "This user does not have any upvoted posts yet.",
- "has-no-topics": "این کاربر تا به حال هیچ موضوعی ارسال نکرده است",
- "has-no-watched-topics": "این کاربر تا به حال هیچ موضوعی را پیگیری نکرده است",
- "has-no-ignored-topics": "این کاربر هیچ موضوعی را نادیده نگرفته است",
- "has-no-upvoted-posts": "این کاربر به هیچ پستی امتیاز نداده است.",
- "has-no-downvoted-posts": "این کاربر به هیچ پستی رای منفی نداده است.",
- "has-no-controversial-posts": "This user does not have any downvoted posts yet.",
+ "has-no-best-posts": "این کاربر هنوز هیچ فرستهای با رای مثبت ندارد.",
+ "has-no-topics": "این کاربر تا به حال هیچ موضوعی ارسال نکرده است.",
+ "has-no-watched-topics": "این کاربر تا به حال هیچ موضوعی را پیگیری نکرده است.",
+ "has-no-ignored-topics": "این کاربر هیچ موضوعی را نادیده نگرفته است.",
+ "has-no-upvoted-posts": "این کاربر به هیچ فرسته رای مثبت نداده است.",
+ "has-no-downvoted-posts": "این کاربر به هیچ فرستهای رای منفی نداده است.",
+ "has-no-controversial-posts": "این کاربر هنوز هیچ فرستهای با رای منفی ندارد.",
"has-no-blocks": "شما هیچ کاربر مسدود شده ای ندارید.",
- "email-hidden": "ایمیل پنهان شده",
- "hidden": "پنهان",
+ "email-hidden": "نشانی رایانامه پنهان شده",
+ "hidden": "پنهان شده",
"paginate-description": "صفحه بندی و نمایش موضوع ها و پستها به جای نمایش بر اساس اسکرول موس",
"topics-per-page": "شمار موضوع ها در هر برگه",
"posts-per-page": "شمار پستها در هر برگه",
"category-topic-sort": "مرتب سازی دسته موضوع",
- "topic-post-sort": "مرتب سازی پستهای تاپیک",
+ "topic-post-sort": "مرتب سازی فرستههای موضوع",
"max-items-per-page": "حداکثر %1",
- "acp-language": "زبان پنل ادمین",
- "notifications": "آگاهسازیها",
+ "acp-language": "زبان صفحه مدیریت",
+ "notifications": "اعلان ها",
"upvote-notif-freq": "تنظیمات اعلان امتیاز مثبت",
"upvote-notif-freq.all": "همه امتیاز های مثبت",
- "upvote-notif-freq.first": "First Per Post",
+ "upvote-notif-freq.first": "اول در هر فرسته",
"upvote-notif-freq.everyTen": "هر ده امتیاز مثبت",
"upvote-notif-freq.threshold": "On 1, 5, 10, 25, 50, 100, 150, 200...",
"upvote-notif-freq.logarithmic": "هر 10، 10، 1000 ...",
@@ -138,85 +138,85 @@
"open-links-in-new-tab": "پیوندهای به بیرون را در برگ جدید باز کن",
"enable-topic-searching": "فعال کردن جستجوی درون موضوعی",
"topic-search-help": "اگر فعال باشد، \"جستجوی درون موضوعی\" جایگزین قابلیت جستجوی پیشفرض مرورگر خواهد شد و این امکان را خواهید داشت که بجای جستجوی آنچه که در صفحه نمایش می بینید، در سرتاسر موضوع جستجو کنید",
- "update-url-with-post-index": "بروزرسانی آدرس پست در مرورگر هنگام گشت و گذار در موضوعات",
- "scroll-to-my-post": "پس از ارسال پست، اولین پست جدید نشان بده",
+ "update-url-with-post-index": "بروزرسانی نشانی فرسته در مرورگر هنگام گشت و گذار در موضوعات",
+ "scroll-to-my-post": "پس از ارسال فرسته، اولین فرستهی جدید را نشان بده",
"follow-topics-you-reply-to": "پیگیری موضوع هایی که شما به آن ها پاسخ دادید",
"follow-topics-you-create": "پیگیری موضوع هایی که شما ایجاد کردید",
"grouptitle": "عنوان گروه",
"group-order-help": "گروهی را انتخاب کرده و با استفاده از پیکان ها ترتیب عنوان ها را جابهجا کنید",
- "show-group-title": "Show group title",
- "hide-group-title": "Hide group title",
+ "show-group-title": "نمایش عنوان گروه",
+ "hide-group-title": "پنهان کردن عنوان گروه",
"order-group-up": "Order group up",
"order-group-down": "Order group down",
- "no-group-title": "عنوان گروهی نیست",
+ "no-group-title": "گروه عنوانی ندارد",
"select-skin": "انتخاب یک پوسته",
"default": "Default (%1)",
- "no-skin": "No Skin",
+ "no-skin": "بدون پوسته",
"select-homepage": "انتخاب صفحه اصلی",
"homepage": "صفحه اصلی",
- "homepage-description": "یک صفحه را به عنوان خانه انتخاب کنید یا با انتخاب \"هیچکدام\" صفحهی پیش فرض برای شما انتخاب میشود.",
- "custom-route": "مسیر صفحهی اختصاصی",
+ "homepage-description": "یک صفحه را به عنوان صفحه اصلی انتخاب کنید یا با انتخاب \"هیچکدام\" صفحهی پیش فرض برای شما انتخاب میشود.",
+ "custom-route": "صفحهی اصلی انتخابی",
"custom-route-help": "Enter a route name here, without any preceding slash (e.g. \"recent\" or \"category/2/general-discussion\")",
- "sso.title": "Single Sign-on Services",
+ "sso.title": "خدمات ثبت نام تکی",
"sso.associated": "متصل شده به",
"sso.not-associated": "اتصال حساب به",
"sso.dissociate": "لغو اتصال",
- "sso.dissociate-confirm-title": "Confirm Dissociation",
+ "sso.dissociate-confirm-title": "جداسازی را تایید کنید",
"sso.dissociate-confirm": "آیا مطمئنی می خواهی اتصال %1 به حسابت را لغو کنی؟",
"info.latest-flags": "آخرین نشانه گذاریها",
- "info.profile": "Profile",
- "info.post": "Post",
- "info.view-flag": "View flag",
- "info.reported-by": "Reported by:",
+ "info.profile": "نمایه",
+ "info.post": "فرسته",
+ "info.view-flag": "مشاهده پرچم ها",
+ "info.reported-by": "گذارش شده توسط:",
"info.no-flags": "پست گزارش شده ای یافت نشد",
"info.ban-history": "تاریخچه مسدودیت های اخیر",
"info.no-ban-history": "این کاربر هرگز مسدود نشده است",
"info.banned-until": "مسدود شده تا %1",
- "info.banned-expiry": "Expiry",
- "info.ban-expired": "Ban expired",
+ "info.banned-expiry": "انقضا",
+ "info.ban-expired": "مسدودیت منقضی شد",
"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.banned-no-reason": "هیچ دلیلی ارایه نشده است.",
+ "info.mute-history": "تاریخه سکوت های اخیر",
+ "info.no-mute-history": "این کاربر تا حالا بیصدا نشده است.",
+ "info.muted-until": "ساکت شده تا ۱٪",
+ "info.muted-expiry": "انقضا",
+ "info.muted-no-reason": "دلیلی ارائه نشده است.",
"info.username-history": "تاریخچه تعویض نام کاربری",
- "info.email-history": "تاریخچه تعویض ایمیل",
+ "info.email-history": "تاریخچه تعویض رایانامه",
"info.moderation-note": "یادداشت مدیر",
"info.moderation-note.success": "یادداشت مدیر ذخیره شد",
"info.moderation-note.add": "افزودن یادداشت",
- "sessions.description": "این صفحه به شما امکان می دهد تا همه Session های فعال حساب خود در انجمن را ببینید و در صورت نیاز آن ها را باطل کنید. شما می توانید Session فعلی خود را با خروج از حساب خود باطل کنید.",
- "revoke-session": "Revoke Session",
+ "sessions.description": "این صفحه به شما امکان می دهد تا همه نشست های فعال حساب خود در انجمن را ببینید و در صورت نیاز آن ها را باطل کنید. شما می توانید نشست فعلی خود را با خروج از حساب خود باطل کنید.",
+ "revoke-session": "لغو نشست",
"browser-version-on-platform": "%1 %2 on %3",
"consent.title": "Your Rights & Consent",
"consent.lead": "این انجمن اطلاعات شخصی شما را جمعآوری و پردازش میکند",
- "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.
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.
If you have any questions or concerns, we encourage you to reach out to this forum's administrative team.",
- "consent.email-intro": "Occasionally, we may send emails to your registered email address in order to provide updates and/or to notify you of new activity that is pertinent to you. You can customise the frequency of the community digest (including disabling it outright), as well as select which types of notifications to receive via email, via your user settings page.",
- "consent.digest-frequency": "Unless explicitly changed in your user settings, this community delivers email digests every %1.",
- "consent.digest-off": "Unless explicitly changed in your user settings, this community does not send out email digests",
- "consent.received": "You have provided consent for this website to collect and process your information. No additional action is required.",
- "consent.not-received": "You have not provided consent for data collection and processing. At any time this website's administration may elect to delete your account in order to become compliant with the General Data Protection Regulation.",
- "consent.give": "Give consent",
- "consent.right-of-access": "You have the Right of Access",
- "consent.right-of-access-description": "You have the right to access any data collected by this website upon request. You can retrieve a copy of this data by clicking the appropriate button below.",
- "consent.right-to-rectification": "You have the Right to Rectification",
- "consent.right-to-rectification-description": "You have the right to change or update any inaccurate data provided to us. Your profile can be updated by editing your profile, and post content can always be edited. If this is not the case, please contact this site's administrative team.",
- "consent.right-to-erasure": "You have the Right to Erasure",
- "consent.right-to-erasure-description": "At any time, you are able to revoke your consent to data collection and/or processing by deleting your account. Your individual profile can be deleted, although your posted content will remain. If you wish to delete both your account and your content, please contact the administrative team for this website.",
- "consent.right-to-data-portability": "You have the Right to Data Portability",
- "consent.right-to-data-portability-description": "You may request from us a machine-readable export of any collected data about you and your account. You can do so by clicking the appropriate button below.",
- "consent.export-profile": "Export Profile (.json)",
- "consent.export-profile-success": "Exporting profile, you will get a notification when it is complete.",
- "consent.export-uploads": "Export Uploaded Content (.zip)",
- "consent.export-uploads-success": "Exporting uploads, you will get a notification when it is complete.",
- "consent.export-posts": "Export Posts (.csv)",
- "consent.export-posts-success": "Exporting posts, you will get a notification when it is complete.",
- "emailUpdate.intro": "Please enter your email address below. This forum uses your email address for scheduled digest and notifications, as well as for account recovery in the event of a lost password.",
- "emailUpdate.optional": "This field is optional. 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": "This field is required.",
- "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."
+ "consent.intro": "ما از این اطلاعات صرفاً برای بهبود تجربه شما در این انجمن و همچنین برای مرتبط کردن فرسته هایی که به حساب کاربری خود میفرستید استفاده می کنیم. در مرحله ثبت نام از شما خواسته شد که نام کاربری و نشانی رایانامهتان را وارد کنید، همچنین می توانید به صورت اختیاری اطلاعات بیشتری برای تکمیل نمایه کاربری خود در این انجمن ارائه دهید.
ما این اطلاعات را تا پایان عمر حساب کاربری شما حفظ می کنیم و شما می توانید رضایت خود را در هر زمان با حذف حساب خود، پس بگیرید.
اگر هرگونه سوال یا مشکلی دارید ما به شما پیشنهاد میکنیم که آن را از مدیریت این انجمن بپرسید.",
+ "consent.email-intro": "گاهی اوقات، ممکن است به منظور ارائه بهروزرسانیها و/یا اطلاعرسانی از فعالیتهای جدید مربوط به شما، ایمیلهایی به نشانی رایانامه ثبتشده شما ارسال شود. میتوانید تعداد دفعات خلاصه انجمن را سفارشی کنید (از جمله غیرفعال کردن کامل آن)، و همچنین میتوانید انتخاب کنید که چه نوع اعلانهایی را از طریق رایانامهتان دریافت کنید.",
+ "consent.digest-frequency": "تنها در زمانی که در تنظیمات کاربر شما تغییر کند، این انجمن خلاصههای ایمیل را به صورت %1 ارائه میکند.",
+ "consent.digest-off": "این انجمن خلاصههای ایمیل را ارسال نمیکند، مگر اینکه به صراحت در تنظیمات کاربر شما این ویژگی فعال شود.",
+ "consent.received": "شما رضایتتان را برای اینکه این انجمن حق جمع آوری و پردازش اطلاعات شما را دارد، اعلام کردهاید. هیچ اقدام اضافی مورد نیاز نیست.",
+ "consent.not-received": "شما رضایتتان را برای جمع آوری و پردازش داده ها اعلام نکردهاید. در هر زمانی مدیر این انجمن ممکن است تصمیم بگیرد که حساب شما را به منظور مطابقت با مقررات حفاظت از داده های عمومی حذف کند.",
+ "consent.give": "اعلام داشتن رضایت",
+ "consent.right-of-access": "شما حق دسترسی را دارید.",
+ "consent.right-of-access-description": "شما حق دسترسی به اطلاعات جمع آوری شده توسط این انجمن را در صورت درخواست دارید. شما می توانید یک رونوشت از این داده ها را با کلیک کردن روی دکمه مناسب زیر داشته باشید.",
+ "consent.right-to-rectification": "شما حق تصحیح دارید",
+ "consent.right-to-rectification-description": "شما حق دارید هرگونه داده نادرست ارائه شده به ما را تغییر دهید یا به روز کنید. اطلاعات نمایه را می توان با بخش \"ویرایش نمایه\" تغیر داد و فرسته ها همیشه قابل ویرایشند. اگر اینطور نیست، لطفاً با تیم مدیریت این انجمن تماس بگیرید.",
+ "consent.right-to-erasure": "شما حق پاک کردن را دارید",
+ "consent.right-to-erasure-description": "در هر زمان، میتوانید با حذف حساب خود، رضایت خود را برای جمعآوری و/یا پردازش دادهها لغو کنید. نمایه فردی شما قابل حذف است، اگرچه محتوای حساب شما (فرستهها/موضوعات/بارگزاریها) باقی خواهد ماند. اگر می خواهید هم حساب کاربری و هم محتوای حساب خود را حذف کنید، لطفاً با تیم مدیریت این انجمن تماس بگیرید.",
+ "consent.right-to-data-portability": "شما حق انتقال داده ها را دارید",
+ "consent.right-to-data-portability-description": "میتوانید از ما درخواست کنید که اطلاعات جمعآوریشده درباره شما و حسابتان را با قابلیت خواندن ماشین خروجی بگیریم. شما می توانید این کار را با کلیک بر روی دکمه مربوطه در زیر انجام دهید.",
+ "consent.export-profile": "خروجی گرفتن از اطلاعات نمایه با قالب json",
+ "consent.export-profile-success": "در حال خروجی گرفتن اطلاعات نمایه، پس از تکمیل آن یک اعلان دریافت خواهید کرد.",
+ "consent.export-uploads": "خروجی گرفتن از پرونده های بارگزاری شده با قالب zip",
+ "consent.export-uploads-success": "در حال خروجی گرفتن بارگزاریها، پس از تکمیل آن یک اعلان دریافت خواهید کرد.",
+ "consent.export-posts": "خروجی گرفتن از فرستهها با قالب csv",
+ "consent.export-posts-success": "در حال خروجی گرفتن فرستهها، پس از تکمیل آن یک اعلان دریافت خواهید کرد.",
+ "emailUpdate.intro": "لطفا نشانی رایانامه خود را در زیر وارد کنید. این انجمن از رایانامه شما برای اعلان ها و همچنین برای بازیابی حساب در صورت گم شدن رمز عبور استفاده می کند.",
+ "emailUpdate.optional": "این بخش اختیاری است. شما موظف به ارائه نشانی رایانامه خود نیستید، اما بدون رایانامه معتبر نمی توانید حساب خود را بازیابی کنید یا با نشانی رایانامه خود وارد شوید.",
+ "emailUpdate.required": "پر کردن این بخش الزامی است.",
+ "emailUpdate.change-instructions": "یک ایمیل تایید با یک پیوند منحصر به فرد به نشانی رایانامه وارد شده ارسال می شود. دسترسی به آن پیوند مالکیت شما را بر نشانی رایانامهتان تایید می کند و نشانی رایانامه جدید شما در حساب شما فعال می شود. در هر زمان، میتوانید نشانی رایانامهتان را از صفحه \"ویرایش نمایه\" عوض کنید.",
+ "emailUpdate.password-challenge": "لطفاً رمز عبور خود را برای تأیید مالکیت حساب وارد کنید.",
+ "emailUpdate.pending": "نشانی رایانامه شما هنوز تایید نشده است، اما ایمیلی برای درخواست تایید ارسال شده است. اگر می خواهید آن درخواست را باطل کنید و یک درخواست تأیید دیگر دریافت کنید، لطفاً بخش زیر را پر کنید."
}
\ No newline at end of file
diff --git a/public/language/fa-IR/users.json b/public/language/fa-IR/users.json
index 650db59e09..da200f416b 100644
--- a/public/language/fa-IR/users.json
+++ b/public/language/fa-IR/users.json
@@ -6,7 +6,7 @@
"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": "فیلتر با",
diff --git a/public/language/ru/admin/settings/post.json b/public/language/ru/admin/settings/post.json
index cc80f8805f..4b6f3b5f76 100644
--- a/public/language/ru/admin/settings/post.json
+++ b/public/language/ru/admin/settings/post.json
@@ -4,11 +4,11 @@
"sorting.post-default": "Стандартная сортировка сообщений",
"sorting.oldest-to-newest": "Сначала старые",
"sorting.newest-to-oldest": "Сначала новые",
- "sorting.recently-replied": "Recently Replied",
- "sorting.recently-created": "Recently Created",
+ "sorting.recently-replied": "Недавно ответили",
+ "sorting.recently-created": "Недавно создано",
"sorting.most-votes": "По количеству голосов",
"sorting.most-posts": "По количеству сообщений",
- "sorting.most-views": "Most Views",
+ "sorting.most-views": "Наибольшее количество просмотров",
"sorting.topic-default": "Стандартная сортировка тем",
"length": "Длина сообщения",
"post-queue": "Очередь на публикацию",
diff --git a/public/language/th/admin/appearance/customise.json b/public/language/th/admin/appearance/customise.json
index f9d55fc61e..e4eb42f234 100644
--- a/public/language/th/admin/appearance/customise.json
+++ b/public/language/th/admin/appearance/customise.json
@@ -15,6 +15,6 @@
"custom-css.livereload": "เปิดการบังคับให้มีผลในทันที",
"custom-css.livereload.description": "การเปิดนี้จะบังคับทุกเซสชั่นบนทุกอุปกรณ์ภายใต้บัญชีของคุณให้ถูกรีเฟรชทันทีที่คุณกดบันทึก",
"bsvariables": "_variables.scss",
- "bsvariables.description": "แทนที่ค่าตัวแปร bootstrap ที่นี่ คุณยังสามารถใช้เครื่องมือ bootstrap.build และคัดลอกผลลัพธ์ลงในนี้
การเปลี่ยนแปลงต้องทำ rebuild และเริ่มต้นใหม่",
- "bsvariables.enable": "เปิด _variables.scss"
+ "bsvariables.description": "แทนที่ค่าตัวแปร bootstrap ที่นี่ คุณยังสามารถใช้เครื่องมือ bootstrap.build และคัดลอกผลลัพธ์ลงในนี้
การเปลี่ยนแปลงต้องสร้างและเริ่มต้นระบบใหม่",
+ "bsvariables.enable": "เปิดการใช้งาน _variables.scss"
}
\ No newline at end of file
diff --git a/public/language/th/admin/dashboard.json b/public/language/th/admin/dashboard.json
index 8391d98111..5049bb87e1 100644
--- a/public/language/th/admin/dashboard.json
+++ b/public/language/th/admin/dashboard.json
@@ -47,46 +47,46 @@
"restart-warning": "การสร้างหรือเริ่มต้นระบบ NodeBB ของคุณจะทำให้การเชื่อมต่อถูกตัดเป็นเวลาหลายวินาที",
"restart-disabled": "การสร้างและเริ่มต้นระบบ NodeBB ของคุณไม่เปิดให้ใช้งาน เนื่องจากคุณไม่ได้เรียกใช้จาก daemon ที่ถูกต้อง",
"maintenance-mode": "โหมดการซ่อมบำรุง",
- "maintenance-mode-title": "Click here to set up maintenance mode for NodeBB",
+ "maintenance-mode-title": "คลิกที่นี่เพื่อเข้าสู่โหมดการซ่อมบำรุงของ NodeBB",
"dark-mode": "โหมดมืด",
- "realtime-chart-updates": "Realtime Chart Updates",
+ "realtime-chart-updates": "กราฟแสดงผลแบบเรียลไทม์",
- "active-users": "Active Users",
- "active-users.users": "Users",
- "active-users.guests": "Guests",
- "active-users.total": "Total",
- "active-users.connections": "Connections",
+ "active-users": "ผู้ใช้งานที่กำลังดู",
+ "active-users.users": "ผู้ใช้งาน",
+ "active-users.guests": "ผู้มาเยือน",
+ "active-users.total": "รวม",
+ "active-users.connections": "การเชื่อมต่อ",
- "guest-registered-users": "Guest vs Registered Users",
- "guest": "Guest",
- "registered": "Registered",
+ "guest-registered-users": "ผู้มาเยือน เทียบกับ ผู้ลงทะเบียนแล้ว",
+ "guest": "ผู้มาเยือน",
+ "registered": "ลงทะเบียนแล้ว",
- "user-presence": "User Presence",
- "on-categories": "On categories list",
- "reading-posts": "Reading posts",
- "browsing-topics": "Browsing topics",
- "recent": "Recent",
- "unread": "Unread",
+ "user-presence": "ตำแหน่งของผู้ใช้งาน",
+ "on-categories": "อยู่ในรายการหมวดหมู่",
+ "reading-posts": "กำลังอ่านโพสต์",
+ "browsing-topics": "กำลังดูหัวข้อกระทู้",
+ "recent": "เนื้อหาล่าสุด",
+ "unread": "ยังไม่ได้อ่าน",
- "high-presence-topics": "High Presence Topics",
- "popular-searches": "Popular Searches",
+ "high-presence-topics": "กระทู้ที่คนเข้าดูมาก",
+ "popular-searches": "คำค้นที่นิยม",
- "graphs.page-views": "Page Views",
- "graphs.page-views-registered": "Page Views Registered",
- "graphs.page-views-guest": "Page Views Guest",
- "graphs.page-views-bot": "Page Views Bot",
- "graphs.unique-visitors": "Unique Visitors",
- "graphs.registered-users": "Registered Users",
- "graphs.guest-users": "Guest Users",
- "last-restarted-by": "Last restarted by",
- "no-users-browsing": "No users browsing",
+ "graphs.page-views": "ยอดวิว",
+ "graphs.page-views-registered": "ยอดวิวจากผู้ลงทะเบียนแล้ว",
+ "graphs.page-views-guest": "ยอดวิวจากผู้มาเยือน",
+ "graphs.page-views-bot": "ยอดวิวจากบอต",
+ "graphs.unique-visitors": "จำนวนผู้ใช้ที่ไม่ซ้ำกัน",
+ "graphs.registered-users": "ผู้ใช้ที่ลงทะเบียนแล้ว",
+ "graphs.guest-users": "ผู้ใช้ที่เป็นผู้มาเยือน",
+ "last-restarted-by": "เริ่มต้นระบบใหม่ครั้งสุดท้ายโดย",
+ "no-users-browsing": "ไม่มีผู้ใช้งานที่กำลังดู",
- "back-to-dashboard": "Back to Dashboard",
- "details.no-users": "No users have joined within the selected timeframe",
- "details.no-topics": "No topics have been posted within the selected timeframe",
- "details.no-searches": "No searches have been made within the selected timeframe",
- "details.no-logins": "No logins have been recorded within the selected timeframe",
- "details.logins-static": "NodeBB only saves session data for %1 days, and so this table below will only show the most recently active sessions",
+ "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": "สิ้นสุด",
diff --git a/public/language/th/admin/extend/plugins.json b/public/language/th/admin/extend/plugins.json
index 1a8f66fa6d..6f04a90ae7 100644
--- a/public/language/th/admin/extend/plugins.json
+++ b/public/language/th/admin/extend/plugins.json
@@ -1,6 +1,6 @@
{
"plugins": "Plugins",
- "trending": "Trending",
+ "trending": "กำลังนิยม",
"installed": "ถูกติดตั้งแล้ว",
"active": "ทำงาน",
"inactive": "ไม่ทำงาน",
@@ -11,7 +11,7 @@
"plugin-search": "การค้นหาปลั๊กอิน",
"plugin-search-placeholder": "ค้นหาปลั๊กอิน...",
- "submit-anonymous-usage": "Submit anonymous plugin usage data.",
+ "submit-anonymous-usage": "ส่งข้อมูลการใช้งานปลั๊กอินโดยไม่เปิดเผยตัวตน",
"reorder-plugins": "เรียงลำดับปลั๊กอินใหม่",
"order-active": "ลำดับการทำงานของปลั๊กอิน",
"dev-interested": "คุณสนใจที่จะสร้างปลั๊กอินสำหรับ NodeBB หรือไม่?",
@@ -32,25 +32,25 @@
"plugin-item.more-info": "ข้อมูลเพิ่มเติม:",
"plugin-item.unknown": "ไม่ทราบ",
"plugin-item.unknown-explanation": "สถานะของปลั๊กอินนี้ไม่สามารถระบุได้ซึ่งอาจเกิดจากข้อผิดพลาดในการกำหนดค่าผิดพลาด",
- "plugin-item.compatible": "This plugin works on NodeBB %1",
- "plugin-item.not-compatible": "This plugin has no compatibility data, make sure it works before installing on your production environment.",
+ "plugin-item.compatible": "ปลั๊กอินนี้ทำงานได้กับ NodeBB %1",
+ "plugin-item.not-compatible": "ปลั๊กอินนี้ไม่มีข้อมูลความเข้ากันได้ โปรดทดสอบว่ามันทำงานก่อนที่จะติดตั้งลงในระบบใช้งานจริง",
"alert.enabled": "เปิดใช้งานปลั๊กอินแล้ว",
"alert.disabled": "ปิดใช้งานปลั๊กอินแล้ว",
"alert.upgraded": "อัพเกรดปลั๊กอินแล้ว",
"alert.installed": "ติดตั้งปลั๊กอินแล้ว",
"alert.uninstalled": "ถอนการติดตั้งปลั๊กอินแล้ว",
- "alert.activate-success": "Please rebuild and restart your NodeBB to fully activate this plugin",
+ "alert.activate-success": "โปรดสร้างและเริ่มต้น NodeBB ใหม่เพื่อเปิดการใช้งานปลั๊กอินนี้โดยสมบูรณ์",
"alert.deactivate-success": "ปิดการใช้งานปลั๊กอินนี้แล้ว",
- "alert.upgrade-success": "Please rebuild and restart your NodeBB to fully upgrade this plugin.",
+ "alert.upgrade-success": "โปรดสร้างและเริ่มต้น NodeBB ใหม่เพื่ออัพเกรดปลั๊กอินนี้",
"alert.install-success": "ติดตั้งปลั๊กอินแล้ว โปรดเปิดใช้งานปลั๊กอิน",
"alert.uninstall-success": "ปิดใช้งานปลั๊กอินและยกเลิกการติดตั้งแล้ว",
"alert.suggest-error": "
NodeBB ไม่สามารถเข้าถึงตัวจัดการแพคเกจดำเนินการติดตั้งเวอร์ชันล่าสุดได้หรือไม่?
NodeBB ไม่สามารถติดต่อตัวจัดการแพคเกจได้ในขณะนี้เราไม่แนะนำให้อัปเกรด
", "alert.incompatible": "เวอร์ชันของ NodeBB (v%1) จะถูกล้างเพื่อให้มีการอัพเกรดไป v%2 ของปลั๊กอินนี้ โปรดอัปเดต NodeBB ของคุณหากคุณต้องการติดตั้งปลั๊กอินเวอร์ชันใหม่นี้", "alert.possibly-incompatible": "
ไม่พบข้อมูลความเข้ากันได้
ปลั๊กอินนี้ไม่ได้ระบุเวอร์ชันเฉพาะสำหรับการติดตั้งที่ให้เวอร์ชัน NodeBB ของคุณ ไม่สามารถรับประกันความสามารถในการใช้งานร่วมกันได้เต็มรูปแบบและอาจทำให้ NodeBB ของคุณทำงานไม่ได้อย่างถูกต้องอีกต่อไป
ในกรณีที่ NodeBB ไม่สามารถบูตได้อย่างถูกต้อง:
$ ./nodebb reset plugin=\"%1\"ติดตั้งปลั๊กอินนี้เวอร์ชันล่าสุดต่อหรือไม่?
", - "alert.reorder": "Plugins Re-ordered", - "alert.reorder-success": "Please rebuild and restart your NodeBB to fully complete the process.", + "alert.reorder": "ปลั๊กอินถูกเรียงลำดับใหม่แล้ว", + "alert.reorder-success": "โปรดสร้างและเริ่มต้น NodeBB ใหม่เพื่อเสร็จสิ้นกระบวนการ", "license.title": "ข้อมูลลิขสิทธิ์ปลั๊กอิน", "license.intro": "ปลั๊กอิน %1ได้รับอนุญาตภายใต้ %2 โปรดอ่านและทำความเข้าใจข้อกำหนดสิทธิ์การใช้งานก่อนเปิดใช้งานปลั๊กอินนี้", diff --git a/public/language/th/admin/extend/rewards.json b/public/language/th/admin/extend/rewards.json index 2706a25f51..c334de8498 100644 --- a/public/language/th/admin/extend/rewards.json +++ b/public/language/th/admin/extend/rewards.json @@ -1,17 +1,17 @@ { "rewards": "Rewards", - "add-reward": "Add reward", - "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", - "select-reward": "Select reward", - "delete": "Delete", - "enable": "Enable", - "disable": "Disable", + "add-reward": "เพิ่มรางวัล", + "condition-if-users": "ถ้า ... ของผู้ใช้งาน", + "condition-is": "มีค่า:", + "condition-then": "แล้ว:", + "max-claims": "จำนวนครั้งที่สามารถรับรางวัลได้", + "zero-infinite": "ใส่ 0 ถ้ารับได้ไม่จำกัด", + "select-reward": "เลือกรางวัล", + "delete": "ลบ", + "enable": "เปิดการใช้งาน", + "disable": "ปิดการใช้งาน", - "alert.delete-success": "Successfully deleted reward", - "alert.no-inputs-found": "Illegal reward - no inputs found!", - "alert.save-success": "Successfully saved rewards" + "alert.delete-success": "ลบรางวัลสำเร็จ", + "alert.no-inputs-found": "รางวัลไม่ถูกต้อง - ยังไม่ได้ใส่ข้อมูล!", + "alert.save-success": "บันทึกรางวัลสำเร็จ" } \ No newline at end of file diff --git a/public/language/th/admin/manage/categories.json b/public/language/th/admin/manage/categories.json index 8a9ff471b0..6d114d5abb 100644 --- a/public/language/th/admin/manage/categories.json +++ b/public/language/th/admin/manage/categories.json @@ -1,31 +1,31 @@ { - "manage-categories": "Manage Categories", - "add-category": "Add category", - "jump-to": "Jump to...", - "settings": "Category Settings", - "edit-category": "Edit Category", - "privileges": "Privileges", - "back-to-categories": "Back to categories", - "name": "Category Name", - "description": "Category Description", - "bg-color": "Background Colour", - "text-color": "Text Colour", - "bg-image-size": "Background Image Size", - "custom-class": "Custom Class", - "num-recent-replies": "# of Recent Replies", - "ext-link": "External Link", - "subcategories-per-page": "Subcategories per page", + "manage-categories": "จัดการหมวดหมู่", + "add-category": "เพิ่มหมวดหมู่", + "jump-to": "ไปที่...", + "settings": "การตั้งค่าหมวดหมู่", + "edit-category": "แก้ไขหมวดหมู่", + "privileges": "สิทธิ์", + "back-to-categories": "กลับไปที่หมวดหมู่ทั้งหมด", + "name": "ชื่อหมวดหมู่", + "description": "คำอธิบายหมวดหมู่", + "bg-color": "สีพื้น", + "text-color": "สีข้อความ", + "bg-image-size": "ขนาดภาพพื้นหลัง", + "custom-class": "ปรับแต่งคลาส", + "num-recent-replies": "จำนวนตอบกลับล่าสุด", + "ext-link": "ลิงก์ภายนอก", + "subcategories-per-page": "จำนวนหมวดหมู่ย่อยต่อหน้า", "is-section": "Treat this category as a section", - "post-queue": "Post queue", + "post-queue": "คิวการโพสต์", "tag-whitelist": "Tag Whitelist", - "upload-image": "Upload Image", - "upload": "Upload", - "delete-image": "Remove", - "category-image": "Category Image", - "image-and-icon": "Image & Icon", + "upload-image": "อัปโหลดรูป", + "upload": "อัปโหลด", + "delete-image": "ลบ", + "category-image": "รูปภาพหมวดหมู่", + "image-and-icon": "ภาพ & ไอคอน", "parent-category": "Parent Category", "optional-parent-category": "(Optional) Parent Category", - "top-level": "Top Level", + "top-level": "ระดับบนสุด", "parent-category-none": "(None)", "copy-parent": "Copy Parent", "copy-settings": "Copy Settings From", @@ -33,8 +33,8 @@ "clone-children": "Clone Children Categories And Settings", "purge": "Purge Category", - "enable": "Enable", - "disable": "Disable", + "enable": "เปิดการใช้งาน", + "disable": "ปิดการใช้งาน", "edit": "Edit", "analytics": "Analytics", diff --git a/public/language/th/global.json b/public/language/th/global.json index f5aac99b63..e594121bd5 100644 --- a/public/language/th/global.json +++ b/public/language/th/global.json @@ -134,7 +134,7 @@ "unsaved-changes": "การเปลี่ยนแปลงของคุณจะไม่ได้รับการบันทึก คุณแน่ใจหรือว่าต้องการออกจากที่นี่?", "reconnecting-message": "เหมือนกับว่าการเชื่อมต่อของคุณเพื่อไปยัง %1 นั้นขาดหาย กรุณารอสักครู่ เรากำลังพยายามเชื่อมต่อใหม่", "play": "เล่น", - "cookies.message": "เว็บไวต์นี้ใช้คุกกี้เพื่อที่จะทำให้แน่ใจว่า คุณได้รับประสบการณ์ที่เยี่ยมยอดที่สุดในการเข้าใช้เว็บไซต์ของเรา", + "cookies.message": "เว็บไซต์นี้ใช้คุกกี้เพื่อที่จะทำให้แน่ใจว่า คุณได้รับประสบการณ์ที่เยี่ยมยอดที่สุดในการเข้าใช้เว็บไซต์ของเรา", "cookies.accept": "เข้าใจแล้ว!!!", "cookies.learn-more": "เรียนรู้เพิ่มเติม", "edited": "ถูกแก้ไขแล้ว", diff --git a/public/language/th/user.json b/public/language/th/user.json index e68b9dc4f0..66f9d9c63e 100644 --- a/public/language/th/user.json +++ b/public/language/th/user.json @@ -170,7 +170,7 @@ "info.reported-by": "ถูกรายงานโดย:", "info.no-flags": "ไม่พบโพสต์ที่ถูกรายงาน", "info.ban-history": "ประวัติแบนล่าสุด", - "info.no-ban-history": "ผู้ใช้นี้ถูกแบนแล้ว", + "info.no-ban-history": "ผู้ใช้รายนี้ยังไม่เคยถูกแบน", "info.banned-until": "แบนจนกว่า %1", "info.banned-expiry": "หมดอายุ", "info.ban-expired": "การแบนหมดอายุ", diff --git a/public/src/modules/topicThumbs.js b/public/src/modules/topicThumbs.js index 368ecf71b0..5495bad541 100644 --- a/public/src/modules/topicThumbs.js +++ b/public/src/modules/topicThumbs.js @@ -87,7 +87,7 @@ define('topicThumbs', [ Thumbs.modal.handleDelete = (payload) => { const modalEl = payload.modal.get(0); - + const { id: uuid } = payload; modalEl.addEventListener('click', (ev) => { if (ev.target.closest('button[data-action="remove"]')) { bootbox.confirm('[[modules:thumbs.modal.confirm-remove]]', (ok) => { @@ -101,6 +101,9 @@ define('topicThumbs', [ path: path, }).then(() => { Thumbs.modal.open(payload); + require(['composer'], (composer) => { + composer.updateThumbCount(uuid, $(`[component="composer"][data-uuid="${uuid}"]`)); + }); }).catch(alerts.error); }); } diff --git a/src/controllers/errors.js b/src/controllers/errors.js index 35e2617bb1..df00b81d47 100644 --- a/src/controllers/errors.js +++ b/src/controllers/errors.js @@ -101,10 +101,12 @@ exports.handleErrors = async function handleErrors(err, req, res, next) { // esl try { if (data.cases.hasOwnProperty(err.code)) { data.cases[err.code](err, req, res, defaultHandler); - } else if (err.message.startsWith('[[error:no-') && err.message !== '[[error:no-privileges]]') { - notFoundHandler(); - } else if (err.message.startsWith('Failed to lookup view')) { - notBuiltHandler(); + } else if (err.message) { + if (err.message.startsWith('[[error:no-') && err.message !== '[[error:no-privileges]]') { + notFoundHandler(); + } else if (err.message.startsWith('Failed to lookup view')) { + notBuiltHandler(); + } } else { await defaultHandler(); } diff --git a/src/middleware/render.js b/src/middleware/render.js index 21ff25170d..78d3577418 100644 --- a/src/middleware/render.js +++ b/src/middleware/render.js @@ -52,13 +52,21 @@ module.exports = function (middleware) { res.set('cache-control', 'private'); } - const buildResult = await plugins.hooks.fire(`filter:${template}.build`, { req: req, res: res, templateData: options }); + const buildResult = await plugins.hooks.fire(`filter:${template}.build`, { + req: req, + res: res, + templateData: options, + }); if (res.headersSent) { return; } const templateToRender = buildResult.templateData.templateToRender || template; - const renderResult = await plugins.hooks.fire('filter:middleware.render', { req: req, res: res, templateData: buildResult.templateData }); + const renderResult = await plugins.hooks.fire('filter:middleware.render', { + req: req, + res: res, + templateData: buildResult.templateData, + }); if (res.headersSent) { return; }