diff --git a/.docker/.gitkeep b/.docker/.gitkeep
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/.docker/build/.gitkeep b/.docker/build/.gitkeep
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/.docker/config/.gitkeep b/.docker/config/.gitkeep
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/.docker/database/mongo/data/.gitkeep b/.docker/database/mongo/data/.gitkeep
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/.docker/database/postgresql/data/.gitkeep b/.docker/database/postgresql/data/.gitkeep
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/.docker/database/redis/data/.gitkeep b/.docker/database/redis/data/.gitkeep
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/.docker/public/uploads/.gitkeep b/.docker/public/uploads/.gitkeep
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/.eslintignore b/.eslintignore
deleted file mode 100644
index b304ee19d8..0000000000
--- a/.eslintignore
+++ /dev/null
@@ -1,21 +0,0 @@
-node_modules/
-*.sublime-project
-*.sublime-workspace
-.project
-.vagrant
-.DS_Store
-logs/
-/public/templates
-/public/uploads
-/public/vendor
-/public/src/modules/string.js
-.idea/
-.vscode/
-*.ipr
-*.iws
-/coverage
-/build
-.eslintrc
-test/files
-*.min.js
-install/docker/
\ No newline at end of file
diff --git a/.eslintrc b/.eslintrc
deleted file mode 100644
index abd292af1b..0000000000
--- a/.eslintrc
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "extends": "nodebb"
-}
diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml
index 16fc4a0de0..ee554e117e 100644
--- a/.github/workflows/docker.yml
+++ b/.github/workflows/docker.yml
@@ -16,46 +16,116 @@ permissions:
packages: write
jobs:
- release:
- runs-on: ubuntu-latest
+ build:
+ strategy:
+ matrix:
+ include:
+ - os: ubuntu-latest
+ platforms: linux/amd64
+ required: true
+ - os: ubuntu-24.04-arm
+ platforms: linux/arm64
+ required: true
+ continue-on-error: ${{ !matrix.required }}
+ runs-on: ${{ matrix.os }}
steps:
-
- - uses: actions/checkout@v4
- with:
- fetch-depth: 0
-
- - name: Set up QEMU
- uses: docker/setup-qemu-action@v3
+ - name: Prepare
+ run: |
+ platform=${{ matrix.platforms }}
+ echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV
+ echo "IMAGE=ghcr.io/${GITHUB_REPOSITORY@L}" >> $GITHUB_ENV
+ - uses: actions/checkout@v6
- name: Set up Docker Buildx
- uses: docker/setup-buildx-action@v3
+ uses: docker/setup-buildx-action@v4
- name: Login to GitHub Container Registry
- uses: docker/login-action@v3
+ uses: docker/login-action@v4
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
-
- name: Docker meta
id: meta
- uses: docker/metadata-action@v5
+ uses: docker/metadata-action@v6
with:
- images: ghcr.io/${{ github.repository }}
+ images: ${{ env.IMAGE }}
+
+ - name: Cache node_modules
+ id: cache-node-modules
+ uses: actions/cache@v5
+ with:
+ path: var-cache-node-modules
+ key: var-cache-node-modules-${{ hashFiles('Dockerfile', 'install/package.json') }}
+
+ - name: Build and push Docker images
+ id: build
+ uses: docker/build-push-action@v7
+ with:
+ cache-from: type=gha
+ cache-to: type=gha,mode=min
+ context: .
+ file: ./Dockerfile
+ platforms: ${{ matrix.platforms }}
+ labels: ${{ steps.meta.outputs.labels }}
+ tags: ${{ env.IMAGE }}
+ outputs: type=image,push-by-digest=true,name-canonical=true,push=true
+ - name: Export digest
+ run: |
+ mkdir -p ${{ runner.temp }}/digests
+ digest="${{ steps.build.outputs.digest }}"
+ touch "${{ runner.temp }}/digests/${digest#sha256:}"
+
+ - name: Upload digest
+ uses: actions/upload-artifact@v7
+ with:
+ name: digests-${{ env.PLATFORM_PAIR }}
+ path: ${{ runner.temp }}/digests/*
+ if-no-files-found: error
+ retention-days: 1
+ merge:
+ runs-on: ubuntu-latest
+ needs:
+ - build
+ steps:
+ - name: Prepare
+ run: |
+ echo "IMAGE=ghcr.io/${GITHUB_REPOSITORY@L}" >> $GITHUB_ENV
+ echo "CURRENT_DATE_NST=$(date +'%Y%m%d-%H%M%S' -d '-3 hours -30 minutes')" >> $GITHUB_ENV
+ - name: Download digests
+ uses: actions/download-artifact@v8
+ with:
+ path: ${{ runner.temp }}/digests
+ pattern: digests-*
+ merge-multiple: true
+ - name: Set up Docker Buildx
+ uses: docker/setup-buildx-action@v4
+
+ - name: Login to GitHub Container Registry
+ uses: docker/login-action@v4
+ with:
+ registry: ghcr.io
+ username: ${{ github.repository_owner }}
+ password: ${{ secrets.GITHUB_TOKEN }}
+ - name: Docker meta
+ id: meta
+ uses: docker/metadata-action@v6
+ with:
+ images: ${{ env.IMAGE }}
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 }}
-
- - name: Build and push Docker images
- uses: docker/build-push-action@v5
- with:
- cache-from: type=gha
- cache-to: type=gha,mode=max
- context: .
- file: ./Dockerfile
- platforms: linux/amd64,linux/arm64,linux/arm/v7
- push: true
- tags: ${{ steps.meta.outputs.tags }}
+ type=raw,value=${{ env.CURRENT_DATE_NST }}
+ flavor: |
+ latest=true
+ - name: Create manifest list and push
+ working-directory: ${{ runner.temp }}/digests
+ run: |
+ docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \
+ $(printf '${{ env.IMAGE }}@sha256:%s ' *)
+ - name: Inspect image
+ run: |
+ docker buildx imagetools inspect ${{ env.IMAGE }}:${{ steps.meta.outputs.version }}
diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml
index 0733c4d02f..00846e9c06 100644
--- a/.github/workflows/test.yaml
+++ b/.github/workflows/test.yaml
@@ -27,19 +27,19 @@ jobs:
fail-fast: false
matrix:
os: [ubuntu-latest]
- node: [18, 20]
+ node: [20, 22]
database: [mongo-dev, mongo, redis, postgres]
include:
# only run coverage once
- os: ubuntu-latest
- node: 18
+ node: 22
coverage: true
# test under development once
- database: mongo-dev
test_env: development
# only run eslint once
- os: ubuntu-latest
- node: 18
+ node: 22
database: mongo-dev
lint: true
runs-on: ${{ matrix.os }}
@@ -48,7 +48,7 @@ jobs:
services:
postgres:
- image: 'postgres:16-alpine'
+ image: 'postgres:18-alpine'
env:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
@@ -63,7 +63,7 @@ jobs:
- 5432:5432
redis:
- image: 'redis:7.2.3'
+ image: 'redis:8.6.2'
# Set health checks to wait until redis has started
options: >-
--health-cmd "redis-cli ping"
@@ -75,18 +75,18 @@ jobs:
- 6379:6379
mongo:
- image: 'mongo:7.0'
+ image: 'mongo:8.2'
ports:
# Maps port 27017 on service container to the host
- 27017:27017
steps:
- - uses: actions/checkout@v4
+ - uses: actions/checkout@v6
- run: cp install/package.json package.json
- name: Install Node
- uses: actions/setup-node@v4
+ uses: actions/setup-node@v6
with:
node-version: ${{ matrix.node }}
@@ -192,12 +192,13 @@ jobs:
run: npm run coverage
- name: Test coverage
- uses: coverallsapp/github-action@3dfc5567390f6fa9267c0ee9c251e4c8c3f18949 # v2.2.3
+ uses: coverallsapp/github-action@648a8eb78e6d50909eff900e4ec85cab4524a45b # v2.3.6
if: matrix.coverage
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
flag-name: ${{ matrix.os }}-node-${{ matrix.node }}-db-${{ matrix.database }}
parallel: true
+ fail-on-error: false
finish:
permissions:
@@ -206,7 +207,8 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Coveralls Finished
- uses: coverallsapp/github-action@3dfc5567390f6fa9267c0ee9c251e4c8c3f18949 # v2.2.3
+ uses: coverallsapp/github-action@648a8eb78e6d50909eff900e4ec85cab4524a45b # v2.3.6
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
parallel-finished: true
+ fail-on-error: false
diff --git a/.gitignore b/.gitignore
index 887ef337b0..42a1b3c705 100644
--- a/.gitignore
+++ b/.gitignore
@@ -71,4 +71,5 @@ package-lock.json
link-plugins.sh
test.sh
-.docker/
\ No newline at end of file
+.docker/**
+!**/.gitkeep
\ No newline at end of file
diff --git a/.tx/config b/.tx/config
index a6bcb48d72..ff0e36f735 100644
--- a/.tx/config
+++ b/.tx/config
@@ -6,51 +6,54 @@ file_filter = public/language//admin/admin.json
source_file = public/language/en-GB/admin/admin.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.pt_BR = public/language/pt-BR/admin/admin.json
-trans.en@pirate = public/language/en-x-pirate/admin/admin.json
-trans.hy = public/language/hy/admin/admin.json
-trans.pl = public/language/pl/admin/admin.json
-trans.th = public/language/th/admin/admin.json
-trans.de = public/language/de/admin/admin.json
-trans.el = public/language/el/admin/admin.json
trans.ar = public/language/ar/admin/admin.json
+trans.az = public/language/az/admin/admin.json
trans.bg = public/language/bg/admin/admin.json
trans.bn = public/language/bn/admin/admin.json
-trans.it = public/language/it/admin/admin.json
-trans.lv = public/language/lv/admin/admin.json
-trans.nl = public/language/nl/admin/admin.json
-trans.ru = public/language/ru/admin/admin.json
-trans.sr = public/language/sr/admin/admin.json
-trans.sv = public/language/sv/admin/admin.json
-trans.uk = public/language/uk/admin/admin.json
-trans.zh_CN = public/language/zh-CN/admin/admin.json
-trans.fa_IR = public/language/fa-IR/admin/admin.json
-trans.id = public/language/id/admin/admin.json
-trans.ms = public/language/ms/admin/admin.json
-trans.nb = public/language/nb/admin/admin.json
-trans.sk = public/language/sk/admin/admin.json
trans.cs = public/language/cs/admin/admin.json
-trans.fi = public/language/fi/admin/admin.json
-trans.fr = public/language/fr/admin/admin.json
-trans.rw = public/language/rw/admin/admin.json
-trans.sq_AL = public/language/sq-AL/admin/admin.json
+trans.da = public/language/da/admin/admin.json
+trans.de = public/language/de/admin/admin.json
+trans.el = public/language/el/admin/admin.json
trans.en_US = public/language/en-US/admin/admin.json
+trans.en@pirate = public/language/en-x-pirate/admin/admin.json
trans.es = public/language/es/admin/admin.json
trans.et = public/language/et/admin/admin.json
+trans.fa_IR = public/language/fa-IR/admin/admin.json
+trans.fi = public/language/fi/admin/admin.json
+trans.fr = public/language/fr/admin/admin.json
trans.gl = public/language/gl/admin/admin.json
trans.he = public/language/he/admin/admin.json
-trans.ja = public/language/ja/admin/admin.json
-trans.lt = public/language/lt/admin/admin.json
-trans.pt_PT = public/language/pt-PT/admin/admin.json
-trans.sc = public/language/sc/admin/admin.json
-trans.sl = public/language/sl/admin/admin.json
-trans.vi = public/language/vi/admin/admin.json
-trans.da = public/language/da/admin/admin.json
trans.hr = public/language/hr/admin/admin.json
trans.hu = public/language/hu/admin/admin.json
+trans.hy = public/language/hy/admin/admin.json
+trans.id = public/language/id/admin/admin.json
+trans.it = public/language/it/admin/admin.json
+trans.ja = public/language/ja/admin/admin.json
trans.ko = public/language/ko/admin/admin.json
+trans.lt = public/language/lt/admin/admin.json
+trans.lv = public/language/lv/admin/admin.json
+trans.ms = public/language/ms/admin/admin.json
+trans.nb = public/language/nb/admin/admin.json
+trans.nl = public/language/nl/admin/admin.json
+trans.nn_NO = public/language/nn-NO/admin/admin.json
+trans.pl = public/language/pl/admin/admin.json
+trans.pt_BR = public/language/pt-BR/admin/admin.json
+trans.pt_PT = public/language/pt-PT/admin/admin.json
trans.ro = public/language/ro/admin/admin.json
+trans.ru = public/language/ru/admin/admin.json
+trans.rw = public/language/rw/admin/admin.json
+trans.sc = public/language/sc/admin/admin.json
+trans.sk = public/language/sk/admin/admin.json
+trans.sl = public/language/sl/admin/admin.json
+trans.sq_AL = public/language/sq-AL/admin/admin.json
+trans.sr = public/language/sr/admin/admin.json
+trans.sv = public/language/sv/admin/admin.json
+trans.th = public/language/th/admin/admin.json
trans.tr = public/language/tr/admin/admin.json
+trans.uk = public/language/uk/admin/admin.json
+trans.ur = public/language/ur/admin/admin.json
+trans.vi = public/language/vi/admin/admin.json
+trans.zh_CN = public/language/zh-CN/admin/admin.json
trans.zh_TW = public/language/zh-TW/admin/admin.json
[o:nodebb:p:nodebb:r:admin-advanced-cache]
@@ -58,415 +61,494 @@ file_filter = public/language//admin/advanced/cache.json
source_file = public/language/en-GB/admin/advanced/cache.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.fa_IR = public/language/fa-IR/admin/advanced/cache.json
-trans.he = public/language/he/admin/advanced/cache.json
-trans.ko = public/language/ko/admin/advanced/cache.json
-trans.pt_PT = public/language/pt-PT/admin/advanced/cache.json
-trans.rw = public/language/rw/admin/advanced/cache.json
-trans.tr = public/language/tr/admin/advanced/cache.json
-trans.en_US = public/language/en-US/admin/advanced/cache.json
-trans.hu = public/language/hu/admin/advanced/cache.json
-trans.id = public/language/id/admin/advanced/cache.json
-trans.ms = public/language/ms/admin/advanced/cache.json
-trans.sc = public/language/sc/admin/advanced/cache.json
-trans.sv = public/language/sv/admin/advanced/cache.json
-trans.es = public/language/es/admin/advanced/cache.json
-trans.gl = public/language/gl/admin/advanced/cache.json
-trans.lv = public/language/lv/admin/advanced/cache.json
-trans.nl = public/language/nl/admin/advanced/cache.json
-trans.ru = public/language/ru/admin/advanced/cache.json
-trans.zh_TW = public/language/zh-TW/admin/advanced/cache.json
-trans.bn = public/language/bn/admin/advanced/cache.json
-trans.en@pirate = public/language/en-x-pirate/admin/advanced/cache.json
-trans.fr = public/language/fr/admin/advanced/cache.json
-trans.hr = public/language/hr/admin/advanced/cache.json
-trans.pt_BR = public/language/pt-BR/admin/advanced/cache.json
trans.ar = public/language/ar/admin/advanced/cache.json
+trans.az = public/language/az/admin/advanced/cache.json
trans.bg = public/language/bg/admin/advanced/cache.json
+trans.bn = public/language/bn/admin/advanced/cache.json
trans.cs = public/language/cs/admin/advanced/cache.json
-trans.lt = public/language/lt/admin/advanced/cache.json
-trans.nb = public/language/nb/admin/advanced/cache.json
-trans.uk = public/language/uk/admin/advanced/cache.json
-trans.el = public/language/el/admin/advanced/cache.json
-trans.pl = public/language/pl/admin/advanced/cache.json
-trans.sr = public/language/sr/admin/advanced/cache.json
trans.da = public/language/da/admin/advanced/cache.json
+trans.de = public/language/de/admin/advanced/cache.json
+trans.el = public/language/el/admin/advanced/cache.json
+trans.en_US = public/language/en-US/admin/advanced/cache.json
+trans.en@pirate = public/language/en-x-pirate/admin/advanced/cache.json
+trans.es = public/language/es/admin/advanced/cache.json
trans.et = public/language/et/admin/advanced/cache.json
+trans.fa_IR = public/language/fa-IR/admin/advanced/cache.json
trans.fi = public/language/fi/admin/advanced/cache.json
+trans.fr = public/language/fr/admin/advanced/cache.json
+trans.gl = public/language/gl/admin/advanced/cache.json
+trans.he = public/language/he/admin/advanced/cache.json
+trans.hr = public/language/hr/admin/advanced/cache.json
+trans.hu = public/language/hu/admin/advanced/cache.json
trans.hy = public/language/hy/admin/advanced/cache.json
+trans.id = public/language/id/admin/advanced/cache.json
+trans.it = public/language/it/admin/advanced/cache.json
trans.ja = public/language/ja/admin/advanced/cache.json
+trans.ko = public/language/ko/admin/advanced/cache.json
+trans.lt = public/language/lt/admin/advanced/cache.json
+trans.lv = public/language/lv/admin/advanced/cache.json
+trans.ms = public/language/ms/admin/advanced/cache.json
+trans.nb = public/language/nb/admin/advanced/cache.json
+trans.nl = public/language/nl/admin/advanced/cache.json
+trans.nn_NO = public/language/nn-NO/admin/advanced/cache.json
+trans.pl = public/language/pl/admin/advanced/cache.json
+trans.pt_BR = public/language/pt-BR/admin/advanced/cache.json
+trans.pt_PT = public/language/pt-PT/admin/advanced/cache.json
+trans.ro = public/language/ro/admin/advanced/cache.json
+trans.ru = public/language/ru/admin/advanced/cache.json
+trans.rw = public/language/rw/admin/advanced/cache.json
+trans.sc = public/language/sc/admin/advanced/cache.json
+trans.sk = public/language/sk/admin/advanced/cache.json
trans.sl = public/language/sl/admin/advanced/cache.json
trans.sq_AL = public/language/sq-AL/admin/advanced/cache.json
+trans.sr = public/language/sr/admin/advanced/cache.json
+trans.sv = public/language/sv/admin/advanced/cache.json
trans.th = public/language/th/admin/advanced/cache.json
-trans.de = public/language/de/admin/advanced/cache.json
-trans.it = public/language/it/admin/advanced/cache.json
-trans.ro = public/language/ro/admin/advanced/cache.json
-trans.sk = public/language/sk/admin/advanced/cache.json
+trans.tr = public/language/tr/admin/advanced/cache.json
+trans.uk = public/language/uk/admin/advanced/cache.json
+trans.ur = public/language/ur/admin/advanced/cache.json
trans.vi = public/language/vi/admin/advanced/cache.json
trans.zh_CN = public/language/zh-CN/admin/advanced/cache.json
+trans.zh_TW = public/language/zh-TW/admin/advanced/cache.json
[o:nodebb:p:nodebb:r:admin-advanced-database]
file_filter = public/language//admin/advanced/database.json
source_file = public/language/en-GB/admin/advanced/database.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.fr = public/language/fr/admin/advanced/database.json
-trans.he = public/language/he/admin/advanced/database.json
-trans.ja = public/language/ja/admin/advanced/database.json
-trans.lv = public/language/lv/admin/advanced/database.json
-trans.pt_PT = public/language/pt-PT/admin/advanced/database.json
-trans.en_US = public/language/en-US/admin/advanced/database.json
-trans.el = public/language/el/admin/advanced/database.json
-trans.tr = public/language/tr/admin/advanced/database.json
-trans.zh_CN = public/language/zh-CN/admin/advanced/database.json
trans.ar = public/language/ar/admin/advanced/database.json
-trans.hr = public/language/hr/admin/advanced/database.json
-trans.lt = public/language/lt/admin/advanced/database.json
-trans.ro = public/language/ro/admin/advanced/database.json
-trans.zh_TW = public/language/zh-TW/admin/advanced/database.json
-trans.gl = public/language/gl/admin/advanced/database.json
-trans.it = public/language/it/admin/advanced/database.json
-trans.nb = public/language/nb/admin/advanced/database.json
+trans.az = public/language/az/admin/advanced/database.json
+trans.bg = public/language/bg/admin/advanced/database.json
trans.bn = public/language/bn/admin/advanced/database.json
+trans.cs = public/language/cs/admin/advanced/database.json
trans.da = public/language/da/admin/advanced/database.json
trans.de = public/language/de/admin/advanced/database.json
+trans.el = public/language/el/admin/advanced/database.json
+trans.en_US = public/language/en-US/admin/advanced/database.json
trans.en@pirate = public/language/en-x-pirate/admin/advanced/database.json
+trans.es = public/language/es/admin/advanced/database.json
+trans.et = public/language/et/admin/advanced/database.json
+trans.fa_IR = public/language/fa-IR/admin/advanced/database.json
+trans.fi = public/language/fi/admin/advanced/database.json
+trans.fr = public/language/fr/admin/advanced/database.json
+trans.gl = public/language/gl/admin/advanced/database.json
+trans.he = public/language/he/admin/advanced/database.json
+trans.hr = public/language/hr/admin/advanced/database.json
trans.hu = public/language/hu/admin/advanced/database.json
trans.hy = public/language/hy/admin/advanced/database.json
trans.id = public/language/id/admin/advanced/database.json
+trans.it = public/language/it/admin/advanced/database.json
+trans.ja = public/language/ja/admin/advanced/database.json
+trans.ko = public/language/ko/admin/advanced/database.json
+trans.lt = public/language/lt/admin/advanced/database.json
+trans.lv = public/language/lv/admin/advanced/database.json
+trans.ms = public/language/ms/admin/advanced/database.json
+trans.nb = public/language/nb/admin/advanced/database.json
trans.nl = public/language/nl/admin/advanced/database.json
-trans.cs = public/language/cs/admin/advanced/database.json
-trans.sv = public/language/sv/admin/advanced/database.json
-trans.sr = public/language/sr/admin/advanced/database.json
+trans.nn_NO = public/language/nn-NO/admin/advanced/database.json
trans.pl = public/language/pl/admin/advanced/database.json
+trans.pt_BR = public/language/pt-BR/admin/advanced/database.json
+trans.pt_PT = public/language/pt-PT/admin/advanced/database.json
+trans.ro = public/language/ro/admin/advanced/database.json
trans.ru = public/language/ru/admin/advanced/database.json
+trans.rw = public/language/rw/admin/advanced/database.json
trans.sc = public/language/sc/admin/advanced/database.json
+trans.sk = public/language/sk/admin/advanced/database.json
trans.sl = public/language/sl/admin/advanced/database.json
trans.sq_AL = public/language/sq-AL/admin/advanced/database.json
+trans.sr = public/language/sr/admin/advanced/database.json
+trans.sv = public/language/sv/admin/advanced/database.json
trans.th = public/language/th/admin/advanced/database.json
-trans.et = public/language/et/admin/advanced/database.json
-trans.fa_IR = public/language/fa-IR/admin/advanced/database.json
-trans.ko = public/language/ko/admin/advanced/database.json
-trans.sk = public/language/sk/admin/advanced/database.json
-trans.vi = public/language/vi/admin/advanced/database.json
-trans.es = public/language/es/admin/advanced/database.json
-trans.fi = public/language/fi/admin/advanced/database.json
-trans.ms = public/language/ms/admin/advanced/database.json
-trans.pt_BR = public/language/pt-BR/admin/advanced/database.json
-trans.rw = public/language/rw/admin/advanced/database.json
+trans.tr = public/language/tr/admin/advanced/database.json
trans.uk = public/language/uk/admin/advanced/database.json
-trans.bg = public/language/bg/admin/advanced/database.json
+trans.ur = public/language/ur/admin/advanced/database.json
+trans.vi = public/language/vi/admin/advanced/database.json
+trans.zh_CN = public/language/zh-CN/admin/advanced/database.json
+trans.zh_TW = public/language/zh-TW/admin/advanced/database.json
[o:nodebb:p:nodebb:r:admin-advanced-errors]
file_filter = public/language//admin/advanced/errors.json
source_file = public/language/en-GB/admin/advanced/errors.json
source_lang = en_GB
type = KEYVALUEJSON
+trans.ar = public/language/ar/admin/advanced/errors.json
+trans.az = public/language/az/admin/advanced/errors.json
+trans.bg = public/language/bg/admin/advanced/errors.json
+trans.bn = public/language/bn/admin/advanced/errors.json
trans.cs = public/language/cs/admin/advanced/errors.json
-trans.en_US = public/language/en-US/admin/advanced/errors.json
-trans.es = public/language/es/admin/advanced/errors.json
-trans.pl = public/language/pl/admin/advanced/errors.json
-trans.sk = public/language/sk/admin/advanced/errors.json
-trans.uk = public/language/uk/admin/advanced/errors.json
trans.da = public/language/da/admin/advanced/errors.json
-trans.gl = public/language/gl/admin/advanced/errors.json
-trans.hu = public/language/hu/admin/advanced/errors.json
-trans.pt_PT = public/language/pt-PT/admin/advanced/errors.json
-trans.vi = public/language/vi/admin/advanced/errors.json
trans.de = public/language/de/admin/advanced/errors.json
-trans.ko = public/language/ko/admin/advanced/errors.json
-trans.nb = public/language/nb/admin/advanced/errors.json
-trans.sc = public/language/sc/admin/advanced/errors.json
-trans.sl = public/language/sl/admin/advanced/errors.json
-trans.tr = public/language/tr/admin/advanced/errors.json
-trans.zh_CN = public/language/zh-CN/admin/advanced/errors.json
+trans.el = public/language/el/admin/advanced/errors.json
+trans.en_US = public/language/en-US/admin/advanced/errors.json
+trans.en@pirate = public/language/en-x-pirate/admin/advanced/errors.json
+trans.es = public/language/es/admin/advanced/errors.json
+trans.et = public/language/et/admin/advanced/errors.json
+trans.fa_IR = public/language/fa-IR/admin/advanced/errors.json
+trans.fi = public/language/fi/admin/advanced/errors.json
trans.fr = public/language/fr/admin/advanced/errors.json
+trans.gl = public/language/gl/admin/advanced/errors.json
+trans.he = public/language/he/admin/advanced/errors.json
+trans.hr = public/language/hr/admin/advanced/errors.json
+trans.hu = public/language/hu/admin/advanced/errors.json
trans.hy = public/language/hy/admin/advanced/errors.json
+trans.id = public/language/id/admin/advanced/errors.json
+trans.it = public/language/it/admin/advanced/errors.json
+trans.ja = public/language/ja/admin/advanced/errors.json
+trans.ko = public/language/ko/admin/advanced/errors.json
+trans.lt = public/language/lt/admin/advanced/errors.json
+trans.lv = public/language/lv/admin/advanced/errors.json
+trans.ms = public/language/ms/admin/advanced/errors.json
+trans.nb = public/language/nb/admin/advanced/errors.json
+trans.nl = public/language/nl/admin/advanced/errors.json
+trans.nn_NO = public/language/nn-NO/admin/advanced/errors.json
+trans.pl = public/language/pl/admin/advanced/errors.json
trans.pt_BR = public/language/pt-BR/admin/advanced/errors.json
+trans.pt_PT = public/language/pt-PT/admin/advanced/errors.json
trans.ro = public/language/ro/admin/advanced/errors.json
+trans.ru = public/language/ru/admin/advanced/errors.json
+trans.rw = public/language/rw/admin/advanced/errors.json
+trans.sc = public/language/sc/admin/advanced/errors.json
+trans.sk = public/language/sk/admin/advanced/errors.json
+trans.sl = public/language/sl/admin/advanced/errors.json
+trans.sq_AL = public/language/sq-AL/admin/advanced/errors.json
trans.sr = public/language/sr/admin/advanced/errors.json
trans.sv = public/language/sv/admin/advanced/errors.json
-trans.fa_IR = public/language/fa-IR/admin/advanced/errors.json
-trans.it = public/language/it/admin/advanced/errors.json
-trans.lt = public/language/lt/admin/advanced/errors.json
-trans.ms = public/language/ms/admin/advanced/errors.json
-trans.ru = public/language/ru/admin/advanced/errors.json
-trans.sq_AL = public/language/sq-AL/admin/advanced/errors.json
-trans.ar = public/language/ar/admin/advanced/errors.json
-trans.fi = public/language/fi/admin/advanced/errors.json
-trans.he = public/language/he/admin/advanced/errors.json
-trans.ja = public/language/ja/admin/advanced/errors.json
trans.th = public/language/th/admin/advanced/errors.json
+trans.tr = public/language/tr/admin/advanced/errors.json
+trans.uk = public/language/uk/admin/advanced/errors.json
+trans.ur = public/language/ur/admin/advanced/errors.json
+trans.vi = public/language/vi/admin/advanced/errors.json
+trans.zh_CN = public/language/zh-CN/admin/advanced/errors.json
trans.zh_TW = public/language/zh-TW/admin/advanced/errors.json
-trans.bn = public/language/bn/admin/advanced/errors.json
-trans.en@pirate = public/language/en-x-pirate/admin/advanced/errors.json
-trans.hr = public/language/hr/admin/advanced/errors.json
-trans.rw = public/language/rw/admin/advanced/errors.json
-trans.bg = public/language/bg/admin/advanced/errors.json
-trans.el = public/language/el/admin/advanced/errors.json
-trans.et = public/language/et/admin/advanced/errors.json
-trans.id = public/language/id/admin/advanced/errors.json
-trans.lv = public/language/lv/admin/advanced/errors.json
-trans.nl = public/language/nl/admin/advanced/errors.json
[o:nodebb:p:nodebb:r:admin-advanced-events]
file_filter = public/language//admin/advanced/events.json
source_file = public/language/en-GB/admin/advanced/events.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.bg = public/language/bg/admin/advanced/events.json
-trans.el = public/language/el/admin/advanced/events.json
-trans.lt = public/language/lt/admin/advanced/events.json
-trans.pt_BR = public/language/pt-BR/admin/advanced/events.json
-trans.zh_TW = public/language/zh-TW/admin/advanced/events.json
-trans.th = public/language/th/admin/advanced/events.json
-trans.gl = public/language/gl/admin/advanced/events.json
-trans.ko = public/language/ko/admin/advanced/events.json
-trans.nl = public/language/nl/admin/advanced/events.json
-trans.ro = public/language/ro/admin/advanced/events.json
-trans.sl = public/language/sl/admin/advanced/events.json
trans.ar = public/language/ar/admin/advanced/events.json
-trans.hr = public/language/hr/admin/advanced/events.json
-trans.vi = public/language/vi/admin/advanced/events.json
-trans.fa_IR = public/language/fa-IR/admin/advanced/events.json
-trans.ms = public/language/ms/admin/advanced/events.json
-trans.tr = public/language/tr/admin/advanced/events.json
-trans.nb = public/language/nb/admin/advanced/events.json
-trans.pt_PT = public/language/pt-PT/admin/advanced/events.json
-trans.sk = public/language/sk/admin/advanced/events.json
+trans.az = public/language/az/admin/advanced/events.json
+trans.bg = public/language/bg/admin/advanced/events.json
+trans.bn = public/language/bn/admin/advanced/events.json
+trans.cs = public/language/cs/admin/advanced/events.json
+trans.da = public/language/da/admin/advanced/events.json
+trans.de = public/language/de/admin/advanced/events.json
+trans.el = public/language/el/admin/advanced/events.json
+trans.en_US = public/language/en-US/admin/advanced/events.json
trans.en@pirate = public/language/en-x-pirate/admin/advanced/events.json
trans.es = public/language/es/admin/advanced/events.json
trans.et = public/language/et/admin/advanced/events.json
-trans.he = public/language/he/admin/advanced/events.json
-trans.lv = public/language/lv/admin/advanced/events.json
-trans.sv = public/language/sv/admin/advanced/events.json
-trans.zh_CN = public/language/zh-CN/admin/advanced/events.json
-trans.pl = public/language/pl/admin/advanced/events.json
-trans.rw = public/language/rw/admin/advanced/events.json
-trans.cs = public/language/cs/admin/advanced/events.json
-trans.de = public/language/de/admin/advanced/events.json
+trans.fa_IR = public/language/fa-IR/admin/advanced/events.json
+trans.fi = public/language/fi/admin/advanced/events.json
trans.fr = public/language/fr/admin/advanced/events.json
+trans.gl = public/language/gl/admin/advanced/events.json
+trans.he = public/language/he/admin/advanced/events.json
+trans.hr = public/language/hr/admin/advanced/events.json
+trans.hu = public/language/hu/admin/advanced/events.json
trans.hy = public/language/hy/admin/advanced/events.json
trans.id = public/language/id/admin/advanced/events.json
-trans.ru = public/language/ru/admin/advanced/events.json
-trans.sq_AL = public/language/sq-AL/admin/advanced/events.json
-trans.uk = public/language/uk/admin/advanced/events.json
-trans.da = public/language/da/admin/advanced/events.json
-trans.en_US = public/language/en-US/admin/advanced/events.json
-trans.hu = public/language/hu/admin/advanced/events.json
trans.it = public/language/it/admin/advanced/events.json
trans.ja = public/language/ja/admin/advanced/events.json
-trans.bn = public/language/bn/admin/advanced/events.json
-trans.fi = public/language/fi/admin/advanced/events.json
+trans.ko = public/language/ko/admin/advanced/events.json
+trans.lt = public/language/lt/admin/advanced/events.json
+trans.lv = public/language/lv/admin/advanced/events.json
+trans.ms = public/language/ms/admin/advanced/events.json
+trans.nb = public/language/nb/admin/advanced/events.json
+trans.nl = public/language/nl/admin/advanced/events.json
+trans.nn_NO = public/language/nn-NO/admin/advanced/events.json
+trans.pl = public/language/pl/admin/advanced/events.json
+trans.pt_BR = public/language/pt-BR/admin/advanced/events.json
+trans.pt_PT = public/language/pt-PT/admin/advanced/events.json
+trans.ro = public/language/ro/admin/advanced/events.json
+trans.ru = public/language/ru/admin/advanced/events.json
+trans.rw = public/language/rw/admin/advanced/events.json
trans.sc = public/language/sc/admin/advanced/events.json
+trans.sk = public/language/sk/admin/advanced/events.json
+trans.sl = public/language/sl/admin/advanced/events.json
+trans.sq_AL = public/language/sq-AL/admin/advanced/events.json
trans.sr = public/language/sr/admin/advanced/events.json
+trans.sv = public/language/sv/admin/advanced/events.json
+trans.th = public/language/th/admin/advanced/events.json
+trans.tr = public/language/tr/admin/advanced/events.json
+trans.uk = public/language/uk/admin/advanced/events.json
+trans.ur = public/language/ur/admin/advanced/events.json
+trans.vi = public/language/vi/admin/advanced/events.json
+trans.zh_CN = public/language/zh-CN/admin/advanced/events.json
+trans.zh_TW = public/language/zh-TW/admin/advanced/events.json
+
+[o:nodebb:p:nodebb:r:admin-advanced-jobs]
+file_filter = public/language//admin/advanced/jobs.json
+source_file = public/language/en-GB/admin/advanced/jobs.json
+source_lang = en_GB
+type = KEYVALUEJSON
+trans.ar = public/language/ar/admin/advanced/jobs.json
+trans.az = public/language/az/admin/advanced/jobs.json
+trans.bg = public/language/bg/admin/advanced/jobs.json
+trans.bn = public/language/bn/admin/advanced/jobs.json
+trans.cs = public/language/cs/admin/advanced/jobs.json
+trans.da = public/language/da/admin/advanced/jobs.json
+trans.de = public/language/de/admin/advanced/jobs.json
+trans.el = public/language/el/admin/advanced/jobs.json
+trans.en_US = public/language/en-US/admin/advanced/jobs.json
+trans.en@pirate = public/language/en-x-pirate/admin/advanced/jobs.json
+trans.es = public/language/es/admin/advanced/jobs.json
+trans.et = public/language/et/admin/advanced/jobs.json
+trans.fa_IR = public/language/fa-IR/admin/advanced/jobs.json
+trans.fi = public/language/fi/admin/advanced/jobs.json
+trans.fr = public/language/fr/admin/advanced/jobs.json
+trans.gl = public/language/gl/admin/advanced/jobs.json
+trans.he = public/language/he/admin/advanced/jobs.json
+trans.hr = public/language/hr/admin/advanced/jobs.json
+trans.hu = public/language/hu/admin/advanced/jobs.json
+trans.hy = public/language/hy/admin/advanced/jobs.json
+trans.id = public/language/id/admin/advanced/jobs.json
+trans.it = public/language/it/admin/advanced/jobs.json
+trans.ja = public/language/ja/admin/advanced/jobs.json
+trans.ko = public/language/ko/admin/advanced/jobs.json
+trans.lt = public/language/lt/admin/advanced/jobs.json
+trans.lv = public/language/lv/admin/advanced/jobs.json
+trans.ms = public/language/ms/admin/advanced/jobs.json
+trans.nb = public/language/nb/admin/advanced/jobs.json
+trans.nl = public/language/nl/admin/advanced/jobs.json
+trans.nn_NO = public/language/nn-NO/admin/advanced/jobs.json
+trans.pl = public/language/pl/admin/advanced/jobs.json
+trans.pt_BR = public/language/pt-BR/admin/advanced/jobs.json
+trans.pt_PT = public/language/pt-PT/admin/advanced/jobs.json
+trans.ro = public/language/ro/admin/advanced/jobs.json
+trans.ru = public/language/ru/admin/advanced/jobs.json
+trans.rw = public/language/rw/admin/advanced/jobs.json
+trans.sc = public/language/sc/admin/advanced/jobs.json
+trans.sk = public/language/sk/admin/advanced/jobs.json
+trans.sl = public/language/sl/admin/advanced/jobs.json
+trans.sq_AL = public/language/sq-AL/admin/advanced/jobs.json
+trans.sr = public/language/sr/admin/advanced/jobs.json
+trans.sv = public/language/sv/admin/advanced/jobs.json
+trans.th = public/language/th/admin/advanced/jobs.json
+trans.tr = public/language/tr/admin/advanced/jobs.json
+trans.uk = public/language/uk/admin/advanced/jobs.json
+trans.ur = public/language/ur/admin/advanced/jobs.json
+trans.vi = public/language/vi/admin/advanced/jobs.json
+trans.zh_CN = public/language/zh-CN/admin/advanced/jobs.json
+trans.zh_TW = public/language/zh-TW/admin/advanced/jobs.json
[o:nodebb:p:nodebb:r:admin-advanced-logs]
file_filter = public/language//admin/advanced/logs.json
source_file = public/language/en-GB/admin/advanced/logs.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.nl = public/language/nl/admin/advanced/logs.json
-trans.ru = public/language/ru/admin/advanced/logs.json
-trans.vi = public/language/vi/admin/advanced/logs.json
-trans.id = public/language/id/admin/advanced/logs.json
-trans.fi = public/language/fi/admin/advanced/logs.json
-trans.he = public/language/he/admin/advanced/logs.json
-trans.hr = public/language/hr/admin/advanced/logs.json
-trans.ja = public/language/ja/admin/advanced/logs.json
-trans.lt = public/language/lt/admin/advanced/logs.json
-trans.nb = public/language/nb/admin/advanced/logs.json
-trans.rw = public/language/rw/admin/advanced/logs.json
-trans.es = public/language/es/admin/advanced/logs.json
-trans.sv = public/language/sv/admin/advanced/logs.json
-trans.fa_IR = public/language/fa-IR/admin/advanced/logs.json
-trans.fr = public/language/fr/admin/advanced/logs.json
-trans.gl = public/language/gl/admin/advanced/logs.json
-trans.zh_TW = public/language/zh-TW/admin/advanced/logs.json
-trans.en@pirate = public/language/en-x-pirate/admin/advanced/logs.json
-trans.sc = public/language/sc/admin/advanced/logs.json
-trans.sq_AL = public/language/sq-AL/admin/advanced/logs.json
-trans.uk = public/language/uk/admin/advanced/logs.json
-trans.hu = public/language/hu/admin/advanced/logs.json
-trans.bn = public/language/bn/admin/advanced/logs.json
-trans.de = public/language/de/admin/advanced/logs.json
-trans.it = public/language/it/admin/advanced/logs.json
-trans.lv = public/language/lv/admin/advanced/logs.json
-trans.ms = public/language/ms/admin/advanced/logs.json
-trans.pl = public/language/pl/admin/advanced/logs.json
-trans.zh_CN = public/language/zh-CN/admin/advanced/logs.json
trans.ar = public/language/ar/admin/advanced/logs.json
-trans.et = public/language/et/admin/advanced/logs.json
-trans.hy = public/language/hy/admin/advanced/logs.json
-trans.ko = public/language/ko/admin/advanced/logs.json
-trans.th = public/language/th/admin/advanced/logs.json
-trans.tr = public/language/tr/admin/advanced/logs.json
+trans.az = public/language/az/admin/advanced/logs.json
+trans.bg = public/language/bg/admin/advanced/logs.json
+trans.bn = public/language/bn/admin/advanced/logs.json
trans.cs = public/language/cs/admin/advanced/logs.json
-trans.ro = public/language/ro/admin/advanced/logs.json
-trans.pt_BR = public/language/pt-BR/admin/advanced/logs.json
trans.da = public/language/da/admin/advanced/logs.json
+trans.de = public/language/de/admin/advanced/logs.json
trans.el = public/language/el/admin/advanced/logs.json
trans.en_US = public/language/en-US/admin/advanced/logs.json
+trans.en@pirate = public/language/en-x-pirate/admin/advanced/logs.json
+trans.es = public/language/es/admin/advanced/logs.json
+trans.et = public/language/et/admin/advanced/logs.json
+trans.fa_IR = public/language/fa-IR/admin/advanced/logs.json
+trans.fi = public/language/fi/admin/advanced/logs.json
+trans.fr = public/language/fr/admin/advanced/logs.json
+trans.gl = public/language/gl/admin/advanced/logs.json
+trans.he = public/language/he/admin/advanced/logs.json
+trans.hr = public/language/hr/admin/advanced/logs.json
+trans.hu = public/language/hu/admin/advanced/logs.json
+trans.hy = public/language/hy/admin/advanced/logs.json
+trans.id = public/language/id/admin/advanced/logs.json
+trans.it = public/language/it/admin/advanced/logs.json
+trans.ja = public/language/ja/admin/advanced/logs.json
+trans.ko = public/language/ko/admin/advanced/logs.json
+trans.lt = public/language/lt/admin/advanced/logs.json
+trans.lv = public/language/lv/admin/advanced/logs.json
+trans.ms = public/language/ms/admin/advanced/logs.json
+trans.nb = public/language/nb/admin/advanced/logs.json
+trans.nl = public/language/nl/admin/advanced/logs.json
+trans.nn_NO = public/language/nn-NO/admin/advanced/logs.json
+trans.pl = public/language/pl/admin/advanced/logs.json
+trans.pt_BR = public/language/pt-BR/admin/advanced/logs.json
trans.pt_PT = public/language/pt-PT/admin/advanced/logs.json
+trans.ro = public/language/ro/admin/advanced/logs.json
+trans.ru = public/language/ru/admin/advanced/logs.json
+trans.rw = public/language/rw/admin/advanced/logs.json
+trans.sc = public/language/sc/admin/advanced/logs.json
trans.sk = public/language/sk/admin/advanced/logs.json
trans.sl = public/language/sl/admin/advanced/logs.json
+trans.sq_AL = public/language/sq-AL/admin/advanced/logs.json
trans.sr = public/language/sr/admin/advanced/logs.json
-trans.bg = public/language/bg/admin/advanced/logs.json
+trans.sv = public/language/sv/admin/advanced/logs.json
+trans.th = public/language/th/admin/advanced/logs.json
+trans.tr = public/language/tr/admin/advanced/logs.json
+trans.uk = public/language/uk/admin/advanced/logs.json
+trans.ur = public/language/ur/admin/advanced/logs.json
+trans.vi = public/language/vi/admin/advanced/logs.json
+trans.zh_CN = public/language/zh-CN/admin/advanced/logs.json
+trans.zh_TW = public/language/zh-TW/admin/advanced/logs.json
[o:nodebb:p:nodebb:r:admin-appearance-customise]
file_filter = public/language//admin/appearance/customise.json
source_file = public/language/en-GB/admin/appearance/customise.json
source_lang = en_GB
type = KEYVALUEJSON
+trans.ar = public/language/ar/admin/appearance/customise.json
+trans.az = public/language/az/admin/appearance/customise.json
+trans.bg = public/language/bg/admin/appearance/customise.json
+trans.bn = public/language/bn/admin/appearance/customise.json
trans.cs = public/language/cs/admin/appearance/customise.json
trans.da = public/language/da/admin/appearance/customise.json
-trans.es = public/language/es/admin/appearance/customise.json
-trans.hy = public/language/hy/admin/appearance/customise.json
-trans.th = public/language/th/admin/appearance/customise.json
-trans.ar = public/language/ar/admin/appearance/customise.json
-trans.bg = public/language/bg/admin/appearance/customise.json
-trans.he = public/language/he/admin/appearance/customise.json
-trans.lt = public/language/lt/admin/appearance/customise.json
-trans.nb = public/language/nb/admin/appearance/customise.json
-trans.pl = public/language/pl/admin/appearance/customise.json
-trans.sl = public/language/sl/admin/appearance/customise.json
-trans.zh_TW = public/language/zh-TW/admin/appearance/customise.json
-trans.bn = public/language/bn/admin/appearance/customise.json
-trans.el = public/language/el/admin/appearance/customise.json
-trans.hu = public/language/hu/admin/appearance/customise.json
-trans.sk = public/language/sk/admin/appearance/customise.json
-trans.tr = public/language/tr/admin/appearance/customise.json
-trans.et = public/language/et/admin/appearance/customise.json
-trans.id = public/language/id/admin/appearance/customise.json
-trans.lv = public/language/lv/admin/appearance/customise.json
-trans.pt_BR = public/language/pt-BR/admin/appearance/customise.json
-trans.sr = public/language/sr/admin/appearance/customise.json
-trans.zh_CN = public/language/zh-CN/admin/appearance/customise.json
-trans.fr = public/language/fr/admin/appearance/customise.json
-trans.hr = public/language/hr/admin/appearance/customise.json
-trans.it = public/language/it/admin/appearance/customise.json
-trans.nl = public/language/nl/admin/appearance/customise.json
-trans.sv = public/language/sv/admin/appearance/customise.json
-trans.fi = public/language/fi/admin/appearance/customise.json
-trans.gl = public/language/gl/admin/appearance/customise.json
-trans.ko = public/language/ko/admin/appearance/customise.json
-trans.sc = public/language/sc/admin/appearance/customise.json
trans.de = public/language/de/admin/appearance/customise.json
+trans.el = public/language/el/admin/appearance/customise.json
trans.en_US = public/language/en-US/admin/appearance/customise.json
-trans.ja = public/language/ja/admin/appearance/customise.json
-trans.ru = public/language/ru/admin/appearance/customise.json
-trans.rw = public/language/rw/admin/appearance/customise.json
-trans.vi = public/language/vi/admin/appearance/customise.json
trans.en@pirate = public/language/en-x-pirate/admin/appearance/customise.json
+trans.es = public/language/es/admin/appearance/customise.json
+trans.et = public/language/et/admin/appearance/customise.json
trans.fa_IR = public/language/fa-IR/admin/appearance/customise.json
+trans.fi = public/language/fi/admin/appearance/customise.json
+trans.fr = public/language/fr/admin/appearance/customise.json
+trans.gl = public/language/gl/admin/appearance/customise.json
+trans.he = public/language/he/admin/appearance/customise.json
+trans.hr = public/language/hr/admin/appearance/customise.json
+trans.hu = public/language/hu/admin/appearance/customise.json
+trans.hy = public/language/hy/admin/appearance/customise.json
+trans.id = public/language/id/admin/appearance/customise.json
+trans.it = public/language/it/admin/appearance/customise.json
+trans.ja = public/language/ja/admin/appearance/customise.json
+trans.ko = public/language/ko/admin/appearance/customise.json
+trans.lt = public/language/lt/admin/appearance/customise.json
+trans.lv = public/language/lv/admin/appearance/customise.json
trans.ms = public/language/ms/admin/appearance/customise.json
+trans.nb = public/language/nb/admin/appearance/customise.json
+trans.nl = public/language/nl/admin/appearance/customise.json
+trans.nn_NO = public/language/nn-NO/admin/appearance/customise.json
+trans.pl = public/language/pl/admin/appearance/customise.json
+trans.pt_BR = public/language/pt-BR/admin/appearance/customise.json
trans.pt_PT = public/language/pt-PT/admin/appearance/customise.json
trans.ro = public/language/ro/admin/appearance/customise.json
+trans.ru = public/language/ru/admin/appearance/customise.json
+trans.rw = public/language/rw/admin/appearance/customise.json
+trans.sc = public/language/sc/admin/appearance/customise.json
+trans.sk = public/language/sk/admin/appearance/customise.json
+trans.sl = public/language/sl/admin/appearance/customise.json
trans.sq_AL = public/language/sq-AL/admin/appearance/customise.json
+trans.sr = public/language/sr/admin/appearance/customise.json
+trans.sv = public/language/sv/admin/appearance/customise.json
+trans.th = public/language/th/admin/appearance/customise.json
+trans.tr = public/language/tr/admin/appearance/customise.json
trans.uk = public/language/uk/admin/appearance/customise.json
+trans.ur = public/language/ur/admin/appearance/customise.json
+trans.vi = public/language/vi/admin/appearance/customise.json
+trans.zh_CN = public/language/zh-CN/admin/appearance/customise.json
+trans.zh_TW = public/language/zh-TW/admin/appearance/customise.json
[o:nodebb:p:nodebb:r:admin-appearance-skins]
file_filter = public/language//admin/appearance/skins.json
source_file = public/language/en-GB/admin/appearance/skins.json
source_lang = en_GB
type = KEYVALUEJSON
+trans.ar = public/language/ar/admin/appearance/skins.json
+trans.az = public/language/az/admin/appearance/skins.json
+trans.bg = public/language/bg/admin/appearance/skins.json
+trans.bn = public/language/bn/admin/appearance/skins.json
+trans.cs = public/language/cs/admin/appearance/skins.json
+trans.da = public/language/da/admin/appearance/skins.json
+trans.de = public/language/de/admin/appearance/skins.json
+trans.el = public/language/el/admin/appearance/skins.json
+trans.en_US = public/language/en-US/admin/appearance/skins.json
+trans.en@pirate = public/language/en-x-pirate/admin/appearance/skins.json
+trans.es = public/language/es/admin/appearance/skins.json
trans.et = public/language/et/admin/appearance/skins.json
+trans.fa_IR = public/language/fa-IR/admin/appearance/skins.json
+trans.fi = public/language/fi/admin/appearance/skins.json
+trans.fr = public/language/fr/admin/appearance/skins.json
+trans.gl = public/language/gl/admin/appearance/skins.json
trans.he = public/language/he/admin/appearance/skins.json
trans.hr = public/language/hr/admin/appearance/skins.json
-trans.sc = public/language/sc/admin/appearance/skins.json
-trans.sk = public/language/sk/admin/appearance/skins.json
-trans.uk = public/language/uk/admin/appearance/skins.json
-trans.vi = public/language/vi/admin/appearance/skins.json
-trans.bn = public/language/bn/admin/appearance/skins.json
-trans.ms = public/language/ms/admin/appearance/skins.json
-trans.pl = public/language/pl/admin/appearance/skins.json
-trans.sv = public/language/sv/admin/appearance/skins.json
-trans.fi = public/language/fi/admin/appearance/skins.json
-trans.da = public/language/da/admin/appearance/skins.json
trans.hu = public/language/hu/admin/appearance/skins.json
trans.hy = public/language/hy/admin/appearance/skins.json
trans.id = public/language/id/admin/appearance/skins.json
-trans.lv = public/language/lv/admin/appearance/skins.json
-trans.sq_AL = public/language/sq-AL/admin/appearance/skins.json
-trans.cs = public/language/cs/admin/appearance/skins.json
-trans.de = public/language/de/admin/appearance/skins.json
-trans.ko = public/language/ko/admin/appearance/skins.json
-trans.sl = public/language/sl/admin/appearance/skins.json
-trans.zh_TW = public/language/zh-TW/admin/appearance/skins.json
-trans.bg = public/language/bg/admin/appearance/skins.json
-trans.en_US = public/language/en-US/admin/appearance/skins.json
-trans.es = public/language/es/admin/appearance/skins.json
-trans.sr = public/language/sr/admin/appearance/skins.json
-trans.zh_CN = public/language/zh-CN/admin/appearance/skins.json
-trans.en@pirate = public/language/en-x-pirate/admin/appearance/skins.json
trans.it = public/language/it/admin/appearance/skins.json
trans.ja = public/language/ja/admin/appearance/skins.json
+trans.ko = public/language/ko/admin/appearance/skins.json
+trans.lt = public/language/lt/admin/appearance/skins.json
+trans.lv = public/language/lv/admin/appearance/skins.json
+trans.ms = public/language/ms/admin/appearance/skins.json
trans.nb = public/language/nb/admin/appearance/skins.json
-trans.fr = public/language/fr/admin/appearance/skins.json
-trans.fa_IR = public/language/fa-IR/admin/appearance/skins.json
-trans.gl = public/language/gl/admin/appearance/skins.json
+trans.nl = public/language/nl/admin/appearance/skins.json
+trans.nn_NO = public/language/nn-NO/admin/appearance/skins.json
+trans.pl = public/language/pl/admin/appearance/skins.json
+trans.pt_BR = public/language/pt-BR/admin/appearance/skins.json
+trans.pt_PT = public/language/pt-PT/admin/appearance/skins.json
trans.ro = public/language/ro/admin/appearance/skins.json
trans.ru = public/language/ru/admin/appearance/skins.json
trans.rw = public/language/rw/admin/appearance/skins.json
-trans.el = public/language/el/admin/appearance/skins.json
-trans.lt = public/language/lt/admin/appearance/skins.json
-trans.nl = public/language/nl/admin/appearance/skins.json
-trans.pt_BR = public/language/pt-BR/admin/appearance/skins.json
-trans.pt_PT = public/language/pt-PT/admin/appearance/skins.json
+trans.sc = public/language/sc/admin/appearance/skins.json
+trans.sk = public/language/sk/admin/appearance/skins.json
+trans.sl = public/language/sl/admin/appearance/skins.json
+trans.sq_AL = public/language/sq-AL/admin/appearance/skins.json
+trans.sr = public/language/sr/admin/appearance/skins.json
+trans.sv = public/language/sv/admin/appearance/skins.json
trans.th = public/language/th/admin/appearance/skins.json
trans.tr = public/language/tr/admin/appearance/skins.json
-trans.ar = public/language/ar/admin/appearance/skins.json
+trans.uk = public/language/uk/admin/appearance/skins.json
+trans.ur = public/language/ur/admin/appearance/skins.json
+trans.vi = public/language/vi/admin/appearance/skins.json
+trans.zh_CN = public/language/zh-CN/admin/appearance/skins.json
+trans.zh_TW = public/language/zh-TW/admin/appearance/skins.json
[o:nodebb:p:nodebb:r:admin-appearance-themes]
file_filter = public/language//admin/appearance/themes.json
source_file = public/language/en-GB/admin/appearance/themes.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.sq_AL = public/language/sq-AL/admin/appearance/themes.json
trans.ar = public/language/ar/admin/appearance/themes.json
+trans.az = public/language/az/admin/appearance/themes.json
trans.bg = public/language/bg/admin/appearance/themes.json
trans.bn = public/language/bn/admin/appearance/themes.json
-trans.en_US = public/language/en-US/admin/appearance/themes.json
-trans.fa_IR = public/language/fa-IR/admin/appearance/themes.json
-trans.pt_BR = public/language/pt-BR/admin/appearance/themes.json
-trans.ru = public/language/ru/admin/appearance/themes.json
-trans.sv = public/language/sv/admin/appearance/themes.json
trans.cs = public/language/cs/admin/appearance/themes.json
trans.da = public/language/da/admin/appearance/themes.json
-trans.sk = public/language/sk/admin/appearance/themes.json
-trans.zh_CN = public/language/zh-CN/admin/appearance/themes.json
+trans.de = public/language/de/admin/appearance/themes.json
+trans.el = public/language/el/admin/appearance/themes.json
+trans.en_US = public/language/en-US/admin/appearance/themes.json
+trans.en@pirate = public/language/en-x-pirate/admin/appearance/themes.json
+trans.es = public/language/es/admin/appearance/themes.json
trans.et = public/language/et/admin/appearance/themes.json
-trans.ja = public/language/ja/admin/appearance/themes.json
-trans.sl = public/language/sl/admin/appearance/themes.json
-trans.sr = public/language/sr/admin/appearance/themes.json
+trans.fa_IR = public/language/fa-IR/admin/appearance/themes.json
+trans.fi = public/language/fi/admin/appearance/themes.json
+trans.fr = public/language/fr/admin/appearance/themes.json
+trans.gl = public/language/gl/admin/appearance/themes.json
+trans.he = public/language/he/admin/appearance/themes.json
trans.hr = public/language/hr/admin/appearance/themes.json
trans.hu = public/language/hu/admin/appearance/themes.json
-trans.ms = public/language/ms/admin/appearance/themes.json
-trans.sc = public/language/sc/admin/appearance/themes.json
-trans.th = public/language/th/admin/appearance/themes.json
-trans.lt = public/language/lt/admin/appearance/themes.json
-trans.el = public/language/el/admin/appearance/themes.json
-trans.en@pirate = public/language/en-x-pirate/admin/appearance/themes.json
-trans.fi = public/language/fi/admin/appearance/themes.json
-trans.he = public/language/he/admin/appearance/themes.json
trans.hy = public/language/hy/admin/appearance/themes.json
trans.id = public/language/id/admin/appearance/themes.json
-trans.ko = public/language/ko/admin/appearance/themes.json
-trans.nb = public/language/nb/admin/appearance/themes.json
-trans.pl = public/language/pl/admin/appearance/themes.json
-trans.pt_PT = public/language/pt-PT/admin/appearance/themes.json
-trans.tr = public/language/tr/admin/appearance/themes.json
-trans.fr = public/language/fr/admin/appearance/themes.json
-trans.nl = public/language/nl/admin/appearance/themes.json
-trans.ro = public/language/ro/admin/appearance/themes.json
-trans.uk = public/language/uk/admin/appearance/themes.json
-trans.de = public/language/de/admin/appearance/themes.json
-trans.es = public/language/es/admin/appearance/themes.json
-trans.gl = public/language/gl/admin/appearance/themes.json
trans.it = public/language/it/admin/appearance/themes.json
+trans.ja = public/language/ja/admin/appearance/themes.json
+trans.ko = public/language/ko/admin/appearance/themes.json
+trans.lt = public/language/lt/admin/appearance/themes.json
trans.lv = public/language/lv/admin/appearance/themes.json
-trans.vi = public/language/vi/admin/appearance/themes.json
+trans.ms = public/language/ms/admin/appearance/themes.json
+trans.nb = public/language/nb/admin/appearance/themes.json
+trans.nl = public/language/nl/admin/appearance/themes.json
+trans.nn_NO = public/language/nn-NO/admin/appearance/themes.json
+trans.pl = public/language/pl/admin/appearance/themes.json
+trans.pt_BR = public/language/pt-BR/admin/appearance/themes.json
+trans.pt_PT = public/language/pt-PT/admin/appearance/themes.json
+trans.ro = public/language/ro/admin/appearance/themes.json
+trans.ru = public/language/ru/admin/appearance/themes.json
trans.rw = public/language/rw/admin/appearance/themes.json
+trans.sc = public/language/sc/admin/appearance/themes.json
+trans.sk = public/language/sk/admin/appearance/themes.json
+trans.sl = public/language/sl/admin/appearance/themes.json
+trans.sq_AL = public/language/sq-AL/admin/appearance/themes.json
+trans.sr = public/language/sr/admin/appearance/themes.json
+trans.sv = public/language/sv/admin/appearance/themes.json
+trans.th = public/language/th/admin/appearance/themes.json
+trans.tr = public/language/tr/admin/appearance/themes.json
+trans.uk = public/language/uk/admin/appearance/themes.json
+trans.ur = public/language/ur/admin/appearance/themes.json
+trans.vi = public/language/vi/admin/appearance/themes.json
+trans.zh_CN = public/language/zh-CN/admin/appearance/themes.json
trans.zh_TW = public/language/zh-TW/admin/appearance/themes.json
[o:nodebb:p:nodebb:r:admin-dashboard]
@@ -474,103 +556,109 @@ file_filter = public/language//admin/dashboard.json
source_file = public/language/en-GB/admin/dashboard.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.bn = public/language/bn/admin/dashboard.json
-trans.en_US = public/language/en-US/admin/dashboard.json
-trans.fa_IR = public/language/fa-IR/admin/dashboard.json
-trans.fr = public/language/fr/admin/dashboard.json
-trans.hu = public/language/hu/admin/dashboard.json
-trans.nl = public/language/nl/admin/dashboard.json
-trans.pl = public/language/pl/admin/dashboard.json
-trans.bg = public/language/bg/admin/dashboard.json
-trans.el = public/language/el/admin/dashboard.json
-trans.gl = public/language/gl/admin/dashboard.json
-trans.hy = public/language/hy/admin/dashboard.json
-trans.id = public/language/id/admin/dashboard.json
-trans.ja = public/language/ja/admin/dashboard.json
-trans.pt_BR = public/language/pt-BR/admin/dashboard.json
-trans.zh_CN = public/language/zh-CN/admin/dashboard.json
-trans.zh_TW = public/language/zh-TW/admin/dashboard.json
-trans.uk = public/language/uk/admin/dashboard.json
trans.ar = public/language/ar/admin/dashboard.json
+trans.az = public/language/az/admin/dashboard.json
+trans.bg = public/language/bg/admin/dashboard.json
+trans.bn = public/language/bn/admin/dashboard.json
+trans.cs = public/language/cs/admin/dashboard.json
+trans.da = public/language/da/admin/dashboard.json
trans.de = public/language/de/admin/dashboard.json
+trans.el = public/language/el/admin/dashboard.json
+trans.en_US = public/language/en-US/admin/dashboard.json
trans.en@pirate = public/language/en-x-pirate/admin/dashboard.json
trans.es = public/language/es/admin/dashboard.json
+trans.et = public/language/et/admin/dashboard.json
+trans.fa_IR = public/language/fa-IR/admin/dashboard.json
+trans.fi = public/language/fi/admin/dashboard.json
+trans.fr = public/language/fr/admin/dashboard.json
+trans.gl = public/language/gl/admin/dashboard.json
+trans.he = public/language/he/admin/dashboard.json
+trans.hr = public/language/hr/admin/dashboard.json
+trans.hu = public/language/hu/admin/dashboard.json
+trans.hy = public/language/hy/admin/dashboard.json
+trans.id = public/language/id/admin/dashboard.json
+trans.it = public/language/it/admin/dashboard.json
+trans.ja = public/language/ja/admin/dashboard.json
trans.ko = public/language/ko/admin/dashboard.json
-trans.sv = public/language/sv/admin/dashboard.json
+trans.lt = public/language/lt/admin/dashboard.json
trans.lv = public/language/lv/admin/dashboard.json
trans.ms = public/language/ms/admin/dashboard.json
-trans.ru = public/language/ru/admin/dashboard.json
-trans.sl = public/language/sl/admin/dashboard.json
-trans.sq_AL = public/language/sq-AL/admin/dashboard.json
-trans.da = public/language/da/admin/dashboard.json
-trans.lt = public/language/lt/admin/dashboard.json
-trans.he = public/language/he/admin/dashboard.json
-trans.sr = public/language/sr/admin/dashboard.json
-trans.vi = public/language/vi/admin/dashboard.json
+trans.nb = public/language/nb/admin/dashboard.json
+trans.nl = public/language/nl/admin/dashboard.json
+trans.nn_NO = public/language/nn-NO/admin/dashboard.json
+trans.pl = public/language/pl/admin/dashboard.json
+trans.pt_BR = public/language/pt-BR/admin/dashboard.json
trans.pt_PT = public/language/pt-PT/admin/dashboard.json
trans.ro = public/language/ro/admin/dashboard.json
+trans.ru = public/language/ru/admin/dashboard.json
trans.rw = public/language/rw/admin/dashboard.json
trans.sc = public/language/sc/admin/dashboard.json
-trans.th = public/language/th/admin/dashboard.json
trans.sk = public/language/sk/admin/dashboard.json
+trans.sl = public/language/sl/admin/dashboard.json
+trans.sq_AL = public/language/sq-AL/admin/dashboard.json
+trans.sr = public/language/sr/admin/dashboard.json
+trans.sv = public/language/sv/admin/dashboard.json
+trans.th = public/language/th/admin/dashboard.json
trans.tr = public/language/tr/admin/dashboard.json
-trans.cs = public/language/cs/admin/dashboard.json
-trans.et = public/language/et/admin/dashboard.json
-trans.fi = public/language/fi/admin/dashboard.json
-trans.hr = public/language/hr/admin/dashboard.json
-trans.it = public/language/it/admin/dashboard.json
-trans.nb = public/language/nb/admin/dashboard.json
+trans.uk = public/language/uk/admin/dashboard.json
+trans.ur = public/language/ur/admin/dashboard.json
+trans.vi = public/language/vi/admin/dashboard.json
+trans.zh_CN = public/language/zh-CN/admin/dashboard.json
+trans.zh_TW = public/language/zh-TW/admin/dashboard.json
[o:nodebb:p:nodebb:r:admin-development-info]
file_filter = public/language//admin/development/info.json
source_file = public/language/en-GB/admin/development/info.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.de = public/language/de/admin/development/info.json
-trans.et = public/language/et/admin/development/info.json
-trans.hr = public/language/hr/admin/development/info.json
-trans.ms = public/language/ms/admin/development/info.json
-trans.pl = public/language/pl/admin/development/info.json
-trans.pt_BR = public/language/pt-BR/admin/development/info.json
-trans.ro = public/language/ro/admin/development/info.json
-trans.rw = public/language/rw/admin/development/info.json
-trans.sl = public/language/sl/admin/development/info.json
-trans.sr = public/language/sr/admin/development/info.json
-trans.uk = public/language/uk/admin/development/info.json
+trans.ar = public/language/ar/admin/development/info.json
+trans.az = public/language/az/admin/development/info.json
+trans.bg = public/language/bg/admin/development/info.json
+trans.bn = public/language/bn/admin/development/info.json
+trans.cs = public/language/cs/admin/development/info.json
trans.da = public/language/da/admin/development/info.json
+trans.de = public/language/de/admin/development/info.json
+trans.el = public/language/el/admin/development/info.json
+trans.en_US = public/language/en-US/admin/development/info.json
trans.en@pirate = public/language/en-x-pirate/admin/development/info.json
trans.es = public/language/es/admin/development/info.json
-trans.fi = public/language/fi/admin/development/info.json
-trans.it = public/language/it/admin/development/info.json
-trans.lt = public/language/lt/admin/development/info.json
-trans.th = public/language/th/admin/development/info.json
-trans.ar = public/language/ar/admin/development/info.json
-trans.bn = public/language/bn/admin/development/info.json
+trans.et = public/language/et/admin/development/info.json
trans.fa_IR = public/language/fa-IR/admin/development/info.json
-trans.hu = public/language/hu/admin/development/info.json
-trans.id = public/language/id/admin/development/info.json
-trans.lv = public/language/lv/admin/development/info.json
-trans.gl = public/language/gl/admin/development/info.json
-trans.hy = public/language/hy/admin/development/info.json
-trans.zh_CN = public/language/zh-CN/admin/development/info.json
-trans.cs = public/language/cs/admin/development/info.json
-trans.ja = public/language/ja/admin/development/info.json
-trans.nb = public/language/nb/admin/development/info.json
-trans.sq_AL = public/language/sq-AL/admin/development/info.json
-trans.sv = public/language/sv/admin/development/info.json
-trans.bg = public/language/bg/admin/development/info.json
-trans.he = public/language/he/admin/development/info.json
-trans.sk = public/language/sk/admin/development/info.json
-trans.el = public/language/el/admin/development/info.json
+trans.fi = public/language/fi/admin/development/info.json
trans.fr = public/language/fr/admin/development/info.json
-trans.ru = public/language/ru/admin/development/info.json
-trans.sc = public/language/sc/admin/development/info.json
-trans.tr = public/language/tr/admin/development/info.json
-trans.en_US = public/language/en-US/admin/development/info.json
+trans.gl = public/language/gl/admin/development/info.json
+trans.he = public/language/he/admin/development/info.json
+trans.hr = public/language/hr/admin/development/info.json
+trans.hu = public/language/hu/admin/development/info.json
+trans.hy = public/language/hy/admin/development/info.json
+trans.id = public/language/id/admin/development/info.json
+trans.it = public/language/it/admin/development/info.json
+trans.ja = public/language/ja/admin/development/info.json
trans.ko = public/language/ko/admin/development/info.json
+trans.lt = public/language/lt/admin/development/info.json
+trans.lv = public/language/lv/admin/development/info.json
+trans.ms = public/language/ms/admin/development/info.json
+trans.nb = public/language/nb/admin/development/info.json
trans.nl = public/language/nl/admin/development/info.json
+trans.nn_NO = public/language/nn-NO/admin/development/info.json
+trans.pl = public/language/pl/admin/development/info.json
+trans.pt_BR = public/language/pt-BR/admin/development/info.json
trans.pt_PT = public/language/pt-PT/admin/development/info.json
+trans.ro = public/language/ro/admin/development/info.json
+trans.ru = public/language/ru/admin/development/info.json
+trans.rw = public/language/rw/admin/development/info.json
+trans.sc = public/language/sc/admin/development/info.json
+trans.sk = public/language/sk/admin/development/info.json
+trans.sl = public/language/sl/admin/development/info.json
+trans.sq_AL = public/language/sq-AL/admin/development/info.json
+trans.sr = public/language/sr/admin/development/info.json
+trans.sv = public/language/sv/admin/development/info.json
+trans.th = public/language/th/admin/development/info.json
+trans.tr = public/language/tr/admin/development/info.json
+trans.uk = public/language/uk/admin/development/info.json
+trans.ur = public/language/ur/admin/development/info.json
trans.vi = public/language/vi/admin/development/info.json
+trans.zh_CN = public/language/zh-CN/admin/development/info.json
trans.zh_TW = public/language/zh-TW/admin/development/info.json
[o:nodebb:p:nodebb:r:admin-development-logger]
@@ -578,832 +666,1045 @@ file_filter = public/language//admin/development/logger.json
source_file = public/language/en-GB/admin/development/logger.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.de = public/language/de/admin/development/logger.json
-trans.fr = public/language/fr/admin/development/logger.json
-trans.gl = public/language/gl/admin/development/logger.json
-trans.hr = public/language/hr/admin/development/logger.json
-trans.sl = public/language/sl/admin/development/logger.json
-trans.vi = public/language/vi/admin/development/logger.json
-trans.zh_TW = public/language/zh-TW/admin/development/logger.json
trans.ar = public/language/ar/admin/development/logger.json
-trans.he = public/language/he/admin/development/logger.json
-trans.id = public/language/id/admin/development/logger.json
-trans.ko = public/language/ko/admin/development/logger.json
-trans.lt = public/language/lt/admin/development/logger.json
-trans.nb = public/language/nb/admin/development/logger.json
-trans.pt_BR = public/language/pt-BR/admin/development/logger.json
-trans.ro = public/language/ro/admin/development/logger.json
-trans.fi = public/language/fi/admin/development/logger.json
-trans.sc = public/language/sc/admin/development/logger.json
-trans.ru = public/language/ru/admin/development/logger.json
-trans.sq_AL = public/language/sq-AL/admin/development/logger.json
-trans.th = public/language/th/admin/development/logger.json
-trans.hy = public/language/hy/admin/development/logger.json
-trans.fa_IR = public/language/fa-IR/admin/development/logger.json
-trans.it = public/language/it/admin/development/logger.json
-trans.lv = public/language/lv/admin/development/logger.json
-trans.nl = public/language/nl/admin/development/logger.json
-trans.pt_PT = public/language/pt-PT/admin/development/logger.json
-trans.sk = public/language/sk/admin/development/logger.json
-trans.sv = public/language/sv/admin/development/logger.json
-trans.el = public/language/el/admin/development/logger.json
-trans.uk = public/language/uk/admin/development/logger.json
-trans.ms = public/language/ms/admin/development/logger.json
-trans.zh_CN = public/language/zh-CN/admin/development/logger.json
+trans.az = public/language/az/admin/development/logger.json
+trans.bg = public/language/bg/admin/development/logger.json
trans.bn = public/language/bn/admin/development/logger.json
-trans.et = public/language/et/admin/development/logger.json
-trans.ja = public/language/ja/admin/development/logger.json
+trans.cs = public/language/cs/admin/development/logger.json
trans.da = public/language/da/admin/development/logger.json
+trans.de = public/language/de/admin/development/logger.json
+trans.el = public/language/el/admin/development/logger.json
+trans.en_US = public/language/en-US/admin/development/logger.json
trans.en@pirate = public/language/en-x-pirate/admin/development/logger.json
trans.es = public/language/es/admin/development/logger.json
-trans.cs = public/language/cs/admin/development/logger.json
-trans.en_US = public/language/en-US/admin/development/logger.json
+trans.et = public/language/et/admin/development/logger.json
+trans.fa_IR = public/language/fa-IR/admin/development/logger.json
+trans.fi = public/language/fi/admin/development/logger.json
+trans.fr = public/language/fr/admin/development/logger.json
+trans.gl = public/language/gl/admin/development/logger.json
+trans.he = public/language/he/admin/development/logger.json
+trans.hr = public/language/hr/admin/development/logger.json
trans.hu = public/language/hu/admin/development/logger.json
+trans.hy = public/language/hy/admin/development/logger.json
+trans.id = public/language/id/admin/development/logger.json
+trans.it = public/language/it/admin/development/logger.json
+trans.ja = public/language/ja/admin/development/logger.json
+trans.ko = public/language/ko/admin/development/logger.json
+trans.lt = public/language/lt/admin/development/logger.json
+trans.lv = public/language/lv/admin/development/logger.json
+trans.ms = public/language/ms/admin/development/logger.json
+trans.nb = public/language/nb/admin/development/logger.json
+trans.nl = public/language/nl/admin/development/logger.json
+trans.nn_NO = public/language/nn-NO/admin/development/logger.json
trans.pl = public/language/pl/admin/development/logger.json
+trans.pt_BR = public/language/pt-BR/admin/development/logger.json
+trans.pt_PT = public/language/pt-PT/admin/development/logger.json
+trans.ro = public/language/ro/admin/development/logger.json
+trans.ru = public/language/ru/admin/development/logger.json
trans.rw = public/language/rw/admin/development/logger.json
+trans.sc = public/language/sc/admin/development/logger.json
+trans.sk = public/language/sk/admin/development/logger.json
+trans.sl = public/language/sl/admin/development/logger.json
+trans.sq_AL = public/language/sq-AL/admin/development/logger.json
trans.sr = public/language/sr/admin/development/logger.json
+trans.sv = public/language/sv/admin/development/logger.json
+trans.th = public/language/th/admin/development/logger.json
trans.tr = public/language/tr/admin/development/logger.json
-trans.bg = public/language/bg/admin/development/logger.json
+trans.uk = public/language/uk/admin/development/logger.json
+trans.ur = public/language/ur/admin/development/logger.json
+trans.vi = public/language/vi/admin/development/logger.json
+trans.zh_CN = public/language/zh-CN/admin/development/logger.json
+trans.zh_TW = public/language/zh-TW/admin/development/logger.json
[o:nodebb:p:nodebb:r:admin-extend-plugins]
file_filter = public/language//admin/extend/plugins.json
source_file = public/language/en-GB/admin/extend/plugins.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.en@pirate = public/language/en-x-pirate/admin/extend/plugins.json
-trans.et = public/language/et/admin/extend/plugins.json
-trans.hr = public/language/hr/admin/extend/plugins.json
-trans.hy = public/language/hy/admin/extend/plugins.json
-trans.tr = public/language/tr/admin/extend/plugins.json
-trans.it = public/language/it/admin/extend/plugins.json
-trans.lv = public/language/lv/admin/extend/plugins.json
-trans.sl = public/language/sl/admin/extend/plugins.json
-trans.th = public/language/th/admin/extend/plugins.json
-trans.en_US = public/language/en-US/admin/extend/plugins.json
-trans.he = public/language/he/admin/extend/plugins.json
-trans.nb = public/language/nb/admin/extend/plugins.json
-trans.sk = public/language/sk/admin/extend/plugins.json
-trans.uk = public/language/uk/admin/extend/plugins.json
-trans.es = public/language/es/admin/extend/plugins.json
-trans.lt = public/language/lt/admin/extend/plugins.json
-trans.sv = public/language/sv/admin/extend/plugins.json
-trans.nl = public/language/nl/admin/extend/plugins.json
-trans.pt_PT = public/language/pt-PT/admin/extend/plugins.json
trans.ar = public/language/ar/admin/extend/plugins.json
-trans.cs = public/language/cs/admin/extend/plugins.json
-trans.fi = public/language/fi/admin/extend/plugins.json
-trans.id = public/language/id/admin/extend/plugins.json
-trans.ja = public/language/ja/admin/extend/plugins.json
-trans.ko = public/language/ko/admin/extend/plugins.json
-trans.ru = public/language/ru/admin/extend/plugins.json
-trans.sr = public/language/sr/admin/extend/plugins.json
+trans.az = public/language/az/admin/extend/plugins.json
+trans.bg = public/language/bg/admin/extend/plugins.json
trans.bn = public/language/bn/admin/extend/plugins.json
+trans.cs = public/language/cs/admin/extend/plugins.json
+trans.da = public/language/da/admin/extend/plugins.json
trans.de = public/language/de/admin/extend/plugins.json
trans.el = public/language/el/admin/extend/plugins.json
-trans.ms = public/language/ms/admin/extend/plugins.json
-trans.pt_BR = public/language/pt-BR/admin/extend/plugins.json
-trans.sq_AL = public/language/sq-AL/admin/extend/plugins.json
-trans.zh_TW = public/language/zh-TW/admin/extend/plugins.json
-trans.da = public/language/da/admin/extend/plugins.json
+trans.en_US = public/language/en-US/admin/extend/plugins.json
+trans.en@pirate = public/language/en-x-pirate/admin/extend/plugins.json
+trans.es = public/language/es/admin/extend/plugins.json
+trans.et = public/language/et/admin/extend/plugins.json
trans.fa_IR = public/language/fa-IR/admin/extend/plugins.json
-trans.gl = public/language/gl/admin/extend/plugins.json
-trans.hu = public/language/hu/admin/extend/plugins.json
-trans.sc = public/language/sc/admin/extend/plugins.json
-trans.vi = public/language/vi/admin/extend/plugins.json
-trans.bg = public/language/bg/admin/extend/plugins.json
+trans.fi = public/language/fi/admin/extend/plugins.json
trans.fr = public/language/fr/admin/extend/plugins.json
+trans.gl = public/language/gl/admin/extend/plugins.json
+trans.he = public/language/he/admin/extend/plugins.json
+trans.hr = public/language/hr/admin/extend/plugins.json
+trans.hu = public/language/hu/admin/extend/plugins.json
+trans.hy = public/language/hy/admin/extend/plugins.json
+trans.id = public/language/id/admin/extend/plugins.json
+trans.it = public/language/it/admin/extend/plugins.json
+trans.ja = public/language/ja/admin/extend/plugins.json
+trans.ko = public/language/ko/admin/extend/plugins.json
+trans.lt = public/language/lt/admin/extend/plugins.json
+trans.lv = public/language/lv/admin/extend/plugins.json
+trans.ms = public/language/ms/admin/extend/plugins.json
+trans.nb = public/language/nb/admin/extend/plugins.json
+trans.nl = public/language/nl/admin/extend/plugins.json
+trans.nn_NO = public/language/nn-NO/admin/extend/plugins.json
trans.pl = public/language/pl/admin/extend/plugins.json
+trans.pt_BR = public/language/pt-BR/admin/extend/plugins.json
+trans.pt_PT = public/language/pt-PT/admin/extend/plugins.json
trans.ro = public/language/ro/admin/extend/plugins.json
+trans.ru = public/language/ru/admin/extend/plugins.json
trans.rw = public/language/rw/admin/extend/plugins.json
+trans.sc = public/language/sc/admin/extend/plugins.json
+trans.sk = public/language/sk/admin/extend/plugins.json
+trans.sl = public/language/sl/admin/extend/plugins.json
+trans.sq_AL = public/language/sq-AL/admin/extend/plugins.json
+trans.sr = public/language/sr/admin/extend/plugins.json
+trans.sv = public/language/sv/admin/extend/plugins.json
+trans.th = public/language/th/admin/extend/plugins.json
+trans.tr = public/language/tr/admin/extend/plugins.json
+trans.uk = public/language/uk/admin/extend/plugins.json
+trans.ur = public/language/ur/admin/extend/plugins.json
+trans.vi = public/language/vi/admin/extend/plugins.json
trans.zh_CN = public/language/zh-CN/admin/extend/plugins.json
+trans.zh_TW = public/language/zh-TW/admin/extend/plugins.json
[o:nodebb:p:nodebb:r:admin-extend-rewards]
file_filter = public/language//admin/extend/rewards.json
source_file = public/language/en-GB/admin/extend/rewards.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.ms = public/language/ms/admin/extend/rewards.json
trans.ar = public/language/ar/admin/extend/rewards.json
+trans.az = public/language/az/admin/extend/rewards.json
+trans.bg = public/language/bg/admin/extend/rewards.json
+trans.bn = public/language/bn/admin/extend/rewards.json
+trans.cs = public/language/cs/admin/extend/rewards.json
+trans.da = public/language/da/admin/extend/rewards.json
+trans.de = public/language/de/admin/extend/rewards.json
+trans.el = public/language/el/admin/extend/rewards.json
+trans.en_US = public/language/en-US/admin/extend/rewards.json
+trans.en@pirate = public/language/en-x-pirate/admin/extend/rewards.json
+trans.es = public/language/es/admin/extend/rewards.json
+trans.et = public/language/et/admin/extend/rewards.json
+trans.fa_IR = public/language/fa-IR/admin/extend/rewards.json
trans.fi = public/language/fi/admin/extend/rewards.json
trans.fr = public/language/fr/admin/extend/rewards.json
-trans.sr = public/language/sr/admin/extend/rewards.json
+trans.gl = public/language/gl/admin/extend/rewards.json
+trans.he = public/language/he/admin/extend/rewards.json
+trans.hr = public/language/hr/admin/extend/rewards.json
+trans.hu = public/language/hu/admin/extend/rewards.json
+trans.hy = public/language/hy/admin/extend/rewards.json
trans.id = public/language/id/admin/extend/rewards.json
+trans.it = public/language/it/admin/extend/rewards.json
+trans.ja = public/language/ja/admin/extend/rewards.json
+trans.ko = public/language/ko/admin/extend/rewards.json
+trans.lt = public/language/lt/admin/extend/rewards.json
+trans.lv = public/language/lv/admin/extend/rewards.json
+trans.ms = public/language/ms/admin/extend/rewards.json
+trans.nb = public/language/nb/admin/extend/rewards.json
+trans.nl = public/language/nl/admin/extend/rewards.json
+trans.nn_NO = public/language/nn-NO/admin/extend/rewards.json
+trans.pl = public/language/pl/admin/extend/rewards.json
trans.pt_BR = public/language/pt-BR/admin/extend/rewards.json
-trans.sq_AL = public/language/sq-AL/admin/extend/rewards.json
trans.pt_PT = public/language/pt-PT/admin/extend/rewards.json
trans.ro = public/language/ro/admin/extend/rewards.json
trans.ru = public/language/ru/admin/extend/rewards.json
-trans.sk = public/language/sk/admin/extend/rewards.json
-trans.es = public/language/es/admin/extend/rewards.json
-trans.lt = public/language/lt/admin/extend/rewards.json
-trans.nl = public/language/nl/admin/extend/rewards.json
-trans.en@pirate = public/language/en-x-pirate/admin/extend/rewards.json
-trans.hr = public/language/hr/admin/extend/rewards.json
-trans.ja = public/language/ja/admin/extend/rewards.json
-trans.ko = public/language/ko/admin/extend/rewards.json
-trans.nb = public/language/nb/admin/extend/rewards.json
-trans.bg = public/language/bg/admin/extend/rewards.json
-trans.bn = public/language/bn/admin/extend/rewards.json
-trans.da = public/language/da/admin/extend/rewards.json
-trans.hy = public/language/hy/admin/extend/rewards.json
-trans.pl = public/language/pl/admin/extend/rewards.json
-trans.sc = public/language/sc/admin/extend/rewards.json
-trans.it = public/language/it/admin/extend/rewards.json
-trans.tr = public/language/tr/admin/extend/rewards.json
-trans.uk = public/language/uk/admin/extend/rewards.json
-trans.vi = public/language/vi/admin/extend/rewards.json
-trans.zh_CN = public/language/zh-CN/admin/extend/rewards.json
-trans.en_US = public/language/en-US/admin/extend/rewards.json
-trans.fa_IR = public/language/fa-IR/admin/extend/rewards.json
-trans.he = public/language/he/admin/extend/rewards.json
-trans.zh_TW = public/language/zh-TW/admin/extend/rewards.json
-trans.lv = public/language/lv/admin/extend/rewards.json
-trans.sl = public/language/sl/admin/extend/rewards.json
-trans.cs = public/language/cs/admin/extend/rewards.json
-trans.el = public/language/el/admin/extend/rewards.json
-trans.et = public/language/et/admin/extend/rewards.json
trans.rw = public/language/rw/admin/extend/rewards.json
+trans.sc = public/language/sc/admin/extend/rewards.json
+trans.sk = public/language/sk/admin/extend/rewards.json
+trans.sl = public/language/sl/admin/extend/rewards.json
+trans.sq_AL = public/language/sq-AL/admin/extend/rewards.json
+trans.sr = public/language/sr/admin/extend/rewards.json
trans.sv = public/language/sv/admin/extend/rewards.json
trans.th = public/language/th/admin/extend/rewards.json
-trans.de = public/language/de/admin/extend/rewards.json
-trans.gl = public/language/gl/admin/extend/rewards.json
-trans.hu = public/language/hu/admin/extend/rewards.json
+trans.tr = public/language/tr/admin/extend/rewards.json
+trans.uk = public/language/uk/admin/extend/rewards.json
+trans.ur = public/language/ur/admin/extend/rewards.json
+trans.vi = public/language/vi/admin/extend/rewards.json
+trans.zh_CN = public/language/zh-CN/admin/extend/rewards.json
+trans.zh_TW = public/language/zh-TW/admin/extend/rewards.json
[o:nodebb:p:nodebb:r:admin-extend-widgets]
file_filter = public/language//admin/extend/widgets.json
source_file = public/language/en-GB/admin/extend/widgets.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.bn = public/language/bn/admin/extend/widgets.json
-trans.el = public/language/el/admin/extend/widgets.json
-trans.id = public/language/id/admin/extend/widgets.json
-trans.nb = public/language/nb/admin/extend/widgets.json
-trans.ro = public/language/ro/admin/extend/widgets.json
-trans.rw = public/language/rw/admin/extend/widgets.json
trans.ar = public/language/ar/admin/extend/widgets.json
-trans.hy = public/language/hy/admin/extend/widgets.json
-trans.lv = public/language/lv/admin/extend/widgets.json
-trans.ru = public/language/ru/admin/extend/widgets.json
-trans.sc = public/language/sc/admin/extend/widgets.json
-trans.sr = public/language/sr/admin/extend/widgets.json
-trans.tr = public/language/tr/admin/extend/widgets.json
-trans.vi = public/language/vi/admin/extend/widgets.json
-trans.fr = public/language/fr/admin/extend/widgets.json
-trans.fa_IR = public/language/fa-IR/admin/extend/widgets.json
-trans.ko = public/language/ko/admin/extend/widgets.json
-trans.lt = public/language/lt/admin/extend/widgets.json
-trans.sq_AL = public/language/sq-AL/admin/extend/widgets.json
-trans.uk = public/language/uk/admin/extend/widgets.json
+trans.az = public/language/az/admin/extend/widgets.json
trans.bg = public/language/bg/admin/extend/widgets.json
-trans.de = public/language/de/admin/extend/widgets.json
-trans.ms = public/language/ms/admin/extend/widgets.json
-trans.nl = public/language/nl/admin/extend/widgets.json
-trans.pt_BR = public/language/pt-BR/admin/extend/widgets.json
-trans.sk = public/language/sk/admin/extend/widgets.json
-trans.zh_CN = public/language/zh-CN/admin/extend/widgets.json
+trans.bn = public/language/bn/admin/extend/widgets.json
+trans.cs = public/language/cs/admin/extend/widgets.json
trans.da = public/language/da/admin/extend/widgets.json
-trans.hu = public/language/hu/admin/extend/widgets.json
-trans.ja = public/language/ja/admin/extend/widgets.json
-trans.th = public/language/th/admin/extend/widgets.json
+trans.de = public/language/de/admin/extend/widgets.json
+trans.el = public/language/el/admin/extend/widgets.json
+trans.en_US = public/language/en-US/admin/extend/widgets.json
+trans.en@pirate = public/language/en-x-pirate/admin/extend/widgets.json
+trans.es = public/language/es/admin/extend/widgets.json
trans.et = public/language/et/admin/extend/widgets.json
+trans.fa_IR = public/language/fa-IR/admin/extend/widgets.json
+trans.fi = public/language/fi/admin/extend/widgets.json
+trans.fr = public/language/fr/admin/extend/widgets.json
trans.gl = public/language/gl/admin/extend/widgets.json
trans.he = public/language/he/admin/extend/widgets.json
-trans.it = public/language/it/admin/extend/widgets.json
-trans.pl = public/language/pl/admin/extend/widgets.json
-trans.zh_TW = public/language/zh-TW/admin/extend/widgets.json
-trans.en@pirate = public/language/en-x-pirate/admin/extend/widgets.json
-trans.fi = public/language/fi/admin/extend/widgets.json
trans.hr = public/language/hr/admin/extend/widgets.json
-trans.sl = public/language/sl/admin/extend/widgets.json
-trans.sv = public/language/sv/admin/extend/widgets.json
-trans.cs = public/language/cs/admin/extend/widgets.json
-trans.es = public/language/es/admin/extend/widgets.json
+trans.hu = public/language/hu/admin/extend/widgets.json
+trans.hy = public/language/hy/admin/extend/widgets.json
+trans.id = public/language/id/admin/extend/widgets.json
+trans.it = public/language/it/admin/extend/widgets.json
+trans.ja = public/language/ja/admin/extend/widgets.json
+trans.ko = public/language/ko/admin/extend/widgets.json
+trans.lt = public/language/lt/admin/extend/widgets.json
+trans.lv = public/language/lv/admin/extend/widgets.json
+trans.ms = public/language/ms/admin/extend/widgets.json
+trans.nb = public/language/nb/admin/extend/widgets.json
+trans.nl = public/language/nl/admin/extend/widgets.json
+trans.nn_NO = public/language/nn-NO/admin/extend/widgets.json
+trans.pl = public/language/pl/admin/extend/widgets.json
+trans.pt_BR = public/language/pt-BR/admin/extend/widgets.json
trans.pt_PT = public/language/pt-PT/admin/extend/widgets.json
-trans.en_US = public/language/en-US/admin/extend/widgets.json
+trans.ro = public/language/ro/admin/extend/widgets.json
+trans.ru = public/language/ru/admin/extend/widgets.json
+trans.rw = public/language/rw/admin/extend/widgets.json
+trans.sc = public/language/sc/admin/extend/widgets.json
+trans.sk = public/language/sk/admin/extend/widgets.json
+trans.sl = public/language/sl/admin/extend/widgets.json
+trans.sq_AL = public/language/sq-AL/admin/extend/widgets.json
+trans.sr = public/language/sr/admin/extend/widgets.json
+trans.sv = public/language/sv/admin/extend/widgets.json
+trans.th = public/language/th/admin/extend/widgets.json
+trans.tr = public/language/tr/admin/extend/widgets.json
+trans.uk = public/language/uk/admin/extend/widgets.json
+trans.ur = public/language/ur/admin/extend/widgets.json
+trans.vi = public/language/vi/admin/extend/widgets.json
+trans.zh_CN = public/language/zh-CN/admin/extend/widgets.json
+trans.zh_TW = public/language/zh-TW/admin/extend/widgets.json
[o:nodebb:p:nodebb:r:admin-manage-admins-mods]
file_filter = public/language//admin/manage/admins-mods.json
source_file = public/language/en-GB/admin/manage/admins-mods.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.hu = public/language/hu/admin/manage/admins-mods.json
-trans.nb = public/language/nb/admin/manage/admins-mods.json
-trans.ru = public/language/ru/admin/manage/admins-mods.json
-trans.fr = public/language/fr/admin/manage/admins-mods.json
-trans.he = public/language/he/admin/manage/admins-mods.json
-trans.lv = public/language/lv/admin/manage/admins-mods.json
-trans.sc = public/language/sc/admin/manage/admins-mods.json
-trans.vi = public/language/vi/admin/manage/admins-mods.json
-trans.es = public/language/es/admin/manage/admins-mods.json
-trans.lt = public/language/lt/admin/manage/admins-mods.json
-trans.de = public/language/de/admin/manage/admins-mods.json
-trans.ja = public/language/ja/admin/manage/admins-mods.json
-trans.pl = public/language/pl/admin/manage/admins-mods.json
-trans.sq_AL = public/language/sq-AL/admin/manage/admins-mods.json
-trans.sr = public/language/sr/admin/manage/admins-mods.json
-trans.zh_TW = public/language/zh-TW/admin/manage/admins-mods.json
-trans.id = public/language/id/admin/manage/admins-mods.json
-trans.ko = public/language/ko/admin/manage/admins-mods.json
-trans.gl = public/language/gl/admin/manage/admins-mods.json
-trans.hr = public/language/hr/admin/manage/admins-mods.json
-trans.hy = public/language/hy/admin/manage/admins-mods.json
-trans.rw = public/language/rw/admin/manage/admins-mods.json
-trans.bn = public/language/bn/admin/manage/admins-mods.json
-trans.fi = public/language/fi/admin/manage/admins-mods.json
-trans.ms = public/language/ms/admin/manage/admins-mods.json
-trans.pt_BR = public/language/pt-BR/admin/manage/admins-mods.json
-trans.pt_PT = public/language/pt-PT/admin/manage/admins-mods.json
-trans.sv = public/language/sv/admin/manage/admins-mods.json
-trans.th = public/language/th/admin/manage/admins-mods.json
-trans.uk = public/language/uk/admin/manage/admins-mods.json
trans.ar = public/language/ar/admin/manage/admins-mods.json
+trans.az = public/language/az/admin/manage/admins-mods.json
trans.bg = public/language/bg/admin/manage/admins-mods.json
-trans.el = public/language/el/admin/manage/admins-mods.json
-trans.en@pirate = public/language/en-x-pirate/admin/manage/admins-mods.json
-trans.en_US = public/language/en-US/admin/manage/admins-mods.json
-trans.it = public/language/it/admin/manage/admins-mods.json
-trans.nl = public/language/nl/admin/manage/admins-mods.json
-trans.ro = public/language/ro/admin/manage/admins-mods.json
+trans.bn = public/language/bn/admin/manage/admins-mods.json
trans.cs = public/language/cs/admin/manage/admins-mods.json
trans.da = public/language/da/admin/manage/admins-mods.json
-trans.zh_CN = public/language/zh-CN/admin/manage/admins-mods.json
-trans.sk = public/language/sk/admin/manage/admins-mods.json
-trans.sl = public/language/sl/admin/manage/admins-mods.json
-trans.tr = public/language/tr/admin/manage/admins-mods.json
+trans.de = public/language/de/admin/manage/admins-mods.json
+trans.el = public/language/el/admin/manage/admins-mods.json
+trans.en_US = public/language/en-US/admin/manage/admins-mods.json
+trans.en@pirate = public/language/en-x-pirate/admin/manage/admins-mods.json
+trans.es = public/language/es/admin/manage/admins-mods.json
trans.et = public/language/et/admin/manage/admins-mods.json
trans.fa_IR = public/language/fa-IR/admin/manage/admins-mods.json
+trans.fi = public/language/fi/admin/manage/admins-mods.json
+trans.fr = public/language/fr/admin/manage/admins-mods.json
+trans.gl = public/language/gl/admin/manage/admins-mods.json
+trans.he = public/language/he/admin/manage/admins-mods.json
+trans.hr = public/language/hr/admin/manage/admins-mods.json
+trans.hu = public/language/hu/admin/manage/admins-mods.json
+trans.hy = public/language/hy/admin/manage/admins-mods.json
+trans.id = public/language/id/admin/manage/admins-mods.json
+trans.it = public/language/it/admin/manage/admins-mods.json
+trans.ja = public/language/ja/admin/manage/admins-mods.json
+trans.ko = public/language/ko/admin/manage/admins-mods.json
+trans.lt = public/language/lt/admin/manage/admins-mods.json
+trans.lv = public/language/lv/admin/manage/admins-mods.json
+trans.ms = public/language/ms/admin/manage/admins-mods.json
+trans.nb = public/language/nb/admin/manage/admins-mods.json
+trans.nl = public/language/nl/admin/manage/admins-mods.json
+trans.nn_NO = public/language/nn-NO/admin/manage/admins-mods.json
+trans.pl = public/language/pl/admin/manage/admins-mods.json
+trans.pt_BR = public/language/pt-BR/admin/manage/admins-mods.json
+trans.pt_PT = public/language/pt-PT/admin/manage/admins-mods.json
+trans.ro = public/language/ro/admin/manage/admins-mods.json
+trans.ru = public/language/ru/admin/manage/admins-mods.json
+trans.rw = public/language/rw/admin/manage/admins-mods.json
+trans.sc = public/language/sc/admin/manage/admins-mods.json
+trans.sk = public/language/sk/admin/manage/admins-mods.json
+trans.sl = public/language/sl/admin/manage/admins-mods.json
+trans.sq_AL = public/language/sq-AL/admin/manage/admins-mods.json
+trans.sr = public/language/sr/admin/manage/admins-mods.json
+trans.sv = public/language/sv/admin/manage/admins-mods.json
+trans.th = public/language/th/admin/manage/admins-mods.json
+trans.tr = public/language/tr/admin/manage/admins-mods.json
+trans.uk = public/language/uk/admin/manage/admins-mods.json
+trans.ur = public/language/ur/admin/manage/admins-mods.json
+trans.vi = public/language/vi/admin/manage/admins-mods.json
+trans.zh_CN = public/language/zh-CN/admin/manage/admins-mods.json
+trans.zh_TW = public/language/zh-TW/admin/manage/admins-mods.json
[o:nodebb:p:nodebb:r:admin-manage-categories]
file_filter = public/language//admin/manage/categories.json
source_file = public/language/en-GB/admin/manage/categories.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.es = public/language/es/admin/manage/categories.json
-trans.gl = public/language/gl/admin/manage/categories.json
-trans.pt_PT = public/language/pt-PT/admin/manage/categories.json
-trans.sc = public/language/sc/admin/manage/categories.json
-trans.zh_TW = public/language/zh-TW/admin/manage/categories.json
-trans.bg = public/language/bg/admin/manage/categories.json
-trans.hu = public/language/hu/admin/manage/categories.json
-trans.hy = public/language/hy/admin/manage/categories.json
-trans.sk = public/language/sk/admin/manage/categories.json
-trans.uk = public/language/uk/admin/manage/categories.json
-trans.vi = public/language/vi/admin/manage/categories.json
-trans.bn = public/language/bn/admin/manage/categories.json
-trans.en_US = public/language/en-US/admin/manage/categories.json
-trans.fr = public/language/fr/admin/manage/categories.json
-trans.it = public/language/it/admin/manage/categories.json
-trans.nb = public/language/nb/admin/manage/categories.json
-trans.ru = public/language/ru/admin/manage/categories.json
-trans.sr = public/language/sr/admin/manage/categories.json
-trans.fa_IR = public/language/fa-IR/admin/manage/categories.json
-trans.id = public/language/id/admin/manage/categories.json
-trans.ms = public/language/ms/admin/manage/categories.json
-trans.pl = public/language/pl/admin/manage/categories.json
-trans.tr = public/language/tr/admin/manage/categories.json
-trans.zh_CN = public/language/zh-CN/admin/manage/categories.json
-trans.lt = public/language/lt/admin/manage/categories.json
-trans.sl = public/language/sl/admin/manage/categories.json
-trans.sv = public/language/sv/admin/manage/categories.json
-trans.rw = public/language/rw/admin/manage/categories.json
-trans.el = public/language/el/admin/manage/categories.json
-trans.et = public/language/et/admin/manage/categories.json
-trans.fi = public/language/fi/admin/manage/categories.json
-trans.he = public/language/he/admin/manage/categories.json
-trans.ja = public/language/ja/admin/manage/categories.json
-trans.ko = public/language/ko/admin/manage/categories.json
-trans.ro = public/language/ro/admin/manage/categories.json
-trans.cs = public/language/cs/admin/manage/categories.json
-trans.sq_AL = public/language/sq-AL/admin/manage/categories.json
-trans.th = public/language/th/admin/manage/categories.json
-trans.pt_BR = public/language/pt-BR/admin/manage/categories.json
trans.ar = public/language/ar/admin/manage/categories.json
+trans.az = public/language/az/admin/manage/categories.json
+trans.bg = public/language/bg/admin/manage/categories.json
+trans.bn = public/language/bn/admin/manage/categories.json
+trans.cs = public/language/cs/admin/manage/categories.json
trans.da = public/language/da/admin/manage/categories.json
trans.de = public/language/de/admin/manage/categories.json
+trans.el = public/language/el/admin/manage/categories.json
+trans.en_US = public/language/en-US/admin/manage/categories.json
trans.en@pirate = public/language/en-x-pirate/admin/manage/categories.json
+trans.es = public/language/es/admin/manage/categories.json
+trans.et = public/language/et/admin/manage/categories.json
+trans.fa_IR = public/language/fa-IR/admin/manage/categories.json
+trans.fi = public/language/fi/admin/manage/categories.json
+trans.fr = public/language/fr/admin/manage/categories.json
+trans.gl = public/language/gl/admin/manage/categories.json
+trans.he = public/language/he/admin/manage/categories.json
trans.hr = public/language/hr/admin/manage/categories.json
+trans.hu = public/language/hu/admin/manage/categories.json
+trans.hy = public/language/hy/admin/manage/categories.json
+trans.id = public/language/id/admin/manage/categories.json
+trans.it = public/language/it/admin/manage/categories.json
+trans.ja = public/language/ja/admin/manage/categories.json
+trans.ko = public/language/ko/admin/manage/categories.json
+trans.lt = public/language/lt/admin/manage/categories.json
trans.lv = public/language/lv/admin/manage/categories.json
+trans.ms = public/language/ms/admin/manage/categories.json
+trans.nb = public/language/nb/admin/manage/categories.json
trans.nl = public/language/nl/admin/manage/categories.json
+trans.nn_NO = public/language/nn-NO/admin/manage/categories.json
+trans.pl = public/language/pl/admin/manage/categories.json
+trans.pt_BR = public/language/pt-BR/admin/manage/categories.json
+trans.pt_PT = public/language/pt-PT/admin/manage/categories.json
+trans.ro = public/language/ro/admin/manage/categories.json
+trans.ru = public/language/ru/admin/manage/categories.json
+trans.rw = public/language/rw/admin/manage/categories.json
+trans.sc = public/language/sc/admin/manage/categories.json
+trans.sk = public/language/sk/admin/manage/categories.json
+trans.sl = public/language/sl/admin/manage/categories.json
+trans.sq_AL = public/language/sq-AL/admin/manage/categories.json
+trans.sr = public/language/sr/admin/manage/categories.json
+trans.sv = public/language/sv/admin/manage/categories.json
+trans.th = public/language/th/admin/manage/categories.json
+trans.tr = public/language/tr/admin/manage/categories.json
+trans.uk = public/language/uk/admin/manage/categories.json
+trans.ur = public/language/ur/admin/manage/categories.json
+trans.vi = public/language/vi/admin/manage/categories.json
+trans.zh_CN = public/language/zh-CN/admin/manage/categories.json
+trans.zh_TW = public/language/zh-TW/admin/manage/categories.json
[o:nodebb:p:nodebb:r:admin-manage-digest]
file_filter = public/language//admin/manage/digest.json
source_file = public/language/en-GB/admin/manage/digest.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.sr = public/language/sr/admin/manage/digest.json
-trans.fi = public/language/fi/admin/manage/digest.json
-trans.gl = public/language/gl/admin/manage/digest.json
-trans.fr = public/language/fr/admin/manage/digest.json
-trans.hu = public/language/hu/admin/manage/digest.json
-trans.id = public/language/id/admin/manage/digest.json
-trans.lv = public/language/lv/admin/manage/digest.json
-trans.pl = public/language/pl/admin/manage/digest.json
-trans.sl = public/language/sl/admin/manage/digest.json
-trans.da = public/language/da/admin/manage/digest.json
-trans.fa_IR = public/language/fa-IR/admin/manage/digest.json
-trans.sq_AL = public/language/sq-AL/admin/manage/digest.json
-trans.en@pirate = public/language/en-x-pirate/admin/manage/digest.json
-trans.en_US = public/language/en-US/admin/manage/digest.json
-trans.he = public/language/he/admin/manage/digest.json
-trans.hr = public/language/hr/admin/manage/digest.json
-trans.hy = public/language/hy/admin/manage/digest.json
-trans.it = public/language/it/admin/manage/digest.json
+trans.ar = public/language/ar/admin/manage/digest.json
+trans.az = public/language/az/admin/manage/digest.json
trans.bg = public/language/bg/admin/manage/digest.json
trans.bn = public/language/bn/admin/manage/digest.json
-trans.ro = public/language/ro/admin/manage/digest.json
-trans.th = public/language/th/admin/manage/digest.json
-trans.uk = public/language/uk/admin/manage/digest.json
-trans.vi = public/language/vi/admin/manage/digest.json
-trans.ms = public/language/ms/admin/manage/digest.json
-trans.pt_BR = public/language/pt-BR/admin/manage/digest.json
-trans.rw = public/language/rw/admin/manage/digest.json
+trans.cs = public/language/cs/admin/manage/digest.json
+trans.da = public/language/da/admin/manage/digest.json
trans.de = public/language/de/admin/manage/digest.json
trans.el = public/language/el/admin/manage/digest.json
-trans.nl = public/language/nl/admin/manage/digest.json
-trans.ru = public/language/ru/admin/manage/digest.json
-trans.sv = public/language/sv/admin/manage/digest.json
-trans.zh_TW = public/language/zh-TW/admin/manage/digest.json
+trans.en_US = public/language/en-US/admin/manage/digest.json
+trans.en@pirate = public/language/en-x-pirate/admin/manage/digest.json
trans.es = public/language/es/admin/manage/digest.json
-trans.lt = public/language/lt/admin/manage/digest.json
-trans.ko = public/language/ko/admin/manage/digest.json
-trans.zh_CN = public/language/zh-CN/admin/manage/digest.json
-trans.ar = public/language/ar/admin/manage/digest.json
-trans.ja = public/language/ja/admin/manage/digest.json
-trans.nb = public/language/nb/admin/manage/digest.json
-trans.sk = public/language/sk/admin/manage/digest.json
-trans.pt_PT = public/language/pt-PT/admin/manage/digest.json
-trans.sc = public/language/sc/admin/manage/digest.json
-trans.tr = public/language/tr/admin/manage/digest.json
-trans.cs = public/language/cs/admin/manage/digest.json
trans.et = public/language/et/admin/manage/digest.json
+trans.fa_IR = public/language/fa-IR/admin/manage/digest.json
+trans.fi = public/language/fi/admin/manage/digest.json
+trans.fr = public/language/fr/admin/manage/digest.json
+trans.gl = public/language/gl/admin/manage/digest.json
+trans.he = public/language/he/admin/manage/digest.json
+trans.hr = public/language/hr/admin/manage/digest.json
+trans.hu = public/language/hu/admin/manage/digest.json
+trans.hy = public/language/hy/admin/manage/digest.json
+trans.id = public/language/id/admin/manage/digest.json
+trans.it = public/language/it/admin/manage/digest.json
+trans.ja = public/language/ja/admin/manage/digest.json
+trans.ko = public/language/ko/admin/manage/digest.json
+trans.lt = public/language/lt/admin/manage/digest.json
+trans.lv = public/language/lv/admin/manage/digest.json
+trans.ms = public/language/ms/admin/manage/digest.json
+trans.nb = public/language/nb/admin/manage/digest.json
+trans.nl = public/language/nl/admin/manage/digest.json
+trans.nn_NO = public/language/nn-NO/admin/manage/digest.json
+trans.pl = public/language/pl/admin/manage/digest.json
+trans.pt_BR = public/language/pt-BR/admin/manage/digest.json
+trans.pt_PT = public/language/pt-PT/admin/manage/digest.json
+trans.ro = public/language/ro/admin/manage/digest.json
+trans.ru = public/language/ru/admin/manage/digest.json
+trans.rw = public/language/rw/admin/manage/digest.json
+trans.sc = public/language/sc/admin/manage/digest.json
+trans.sk = public/language/sk/admin/manage/digest.json
+trans.sl = public/language/sl/admin/manage/digest.json
+trans.sq_AL = public/language/sq-AL/admin/manage/digest.json
+trans.sr = public/language/sr/admin/manage/digest.json
+trans.sv = public/language/sv/admin/manage/digest.json
+trans.th = public/language/th/admin/manage/digest.json
+trans.tr = public/language/tr/admin/manage/digest.json
+trans.uk = public/language/uk/admin/manage/digest.json
+trans.ur = public/language/ur/admin/manage/digest.json
+trans.vi = public/language/vi/admin/manage/digest.json
+trans.zh_CN = public/language/zh-CN/admin/manage/digest.json
+trans.zh_TW = public/language/zh-TW/admin/manage/digest.json
[o:nodebb:p:nodebb:r:admin-manage-groups]
file_filter = public/language//admin/manage/groups.json
source_file = public/language/en-GB/admin/manage/groups.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.pt_PT = public/language/pt-PT/admin/manage/groups.json
-trans.tr = public/language/tr/admin/manage/groups.json
-trans.uk = public/language/uk/admin/manage/groups.json
-trans.zh_TW = public/language/zh-TW/admin/manage/groups.json
-trans.nb = public/language/nb/admin/manage/groups.json
-trans.id = public/language/id/admin/manage/groups.json
-trans.lt = public/language/lt/admin/manage/groups.json
-trans.pl = public/language/pl/admin/manage/groups.json
-trans.sc = public/language/sc/admin/manage/groups.json
-trans.hy = public/language/hy/admin/manage/groups.json
-trans.he = public/language/he/admin/manage/groups.json
-trans.ko = public/language/ko/admin/manage/groups.json
-trans.sv = public/language/sv/admin/manage/groups.json
-trans.bn = public/language/bn/admin/manage/groups.json
-trans.es = public/language/es/admin/manage/groups.json
-trans.ja = public/language/ja/admin/manage/groups.json
-trans.th = public/language/th/admin/manage/groups.json
-trans.cs = public/language/cs/admin/manage/groups.json
-trans.fi = public/language/fi/admin/manage/groups.json
-trans.hr = public/language/hr/admin/manage/groups.json
-trans.it = public/language/it/admin/manage/groups.json
-trans.en@pirate = public/language/en-x-pirate/admin/manage/groups.json
-trans.bg = public/language/bg/admin/manage/groups.json
-trans.hu = public/language/hu/admin/manage/groups.json
-trans.pt_BR = public/language/pt-BR/admin/manage/groups.json
-trans.ro = public/language/ro/admin/manage/groups.json
-trans.ru = public/language/ru/admin/manage/groups.json
-trans.sq_AL = public/language/sq-AL/admin/manage/groups.json
-trans.vi = public/language/vi/admin/manage/groups.json
trans.ar = public/language/ar/admin/manage/groups.json
-trans.et = public/language/et/admin/manage/groups.json
-trans.fa_IR = public/language/fa-IR/admin/manage/groups.json
-trans.fr = public/language/fr/admin/manage/groups.json
-trans.nl = public/language/nl/admin/manage/groups.json
-trans.rw = public/language/rw/admin/manage/groups.json
-trans.sl = public/language/sl/admin/manage/groups.json
-trans.zh_CN = public/language/zh-CN/admin/manage/groups.json
+trans.az = public/language/az/admin/manage/groups.json
+trans.bg = public/language/bg/admin/manage/groups.json
+trans.bn = public/language/bn/admin/manage/groups.json
+trans.cs = public/language/cs/admin/manage/groups.json
trans.da = public/language/da/admin/manage/groups.json
+trans.de = public/language/de/admin/manage/groups.json
trans.el = public/language/el/admin/manage/groups.json
trans.en_US = public/language/en-US/admin/manage/groups.json
+trans.en@pirate = public/language/en-x-pirate/admin/manage/groups.json
+trans.es = public/language/es/admin/manage/groups.json
+trans.et = public/language/et/admin/manage/groups.json
+trans.fa_IR = public/language/fa-IR/admin/manage/groups.json
+trans.fi = public/language/fi/admin/manage/groups.json
+trans.fr = public/language/fr/admin/manage/groups.json
trans.gl = public/language/gl/admin/manage/groups.json
+trans.he = public/language/he/admin/manage/groups.json
+trans.hr = public/language/hr/admin/manage/groups.json
+trans.hu = public/language/hu/admin/manage/groups.json
+trans.hy = public/language/hy/admin/manage/groups.json
+trans.id = public/language/id/admin/manage/groups.json
+trans.it = public/language/it/admin/manage/groups.json
+trans.ja = public/language/ja/admin/manage/groups.json
+trans.ko = public/language/ko/admin/manage/groups.json
+trans.lt = public/language/lt/admin/manage/groups.json
trans.lv = public/language/lv/admin/manage/groups.json
trans.ms = public/language/ms/admin/manage/groups.json
+trans.nb = public/language/nb/admin/manage/groups.json
+trans.nl = public/language/nl/admin/manage/groups.json
+trans.nn_NO = public/language/nn-NO/admin/manage/groups.json
+trans.pl = public/language/pl/admin/manage/groups.json
+trans.pt_BR = public/language/pt-BR/admin/manage/groups.json
+trans.pt_PT = public/language/pt-PT/admin/manage/groups.json
+trans.ro = public/language/ro/admin/manage/groups.json
+trans.ru = public/language/ru/admin/manage/groups.json
+trans.rw = public/language/rw/admin/manage/groups.json
+trans.sc = public/language/sc/admin/manage/groups.json
trans.sk = public/language/sk/admin/manage/groups.json
+trans.sl = public/language/sl/admin/manage/groups.json
+trans.sq_AL = public/language/sq-AL/admin/manage/groups.json
trans.sr = public/language/sr/admin/manage/groups.json
-trans.de = public/language/de/admin/manage/groups.json
+trans.sv = public/language/sv/admin/manage/groups.json
+trans.th = public/language/th/admin/manage/groups.json
+trans.tr = public/language/tr/admin/manage/groups.json
+trans.uk = public/language/uk/admin/manage/groups.json
+trans.ur = public/language/ur/admin/manage/groups.json
+trans.vi = public/language/vi/admin/manage/groups.json
+trans.zh_CN = public/language/zh-CN/admin/manage/groups.json
+trans.zh_TW = public/language/zh-TW/admin/manage/groups.json
[o:nodebb:p:nodebb:r:admin-manage-privileges]
file_filter = public/language//admin/manage/privileges.json
source_file = public/language/en-GB/admin/manage/privileges.json
source_lang = en_GB
type = KEYVALUEJSON
+trans.ar = public/language/ar/admin/manage/privileges.json
+trans.az = public/language/az/admin/manage/privileges.json
trans.bg = public/language/bg/admin/manage/privileges.json
-trans.es = public/language/es/admin/manage/privileges.json
-trans.fa_IR = public/language/fa-IR/admin/manage/privileges.json
-trans.ms = public/language/ms/admin/manage/privileges.json
-trans.ro = public/language/ro/admin/manage/privileges.json
-trans.sl = public/language/sl/admin/manage/privileges.json
-trans.el = public/language/el/admin/manage/privileges.json
-trans.lt = public/language/lt/admin/manage/privileges.json
-trans.pt_BR = public/language/pt-BR/admin/manage/privileges.json
-trans.pt_PT = public/language/pt-PT/admin/manage/privileges.json
-trans.hu = public/language/hu/admin/manage/privileges.json
-trans.pl = public/language/pl/admin/manage/privileges.json
-trans.sc = public/language/sc/admin/manage/privileges.json
-trans.uk = public/language/uk/admin/manage/privileges.json
trans.bn = public/language/bn/admin/manage/privileges.json
trans.cs = public/language/cs/admin/manage/privileges.json
trans.da = public/language/da/admin/manage/privileges.json
-trans.en@pirate = public/language/en-x-pirate/admin/manage/privileges.json
-trans.vi = public/language/vi/admin/manage/privileges.json
+trans.de = public/language/de/admin/manage/privileges.json
+trans.el = public/language/el/admin/manage/privileges.json
trans.en_US = public/language/en-US/admin/manage/privileges.json
-trans.hy = public/language/hy/admin/manage/privileges.json
-trans.sr = public/language/sr/admin/manage/privileges.json
-trans.ja = public/language/ja/admin/manage/privileges.json
-trans.nb = public/language/nb/admin/manage/privileges.json
-trans.nl = public/language/nl/admin/manage/privileges.json
-trans.sv = public/language/sv/admin/manage/privileges.json
+trans.en@pirate = public/language/en-x-pirate/admin/manage/privileges.json
+trans.es = public/language/es/admin/manage/privileges.json
trans.et = public/language/et/admin/manage/privileges.json
+trans.fa_IR = public/language/fa-IR/admin/manage/privileges.json
+trans.fi = public/language/fi/admin/manage/privileges.json
trans.fr = public/language/fr/admin/manage/privileges.json
+trans.gl = public/language/gl/admin/manage/privileges.json
trans.he = public/language/he/admin/manage/privileges.json
trans.hr = public/language/hr/admin/manage/privileges.json
-trans.th = public/language/th/admin/manage/privileges.json
-trans.sq_AL = public/language/sq-AL/admin/manage/privileges.json
-trans.gl = public/language/gl/admin/manage/privileges.json
-trans.ko = public/language/ko/admin/manage/privileges.json
-trans.lv = public/language/lv/admin/manage/privileges.json
-trans.sk = public/language/sk/admin/manage/privileges.json
-trans.tr = public/language/tr/admin/manage/privileges.json
-trans.fi = public/language/fi/admin/manage/privileges.json
+trans.hu = public/language/hu/admin/manage/privileges.json
+trans.hy = public/language/hy/admin/manage/privileges.json
trans.id = public/language/id/admin/manage/privileges.json
trans.it = public/language/it/admin/manage/privileges.json
-trans.rw = public/language/rw/admin/manage/privileges.json
-trans.zh_TW = public/language/zh-TW/admin/manage/privileges.json
-trans.ar = public/language/ar/admin/manage/privileges.json
-trans.de = public/language/de/admin/manage/privileges.json
+trans.ja = public/language/ja/admin/manage/privileges.json
+trans.ko = public/language/ko/admin/manage/privileges.json
+trans.lt = public/language/lt/admin/manage/privileges.json
+trans.lv = public/language/lv/admin/manage/privileges.json
+trans.ms = public/language/ms/admin/manage/privileges.json
+trans.nb = public/language/nb/admin/manage/privileges.json
+trans.nl = public/language/nl/admin/manage/privileges.json
+trans.nn_NO = public/language/nn-NO/admin/manage/privileges.json
+trans.pl = public/language/pl/admin/manage/privileges.json
+trans.pt_BR = public/language/pt-BR/admin/manage/privileges.json
+trans.pt_PT = public/language/pt-PT/admin/manage/privileges.json
+trans.ro = public/language/ro/admin/manage/privileges.json
trans.ru = public/language/ru/admin/manage/privileges.json
+trans.rw = public/language/rw/admin/manage/privileges.json
+trans.sc = public/language/sc/admin/manage/privileges.json
+trans.sk = public/language/sk/admin/manage/privileges.json
+trans.sl = public/language/sl/admin/manage/privileges.json
+trans.sq_AL = public/language/sq-AL/admin/manage/privileges.json
+trans.sr = public/language/sr/admin/manage/privileges.json
+trans.sv = public/language/sv/admin/manage/privileges.json
+trans.th = public/language/th/admin/manage/privileges.json
+trans.tr = public/language/tr/admin/manage/privileges.json
+trans.uk = public/language/uk/admin/manage/privileges.json
+trans.ur = public/language/ur/admin/manage/privileges.json
+trans.vi = public/language/vi/admin/manage/privileges.json
trans.zh_CN = public/language/zh-CN/admin/manage/privileges.json
+trans.zh_TW = public/language/zh-TW/admin/manage/privileges.json
[o:nodebb:p:nodebb:r:admin-manage-registration]
file_filter = public/language//admin/manage/registration.json
source_file = public/language/en-GB/admin/manage/registration.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.pl = public/language/pl/admin/manage/registration.json
-trans.ro = public/language/ro/admin/manage/registration.json
-trans.sk = public/language/sk/admin/manage/registration.json
-trans.fi = public/language/fi/admin/manage/registration.json
-trans.hu = public/language/hu/admin/manage/registration.json
-trans.ms = public/language/ms/admin/manage/registration.json
-trans.ru = public/language/ru/admin/manage/registration.json
-trans.sc = public/language/sc/admin/manage/registration.json
-trans.sr = public/language/sr/admin/manage/registration.json
-trans.th = public/language/th/admin/manage/registration.json
-trans.zh_TW = public/language/zh-TW/admin/manage/registration.json
-trans.da = public/language/da/admin/manage/registration.json
-trans.et = public/language/et/admin/manage/registration.json
-trans.it = public/language/it/admin/manage/registration.json
-trans.nb = public/language/nb/admin/manage/registration.json
-trans.pt_BR = public/language/pt-BR/admin/manage/registration.json
-trans.hy = public/language/hy/admin/manage/registration.json
-trans.uk = public/language/uk/admin/manage/registration.json
-trans.sq_AL = public/language/sq-AL/admin/manage/registration.json
trans.ar = public/language/ar/admin/manage/registration.json
-trans.es = public/language/es/admin/manage/registration.json
-trans.he = public/language/he/admin/manage/registration.json
-trans.id = public/language/id/admin/manage/registration.json
-trans.nl = public/language/nl/admin/manage/registration.json
-trans.en@pirate = public/language/en-x-pirate/admin/manage/registration.json
-trans.en_US = public/language/en-US/admin/manage/registration.json
-trans.rw = public/language/rw/admin/manage/registration.json
-trans.sv = public/language/sv/admin/manage/registration.json
-trans.tr = public/language/tr/admin/manage/registration.json
-trans.vi = public/language/vi/admin/manage/registration.json
+trans.az = public/language/az/admin/manage/registration.json
trans.bg = public/language/bg/admin/manage/registration.json
-trans.cs = public/language/cs/admin/manage/registration.json
-trans.fa_IR = public/language/fa-IR/admin/manage/registration.json
-trans.fr = public/language/fr/admin/manage/registration.json
-trans.lt = public/language/lt/admin/manage/registration.json
-trans.ja = public/language/ja/admin/manage/registration.json
-trans.ko = public/language/ko/admin/manage/registration.json
-trans.lv = public/language/lv/admin/manage/registration.json
trans.bn = public/language/bn/admin/manage/registration.json
+trans.cs = public/language/cs/admin/manage/registration.json
+trans.da = public/language/da/admin/manage/registration.json
trans.de = public/language/de/admin/manage/registration.json
trans.el = public/language/el/admin/manage/registration.json
+trans.en_US = public/language/en-US/admin/manage/registration.json
+trans.en@pirate = public/language/en-x-pirate/admin/manage/registration.json
+trans.es = public/language/es/admin/manage/registration.json
+trans.et = public/language/et/admin/manage/registration.json
+trans.fa_IR = public/language/fa-IR/admin/manage/registration.json
+trans.fi = public/language/fi/admin/manage/registration.json
+trans.fr = public/language/fr/admin/manage/registration.json
trans.gl = public/language/gl/admin/manage/registration.json
+trans.he = public/language/he/admin/manage/registration.json
trans.hr = public/language/hr/admin/manage/registration.json
+trans.hu = public/language/hu/admin/manage/registration.json
+trans.hy = public/language/hy/admin/manage/registration.json
+trans.id = public/language/id/admin/manage/registration.json
+trans.it = public/language/it/admin/manage/registration.json
+trans.ja = public/language/ja/admin/manage/registration.json
+trans.ko = public/language/ko/admin/manage/registration.json
+trans.lt = public/language/lt/admin/manage/registration.json
+trans.lv = public/language/lv/admin/manage/registration.json
+trans.ms = public/language/ms/admin/manage/registration.json
+trans.nb = public/language/nb/admin/manage/registration.json
+trans.nl = public/language/nl/admin/manage/registration.json
+trans.nn_NO = public/language/nn-NO/admin/manage/registration.json
+trans.pl = public/language/pl/admin/manage/registration.json
+trans.pt_BR = public/language/pt-BR/admin/manage/registration.json
trans.pt_PT = public/language/pt-PT/admin/manage/registration.json
+trans.ro = public/language/ro/admin/manage/registration.json
+trans.ru = public/language/ru/admin/manage/registration.json
+trans.rw = public/language/rw/admin/manage/registration.json
+trans.sc = public/language/sc/admin/manage/registration.json
+trans.sk = public/language/sk/admin/manage/registration.json
trans.sl = public/language/sl/admin/manage/registration.json
+trans.sq_AL = public/language/sq-AL/admin/manage/registration.json
+trans.sr = public/language/sr/admin/manage/registration.json
+trans.sv = public/language/sv/admin/manage/registration.json
+trans.th = public/language/th/admin/manage/registration.json
+trans.tr = public/language/tr/admin/manage/registration.json
+trans.uk = public/language/uk/admin/manage/registration.json
+trans.ur = public/language/ur/admin/manage/registration.json
+trans.vi = public/language/vi/admin/manage/registration.json
trans.zh_CN = public/language/zh-CN/admin/manage/registration.json
+trans.zh_TW = public/language/zh-TW/admin/manage/registration.json
[o:nodebb:p:nodebb:r:admin-manage-tags]
file_filter = public/language//admin/manage/tags.json
source_file = public/language/en-GB/admin/manage/tags.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.zh_TW = public/language/zh-TW/admin/manage/tags.json
-trans.bg = public/language/bg/admin/manage/tags.json
-trans.da = public/language/da/admin/manage/tags.json
-trans.en_US = public/language/en-US/admin/manage/tags.json
-trans.hu = public/language/hu/admin/manage/tags.json
-trans.nb = public/language/nb/admin/manage/tags.json
-trans.ru = public/language/ru/admin/manage/tags.json
-trans.sq_AL = public/language/sq-AL/admin/manage/tags.json
-trans.de = public/language/de/admin/manage/tags.json
-trans.fi = public/language/fi/admin/manage/tags.json
-trans.hr = public/language/hr/admin/manage/tags.json
-trans.ko = public/language/ko/admin/manage/tags.json
-trans.ms = public/language/ms/admin/manage/tags.json
-trans.th = public/language/th/admin/manage/tags.json
trans.ar = public/language/ar/admin/manage/tags.json
-trans.el = public/language/el/admin/manage/tags.json
-trans.es = public/language/es/admin/manage/tags.json
-trans.hy = public/language/hy/admin/manage/tags.json
-trans.ja = public/language/ja/admin/manage/tags.json
-trans.cs = public/language/cs/admin/manage/tags.json
-trans.pl = public/language/pl/admin/manage/tags.json
-trans.ro = public/language/ro/admin/manage/tags.json
-trans.rw = public/language/rw/admin/manage/tags.json
+trans.az = public/language/az/admin/manage/tags.json
+trans.bg = public/language/bg/admin/manage/tags.json
trans.bn = public/language/bn/admin/manage/tags.json
-trans.fa_IR = public/language/fa-IR/admin/manage/tags.json
-trans.zh_CN = public/language/zh-CN/admin/manage/tags.json
+trans.cs = public/language/cs/admin/manage/tags.json
+trans.da = public/language/da/admin/manage/tags.json
+trans.de = public/language/de/admin/manage/tags.json
+trans.el = public/language/el/admin/manage/tags.json
+trans.en_US = public/language/en-US/admin/manage/tags.json
+trans.en@pirate = public/language/en-x-pirate/admin/manage/tags.json
+trans.es = public/language/es/admin/manage/tags.json
trans.et = public/language/et/admin/manage/tags.json
+trans.fa_IR = public/language/fa-IR/admin/manage/tags.json
+trans.fi = public/language/fi/admin/manage/tags.json
trans.fr = public/language/fr/admin/manage/tags.json
trans.gl = public/language/gl/admin/manage/tags.json
+trans.he = public/language/he/admin/manage/tags.json
+trans.hr = public/language/hr/admin/manage/tags.json
+trans.hu = public/language/hu/admin/manage/tags.json
+trans.hy = public/language/hy/admin/manage/tags.json
trans.id = public/language/id/admin/manage/tags.json
+trans.it = public/language/it/admin/manage/tags.json
+trans.ja = public/language/ja/admin/manage/tags.json
+trans.ko = public/language/ko/admin/manage/tags.json
trans.lt = public/language/lt/admin/manage/tags.json
-trans.sv = public/language/sv/admin/manage/tags.json
-trans.tr = public/language/tr/admin/manage/tags.json
-trans.uk = public/language/uk/admin/manage/tags.json
trans.lv = public/language/lv/admin/manage/tags.json
+trans.ms = public/language/ms/admin/manage/tags.json
+trans.nb = public/language/nb/admin/manage/tags.json
trans.nl = public/language/nl/admin/manage/tags.json
+trans.nn_NO = public/language/nn-NO/admin/manage/tags.json
+trans.pl = public/language/pl/admin/manage/tags.json
trans.pt_BR = public/language/pt-BR/admin/manage/tags.json
trans.pt_PT = public/language/pt-PT/admin/manage/tags.json
+trans.ro = public/language/ro/admin/manage/tags.json
+trans.ru = public/language/ru/admin/manage/tags.json
+trans.rw = public/language/rw/admin/manage/tags.json
trans.sc = public/language/sc/admin/manage/tags.json
trans.sk = public/language/sk/admin/manage/tags.json
trans.sl = public/language/sl/admin/manage/tags.json
-trans.en@pirate = public/language/en-x-pirate/admin/manage/tags.json
-trans.he = public/language/he/admin/manage/tags.json
-trans.it = public/language/it/admin/manage/tags.json
+trans.sq_AL = public/language/sq-AL/admin/manage/tags.json
trans.sr = public/language/sr/admin/manage/tags.json
+trans.sv = public/language/sv/admin/manage/tags.json
+trans.th = public/language/th/admin/manage/tags.json
+trans.tr = public/language/tr/admin/manage/tags.json
+trans.uk = public/language/uk/admin/manage/tags.json
+trans.ur = public/language/ur/admin/manage/tags.json
trans.vi = public/language/vi/admin/manage/tags.json
+trans.zh_CN = public/language/zh-CN/admin/manage/tags.json
+trans.zh_TW = public/language/zh-TW/admin/manage/tags.json
[o:nodebb:p:nodebb:r:admin-manage-uploads]
file_filter = public/language//admin/manage/uploads.json
source_file = public/language/en-GB/admin/manage/uploads.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.ms = public/language/ms/admin/manage/uploads.json
-trans.nb = public/language/nb/admin/manage/uploads.json
-trans.tr = public/language/tr/admin/manage/uploads.json
+trans.ar = public/language/ar/admin/manage/uploads.json
+trans.az = public/language/az/admin/manage/uploads.json
trans.bg = public/language/bg/admin/manage/uploads.json
trans.bn = public/language/bn/admin/manage/uploads.json
-trans.en@pirate = public/language/en-x-pirate/admin/manage/uploads.json
-trans.lt = public/language/lt/admin/manage/uploads.json
-trans.sq_AL = public/language/sq-AL/admin/manage/uploads.json
+trans.cs = public/language/cs/admin/manage/uploads.json
+trans.da = public/language/da/admin/manage/uploads.json
+trans.de = public/language/de/admin/manage/uploads.json
trans.el = public/language/el/admin/manage/uploads.json
trans.en_US = public/language/en-US/admin/manage/uploads.json
-trans.fi = public/language/fi/admin/manage/uploads.json
-trans.hr = public/language/hr/admin/manage/uploads.json
-trans.sv = public/language/sv/admin/manage/uploads.json
-trans.ar = public/language/ar/admin/manage/uploads.json
-trans.de = public/language/de/admin/manage/uploads.json
-trans.fr = public/language/fr/admin/manage/uploads.json
-trans.he = public/language/he/admin/manage/uploads.json
-trans.ro = public/language/ro/admin/manage/uploads.json
-trans.rw = public/language/rw/admin/manage/uploads.json
-trans.gl = public/language/gl/admin/manage/uploads.json
-trans.nl = public/language/nl/admin/manage/uploads.json
-trans.pl = public/language/pl/admin/manage/uploads.json
-trans.pt_BR = public/language/pt-BR/admin/manage/uploads.json
-trans.sc = public/language/sc/admin/manage/uploads.json
-trans.th = public/language/th/admin/manage/uploads.json
+trans.en@pirate = public/language/en-x-pirate/admin/manage/uploads.json
trans.es = public/language/es/admin/manage/uploads.json
trans.et = public/language/et/admin/manage/uploads.json
-trans.lv = public/language/lv/admin/manage/uploads.json
-trans.pt_PT = public/language/pt-PT/admin/manage/uploads.json
-trans.sr = public/language/sr/admin/manage/uploads.json
-trans.uk = public/language/uk/admin/manage/uploads.json
-trans.vi = public/language/vi/admin/manage/uploads.json
-trans.cs = public/language/cs/admin/manage/uploads.json
-trans.ru = public/language/ru/admin/manage/uploads.json
-trans.sk = public/language/sk/admin/manage/uploads.json
-trans.sl = public/language/sl/admin/manage/uploads.json
trans.fa_IR = public/language/fa-IR/admin/manage/uploads.json
+trans.fi = public/language/fi/admin/manage/uploads.json
+trans.fr = public/language/fr/admin/manage/uploads.json
+trans.gl = public/language/gl/admin/manage/uploads.json
+trans.he = public/language/he/admin/manage/uploads.json
+trans.hr = public/language/hr/admin/manage/uploads.json
trans.hu = public/language/hu/admin/manage/uploads.json
trans.hy = public/language/hy/admin/manage/uploads.json
-trans.zh_CN = public/language/zh-CN/admin/manage/uploads.json
-trans.ko = public/language/ko/admin/manage/uploads.json
-trans.zh_TW = public/language/zh-TW/admin/manage/uploads.json
-trans.da = public/language/da/admin/manage/uploads.json
trans.id = public/language/id/admin/manage/uploads.json
trans.it = public/language/it/admin/manage/uploads.json
trans.ja = public/language/ja/admin/manage/uploads.json
+trans.ko = public/language/ko/admin/manage/uploads.json
+trans.lt = public/language/lt/admin/manage/uploads.json
+trans.lv = public/language/lv/admin/manage/uploads.json
+trans.ms = public/language/ms/admin/manage/uploads.json
+trans.nb = public/language/nb/admin/manage/uploads.json
+trans.nl = public/language/nl/admin/manage/uploads.json
+trans.nn_NO = public/language/nn-NO/admin/manage/uploads.json
+trans.pl = public/language/pl/admin/manage/uploads.json
+trans.pt_BR = public/language/pt-BR/admin/manage/uploads.json
+trans.pt_PT = public/language/pt-PT/admin/manage/uploads.json
+trans.ro = public/language/ro/admin/manage/uploads.json
+trans.ru = public/language/ru/admin/manage/uploads.json
+trans.rw = public/language/rw/admin/manage/uploads.json
+trans.sc = public/language/sc/admin/manage/uploads.json
+trans.sk = public/language/sk/admin/manage/uploads.json
+trans.sl = public/language/sl/admin/manage/uploads.json
+trans.sq_AL = public/language/sq-AL/admin/manage/uploads.json
+trans.sr = public/language/sr/admin/manage/uploads.json
+trans.sv = public/language/sv/admin/manage/uploads.json
+trans.th = public/language/th/admin/manage/uploads.json
+trans.tr = public/language/tr/admin/manage/uploads.json
+trans.uk = public/language/uk/admin/manage/uploads.json
+trans.ur = public/language/ur/admin/manage/uploads.json
+trans.vi = public/language/vi/admin/manage/uploads.json
+trans.zh_CN = public/language/zh-CN/admin/manage/uploads.json
+trans.zh_TW = public/language/zh-TW/admin/manage/uploads.json
+
+[o:nodebb:p:nodebb:r:admin-manage-user-custom-reasons]
+file_filter = public/language//admin/manage/custom-reasons.json
+source_file = public/language/en-GB/admin/manage/custom-reasons.json
+source_lang = en_GB
+type = KEYVALUEJSON
+trans.ar = public/language/ar/admin/manage/custom-reasons.json
+trans.az = public/language/az/admin/manage/custom-reasons.json
+trans.bg = public/language/bg/admin/manage/custom-reasons.json
+trans.bn = public/language/bn/admin/manage/custom-reasons.json
+trans.cs = public/language/cs/admin/manage/custom-reasons.json
+trans.da = public/language/da/admin/manage/custom-reasons.json
+trans.de = public/language/de/admin/manage/custom-reasons.json
+trans.el = public/language/el/admin/manage/custom-reasons.json
+trans.en_US = public/language/en-US/admin/manage/custom-reasons.json
+trans.en@pirate = public/language/en-x-pirate/admin/manage/custom-reasons.json
+trans.es = public/language/es/admin/manage/custom-reasons.json
+trans.et = public/language/et/admin/manage/custom-reasons.json
+trans.fa_IR = public/language/fa-IR/admin/manage/custom-reasons.json
+trans.fi = public/language/fi/admin/manage/custom-reasons.json
+trans.fr = public/language/fr/admin/manage/custom-reasons.json
+trans.gl = public/language/gl/admin/manage/custom-reasons.json
+trans.he = public/language/he/admin/manage/custom-reasons.json
+trans.hr = public/language/hr/admin/manage/custom-reasons.json
+trans.hu = public/language/hu/admin/manage/custom-reasons.json
+trans.hy = public/language/hy/admin/manage/custom-reasons.json
+trans.id = public/language/id/admin/manage/custom-reasons.json
+trans.it = public/language/it/admin/manage/custom-reasons.json
+trans.ja = public/language/ja/admin/manage/custom-reasons.json
+trans.ko = public/language/ko/admin/manage/custom-reasons.json
+trans.lt = public/language/lt/admin/manage/custom-reasons.json
+trans.lv = public/language/lv/admin/manage/custom-reasons.json
+trans.ms = public/language/ms/admin/manage/custom-reasons.json
+trans.nb = public/language/nb/admin/manage/custom-reasons.json
+trans.nl = public/language/nl/admin/manage/custom-reasons.json
+trans.nn_NO = public/language/nn-NO/admin/manage/custom-reasons.json
+trans.pl = public/language/pl/admin/manage/custom-reasons.json
+trans.pt_BR = public/language/pt-BR/admin/manage/custom-reasons.json
+trans.pt_PT = public/language/pt-PT/admin/manage/custom-reasons.json
+trans.ro = public/language/ro/admin/manage/custom-reasons.json
+trans.ru = public/language/ru/admin/manage/custom-reasons.json
+trans.rw = public/language/rw/admin/manage/custom-reasons.json
+trans.sc = public/language/sc/admin/manage/custom-reasons.json
+trans.sk = public/language/sk/admin/manage/custom-reasons.json
+trans.sl = public/language/sl/admin/manage/custom-reasons.json
+trans.sq_AL = public/language/sq-AL/admin/manage/custom-reasons.json
+trans.sr = public/language/sr/admin/manage/custom-reasons.json
+trans.sv = public/language/sv/admin/manage/custom-reasons.json
+trans.th = public/language/th/admin/manage/custom-reasons.json
+trans.tr = public/language/tr/admin/manage/custom-reasons.json
+trans.uk = public/language/uk/admin/manage/custom-reasons.json
+trans.ur = public/language/ur/admin/manage/custom-reasons.json
+trans.vi = public/language/vi/admin/manage/custom-reasons.json
+trans.zh_CN = public/language/zh-CN/admin/manage/custom-reasons.json
+trans.zh_TW = public/language/zh-TW/admin/manage/custom-reasons.json
+
+[o:nodebb:p:nodebb:r:admin-manage-user-custom-fields]
+file_filter = public/language//admin/manage/user-custom-fields.json
+source_file = public/language/en-GB/admin/manage/user-custom-fields.json
+source_lang = en_GB
+type = KEYVALUEJSON
+trans.ar = public/language/ar/admin/manage/user-custom-fields.json
+trans.az = public/language/az/admin/manage/user-custom-fields.json
+trans.bg = public/language/bg/admin/manage/user-custom-fields.json
+trans.bn = public/language/bn/admin/manage/user-custom-fields.json
+trans.cs = public/language/cs/admin/manage/user-custom-fields.json
+trans.da = public/language/da/admin/manage/user-custom-fields.json
+trans.de = public/language/de/admin/manage/user-custom-fields.json
+trans.el = public/language/el/admin/manage/user-custom-fields.json
+trans.en_US = public/language/en-US/admin/manage/user-custom-fields.json
+trans.en@pirate = public/language/en-x-pirate/admin/manage/user-custom-fields.json
+trans.es = public/language/es/admin/manage/user-custom-fields.json
+trans.et = public/language/et/admin/manage/user-custom-fields.json
+trans.fa_IR = public/language/fa-IR/admin/manage/user-custom-fields.json
+trans.fi = public/language/fi/admin/manage/user-custom-fields.json
+trans.fr = public/language/fr/admin/manage/user-custom-fields.json
+trans.gl = public/language/gl/admin/manage/user-custom-fields.json
+trans.he = public/language/he/admin/manage/user-custom-fields.json
+trans.hr = public/language/hr/admin/manage/user-custom-fields.json
+trans.hu = public/language/hu/admin/manage/user-custom-fields.json
+trans.hy = public/language/hy/admin/manage/user-custom-fields.json
+trans.id = public/language/id/admin/manage/user-custom-fields.json
+trans.it = public/language/it/admin/manage/user-custom-fields.json
+trans.ja = public/language/ja/admin/manage/user-custom-fields.json
+trans.ko = public/language/ko/admin/manage/user-custom-fields.json
+trans.lt = public/language/lt/admin/manage/user-custom-fields.json
+trans.lv = public/language/lv/admin/manage/user-custom-fields.json
+trans.ms = public/language/ms/admin/manage/user-custom-fields.json
+trans.nb = public/language/nb/admin/manage/user-custom-fields.json
+trans.nl = public/language/nl/admin/manage/user-custom-fields.json
+trans.nn_NO = public/language/nn-NO/admin/manage/user-custom-fields.json
+trans.pl = public/language/pl/admin/manage/user-custom-fields.json
+trans.pt_BR = public/language/pt-BR/admin/manage/user-custom-fields.json
+trans.pt_PT = public/language/pt-PT/admin/manage/user-custom-fields.json
+trans.ro = public/language/ro/admin/manage/user-custom-fields.json
+trans.ru = public/language/ru/admin/manage/user-custom-fields.json
+trans.rw = public/language/rw/admin/manage/user-custom-fields.json
+trans.sc = public/language/sc/admin/manage/user-custom-fields.json
+trans.sk = public/language/sk/admin/manage/user-custom-fields.json
+trans.sl = public/language/sl/admin/manage/user-custom-fields.json
+trans.sq_AL = public/language/sq-AL/admin/manage/user-custom-fields.json
+trans.sr = public/language/sr/admin/manage/user-custom-fields.json
+trans.sv = public/language/sv/admin/manage/user-custom-fields.json
+trans.th = public/language/th/admin/manage/user-custom-fields.json
+trans.tr = public/language/tr/admin/manage/user-custom-fields.json
+trans.uk = public/language/uk/admin/manage/user-custom-fields.json
+trans.ur = public/language/ur/admin/manage/user-custom-fields.json
+trans.vi = public/language/vi/admin/manage/user-custom-fields.json
+trans.zh_CN = public/language/zh-CN/admin/manage/user-custom-fields.json
+trans.zh_TW = public/language/zh-TW/admin/manage/user-custom-fields.json
[o:nodebb:p:nodebb:r:admin-manage-users]
file_filter = public/language//admin/manage/users.json
source_file = public/language/en-GB/admin/manage/users.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.uk = public/language/uk/admin/manage/users.json
-trans.en@pirate = public/language/en-x-pirate/admin/manage/users.json
+trans.ar = public/language/ar/admin/manage/users.json
+trans.az = public/language/az/admin/manage/users.json
+trans.bg = public/language/bg/admin/manage/users.json
+trans.bn = public/language/bn/admin/manage/users.json
+trans.cs = public/language/cs/admin/manage/users.json
+trans.da = public/language/da/admin/manage/users.json
+trans.de = public/language/de/admin/manage/users.json
+trans.el = public/language/el/admin/manage/users.json
trans.en_US = public/language/en-US/admin/manage/users.json
+trans.en@pirate = public/language/en-x-pirate/admin/manage/users.json
+trans.es = public/language/es/admin/manage/users.json
+trans.et = public/language/et/admin/manage/users.json
+trans.fa_IR = public/language/fa-IR/admin/manage/users.json
+trans.fi = public/language/fi/admin/manage/users.json
trans.fr = public/language/fr/admin/manage/users.json
+trans.gl = public/language/gl/admin/manage/users.json
+trans.he = public/language/he/admin/manage/users.json
+trans.hr = public/language/hr/admin/manage/users.json
+trans.hu = public/language/hu/admin/manage/users.json
+trans.hy = public/language/hy/admin/manage/users.json
+trans.id = public/language/id/admin/manage/users.json
+trans.it = public/language/it/admin/manage/users.json
+trans.ja = public/language/ja/admin/manage/users.json
trans.ko = public/language/ko/admin/manage/users.json
+trans.lt = public/language/lt/admin/manage/users.json
+trans.lv = public/language/lv/admin/manage/users.json
trans.ms = public/language/ms/admin/manage/users.json
trans.nb = public/language/nb/admin/manage/users.json
-trans.pt_BR = public/language/pt-BR/admin/manage/users.json
-trans.zh_CN = public/language/zh-CN/admin/manage/users.json
-trans.zh_TW = public/language/zh-TW/admin/manage/users.json
-trans.cs = public/language/cs/admin/manage/users.json
-trans.gl = public/language/gl/admin/manage/users.json
-trans.rw = public/language/rw/admin/manage/users.json
-trans.bg = public/language/bg/admin/manage/users.json
-trans.de = public/language/de/admin/manage/users.json
-trans.et = public/language/et/admin/manage/users.json
-trans.id = public/language/id/admin/manage/users.json
-trans.pt_PT = public/language/pt-PT/admin/manage/users.json
-trans.ru = public/language/ru/admin/manage/users.json
-trans.da = public/language/da/admin/manage/users.json
-trans.he = public/language/he/admin/manage/users.json
-trans.hu = public/language/hu/admin/manage/users.json
-trans.ro = public/language/ro/admin/manage/users.json
-trans.bn = public/language/bn/admin/manage/users.json
-trans.es = public/language/es/admin/manage/users.json
-trans.it = public/language/it/admin/manage/users.json
trans.nl = public/language/nl/admin/manage/users.json
-trans.sq_AL = public/language/sq-AL/admin/manage/users.json
-trans.tr = public/language/tr/admin/manage/users.json
-trans.vi = public/language/vi/admin/manage/users.json
-trans.fi = public/language/fi/admin/manage/users.json
-trans.sc = public/language/sc/admin/manage/users.json
-trans.hy = public/language/hy/admin/manage/users.json
-trans.ja = public/language/ja/admin/manage/users.json
-trans.lt = public/language/lt/admin/manage/users.json
-trans.th = public/language/th/admin/manage/users.json
-trans.sl = public/language/sl/admin/manage/users.json
-trans.ar = public/language/ar/admin/manage/users.json
-trans.el = public/language/el/admin/manage/users.json
-trans.fa_IR = public/language/fa-IR/admin/manage/users.json
-trans.hr = public/language/hr/admin/manage/users.json
-trans.lv = public/language/lv/admin/manage/users.json
+trans.nn_NO = public/language/nn-NO/admin/manage/users.json
trans.pl = public/language/pl/admin/manage/users.json
+trans.pt_BR = public/language/pt-BR/admin/manage/users.json
+trans.pt_PT = public/language/pt-PT/admin/manage/users.json
+trans.ro = public/language/ro/admin/manage/users.json
+trans.ru = public/language/ru/admin/manage/users.json
+trans.rw = public/language/rw/admin/manage/users.json
+trans.sc = public/language/sc/admin/manage/users.json
trans.sk = public/language/sk/admin/manage/users.json
+trans.sl = public/language/sl/admin/manage/users.json
+trans.sq_AL = public/language/sq-AL/admin/manage/users.json
trans.sr = public/language/sr/admin/manage/users.json
trans.sv = public/language/sv/admin/manage/users.json
+trans.th = public/language/th/admin/manage/users.json
+trans.tr = public/language/tr/admin/manage/users.json
+trans.uk = public/language/uk/admin/manage/users.json
+trans.ur = public/language/ur/admin/manage/users.json
+trans.vi = public/language/vi/admin/manage/users.json
+trans.zh_CN = public/language/zh-CN/admin/manage/users.json
+trans.zh_TW = public/language/zh-TW/admin/manage/users.json
[o:nodebb:p:nodebb:r:admin-menu]
file_filter = public/language//admin/menu.json
source_file = public/language/en-GB/admin/menu.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.ru = public/language/ru/admin/menu.json
-trans.th = public/language/th/admin/menu.json
-trans.vi = public/language/vi/admin/menu.json
-trans.zh_CN = public/language/zh-CN/admin/menu.json
-trans.hr = public/language/hr/admin/menu.json
-trans.ko = public/language/ko/admin/menu.json
-trans.it = public/language/it/admin/menu.json
-trans.lt = public/language/lt/admin/menu.json
-trans.pl = public/language/pl/admin/menu.json
-trans.sc = public/language/sc/admin/menu.json
-trans.sv = public/language/sv/admin/menu.json
-trans.en@pirate = public/language/en-x-pirate/admin/menu.json
-trans.fr = public/language/fr/admin/menu.json
-trans.de = public/language/de/admin/menu.json
-trans.ms = public/language/ms/admin/menu.json
-trans.sq_AL = public/language/sq-AL/admin/menu.json
+trans.ar = public/language/ar/admin/menu.json
+trans.az = public/language/az/admin/menu.json
trans.bg = public/language/bg/admin/menu.json
+trans.bn = public/language/bn/admin/menu.json
+trans.cs = public/language/cs/admin/menu.json
trans.da = public/language/da/admin/menu.json
+trans.de = public/language/de/admin/menu.json
+trans.el = public/language/el/admin/menu.json
+trans.en_US = public/language/en-US/admin/menu.json
+trans.en@pirate = public/language/en-x-pirate/admin/menu.json
trans.es = public/language/es/admin/menu.json
+trans.et = public/language/et/admin/menu.json
+trans.fa_IR = public/language/fa-IR/admin/menu.json
+trans.fi = public/language/fi/admin/menu.json
+trans.fr = public/language/fr/admin/menu.json
+trans.gl = public/language/gl/admin/menu.json
+trans.he = public/language/he/admin/menu.json
+trans.hr = public/language/hr/admin/menu.json
+trans.hu = public/language/hu/admin/menu.json
trans.hy = public/language/hy/admin/menu.json
trans.id = public/language/id/admin/menu.json
+trans.it = public/language/it/admin/menu.json
trans.ja = public/language/ja/admin/menu.json
-trans.ro = public/language/ro/admin/menu.json
-trans.rw = public/language/rw/admin/menu.json
-trans.ar = public/language/ar/admin/menu.json
-trans.en_US = public/language/en-US/admin/menu.json
-trans.sl = public/language/sl/admin/menu.json
-trans.uk = public/language/uk/admin/menu.json
-trans.he = public/language/he/admin/menu.json
-trans.hu = public/language/hu/admin/menu.json
-trans.sr = public/language/sr/admin/menu.json
-trans.cs = public/language/cs/admin/menu.json
-trans.fa_IR = public/language/fa-IR/admin/menu.json
-trans.sk = public/language/sk/admin/menu.json
-trans.tr = public/language/tr/admin/menu.json
-trans.fi = public/language/fi/admin/menu.json
-trans.nl = public/language/nl/admin/menu.json
-trans.pt_BR = public/language/pt-BR/admin/menu.json
-trans.zh_TW = public/language/zh-TW/admin/menu.json
-trans.el = public/language/el/admin/menu.json
-trans.gl = public/language/gl/admin/menu.json
+trans.ko = public/language/ko/admin/menu.json
+trans.lt = public/language/lt/admin/menu.json
trans.lv = public/language/lv/admin/menu.json
+trans.ms = public/language/ms/admin/menu.json
trans.nb = public/language/nb/admin/menu.json
+trans.nl = public/language/nl/admin/menu.json
+trans.nn_NO = public/language/nn-NO/admin/menu.json
+trans.pl = public/language/pl/admin/menu.json
+trans.pt_BR = public/language/pt-BR/admin/menu.json
trans.pt_PT = public/language/pt-PT/admin/menu.json
-trans.bn = public/language/bn/admin/menu.json
-trans.et = public/language/et/admin/menu.json
+trans.ro = public/language/ro/admin/menu.json
+trans.ru = public/language/ru/admin/menu.json
+trans.rw = public/language/rw/admin/menu.json
+trans.sc = public/language/sc/admin/menu.json
+trans.sk = public/language/sk/admin/menu.json
+trans.sl = public/language/sl/admin/menu.json
+trans.sq_AL = public/language/sq-AL/admin/menu.json
+trans.sr = public/language/sr/admin/menu.json
+trans.sv = public/language/sv/admin/menu.json
+trans.th = public/language/th/admin/menu.json
+trans.tr = public/language/tr/admin/menu.json
+trans.uk = public/language/uk/admin/menu.json
+trans.ur = public/language/ur/admin/menu.json
+trans.vi = public/language/vi/admin/menu.json
+trans.zh_CN = public/language/zh-CN/admin/menu.json
+trans.zh_TW = public/language/zh-TW/admin/menu.json
[o:nodebb:p:nodebb:r:admin-settings-advanced]
file_filter = public/language//admin/settings/advanced.json
source_file = public/language/en-GB/admin/settings/advanced.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.ko = public/language/ko/admin/settings/advanced.json
-trans.sc = public/language/sc/admin/settings/advanced.json
trans.ar = public/language/ar/admin/settings/advanced.json
-trans.bn = public/language/bn/admin/settings/advanced.json
-trans.el = public/language/el/admin/settings/advanced.json
-trans.fa_IR = public/language/fa-IR/admin/settings/advanced.json
-trans.fr = public/language/fr/admin/settings/advanced.json
-trans.hy = public/language/hy/admin/settings/advanced.json
+trans.az = public/language/az/admin/settings/advanced.json
trans.bg = public/language/bg/admin/settings/advanced.json
-trans.lv = public/language/lv/admin/settings/advanced.json
-trans.pt_BR = public/language/pt-BR/admin/settings/advanced.json
+trans.bn = public/language/bn/admin/settings/advanced.json
+trans.cs = public/language/cs/admin/settings/advanced.json
+trans.da = public/language/da/admin/settings/advanced.json
+trans.de = public/language/de/admin/settings/advanced.json
+trans.el = public/language/el/admin/settings/advanced.json
+trans.en_US = public/language/en-US/admin/settings/advanced.json
trans.en@pirate = public/language/en-x-pirate/admin/settings/advanced.json
trans.es = public/language/es/admin/settings/advanced.json
-trans.id = public/language/id/admin/settings/advanced.json
-trans.rw = public/language/rw/admin/settings/advanced.json
-trans.sl = public/language/sl/admin/settings/advanced.json
-trans.it = public/language/it/admin/settings/advanced.json
-trans.nb = public/language/nb/admin/settings/advanced.json
-trans.pt_PT = public/language/pt-PT/admin/settings/advanced.json
-trans.sq_AL = public/language/sq-AL/admin/settings/advanced.json
-trans.sr = public/language/sr/admin/settings/advanced.json
-trans.zh_CN = public/language/zh-CN/admin/settings/advanced.json
-trans.zh_TW = public/language/zh-TW/admin/settings/advanced.json
-trans.cs = public/language/cs/admin/settings/advanced.json
-trans.en_US = public/language/en-US/admin/settings/advanced.json
-trans.hr = public/language/hr/admin/settings/advanced.json
-trans.pl = public/language/pl/admin/settings/advanced.json
-trans.ru = public/language/ru/admin/settings/advanced.json
-trans.sv = public/language/sv/admin/settings/advanced.json
-trans.vi = public/language/vi/admin/settings/advanced.json
-trans.de = public/language/de/admin/settings/advanced.json
trans.et = public/language/et/admin/settings/advanced.json
+trans.fa_IR = public/language/fa-IR/admin/settings/advanced.json
trans.fi = public/language/fi/admin/settings/advanced.json
-trans.ro = public/language/ro/admin/settings/advanced.json
-trans.sk = public/language/sk/admin/settings/advanced.json
-trans.uk = public/language/uk/admin/settings/advanced.json
-trans.da = public/language/da/admin/settings/advanced.json
+trans.fr = public/language/fr/admin/settings/advanced.json
trans.gl = public/language/gl/admin/settings/advanced.json
trans.he = public/language/he/admin/settings/advanced.json
+trans.hr = public/language/hr/admin/settings/advanced.json
trans.hu = public/language/hu/admin/settings/advanced.json
+trans.hy = public/language/hy/admin/settings/advanced.json
+trans.id = public/language/id/admin/settings/advanced.json
+trans.it = public/language/it/admin/settings/advanced.json
trans.ja = public/language/ja/admin/settings/advanced.json
-trans.tr = public/language/tr/admin/settings/advanced.json
+trans.ko = public/language/ko/admin/settings/advanced.json
trans.lt = public/language/lt/admin/settings/advanced.json
+trans.lv = public/language/lv/admin/settings/advanced.json
trans.ms = public/language/ms/admin/settings/advanced.json
+trans.nb = public/language/nb/admin/settings/advanced.json
trans.nl = public/language/nl/admin/settings/advanced.json
+trans.nn_NO = public/language/nn-NO/admin/settings/advanced.json
+trans.pl = public/language/pl/admin/settings/advanced.json
+trans.pt_BR = public/language/pt-BR/admin/settings/advanced.json
+trans.pt_PT = public/language/pt-PT/admin/settings/advanced.json
+trans.ro = public/language/ro/admin/settings/advanced.json
+trans.ru = public/language/ru/admin/settings/advanced.json
+trans.rw = public/language/rw/admin/settings/advanced.json
+trans.sc = public/language/sc/admin/settings/advanced.json
+trans.sk = public/language/sk/admin/settings/advanced.json
+trans.sl = public/language/sl/admin/settings/advanced.json
+trans.sq_AL = public/language/sq-AL/admin/settings/advanced.json
+trans.sr = public/language/sr/admin/settings/advanced.json
+trans.sv = public/language/sv/admin/settings/advanced.json
trans.th = public/language/th/admin/settings/advanced.json
+trans.tr = public/language/tr/admin/settings/advanced.json
+trans.uk = public/language/uk/admin/settings/advanced.json
+trans.ur = public/language/ur/admin/settings/advanced.json
+trans.vi = public/language/vi/admin/settings/advanced.json
+trans.zh_CN = public/language/zh-CN/admin/settings/advanced.json
+trans.zh_TW = public/language/zh-TW/admin/settings/advanced.json
+
+[o:nodebb:p:nodebb:r:admin-settings-activitypub]
+file_filter = public/language//admin/settings/activitypub.json
+source_file = public/language/en-GB/admin/settings/activitypub.json
+source_lang = en_GB
+type = KEYVALUEJSON
+trans.ar = public/language/ar/admin/settings/activitypub.json
+trans.az = public/language/az/admin/settings/activitypub.json
+trans.bg = public/language/bg/admin/settings/activitypub.json
+trans.bn = public/language/bn/admin/settings/activitypub.json
+trans.cs = public/language/cs/admin/settings/activitypub.json
+trans.da = public/language/da/admin/settings/activitypub.json
+trans.de = public/language/de/admin/settings/activitypub.json
+trans.el = public/language/el/admin/settings/activitypub.json
+trans.en_US = public/language/en-US/admin/settings/activitypub.json
+trans.en@pirate = public/language/en-x-pirate/admin/settings/activitypub.json
+trans.es = public/language/es/admin/settings/activitypub.json
+trans.et = public/language/et/admin/settings/activitypub.json
+trans.fa_IR = public/language/fa-IR/admin/settings/activitypub.json
+trans.fi = public/language/fi/admin/settings/activitypub.json
+trans.fr = public/language/fr/admin/settings/activitypub.json
+trans.gl = public/language/gl/admin/settings/activitypub.json
+trans.he = public/language/he/admin/settings/activitypub.json
+trans.hr = public/language/hr/admin/settings/activitypub.json
+trans.hu = public/language/hu/admin/settings/activitypub.json
+trans.hy = public/language/hy/admin/settings/activitypub.json
+trans.id = public/language/id/admin/settings/activitypub.json
+trans.it = public/language/it/admin/settings/activitypub.json
+trans.ja = public/language/ja/admin/settings/activitypub.json
+trans.ko = public/language/ko/admin/settings/activitypub.json
+trans.lt = public/language/lt/admin/settings/activitypub.json
+trans.lv = public/language/lv/admin/settings/activitypub.json
+trans.ms = public/language/ms/admin/settings/activitypub.json
+trans.nb = public/language/nb/admin/settings/activitypub.json
+trans.nl = public/language/nl/admin/settings/activitypub.json
+trans.nn_NO = public/language/nn-NO/admin/settings/activitypub.json
+trans.pl = public/language/pl/admin/settings/activitypub.json
+trans.pt_BR = public/language/pt-BR/admin/settings/activitypub.json
+trans.pt_PT = public/language/pt-PT/admin/settings/activitypub.json
+trans.ro = public/language/ro/admin/settings/activitypub.json
+trans.ru = public/language/ru/admin/settings/activitypub.json
+trans.rw = public/language/rw/admin/settings/activitypub.json
+trans.sc = public/language/sc/admin/settings/activitypub.json
+trans.sk = public/language/sk/admin/settings/activitypub.json
+trans.sl = public/language/sl/admin/settings/activitypub.json
+trans.sq_AL = public/language/sq-AL/admin/settings/activitypub.json
+trans.sr = public/language/sr/admin/settings/activitypub.json
+trans.sv = public/language/sv/admin/settings/activitypub.json
+trans.th = public/language/th/admin/settings/activitypub.json
+trans.tr = public/language/tr/admin/settings/activitypub.json
+trans.uk = public/language/uk/admin/settings/activitypub.json
+trans.ur = public/language/ur/admin/settings/activitypub.json
+trans.vi = public/language/vi/admin/settings/activitypub.json
+trans.zh_CN = public/language/zh-CN/admin/settings/activitypub.json
+trans.zh_TW = public/language/zh-TW/admin/settings/activitypub.json
[o:nodebb:p:nodebb:r:admin-settings-api]
file_filter = public/language//admin/settings/api.json
source_file = public/language/en-GB/admin/settings/api.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.et = public/language/et/admin/settings/api.json
-trans.lv = public/language/lv/admin/settings/api.json
-trans.nl = public/language/nl/admin/settings/api.json
-trans.rw = public/language/rw/admin/settings/api.json
-trans.sl = public/language/sl/admin/settings/api.json
+trans.ar = public/language/ar/admin/settings/api.json
+trans.az = public/language/az/admin/settings/api.json
+trans.bg = public/language/bg/admin/settings/api.json
trans.bn = public/language/bn/admin/settings/api.json
+trans.cs = public/language/cs/admin/settings/api.json
+trans.da = public/language/da/admin/settings/api.json
trans.de = public/language/de/admin/settings/api.json
trans.el = public/language/el/admin/settings/api.json
trans.en_US = public/language/en-US/admin/settings/api.json
+trans.en@pirate = public/language/en-x-pirate/admin/settings/api.json
+trans.es = public/language/es/admin/settings/api.json
+trans.et = public/language/et/admin/settings/api.json
+trans.fa_IR = public/language/fa-IR/admin/settings/api.json
trans.fi = public/language/fi/admin/settings/api.json
+trans.fr = public/language/fr/admin/settings/api.json
+trans.gl = public/language/gl/admin/settings/api.json
trans.he = public/language/he/admin/settings/api.json
trans.hr = public/language/hr/admin/settings/api.json
+trans.hu = public/language/hu/admin/settings/api.json
trans.hy = public/language/hy/admin/settings/api.json
+trans.id = public/language/id/admin/settings/api.json
+trans.it = public/language/it/admin/settings/api.json
trans.ja = public/language/ja/admin/settings/api.json
trans.ko = public/language/ko/admin/settings/api.json
+trans.lt = public/language/lt/admin/settings/api.json
+trans.lv = public/language/lv/admin/settings/api.json
trans.ms = public/language/ms/admin/settings/api.json
+trans.nb = public/language/nb/admin/settings/api.json
+trans.nl = public/language/nl/admin/settings/api.json
+trans.nn_NO = public/language/nn-NO/admin/settings/api.json
+trans.pl = public/language/pl/admin/settings/api.json
trans.pt_BR = public/language/pt-BR/admin/settings/api.json
+trans.pt_PT = public/language/pt-PT/admin/settings/api.json
+trans.ro = public/language/ro/admin/settings/api.json
+trans.ru = public/language/ru/admin/settings/api.json
+trans.rw = public/language/rw/admin/settings/api.json
+trans.sc = public/language/sc/admin/settings/api.json
+trans.sk = public/language/sk/admin/settings/api.json
+trans.sl = public/language/sl/admin/settings/api.json
+trans.sq_AL = public/language/sq-AL/admin/settings/api.json
+trans.sr = public/language/sr/admin/settings/api.json
+trans.sv = public/language/sv/admin/settings/api.json
+trans.th = public/language/th/admin/settings/api.json
+trans.tr = public/language/tr/admin/settings/api.json
+trans.uk = public/language/uk/admin/settings/api.json
+trans.ur = public/language/ur/admin/settings/api.json
+trans.vi = public/language/vi/admin/settings/api.json
trans.zh_CN = public/language/zh-CN/admin/settings/api.json
trans.zh_TW = public/language/zh-TW/admin/settings/api.json
-trans.cs = public/language/cs/admin/settings/api.json
-trans.it = public/language/it/admin/settings/api.json
-trans.nb = public/language/nb/admin/settings/api.json
-trans.pt_PT = public/language/pt-PT/admin/settings/api.json
-trans.ru = public/language/ru/admin/settings/api.json
-trans.uk = public/language/uk/admin/settings/api.json
-trans.vi = public/language/vi/admin/settings/api.json
-trans.en@pirate = public/language/en-x-pirate/admin/settings/api.json
-trans.fr = public/language/fr/admin/settings/api.json
-trans.lt = public/language/lt/admin/settings/api.json
-trans.sr = public/language/sr/admin/settings/api.json
-trans.fa_IR = public/language/fa-IR/admin/settings/api.json
-trans.sq_AL = public/language/sq-AL/admin/settings/api.json
-trans.th = public/language/th/admin/settings/api.json
-trans.da = public/language/da/admin/settings/api.json
-trans.gl = public/language/gl/admin/settings/api.json
-trans.pl = public/language/pl/admin/settings/api.json
-trans.ar = public/language/ar/admin/settings/api.json
-trans.es = public/language/es/admin/settings/api.json
-trans.hu = public/language/hu/admin/settings/api.json
-trans.sc = public/language/sc/admin/settings/api.json
-trans.bg = public/language/bg/admin/settings/api.json
-trans.id = public/language/id/admin/settings/api.json
-trans.ro = public/language/ro/admin/settings/api.json
-trans.sk = public/language/sk/admin/settings/api.json
-trans.sv = public/language/sv/admin/settings/api.json
-trans.tr = public/language/tr/admin/settings/api.json
[o:nodebb:p:nodebb:r:admin-settings-chat]
file_filter = public/language//admin/settings/chat.json
@@ -1411,50 +1712,53 @@ source_file = public/language/en-GB/admin/settings/chat.json
source_lang = en_GB
type = KEYVALUEJSON
trans.ar = public/language/ar/admin/settings/chat.json
-trans.es = public/language/es/admin/settings/chat.json
-trans.et = public/language/et/admin/settings/chat.json
-trans.ms = public/language/ms/admin/settings/chat.json
-trans.sk = public/language/sk/admin/settings/chat.json
-trans.sq_AL = public/language/sq-AL/admin/settings/chat.json
+trans.az = public/language/az/admin/settings/chat.json
+trans.bg = public/language/bg/admin/settings/chat.json
+trans.bn = public/language/bn/admin/settings/chat.json
+trans.cs = public/language/cs/admin/settings/chat.json
trans.da = public/language/da/admin/settings/chat.json
trans.de = public/language/de/admin/settings/chat.json
-trans.en_US = public/language/en-US/admin/settings/chat.json
-trans.fa_IR = public/language/fa-IR/admin/settings/chat.json
-trans.fr = public/language/fr/admin/settings/chat.json
-trans.id = public/language/id/admin/settings/chat.json
-trans.ro = public/language/ro/admin/settings/chat.json
trans.el = public/language/el/admin/settings/chat.json
+trans.en_US = public/language/en-US/admin/settings/chat.json
+trans.en@pirate = public/language/en-x-pirate/admin/settings/chat.json
+trans.es = public/language/es/admin/settings/chat.json
+trans.et = public/language/et/admin/settings/chat.json
+trans.fa_IR = public/language/fa-IR/admin/settings/chat.json
+trans.fi = public/language/fi/admin/settings/chat.json
+trans.fr = public/language/fr/admin/settings/chat.json
+trans.gl = public/language/gl/admin/settings/chat.json
+trans.he = public/language/he/admin/settings/chat.json
trans.hr = public/language/hr/admin/settings/chat.json
+trans.hu = public/language/hu/admin/settings/chat.json
+trans.hy = public/language/hy/admin/settings/chat.json
+trans.id = public/language/id/admin/settings/chat.json
+trans.it = public/language/it/admin/settings/chat.json
trans.ja = public/language/ja/admin/settings/chat.json
trans.ko = public/language/ko/admin/settings/chat.json
-trans.nb = public/language/nb/admin/settings/chat.json
-trans.nl = public/language/nl/admin/settings/chat.json
-trans.uk = public/language/uk/admin/settings/chat.json
-trans.he = public/language/he/admin/settings/chat.json
-trans.sl = public/language/sl/admin/settings/chat.json
-trans.sr = public/language/sr/admin/settings/chat.json
-trans.cs = public/language/cs/admin/settings/chat.json
-trans.pl = public/language/pl/admin/settings/chat.json
-trans.pt_BR = public/language/pt-BR/admin/settings/chat.json
-trans.sv = public/language/sv/admin/settings/chat.json
-trans.zh_CN = public/language/zh-CN/admin/settings/chat.json
-trans.bg = public/language/bg/admin/settings/chat.json
-trans.en@pirate = public/language/en-x-pirate/admin/settings/chat.json
-trans.hu = public/language/hu/admin/settings/chat.json
-trans.ru = public/language/ru/admin/settings/chat.json
-trans.rw = public/language/rw/admin/settings/chat.json
-trans.tr = public/language/tr/admin/settings/chat.json
-trans.bn = public/language/bn/admin/settings/chat.json
-trans.hy = public/language/hy/admin/settings/chat.json
trans.lt = public/language/lt/admin/settings/chat.json
trans.lv = public/language/lv/admin/settings/chat.json
-trans.th = public/language/th/admin/settings/chat.json
-trans.fi = public/language/fi/admin/settings/chat.json
-trans.gl = public/language/gl/admin/settings/chat.json
-trans.it = public/language/it/admin/settings/chat.json
+trans.ms = public/language/ms/admin/settings/chat.json
+trans.nb = public/language/nb/admin/settings/chat.json
+trans.nl = public/language/nl/admin/settings/chat.json
+trans.nn_NO = public/language/nn-NO/admin/settings/chat.json
+trans.pl = public/language/pl/admin/settings/chat.json
+trans.pt_BR = public/language/pt-BR/admin/settings/chat.json
trans.pt_PT = public/language/pt-PT/admin/settings/chat.json
+trans.ro = public/language/ro/admin/settings/chat.json
+trans.ru = public/language/ru/admin/settings/chat.json
+trans.rw = public/language/rw/admin/settings/chat.json
trans.sc = public/language/sc/admin/settings/chat.json
+trans.sk = public/language/sk/admin/settings/chat.json
+trans.sl = public/language/sl/admin/settings/chat.json
+trans.sq_AL = public/language/sq-AL/admin/settings/chat.json
+trans.sr = public/language/sr/admin/settings/chat.json
+trans.sv = public/language/sv/admin/settings/chat.json
+trans.th = public/language/th/admin/settings/chat.json
+trans.tr = public/language/tr/admin/settings/chat.json
+trans.uk = public/language/uk/admin/settings/chat.json
+trans.ur = public/language/ur/admin/settings/chat.json
trans.vi = public/language/vi/admin/settings/chat.json
+trans.zh_CN = public/language/zh-CN/admin/settings/chat.json
trans.zh_TW = public/language/zh-TW/admin/settings/chat.json
[o:nodebb:p:nodebb:r:admin-settings-cookies]
@@ -1462,832 +1766,660 @@ file_filter = public/language//admin/settings/cookies.json
source_file = public/language/en-GB/admin/settings/cookies.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.sr = public/language/sr/admin/settings/cookies.json
-trans.th = public/language/th/admin/settings/cookies.json
-trans.zh_CN = public/language/zh-CN/admin/settings/cookies.json
-trans.en_US = public/language/en-US/admin/settings/cookies.json
-trans.lt = public/language/lt/admin/settings/cookies.json
-trans.pl = public/language/pl/admin/settings/cookies.json
-trans.ro = public/language/ro/admin/settings/cookies.json
-trans.rw = public/language/rw/admin/settings/cookies.json
-trans.sk = public/language/sk/admin/settings/cookies.json
-trans.tr = public/language/tr/admin/settings/cookies.json
trans.ar = public/language/ar/admin/settings/cookies.json
-trans.da = public/language/da/admin/settings/cookies.json
-trans.en@pirate = public/language/en-x-pirate/admin/settings/cookies.json
-trans.gl = public/language/gl/admin/settings/cookies.json
-trans.hu = public/language/hu/admin/settings/cookies.json
-trans.vi = public/language/vi/admin/settings/cookies.json
-trans.el = public/language/el/admin/settings/cookies.json
-trans.et = public/language/et/admin/settings/cookies.json
-trans.lv = public/language/lv/admin/settings/cookies.json
-trans.ru = public/language/ru/admin/settings/cookies.json
-trans.uk = public/language/uk/admin/settings/cookies.json
-trans.ko = public/language/ko/admin/settings/cookies.json
-trans.sv = public/language/sv/admin/settings/cookies.json
-trans.bn = public/language/bn/admin/settings/cookies.json
-trans.de = public/language/de/admin/settings/cookies.json
-trans.he = public/language/he/admin/settings/cookies.json
-trans.hy = public/language/hy/admin/settings/cookies.json
-trans.it = public/language/it/admin/settings/cookies.json
-trans.cs = public/language/cs/admin/settings/cookies.json
-trans.hr = public/language/hr/admin/settings/cookies.json
-trans.ja = public/language/ja/admin/settings/cookies.json
-trans.pt_PT = public/language/pt-PT/admin/settings/cookies.json
-trans.nb = public/language/nb/admin/settings/cookies.json
-trans.sc = public/language/sc/admin/settings/cookies.json
+trans.az = public/language/az/admin/settings/cookies.json
trans.bg = public/language/bg/admin/settings/cookies.json
+trans.bn = public/language/bn/admin/settings/cookies.json
+trans.cs = public/language/cs/admin/settings/cookies.json
+trans.da = public/language/da/admin/settings/cookies.json
+trans.de = public/language/de/admin/settings/cookies.json
+trans.el = public/language/el/admin/settings/cookies.json
+trans.en_US = public/language/en-US/admin/settings/cookies.json
+trans.en@pirate = public/language/en-x-pirate/admin/settings/cookies.json
+trans.es = public/language/es/admin/settings/cookies.json
+trans.et = public/language/et/admin/settings/cookies.json
+trans.fa_IR = public/language/fa-IR/admin/settings/cookies.json
trans.fi = public/language/fi/admin/settings/cookies.json
trans.fr = public/language/fr/admin/settings/cookies.json
+trans.gl = public/language/gl/admin/settings/cookies.json
+trans.he = public/language/he/admin/settings/cookies.json
+trans.hr = public/language/hr/admin/settings/cookies.json
+trans.hu = public/language/hu/admin/settings/cookies.json
+trans.hy = public/language/hy/admin/settings/cookies.json
trans.id = public/language/id/admin/settings/cookies.json
+trans.it = public/language/it/admin/settings/cookies.json
+trans.ja = public/language/ja/admin/settings/cookies.json
+trans.ko = public/language/ko/admin/settings/cookies.json
+trans.lt = public/language/lt/admin/settings/cookies.json
+trans.lv = public/language/lv/admin/settings/cookies.json
trans.ms = public/language/ms/admin/settings/cookies.json
-trans.zh_TW = public/language/zh-TW/admin/settings/cookies.json
-trans.es = public/language/es/admin/settings/cookies.json
-trans.fa_IR = public/language/fa-IR/admin/settings/cookies.json
+trans.nb = public/language/nb/admin/settings/cookies.json
trans.nl = public/language/nl/admin/settings/cookies.json
+trans.nn_NO = public/language/nn-NO/admin/settings/cookies.json
+trans.pl = public/language/pl/admin/settings/cookies.json
+trans.pt_BR = public/language/pt-BR/admin/settings/cookies.json
+trans.pt_PT = public/language/pt-PT/admin/settings/cookies.json
+trans.ro = public/language/ro/admin/settings/cookies.json
+trans.ru = public/language/ru/admin/settings/cookies.json
+trans.rw = public/language/rw/admin/settings/cookies.json
+trans.sc = public/language/sc/admin/settings/cookies.json
+trans.sk = public/language/sk/admin/settings/cookies.json
trans.sl = public/language/sl/admin/settings/cookies.json
trans.sq_AL = public/language/sq-AL/admin/settings/cookies.json
-trans.pt_BR = public/language/pt-BR/admin/settings/cookies.json
+trans.sr = public/language/sr/admin/settings/cookies.json
+trans.sv = public/language/sv/admin/settings/cookies.json
+trans.th = public/language/th/admin/settings/cookies.json
+trans.tr = public/language/tr/admin/settings/cookies.json
+trans.uk = public/language/uk/admin/settings/cookies.json
+trans.ur = public/language/ur/admin/settings/cookies.json
+trans.vi = public/language/vi/admin/settings/cookies.json
+trans.zh_CN = public/language/zh-CN/admin/settings/cookies.json
+trans.zh_TW = public/language/zh-TW/admin/settings/cookies.json
[o:nodebb:p:nodebb:r:admin-settings-email]
file_filter = public/language//admin/settings/email.json
source_file = public/language/en-GB/admin/settings/email.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.sv = public/language/sv/admin/settings/email.json
-trans.tr = public/language/tr/admin/settings/email.json
-trans.uk = public/language/uk/admin/settings/email.json
trans.ar = public/language/ar/admin/settings/email.json
-trans.ja = public/language/ja/admin/settings/email.json
-trans.pt_PT = public/language/pt-PT/admin/settings/email.json
-trans.sr = public/language/sr/admin/settings/email.json
-trans.ms = public/language/ms/admin/settings/email.json
-trans.nb = public/language/nb/admin/settings/email.json
-trans.ru = public/language/ru/admin/settings/email.json
-trans.sk = public/language/sk/admin/settings/email.json
-trans.fr = public/language/fr/admin/settings/email.json
-trans.he = public/language/he/admin/settings/email.json
-trans.id = public/language/id/admin/settings/email.json
-trans.it = public/language/it/admin/settings/email.json
-trans.sl = public/language/sl/admin/settings/email.json
-trans.sq_AL = public/language/sq-AL/admin/settings/email.json
-trans.hr = public/language/hr/admin/settings/email.json
-trans.hu = public/language/hu/admin/settings/email.json
-trans.ko = public/language/ko/admin/settings/email.json
-trans.zh_TW = public/language/zh-TW/admin/settings/email.json
-trans.bn = public/language/bn/admin/settings/email.json
-trans.fi = public/language/fi/admin/settings/email.json
-trans.pt_BR = public/language/pt-BR/admin/settings/email.json
-trans.es = public/language/es/admin/settings/email.json
-trans.pl = public/language/pl/admin/settings/email.json
-trans.ro = public/language/ro/admin/settings/email.json
-trans.rw = public/language/rw/admin/settings/email.json
+trans.az = public/language/az/admin/settings/email.json
trans.bg = public/language/bg/admin/settings/email.json
+trans.bn = public/language/bn/admin/settings/email.json
trans.cs = public/language/cs/admin/settings/email.json
-trans.el = public/language/el/admin/settings/email.json
-trans.en_US = public/language/en-US/admin/settings/email.json
-trans.zh_CN = public/language/zh-CN/admin/settings/email.json
-trans.fa_IR = public/language/fa-IR/admin/settings/email.json
-trans.gl = public/language/gl/admin/settings/email.json
-trans.hy = public/language/hy/admin/settings/email.json
-trans.lv = public/language/lv/admin/settings/email.json
-trans.en@pirate = public/language/en-x-pirate/admin/settings/email.json
-trans.et = public/language/et/admin/settings/email.json
-trans.lt = public/language/lt/admin/settings/email.json
-trans.th = public/language/th/admin/settings/email.json
-trans.vi = public/language/vi/admin/settings/email.json
trans.da = public/language/da/admin/settings/email.json
trans.de = public/language/de/admin/settings/email.json
+trans.el = public/language/el/admin/settings/email.json
+trans.en_US = public/language/en-US/admin/settings/email.json
+trans.en@pirate = public/language/en-x-pirate/admin/settings/email.json
+trans.es = public/language/es/admin/settings/email.json
+trans.et = public/language/et/admin/settings/email.json
+trans.fa_IR = public/language/fa-IR/admin/settings/email.json
+trans.fi = public/language/fi/admin/settings/email.json
+trans.fr = public/language/fr/admin/settings/email.json
+trans.gl = public/language/gl/admin/settings/email.json
+trans.he = public/language/he/admin/settings/email.json
+trans.hr = public/language/hr/admin/settings/email.json
+trans.hu = public/language/hu/admin/settings/email.json
+trans.hy = public/language/hy/admin/settings/email.json
+trans.id = public/language/id/admin/settings/email.json
+trans.it = public/language/it/admin/settings/email.json
+trans.ja = public/language/ja/admin/settings/email.json
+trans.ko = public/language/ko/admin/settings/email.json
+trans.lt = public/language/lt/admin/settings/email.json
+trans.lv = public/language/lv/admin/settings/email.json
+trans.ms = public/language/ms/admin/settings/email.json
+trans.nb = public/language/nb/admin/settings/email.json
trans.nl = public/language/nl/admin/settings/email.json
+trans.nn_NO = public/language/nn-NO/admin/settings/email.json
+trans.pl = public/language/pl/admin/settings/email.json
+trans.pt_BR = public/language/pt-BR/admin/settings/email.json
+trans.pt_PT = public/language/pt-PT/admin/settings/email.json
+trans.ro = public/language/ro/admin/settings/email.json
+trans.ru = public/language/ru/admin/settings/email.json
+trans.rw = public/language/rw/admin/settings/email.json
trans.sc = public/language/sc/admin/settings/email.json
+trans.sk = public/language/sk/admin/settings/email.json
+trans.sl = public/language/sl/admin/settings/email.json
+trans.sq_AL = public/language/sq-AL/admin/settings/email.json
+trans.sr = public/language/sr/admin/settings/email.json
+trans.sv = public/language/sv/admin/settings/email.json
+trans.th = public/language/th/admin/settings/email.json
+trans.tr = public/language/tr/admin/settings/email.json
+trans.uk = public/language/uk/admin/settings/email.json
+trans.ur = public/language/ur/admin/settings/email.json
+trans.vi = public/language/vi/admin/settings/email.json
+trans.zh_CN = public/language/zh-CN/admin/settings/email.json
+trans.zh_TW = public/language/zh-TW/admin/settings/email.json
[o:nodebb:p:nodebb:r:admin-settings-general]
file_filter = public/language//admin/settings/general.json
source_file = public/language/en-GB/admin/settings/general.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.ko = public/language/ko/admin/settings/general.json
-trans.ro = public/language/ro/admin/settings/general.json
-trans.sc = public/language/sc/admin/settings/general.json
-trans.sk = public/language/sk/admin/settings/general.json
-trans.sv = public/language/sv/admin/settings/general.json
-trans.uk = public/language/uk/admin/settings/general.json
+trans.ar = public/language/ar/admin/settings/general.json
+trans.az = public/language/az/admin/settings/general.json
+trans.bg = public/language/bg/admin/settings/general.json
+trans.bn = public/language/bn/admin/settings/general.json
+trans.cs = public/language/cs/admin/settings/general.json
+trans.da = public/language/da/admin/settings/general.json
+trans.de = public/language/de/admin/settings/general.json
+trans.el = public/language/el/admin/settings/general.json
+trans.en_US = public/language/en-US/admin/settings/general.json
+trans.en@pirate = public/language/en-x-pirate/admin/settings/general.json
+trans.es = public/language/es/admin/settings/general.json
+trans.et = public/language/et/admin/settings/general.json
+trans.fa_IR = public/language/fa-IR/admin/settings/general.json
+trans.fi = public/language/fi/admin/settings/general.json
trans.fr = public/language/fr/admin/settings/general.json
trans.gl = public/language/gl/admin/settings/general.json
-trans.zh_CN = public/language/zh-CN/admin/settings/general.json
-trans.lt = public/language/lt/admin/settings/general.json
-trans.rw = public/language/rw/admin/settings/general.json
-trans.th = public/language/th/admin/settings/general.json
-trans.tr = public/language/tr/admin/settings/general.json
-trans.zh_TW = public/language/zh-TW/admin/settings/general.json
-trans.de = public/language/de/admin/settings/general.json
-trans.ja = public/language/ja/admin/settings/general.json
-trans.en_US = public/language/en-US/admin/settings/general.json
-trans.et = public/language/et/admin/settings/general.json
-trans.fi = public/language/fi/admin/settings/general.json
+trans.he = public/language/he/admin/settings/general.json
+trans.hr = public/language/hr/admin/settings/general.json
+trans.hu = public/language/hu/admin/settings/general.json
trans.hy = public/language/hy/admin/settings/general.json
trans.id = public/language/id/admin/settings/general.json
-trans.ru = public/language/ru/admin/settings/general.json
-trans.cs = public/language/cs/admin/settings/general.json
-trans.el = public/language/el/admin/settings/general.json
-trans.sl = public/language/sl/admin/settings/general.json
-trans.hu = public/language/hu/admin/settings/general.json
trans.it = public/language/it/admin/settings/general.json
-trans.nl = public/language/nl/admin/settings/general.json
-trans.pl = public/language/pl/admin/settings/general.json
-trans.es = public/language/es/admin/settings/general.json
-trans.fa_IR = public/language/fa-IR/admin/settings/general.json
+trans.ja = public/language/ja/admin/settings/general.json
+trans.ko = public/language/ko/admin/settings/general.json
+trans.lt = public/language/lt/admin/settings/general.json
+trans.lv = public/language/lv/admin/settings/general.json
trans.ms = public/language/ms/admin/settings/general.json
trans.nb = public/language/nb/admin/settings/general.json
-trans.sr = public/language/sr/admin/settings/general.json
-trans.da = public/language/da/admin/settings/general.json
-trans.en@pirate = public/language/en-x-pirate/admin/settings/general.json
-trans.pt_PT = public/language/pt-PT/admin/settings/general.json
-trans.he = public/language/he/admin/settings/general.json
-trans.lv = public/language/lv/admin/settings/general.json
+trans.nl = public/language/nl/admin/settings/general.json
+trans.nn_NO = public/language/nn-NO/admin/settings/general.json
+trans.pl = public/language/pl/admin/settings/general.json
trans.pt_BR = public/language/pt-BR/admin/settings/general.json
-trans.bn = public/language/bn/admin/settings/general.json
-trans.hr = public/language/hr/admin/settings/general.json
+trans.pt_PT = public/language/pt-PT/admin/settings/general.json
+trans.ro = public/language/ro/admin/settings/general.json
+trans.ru = public/language/ru/admin/settings/general.json
+trans.rw = public/language/rw/admin/settings/general.json
+trans.sc = public/language/sc/admin/settings/general.json
+trans.sk = public/language/sk/admin/settings/general.json
+trans.sl = public/language/sl/admin/settings/general.json
trans.sq_AL = public/language/sq-AL/admin/settings/general.json
+trans.sr = public/language/sr/admin/settings/general.json
+trans.sv = public/language/sv/admin/settings/general.json
+trans.th = public/language/th/admin/settings/general.json
+trans.tr = public/language/tr/admin/settings/general.json
+trans.uk = public/language/uk/admin/settings/general.json
+trans.ur = public/language/ur/admin/settings/general.json
trans.vi = public/language/vi/admin/settings/general.json
-trans.ar = public/language/ar/admin/settings/general.json
-trans.bg = public/language/bg/admin/settings/general.json
+trans.zh_CN = public/language/zh-CN/admin/settings/general.json
+trans.zh_TW = public/language/zh-TW/admin/settings/general.json
[o:nodebb:p:nodebb:r:admin-settings-group]
file_filter = public/language//admin/settings/group.json
source_file = public/language/en-GB/admin/settings/group.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.sc = public/language/sc/admin/settings/group.json
-trans.en_US = public/language/en-US/admin/settings/group.json
-trans.et = public/language/et/admin/settings/group.json
-trans.fr = public/language/fr/admin/settings/group.json
-trans.it = public/language/it/admin/settings/group.json
-trans.nb = public/language/nb/admin/settings/group.json
-trans.es = public/language/es/admin/settings/group.json
-trans.fa_IR = public/language/fa-IR/admin/settings/group.json
-trans.gl = public/language/gl/admin/settings/group.json
-trans.rw = public/language/rw/admin/settings/group.json
-trans.sr = public/language/sr/admin/settings/group.json
-trans.sq_AL = public/language/sq-AL/admin/settings/group.json
-trans.th = public/language/th/admin/settings/group.json
-trans.vi = public/language/vi/admin/settings/group.json
+trans.ar = public/language/ar/admin/settings/group.json
+trans.az = public/language/az/admin/settings/group.json
+trans.bg = public/language/bg/admin/settings/group.json
trans.bn = public/language/bn/admin/settings/group.json
+trans.cs = public/language/cs/admin/settings/group.json
+trans.da = public/language/da/admin/settings/group.json
+trans.de = public/language/de/admin/settings/group.json
+trans.el = public/language/el/admin/settings/group.json
+trans.en_US = public/language/en-US/admin/settings/group.json
+trans.en@pirate = public/language/en-x-pirate/admin/settings/group.json
+trans.es = public/language/es/admin/settings/group.json
+trans.et = public/language/et/admin/settings/group.json
+trans.fa_IR = public/language/fa-IR/admin/settings/group.json
trans.fi = public/language/fi/admin/settings/group.json
+trans.fr = public/language/fr/admin/settings/group.json
+trans.gl = public/language/gl/admin/settings/group.json
+trans.he = public/language/he/admin/settings/group.json
+trans.hr = public/language/hr/admin/settings/group.json
+trans.hu = public/language/hu/admin/settings/group.json
trans.hy = public/language/hy/admin/settings/group.json
trans.id = public/language/id/admin/settings/group.json
-trans.ms = public/language/ms/admin/settings/group.json
-trans.de = public/language/de/admin/settings/group.json
-trans.he = public/language/he/admin/settings/group.json
-trans.lv = public/language/lv/admin/settings/group.json
-trans.pt_PT = public/language/pt-PT/admin/settings/group.json
-trans.sk = public/language/sk/admin/settings/group.json
-trans.tr = public/language/tr/admin/settings/group.json
-trans.uk = public/language/uk/admin/settings/group.json
-trans.cs = public/language/cs/admin/settings/group.json
-trans.en@pirate = public/language/en-x-pirate/admin/settings/group.json
-trans.hu = public/language/hu/admin/settings/group.json
-trans.nl = public/language/nl/admin/settings/group.json
-trans.ru = public/language/ru/admin/settings/group.json
-trans.lt = public/language/lt/admin/settings/group.json
-trans.ro = public/language/ro/admin/settings/group.json
-trans.sl = public/language/sl/admin/settings/group.json
-trans.ar = public/language/ar/admin/settings/group.json
-trans.bg = public/language/bg/admin/settings/group.json
-trans.da = public/language/da/admin/settings/group.json
-trans.hr = public/language/hr/admin/settings/group.json
-trans.ko = public/language/ko/admin/settings/group.json
-trans.el = public/language/el/admin/settings/group.json
-trans.sv = public/language/sv/admin/settings/group.json
+trans.it = public/language/it/admin/settings/group.json
trans.ja = public/language/ja/admin/settings/group.json
+trans.ko = public/language/ko/admin/settings/group.json
+trans.lt = public/language/lt/admin/settings/group.json
+trans.lv = public/language/lv/admin/settings/group.json
+trans.ms = public/language/ms/admin/settings/group.json
+trans.nb = public/language/nb/admin/settings/group.json
+trans.nl = public/language/nl/admin/settings/group.json
+trans.nn_NO = public/language/nn-NO/admin/settings/group.json
trans.pl = public/language/pl/admin/settings/group.json
trans.pt_BR = public/language/pt-BR/admin/settings/group.json
+trans.pt_PT = public/language/pt-PT/admin/settings/group.json
+trans.ro = public/language/ro/admin/settings/group.json
+trans.ru = public/language/ru/admin/settings/group.json
+trans.rw = public/language/rw/admin/settings/group.json
+trans.sc = public/language/sc/admin/settings/group.json
+trans.sk = public/language/sk/admin/settings/group.json
+trans.sl = public/language/sl/admin/settings/group.json
+trans.sq_AL = public/language/sq-AL/admin/settings/group.json
+trans.sr = public/language/sr/admin/settings/group.json
+trans.sv = public/language/sv/admin/settings/group.json
+trans.th = public/language/th/admin/settings/group.json
+trans.tr = public/language/tr/admin/settings/group.json
+trans.uk = public/language/uk/admin/settings/group.json
+trans.ur = public/language/ur/admin/settings/group.json
+trans.vi = public/language/vi/admin/settings/group.json
trans.zh_CN = public/language/zh-CN/admin/settings/group.json
trans.zh_TW = public/language/zh-TW/admin/settings/group.json
-[o:nodebb:p:nodebb:r:admin-settings-guest]
-file_filter = public/language//admin/settings/guest.json
-source_file = public/language/en-GB/admin/settings/guest.json
-source_lang = en_GB
-type = KEYVALUEJSON
-trans.cs = public/language/cs/admin/settings/guest.json
-trans.da = public/language/da/admin/settings/guest.json
-trans.en_US = public/language/en-US/admin/settings/guest.json
-trans.lt = public/language/lt/admin/settings/guest.json
-trans.ms = public/language/ms/admin/settings/guest.json
-trans.nl = public/language/nl/admin/settings/guest.json
-trans.ru = public/language/ru/admin/settings/guest.json
-trans.sc = public/language/sc/admin/settings/guest.json
-trans.sr = public/language/sr/admin/settings/guest.json
-trans.th = public/language/th/admin/settings/guest.json
-trans.en@pirate = public/language/en-x-pirate/admin/settings/guest.json
-trans.it = public/language/it/admin/settings/guest.json
-trans.lv = public/language/lv/admin/settings/guest.json
-trans.pt_BR = public/language/pt-BR/admin/settings/guest.json
-trans.sk = public/language/sk/admin/settings/guest.json
-trans.de = public/language/de/admin/settings/guest.json
-trans.es = public/language/es/admin/settings/guest.json
-trans.hr = public/language/hr/admin/settings/guest.json
-trans.pt_PT = public/language/pt-PT/admin/settings/guest.json
-trans.rw = public/language/rw/admin/settings/guest.json
-trans.sq_AL = public/language/sq-AL/admin/settings/guest.json
-trans.el = public/language/el/admin/settings/guest.json
-trans.tr = public/language/tr/admin/settings/guest.json
-trans.zh_CN = public/language/zh-CN/admin/settings/guest.json
-trans.bg = public/language/bg/admin/settings/guest.json
-trans.fi = public/language/fi/admin/settings/guest.json
-trans.hu = public/language/hu/admin/settings/guest.json
-trans.ja = public/language/ja/admin/settings/guest.json
-trans.nb = public/language/nb/admin/settings/guest.json
-trans.pl = public/language/pl/admin/settings/guest.json
-trans.sl = public/language/sl/admin/settings/guest.json
-trans.vi = public/language/vi/admin/settings/guest.json
-trans.bn = public/language/bn/admin/settings/guest.json
-trans.fa_IR = public/language/fa-IR/admin/settings/guest.json
-trans.fr = public/language/fr/admin/settings/guest.json
-trans.hy = public/language/hy/admin/settings/guest.json
-trans.ro = public/language/ro/admin/settings/guest.json
-trans.et = public/language/et/admin/settings/guest.json
-trans.gl = public/language/gl/admin/settings/guest.json
-trans.sv = public/language/sv/admin/settings/guest.json
-trans.uk = public/language/uk/admin/settings/guest.json
-trans.zh_TW = public/language/zh-TW/admin/settings/guest.json
-trans.ar = public/language/ar/admin/settings/guest.json
-trans.he = public/language/he/admin/settings/guest.json
-trans.id = public/language/id/admin/settings/guest.json
-trans.ko = public/language/ko/admin/settings/guest.json
-
-[o:nodebb:p:nodebb:r:admin-settings-homepage]
-file_filter = public/language//admin/settings/homepage.json
-source_file = public/language/en-GB/admin/settings/homepage.json
-source_lang = en_GB
-type = KEYVALUEJSON
-trans.nb = public/language/nb/admin/settings/homepage.json
-trans.tr = public/language/tr/admin/settings/homepage.json
-trans.vi = public/language/vi/admin/settings/homepage.json
-trans.et = public/language/et/admin/settings/homepage.json
-trans.fi = public/language/fi/admin/settings/homepage.json
-trans.hy = public/language/hy/admin/settings/homepage.json
-trans.ru = public/language/ru/admin/settings/homepage.json
-trans.sr = public/language/sr/admin/settings/homepage.json
-trans.es = public/language/es/admin/settings/homepage.json
-trans.id = public/language/id/admin/settings/homepage.json
-trans.lt = public/language/lt/admin/settings/homepage.json
-trans.sk = public/language/sk/admin/settings/homepage.json
-trans.sq_AL = public/language/sq-AL/admin/settings/homepage.json
-trans.th = public/language/th/admin/settings/homepage.json
-trans.en_US = public/language/en-US/admin/settings/homepage.json
-trans.lv = public/language/lv/admin/settings/homepage.json
-trans.pt_PT = public/language/pt-PT/admin/settings/homepage.json
-trans.sc = public/language/sc/admin/settings/homepage.json
-trans.fa_IR = public/language/fa-IR/admin/settings/homepage.json
-trans.he = public/language/he/admin/settings/homepage.json
-trans.ms = public/language/ms/admin/settings/homepage.json
-trans.cs = public/language/cs/admin/settings/homepage.json
-trans.el = public/language/el/admin/settings/homepage.json
-trans.en@pirate = public/language/en-x-pirate/admin/settings/homepage.json
-trans.gl = public/language/gl/admin/settings/homepage.json
-trans.ko = public/language/ko/admin/settings/homepage.json
-trans.ar = public/language/ar/admin/settings/homepage.json
-trans.bg = public/language/bg/admin/settings/homepage.json
-trans.bn = public/language/bn/admin/settings/homepage.json
-trans.rw = public/language/rw/admin/settings/homepage.json
-trans.zh_CN = public/language/zh-CN/admin/settings/homepage.json
-trans.hr = public/language/hr/admin/settings/homepage.json
-trans.it = public/language/it/admin/settings/homepage.json
-trans.ja = public/language/ja/admin/settings/homepage.json
-trans.nl = public/language/nl/admin/settings/homepage.json
-trans.ro = public/language/ro/admin/settings/homepage.json
-trans.da = public/language/da/admin/settings/homepage.json
-trans.de = public/language/de/admin/settings/homepage.json
-trans.fr = public/language/fr/admin/settings/homepage.json
-trans.sv = public/language/sv/admin/settings/homepage.json
-trans.hu = public/language/hu/admin/settings/homepage.json
-trans.pt_BR = public/language/pt-BR/admin/settings/homepage.json
-trans.sl = public/language/sl/admin/settings/homepage.json
-trans.pl = public/language/pl/admin/settings/homepage.json
-trans.uk = public/language/uk/admin/settings/homepage.json
-trans.zh_TW = public/language/zh-TW/admin/settings/homepage.json
-
-[o:nodebb:p:nodebb:r:admin-settings-languages]
-file_filter = public/language//admin/settings/languages.json
-source_file = public/language/en-GB/admin/settings/languages.json
-source_lang = en_GB
-type = KEYVALUEJSON
-trans.en@pirate = public/language/en-x-pirate/admin/settings/languages.json
-trans.fa_IR = public/language/fa-IR/admin/settings/languages.json
-trans.gl = public/language/gl/admin/settings/languages.json
-trans.ro = public/language/ro/admin/settings/languages.json
-trans.th = public/language/th/admin/settings/languages.json
-trans.hr = public/language/hr/admin/settings/languages.json
-trans.hy = public/language/hy/admin/settings/languages.json
-trans.sc = public/language/sc/admin/settings/languages.json
-trans.vi = public/language/vi/admin/settings/languages.json
-trans.tr = public/language/tr/admin/settings/languages.json
-trans.cs = public/language/cs/admin/settings/languages.json
-trans.et = public/language/et/admin/settings/languages.json
-trans.lv = public/language/lv/admin/settings/languages.json
-trans.pl = public/language/pl/admin/settings/languages.json
-trans.sr = public/language/sr/admin/settings/languages.json
-trans.sv = public/language/sv/admin/settings/languages.json
-trans.hu = public/language/hu/admin/settings/languages.json
-trans.it = public/language/it/admin/settings/languages.json
-trans.ja = public/language/ja/admin/settings/languages.json
-trans.sl = public/language/sl/admin/settings/languages.json
-trans.zh_TW = public/language/zh-TW/admin/settings/languages.json
-trans.da = public/language/da/admin/settings/languages.json
-trans.fr = public/language/fr/admin/settings/languages.json
-trans.he = public/language/he/admin/settings/languages.json
-trans.id = public/language/id/admin/settings/languages.json
-trans.sq_AL = public/language/sq-AL/admin/settings/languages.json
-trans.uk = public/language/uk/admin/settings/languages.json
-trans.bn = public/language/bn/admin/settings/languages.json
-trans.fi = public/language/fi/admin/settings/languages.json
-trans.ko = public/language/ko/admin/settings/languages.json
-trans.pt_BR = public/language/pt-BR/admin/settings/languages.json
-trans.sk = public/language/sk/admin/settings/languages.json
-trans.pt_PT = public/language/pt-PT/admin/settings/languages.json
-trans.ru = public/language/ru/admin/settings/languages.json
-trans.ar = public/language/ar/admin/settings/languages.json
-trans.bg = public/language/bg/admin/settings/languages.json
-trans.de = public/language/de/admin/settings/languages.json
-trans.el = public/language/el/admin/settings/languages.json
-trans.lt = public/language/lt/admin/settings/languages.json
-trans.nl = public/language/nl/admin/settings/languages.json
-trans.zh_CN = public/language/zh-CN/admin/settings/languages.json
-trans.en_US = public/language/en-US/admin/settings/languages.json
-trans.es = public/language/es/admin/settings/languages.json
-trans.ms = public/language/ms/admin/settings/languages.json
-trans.nb = public/language/nb/admin/settings/languages.json
-trans.rw = public/language/rw/admin/settings/languages.json
-
[o:nodebb:p:nodebb:r:admin-settings-navigation]
file_filter = public/language//admin/settings/navigation.json
source_file = public/language/en-GB/admin/settings/navigation.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.uk = public/language/uk/admin/settings/navigation.json
+trans.ar = public/language/ar/admin/settings/navigation.json
+trans.az = public/language/az/admin/settings/navigation.json
+trans.bg = public/language/bg/admin/settings/navigation.json
trans.bn = public/language/bn/admin/settings/navigation.json
-trans.es = public/language/es/admin/settings/navigation.json
-trans.fa_IR = public/language/fa-IR/admin/settings/navigation.json
-trans.nl = public/language/nl/admin/settings/navigation.json
-trans.pt_BR = public/language/pt-BR/admin/settings/navigation.json
-trans.rw = public/language/rw/admin/settings/navigation.json
-trans.zh_CN = public/language/zh-CN/admin/settings/navigation.json
+trans.cs = public/language/cs/admin/settings/navigation.json
trans.da = public/language/da/admin/settings/navigation.json
-trans.it = public/language/it/admin/settings/navigation.json
-trans.ms = public/language/ms/admin/settings/navigation.json
-trans.pt_PT = public/language/pt-PT/admin/settings/navigation.json
-trans.vi = public/language/vi/admin/settings/navigation.json
+trans.de = public/language/de/admin/settings/navigation.json
+trans.el = public/language/el/admin/settings/navigation.json
trans.en_US = public/language/en-US/admin/settings/navigation.json
+trans.en@pirate = public/language/en-x-pirate/admin/settings/navigation.json
+trans.es = public/language/es/admin/settings/navigation.json
+trans.et = public/language/et/admin/settings/navigation.json
+trans.fa_IR = public/language/fa-IR/admin/settings/navigation.json
+trans.fi = public/language/fi/admin/settings/navigation.json
trans.fr = public/language/fr/admin/settings/navigation.json
+trans.gl = public/language/gl/admin/settings/navigation.json
+trans.he = public/language/he/admin/settings/navigation.json
+trans.hr = public/language/hr/admin/settings/navigation.json
trans.hu = public/language/hu/admin/settings/navigation.json
trans.hy = public/language/hy/admin/settings/navigation.json
-trans.ja = public/language/ja/admin/settings/navigation.json
-trans.lt = public/language/lt/admin/settings/navigation.json
-trans.ru = public/language/ru/admin/settings/navigation.json
-trans.sk = public/language/sk/admin/settings/navigation.json
-trans.sr = public/language/sr/admin/settings/navigation.json
-trans.de = public/language/de/admin/settings/navigation.json
-trans.et = public/language/et/admin/settings/navigation.json
-trans.fi = public/language/fi/admin/settings/navigation.json
-trans.gl = public/language/gl/admin/settings/navigation.json
-trans.sc = public/language/sc/admin/settings/navigation.json
-trans.sl = public/language/sl/admin/settings/navigation.json
-trans.th = public/language/th/admin/settings/navigation.json
-trans.bg = public/language/bg/admin/settings/navigation.json
-trans.cs = public/language/cs/admin/settings/navigation.json
-trans.en@pirate = public/language/en-x-pirate/admin/settings/navigation.json
-trans.ro = public/language/ro/admin/settings/navigation.json
-trans.sq_AL = public/language/sq-AL/admin/settings/navigation.json
-trans.tr = public/language/tr/admin/settings/navigation.json
-trans.zh_TW = public/language/zh-TW/admin/settings/navigation.json
-trans.ar = public/language/ar/admin/settings/navigation.json
-trans.hr = public/language/hr/admin/settings/navigation.json
trans.id = public/language/id/admin/settings/navigation.json
+trans.it = public/language/it/admin/settings/navigation.json
+trans.ja = public/language/ja/admin/settings/navigation.json
trans.ko = public/language/ko/admin/settings/navigation.json
-trans.nb = public/language/nb/admin/settings/navigation.json
-trans.pl = public/language/pl/admin/settings/navigation.json
-trans.sv = public/language/sv/admin/settings/navigation.json
-trans.el = public/language/el/admin/settings/navigation.json
-trans.he = public/language/he/admin/settings/navigation.json
+trans.lt = public/language/lt/admin/settings/navigation.json
trans.lv = public/language/lv/admin/settings/navigation.json
+trans.ms = public/language/ms/admin/settings/navigation.json
+trans.nb = public/language/nb/admin/settings/navigation.json
+trans.nl = public/language/nl/admin/settings/navigation.json
+trans.nn_NO = public/language/nn-NO/admin/settings/navigation.json
+trans.pl = public/language/pl/admin/settings/navigation.json
+trans.pt_BR = public/language/pt-BR/admin/settings/navigation.json
+trans.pt_PT = public/language/pt-PT/admin/settings/navigation.json
+trans.ro = public/language/ro/admin/settings/navigation.json
+trans.ru = public/language/ru/admin/settings/navigation.json
+trans.rw = public/language/rw/admin/settings/navigation.json
+trans.sc = public/language/sc/admin/settings/navigation.json
+trans.sk = public/language/sk/admin/settings/navigation.json
+trans.sl = public/language/sl/admin/settings/navigation.json
+trans.sq_AL = public/language/sq-AL/admin/settings/navigation.json
+trans.sr = public/language/sr/admin/settings/navigation.json
+trans.sv = public/language/sv/admin/settings/navigation.json
+trans.th = public/language/th/admin/settings/navigation.json
+trans.tr = public/language/tr/admin/settings/navigation.json
+trans.uk = public/language/uk/admin/settings/navigation.json
+trans.ur = public/language/ur/admin/settings/navigation.json
+trans.vi = public/language/vi/admin/settings/navigation.json
+trans.zh_CN = public/language/zh-CN/admin/settings/navigation.json
+trans.zh_TW = public/language/zh-TW/admin/settings/navigation.json
[o:nodebb:p:nodebb:r:admin-settings-notifications]
file_filter = public/language//admin/settings/notifications.json
source_file = public/language/en-GB/admin/settings/notifications.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.zh_TW = public/language/zh-TW/admin/settings/notifications.json
-trans.fi = public/language/fi/admin/settings/notifications.json
-trans.id = public/language/id/admin/settings/notifications.json
-trans.pt_PT = public/language/pt-PT/admin/settings/notifications.json
-trans.rw = public/language/rw/admin/settings/notifications.json
trans.ar = public/language/ar/admin/settings/notifications.json
+trans.az = public/language/az/admin/settings/notifications.json
+trans.bg = public/language/bg/admin/settings/notifications.json
trans.bn = public/language/bn/admin/settings/notifications.json
+trans.cs = public/language/cs/admin/settings/notifications.json
+trans.da = public/language/da/admin/settings/notifications.json
+trans.de = public/language/de/admin/settings/notifications.json
trans.el = public/language/el/admin/settings/notifications.json
trans.en_US = public/language/en-US/admin/settings/notifications.json
+trans.en@pirate = public/language/en-x-pirate/admin/settings/notifications.json
+trans.es = public/language/es/admin/settings/notifications.json
+trans.et = public/language/et/admin/settings/notifications.json
+trans.fa_IR = public/language/fa-IR/admin/settings/notifications.json
+trans.fi = public/language/fi/admin/settings/notifications.json
+trans.fr = public/language/fr/admin/settings/notifications.json
+trans.gl = public/language/gl/admin/settings/notifications.json
+trans.he = public/language/he/admin/settings/notifications.json
+trans.hr = public/language/hr/admin/settings/notifications.json
+trans.hu = public/language/hu/admin/settings/notifications.json
+trans.hy = public/language/hy/admin/settings/notifications.json
+trans.id = public/language/id/admin/settings/notifications.json
+trans.it = public/language/it/admin/settings/notifications.json
+trans.ja = public/language/ja/admin/settings/notifications.json
+trans.ko = public/language/ko/admin/settings/notifications.json
+trans.lt = public/language/lt/admin/settings/notifications.json
+trans.lv = public/language/lv/admin/settings/notifications.json
+trans.ms = public/language/ms/admin/settings/notifications.json
+trans.nb = public/language/nb/admin/settings/notifications.json
+trans.nl = public/language/nl/admin/settings/notifications.json
+trans.nn_NO = public/language/nn-NO/admin/settings/notifications.json
+trans.pl = public/language/pl/admin/settings/notifications.json
+trans.pt_BR = public/language/pt-BR/admin/settings/notifications.json
+trans.pt_PT = public/language/pt-PT/admin/settings/notifications.json
+trans.ro = public/language/ro/admin/settings/notifications.json
+trans.ru = public/language/ru/admin/settings/notifications.json
+trans.rw = public/language/rw/admin/settings/notifications.json
+trans.sc = public/language/sc/admin/settings/notifications.json
trans.sk = public/language/sk/admin/settings/notifications.json
+trans.sl = public/language/sl/admin/settings/notifications.json
+trans.sq_AL = public/language/sq-AL/admin/settings/notifications.json
trans.sr = public/language/sr/admin/settings/notifications.json
trans.sv = public/language/sv/admin/settings/notifications.json
trans.th = public/language/th/admin/settings/notifications.json
-trans.cs = public/language/cs/admin/settings/notifications.json
-trans.it = public/language/it/admin/settings/notifications.json
-trans.ru = public/language/ru/admin/settings/notifications.json
-trans.sq_AL = public/language/sq-AL/admin/settings/notifications.json
-trans.vi = public/language/vi/admin/settings/notifications.json
-trans.fr = public/language/fr/admin/settings/notifications.json
-trans.hy = public/language/hy/admin/settings/notifications.json
-trans.sl = public/language/sl/admin/settings/notifications.json
-trans.uk = public/language/uk/admin/settings/notifications.json
-trans.ms = public/language/ms/admin/settings/notifications.json
-trans.nl = public/language/nl/admin/settings/notifications.json
-trans.ro = public/language/ro/admin/settings/notifications.json
-trans.sc = public/language/sc/admin/settings/notifications.json
-trans.en@pirate = public/language/en-x-pirate/admin/settings/notifications.json
-trans.gl = public/language/gl/admin/settings/notifications.json
-trans.he = public/language/he/admin/settings/notifications.json
-trans.hu = public/language/hu/admin/settings/notifications.json
trans.tr = public/language/tr/admin/settings/notifications.json
+trans.uk = public/language/uk/admin/settings/notifications.json
+trans.ur = public/language/ur/admin/settings/notifications.json
+trans.vi = public/language/vi/admin/settings/notifications.json
trans.zh_CN = public/language/zh-CN/admin/settings/notifications.json
-trans.ko = public/language/ko/admin/settings/notifications.json
-trans.lv = public/language/lv/admin/settings/notifications.json
-trans.nb = public/language/nb/admin/settings/notifications.json
-trans.pl = public/language/pl/admin/settings/notifications.json
-trans.bg = public/language/bg/admin/settings/notifications.json
-trans.da = public/language/da/admin/settings/notifications.json
-trans.de = public/language/de/admin/settings/notifications.json
-trans.hr = public/language/hr/admin/settings/notifications.json
-trans.pt_BR = public/language/pt-BR/admin/settings/notifications.json
-trans.et = public/language/et/admin/settings/notifications.json
-trans.lt = public/language/lt/admin/settings/notifications.json
-trans.es = public/language/es/admin/settings/notifications.json
-trans.fa_IR = public/language/fa-IR/admin/settings/notifications.json
-trans.ja = public/language/ja/admin/settings/notifications.json
+trans.zh_TW = public/language/zh-TW/admin/settings/notifications.json
[o:nodebb:p:nodebb:r:admin-settings-pagination]
file_filter = public/language//admin/settings/pagination.json
source_file = public/language/en-GB/admin/settings/pagination.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.sq_AL = public/language/sq-AL/admin/settings/pagination.json
-trans.th = public/language/th/admin/settings/pagination.json
+trans.ar = public/language/ar/admin/settings/pagination.json
+trans.az = public/language/az/admin/settings/pagination.json
+trans.bg = public/language/bg/admin/settings/pagination.json
+trans.bn = public/language/bn/admin/settings/pagination.json
+trans.cs = public/language/cs/admin/settings/pagination.json
+trans.da = public/language/da/admin/settings/pagination.json
trans.de = public/language/de/admin/settings/pagination.json
+trans.el = public/language/el/admin/settings/pagination.json
+trans.en_US = public/language/en-US/admin/settings/pagination.json
+trans.en@pirate = public/language/en-x-pirate/admin/settings/pagination.json
+trans.es = public/language/es/admin/settings/pagination.json
+trans.et = public/language/et/admin/settings/pagination.json
+trans.fa_IR = public/language/fa-IR/admin/settings/pagination.json
+trans.fi = public/language/fi/admin/settings/pagination.json
+trans.fr = public/language/fr/admin/settings/pagination.json
+trans.gl = public/language/gl/admin/settings/pagination.json
+trans.he = public/language/he/admin/settings/pagination.json
+trans.hr = public/language/hr/admin/settings/pagination.json
+trans.hu = public/language/hu/admin/settings/pagination.json
+trans.hy = public/language/hy/admin/settings/pagination.json
+trans.id = public/language/id/admin/settings/pagination.json
+trans.it = public/language/it/admin/settings/pagination.json
+trans.ja = public/language/ja/admin/settings/pagination.json
+trans.ko = public/language/ko/admin/settings/pagination.json
+trans.lt = public/language/lt/admin/settings/pagination.json
+trans.lv = public/language/lv/admin/settings/pagination.json
+trans.ms = public/language/ms/admin/settings/pagination.json
+trans.nb = public/language/nb/admin/settings/pagination.json
+trans.nl = public/language/nl/admin/settings/pagination.json
+trans.nn_NO = public/language/nn-NO/admin/settings/pagination.json
+trans.pl = public/language/pl/admin/settings/pagination.json
+trans.pt_BR = public/language/pt-BR/admin/settings/pagination.json
+trans.pt_PT = public/language/pt-PT/admin/settings/pagination.json
+trans.ro = public/language/ro/admin/settings/pagination.json
trans.ru = public/language/ru/admin/settings/pagination.json
trans.rw = public/language/rw/admin/settings/pagination.json
trans.sc = public/language/sc/admin/settings/pagination.json
trans.sk = public/language/sk/admin/settings/pagination.json
-trans.lv = public/language/lv/admin/settings/pagination.json
-trans.ar = public/language/ar/admin/settings/pagination.json
-trans.el = public/language/el/admin/settings/pagination.json
-trans.en_US = public/language/en-US/admin/settings/pagination.json
-trans.et = public/language/et/admin/settings/pagination.json
-trans.fr = public/language/fr/admin/settings/pagination.json
-trans.bg = public/language/bg/admin/settings/pagination.json
-trans.fi = public/language/fi/admin/settings/pagination.json
-trans.ja = public/language/ja/admin/settings/pagination.json
-trans.ms = public/language/ms/admin/settings/pagination.json
-trans.uk = public/language/uk/admin/settings/pagination.json
-trans.en@pirate = public/language/en-x-pirate/admin/settings/pagination.json
-trans.hu = public/language/hu/admin/settings/pagination.json
-trans.ko = public/language/ko/admin/settings/pagination.json
-trans.lt = public/language/lt/admin/settings/pagination.json
-trans.nl = public/language/nl/admin/settings/pagination.json
-trans.hr = public/language/hr/admin/settings/pagination.json
-trans.pl = public/language/pl/admin/settings/pagination.json
-trans.pt_BR = public/language/pt-BR/admin/settings/pagination.json
-trans.cs = public/language/cs/admin/settings/pagination.json
-trans.da = public/language/da/admin/settings/pagination.json
-trans.es = public/language/es/admin/settings/pagination.json
-trans.gl = public/language/gl/admin/settings/pagination.json
-trans.he = public/language/he/admin/settings/pagination.json
-trans.pt_PT = public/language/pt-PT/admin/settings/pagination.json
-trans.ro = public/language/ro/admin/settings/pagination.json
-trans.id = public/language/id/admin/settings/pagination.json
-trans.tr = public/language/tr/admin/settings/pagination.json
-trans.vi = public/language/vi/admin/settings/pagination.json
-trans.fa_IR = public/language/fa-IR/admin/settings/pagination.json
-trans.it = public/language/it/admin/settings/pagination.json
trans.sl = public/language/sl/admin/settings/pagination.json
-trans.zh_CN = public/language/zh-CN/admin/settings/pagination.json
-trans.zh_TW = public/language/zh-TW/admin/settings/pagination.json
-trans.bn = public/language/bn/admin/settings/pagination.json
-trans.hy = public/language/hy/admin/settings/pagination.json
-trans.nb = public/language/nb/admin/settings/pagination.json
+trans.sq_AL = public/language/sq-AL/admin/settings/pagination.json
trans.sr = public/language/sr/admin/settings/pagination.json
trans.sv = public/language/sv/admin/settings/pagination.json
+trans.th = public/language/th/admin/settings/pagination.json
+trans.tr = public/language/tr/admin/settings/pagination.json
+trans.uk = public/language/uk/admin/settings/pagination.json
+trans.ur = public/language/ur/admin/settings/pagination.json
+trans.vi = public/language/vi/admin/settings/pagination.json
+trans.zh_CN = public/language/zh-CN/admin/settings/pagination.json
+trans.zh_TW = public/language/zh-TW/admin/settings/pagination.json
[o:nodebb:p:nodebb:r:admin-settings-post]
file_filter = public/language//admin/settings/post.json
source_file = public/language/en-GB/admin/settings/post.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.id = public/language/id/admin/settings/post.json
+trans.ar = public/language/ar/admin/settings/post.json
+trans.az = public/language/az/admin/settings/post.json
+trans.bg = public/language/bg/admin/settings/post.json
trans.bn = public/language/bn/admin/settings/post.json
+trans.cs = public/language/cs/admin/settings/post.json
trans.da = public/language/da/admin/settings/post.json
trans.de = public/language/de/admin/settings/post.json
-trans.en_US = public/language/en-US/admin/settings/post.json
-trans.ms = public/language/ms/admin/settings/post.json
-trans.ro = public/language/ro/admin/settings/post.json
-trans.zh_TW = public/language/zh-TW/admin/settings/post.json
-trans.cs = public/language/cs/admin/settings/post.json
-trans.he = public/language/he/admin/settings/post.json
-trans.ja = public/language/ja/admin/settings/post.json
-trans.ko = public/language/ko/admin/settings/post.json
-trans.hr = public/language/hr/admin/settings/post.json
-trans.sq_AL = public/language/sq-AL/admin/settings/post.json
-trans.lv = public/language/lv/admin/settings/post.json
-trans.nl = public/language/nl/admin/settings/post.json
-trans.pt_PT = public/language/pt-PT/admin/settings/post.json
-trans.sr = public/language/sr/admin/settings/post.json
-trans.en@pirate = public/language/en-x-pirate/admin/settings/post.json
-trans.et = public/language/et/admin/settings/post.json
-trans.hu = public/language/hu/admin/settings/post.json
-trans.it = public/language/it/admin/settings/post.json
-trans.th = public/language/th/admin/settings/post.json
-trans.gl = public/language/gl/admin/settings/post.json
-trans.nb = public/language/nb/admin/settings/post.json
-trans.sc = public/language/sc/admin/settings/post.json
-trans.zh_CN = public/language/zh-CN/admin/settings/post.json
-trans.rw = public/language/rw/admin/settings/post.json
-trans.sv = public/language/sv/admin/settings/post.json
-trans.vi = public/language/vi/admin/settings/post.json
-trans.ar = public/language/ar/admin/settings/post.json
trans.el = public/language/el/admin/settings/post.json
+trans.en_US = public/language/en-US/admin/settings/post.json
+trans.en@pirate = public/language/en-x-pirate/admin/settings/post.json
+trans.es = public/language/es/admin/settings/post.json
+trans.et = public/language/et/admin/settings/post.json
trans.fa_IR = public/language/fa-IR/admin/settings/post.json
trans.fi = public/language/fi/admin/settings/post.json
-trans.ru = public/language/ru/admin/settings/post.json
-trans.bg = public/language/bg/admin/settings/post.json
-trans.es = public/language/es/admin/settings/post.json
+trans.fr = public/language/fr/admin/settings/post.json
+trans.gl = public/language/gl/admin/settings/post.json
+trans.he = public/language/he/admin/settings/post.json
+trans.hr = public/language/hr/admin/settings/post.json
+trans.hu = public/language/hu/admin/settings/post.json
trans.hy = public/language/hy/admin/settings/post.json
+trans.id = public/language/id/admin/settings/post.json
+trans.it = public/language/it/admin/settings/post.json
+trans.ja = public/language/ja/admin/settings/post.json
+trans.ko = public/language/ko/admin/settings/post.json
+trans.lt = public/language/lt/admin/settings/post.json
+trans.lv = public/language/lv/admin/settings/post.json
+trans.ms = public/language/ms/admin/settings/post.json
+trans.nb = public/language/nb/admin/settings/post.json
+trans.nl = public/language/nl/admin/settings/post.json
+trans.nn_NO = public/language/nn-NO/admin/settings/post.json
+trans.pl = public/language/pl/admin/settings/post.json
trans.pt_BR = public/language/pt-BR/admin/settings/post.json
+trans.pt_PT = public/language/pt-PT/admin/settings/post.json
+trans.ro = public/language/ro/admin/settings/post.json
+trans.ru = public/language/ru/admin/settings/post.json
+trans.rw = public/language/rw/admin/settings/post.json
+trans.sc = public/language/sc/admin/settings/post.json
+trans.sk = public/language/sk/admin/settings/post.json
trans.sl = public/language/sl/admin/settings/post.json
+trans.sq_AL = public/language/sq-AL/admin/settings/post.json
+trans.sr = public/language/sr/admin/settings/post.json
+trans.sv = public/language/sv/admin/settings/post.json
+trans.th = public/language/th/admin/settings/post.json
trans.tr = public/language/tr/admin/settings/post.json
trans.uk = public/language/uk/admin/settings/post.json
-trans.fr = public/language/fr/admin/settings/post.json
-trans.lt = public/language/lt/admin/settings/post.json
-trans.pl = public/language/pl/admin/settings/post.json
-trans.sk = public/language/sk/admin/settings/post.json
+trans.ur = public/language/ur/admin/settings/post.json
+trans.vi = public/language/vi/admin/settings/post.json
+trans.zh_CN = public/language/zh-CN/admin/settings/post.json
+trans.zh_TW = public/language/zh-TW/admin/settings/post.json
[o:nodebb:p:nodebb:r:admin-settings-reputation]
file_filter = public/language//admin/settings/reputation.json
source_file = public/language/en-GB/admin/settings/reputation.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.fi = public/language/fi/admin/settings/reputation.json
-trans.ja = public/language/ja/admin/settings/reputation.json
-trans.lt = public/language/lt/admin/settings/reputation.json
-trans.pl = public/language/pl/admin/settings/reputation.json
-trans.ro = public/language/ro/admin/settings/reputation.json
-trans.bg = public/language/bg/admin/settings/reputation.json
-trans.en@pirate = public/language/en-x-pirate/admin/settings/reputation.json
-trans.fa_IR = public/language/fa-IR/admin/settings/reputation.json
-trans.sl = public/language/sl/admin/settings/reputation.json
-trans.sv = public/language/sv/admin/settings/reputation.json
-trans.uk = public/language/uk/admin/settings/reputation.json
-trans.sr = public/language/sr/admin/settings/reputation.json
-trans.zh_CN = public/language/zh-CN/admin/settings/reputation.json
trans.ar = public/language/ar/admin/settings/reputation.json
-trans.el = public/language/el/admin/settings/reputation.json
-trans.es = public/language/es/admin/settings/reputation.json
-trans.sc = public/language/sc/admin/settings/reputation.json
-trans.hr = public/language/hr/admin/settings/reputation.json
-trans.ko = public/language/ko/admin/settings/reputation.json
-trans.nb = public/language/nb/admin/settings/reputation.json
+trans.az = public/language/az/admin/settings/reputation.json
+trans.bg = public/language/bg/admin/settings/reputation.json
trans.bn = public/language/bn/admin/settings/reputation.json
-trans.de = public/language/de/admin/settings/reputation.json
-trans.et = public/language/et/admin/settings/reputation.json
-trans.rw = public/language/rw/admin/settings/reputation.json
-trans.th = public/language/th/admin/settings/reputation.json
-trans.zh_TW = public/language/zh-TW/admin/settings/reputation.json
-trans.fr = public/language/fr/admin/settings/reputation.json
-trans.it = public/language/it/admin/settings/reputation.json
-trans.ru = public/language/ru/admin/settings/reputation.json
-trans.pt_PT = public/language/pt-PT/admin/settings/reputation.json
-trans.sk = public/language/sk/admin/settings/reputation.json
-trans.id = public/language/id/admin/settings/reputation.json
-trans.ms = public/language/ms/admin/settings/reputation.json
-trans.nl = public/language/nl/admin/settings/reputation.json
-trans.he = public/language/he/admin/settings/reputation.json
-trans.sq_AL = public/language/sq-AL/admin/settings/reputation.json
-trans.tr = public/language/tr/admin/settings/reputation.json
trans.cs = public/language/cs/admin/settings/reputation.json
trans.da = public/language/da/admin/settings/reputation.json
+trans.de = public/language/de/admin/settings/reputation.json
+trans.el = public/language/el/admin/settings/reputation.json
trans.en_US = public/language/en-US/admin/settings/reputation.json
-trans.lv = public/language/lv/admin/settings/reputation.json
-trans.pt_BR = public/language/pt-BR/admin/settings/reputation.json
-trans.vi = public/language/vi/admin/settings/reputation.json
+trans.en@pirate = public/language/en-x-pirate/admin/settings/reputation.json
+trans.es = public/language/es/admin/settings/reputation.json
+trans.et = public/language/et/admin/settings/reputation.json
+trans.fa_IR = public/language/fa-IR/admin/settings/reputation.json
+trans.fi = public/language/fi/admin/settings/reputation.json
+trans.fr = public/language/fr/admin/settings/reputation.json
trans.gl = public/language/gl/admin/settings/reputation.json
+trans.he = public/language/he/admin/settings/reputation.json
+trans.hr = public/language/hr/admin/settings/reputation.json
trans.hu = public/language/hu/admin/settings/reputation.json
trans.hy = public/language/hy/admin/settings/reputation.json
-
-[o:nodebb:p:nodebb:r:admin-settings-social]
-file_filter = public/language//admin/settings/social.json
-source_file = public/language/en-GB/admin/settings/social.json
-source_lang = en_GB
-type = KEYVALUEJSON
-trans.nl = public/language/nl/admin/settings/social.json
-trans.sc = public/language/sc/admin/settings/social.json
-trans.sv = public/language/sv/admin/settings/social.json
-trans.rw = public/language/rw/admin/settings/social.json
-trans.bn = public/language/bn/admin/settings/social.json
-trans.hr = public/language/hr/admin/settings/social.json
-trans.id = public/language/id/admin/settings/social.json
-trans.pt_PT = public/language/pt-PT/admin/settings/social.json
-trans.de = public/language/de/admin/settings/social.json
-trans.hu = public/language/hu/admin/settings/social.json
-trans.pt_BR = public/language/pt-BR/admin/settings/social.json
-trans.ja = public/language/ja/admin/settings/social.json
-trans.sq_AL = public/language/sq-AL/admin/settings/social.json
-trans.zh_TW = public/language/zh-TW/admin/settings/social.json
-trans.cs = public/language/cs/admin/settings/social.json
-trans.en_US = public/language/en-US/admin/settings/social.json
-trans.fi = public/language/fi/admin/settings/social.json
-trans.nb = public/language/nb/admin/settings/social.json
-trans.pl = public/language/pl/admin/settings/social.json
-trans.th = public/language/th/admin/settings/social.json
-trans.bg = public/language/bg/admin/settings/social.json
-trans.lt = public/language/lt/admin/settings/social.json
-trans.lv = public/language/lv/admin/settings/social.json
-trans.ko = public/language/ko/admin/settings/social.json
-trans.es = public/language/es/admin/settings/social.json
-trans.fr = public/language/fr/admin/settings/social.json
-trans.he = public/language/he/admin/settings/social.json
-trans.fa_IR = public/language/fa-IR/admin/settings/social.json
-trans.hy = public/language/hy/admin/settings/social.json
-trans.ms = public/language/ms/admin/settings/social.json
-trans.ru = public/language/ru/admin/settings/social.json
-trans.sk = public/language/sk/admin/settings/social.json
-trans.ar = public/language/ar/admin/settings/social.json
-trans.el = public/language/el/admin/settings/social.json
-trans.en@pirate = public/language/en-x-pirate/admin/settings/social.json
-trans.uk = public/language/uk/admin/settings/social.json
-trans.sl = public/language/sl/admin/settings/social.json
-trans.sr = public/language/sr/admin/settings/social.json
-trans.tr = public/language/tr/admin/settings/social.json
-trans.it = public/language/it/admin/settings/social.json
-trans.ro = public/language/ro/admin/settings/social.json
-trans.vi = public/language/vi/admin/settings/social.json
-trans.zh_CN = public/language/zh-CN/admin/settings/social.json
-trans.da = public/language/da/admin/settings/social.json
-trans.et = public/language/et/admin/settings/social.json
-trans.gl = public/language/gl/admin/settings/social.json
+trans.id = public/language/id/admin/settings/reputation.json
+trans.it = public/language/it/admin/settings/reputation.json
+trans.ja = public/language/ja/admin/settings/reputation.json
+trans.ko = public/language/ko/admin/settings/reputation.json
+trans.lt = public/language/lt/admin/settings/reputation.json
+trans.lv = public/language/lv/admin/settings/reputation.json
+trans.ms = public/language/ms/admin/settings/reputation.json
+trans.nb = public/language/nb/admin/settings/reputation.json
+trans.nl = public/language/nl/admin/settings/reputation.json
+trans.nn_NO = public/language/nn-NO/admin/settings/reputation.json
+trans.pl = public/language/pl/admin/settings/reputation.json
+trans.pt_BR = public/language/pt-BR/admin/settings/reputation.json
+trans.pt_PT = public/language/pt-PT/admin/settings/reputation.json
+trans.ro = public/language/ro/admin/settings/reputation.json
+trans.ru = public/language/ru/admin/settings/reputation.json
+trans.rw = public/language/rw/admin/settings/reputation.json
+trans.sc = public/language/sc/admin/settings/reputation.json
+trans.sk = public/language/sk/admin/settings/reputation.json
+trans.sl = public/language/sl/admin/settings/reputation.json
+trans.sq_AL = public/language/sq-AL/admin/settings/reputation.json
+trans.sr = public/language/sr/admin/settings/reputation.json
+trans.sv = public/language/sv/admin/settings/reputation.json
+trans.th = public/language/th/admin/settings/reputation.json
+trans.tr = public/language/tr/admin/settings/reputation.json
+trans.uk = public/language/uk/admin/settings/reputation.json
+trans.ur = public/language/ur/admin/settings/reputation.json
+trans.vi = public/language/vi/admin/settings/reputation.json
+trans.zh_CN = public/language/zh-CN/admin/settings/reputation.json
+trans.zh_TW = public/language/zh-TW/admin/settings/reputation.json
[o:nodebb:p:nodebb:r:admin-settings-sockets]
file_filter = public/language//admin/settings/sockets.json
source_file = public/language/en-GB/admin/settings/sockets.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.uk = public/language/uk/admin/settings/sockets.json
-trans.en_US = public/language/en-US/admin/settings/sockets.json
-trans.gl = public/language/gl/admin/settings/sockets.json
-trans.ja = public/language/ja/admin/settings/sockets.json
-trans.pt_BR = public/language/pt-BR/admin/settings/sockets.json
-trans.sc = public/language/sc/admin/settings/sockets.json
-trans.tr = public/language/tr/admin/settings/sockets.json
-trans.da = public/language/da/admin/settings/sockets.json
-trans.lv = public/language/lv/admin/settings/sockets.json
-trans.sk = public/language/sk/admin/settings/sockets.json
-trans.sr = public/language/sr/admin/settings/sockets.json
-trans.vi = public/language/vi/admin/settings/sockets.json
trans.ar = public/language/ar/admin/settings/sockets.json
-trans.cs = public/language/cs/admin/settings/sockets.json
-trans.de = public/language/de/admin/settings/sockets.json
-trans.hy = public/language/hy/admin/settings/sockets.json
-trans.id = public/language/id/admin/settings/sockets.json
-trans.rw = public/language/rw/admin/settings/sockets.json
-trans.en@pirate = public/language/en-x-pirate/admin/settings/sockets.json
-trans.fi = public/language/fi/admin/settings/sockets.json
-trans.it = public/language/it/admin/settings/sockets.json
-trans.ro = public/language/ro/admin/settings/sockets.json
-trans.nb = public/language/nb/admin/settings/sockets.json
-trans.sq_AL = public/language/sq-AL/admin/settings/sockets.json
+trans.az = public/language/az/admin/settings/sockets.json
trans.bg = public/language/bg/admin/settings/sockets.json
trans.bn = public/language/bn/admin/settings/sockets.json
-trans.es = public/language/es/admin/settings/sockets.json
-trans.fr = public/language/fr/admin/settings/sockets.json
-trans.hr = public/language/hr/admin/settings/sockets.json
-trans.ko = public/language/ko/admin/settings/sockets.json
-trans.zh_TW = public/language/zh-TW/admin/settings/sockets.json
+trans.cs = public/language/cs/admin/settings/sockets.json
+trans.da = public/language/da/admin/settings/sockets.json
+trans.de = public/language/de/admin/settings/sockets.json
trans.el = public/language/el/admin/settings/sockets.json
-trans.he = public/language/he/admin/settings/sockets.json
-trans.ms = public/language/ms/admin/settings/sockets.json
-trans.sv = public/language/sv/admin/settings/sockets.json
+trans.en_US = public/language/en-US/admin/settings/sockets.json
+trans.en@pirate = public/language/en-x-pirate/admin/settings/sockets.json
+trans.es = public/language/es/admin/settings/sockets.json
trans.et = public/language/et/admin/settings/sockets.json
-trans.pl = public/language/pl/admin/settings/sockets.json
-trans.ru = public/language/ru/admin/settings/sockets.json
-trans.zh_CN = public/language/zh-CN/admin/settings/sockets.json
-trans.th = public/language/th/admin/settings/sockets.json
trans.fa_IR = public/language/fa-IR/admin/settings/sockets.json
+trans.fi = public/language/fi/admin/settings/sockets.json
+trans.fr = public/language/fr/admin/settings/sockets.json
+trans.gl = public/language/gl/admin/settings/sockets.json
+trans.he = public/language/he/admin/settings/sockets.json
+trans.hr = public/language/hr/admin/settings/sockets.json
trans.hu = public/language/hu/admin/settings/sockets.json
+trans.hy = public/language/hy/admin/settings/sockets.json
+trans.id = public/language/id/admin/settings/sockets.json
+trans.it = public/language/it/admin/settings/sockets.json
+trans.ja = public/language/ja/admin/settings/sockets.json
+trans.ko = public/language/ko/admin/settings/sockets.json
trans.lt = public/language/lt/admin/settings/sockets.json
+trans.lv = public/language/lv/admin/settings/sockets.json
+trans.ms = public/language/ms/admin/settings/sockets.json
+trans.nb = public/language/nb/admin/settings/sockets.json
trans.nl = public/language/nl/admin/settings/sockets.json
+trans.nn_NO = public/language/nn-NO/admin/settings/sockets.json
+trans.pl = public/language/pl/admin/settings/sockets.json
+trans.pt_BR = public/language/pt-BR/admin/settings/sockets.json
trans.pt_PT = public/language/pt-PT/admin/settings/sockets.json
+trans.ro = public/language/ro/admin/settings/sockets.json
+trans.ru = public/language/ru/admin/settings/sockets.json
+trans.rw = public/language/rw/admin/settings/sockets.json
+trans.sc = public/language/sc/admin/settings/sockets.json
+trans.sk = public/language/sk/admin/settings/sockets.json
trans.sl = public/language/sl/admin/settings/sockets.json
+trans.sq_AL = public/language/sq-AL/admin/settings/sockets.json
+trans.sr = public/language/sr/admin/settings/sockets.json
+trans.sv = public/language/sv/admin/settings/sockets.json
+trans.th = public/language/th/admin/settings/sockets.json
+trans.tr = public/language/tr/admin/settings/sockets.json
+trans.uk = public/language/uk/admin/settings/sockets.json
+trans.ur = public/language/ur/admin/settings/sockets.json
+trans.vi = public/language/vi/admin/settings/sockets.json
+trans.zh_CN = public/language/zh-CN/admin/settings/sockets.json
+trans.zh_TW = public/language/zh-TW/admin/settings/sockets.json
[o:nodebb:p:nodebb:r:admin-settings-sounds]
file_filter = public/language//admin/settings/sounds.json
source_file = public/language/en-GB/admin/settings/sounds.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.sv = public/language/sv/admin/settings/sounds.json
+trans.ar = public/language/ar/admin/settings/sounds.json
+trans.az = public/language/az/admin/settings/sounds.json
+trans.bg = public/language/bg/admin/settings/sounds.json
+trans.bn = public/language/bn/admin/settings/sounds.json
+trans.cs = public/language/cs/admin/settings/sounds.json
+trans.da = public/language/da/admin/settings/sounds.json
trans.de = public/language/de/admin/settings/sounds.json
trans.el = public/language/el/admin/settings/sounds.json
-trans.es = public/language/es/admin/settings/sounds.json
-trans.he = public/language/he/admin/settings/sounds.json
-trans.it = public/language/it/admin/settings/sounds.json
-trans.pt_BR = public/language/pt-BR/admin/settings/sounds.json
-trans.sq_AL = public/language/sq-AL/admin/settings/sounds.json
-trans.vi = public/language/vi/admin/settings/sounds.json
-trans.hr = public/language/hr/admin/settings/sounds.json
-trans.hu = public/language/hu/admin/settings/sounds.json
-trans.bg = public/language/bg/admin/settings/sounds.json
-trans.ja = public/language/ja/admin/settings/sounds.json
-trans.lt = public/language/lt/admin/settings/sounds.json
-trans.nl = public/language/nl/admin/settings/sounds.json
-trans.ru = public/language/ru/admin/settings/sounds.json
-trans.cs = public/language/cs/admin/settings/sounds.json
+trans.en_US = public/language/en-US/admin/settings/sounds.json
trans.en@pirate = public/language/en-x-pirate/admin/settings/sounds.json
+trans.es = public/language/es/admin/settings/sounds.json
+trans.et = public/language/et/admin/settings/sounds.json
trans.fa_IR = public/language/fa-IR/admin/settings/sounds.json
trans.fi = public/language/fi/admin/settings/sounds.json
-trans.nb = public/language/nb/admin/settings/sounds.json
-trans.th = public/language/th/admin/settings/sounds.json
-trans.ar = public/language/ar/admin/settings/sounds.json
-trans.da = public/language/da/admin/settings/sounds.json
+trans.fr = public/language/fr/admin/settings/sounds.json
trans.gl = public/language/gl/admin/settings/sounds.json
+trans.he = public/language/he/admin/settings/sounds.json
+trans.hr = public/language/hr/admin/settings/sounds.json
+trans.hu = public/language/hu/admin/settings/sounds.json
+trans.hy = public/language/hy/admin/settings/sounds.json
+trans.id = public/language/id/admin/settings/sounds.json
+trans.it = public/language/it/admin/settings/sounds.json
+trans.ja = public/language/ja/admin/settings/sounds.json
+trans.ko = public/language/ko/admin/settings/sounds.json
+trans.lt = public/language/lt/admin/settings/sounds.json
trans.lv = public/language/lv/admin/settings/sounds.json
trans.ms = public/language/ms/admin/settings/sounds.json
+trans.nb = public/language/nb/admin/settings/sounds.json
+trans.nl = public/language/nl/admin/settings/sounds.json
+trans.nn_NO = public/language/nn-NO/admin/settings/sounds.json
+trans.pl = public/language/pl/admin/settings/sounds.json
+trans.pt_BR = public/language/pt-BR/admin/settings/sounds.json
+trans.pt_PT = public/language/pt-PT/admin/settings/sounds.json
+trans.ro = public/language/ro/admin/settings/sounds.json
+trans.ru = public/language/ru/admin/settings/sounds.json
+trans.rw = public/language/rw/admin/settings/sounds.json
trans.sc = public/language/sc/admin/settings/sounds.json
-trans.sr = public/language/sr/admin/settings/sounds.json
-trans.bn = public/language/bn/admin/settings/sounds.json
-trans.en_US = public/language/en-US/admin/settings/sounds.json
-trans.hy = public/language/hy/admin/settings/sounds.json
trans.sk = public/language/sk/admin/settings/sounds.json
trans.sl = public/language/sl/admin/settings/sounds.json
-trans.uk = public/language/uk/admin/settings/sounds.json
-trans.zh_CN = public/language/zh-CN/admin/settings/sounds.json
-trans.et = public/language/et/admin/settings/sounds.json
-trans.fr = public/language/fr/admin/settings/sounds.json
-trans.ko = public/language/ko/admin/settings/sounds.json
-trans.ro = public/language/ro/admin/settings/sounds.json
-trans.zh_TW = public/language/zh-TW/admin/settings/sounds.json
-trans.id = public/language/id/admin/settings/sounds.json
-trans.pl = public/language/pl/admin/settings/sounds.json
-trans.pt_PT = public/language/pt-PT/admin/settings/sounds.json
-trans.rw = public/language/rw/admin/settings/sounds.json
+trans.sq_AL = public/language/sq-AL/admin/settings/sounds.json
+trans.sr = public/language/sr/admin/settings/sounds.json
+trans.sv = public/language/sv/admin/settings/sounds.json
+trans.th = public/language/th/admin/settings/sounds.json
trans.tr = public/language/tr/admin/settings/sounds.json
+trans.uk = public/language/uk/admin/settings/sounds.json
+trans.ur = public/language/ur/admin/settings/sounds.json
+trans.vi = public/language/vi/admin/settings/sounds.json
+trans.zh_CN = public/language/zh-CN/admin/settings/sounds.json
+trans.zh_TW = public/language/zh-TW/admin/settings/sounds.json
[o:nodebb:p:nodebb:r:admin-settings-tags]
file_filter = public/language//admin/settings/tags.json
source_file = public/language/en-GB/admin/settings/tags.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.bg = public/language/bg/admin/settings/tags.json
-trans.cs = public/language/cs/admin/settings/tags.json
-trans.de = public/language/de/admin/settings/tags.json
-trans.en@pirate = public/language/en-x-pirate/admin/settings/tags.json
-trans.lv = public/language/lv/admin/settings/tags.json
-trans.th = public/language/th/admin/settings/tags.json
-trans.zh_TW = public/language/zh-TW/admin/settings/tags.json
-trans.hu = public/language/hu/admin/settings/tags.json
-trans.it = public/language/it/admin/settings/tags.json
-trans.pt_BR = public/language/pt-BR/admin/settings/tags.json
-trans.rw = public/language/rw/admin/settings/tags.json
-trans.sk = public/language/sk/admin/settings/tags.json
-trans.sv = public/language/sv/admin/settings/tags.json
trans.ar = public/language/ar/admin/settings/tags.json
-trans.gl = public/language/gl/admin/settings/tags.json
-trans.ja = public/language/ja/admin/settings/tags.json
-trans.lt = public/language/lt/admin/settings/tags.json
-trans.sc = public/language/sc/admin/settings/tags.json
-trans.zh_CN = public/language/zh-CN/admin/settings/tags.json
-trans.ro = public/language/ro/admin/settings/tags.json
+trans.az = public/language/az/admin/settings/tags.json
+trans.bg = public/language/bg/admin/settings/tags.json
trans.bn = public/language/bn/admin/settings/tags.json
-trans.hr = public/language/hr/admin/settings/tags.json
-trans.ko = public/language/ko/admin/settings/tags.json
-trans.nb = public/language/nb/admin/settings/tags.json
-trans.el = public/language/el/admin/settings/tags.json
-trans.et = public/language/et/admin/settings/tags.json
-trans.he = public/language/he/admin/settings/tags.json
-trans.ms = public/language/ms/admin/settings/tags.json
-trans.nl = public/language/nl/admin/settings/tags.json
-trans.sl = public/language/sl/admin/settings/tags.json
-trans.tr = public/language/tr/admin/settings/tags.json
-trans.es = public/language/es/admin/settings/tags.json
-trans.fr = public/language/fr/admin/settings/tags.json
-trans.hy = public/language/hy/admin/settings/tags.json
-trans.pl = public/language/pl/admin/settings/tags.json
-trans.ru = public/language/ru/admin/settings/tags.json
-trans.sq_AL = public/language/sq-AL/admin/settings/tags.json
-trans.sr = public/language/sr/admin/settings/tags.json
-trans.uk = public/language/uk/admin/settings/tags.json
+trans.cs = public/language/cs/admin/settings/tags.json
trans.da = public/language/da/admin/settings/tags.json
+trans.de = public/language/de/admin/settings/tags.json
+trans.el = public/language/el/admin/settings/tags.json
trans.en_US = public/language/en-US/admin/settings/tags.json
+trans.en@pirate = public/language/en-x-pirate/admin/settings/tags.json
+trans.es = public/language/es/admin/settings/tags.json
+trans.et = public/language/et/admin/settings/tags.json
trans.fa_IR = public/language/fa-IR/admin/settings/tags.json
trans.fi = public/language/fi/admin/settings/tags.json
+trans.fr = public/language/fr/admin/settings/tags.json
+trans.gl = public/language/gl/admin/settings/tags.json
+trans.he = public/language/he/admin/settings/tags.json
+trans.hr = public/language/hr/admin/settings/tags.json
+trans.hu = public/language/hu/admin/settings/tags.json
+trans.hy = public/language/hy/admin/settings/tags.json
trans.id = public/language/id/admin/settings/tags.json
+trans.it = public/language/it/admin/settings/tags.json
+trans.ja = public/language/ja/admin/settings/tags.json
+trans.ko = public/language/ko/admin/settings/tags.json
+trans.lt = public/language/lt/admin/settings/tags.json
+trans.lv = public/language/lv/admin/settings/tags.json
+trans.ms = public/language/ms/admin/settings/tags.json
+trans.nb = public/language/nb/admin/settings/tags.json
+trans.nl = public/language/nl/admin/settings/tags.json
+trans.nn_NO = public/language/nn-NO/admin/settings/tags.json
+trans.pl = public/language/pl/admin/settings/tags.json
+trans.pt_BR = public/language/pt-BR/admin/settings/tags.json
trans.pt_PT = public/language/pt-PT/admin/settings/tags.json
+trans.ro = public/language/ro/admin/settings/tags.json
+trans.ru = public/language/ru/admin/settings/tags.json
+trans.rw = public/language/rw/admin/settings/tags.json
+trans.sc = public/language/sc/admin/settings/tags.json
+trans.sk = public/language/sk/admin/settings/tags.json
+trans.sl = public/language/sl/admin/settings/tags.json
+trans.sq_AL = public/language/sq-AL/admin/settings/tags.json
+trans.sr = public/language/sr/admin/settings/tags.json
+trans.sv = public/language/sv/admin/settings/tags.json
+trans.th = public/language/th/admin/settings/tags.json
+trans.tr = public/language/tr/admin/settings/tags.json
+trans.uk = public/language/uk/admin/settings/tags.json
+trans.ur = public/language/ur/admin/settings/tags.json
trans.vi = public/language/vi/admin/settings/tags.json
+trans.zh_CN = public/language/zh-CN/admin/settings/tags.json
+trans.zh_TW = public/language/zh-TW/admin/settings/tags.json
[o:nodebb:p:nodebb:r:admin-settings-uploads]
file_filter = public/language//admin/settings/uploads.json
@@ -2295,985 +2427,1096 @@ source_file = public/language/en-GB/admin/settings/uploads.json
source_lang = en_GB
type = KEYVALUEJSON
trans.ar = public/language/ar/admin/settings/uploads.json
-trans.it = public/language/it/admin/settings/uploads.json
-trans.ko = public/language/ko/admin/settings/uploads.json
-trans.sk = public/language/sk/admin/settings/uploads.json
-trans.sq_AL = public/language/sq-AL/admin/settings/uploads.json
-trans.fa_IR = public/language/fa-IR/admin/settings/uploads.json
-trans.he = public/language/he/admin/settings/uploads.json
-trans.ja = public/language/ja/admin/settings/uploads.json
-trans.nb = public/language/nb/admin/settings/uploads.json
-trans.nl = public/language/nl/admin/settings/uploads.json
-trans.zh_TW = public/language/zh-TW/admin/settings/uploads.json
-trans.ro = public/language/ro/admin/settings/uploads.json
-trans.sl = public/language/sl/admin/settings/uploads.json
-trans.da = public/language/da/admin/settings/uploads.json
-trans.es = public/language/es/admin/settings/uploads.json
-trans.et = public/language/et/admin/settings/uploads.json
-trans.hr = public/language/hr/admin/settings/uploads.json
-trans.id = public/language/id/admin/settings/uploads.json
-trans.pt_BR = public/language/pt-BR/admin/settings/uploads.json
-trans.uk = public/language/uk/admin/settings/uploads.json
-trans.vi = public/language/vi/admin/settings/uploads.json
-trans.th = public/language/th/admin/settings/uploads.json
+trans.az = public/language/az/admin/settings/uploads.json
trans.bg = public/language/bg/admin/settings/uploads.json
-trans.el = public/language/el/admin/settings/uploads.json
-trans.hu = public/language/hu/admin/settings/uploads.json
-trans.lv = public/language/lv/admin/settings/uploads.json
-trans.ms = public/language/ms/admin/settings/uploads.json
-trans.pt_PT = public/language/pt-PT/admin/settings/uploads.json
-trans.lt = public/language/lt/admin/settings/uploads.json
trans.bn = public/language/bn/admin/settings/uploads.json
trans.cs = public/language/cs/admin/settings/uploads.json
+trans.da = public/language/da/admin/settings/uploads.json
+trans.de = public/language/de/admin/settings/uploads.json
+trans.el = public/language/el/admin/settings/uploads.json
+trans.en_US = public/language/en-US/admin/settings/uploads.json
trans.en@pirate = public/language/en-x-pirate/admin/settings/uploads.json
+trans.es = public/language/es/admin/settings/uploads.json
+trans.et = public/language/et/admin/settings/uploads.json
+trans.fa_IR = public/language/fa-IR/admin/settings/uploads.json
trans.fi = public/language/fi/admin/settings/uploads.json
trans.fr = public/language/fr/admin/settings/uploads.json
-trans.hy = public/language/hy/admin/settings/uploads.json
trans.gl = public/language/gl/admin/settings/uploads.json
-trans.ru = public/language/ru/admin/settings/uploads.json
-trans.sr = public/language/sr/admin/settings/uploads.json
-trans.sv = public/language/sv/admin/settings/uploads.json
-trans.zh_CN = public/language/zh-CN/admin/settings/uploads.json
-trans.de = public/language/de/admin/settings/uploads.json
-trans.en_US = public/language/en-US/admin/settings/uploads.json
+trans.he = public/language/he/admin/settings/uploads.json
+trans.hr = public/language/hr/admin/settings/uploads.json
+trans.hu = public/language/hu/admin/settings/uploads.json
+trans.hy = public/language/hy/admin/settings/uploads.json
+trans.id = public/language/id/admin/settings/uploads.json
+trans.it = public/language/it/admin/settings/uploads.json
+trans.ja = public/language/ja/admin/settings/uploads.json
+trans.ko = public/language/ko/admin/settings/uploads.json
+trans.lt = public/language/lt/admin/settings/uploads.json
+trans.lv = public/language/lv/admin/settings/uploads.json
+trans.ms = public/language/ms/admin/settings/uploads.json
+trans.nb = public/language/nb/admin/settings/uploads.json
+trans.nl = public/language/nl/admin/settings/uploads.json
+trans.nn_NO = public/language/nn-NO/admin/settings/uploads.json
trans.pl = public/language/pl/admin/settings/uploads.json
+trans.pt_BR = public/language/pt-BR/admin/settings/uploads.json
+trans.pt_PT = public/language/pt-PT/admin/settings/uploads.json
+trans.ro = public/language/ro/admin/settings/uploads.json
+trans.ru = public/language/ru/admin/settings/uploads.json
trans.rw = public/language/rw/admin/settings/uploads.json
trans.sc = public/language/sc/admin/settings/uploads.json
+trans.sk = public/language/sk/admin/settings/uploads.json
+trans.sl = public/language/sl/admin/settings/uploads.json
+trans.sq_AL = public/language/sq-AL/admin/settings/uploads.json
+trans.sr = public/language/sr/admin/settings/uploads.json
+trans.sv = public/language/sv/admin/settings/uploads.json
+trans.th = public/language/th/admin/settings/uploads.json
trans.tr = public/language/tr/admin/settings/uploads.json
+trans.uk = public/language/uk/admin/settings/uploads.json
+trans.ur = public/language/ur/admin/settings/uploads.json
+trans.vi = public/language/vi/admin/settings/uploads.json
+trans.zh_CN = public/language/zh-CN/admin/settings/uploads.json
+trans.zh_TW = public/language/zh-TW/admin/settings/uploads.json
[o:nodebb:p:nodebb:r:admin-settings-user]
file_filter = public/language//admin/settings/user.json
source_file = public/language/en-GB/admin/settings/user.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.da = public/language/da/admin/settings/user.json
-trans.el = public/language/el/admin/settings/user.json
-trans.he = public/language/he/admin/settings/user.json
-trans.ro = public/language/ro/admin/settings/user.json
-trans.sq_AL = public/language/sq-AL/admin/settings/user.json
-trans.gl = public/language/gl/admin/settings/user.json
-trans.hu = public/language/hu/admin/settings/user.json
-trans.nb = public/language/nb/admin/settings/user.json
-trans.sv = public/language/sv/admin/settings/user.json
-trans.uk = public/language/uk/admin/settings/user.json
-trans.cs = public/language/cs/admin/settings/user.json
-trans.en_US = public/language/en-US/admin/settings/user.json
-trans.fa_IR = public/language/fa-IR/admin/settings/user.json
-trans.fi = public/language/fi/admin/settings/user.json
-trans.lv = public/language/lv/admin/settings/user.json
-trans.ms = public/language/ms/admin/settings/user.json
-trans.pl = public/language/pl/admin/settings/user.json
-trans.ru = public/language/ru/admin/settings/user.json
-trans.zh_CN = public/language/zh-CN/admin/settings/user.json
-trans.hr = public/language/hr/admin/settings/user.json
-trans.id = public/language/id/admin/settings/user.json
-trans.it = public/language/it/admin/settings/user.json
-trans.sk = public/language/sk/admin/settings/user.json
-trans.sl = public/language/sl/admin/settings/user.json
-trans.sr = public/language/sr/admin/settings/user.json
-trans.tr = public/language/tr/admin/settings/user.json
-trans.vi = public/language/vi/admin/settings/user.json
-trans.de = public/language/de/admin/settings/user.json
-trans.en@pirate = public/language/en-x-pirate/admin/settings/user.json
-trans.hy = public/language/hy/admin/settings/user.json
-trans.pt_PT = public/language/pt-PT/admin/settings/user.json
-trans.th = public/language/th/admin/settings/user.json
-trans.zh_TW = public/language/zh-TW/admin/settings/user.json
-trans.bn = public/language/bn/admin/settings/user.json
-trans.nl = public/language/nl/admin/settings/user.json
-trans.pt_BR = public/language/pt-BR/admin/settings/user.json
-trans.rw = public/language/rw/admin/settings/user.json
-trans.bg = public/language/bg/admin/settings/user.json
-trans.fr = public/language/fr/admin/settings/user.json
-trans.ko = public/language/ko/admin/settings/user.json
trans.ar = public/language/ar/admin/settings/user.json
+trans.az = public/language/az/admin/settings/user.json
+trans.bg = public/language/bg/admin/settings/user.json
+trans.bn = public/language/bn/admin/settings/user.json
+trans.cs = public/language/cs/admin/settings/user.json
+trans.da = public/language/da/admin/settings/user.json
+trans.de = public/language/de/admin/settings/user.json
+trans.el = public/language/el/admin/settings/user.json
+trans.en_US = public/language/en-US/admin/settings/user.json
+trans.en@pirate = public/language/en-x-pirate/admin/settings/user.json
trans.es = public/language/es/admin/settings/user.json
trans.et = public/language/et/admin/settings/user.json
+trans.fa_IR = public/language/fa-IR/admin/settings/user.json
+trans.fi = public/language/fi/admin/settings/user.json
+trans.fr = public/language/fr/admin/settings/user.json
+trans.gl = public/language/gl/admin/settings/user.json
+trans.he = public/language/he/admin/settings/user.json
+trans.hr = public/language/hr/admin/settings/user.json
+trans.hu = public/language/hu/admin/settings/user.json
+trans.hy = public/language/hy/admin/settings/user.json
+trans.id = public/language/id/admin/settings/user.json
+trans.it = public/language/it/admin/settings/user.json
trans.ja = public/language/ja/admin/settings/user.json
+trans.ko = public/language/ko/admin/settings/user.json
trans.lt = public/language/lt/admin/settings/user.json
+trans.lv = public/language/lv/admin/settings/user.json
+trans.ms = public/language/ms/admin/settings/user.json
+trans.nb = public/language/nb/admin/settings/user.json
+trans.nl = public/language/nl/admin/settings/user.json
+trans.nn_NO = public/language/nn-NO/admin/settings/user.json
+trans.pl = public/language/pl/admin/settings/user.json
+trans.pt_BR = public/language/pt-BR/admin/settings/user.json
+trans.pt_PT = public/language/pt-PT/admin/settings/user.json
+trans.ro = public/language/ro/admin/settings/user.json
+trans.ru = public/language/ru/admin/settings/user.json
+trans.rw = public/language/rw/admin/settings/user.json
trans.sc = public/language/sc/admin/settings/user.json
+trans.sk = public/language/sk/admin/settings/user.json
+trans.sl = public/language/sl/admin/settings/user.json
+trans.sq_AL = public/language/sq-AL/admin/settings/user.json
+trans.sr = public/language/sr/admin/settings/user.json
+trans.sv = public/language/sv/admin/settings/user.json
+trans.th = public/language/th/admin/settings/user.json
+trans.tr = public/language/tr/admin/settings/user.json
+trans.uk = public/language/uk/admin/settings/user.json
+trans.ur = public/language/ur/admin/settings/user.json
+trans.vi = public/language/vi/admin/settings/user.json
+trans.zh_CN = public/language/zh-CN/admin/settings/user.json
+trans.zh_TW = public/language/zh-TW/admin/settings/user.json
[o:nodebb:p:nodebb:r:admin-settings-web-crawler]
file_filter = public/language//admin/settings/web-crawler.json
source_file = public/language/en-GB/admin/settings/web-crawler.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.cs = public/language/cs/admin/settings/web-crawler.json
-trans.es = public/language/es/admin/settings/web-crawler.json
-trans.fr = public/language/fr/admin/settings/web-crawler.json
-trans.ko = public/language/ko/admin/settings/web-crawler.json
-trans.pl = public/language/pl/admin/settings/web-crawler.json
-trans.tr = public/language/tr/admin/settings/web-crawler.json
-trans.uk = public/language/uk/admin/settings/web-crawler.json
+trans.ar = public/language/ar/admin/settings/web-crawler.json
+trans.az = public/language/az/admin/settings/web-crawler.json
trans.bg = public/language/bg/admin/settings/web-crawler.json
-trans.el = public/language/el/admin/settings/web-crawler.json
-trans.en@pirate = public/language/en-x-pirate/admin/settings/web-crawler.json
-trans.fa_IR = public/language/fa-IR/admin/settings/web-crawler.json
-trans.ms = public/language/ms/admin/settings/web-crawler.json
-trans.th = public/language/th/admin/settings/web-crawler.json
-trans.gl = public/language/gl/admin/settings/web-crawler.json
-trans.id = public/language/id/admin/settings/web-crawler.json
-trans.sk = public/language/sk/admin/settings/web-crawler.json
-trans.rw = public/language/rw/admin/settings/web-crawler.json
+trans.bn = public/language/bn/admin/settings/web-crawler.json
+trans.cs = public/language/cs/admin/settings/web-crawler.json
trans.da = public/language/da/admin/settings/web-crawler.json
+trans.de = public/language/de/admin/settings/web-crawler.json
+trans.el = public/language/el/admin/settings/web-crawler.json
+trans.en_US = public/language/en-US/admin/settings/web-crawler.json
+trans.en@pirate = public/language/en-x-pirate/admin/settings/web-crawler.json
+trans.es = public/language/es/admin/settings/web-crawler.json
+trans.et = public/language/et/admin/settings/web-crawler.json
+trans.fa_IR = public/language/fa-IR/admin/settings/web-crawler.json
+trans.fi = public/language/fi/admin/settings/web-crawler.json
+trans.fr = public/language/fr/admin/settings/web-crawler.json
+trans.gl = public/language/gl/admin/settings/web-crawler.json
+trans.he = public/language/he/admin/settings/web-crawler.json
trans.hr = public/language/hr/admin/settings/web-crawler.json
trans.hu = public/language/hu/admin/settings/web-crawler.json
-trans.ja = public/language/ja/admin/settings/web-crawler.json
-trans.lv = public/language/lv/admin/settings/web-crawler.json
-trans.nl = public/language/nl/admin/settings/web-crawler.json
-trans.pt_BR = public/language/pt-BR/admin/settings/web-crawler.json
-trans.vi = public/language/vi/admin/settings/web-crawler.json
-trans.en_US = public/language/en-US/admin/settings/web-crawler.json
-trans.et = public/language/et/admin/settings/web-crawler.json
-trans.fi = public/language/fi/admin/settings/web-crawler.json
-trans.sq_AL = public/language/sq-AL/admin/settings/web-crawler.json
-trans.sv = public/language/sv/admin/settings/web-crawler.json
-trans.ar = public/language/ar/admin/settings/web-crawler.json
-trans.de = public/language/de/admin/settings/web-crawler.json
trans.hy = public/language/hy/admin/settings/web-crawler.json
-trans.nb = public/language/nb/admin/settings/web-crawler.json
-trans.ro = public/language/ro/admin/settings/web-crawler.json
-trans.sr = public/language/sr/admin/settings/web-crawler.json
-trans.zh_TW = public/language/zh-TW/admin/settings/web-crawler.json
-trans.he = public/language/he/admin/settings/web-crawler.json
+trans.id = public/language/id/admin/settings/web-crawler.json
trans.it = public/language/it/admin/settings/web-crawler.json
+trans.ja = public/language/ja/admin/settings/web-crawler.json
+trans.ko = public/language/ko/admin/settings/web-crawler.json
trans.lt = public/language/lt/admin/settings/web-crawler.json
-trans.ru = public/language/ru/admin/settings/web-crawler.json
-trans.sl = public/language/sl/admin/settings/web-crawler.json
-trans.zh_CN = public/language/zh-CN/admin/settings/web-crawler.json
-trans.bn = public/language/bn/admin/settings/web-crawler.json
+trans.lv = public/language/lv/admin/settings/web-crawler.json
+trans.ms = public/language/ms/admin/settings/web-crawler.json
+trans.nb = public/language/nb/admin/settings/web-crawler.json
+trans.nl = public/language/nl/admin/settings/web-crawler.json
+trans.nn_NO = public/language/nn-NO/admin/settings/web-crawler.json
+trans.pl = public/language/pl/admin/settings/web-crawler.json
+trans.pt_BR = public/language/pt-BR/admin/settings/web-crawler.json
trans.pt_PT = public/language/pt-PT/admin/settings/web-crawler.json
+trans.ro = public/language/ro/admin/settings/web-crawler.json
+trans.ru = public/language/ru/admin/settings/web-crawler.json
+trans.rw = public/language/rw/admin/settings/web-crawler.json
trans.sc = public/language/sc/admin/settings/web-crawler.json
+trans.sk = public/language/sk/admin/settings/web-crawler.json
+trans.sl = public/language/sl/admin/settings/web-crawler.json
+trans.sq_AL = public/language/sq-AL/admin/settings/web-crawler.json
+trans.sr = public/language/sr/admin/settings/web-crawler.json
+trans.sv = public/language/sv/admin/settings/web-crawler.json
+trans.th = public/language/th/admin/settings/web-crawler.json
+trans.tr = public/language/tr/admin/settings/web-crawler.json
+trans.uk = public/language/uk/admin/settings/web-crawler.json
+trans.ur = public/language/ur/admin/settings/web-crawler.json
+trans.vi = public/language/vi/admin/settings/web-crawler.json
+trans.zh_CN = public/language/zh-CN/admin/settings/web-crawler.json
+trans.zh_TW = public/language/zh-TW/admin/settings/web-crawler.json
[o:nodebb:p:nodebb:r:themes-harmony]
file_filter = public/language//themes/harmony.json
source_file = public/language/en-GB/themes/harmony.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.th = public/language/th/themes/harmony.json
+trans.ar = public/language/ar/themes/harmony.json
+trans.az = public/language/az/themes/harmony.json
trans.bg = public/language/bg/themes/harmony.json
+trans.bn = public/language/bn/themes/harmony.json
+trans.cs = public/language/cs/themes/harmony.json
+trans.da = public/language/da/themes/harmony.json
+trans.de = public/language/de/themes/harmony.json
+trans.el = public/language/el/themes/harmony.json
+trans.en_US = public/language/en-US/themes/harmony.json
+trans.en@pirate = public/language/en-x-pirate/themes/harmony.json
+trans.es = public/language/es/themes/harmony.json
+trans.et = public/language/et/themes/harmony.json
+trans.fa_IR = public/language/fa-IR/themes/harmony.json
+trans.fi = public/language/fi/themes/harmony.json
+trans.fr = public/language/fr/themes/harmony.json
+trans.gl = public/language/gl/themes/harmony.json
+trans.he = public/language/he/themes/harmony.json
trans.hr = public/language/hr/themes/harmony.json
+trans.hu = public/language/hu/themes/harmony.json
trans.hy = public/language/hy/themes/harmony.json
+trans.id = public/language/id/themes/harmony.json
+trans.it = public/language/it/themes/harmony.json
+trans.ja = public/language/ja/themes/harmony.json
+trans.ko = public/language/ko/themes/harmony.json
+trans.lt = public/language/lt/themes/harmony.json
+trans.lv = public/language/lv/themes/harmony.json
+trans.ms = public/language/ms/themes/harmony.json
+trans.nb = public/language/nb/themes/harmony.json
+trans.nl = public/language/nl/themes/harmony.json
+trans.nn_NO = public/language/nn-NO/themes/harmony.json
+trans.pl = public/language/pl/themes/harmony.json
+trans.pt_BR = public/language/pt-BR/themes/harmony.json
+trans.pt_PT = public/language/pt-PT/themes/harmony.json
+trans.ro = public/language/ro/themes/harmony.json
+trans.ru = public/language/ru/themes/harmony.json
+trans.rw = public/language/rw/themes/harmony.json
+trans.sc = public/language/sc/themes/harmony.json
trans.sk = public/language/sk/themes/harmony.json
trans.sl = public/language/sl/themes/harmony.json
trans.sq_AL = public/language/sq-AL/themes/harmony.json
-trans.sv = public/language/sv/themes/harmony.json
-trans.vi = public/language/vi/themes/harmony.json
-trans.da = public/language/da/themes/harmony.json
-trans.en_US = public/language/en-US/themes/harmony.json
-trans.gl = public/language/gl/themes/harmony.json
-trans.ko = public/language/ko/themes/harmony.json
-trans.lt = public/language/lt/themes/harmony.json
-trans.pt_BR = public/language/pt-BR/themes/harmony.json
-trans.hu = public/language/hu/themes/harmony.json
-trans.lv = public/language/lv/themes/harmony.json
-trans.ro = public/language/ro/themes/harmony.json
-trans.ru = public/language/ru/themes/harmony.json
trans.sr = public/language/sr/themes/harmony.json
-trans.bn = public/language/bn/themes/harmony.json
-trans.he = public/language/he/themes/harmony.json
-trans.nl = public/language/nl/themes/harmony.json
-trans.sc = public/language/sc/themes/harmony.json
-trans.zh_CN = public/language/zh-CN/themes/harmony.json
-trans.fi = public/language/fi/themes/harmony.json
-trans.ja = public/language/ja/themes/harmony.json
-trans.nb = public/language/nb/themes/harmony.json
-trans.pl = public/language/pl/themes/harmony.json
-trans.zh_TW = public/language/zh-TW/themes/harmony.json
-trans.ar = public/language/ar/themes/harmony.json
-trans.cs = public/language/cs/themes/harmony.json
-trans.fa_IR = public/language/fa-IR/themes/harmony.json
-trans.ms = public/language/ms/themes/harmony.json
-trans.pt_PT = public/language/pt-PT/themes/harmony.json
+trans.sv = public/language/sv/themes/harmony.json
+trans.th = public/language/th/themes/harmony.json
trans.tr = public/language/tr/themes/harmony.json
-trans.en@pirate = public/language/en-x-pirate/themes/harmony.json
-trans.fr = public/language/fr/themes/harmony.json
-trans.id = public/language/id/themes/harmony.json
trans.uk = public/language/uk/themes/harmony.json
-trans.de = public/language/de/themes/harmony.json
-trans.el = public/language/el/themes/harmony.json
-trans.es = public/language/es/themes/harmony.json
-trans.et = public/language/et/themes/harmony.json
-trans.it = public/language/it/themes/harmony.json
-trans.rw = public/language/rw/themes/harmony.json
+trans.ur = public/language/ur/themes/harmony.json
+trans.vi = public/language/vi/themes/harmony.json
+trans.zh_CN = public/language/zh-CN/themes/harmony.json
+trans.zh_TW = public/language/zh-TW/themes/harmony.json
[o:nodebb:p:nodebb:r:themes-persona]
file_filter = public/language//themes/persona.json
source_file = public/language/en-GB/themes/persona.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.th = public/language/th/themes/persona.json
+trans.ar = public/language/ar/themes/persona.json
+trans.az = public/language/az/themes/persona.json
trans.bg = public/language/bg/themes/persona.json
+trans.bn = public/language/bn/themes/persona.json
+trans.cs = public/language/cs/themes/persona.json
+trans.da = public/language/da/themes/persona.json
+trans.de = public/language/de/themes/persona.json
+trans.el = public/language/el/themes/persona.json
+trans.en_US = public/language/en-US/themes/persona.json
+trans.en@pirate = public/language/en-x-pirate/themes/persona.json
+trans.es = public/language/es/themes/persona.json
+trans.et = public/language/et/themes/persona.json
+trans.fa_IR = public/language/fa-IR/themes/persona.json
+trans.fi = public/language/fi/themes/persona.json
+trans.fr = public/language/fr/themes/persona.json
+trans.gl = public/language/gl/themes/persona.json
+trans.he = public/language/he/themes/persona.json
trans.hr = public/language/hr/themes/persona.json
+trans.hu = public/language/hu/themes/persona.json
trans.hy = public/language/hy/themes/persona.json
+trans.id = public/language/id/themes/persona.json
+trans.it = public/language/it/themes/persona.json
+trans.ja = public/language/ja/themes/persona.json
+trans.ko = public/language/ko/themes/persona.json
+trans.lt = public/language/lt/themes/persona.json
+trans.lv = public/language/lv/themes/persona.json
+trans.ms = public/language/ms/themes/persona.json
+trans.nb = public/language/nb/themes/persona.json
+trans.nl = public/language/nl/themes/persona.json
+trans.nn_NO = public/language/nn-NO/themes/persona.json
+trans.pl = public/language/pl/themes/persona.json
+trans.pt_BR = public/language/pt-BR/themes/persona.json
+trans.pt_PT = public/language/pt-PT/themes/persona.json
+trans.ro = public/language/ro/themes/persona.json
+trans.ru = public/language/ru/themes/persona.json
+trans.rw = public/language/rw/themes/persona.json
+trans.sc = public/language/sc/themes/persona.json
trans.sk = public/language/sk/themes/persona.json
trans.sl = public/language/sl/themes/persona.json
trans.sq_AL = public/language/sq-AL/themes/persona.json
-trans.sv = public/language/sv/themes/persona.json
-trans.vi = public/language/vi/themes/persona.json
-trans.da = public/language/da/themes/persona.json
-trans.en_US = public/language/en-US/themes/persona.json
-trans.gl = public/language/gl/themes/persona.json
-trans.ko = public/language/ko/themes/persona.json
-trans.lt = public/language/lt/themes/persona.json
-trans.pt_BR = public/language/pt-BR/themes/persona.json
-trans.hu = public/language/hu/themes/persona.json
-trans.lv = public/language/lv/themes/persona.json
-trans.ro = public/language/ro/themes/persona.json
-trans.ru = public/language/ru/themes/persona.json
trans.sr = public/language/sr/themes/persona.json
-trans.bn = public/language/bn/themes/persona.json
-trans.he = public/language/he/themes/persona.json
-trans.nl = public/language/nl/themes/persona.json
-trans.sc = public/language/sc/themes/persona.json
-trans.zh_CN = public/language/zh-CN/themes/persona.json
-trans.fi = public/language/fi/themes/persona.json
-trans.ja = public/language/ja/themes/persona.json
-trans.nb = public/language/nb/themes/persona.json
-trans.pl = public/language/pl/themes/persona.json
-trans.zh_TW = public/language/zh-TW/themes/persona.json
-trans.ar = public/language/ar/themes/persona.json
-trans.cs = public/language/cs/themes/persona.json
-trans.fa_IR = public/language/fa-IR/themes/persona.json
-trans.ms = public/language/ms/themes/persona.json
-trans.pt_PT = public/language/pt-PT/themes/persona.json
+trans.sv = public/language/sv/themes/persona.json
+trans.th = public/language/th/themes/persona.json
trans.tr = public/language/tr/themes/persona.json
-trans.en@pirate = public/language/en-x-pirate/themes/persona.json
-trans.fr = public/language/fr/themes/persona.json
-trans.id = public/language/id/themes/persona.json
trans.uk = public/language/uk/themes/persona.json
-trans.de = public/language/de/themes/persona.json
-trans.el = public/language/el/themes/persona.json
-trans.es = public/language/es/themes/persona.json
-trans.et = public/language/et/themes/persona.json
-trans.it = public/language/it/themes/persona.json
-trans.rw = public/language/rw/themes/persona.json
+trans.ur = public/language/ur/themes/persona.json
+trans.vi = public/language/vi/themes/persona.json
+trans.zh_CN = public/language/zh-CN/themes/persona.json
+trans.zh_TW = public/language/zh-TW/themes/persona.json
+
+[o:nodebb:p:nodebb:r:aria]
+file_filter = public/language//aria.json
+source_file = public/language/en-GB/aria.json
+source_lang = en_GB
+type = KEYVALUEJSON
+trans.ar = public/language/ar/aria.json
+trans.az = public/language/az/aria.json
+trans.bg = public/language/bg/aria.json
+trans.bn = public/language/bn/aria.json
+trans.cs = public/language/cs/aria.json
+trans.da = public/language/da/aria.json
+trans.de = public/language/de/aria.json
+trans.el = public/language/el/aria.json
+trans.en_US = public/language/en-US/aria.json
+trans.en@pirate = public/language/en-x-pirate/aria.json
+trans.es = public/language/es/aria.json
+trans.et = public/language/et/aria.json
+trans.fa_IR = public/language/fa-IR/aria.json
+trans.fi = public/language/fi/aria.json
+trans.fr = public/language/fr/aria.json
+trans.gl = public/language/gl/aria.json
+trans.he = public/language/he/aria.json
+trans.hr = public/language/hr/aria.json
+trans.hu = public/language/hu/aria.json
+trans.hy = public/language/hy/aria.json
+trans.id = public/language/id/aria.json
+trans.it = public/language/it/aria.json
+trans.ja = public/language/ja/aria.json
+trans.ko = public/language/ko/aria.json
+trans.lt = public/language/lt/aria.json
+trans.lv = public/language/lv/aria.json
+trans.ms = public/language/ms/aria.json
+trans.nb = public/language/nb/aria.json
+trans.nl = public/language/nl/aria.json
+trans.nn_NO = public/language/nn-NO/aria.json
+trans.pl = public/language/pl/aria.json
+trans.pt_BR = public/language/pt-BR/aria.json
+trans.pt_PT = public/language/pt-PT/aria.json
+trans.ro = public/language/ro/aria.json
+trans.ru = public/language/ru/aria.json
+trans.rw = public/language/rw/aria.json
+trans.sc = public/language/sc/aria.json
+trans.sk = public/language/sk/aria.json
+trans.sl = public/language/sl/aria.json
+trans.sq_AL = public/language/sq-AL/aria.json
+trans.sr = public/language/sr/aria.json
+trans.sv = public/language/sv/aria.json
+trans.th = public/language/th/aria.json
+trans.tr = public/language/tr/aria.json
+trans.uk = public/language/uk/aria.json
+trans.ur = public/language/ur/aria.json
+trans.vi = public/language/vi/aria.json
+trans.zh_CN = public/language/zh-CN/aria.json
+trans.zh_TW = public/language/zh-TW/aria.json
[o:nodebb:p:nodebb:r:category]
file_filter = public/language//category.json
source_file = public/language/en-GB/category.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.th = public/language/th/category.json
+trans.ar = public/language/ar/category.json
+trans.az = public/language/az/category.json
trans.bg = public/language/bg/category.json
+trans.bn = public/language/bn/category.json
+trans.cs = public/language/cs/category.json
+trans.da = public/language/da/category.json
+trans.de = public/language/de/category.json
+trans.el = public/language/el/category.json
+trans.en_US = public/language/en-US/category.json
+trans.en@pirate = public/language/en-x-pirate/category.json
+trans.es = public/language/es/category.json
+trans.et = public/language/et/category.json
+trans.fa_IR = public/language/fa-IR/category.json
+trans.fi = public/language/fi/category.json
+trans.fr = public/language/fr/category.json
+trans.gl = public/language/gl/category.json
+trans.he = public/language/he/category.json
trans.hr = public/language/hr/category.json
+trans.hu = public/language/hu/category.json
trans.hy = public/language/hy/category.json
+trans.id = public/language/id/category.json
+trans.it = public/language/it/category.json
+trans.ja = public/language/ja/category.json
+trans.ko = public/language/ko/category.json
+trans.lt = public/language/lt/category.json
+trans.lv = public/language/lv/category.json
+trans.ms = public/language/ms/category.json
+trans.nb = public/language/nb/category.json
+trans.nl = public/language/nl/category.json
+trans.nn_NO = public/language/nn-NO/category.json
+trans.pl = public/language/pl/category.json
+trans.pt_BR = public/language/pt-BR/category.json
+trans.pt_PT = public/language/pt-PT/category.json
+trans.ro = public/language/ro/category.json
+trans.ru = public/language/ru/category.json
+trans.rw = public/language/rw/category.json
+trans.sc = public/language/sc/category.json
trans.sk = public/language/sk/category.json
trans.sl = public/language/sl/category.json
trans.sq_AL = public/language/sq-AL/category.json
-trans.sv = public/language/sv/category.json
-trans.vi = public/language/vi/category.json
-trans.da = public/language/da/category.json
-trans.en_US = public/language/en-US/category.json
-trans.gl = public/language/gl/category.json
-trans.ko = public/language/ko/category.json
-trans.lt = public/language/lt/category.json
-trans.pt_BR = public/language/pt-BR/category.json
-trans.hu = public/language/hu/category.json
-trans.lv = public/language/lv/category.json
-trans.ro = public/language/ro/category.json
-trans.ru = public/language/ru/category.json
trans.sr = public/language/sr/category.json
-trans.bn = public/language/bn/category.json
-trans.he = public/language/he/category.json
-trans.nl = public/language/nl/category.json
-trans.sc = public/language/sc/category.json
-trans.zh_CN = public/language/zh-CN/category.json
-trans.fi = public/language/fi/category.json
-trans.ja = public/language/ja/category.json
-trans.nb = public/language/nb/category.json
-trans.pl = public/language/pl/category.json
-trans.zh_TW = public/language/zh-TW/category.json
-trans.ar = public/language/ar/category.json
-trans.cs = public/language/cs/category.json
-trans.fa_IR = public/language/fa-IR/category.json
-trans.ms = public/language/ms/category.json
-trans.pt_PT = public/language/pt-PT/category.json
+trans.sv = public/language/sv/category.json
+trans.th = public/language/th/category.json
trans.tr = public/language/tr/category.json
-trans.en@pirate = public/language/en-x-pirate/category.json
-trans.fr = public/language/fr/category.json
-trans.id = public/language/id/category.json
trans.uk = public/language/uk/category.json
-trans.de = public/language/de/category.json
-trans.el = public/language/el/category.json
-trans.es = public/language/es/category.json
-trans.et = public/language/et/category.json
-trans.it = public/language/it/category.json
-trans.rw = public/language/rw/category.json
+trans.ur = public/language/ur/category.json
+trans.vi = public/language/vi/category.json
+trans.zh_CN = public/language/zh-CN/category.json
+trans.zh_TW = public/language/zh-TW/category.json
[o:nodebb:p:nodebb:r:email]
file_filter = public/language//email.json
source_file = public/language/en-GB/email.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.sk = public/language/sk/email.json
-trans.zh_TW = public/language/zh-TW/email.json
-trans.el = public/language/el/email.json
-trans.fa_IR = public/language/fa-IR/email.json
-trans.fi = public/language/fi/email.json
-trans.id = public/language/id/email.json
-trans.ko = public/language/ko/email.json
-trans.en@pirate = public/language/en-x-pirate/email.json
-trans.it = public/language/it/email.json
-trans.lv = public/language/lv/email.json
-trans.uk = public/language/uk/email.json
-trans.zh_CN = public/language/zh-CN/email.json
-trans.sv = public/language/sv/email.json
+trans.ar = public/language/ar/email.json
+trans.az = public/language/az/email.json
+trans.bg = public/language/bg/email.json
trans.bn = public/language/bn/email.json
trans.cs = public/language/cs/email.json
-trans.ms = public/language/ms/email.json
-trans.ro = public/language/ro/email.json
-trans.ru = public/language/ru/email.json
+trans.da = public/language/da/email.json
trans.de = public/language/de/email.json
-trans.hu = public/language/hu/email.json
-trans.hy = public/language/hy/email.json
-trans.sl = public/language/sl/email.json
-trans.th = public/language/th/email.json
-trans.ar = public/language/ar/email.json
+trans.el = public/language/el/email.json
+trans.en_US = public/language/en-US/email.json
+trans.en@pirate = public/language/en-x-pirate/email.json
trans.es = public/language/es/email.json
+trans.et = public/language/et/email.json
+trans.fa_IR = public/language/fa-IR/email.json
+trans.fi = public/language/fi/email.json
+trans.fr = public/language/fr/email.json
trans.gl = public/language/gl/email.json
trans.he = public/language/he/email.json
-trans.ja = public/language/ja/email.json
-trans.bg = public/language/bg/email.json
-trans.et = public/language/et/email.json
trans.hr = public/language/hr/email.json
-trans.pl = public/language/pl/email.json
-trans.da = public/language/da/email.json
-trans.fr = public/language/fr/email.json
+trans.hu = public/language/hu/email.json
+trans.hy = public/language/hy/email.json
+trans.id = public/language/id/email.json
+trans.it = public/language/it/email.json
+trans.ja = public/language/ja/email.json
+trans.ko = public/language/ko/email.json
trans.lt = public/language/lt/email.json
-trans.pt_PT = public/language/pt-PT/email.json
-trans.sc = public/language/sc/email.json
-trans.sq_AL = public/language/sq-AL/email.json
-trans.sr = public/language/sr/email.json
-trans.tr = public/language/tr/email.json
-trans.en_US = public/language/en-US/email.json
+trans.lv = public/language/lv/email.json
+trans.ms = public/language/ms/email.json
trans.nb = public/language/nb/email.json
trans.nl = public/language/nl/email.json
+trans.nn_NO = public/language/nn-NO/email.json
+trans.pl = public/language/pl/email.json
trans.pt_BR = public/language/pt-BR/email.json
+trans.pt_PT = public/language/pt-PT/email.json
+trans.ro = public/language/ro/email.json
+trans.ru = public/language/ru/email.json
trans.rw = public/language/rw/email.json
+trans.sc = public/language/sc/email.json
+trans.sk = public/language/sk/email.json
+trans.sl = public/language/sl/email.json
+trans.sq_AL = public/language/sq-AL/email.json
+trans.sr = public/language/sr/email.json
+trans.sv = public/language/sv/email.json
+trans.th = public/language/th/email.json
+trans.tr = public/language/tr/email.json
+trans.uk = public/language/uk/email.json
+trans.ur = public/language/ur/email.json
trans.vi = public/language/vi/email.json
+trans.zh_CN = public/language/zh-CN/email.json
+trans.zh_TW = public/language/zh-TW/email.json
[o:nodebb:p:nodebb:r:error]
file_filter = public/language//error.json
source_file = public/language/en-GB/error.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.de = public/language/de/error.json
-trans.ko = public/language/ko/error.json
-trans.lv = public/language/lv/error.json
-trans.sk = public/language/sk/error.json
-trans.cs = public/language/cs/error.json
-trans.it = public/language/it/error.json
-trans.nl = public/language/nl/error.json
-trans.sc = public/language/sc/error.json
-trans.sl = public/language/sl/error.json
-trans.sq_AL = public/language/sq-AL/error.json
-trans.tr = public/language/tr/error.json
-trans.hu = public/language/hu/error.json
-trans.fr = public/language/fr/error.json
-trans.hy = public/language/hy/error.json
-trans.zh_CN = public/language/zh-CN/error.json
trans.ar = public/language/ar/error.json
+trans.az = public/language/az/error.json
+trans.bg = public/language/bg/error.json
+trans.bn = public/language/bn/error.json
+trans.cs = public/language/cs/error.json
+trans.da = public/language/da/error.json
+trans.de = public/language/de/error.json
+trans.el = public/language/el/error.json
+trans.en_US = public/language/en-US/error.json
+trans.en@pirate = public/language/en-x-pirate/error.json
+trans.es = public/language/es/error.json
trans.et = public/language/et/error.json
+trans.fa_IR = public/language/fa-IR/error.json
trans.fi = public/language/fi/error.json
+trans.fr = public/language/fr/error.json
+trans.gl = public/language/gl/error.json
trans.he = public/language/he/error.json
trans.hr = public/language/hr/error.json
+trans.hu = public/language/hu/error.json
+trans.hy = public/language/hy/error.json
+trans.id = public/language/id/error.json
+trans.it = public/language/it/error.json
+trans.ja = public/language/ja/error.json
+trans.ko = public/language/ko/error.json
trans.lt = public/language/lt/error.json
+trans.lv = public/language/lv/error.json
+trans.ms = public/language/ms/error.json
+trans.nb = public/language/nb/error.json
+trans.nl = public/language/nl/error.json
+trans.nn_NO = public/language/nn-NO/error.json
+trans.pl = public/language/pl/error.json
+trans.pt_BR = public/language/pt-BR/error.json
+trans.pt_PT = public/language/pt-PT/error.json
+trans.ro = public/language/ro/error.json
trans.ru = public/language/ru/error.json
trans.rw = public/language/rw/error.json
-trans.bn = public/language/bn/error.json
-trans.vi = public/language/vi/error.json
-trans.fa_IR = public/language/fa-IR/error.json
-trans.gl = public/language/gl/error.json
-trans.nb = public/language/nb/error.json
-trans.pl = public/language/pl/error.json
-trans.ro = public/language/ro/error.json
-trans.uk = public/language/uk/error.json
-trans.es = public/language/es/error.json
-trans.el = public/language/el/error.json
-trans.en@pirate = public/language/en-x-pirate/error.json
-trans.en_US = public/language/en-US/error.json
-trans.ms = public/language/ms/error.json
-trans.pt_PT = public/language/pt-PT/error.json
-trans.bg = public/language/bg/error.json
-trans.pt_BR = public/language/pt-BR/error.json
-trans.sv = public/language/sv/error.json
-trans.zh_TW = public/language/zh-TW/error.json
-trans.da = public/language/da/error.json
-trans.ja = public/language/ja/error.json
+trans.sc = public/language/sc/error.json
+trans.sk = public/language/sk/error.json
+trans.sl = public/language/sl/error.json
+trans.sq_AL = public/language/sq-AL/error.json
trans.sr = public/language/sr/error.json
+trans.sv = public/language/sv/error.json
trans.th = public/language/th/error.json
-trans.id = public/language/id/error.json
+trans.tr = public/language/tr/error.json
+trans.uk = public/language/uk/error.json
+trans.ur = public/language/ur/error.json
+trans.vi = public/language/vi/error.json
+trans.zh_CN = public/language/zh-CN/error.json
+trans.zh_TW = public/language/zh-TW/error.json
[o:nodebb:p:nodebb:r:flags]
file_filter = public/language//flags.json
source_file = public/language/en-GB/flags.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.nb = public/language/nb/flags.json
-trans.ru = public/language/ru/flags.json
-trans.sc = public/language/sc/flags.json
-trans.fi = public/language/fi/flags.json
-trans.hr = public/language/hr/flags.json
-trans.lv = public/language/lv/flags.json
-trans.ms = public/language/ms/flags.json
-trans.ja = public/language/ja/flags.json
-trans.nl = public/language/nl/flags.json
-trans.pt_PT = public/language/pt-PT/flags.json
-trans.th = public/language/th/flags.json
+trans.ar = public/language/ar/flags.json
+trans.az = public/language/az/flags.json
+trans.bg = public/language/bg/flags.json
+trans.bn = public/language/bn/flags.json
+trans.cs = public/language/cs/flags.json
+trans.da = public/language/da/flags.json
+trans.de = public/language/de/flags.json
trans.el = public/language/el/flags.json
trans.en_US = public/language/en-US/flags.json
-trans.gl = public/language/gl/flags.json
-trans.hy = public/language/hy/flags.json
-trans.vi = public/language/vi/flags.json
-trans.rw = public/language/rw/flags.json
-trans.sr = public/language/sr/flags.json
-trans.zh_TW = public/language/zh-TW/flags.json
-trans.sq_AL = public/language/sq-AL/flags.json
-trans.sv = public/language/sv/flags.json
-trans.fa_IR = public/language/fa-IR/flags.json
-trans.id = public/language/id/flags.json
-trans.ko = public/language/ko/flags.json
-trans.pl = public/language/pl/flags.json
-trans.de = public/language/de/flags.json
trans.en@pirate = public/language/en-x-pirate/flags.json
-trans.he = public/language/he/flags.json
-trans.zh_CN = public/language/zh-CN/flags.json
-trans.lt = public/language/lt/flags.json
-trans.da = public/language/da/flags.json
trans.es = public/language/es/flags.json
trans.et = public/language/et/flags.json
-trans.hu = public/language/hu/flags.json
-trans.tr = public/language/tr/flags.json
-trans.bn = public/language/bn/flags.json
-trans.it = public/language/it/flags.json
-trans.pt_BR = public/language/pt-BR/flags.json
-trans.sk = public/language/sk/flags.json
-trans.ro = public/language/ro/flags.json
-trans.sl = public/language/sl/flags.json
-trans.ar = public/language/ar/flags.json
-trans.bg = public/language/bg/flags.json
-trans.cs = public/language/cs/flags.json
+trans.fa_IR = public/language/fa-IR/flags.json
+trans.fi = public/language/fi/flags.json
trans.fr = public/language/fr/flags.json
+trans.gl = public/language/gl/flags.json
+trans.he = public/language/he/flags.json
+trans.hr = public/language/hr/flags.json
+trans.hu = public/language/hu/flags.json
+trans.hy = public/language/hy/flags.json
+trans.id = public/language/id/flags.json
+trans.it = public/language/it/flags.json
+trans.ja = public/language/ja/flags.json
+trans.ko = public/language/ko/flags.json
+trans.lt = public/language/lt/flags.json
+trans.lv = public/language/lv/flags.json
+trans.ms = public/language/ms/flags.json
+trans.nb = public/language/nb/flags.json
+trans.nl = public/language/nl/flags.json
+trans.nn_NO = public/language/nn-NO/flags.json
+trans.pl = public/language/pl/flags.json
+trans.pt_BR = public/language/pt-BR/flags.json
+trans.pt_PT = public/language/pt-PT/flags.json
+trans.ro = public/language/ro/flags.json
+trans.ru = public/language/ru/flags.json
+trans.rw = public/language/rw/flags.json
+trans.sc = public/language/sc/flags.json
+trans.sk = public/language/sk/flags.json
+trans.sl = public/language/sl/flags.json
+trans.sq_AL = public/language/sq-AL/flags.json
+trans.sr = public/language/sr/flags.json
+trans.sv = public/language/sv/flags.json
+trans.th = public/language/th/flags.json
+trans.tr = public/language/tr/flags.json
+trans.vi = public/language/vi/flags.json
+trans.zh_CN = public/language/zh-CN/flags.json
+trans.zh_TW = public/language/zh-TW/flags.json
[o:nodebb:p:nodebb:r:global]
file_filter = public/language//global.json
source_file = public/language/en-GB/global.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.ms = public/language/ms/global.json
-trans.pl = public/language/pl/global.json
-trans.ru = public/language/ru/global.json
-trans.bn = public/language/bn/global.json
-trans.fr = public/language/fr/global.json
-trans.hr = public/language/hr/global.json
-trans.hy = public/language/hy/global.json
-trans.lv = public/language/lv/global.json
-trans.fa_IR = public/language/fa-IR/global.json
-trans.sl = public/language/sl/global.json
-trans.uk = public/language/uk/global.json
-trans.sc = public/language/sc/global.json
-trans.sv = public/language/sv/global.json
-trans.th = public/language/th/global.json
-trans.zh_TW = public/language/zh-TW/global.json
-trans.hu = public/language/hu/global.json
-trans.sk = public/language/sk/global.json
-trans.sr = public/language/sr/global.json
-trans.tr = public/language/tr/global.json
-trans.nb = public/language/nb/global.json
-trans.pt_BR = public/language/pt-BR/global.json
-trans.pt_PT = public/language/pt-PT/global.json
+trans.ar = public/language/ar/global.json
+trans.az = public/language/az/global.json
trans.bg = public/language/bg/global.json
+trans.bn = public/language/bn/global.json
+trans.cs = public/language/cs/global.json
trans.da = public/language/da/global.json
-trans.fi = public/language/fi/global.json
-trans.id = public/language/id/global.json
-trans.lt = public/language/lt/global.json
-trans.ro = public/language/ro/global.json
trans.de = public/language/de/global.json
trans.el = public/language/el/global.json
-trans.vi = public/language/vi/global.json
-trans.zh_CN = public/language/zh-CN/global.json
trans.en_US = public/language/en-US/global.json
-trans.et = public/language/et/global.json
-trans.gl = public/language/gl/global.json
-trans.he = public/language/he/global.json
-trans.ko = public/language/ko/global.json
-trans.ja = public/language/ja/global.json
-trans.nl = public/language/nl/global.json
-trans.rw = public/language/rw/global.json
-trans.ar = public/language/ar/global.json
-trans.cs = public/language/cs/global.json
trans.en@pirate = public/language/en-x-pirate/global.json
trans.es = public/language/es/global.json
+trans.et = public/language/et/global.json
+trans.fa_IR = public/language/fa-IR/global.json
+trans.fi = public/language/fi/global.json
+trans.fr = public/language/fr/global.json
+trans.gl = public/language/gl/global.json
+trans.he = public/language/he/global.json
+trans.hr = public/language/hr/global.json
+trans.hu = public/language/hu/global.json
+trans.hy = public/language/hy/global.json
+trans.id = public/language/id/global.json
trans.it = public/language/it/global.json
+trans.ja = public/language/ja/global.json
+trans.ko = public/language/ko/global.json
+trans.lt = public/language/lt/global.json
+trans.lv = public/language/lv/global.json
+trans.ms = public/language/ms/global.json
+trans.nb = public/language/nb/global.json
+trans.nl = public/language/nl/global.json
+trans.nn_NO = public/language/nn-NO/global.json
+trans.pl = public/language/pl/global.json
+trans.pt_BR = public/language/pt-BR/global.json
+trans.pt_PT = public/language/pt-PT/global.json
+trans.ro = public/language/ro/global.json
+trans.ru = public/language/ru/global.json
+trans.rw = public/language/rw/global.json
+trans.sc = public/language/sc/global.json
+trans.sk = public/language/sk/global.json
+trans.sl = public/language/sl/global.json
trans.sq_AL = public/language/sq-AL/global.json
+trans.sr = public/language/sr/global.json
+trans.sv = public/language/sv/global.json
+trans.th = public/language/th/global.json
+trans.tr = public/language/tr/global.json
+trans.uk = public/language/uk/global.json
+trans.ur = public/language/ur/global.json
+trans.vi = public/language/vi/global.json
+trans.zh_CN = public/language/zh-CN/global.json
+trans.zh_TW = public/language/zh-TW/global.json
[o:nodebb:p:nodebb:r:groups]
file_filter = public/language//groups.json
source_file = public/language/en-GB/groups.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.zh_TW = public/language/zh-TW/groups.json
-trans.de = public/language/de/groups.json
-trans.es = public/language/es/groups.json
-trans.sc = public/language/sc/groups.json
-trans.sr = public/language/sr/groups.json
-trans.da = public/language/da/groups.json
-trans.en@pirate = public/language/en-x-pirate/groups.json
-trans.hy = public/language/hy/groups.json
-trans.pt_PT = public/language/pt-PT/groups.json
-trans.ms = public/language/ms/groups.json
-trans.nb = public/language/nb/groups.json
-trans.ro = public/language/ro/groups.json
-trans.vi = public/language/vi/groups.json
-trans.fa_IR = public/language/fa-IR/groups.json
-trans.he = public/language/he/groups.json
-trans.hr = public/language/hr/groups.json
-trans.lv = public/language/lv/groups.json
+trans.ar = public/language/ar/groups.json
+trans.az = public/language/az/groups.json
trans.bg = public/language/bg/groups.json
trans.bn = public/language/bn/groups.json
-trans.ja = public/language/ja/groups.json
-trans.tr = public/language/tr/groups.json
-trans.zh_CN = public/language/zh-CN/groups.json
-trans.ar = public/language/ar/groups.json
trans.cs = public/language/cs/groups.json
-trans.it = public/language/it/groups.json
-trans.sk = public/language/sk/groups.json
+trans.da = public/language/da/groups.json
+trans.de = public/language/de/groups.json
+trans.el = public/language/el/groups.json
+trans.en_US = public/language/en-US/groups.json
+trans.en@pirate = public/language/en-x-pirate/groups.json
+trans.es = public/language/es/groups.json
+trans.et = public/language/et/groups.json
+trans.fa_IR = public/language/fa-IR/groups.json
trans.fi = public/language/fi/groups.json
trans.fr = public/language/fr/groups.json
-trans.sq_AL = public/language/sq-AL/groups.json
-trans.th = public/language/th/groups.json
-trans.id = public/language/id/groups.json
-trans.sl = public/language/sl/groups.json
-trans.sv = public/language/sv/groups.json
-trans.uk = public/language/uk/groups.json
-trans.el = public/language/el/groups.json
-trans.et = public/language/et/groups.json
trans.gl = public/language/gl/groups.json
+trans.he = public/language/he/groups.json
+trans.hr = public/language/hr/groups.json
trans.hu = public/language/hu/groups.json
-trans.pl = public/language/pl/groups.json
-trans.pt_BR = public/language/pt-BR/groups.json
-trans.ru = public/language/ru/groups.json
-trans.rw = public/language/rw/groups.json
-trans.en_US = public/language/en-US/groups.json
+trans.hy = public/language/hy/groups.json
+trans.id = public/language/id/groups.json
+trans.it = public/language/it/groups.json
+trans.ja = public/language/ja/groups.json
trans.ko = public/language/ko/groups.json
trans.lt = public/language/lt/groups.json
+trans.lv = public/language/lv/groups.json
+trans.ms = public/language/ms/groups.json
+trans.nb = public/language/nb/groups.json
trans.nl = public/language/nl/groups.json
+trans.nn_NO = public/language/nn-NO/groups.json
+trans.pl = public/language/pl/groups.json
+trans.pt_BR = public/language/pt-BR/groups.json
+trans.pt_PT = public/language/pt-PT/groups.json
+trans.ro = public/language/ro/groups.json
+trans.ru = public/language/ru/groups.json
+trans.rw = public/language/rw/groups.json
+trans.sc = public/language/sc/groups.json
+trans.sk = public/language/sk/groups.json
+trans.sl = public/language/sl/groups.json
+trans.sq_AL = public/language/sq-AL/groups.json
+trans.sr = public/language/sr/groups.json
+trans.sv = public/language/sv/groups.json
+trans.th = public/language/th/groups.json
+trans.tr = public/language/tr/groups.json
+trans.uk = public/language/uk/groups.json
+trans.ur = public/language/ur/groups.json
+trans.vi = public/language/vi/groups.json
+trans.zh_CN = public/language/zh-CN/groups.json
+trans.zh_TW = public/language/zh-TW/groups.json
[o:nodebb:p:nodebb:r:ip-blacklist]
file_filter = public/language//ip-blacklist.json
source_file = public/language/en-GB/ip-blacklist.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.sr = public/language/sr/ip-blacklist.json
-trans.et = public/language/et/ip-blacklist.json
-trans.fi = public/language/fi/ip-blacklist.json
-trans.hr = public/language/hr/ip-blacklist.json
-trans.hu = public/language/hu/ip-blacklist.json
-trans.ru = public/language/ru/ip-blacklist.json
-trans.sk = public/language/sk/ip-blacklist.json
-trans.sq_AL = public/language/sq-AL/ip-blacklist.json
-trans.zh_CN = public/language/zh-CN/ip-blacklist.json
-trans.da = public/language/da/ip-blacklist.json
-trans.en@pirate = public/language/en-x-pirate/ip-blacklist.json
-trans.he = public/language/he/ip-blacklist.json
-trans.hy = public/language/hy/ip-blacklist.json
-trans.lv = public/language/lv/ip-blacklist.json
-trans.pt_BR = public/language/pt-BR/ip-blacklist.json
-trans.sc = public/language/sc/ip-blacklist.json
trans.ar = public/language/ar/ip-blacklist.json
+trans.az = public/language/az/ip-blacklist.json
+trans.bg = public/language/bg/ip-blacklist.json
+trans.bn = public/language/bn/ip-blacklist.json
+trans.cs = public/language/cs/ip-blacklist.json
+trans.da = public/language/da/ip-blacklist.json
+trans.de = public/language/de/ip-blacklist.json
+trans.el = public/language/el/ip-blacklist.json
+trans.en_US = public/language/en-US/ip-blacklist.json
+trans.en@pirate = public/language/en-x-pirate/ip-blacklist.json
+trans.es = public/language/es/ip-blacklist.json
+trans.et = public/language/et/ip-blacklist.json
trans.fa_IR = public/language/fa-IR/ip-blacklist.json
+trans.fi = public/language/fi/ip-blacklist.json
trans.fr = public/language/fr/ip-blacklist.json
trans.gl = public/language/gl/ip-blacklist.json
-trans.nb = public/language/nb/ip-blacklist.json
-trans.sv = public/language/sv/ip-blacklist.json
-trans.th = public/language/th/ip-blacklist.json
-trans.bn = public/language/bn/ip-blacklist.json
-trans.en_US = public/language/en-US/ip-blacklist.json
-trans.ja = public/language/ja/ip-blacklist.json
-trans.ms = public/language/ms/ip-blacklist.json
-trans.nl = public/language/nl/ip-blacklist.json
-trans.pt_PT = public/language/pt-PT/ip-blacklist.json
-trans.ro = public/language/ro/ip-blacklist.json
-trans.es = public/language/es/ip-blacklist.json
+trans.he = public/language/he/ip-blacklist.json
+trans.hr = public/language/hr/ip-blacklist.json
+trans.hu = public/language/hu/ip-blacklist.json
+trans.hy = public/language/hy/ip-blacklist.json
trans.id = public/language/id/ip-blacklist.json
trans.it = public/language/it/ip-blacklist.json
-trans.uk = public/language/uk/ip-blacklist.json
-trans.vi = public/language/vi/ip-blacklist.json
-trans.zh_TW = public/language/zh-TW/ip-blacklist.json
-trans.bg = public/language/bg/ip-blacklist.json
-trans.de = public/language/de/ip-blacklist.json
-trans.sl = public/language/sl/ip-blacklist.json
-trans.pl = public/language/pl/ip-blacklist.json
-trans.rw = public/language/rw/ip-blacklist.json
-trans.cs = public/language/cs/ip-blacklist.json
-trans.el = public/language/el/ip-blacklist.json
+trans.ja = public/language/ja/ip-blacklist.json
trans.ko = public/language/ko/ip-blacklist.json
trans.lt = public/language/lt/ip-blacklist.json
+trans.lv = public/language/lv/ip-blacklist.json
+trans.ms = public/language/ms/ip-blacklist.json
+trans.nb = public/language/nb/ip-blacklist.json
+trans.nl = public/language/nl/ip-blacklist.json
+trans.nn_NO = public/language/nn-NO/ip-blacklist.json
+trans.pl = public/language/pl/ip-blacklist.json
+trans.pt_BR = public/language/pt-BR/ip-blacklist.json
+trans.pt_PT = public/language/pt-PT/ip-blacklist.json
+trans.ro = public/language/ro/ip-blacklist.json
+trans.ru = public/language/ru/ip-blacklist.json
+trans.rw = public/language/rw/ip-blacklist.json
+trans.sc = public/language/sc/ip-blacklist.json
+trans.sk = public/language/sk/ip-blacklist.json
+trans.sl = public/language/sl/ip-blacklist.json
+trans.sq_AL = public/language/sq-AL/ip-blacklist.json
+trans.sr = public/language/sr/ip-blacklist.json
+trans.sv = public/language/sv/ip-blacklist.json
+trans.th = public/language/th/ip-blacklist.json
trans.tr = public/language/tr/ip-blacklist.json
+trans.uk = public/language/uk/ip-blacklist.json
+trans.ur = public/language/ur/ip-blacklist.json
+trans.vi = public/language/vi/ip-blacklist.json
+trans.zh_CN = public/language/zh-CN/ip-blacklist.json
+trans.zh_TW = public/language/zh-TW/ip-blacklist.json
[o:nodebb:p:nodebb:r:language-1]
file_filter = public/language//language.json
source_file = public/language/en-GB/language.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.lt = public/language/lt/language.json
-trans.vi = public/language/vi/language.json
-trans.sr = public/language/sr/language.json
-trans.tr = public/language/tr/language.json
-trans.uk = public/language/uk/language.json
-trans.bg = public/language/bg/language.json
-trans.da = public/language/da/language.json
-trans.en@pirate = public/language/en-x-pirate/language.json
-trans.hr = public/language/hr/language.json
-trans.rw = public/language/rw/language.json
-trans.en_US = public/language/en-US/language.json
-trans.et = public/language/et/language.json
-trans.ja = public/language/ja/language.json
-trans.nb = public/language/nb/language.json
-trans.sk = public/language/sk/language.json
-trans.el = public/language/el/language.json
-trans.es = public/language/es/language.json
-trans.fi = public/language/fi/language.json
-trans.it = public/language/it/language.json
-trans.pt_PT = public/language/pt-PT/language.json
-trans.ro = public/language/ro/language.json
-trans.th = public/language/th/language.json
trans.ar = public/language/ar/language.json
+trans.az = public/language/az/language.json
+trans.bg = public/language/bg/language.json
trans.bn = public/language/bn/language.json
-trans.de = public/language/de/language.json
-trans.ko = public/language/ko/language.json
-trans.pl = public/language/pl/language.json
-trans.gl = public/language/gl/language.json
-trans.sq_AL = public/language/sq-AL/language.json
-trans.zh_TW = public/language/zh-TW/language.json
-trans.nl = public/language/nl/language.json
-trans.ru = public/language/ru/language.json
-trans.sc = public/language/sc/language.json
trans.cs = public/language/cs/language.json
-trans.fr = public/language/fr/language.json
-trans.he = public/language/he/language.json
-trans.id = public/language/id/language.json
-trans.lv = public/language/lv/language.json
-trans.sl = public/language/sl/language.json
-trans.sv = public/language/sv/language.json
-trans.zh_CN = public/language/zh-CN/language.json
+trans.da = public/language/da/language.json
+trans.de = public/language/de/language.json
+trans.el = public/language/el/language.json
+trans.en_US = public/language/en-US/language.json
+trans.en@pirate = public/language/en-x-pirate/language.json
+trans.es = public/language/es/language.json
+trans.et = public/language/et/language.json
trans.fa_IR = public/language/fa-IR/language.json
+trans.fi = public/language/fi/language.json
+trans.fr = public/language/fr/language.json
+trans.gl = public/language/gl/language.json
+trans.he = public/language/he/language.json
+trans.hr = public/language/hr/language.json
trans.hu = public/language/hu/language.json
trans.hy = public/language/hy/language.json
+trans.id = public/language/id/language.json
+trans.it = public/language/it/language.json
+trans.ja = public/language/ja/language.json
+trans.ko = public/language/ko/language.json
+trans.lt = public/language/lt/language.json
+trans.lv = public/language/lv/language.json
trans.ms = public/language/ms/language.json
+trans.nb = public/language/nb/language.json
+trans.nl = public/language/nl/language.json
+trans.nn_NO = public/language/nn-NO/language.json
+trans.pl = public/language/pl/language.json
trans.pt_BR = public/language/pt-BR/language.json
+trans.pt_PT = public/language/pt-PT/language.json
+trans.ro = public/language/ro/language.json
+trans.ru = public/language/ru/language.json
+trans.rw = public/language/rw/language.json
+trans.sc = public/language/sc/language.json
+trans.sk = public/language/sk/language.json
+trans.sl = public/language/sl/language.json
+trans.sq_AL = public/language/sq-AL/language.json
+trans.sr = public/language/sr/language.json
+trans.sv = public/language/sv/language.json
+trans.th = public/language/th/language.json
+trans.tr = public/language/tr/language.json
+trans.uk = public/language/uk/language.json
+trans.ur = public/language/ur/language.json
+trans.vi = public/language/vi/language.json
+trans.zh_CN = public/language/zh-CN/language.json
+trans.zh_TW = public/language/zh-TW/language.json
[o:nodebb:p:nodebb:r:login]
file_filter = public/language//login.json
source_file = public/language/en-GB/login.json
source_lang = en_GB
type = KEYVALUEJSON
+trans.ar = public/language/ar/login.json
+trans.az = public/language/az/login.json
+trans.bg = public/language/bg/login.json
trans.bn = public/language/bn/login.json
trans.cs = public/language/cs/login.json
-trans.el = public/language/el/login.json
-trans.ja = public/language/ja/login.json
-trans.pt_BR = public/language/pt-BR/login.json
-trans.ro = public/language/ro/login.json
-trans.zh_TW = public/language/zh-TW/login.json
-trans.bg = public/language/bg/login.json
-trans.pt_PT = public/language/pt-PT/login.json
-trans.sr = public/language/sr/login.json
-trans.vi = public/language/vi/login.json
-trans.zh_CN = public/language/zh-CN/login.json
-trans.pl = public/language/pl/login.json
-trans.gl = public/language/gl/login.json
-trans.ko = public/language/ko/login.json
-trans.lv = public/language/lv/login.json
-trans.sl = public/language/sl/login.json
-trans.sq_AL = public/language/sq-AL/login.json
-trans.sv = public/language/sv/login.json
-trans.tr = public/language/tr/login.json
-trans.es = public/language/es/login.json
-trans.sk = public/language/sk/login.json
-trans.uk = public/language/uk/login.json
-trans.it = public/language/it/login.json
trans.da = public/language/da/login.json
+trans.de = public/language/de/login.json
+trans.el = public/language/el/login.json
+trans.en_US = public/language/en-US/login.json
+trans.en@pirate = public/language/en-x-pirate/login.json
+trans.es = public/language/es/login.json
+trans.et = public/language/et/login.json
trans.fa_IR = public/language/fa-IR/login.json
trans.fi = public/language/fi/login.json
trans.fr = public/language/fr/login.json
+trans.gl = public/language/gl/login.json
trans.he = public/language/he/login.json
trans.hr = public/language/hr/login.json
-trans.ar = public/language/ar/login.json
-trans.en_US = public/language/en-US/login.json
trans.hu = public/language/hu/login.json
-trans.ms = public/language/ms/login.json
-trans.en@pirate = public/language/en-x-pirate/login.json
trans.hy = public/language/hy/login.json
trans.id = public/language/id/login.json
+trans.it = public/language/it/login.json
+trans.ja = public/language/ja/login.json
+trans.ko = public/language/ko/login.json
+trans.lt = public/language/lt/login.json
+trans.lv = public/language/lv/login.json
+trans.ms = public/language/ms/login.json
trans.nb = public/language/nb/login.json
+trans.nl = public/language/nl/login.json
+trans.nn_NO = public/language/nn-NO/login.json
+trans.pl = public/language/pl/login.json
+trans.pt_BR = public/language/pt-BR/login.json
+trans.pt_PT = public/language/pt-PT/login.json
+trans.ro = public/language/ro/login.json
trans.ru = public/language/ru/login.json
trans.rw = public/language/rw/login.json
-trans.th = public/language/th/login.json
-trans.et = public/language/et/login.json
-trans.lt = public/language/lt/login.json
-trans.nl = public/language/nl/login.json
trans.sc = public/language/sc/login.json
-trans.de = public/language/de/login.json
+trans.sk = public/language/sk/login.json
+trans.sl = public/language/sl/login.json
+trans.sq_AL = public/language/sq-AL/login.json
+trans.sr = public/language/sr/login.json
+trans.sv = public/language/sv/login.json
+trans.th = public/language/th/login.json
+trans.tr = public/language/tr/login.json
+trans.uk = public/language/uk/login.json
+trans.ur = public/language/ur/login.json
+trans.vi = public/language/vi/login.json
+trans.zh_CN = public/language/zh-CN/login.json
+trans.zh_TW = public/language/zh-TW/login.json
[o:nodebb:p:nodebb:r:modules]
file_filter = public/language//modules.json
source_file = public/language/en-GB/modules.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.sl = public/language/sl/modules.json
-trans.sq_AL = public/language/sq-AL/modules.json
-trans.da = public/language/da/modules.json
-trans.et = public/language/et/modules.json
-trans.fr = public/language/fr/modules.json
-trans.lt = public/language/lt/modules.json
-trans.ms = public/language/ms/modules.json
-trans.sk = public/language/sk/modules.json
-trans.vi = public/language/vi/modules.json
-trans.fa_IR = public/language/fa-IR/modules.json
-trans.hr = public/language/hr/modules.json
-trans.lv = public/language/lv/modules.json
-trans.nb = public/language/nb/modules.json
-trans.ro = public/language/ro/modules.json
-trans.sv = public/language/sv/modules.json
-trans.en@pirate = public/language/en-x-pirate/modules.json
-trans.tr = public/language/tr/modules.json
-trans.cs = public/language/cs/modules.json
-trans.de = public/language/de/modules.json
-trans.fi = public/language/fi/modules.json
-trans.he = public/language/he/modules.json
-trans.hy = public/language/hy/modules.json
-trans.sr = public/language/sr/modules.json
-trans.el = public/language/el/modules.json
-trans.hu = public/language/hu/modules.json
-trans.ko = public/language/ko/modules.json
-trans.es = public/language/es/modules.json
-trans.id = public/language/id/modules.json
-trans.nl = public/language/nl/modules.json
-trans.sc = public/language/sc/modules.json
-trans.th = public/language/th/modules.json
-trans.zh_TW = public/language/zh-TW/modules.json
+trans.ar = public/language/ar/modules.json
+trans.az = public/language/az/modules.json
trans.bg = public/language/bg/modules.json
trans.bn = public/language/bn/modules.json
+trans.cs = public/language/cs/modules.json
+trans.da = public/language/da/modules.json
+trans.de = public/language/de/modules.json
+trans.el = public/language/el/modules.json
trans.en_US = public/language/en-US/modules.json
-trans.it = public/language/it/modules.json
-trans.pl = public/language/pl/modules.json
-trans.uk = public/language/uk/modules.json
-trans.rw = public/language/rw/modules.json
-trans.zh_CN = public/language/zh-CN/modules.json
-trans.ar = public/language/ar/modules.json
+trans.en@pirate = public/language/en-x-pirate/modules.json
+trans.es = public/language/es/modules.json
+trans.et = public/language/et/modules.json
+trans.fa_IR = public/language/fa-IR/modules.json
+trans.fi = public/language/fi/modules.json
+trans.fr = public/language/fr/modules.json
trans.gl = public/language/gl/modules.json
+trans.he = public/language/he/modules.json
+trans.hr = public/language/hr/modules.json
+trans.hu = public/language/hu/modules.json
+trans.hy = public/language/hy/modules.json
+trans.id = public/language/id/modules.json
+trans.it = public/language/it/modules.json
trans.ja = public/language/ja/modules.json
+trans.ko = public/language/ko/modules.json
+trans.lt = public/language/lt/modules.json
+trans.lv = public/language/lv/modules.json
+trans.ms = public/language/ms/modules.json
+trans.nb = public/language/nb/modules.json
+trans.nl = public/language/nl/modules.json
+trans.nn_NO = public/language/nn-NO/modules.json
+trans.pl = public/language/pl/modules.json
trans.pt_BR = public/language/pt-BR/modules.json
trans.pt_PT = public/language/pt-PT/modules.json
+trans.ro = public/language/ro/modules.json
trans.ru = public/language/ru/modules.json
+trans.rw = public/language/rw/modules.json
+trans.sc = public/language/sc/modules.json
+trans.sk = public/language/sk/modules.json
+trans.sl = public/language/sl/modules.json
+trans.sq_AL = public/language/sq-AL/modules.json
+trans.sr = public/language/sr/modules.json
+trans.sv = public/language/sv/modules.json
+trans.th = public/language/th/modules.json
+trans.tr = public/language/tr/modules.json
+trans.uk = public/language/uk/modules.json
+trans.ur = public/language/ur/modules.json
+trans.vi = public/language/vi/modules.json
+trans.zh_CN = public/language/zh-CN/modules.json
+trans.zh_TW = public/language/zh-TW/modules.json
[o:nodebb:p:nodebb:r:notifications]
file_filter = public/language//notifications.json
source_file = public/language/en-GB/notifications.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.ru = public/language/ru/notifications.json
-trans.sq_AL = public/language/sq-AL/notifications.json
+trans.ar = public/language/ar/notifications.json
+trans.az = public/language/az/notifications.json
+trans.bg = public/language/bg/notifications.json
+trans.bn = public/language/bn/notifications.json
+trans.cs = public/language/cs/notifications.json
+trans.da = public/language/da/notifications.json
+trans.de = public/language/de/notifications.json
trans.el = public/language/el/notifications.json
trans.en_US = public/language/en-US/notifications.json
+trans.en@pirate = public/language/en-x-pirate/notifications.json
+trans.es = public/language/es/notifications.json
+trans.et = public/language/et/notifications.json
+trans.fa_IR = public/language/fa-IR/notifications.json
+trans.fi = public/language/fi/notifications.json
+trans.fr = public/language/fr/notifications.json
+trans.gl = public/language/gl/notifications.json
+trans.he = public/language/he/notifications.json
+trans.hr = public/language/hr/notifications.json
+trans.hu = public/language/hu/notifications.json
+trans.hy = public/language/hy/notifications.json
+trans.id = public/language/id/notifications.json
+trans.it = public/language/it/notifications.json
trans.ja = public/language/ja/notifications.json
+trans.ko = public/language/ko/notifications.json
+trans.lt = public/language/lt/notifications.json
+trans.lv = public/language/lv/notifications.json
+trans.ms = public/language/ms/notifications.json
+trans.nb = public/language/nb/notifications.json
+trans.nl = public/language/nl/notifications.json
+trans.nn_NO = public/language/nn-NO/notifications.json
trans.pl = public/language/pl/notifications.json
+trans.pt_BR = public/language/pt-BR/notifications.json
+trans.pt_PT = public/language/pt-PT/notifications.json
+trans.ro = public/language/ro/notifications.json
+trans.ru = public/language/ru/notifications.json
+trans.rw = public/language/rw/notifications.json
+trans.sc = public/language/sc/notifications.json
+trans.sk = public/language/sk/notifications.json
+trans.sl = public/language/sl/notifications.json
+trans.sq_AL = public/language/sq-AL/notifications.json
trans.sr = public/language/sr/notifications.json
+trans.sv = public/language/sv/notifications.json
trans.th = public/language/th/notifications.json
trans.tr = public/language/tr/notifications.json
-trans.zh_CN = public/language/zh-CN/notifications.json
-trans.cs = public/language/cs/notifications.json
-trans.de = public/language/de/notifications.json
-trans.fa_IR = public/language/fa-IR/notifications.json
-trans.sl = public/language/sl/notifications.json
-trans.sc = public/language/sc/notifications.json
trans.uk = public/language/uk/notifications.json
-trans.bn = public/language/bn/notifications.json
-trans.fi = public/language/fi/notifications.json
-trans.lt = public/language/lt/notifications.json
-trans.pt_PT = public/language/pt-PT/notifications.json
-trans.es = public/language/es/notifications.json
-trans.gl = public/language/gl/notifications.json
-trans.sv = public/language/sv/notifications.json
-trans.zh_TW = public/language/zh-TW/notifications.json
-trans.pt_BR = public/language/pt-BR/notifications.json
-trans.rw = public/language/rw/notifications.json
-trans.lv = public/language/lv/notifications.json
-trans.bg = public/language/bg/notifications.json
-trans.he = public/language/he/notifications.json
-trans.hu = public/language/hu/notifications.json
-trans.it = public/language/it/notifications.json
-trans.nl = public/language/nl/notifications.json
-trans.ro = public/language/ro/notifications.json
-trans.sk = public/language/sk/notifications.json
+trans.ur = public/language/ur/notifications.json
trans.vi = public/language/vi/notifications.json
-trans.et = public/language/et/notifications.json
-trans.hy = public/language/hy/notifications.json
-trans.ko = public/language/ko/notifications.json
-trans.ms = public/language/ms/notifications.json
-trans.hr = public/language/hr/notifications.json
-trans.id = public/language/id/notifications.json
-trans.nb = public/language/nb/notifications.json
-trans.ar = public/language/ar/notifications.json
-trans.da = public/language/da/notifications.json
-trans.en@pirate = public/language/en-x-pirate/notifications.json
-trans.fr = public/language/fr/notifications.json
+trans.zh_CN = public/language/zh-CN/notifications.json
+trans.zh_TW = public/language/zh-TW/notifications.json
[o:nodebb:p:nodebb:r:pages]
file_filter = public/language//pages.json
source_file = public/language/en-GB/pages.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.he = public/language/he/pages.json
-trans.nb = public/language/nb/pages.json
-trans.sv = public/language/sv/pages.json
-trans.pt_BR = public/language/pt-BR/pages.json
-trans.tr = public/language/tr/pages.json
-trans.zh_TW = public/language/zh-TW/pages.json
-trans.bn = public/language/bn/pages.json
-trans.gl = public/language/gl/pages.json
-trans.hr = public/language/hr/pages.json
-trans.id = public/language/id/pages.json
-trans.lt = public/language/lt/pages.json
-trans.zh_CN = public/language/zh-CN/pages.json
+trans.ar = public/language/ar/pages.json
+trans.az = public/language/az/pages.json
trans.bg = public/language/bg/pages.json
-trans.et = public/language/et/pages.json
-trans.it = public/language/it/pages.json
-trans.ro = public/language/ro/pages.json
-trans.sl = public/language/sl/pages.json
-trans.sk = public/language/sk/pages.json
-trans.sr = public/language/sr/pages.json
-trans.uk = public/language/uk/pages.json
+trans.bn = public/language/bn/pages.json
+trans.cs = public/language/cs/pages.json
+trans.da = public/language/da/pages.json
trans.de = public/language/de/pages.json
-trans.en@pirate = public/language/en-x-pirate/pages.json
+trans.el = public/language/el/pages.json
trans.en_US = public/language/en-US/pages.json
-trans.pt_PT = public/language/pt-PT/pages.json
-trans.rw = public/language/rw/pages.json
-trans.th = public/language/th/pages.json
-trans.vi = public/language/vi/pages.json
+trans.en@pirate = public/language/en-x-pirate/pages.json
+trans.es = public/language/es/pages.json
+trans.et = public/language/et/pages.json
+trans.fa_IR = public/language/fa-IR/pages.json
+trans.fi = public/language/fi/pages.json
+trans.fr = public/language/fr/pages.json
+trans.gl = public/language/gl/pages.json
+trans.he = public/language/he/pages.json
+trans.hr = public/language/hr/pages.json
trans.hu = public/language/hu/pages.json
trans.hy = public/language/hy/pages.json
-trans.nl = public/language/nl/pages.json
-trans.ru = public/language/ru/pages.json
-trans.sc = public/language/sc/pages.json
-trans.cs = public/language/cs/pages.json
-trans.fi = public/language/fi/pages.json
-trans.ko = public/language/ko/pages.json
-trans.lv = public/language/lv/pages.json
-trans.sq_AL = public/language/sq-AL/pages.json
-trans.ar = public/language/ar/pages.json
-trans.da = public/language/da/pages.json
-trans.es = public/language/es/pages.json
-trans.pl = public/language/pl/pages.json
-trans.el = public/language/el/pages.json
-trans.fa_IR = public/language/fa-IR/pages.json
-trans.fr = public/language/fr/pages.json
+trans.id = public/language/id/pages.json
+trans.it = public/language/it/pages.json
trans.ja = public/language/ja/pages.json
+trans.ko = public/language/ko/pages.json
+trans.lt = public/language/lt/pages.json
+trans.lv = public/language/lv/pages.json
trans.ms = public/language/ms/pages.json
+trans.nb = public/language/nb/pages.json
+trans.nl = public/language/nl/pages.json
+trans.nn_NO = public/language/nn-NO/pages.json
+trans.pl = public/language/pl/pages.json
+trans.pt_BR = public/language/pt-BR/pages.json
+trans.pt_PT = public/language/pt-PT/pages.json
+trans.ro = public/language/ro/pages.json
+trans.ru = public/language/ru/pages.json
+trans.rw = public/language/rw/pages.json
+trans.sc = public/language/sc/pages.json
+trans.sk = public/language/sk/pages.json
+trans.sl = public/language/sl/pages.json
+trans.sq_AL = public/language/sq-AL/pages.json
+trans.sr = public/language/sr/pages.json
+trans.sv = public/language/sv/pages.json
+trans.th = public/language/th/pages.json
+trans.tr = public/language/tr/pages.json
+trans.uk = public/language/uk/pages.json
+trans.ur = public/language/ur/pages.json
+trans.vi = public/language/vi/pages.json
+trans.zh_CN = public/language/zh-CN/pages.json
+trans.zh_TW = public/language/zh-TW/pages.json
[o:nodebb:p:nodebb:r:post-queue]
file_filter = public/language//post-queue.json
source_file = public/language/en-GB/post-queue.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.it = public/language/it/post-queue.json
-trans.ko = public/language/ko/post-queue.json
-trans.lv = public/language/lv/post-queue.json
-trans.nl = public/language/nl/post-queue.json
-trans.rw = public/language/rw/post-queue.json
+trans.ar = public/language/ar/post-queue.json
+trans.az = public/language/az/post-queue.json
+trans.bg = public/language/bg/post-queue.json
+trans.bn = public/language/bn/post-queue.json
+trans.cs = public/language/cs/post-queue.json
trans.da = public/language/da/post-queue.json
trans.de = public/language/de/post-queue.json
trans.el = public/language/el/post-queue.json
-trans.sk = public/language/sk/post-queue.json
-trans.sc = public/language/sc/post-queue.json
-trans.sr = public/language/sr/post-queue.json
-trans.tr = public/language/tr/post-queue.json
-trans.uk = public/language/uk/post-queue.json
-trans.ja = public/language/ja/post-queue.json
-trans.ms = public/language/ms/post-queue.json
-trans.ru = public/language/ru/post-queue.json
-trans.fr = public/language/fr/post-queue.json
-trans.hu = public/language/hu/post-queue.json
-trans.lt = public/language/lt/post-queue.json
-trans.pl = public/language/pl/post-queue.json
-trans.ro = public/language/ro/post-queue.json
-trans.bn = public/language/bn/post-queue.json
-trans.en@pirate = public/language/en-x-pirate/post-queue.json
-trans.fa_IR = public/language/fa-IR/post-queue.json
-trans.sl = public/language/sl/post-queue.json
-trans.vi = public/language/vi/post-queue.json
-trans.zh_CN = public/language/zh-CN/post-queue.json
-trans.id = public/language/id/post-queue.json
trans.en_US = public/language/en-US/post-queue.json
-trans.sq_AL = public/language/sq-AL/post-queue.json
-trans.sv = public/language/sv/post-queue.json
-trans.zh_TW = public/language/zh-TW/post-queue.json
-trans.ar = public/language/ar/post-queue.json
-trans.bg = public/language/bg/post-queue.json
-trans.cs = public/language/cs/post-queue.json
-trans.hr = public/language/hr/post-queue.json
-trans.pt_BR = public/language/pt-BR/post-queue.json
-trans.th = public/language/th/post-queue.json
+trans.en@pirate = public/language/en-x-pirate/post-queue.json
trans.es = public/language/es/post-queue.json
trans.et = public/language/et/post-queue.json
-trans.gl = public/language/gl/post-queue.json
-trans.hy = public/language/hy/post-queue.json
-trans.pt_PT = public/language/pt-PT/post-queue.json
+trans.fa_IR = public/language/fa-IR/post-queue.json
trans.fi = public/language/fi/post-queue.json
+trans.fr = public/language/fr/post-queue.json
+trans.gl = public/language/gl/post-queue.json
trans.he = public/language/he/post-queue.json
+trans.hr = public/language/hr/post-queue.json
+trans.hu = public/language/hu/post-queue.json
+trans.hy = public/language/hy/post-queue.json
+trans.id = public/language/id/post-queue.json
+trans.it = public/language/it/post-queue.json
+trans.ja = public/language/ja/post-queue.json
+trans.ko = public/language/ko/post-queue.json
+trans.lt = public/language/lt/post-queue.json
+trans.lv = public/language/lv/post-queue.json
+trans.ms = public/language/ms/post-queue.json
trans.nb = public/language/nb/post-queue.json
+trans.nl = public/language/nl/post-queue.json
+trans.nn_NO = public/language/nn-NO/post-queue.json
+trans.pl = public/language/pl/post-queue.json
+trans.pt_BR = public/language/pt-BR/post-queue.json
+trans.pt_PT = public/language/pt-PT/post-queue.json
+trans.ro = public/language/ro/post-queue.json
+trans.ru = public/language/ru/post-queue.json
+trans.rw = public/language/rw/post-queue.json
+trans.sc = public/language/sc/post-queue.json
+trans.sk = public/language/sk/post-queue.json
+trans.sl = public/language/sl/post-queue.json
+trans.sq_AL = public/language/sq-AL/post-queue.json
+trans.sr = public/language/sr/post-queue.json
+trans.sv = public/language/sv/post-queue.json
+trans.th = public/language/th/post-queue.json
+trans.tr = public/language/tr/post-queue.json
+trans.uk = public/language/uk/post-queue.json
+trans.ur = public/language/ur/post-queue.json
+trans.vi = public/language/vi/post-queue.json
+trans.zh_CN = public/language/zh-CN/post-queue.json
+trans.zh_TW = public/language/zh-TW/post-queue.json
[o:nodebb:p:nodebb:r:recent]
file_filter = public/language//recent.json
source_file = public/language/en-GB/recent.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.sq_AL = public/language/sq-AL/recent.json
-trans.sr = public/language/sr/recent.json
-trans.sk = public/language/sk/recent.json
-trans.uk = public/language/uk/recent.json
+trans.ar = public/language/ar/recent.json
+trans.az = public/language/az/recent.json
trans.bg = public/language/bg/recent.json
+trans.bn = public/language/bn/recent.json
trans.cs = public/language/cs/recent.json
trans.da = public/language/da/recent.json
-trans.hy = public/language/hy/recent.json
-trans.id = public/language/id/recent.json
-trans.lv = public/language/lv/recent.json
-trans.ar = public/language/ar/recent.json
trans.de = public/language/de/recent.json
-trans.es = public/language/es/recent.json
-trans.fa_IR = public/language/fa-IR/recent.json
-trans.gl = public/language/gl/recent.json
-trans.hu = public/language/hu/recent.json
-trans.lt = public/language/lt/recent.json
-trans.pt_BR = public/language/pt-BR/recent.json
-trans.ru = public/language/ru/recent.json
-trans.vi = public/language/vi/recent.json
-trans.rw = public/language/rw/recent.json
-trans.sl = public/language/sl/recent.json
trans.el = public/language/el/recent.json
trans.en_US = public/language/en-US/recent.json
+trans.en@pirate = public/language/en-x-pirate/recent.json
+trans.es = public/language/es/recent.json
+trans.et = public/language/et/recent.json
+trans.fa_IR = public/language/fa-IR/recent.json
+trans.fi = public/language/fi/recent.json
+trans.fr = public/language/fr/recent.json
+trans.gl = public/language/gl/recent.json
trans.he = public/language/he/recent.json
trans.hr = public/language/hr/recent.json
-trans.ro = public/language/ro/recent.json
-trans.tr = public/language/tr/recent.json
-trans.zh_CN = public/language/zh-CN/recent.json
-trans.bn = public/language/bn/recent.json
-trans.en@pirate = public/language/en-x-pirate/recent.json
+trans.hu = public/language/hu/recent.json
+trans.hy = public/language/hy/recent.json
+trans.id = public/language/id/recent.json
+trans.it = public/language/it/recent.json
trans.ja = public/language/ja/recent.json
+trans.ko = public/language/ko/recent.json
+trans.lt = public/language/lt/recent.json
+trans.lv = public/language/lv/recent.json
+trans.ms = public/language/ms/recent.json
trans.nb = public/language/nb/recent.json
trans.nl = public/language/nl/recent.json
+trans.nn_NO = public/language/nn-NO/recent.json
+trans.pl = public/language/pl/recent.json
+trans.pt_BR = public/language/pt-BR/recent.json
+trans.pt_PT = public/language/pt-PT/recent.json
+trans.ro = public/language/ro/recent.json
+trans.ru = public/language/ru/recent.json
+trans.rw = public/language/rw/recent.json
+trans.sc = public/language/sc/recent.json
+trans.sk = public/language/sk/recent.json
+trans.sl = public/language/sl/recent.json
+trans.sq_AL = public/language/sq-AL/recent.json
+trans.sr = public/language/sr/recent.json
trans.sv = public/language/sv/recent.json
trans.th = public/language/th/recent.json
-trans.fr = public/language/fr/recent.json
-trans.it = public/language/it/recent.json
-trans.ms = public/language/ms/recent.json
-trans.pl = public/language/pl/recent.json
-trans.pt_PT = public/language/pt-PT/recent.json
-trans.et = public/language/et/recent.json
-trans.fi = public/language/fi/recent.json
-trans.ko = public/language/ko/recent.json
-trans.sc = public/language/sc/recent.json
+trans.tr = public/language/tr/recent.json
+trans.uk = public/language/uk/recent.json
+trans.ur = public/language/ur/recent.json
+trans.vi = public/language/vi/recent.json
+trans.zh_CN = public/language/zh-CN/recent.json
trans.zh_TW = public/language/zh-TW/recent.json
[o:nodebb:p:nodebb:r:register]
@@ -3281,674 +3524,767 @@ file_filter = public/language//register.json
source_file = public/language/en-GB/register.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.sq_AL = public/language/sq-AL/register.json
-trans.tr = public/language/tr/register.json
-trans.et = public/language/et/register.json
-trans.he = public/language/he/register.json
-trans.lv = public/language/lv/register.json
-trans.nl = public/language/nl/register.json
-trans.sc = public/language/sc/register.json
-trans.en@pirate = public/language/en-x-pirate/register.json
-trans.es = public/language/es/register.json
-trans.pl = public/language/pl/register.json
-trans.sl = public/language/sl/register.json
-trans.uk = public/language/uk/register.json
-trans.pt_PT = public/language/pt-PT/register.json
trans.ar = public/language/ar/register.json
+trans.az = public/language/az/register.json
trans.bg = public/language/bg/register.json
-trans.de = public/language/de/register.json
-trans.hr = public/language/hr/register.json
-trans.nb = public/language/nb/register.json
-trans.gl = public/language/gl/register.json
-trans.sk = public/language/sk/register.json
-trans.hy = public/language/hy/register.json
-trans.ko = public/language/ko/register.json
-trans.ms = public/language/ms/register.json
-trans.ro = public/language/ro/register.json
-trans.rw = public/language/rw/register.json
-trans.zh_CN = public/language/zh-CN/register.json
-trans.fi = public/language/fi/register.json
-trans.it = public/language/it/register.json
-trans.ru = public/language/ru/register.json
-trans.sr = public/language/sr/register.json
-trans.vi = public/language/vi/register.json
-trans.sv = public/language/sv/register.json
-trans.zh_TW = public/language/zh-TW/register.json
trans.bn = public/language/bn/register.json
trans.cs = public/language/cs/register.json
-trans.fa_IR = public/language/fa-IR/register.json
-trans.hu = public/language/hu/register.json
-trans.lt = public/language/lt/register.json
-trans.ja = public/language/ja/register.json
-trans.pt_BR = public/language/pt-BR/register.json
-trans.th = public/language/th/register.json
trans.da = public/language/da/register.json
+trans.de = public/language/de/register.json
trans.el = public/language/el/register.json
trans.en_US = public/language/en-US/register.json
+trans.en@pirate = public/language/en-x-pirate/register.json
+trans.es = public/language/es/register.json
+trans.et = public/language/et/register.json
+trans.fa_IR = public/language/fa-IR/register.json
+trans.fi = public/language/fi/register.json
trans.fr = public/language/fr/register.json
+trans.gl = public/language/gl/register.json
+trans.he = public/language/he/register.json
+trans.hr = public/language/hr/register.json
+trans.hu = public/language/hu/register.json
+trans.hy = public/language/hy/register.json
trans.id = public/language/id/register.json
+trans.it = public/language/it/register.json
+trans.ja = public/language/ja/register.json
+trans.ko = public/language/ko/register.json
+trans.lt = public/language/lt/register.json
+trans.lv = public/language/lv/register.json
+trans.ms = public/language/ms/register.json
+trans.nb = public/language/nb/register.json
+trans.nl = public/language/nl/register.json
+trans.nn_NO = public/language/nn-NO/register.json
+trans.pl = public/language/pl/register.json
+trans.pt_BR = public/language/pt-BR/register.json
+trans.pt_PT = public/language/pt-PT/register.json
+trans.ro = public/language/ro/register.json
+trans.ru = public/language/ru/register.json
+trans.rw = public/language/rw/register.json
+trans.sc = public/language/sc/register.json
+trans.sk = public/language/sk/register.json
+trans.sl = public/language/sl/register.json
+trans.sq_AL = public/language/sq-AL/register.json
+trans.sr = public/language/sr/register.json
+trans.sv = public/language/sv/register.json
+trans.th = public/language/th/register.json
+trans.tr = public/language/tr/register.json
+trans.uk = public/language/uk/register.json
+trans.ur = public/language/ur/register.json
+trans.vi = public/language/vi/register.json
+trans.zh_CN = public/language/zh-CN/register.json
+trans.zh_TW = public/language/zh-TW/register.json
[o:nodebb:p:nodebb:r:reset_password]
file_filter = public/language//reset_password.json
source_file = public/language/en-GB/reset_password.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.bg = public/language/bg/reset_password.json
-trans.fr = public/language/fr/reset_password.json
-trans.hr = public/language/hr/reset_password.json
-trans.hy = public/language/hy/reset_password.json
-trans.ja = public/language/ja/reset_password.json
-trans.pt_PT = public/language/pt-PT/reset_password.json
-trans.zh_CN = public/language/zh-CN/reset_password.json
-trans.sv = public/language/sv/reset_password.json
-trans.de = public/language/de/reset_password.json
-trans.fa_IR = public/language/fa-IR/reset_password.json
-trans.gl = public/language/gl/reset_password.json
-trans.hu = public/language/hu/reset_password.json
-trans.id = public/language/id/reset_password.json
-trans.rw = public/language/rw/reset_password.json
-trans.sc = public/language/sc/reset_password.json
-trans.vi = public/language/vi/reset_password.json
-trans.bn = public/language/bn/reset_password.json
-trans.he = public/language/he/reset_password.json
-trans.ro = public/language/ro/reset_password.json
-trans.sq_AL = public/language/sq-AL/reset_password.json
trans.ar = public/language/ar/reset_password.json
+trans.az = public/language/az/reset_password.json
+trans.bg = public/language/bg/reset_password.json
+trans.bn = public/language/bn/reset_password.json
trans.cs = public/language/cs/reset_password.json
-trans.ko = public/language/ko/reset_password.json
-trans.ms = public/language/ms/reset_password.json
-trans.pt_BR = public/language/pt-BR/reset_password.json
-trans.sr = public/language/sr/reset_password.json
-trans.tr = public/language/tr/reset_password.json
-trans.ru = public/language/ru/reset_password.json
-trans.zh_TW = public/language/zh-TW/reset_password.json
trans.da = public/language/da/reset_password.json
-trans.en@pirate = public/language/en-x-pirate/reset_password.json
-trans.en_US = public/language/en-US/reset_password.json
-trans.lt = public/language/lt/reset_password.json
-trans.lv = public/language/lv/reset_password.json
-trans.nb = public/language/nb/reset_password.json
-trans.sk = public/language/sk/reset_password.json
+trans.de = public/language/de/reset_password.json
trans.el = public/language/el/reset_password.json
+trans.en_US = public/language/en-US/reset_password.json
+trans.en@pirate = public/language/en-x-pirate/reset_password.json
trans.es = public/language/es/reset_password.json
trans.et = public/language/et/reset_password.json
-trans.uk = public/language/uk/reset_password.json
+trans.fa_IR = public/language/fa-IR/reset_password.json
trans.fi = public/language/fi/reset_password.json
+trans.fr = public/language/fr/reset_password.json
+trans.gl = public/language/gl/reset_password.json
+trans.he = public/language/he/reset_password.json
+trans.hr = public/language/hr/reset_password.json
+trans.hu = public/language/hu/reset_password.json
+trans.hy = public/language/hy/reset_password.json
+trans.id = public/language/id/reset_password.json
trans.it = public/language/it/reset_password.json
+trans.ja = public/language/ja/reset_password.json
+trans.ko = public/language/ko/reset_password.json
+trans.lt = public/language/lt/reset_password.json
+trans.lv = public/language/lv/reset_password.json
+trans.ms = public/language/ms/reset_password.json
+trans.nb = public/language/nb/reset_password.json
trans.nl = public/language/nl/reset_password.json
+trans.nn_NO = public/language/nn-NO/reset_password.json
trans.pl = public/language/pl/reset_password.json
+trans.pt_BR = public/language/pt-BR/reset_password.json
+trans.pt_PT = public/language/pt-PT/reset_password.json
+trans.ro = public/language/ro/reset_password.json
+trans.ru = public/language/ru/reset_password.json
+trans.rw = public/language/rw/reset_password.json
+trans.sc = public/language/sc/reset_password.json
+trans.sk = public/language/sk/reset_password.json
trans.sl = public/language/sl/reset_password.json
+trans.sq_AL = public/language/sq-AL/reset_password.json
+trans.sr = public/language/sr/reset_password.json
+trans.sv = public/language/sv/reset_password.json
trans.th = public/language/th/reset_password.json
+trans.tr = public/language/tr/reset_password.json
+trans.uk = public/language/uk/reset_password.json
+trans.ur = public/language/ur/reset_password.json
+trans.vi = public/language/vi/reset_password.json
+trans.zh_CN = public/language/zh-CN/reset_password.json
+trans.zh_TW = public/language/zh-TW/reset_password.json
[o:nodebb:p:nodebb:r:rewards]
file_filter = public/language//rewards.json
source_file = public/language/en-GB/rewards.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.bg = public/language/bg/rewards.json
-trans.fr = public/language/fr/rewards.json
-trans.hr = public/language/hr/rewards.json
-trans.hy = public/language/hy/rewards.json
-trans.ja = public/language/ja/rewards.json
-trans.pt_PT = public/language/pt-PT/rewards.json
-trans.zh_CN = public/language/zh-CN/rewards.json
-trans.sv = public/language/sv/rewards.json
-trans.de = public/language/de/rewards.json
-trans.fa_IR = public/language/fa-IR/rewards.json
-trans.gl = public/language/gl/rewards.json
-trans.hu = public/language/hu/rewards.json
-trans.id = public/language/id/rewards.json
-trans.rw = public/language/rw/rewards.json
-trans.sc = public/language/sc/rewards.json
-trans.vi = public/language/vi/rewards.json
-trans.bn = public/language/bn/rewards.json
-trans.he = public/language/he/rewards.json
-trans.ro = public/language/ro/rewards.json
-trans.sq_AL = public/language/sq-AL/rewards.json
trans.ar = public/language/ar/rewards.json
+trans.az = public/language/az/rewards.json
+trans.bg = public/language/bg/rewards.json
+trans.bn = public/language/bn/rewards.json
trans.cs = public/language/cs/rewards.json
-trans.ko = public/language/ko/rewards.json
-trans.ms = public/language/ms/rewards.json
-trans.pt_BR = public/language/pt-BR/rewards.json
-trans.sr = public/language/sr/rewards.json
-trans.tr = public/language/tr/rewards.json
-trans.ru = public/language/ru/rewards.json
-trans.zh_TW = public/language/zh-TW/rewards.json
trans.da = public/language/da/rewards.json
-trans.en@pirate = public/language/en-x-pirate/rewards.json
-trans.en_US = public/language/en-US/rewards.json
-trans.lt = public/language/lt/rewards.json
-trans.lv = public/language/lv/rewards.json
-trans.nb = public/language/nb/rewards.json
-trans.sk = public/language/sk/rewards.json
+trans.de = public/language/de/rewards.json
trans.el = public/language/el/rewards.json
+trans.en_US = public/language/en-US/rewards.json
+trans.en@pirate = public/language/en-x-pirate/rewards.json
trans.es = public/language/es/rewards.json
trans.et = public/language/et/rewards.json
-trans.uk = public/language/uk/rewards.json
+trans.fa_IR = public/language/fa-IR/rewards.json
trans.fi = public/language/fi/rewards.json
+trans.fr = public/language/fr/rewards.json
+trans.gl = public/language/gl/rewards.json
+trans.he = public/language/he/rewards.json
+trans.hr = public/language/hr/rewards.json
+trans.hu = public/language/hu/rewards.json
+trans.hy = public/language/hy/rewards.json
+trans.id = public/language/id/rewards.json
trans.it = public/language/it/rewards.json
+trans.ja = public/language/ja/rewards.json
+trans.ko = public/language/ko/rewards.json
+trans.lt = public/language/lt/rewards.json
+trans.lv = public/language/lv/rewards.json
+trans.ms = public/language/ms/rewards.json
+trans.nb = public/language/nb/rewards.json
trans.nl = public/language/nl/rewards.json
+trans.nn_NO = public/language/nn-NO/rewards.json
trans.pl = public/language/pl/rewards.json
+trans.pt_BR = public/language/pt-BR/rewards.json
+trans.pt_PT = public/language/pt-PT/rewards.json
+trans.ro = public/language/ro/rewards.json
+trans.ru = public/language/ru/rewards.json
+trans.rw = public/language/rw/rewards.json
+trans.sc = public/language/sc/rewards.json
+trans.sk = public/language/sk/rewards.json
trans.sl = public/language/sl/rewards.json
+trans.sq_AL = public/language/sq-AL/rewards.json
+trans.sr = public/language/sr/rewards.json
+trans.sv = public/language/sv/rewards.json
trans.th = public/language/th/rewards.json
+trans.tr = public/language/tr/rewards.json
+trans.uk = public/language/uk/rewards.json
+trans.ur = public/language/ur/rewards.json
+trans.vi = public/language/vi/rewards.json
+trans.zh_CN = public/language/zh-CN/rewards.json
+trans.zh_TW = public/language/zh-TW/rewards.json
[o:nodebb:p:nodebb:r:search]
file_filter = public/language//search.json
source_file = public/language/en-GB/search.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.da = public/language/da/search.json
-trans.en_US = public/language/en-US/search.json
-trans.ms = public/language/ms/search.json
-trans.hr = public/language/hr/search.json
-trans.hu = public/language/hu/search.json
-trans.id = public/language/id/search.json
+trans.ar = public/language/ar/search.json
+trans.az = public/language/az/search.json
trans.bg = public/language/bg/search.json
+trans.bn = public/language/bn/search.json
+trans.cs = public/language/cs/search.json
+trans.da = public/language/da/search.json
trans.de = public/language/de/search.json
+trans.el = public/language/el/search.json
+trans.en_US = public/language/en-US/search.json
trans.en@pirate = public/language/en-x-pirate/search.json
+trans.es = public/language/es/search.json
+trans.et = public/language/et/search.json
trans.fa_IR = public/language/fa-IR/search.json
trans.fi = public/language/fi/search.json
+trans.fr = public/language/fr/search.json
+trans.gl = public/language/gl/search.json
+trans.he = public/language/he/search.json
+trans.hr = public/language/hr/search.json
+trans.hu = public/language/hu/search.json
+trans.hy = public/language/hy/search.json
+trans.id = public/language/id/search.json
+trans.it = public/language/it/search.json
+trans.ja = public/language/ja/search.json
+trans.ko = public/language/ko/search.json
+trans.lt = public/language/lt/search.json
+trans.lv = public/language/lv/search.json
+trans.ms = public/language/ms/search.json
+trans.nb = public/language/nb/search.json
+trans.nl = public/language/nl/search.json
+trans.nn_NO = public/language/nn-NO/search.json
+trans.pl = public/language/pl/search.json
+trans.pt_BR = public/language/pt-BR/search.json
+trans.pt_PT = public/language/pt-PT/search.json
+trans.ro = public/language/ro/search.json
+trans.ru = public/language/ru/search.json
+trans.rw = public/language/rw/search.json
trans.sc = public/language/sc/search.json
trans.sk = public/language/sk/search.json
trans.sl = public/language/sl/search.json
trans.sq_AL = public/language/sq-AL/search.json
trans.sr = public/language/sr/search.json
-trans.bn = public/language/bn/search.json
-trans.ja = public/language/ja/search.json
-trans.ko = public/language/ko/search.json
-trans.pl = public/language/pl/search.json
-trans.ro = public/language/ro/search.json
-trans.zh_TW = public/language/zh-TW/search.json
-trans.cs = public/language/cs/search.json
-trans.he = public/language/he/search.json
-trans.nb = public/language/nb/search.json
-trans.zh_CN = public/language/zh-CN/search.json
-trans.lv = public/language/lv/search.json
-trans.rw = public/language/rw/search.json
trans.sv = public/language/sv/search.json
-trans.ru = public/language/ru/search.json
+trans.th = public/language/th/search.json
trans.tr = public/language/tr/search.json
trans.uk = public/language/uk/search.json
-trans.el = public/language/el/search.json
-trans.fr = public/language/fr/search.json
-trans.gl = public/language/gl/search.json
-trans.it = public/language/it/search.json
-trans.pt_BR = public/language/pt-BR/search.json
-trans.nl = public/language/nl/search.json
-trans.pt_PT = public/language/pt-PT/search.json
-trans.th = public/language/th/search.json
+trans.ur = public/language/ur/search.json
trans.vi = public/language/vi/search.json
-trans.ar = public/language/ar/search.json
-trans.es = public/language/es/search.json
-trans.et = public/language/et/search.json
-trans.hy = public/language/hy/search.json
-trans.lt = public/language/lt/search.json
+trans.zh_CN = public/language/zh-CN/search.json
+trans.zh_TW = public/language/zh-TW/search.json
[o:nodebb:p:nodebb:r:social]
file_filter = public/language//social.json
source_file = public/language/en-GB/social.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.da = public/language/da/social.json
-trans.en_US = public/language/en-US/social.json
-trans.ms = public/language/ms/social.json
-trans.hr = public/language/hr/social.json
-trans.hu = public/language/hu/social.json
-trans.id = public/language/id/social.json
+trans.ar = public/language/ar/social.json
+trans.az = public/language/az/social.json
trans.bg = public/language/bg/social.json
+trans.bn = public/language/bn/social.json
+trans.cs = public/language/cs/social.json
+trans.da = public/language/da/social.json
trans.de = public/language/de/social.json
+trans.el = public/language/el/social.json
+trans.en_US = public/language/en-US/social.json
trans.en@pirate = public/language/en-x-pirate/social.json
+trans.es = public/language/es/social.json
+trans.et = public/language/et/social.json
trans.fa_IR = public/language/fa-IR/social.json
trans.fi = public/language/fi/social.json
+trans.fr = public/language/fr/social.json
+trans.gl = public/language/gl/social.json
+trans.he = public/language/he/social.json
+trans.hr = public/language/hr/social.json
+trans.hu = public/language/hu/social.json
+trans.hy = public/language/hy/social.json
+trans.id = public/language/id/social.json
+trans.it = public/language/it/social.json
+trans.ja = public/language/ja/social.json
+trans.ko = public/language/ko/social.json
+trans.lt = public/language/lt/social.json
+trans.lv = public/language/lv/social.json
+trans.ms = public/language/ms/social.json
+trans.nb = public/language/nb/social.json
+trans.nl = public/language/nl/social.json
+trans.nn_NO = public/language/nn-NO/social.json
+trans.pl = public/language/pl/social.json
+trans.pt_BR = public/language/pt-BR/social.json
+trans.pt_PT = public/language/pt-PT/social.json
+trans.ro = public/language/ro/social.json
+trans.ru = public/language/ru/social.json
+trans.rw = public/language/rw/social.json
trans.sc = public/language/sc/social.json
trans.sk = public/language/sk/social.json
trans.sl = public/language/sl/social.json
trans.sq_AL = public/language/sq-AL/social.json
trans.sr = public/language/sr/social.json
-trans.bn = public/language/bn/social.json
-trans.ja = public/language/ja/social.json
-trans.ko = public/language/ko/social.json
-trans.pl = public/language/pl/social.json
-trans.ro = public/language/ro/social.json
-trans.zh_TW = public/language/zh-TW/social.json
-trans.cs = public/language/cs/social.json
-trans.he = public/language/he/social.json
-trans.nb = public/language/nb/social.json
-trans.zh_CN = public/language/zh-CN/social.json
-trans.lv = public/language/lv/social.json
-trans.rw = public/language/rw/social.json
trans.sv = public/language/sv/social.json
-trans.ru = public/language/ru/social.json
+trans.th = public/language/th/social.json
trans.tr = public/language/tr/social.json
trans.uk = public/language/uk/social.json
-trans.el = public/language/el/social.json
-trans.fr = public/language/fr/social.json
-trans.gl = public/language/gl/social.json
-trans.it = public/language/it/social.json
-trans.pt_BR = public/language/pt-BR/social.json
-trans.nl = public/language/nl/social.json
-trans.pt_PT = public/language/pt-PT/social.json
-trans.th = public/language/th/social.json
+trans.ur = public/language/ur/social.json
trans.vi = public/language/vi/social.json
-trans.ar = public/language/ar/social.json
-trans.es = public/language/es/social.json
-trans.et = public/language/et/social.json
-trans.hy = public/language/hy/social.json
-trans.lt = public/language/lt/social.json
+trans.zh_CN = public/language/zh-CN/social.json
+trans.zh_TW = public/language/zh-TW/social.json
[o:nodebb:p:nodebb:r:success]
file_filter = public/language//success.json
source_file = public/language/en-GB/success.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.pt_BR = public/language/pt-BR/success.json
+trans.ar = public/language/ar/success.json
+trans.az = public/language/az/success.json
+trans.bg = public/language/bg/success.json
+trans.bn = public/language/bn/success.json
+trans.cs = public/language/cs/success.json
+trans.da = public/language/da/success.json
+trans.de = public/language/de/success.json
+trans.el = public/language/el/success.json
+trans.en_US = public/language/en-US/success.json
trans.en@pirate = public/language/en-x-pirate/success.json
trans.es = public/language/es/success.json
+trans.et = public/language/et/success.json
+trans.fa_IR = public/language/fa-IR/success.json
+trans.fi = public/language/fi/success.json
+trans.fr = public/language/fr/success.json
+trans.gl = public/language/gl/success.json
trans.he = public/language/he/success.json
+trans.hr = public/language/hr/success.json
+trans.hu = public/language/hu/success.json
trans.hy = public/language/hy/success.json
+trans.id = public/language/id/success.json
+trans.it = public/language/it/success.json
trans.ja = public/language/ja/success.json
trans.ko = public/language/ko/success.json
-trans.pl = public/language/pl/success.json
-trans.de = public/language/de/success.json
-trans.fa_IR = public/language/fa-IR/success.json
-trans.ro = public/language/ro/success.json
-trans.en_US = public/language/en-US/success.json
trans.lt = public/language/lt/success.json
-trans.ru = public/language/ru/success.json
-trans.sq_AL = public/language/sq-AL/success.json
-trans.vi = public/language/vi/success.json
-trans.bg = public/language/bg/success.json
-trans.hr = public/language/hr/success.json
-trans.ms = public/language/ms/success.json
-trans.th = public/language/th/success.json
-trans.zh_CN = public/language/zh-CN/success.json
-trans.bn = public/language/bn/success.json
-trans.fr = public/language/fr/success.json
-trans.hu = public/language/hu/success.json
-trans.id = public/language/id/success.json
-trans.rw = public/language/rw/success.json
-trans.sl = public/language/sl/success.json
-trans.zh_TW = public/language/zh-TW/success.json
-trans.ar = public/language/ar/success.json
-trans.et = public/language/et/success.json
-trans.it = public/language/it/success.json
-trans.pt_PT = public/language/pt-PT/success.json
-trans.sk = public/language/sk/success.json
-trans.sv = public/language/sv/success.json
-trans.tr = public/language/tr/success.json
-trans.cs = public/language/cs/success.json
-trans.fi = public/language/fi/success.json
trans.lv = public/language/lv/success.json
-trans.nl = public/language/nl/success.json
-trans.sc = public/language/sc/success.json
-trans.da = public/language/da/success.json
-trans.el = public/language/el/success.json
-trans.gl = public/language/gl/success.json
+trans.ms = public/language/ms/success.json
trans.nb = public/language/nb/success.json
+trans.nl = public/language/nl/success.json
+trans.nn_NO = public/language/nn-NO/success.json
+trans.pl = public/language/pl/success.json
+trans.pt_BR = public/language/pt-BR/success.json
+trans.pt_PT = public/language/pt-PT/success.json
+trans.ro = public/language/ro/success.json
+trans.ru = public/language/ru/success.json
+trans.rw = public/language/rw/success.json
+trans.sc = public/language/sc/success.json
+trans.sk = public/language/sk/success.json
+trans.sl = public/language/sl/success.json
+trans.sq_AL = public/language/sq-AL/success.json
trans.sr = public/language/sr/success.json
+trans.sv = public/language/sv/success.json
+trans.th = public/language/th/success.json
+trans.tr = public/language/tr/success.json
trans.uk = public/language/uk/success.json
+trans.ur = public/language/ur/success.json
+trans.vi = public/language/vi/success.json
+trans.zh_CN = public/language/zh-CN/success.json
+trans.zh_TW = public/language/zh-TW/success.json
[o:nodebb:p:nodebb:r:tags]
file_filter = public/language//tags.json
source_file = public/language/en-GB/tags.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.et = public/language/et/tags.json
-trans.nl = public/language/nl/tags.json
-trans.pt_BR = public/language/pt-BR/tags.json
-trans.uk = public/language/uk/tags.json
-trans.el = public/language/el/tags.json
-trans.fa_IR = public/language/fa-IR/tags.json
-trans.he = public/language/he/tags.json
-trans.hr = public/language/hr/tags.json
-trans.th = public/language/th/tags.json
-trans.sl = public/language/sl/tags.json
-trans.bg = public/language/bg/tags.json
-trans.en_US = public/language/en-US/tags.json
-trans.fi = public/language/fi/tags.json
-trans.rw = public/language/rw/tags.json
-trans.sc = public/language/sc/tags.json
-trans.tr = public/language/tr/tags.json
-trans.vi = public/language/vi/tags.json
trans.ar = public/language/ar/tags.json
-trans.de = public/language/de/tags.json
-trans.es = public/language/es/tags.json
-trans.pt_PT = public/language/pt-PT/tags.json
-trans.ro = public/language/ro/tags.json
-trans.ru = public/language/ru/tags.json
-trans.sk = public/language/sk/tags.json
-trans.sr = public/language/sr/tags.json
+trans.az = public/language/az/tags.json
+trans.bg = public/language/bg/tags.json
+trans.bn = public/language/bn/tags.json
trans.cs = public/language/cs/tags.json
trans.da = public/language/da/tags.json
+trans.de = public/language/de/tags.json
+trans.el = public/language/el/tags.json
+trans.en_US = public/language/en-US/tags.json
trans.en@pirate = public/language/en-x-pirate/tags.json
-trans.hu = public/language/hu/tags.json
-trans.ja = public/language/ja/tags.json
-trans.zh_CN = public/language/zh-CN/tags.json
+trans.es = public/language/es/tags.json
+trans.et = public/language/et/tags.json
+trans.fa_IR = public/language/fa-IR/tags.json
+trans.fi = public/language/fi/tags.json
+trans.fr = public/language/fr/tags.json
trans.gl = public/language/gl/tags.json
+trans.he = public/language/he/tags.json
+trans.hr = public/language/hr/tags.json
+trans.hu = public/language/hu/tags.json
+trans.hy = public/language/hy/tags.json
+trans.id = public/language/id/tags.json
+trans.it = public/language/it/tags.json
+trans.ja = public/language/ja/tags.json
+trans.ko = public/language/ko/tags.json
+trans.lt = public/language/lt/tags.json
trans.lv = public/language/lv/tags.json
trans.ms = public/language/ms/tags.json
trans.nb = public/language/nb/tags.json
-trans.sv = public/language/sv/tags.json
-trans.sq_AL = public/language/sq-AL/tags.json
-trans.zh_TW = public/language/zh-TW/tags.json
-trans.bn = public/language/bn/tags.json
-trans.fr = public/language/fr/tags.json
-trans.id = public/language/id/tags.json
-trans.ko = public/language/ko/tags.json
-trans.lt = public/language/lt/tags.json
-trans.hy = public/language/hy/tags.json
-trans.it = public/language/it/tags.json
+trans.nl = public/language/nl/tags.json
+trans.nn_NO = public/language/nn-NO/tags.json
trans.pl = public/language/pl/tags.json
+trans.pt_BR = public/language/pt-BR/tags.json
+trans.pt_PT = public/language/pt-PT/tags.json
+trans.ro = public/language/ro/tags.json
+trans.ru = public/language/ru/tags.json
+trans.rw = public/language/rw/tags.json
+trans.sc = public/language/sc/tags.json
+trans.sk = public/language/sk/tags.json
+trans.sl = public/language/sl/tags.json
+trans.sq_AL = public/language/sq-AL/tags.json
+trans.sr = public/language/sr/tags.json
+trans.sv = public/language/sv/tags.json
+trans.th = public/language/th/tags.json
+trans.tr = public/language/tr/tags.json
+trans.uk = public/language/uk/tags.json
+trans.ur = public/language/ur/tags.json
+trans.vi = public/language/vi/tags.json
+trans.zh_CN = public/language/zh-CN/tags.json
+trans.zh_TW = public/language/zh-TW/tags.json
[o:nodebb:p:nodebb:r:top]
file_filter = public/language//top.json
source_file = public/language/en-GB/top.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.hy = public/language/hy/top.json
-trans.el = public/language/el/top.json
-trans.fa_IR = public/language/fa-IR/top.json
-trans.nl = public/language/nl/top.json
-trans.cs = public/language/cs/top.json
-trans.en_US = public/language/en-US/top.json
-trans.fi = public/language/fi/top.json
-trans.he = public/language/he/top.json
-trans.lt = public/language/lt/top.json
-trans.ms = public/language/ms/top.json
-trans.sk = public/language/sk/top.json
-trans.vi = public/language/vi/top.json
-trans.bg = public/language/bg/top.json
-trans.de = public/language/de/top.json
-trans.hu = public/language/hu/top.json
-trans.pl = public/language/pl/top.json
-trans.pt_PT = public/language/pt-PT/top.json
-trans.sl = public/language/sl/top.json
-trans.en@pirate = public/language/en-x-pirate/top.json
-trans.gl = public/language/gl/top.json
-trans.rw = public/language/rw/top.json
-trans.sq_AL = public/language/sq-AL/top.json
-trans.zh_CN = public/language/zh-CN/top.json
-trans.ko = public/language/ko/top.json
-trans.ro = public/language/ro/top.json
-trans.pt_BR = public/language/pt-BR/top.json
-trans.bn = public/language/bn/top.json
-trans.fr = public/language/fr/top.json
-trans.et = public/language/et/top.json
-trans.id = public/language/id/top.json
-trans.ja = public/language/ja/top.json
-trans.lv = public/language/lv/top.json
-trans.ru = public/language/ru/top.json
-trans.sc = public/language/sc/top.json
trans.ar = public/language/ar/top.json
+trans.az = public/language/az/top.json
+trans.bg = public/language/bg/top.json
+trans.bn = public/language/bn/top.json
+trans.cs = public/language/cs/top.json
trans.da = public/language/da/top.json
-trans.uk = public/language/uk/top.json
+trans.de = public/language/de/top.json
+trans.el = public/language/el/top.json
+trans.en_US = public/language/en-US/top.json
+trans.en@pirate = public/language/en-x-pirate/top.json
+trans.es = public/language/es/top.json
+trans.et = public/language/et/top.json
+trans.fa_IR = public/language/fa-IR/top.json
+trans.fi = public/language/fi/top.json
+trans.fr = public/language/fr/top.json
+trans.gl = public/language/gl/top.json
+trans.he = public/language/he/top.json
+trans.hr = public/language/hr/top.json
+trans.hu = public/language/hu/top.json
+trans.hy = public/language/hy/top.json
+trans.id = public/language/id/top.json
+trans.it = public/language/it/top.json
+trans.ja = public/language/ja/top.json
+trans.ko = public/language/ko/top.json
+trans.lt = public/language/lt/top.json
+trans.lv = public/language/lv/top.json
+trans.ms = public/language/ms/top.json
+trans.nb = public/language/nb/top.json
+trans.nl = public/language/nl/top.json
+trans.nn_NO = public/language/nn-NO/top.json
+trans.pl = public/language/pl/top.json
+trans.pt_BR = public/language/pt-BR/top.json
+trans.pt_PT = public/language/pt-PT/top.json
+trans.ro = public/language/ro/top.json
+trans.ru = public/language/ru/top.json
+trans.rw = public/language/rw/top.json
+trans.sc = public/language/sc/top.json
+trans.sk = public/language/sk/top.json
+trans.sl = public/language/sl/top.json
+trans.sq_AL = public/language/sq-AL/top.json
+trans.sr = public/language/sr/top.json
trans.sv = public/language/sv/top.json
trans.th = public/language/th/top.json
-trans.it = public/language/it/top.json
-trans.nb = public/language/nb/top.json
-trans.sr = public/language/sr/top.json
trans.tr = public/language/tr/top.json
+trans.uk = public/language/uk/top.json
+trans.ur = public/language/ur/top.json
+trans.vi = public/language/vi/top.json
+trans.zh_CN = public/language/zh-CN/top.json
trans.zh_TW = public/language/zh-TW/top.json
-trans.es = public/language/es/top.json
-trans.hr = public/language/hr/top.json
[o:nodebb:p:nodebb:r:topic]
file_filter = public/language//topic.json
source_file = public/language/en-GB/topic.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.et = public/language/et/topic.json
-trans.hu = public/language/hu/topic.json
-trans.nb = public/language/nb/topic.json
-trans.nl = public/language/nl/topic.json
-trans.sk = public/language/sk/topic.json
trans.ar = public/language/ar/topic.json
-trans.es = public/language/es/topic.json
-trans.fr = public/language/fr/topic.json
-trans.lv = public/language/lv/topic.json
-trans.ms = public/language/ms/topic.json
-trans.pl = public/language/pl/topic.json
-trans.pt_PT = public/language/pt-PT/topic.json
-trans.uk = public/language/uk/topic.json
-trans.ru = public/language/ru/topic.json
+trans.az = public/language/az/topic.json
trans.bg = public/language/bg/topic.json
+trans.bn = public/language/bn/topic.json
+trans.cs = public/language/cs/topic.json
+trans.da = public/language/da/topic.json
+trans.de = public/language/de/topic.json
+trans.el = public/language/el/topic.json
+trans.en_US = public/language/en-US/topic.json
trans.en@pirate = public/language/en-x-pirate/topic.json
+trans.es = public/language/es/topic.json
+trans.et = public/language/et/topic.json
trans.fa_IR = public/language/fa-IR/topic.json
trans.fi = public/language/fi/topic.json
-trans.he = public/language/he/topic.json
-trans.ja = public/language/ja/topic.json
-trans.pt_BR = public/language/pt-BR/topic.json
-trans.tr = public/language/tr/topic.json
-trans.zh_TW = public/language/zh-TW/topic.json
-trans.bn = public/language/bn/topic.json
-trans.da = public/language/da/topic.json
-trans.en_US = public/language/en-US/topic.json
-trans.hr = public/language/hr/topic.json
-trans.it = public/language/it/topic.json
-trans.ro = public/language/ro/topic.json
-trans.cs = public/language/cs/topic.json
-trans.de = public/language/de/topic.json
-trans.sr = public/language/sr/topic.json
-trans.sv = public/language/sv/topic.json
-trans.vi = public/language/vi/topic.json
-trans.ko = public/language/ko/topic.json
-trans.sl = public/language/sl/topic.json
-trans.el = public/language/el/topic.json
+trans.fr = public/language/fr/topic.json
trans.gl = public/language/gl/topic.json
-trans.id = public/language/id/topic.json
-trans.lt = public/language/lt/topic.json
-trans.sq_AL = public/language/sq-AL/topic.json
-trans.th = public/language/th/topic.json
+trans.he = public/language/he/topic.json
+trans.hr = public/language/hr/topic.json
+trans.hu = public/language/hu/topic.json
trans.hy = public/language/hy/topic.json
+trans.id = public/language/id/topic.json
+trans.it = public/language/it/topic.json
+trans.ja = public/language/ja/topic.json
+trans.ko = public/language/ko/topic.json
+trans.lt = public/language/lt/topic.json
+trans.lv = public/language/lv/topic.json
+trans.ms = public/language/ms/topic.json
+trans.nb = public/language/nb/topic.json
+trans.nl = public/language/nl/topic.json
+trans.nn_NO = public/language/nn-NO/topic.json
+trans.pl = public/language/pl/topic.json
+trans.pt_BR = public/language/pt-BR/topic.json
+trans.pt_PT = public/language/pt-PT/topic.json
+trans.ro = public/language/ro/topic.json
+trans.ru = public/language/ru/topic.json
trans.rw = public/language/rw/topic.json
trans.sc = public/language/sc/topic.json
+trans.sk = public/language/sk/topic.json
+trans.sl = public/language/sl/topic.json
+trans.sq_AL = public/language/sq-AL/topic.json
+trans.sr = public/language/sr/topic.json
+trans.sv = public/language/sv/topic.json
+trans.th = public/language/th/topic.json
+trans.tr = public/language/tr/topic.json
+trans.uk = public/language/uk/topic.json
+trans.ur = public/language/ur/topic.json
+trans.vi = public/language/vi/topic.json
trans.zh_CN = public/language/zh-CN/topic.json
+trans.zh_TW = public/language/zh-TW/topic.json
[o:nodebb:p:nodebb:r:unread]
file_filter = public/language//unread.json
source_file = public/language/en-GB/unread.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.pt_BR = public/language/pt-BR/unread.json
-trans.zh_TW = public/language/zh-TW/unread.json
-trans.fa_IR = public/language/fa-IR/unread.json
-trans.fr = public/language/fr/unread.json
-trans.es = public/language/es/unread.json
-trans.it = public/language/it/unread.json
-trans.ms = public/language/ms/unread.json
-trans.ro = public/language/ro/unread.json
-trans.de = public/language/de/unread.json
-trans.en@pirate = public/language/en-x-pirate/unread.json
-trans.hr = public/language/hr/unread.json
-trans.hu = public/language/hu/unread.json
-trans.lt = public/language/lt/unread.json
-trans.ru = public/language/ru/unread.json
-trans.sl = public/language/sl/unread.json
-trans.th = public/language/th/unread.json
+trans.ar = public/language/ar/unread.json
+trans.az = public/language/az/unread.json
trans.bg = public/language/bg/unread.json
-trans.gl = public/language/gl/unread.json
-trans.uk = public/language/uk/unread.json
-trans.vi = public/language/vi/unread.json
-trans.ja = public/language/ja/unread.json
-trans.lv = public/language/lv/unread.json
-trans.nl = public/language/nl/unread.json
-trans.sr = public/language/sr/unread.json
-trans.zh_CN = public/language/zh-CN/unread.json
-trans.hy = public/language/hy/unread.json
-trans.id = public/language/id/unread.json
-trans.da = public/language/da/unread.json
-trans.en_US = public/language/en-US/unread.json
-trans.sk = public/language/sk/unread.json
trans.bn = public/language/bn/unread.json
trans.cs = public/language/cs/unread.json
-trans.nb = public/language/nb/unread.json
-trans.rw = public/language/rw/unread.json
-trans.sq_AL = public/language/sq-AL/unread.json
-trans.tr = public/language/tr/unread.json
-trans.ar = public/language/ar/unread.json
+trans.da = public/language/da/unread.json
+trans.de = public/language/de/unread.json
trans.el = public/language/el/unread.json
-trans.he = public/language/he/unread.json
-trans.pt_PT = public/language/pt-PT/unread.json
+trans.en_US = public/language/en-US/unread.json
+trans.en@pirate = public/language/en-x-pirate/unread.json
+trans.es = public/language/es/unread.json
trans.et = public/language/et/unread.json
+trans.fa_IR = public/language/fa-IR/unread.json
trans.fi = public/language/fi/unread.json
-trans.sc = public/language/sc/unread.json
-trans.sv = public/language/sv/unread.json
+trans.fr = public/language/fr/unread.json
+trans.gl = public/language/gl/unread.json
+trans.he = public/language/he/unread.json
+trans.hr = public/language/hr/unread.json
+trans.hu = public/language/hu/unread.json
+trans.hy = public/language/hy/unread.json
+trans.id = public/language/id/unread.json
+trans.it = public/language/it/unread.json
+trans.ja = public/language/ja/unread.json
trans.ko = public/language/ko/unread.json
+trans.lt = public/language/lt/unread.json
+trans.lv = public/language/lv/unread.json
+trans.ms = public/language/ms/unread.json
+trans.nb = public/language/nb/unread.json
+trans.nl = public/language/nl/unread.json
+trans.nn_NO = public/language/nn-NO/unread.json
trans.pl = public/language/pl/unread.json
+trans.pt_BR = public/language/pt-BR/unread.json
+trans.pt_PT = public/language/pt-PT/unread.json
+trans.ro = public/language/ro/unread.json
+trans.ru = public/language/ru/unread.json
+trans.rw = public/language/rw/unread.json
+trans.sc = public/language/sc/unread.json
+trans.sk = public/language/sk/unread.json
+trans.sl = public/language/sl/unread.json
+trans.sq_AL = public/language/sq-AL/unread.json
+trans.sr = public/language/sr/unread.json
+trans.sv = public/language/sv/unread.json
+trans.th = public/language/th/unread.json
+trans.tr = public/language/tr/unread.json
+trans.uk = public/language/uk/unread.json
+trans.ur = public/language/ur/unread.json
+trans.vi = public/language/vi/unread.json
+trans.zh_CN = public/language/zh-CN/unread.json
+trans.zh_TW = public/language/zh-TW/unread.json
[o:nodebb:p:nodebb:r:uploads]
file_filter = public/language//uploads.json
source_file = public/language/en-GB/uploads.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.sv = public/language/sv/uploads.json
+trans.ar = public/language/ar/uploads.json
+trans.az = public/language/az/uploads.json
+trans.bg = public/language/bg/uploads.json
+trans.bn = public/language/bn/uploads.json
trans.cs = public/language/cs/uploads.json
+trans.da = public/language/da/uploads.json
+trans.de = public/language/de/uploads.json
trans.el = public/language/el/uploads.json
+trans.en_US = public/language/en-US/uploads.json
+trans.en@pirate = public/language/en-x-pirate/uploads.json
+trans.es = public/language/es/uploads.json
+trans.et = public/language/et/uploads.json
+trans.fa_IR = public/language/fa-IR/uploads.json
+trans.fi = public/language/fi/uploads.json
+trans.fr = public/language/fr/uploads.json
+trans.gl = public/language/gl/uploads.json
+trans.he = public/language/he/uploads.json
+trans.hr = public/language/hr/uploads.json
trans.hu = public/language/hu/uploads.json
trans.hy = public/language/hy/uploads.json
+trans.id = public/language/id/uploads.json
trans.it = public/language/it/uploads.json
-trans.tr = public/language/tr/uploads.json
-trans.uk = public/language/uk/uploads.json
-trans.zh_CN = public/language/zh-CN/uploads.json
-trans.en@pirate = public/language/en-x-pirate/uploads.json
+trans.ja = public/language/ja/uploads.json
+trans.ko = public/language/ko/uploads.json
trans.lt = public/language/lt/uploads.json
trans.lv = public/language/lv/uploads.json
-trans.pt_BR = public/language/pt-BR/uploads.json
-trans.sk = public/language/sk/uploads.json
-trans.bn = public/language/bn/uploads.json
-trans.hr = public/language/hr/uploads.json
-trans.pl = public/language/pl/uploads.json
-trans.zh_TW = public/language/zh-TW/uploads.json
-trans.ru = public/language/ru/uploads.json
-trans.sl = public/language/sl/uploads.json
-trans.sq_AL = public/language/sq-AL/uploads.json
-trans.et = public/language/et/uploads.json
-trans.id = public/language/id/uploads.json
trans.ms = public/language/ms/uploads.json
trans.nb = public/language/nb/uploads.json
-trans.pt_PT = public/language/pt-PT/uploads.json
-trans.da = public/language/da/uploads.json
-trans.es = public/language/es/uploads.json
-trans.fr = public/language/fr/uploads.json
-trans.th = public/language/th/uploads.json
-trans.ar = public/language/ar/uploads.json
-trans.en_US = public/language/en-US/uploads.json
-trans.fi = public/language/fi/uploads.json
-trans.gl = public/language/gl/uploads.json
-trans.rw = public/language/rw/uploads.json
-trans.ro = public/language/ro/uploads.json
-trans.sr = public/language/sr/uploads.json
-trans.vi = public/language/vi/uploads.json
-trans.bg = public/language/bg/uploads.json
-trans.de = public/language/de/uploads.json
-trans.fa_IR = public/language/fa-IR/uploads.json
-trans.ja = public/language/ja/uploads.json
trans.nl = public/language/nl/uploads.json
-trans.he = public/language/he/uploads.json
-trans.ko = public/language/ko/uploads.json
+trans.nn_NO = public/language/nn-NO/uploads.json
+trans.pl = public/language/pl/uploads.json
+trans.pt_BR = public/language/pt-BR/uploads.json
+trans.pt_PT = public/language/pt-PT/uploads.json
+trans.ro = public/language/ro/uploads.json
+trans.ru = public/language/ru/uploads.json
+trans.rw = public/language/rw/uploads.json
trans.sc = public/language/sc/uploads.json
+trans.sk = public/language/sk/uploads.json
+trans.sl = public/language/sl/uploads.json
+trans.sq_AL = public/language/sq-AL/uploads.json
+trans.sr = public/language/sr/uploads.json
+trans.sv = public/language/sv/uploads.json
+trans.th = public/language/th/uploads.json
+trans.tr = public/language/tr/uploads.json
+trans.uk = public/language/uk/uploads.json
+trans.ur = public/language/ur/uploads.json
+trans.vi = public/language/vi/uploads.json
+trans.zh_CN = public/language/zh-CN/uploads.json
+trans.zh_TW = public/language/zh-TW/uploads.json
[o:nodebb:p:nodebb:r:user]
file_filter = public/language//user.json
source_file = public/language/en-GB/user.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.ms = public/language/ms/user.json
-trans.sr = public/language/sr/user.json
-trans.lt = public/language/lt/user.json
-trans.da = public/language/da/user.json
-trans.it = public/language/it/user.json
-trans.ru = public/language/ru/user.json
-trans.sk = public/language/sk/user.json
trans.ar = public/language/ar/user.json
-trans.fr = public/language/fr/user.json
-trans.he = public/language/he/user.json
-trans.id = public/language/id/user.json
-trans.es = public/language/es/user.json
-trans.cs = public/language/cs/user.json
-trans.et = public/language/et/user.json
-trans.pt_BR = public/language/pt-BR/user.json
-trans.zh_CN = public/language/zh-CN/user.json
-trans.zh_TW = public/language/zh-TW/user.json
+trans.az = public/language/az/user.json
+trans.bg = public/language/bg/user.json
trans.bn = public/language/bn/user.json
+trans.cs = public/language/cs/user.json
+trans.da = public/language/da/user.json
trans.de = public/language/de/user.json
trans.el = public/language/el/user.json
-trans.en@pirate = public/language/en-x-pirate/user.json
trans.en_US = public/language/en-US/user.json
+trans.en@pirate = public/language/en-x-pirate/user.json
+trans.es = public/language/es/user.json
+trans.et = public/language/et/user.json
trans.fa_IR = public/language/fa-IR/user.json
+trans.fi = public/language/fi/user.json
+trans.fr = public/language/fr/user.json
trans.gl = public/language/gl/user.json
+trans.he = public/language/he/user.json
+trans.hr = public/language/hr/user.json
+trans.hu = public/language/hu/user.json
+trans.hy = public/language/hy/user.json
+trans.id = public/language/id/user.json
+trans.it = public/language/it/user.json
+trans.ja = public/language/ja/user.json
+trans.ko = public/language/ko/user.json
+trans.lt = public/language/lt/user.json
+trans.lv = public/language/lv/user.json
+trans.ms = public/language/ms/user.json
+trans.nb = public/language/nb/user.json
+trans.nl = public/language/nl/user.json
+trans.nn_NO = public/language/nn-NO/user.json
trans.pl = public/language/pl/user.json
-trans.bg = public/language/bg/user.json
+trans.pt_BR = public/language/pt-BR/user.json
+trans.pt_PT = public/language/pt-PT/user.json
+trans.ro = public/language/ro/user.json
+trans.ru = public/language/ru/user.json
+trans.rw = public/language/rw/user.json
+trans.sc = public/language/sc/user.json
+trans.sk = public/language/sk/user.json
+trans.sl = public/language/sl/user.json
+trans.sq_AL = public/language/sq-AL/user.json
+trans.sr = public/language/sr/user.json
trans.sv = public/language/sv/user.json
trans.th = public/language/th/user.json
trans.tr = public/language/tr/user.json
trans.uk = public/language/uk/user.json
+trans.ur = public/language/ur/user.json
trans.vi = public/language/vi/user.json
-trans.fi = public/language/fi/user.json
-trans.ko = public/language/ko/user.json
-trans.lv = public/language/lv/user.json
-trans.pt_PT = public/language/pt-PT/user.json
-trans.rw = public/language/rw/user.json
-trans.sl = public/language/sl/user.json
-trans.sq_AL = public/language/sq-AL/user.json
-trans.hr = public/language/hr/user.json
-trans.hy = public/language/hy/user.json
-trans.ja = public/language/ja/user.json
-trans.nb = public/language/nb/user.json
-trans.nl = public/language/nl/user.json
-trans.ro = public/language/ro/user.json
-trans.sc = public/language/sc/user.json
-trans.hu = public/language/hu/user.json
+trans.zh_CN = public/language/zh-CN/user.json
+trans.zh_TW = public/language/zh-TW/user.json
[o:nodebb:p:nodebb:r:users]
file_filter = public/language//users.json
source_file = public/language/en-GB/users.json
source_lang = en_GB
type = KEYVALUEJSON
-trans.zh_TW = public/language/zh-TW/users.json
-trans.de = public/language/de/users.json
-trans.en@pirate = public/language/en-x-pirate/users.json
-trans.ru = public/language/ru/users.json
-trans.sc = public/language/sc/users.json
-trans.en_US = public/language/en-US/users.json
-trans.bn = public/language/bn/users.json
-trans.hy = public/language/hy/users.json
-trans.ro = public/language/ro/users.json
-trans.fi = public/language/fi/users.json
-trans.it = public/language/it/users.json
-trans.pl = public/language/pl/users.json
-trans.sk = public/language/sk/users.json
trans.ar = public/language/ar/users.json
+trans.az = public/language/az/users.json
trans.bg = public/language/bg/users.json
-trans.el = public/language/el/users.json
-trans.fa_IR = public/language/fa-IR/users.json
-trans.sq_AL = public/language/sq-AL/users.json
+trans.bn = public/language/bn/users.json
trans.cs = public/language/cs/users.json
-trans.he = public/language/he/users.json
-trans.ja = public/language/ja/users.json
-trans.ko = public/language/ko/users.json
-trans.nb = public/language/nb/users.json
-trans.pt_PT = public/language/pt-PT/users.json
-trans.sr = public/language/sr/users.json
-trans.zh_CN = public/language/zh-CN/users.json
trans.da = public/language/da/users.json
-trans.id = public/language/id/users.json
-trans.lt = public/language/lt/users.json
-trans.ms = public/language/ms/users.json
-trans.nl = public/language/nl/users.json
-trans.rw = public/language/rw/users.json
-trans.sl = public/language/sl/users.json
-trans.th = public/language/th/users.json
+trans.de = public/language/de/users.json
+trans.el = public/language/el/users.json
+trans.en_US = public/language/en-US/users.json
+trans.en@pirate = public/language/en-x-pirate/users.json
trans.es = public/language/es/users.json
+trans.et = public/language/et/users.json
+trans.fa_IR = public/language/fa-IR/users.json
+trans.fi = public/language/fi/users.json
trans.fr = public/language/fr/users.json
trans.gl = public/language/gl/users.json
+trans.he = public/language/he/users.json
trans.hr = public/language/hr/users.json
-trans.uk = public/language/uk/users.json
-trans.vi = public/language/vi/users.json
-trans.sv = public/language/sv/users.json
-trans.tr = public/language/tr/users.json
-trans.et = public/language/et/users.json
trans.hu = public/language/hu/users.json
+trans.hy = public/language/hy/users.json
+trans.id = public/language/id/users.json
+trans.it = public/language/it/users.json
+trans.ja = public/language/ja/users.json
+trans.ko = public/language/ko/users.json
+trans.lt = public/language/lt/users.json
trans.lv = public/language/lv/users.json
+trans.ms = public/language/ms/users.json
+trans.nb = public/language/nb/users.json
+trans.nl = public/language/nl/users.json
+trans.nn_NO = public/language/nn-NO/users.json
+trans.pl = public/language/pl/users.json
trans.pt_BR = public/language/pt-BR/users.json
+trans.pt_PT = public/language/pt-PT/users.json
+trans.ro = public/language/ro/users.json
+trans.ru = public/language/ru/users.json
+trans.rw = public/language/rw/users.json
+trans.sc = public/language/sc/users.json
+trans.sk = public/language/sk/users.json
+trans.sl = public/language/sl/users.json
+trans.sq_AL = public/language/sq-AL/users.json
+trans.sr = public/language/sr/users.json
+trans.sv = public/language/sv/users.json
+trans.th = public/language/th/users.json
+trans.tr = public/language/tr/users.json
+trans.uk = public/language/uk/users.json
+trans.ur = public/language/ur/users.json
+trans.vi = public/language/vi/users.json
+trans.zh_CN = public/language/zh-CN/users.json
+trans.zh_TW = public/language/zh-TW/users.json
+[o:nodebb:p:nodebb:r:world]
+file_filter = public/language//world.json
+source_file = public/language/en-GB/world.json
+source_lang = en_GB
+type = KEYVALUEJSON
+trans.ar = public/language/ar/world.json
+trans.az = public/language/az/world.json
+trans.bg = public/language/bg/world.json
+trans.bn = public/language/bn/world.json
+trans.cs = public/language/cs/world.json
+trans.da = public/language/da/world.json
+trans.de = public/language/de/world.json
+trans.el = public/language/el/world.json
+trans.en_US = public/language/en-US/world.json
+trans.en@pirate = public/language/en-x-pirate/world.json
+trans.es = public/language/es/world.json
+trans.et = public/language/et/world.json
+trans.fa_IR = public/language/fa-IR/world.json
+trans.fi = public/language/fi/world.json
+trans.fr = public/language/fr/world.json
+trans.gl = public/language/gl/world.json
+trans.he = public/language/he/world.json
+trans.hr = public/language/hr/world.json
+trans.hu = public/language/hu/world.json
+trans.hy = public/language/hy/world.json
+trans.id = public/language/id/world.json
+trans.it = public/language/it/world.json
+trans.ja = public/language/ja/world.json
+trans.ko = public/language/ko/world.json
+trans.lt = public/language/lt/world.json
+trans.lv = public/language/lv/world.json
+trans.ms = public/language/ms/world.json
+trans.nb = public/language/nb/world.json
+trans.nl = public/language/nl/world.json
+trans.nn_NO = public/language/nn-NO/world.json
+trans.pl = public/language/pl/world.json
+trans.pt_BR = public/language/pt-BR/world.json
+trans.pt_PT = public/language/pt-PT/world.json
+trans.ro = public/language/ro/world.json
+trans.ru = public/language/ru/world.json
+trans.rw = public/language/rw/world.json
+trans.sc = public/language/sc/world.json
+trans.sk = public/language/sk/world.json
+trans.sl = public/language/sl/world.json
+trans.sq_AL = public/language/sq-AL/world.json
+trans.sr = public/language/sr/world.json
+trans.sv = public/language/sv/world.json
+trans.th = public/language/th/world.json
+trans.tr = public/language/tr/world.json
+trans.uk = public/language/uk/world.json
+trans.ur = public/language/ur/world.json
+trans.vi = public/language/vi/world.json
+trans.zh_CN = public/language/zh-CN/world.json
+trans.zh_TW = public/language/zh-TW/world.json
diff --git a/.tx/fix.js b/.tx/fix.js
new file mode 100644
index 0000000000..fd7ecc46f5
--- /dev/null
+++ b/.tx/fix.js
@@ -0,0 +1,22 @@
+'use strict';
+
+const { readFile, writeFile } = require('fs').promises;
+
+(async () => {
+ const contents = await readFile('./config', { encoding: 'utf-8' });
+ const blocks = contents
+ .split('\n\n')
+ .map((block) => {
+ block = block.split('\n').sort((a, b) => {
+ if (!a.startsWith('trans') || !b.startsWith('trans')) {
+ return 0;
+ }
+
+ return a.localeCompare(b);
+ })
+
+ return block.join('\n');
+ });
+
+ await writeFile('./config', blocks.join('\n\n'), { encoding: 'utf-8' });
+})();
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 84078cf370..8058f2350d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,10 +1,4494 @@
-#### v3.5.1 (2023-11-14)
+#### v4.10.1 (2026-03-25)
##### Chores
-* up mentions (b1b3dcb6)
+* incrementing version number - v4.10.0 (5b703104)
+* update changelog for v4.10.0 (c480df9e)
+* incrementing version number - v4.9.2 (e6846052)
+* incrementing version number - v4.9.1 (72e44c86)
+* incrementing version number - v4.9.0 (3fdd1bef)
+* incrementing version number - v4.8.1 (713ae0c0)
+* incrementing version number - v4.8.0 (3fac737a)
+* incrementing version number - v4.7.2 (cd419d8a)
+* incrementing version number - v4.7.1 (afb88805)
+* incrementing version number - v4.7.0 (e82d40f8)
+* incrementing version number - v4.6.3 (9fc5b0f3)
+* incrementing version number - v4.6.2 (f98747db)
+* incrementing version number - v4.6.1 (f47aa678)
+* incrementing version number - v4.6.0 (ee395bc5)
+* incrementing version number - v4.5.2 (ad2da639)
+* incrementing version number - v4.5.1 (69f4b61f)
+* incrementing version number - v4.5.0 (f05c5d06)
+* incrementing version number - v4.4.6 (074043ad)
+* incrementing version number - v4.4.5 (6f106923)
+* incrementing version number - v4.4.4 (d323af44)
+* incrementing version number - v4.4.3 (d354c2eb)
+* incrementing version number - v4.4.2 (55c510ae)
+* incrementing version number - v4.4.1 (5ae79b4e)
+* incrementing version number - v4.4.0 (0a75eee3)
+* incrementing version number - v4.3.2 (b92b5d80)
+* incrementing version number - v4.3.1 (308e6b9f)
+* incrementing version number - v4.3.0 (bff291db)
+* incrementing version number - v4.2.2 (17fecc24)
+* incrementing version number - v4.2.1 (852a270c)
+* incrementing version number - v4.2.0 (87581958)
+* incrementing version number - v4.1.1 (b2afbb16)
+* incrementing version number - v4.1.0 (36c80850)
+* incrementing version number - v4.0.6 (4a52fb2e)
+* incrementing version number - v4.0.5 (1792a62b)
+* incrementing version number - v4.0.4 (b1125cce)
+* incrementing version number - v4.0.3 (2b65c735)
+* incrementing version number - v4.0.2 (73fe5fcf)
+* incrementing version number - v4.0.1 (a461b758)
+* incrementing version number - v4.0.0 (c1eaee45)
+
+##### New Features
+
+* add email share (43e7f0ab)
+
+##### Bug Fixes
+
+* #14123, aria-hidden fixes (72f48fd9)
+* #14121, use normalizedPath when uploading (a10471fc)
+* key name (52e42685)
+* #14108, reset filter on notif dropdown open (ad1433e1)
+* #14116, don't return ban reason if login credentials are incorrect (9bcef6b5)
+* share url for ap posts, fallback to window.location.href if pid doesnt exist (361134f9)
+
+##### Refactors
+
+* work with different line-clamp values (9b885162)
+
+#### v4.10.0 (2026-03-19)
+
+##### Chores
+
+* **deps:**
+ * update dependency lint-staged to v16.4.0 (#14099) (bea46026)
+ * update commitlint monorepo to v20.5.0 (#14098) (06c3b88b)
+ * update dependency jsdom to v29 (#14100) (3825c755)
+ * update commitlint monorepo to v20.4.4 (#14088) (02f8ea2c)
+ * update dependency lint-staged to v16.3.3 (#14075) (ac45b719)
+ * update dependency @stylistic/eslint-plugin to v5.10.0 (#14065) (9e2c6b67)
+ * update docker/build-push-action action to v7 (#14066) (6d8c4493)
+ * update docker/metadata-action action to v6 (#14067) (73b5bce5)
+ * update docker/setup-buildx-action action to v4 (#14060) (d7de8cf6)
+ * update docker/login-action action to v4 (#14054) (8c15096f)
+ * update dependency lint-staged to v16.3.2 (#14048) (ddd6db0f)
+ * update commitlint monorepo to v20.4.3 (#14047) (07881cbf)
+ * update dependency lint-staged to v16.3.1 (#14029) (2e4ee9f1)
+ * update dependency globals to v17.4.0 (#14035) (32864460)
+ * update github artifact actions (#14027) (aec68c6b)
+ * update postgres docker tag to v18.3 (#14023) (b69dbc38)
+ * update dependency nyc to v18 (#14011) (dc1ce5e1)
+* up develop (4a01d55f)
+* up mentions (168b17e8)
+* up composer (73b023b4)
+* up harmony (ec4e87ff)
+* incrementing version number - v4.9.2 (e6846052)
+* update changelog for v4.9.2 (2c00b137)
+* incrementing version number - v4.9.1 (72e44c86)
+* incrementing version number - v4.9.0 (3fdd1bef)
+* incrementing version number - v4.8.1 (713ae0c0)
+* incrementing version number - v4.8.0 (3fac737a)
+* incrementing version number - v4.7.2 (cd419d8a)
+* incrementing version number - v4.7.1 (afb88805)
+* incrementing version number - v4.7.0 (e82d40f8)
+* incrementing version number - v4.6.3 (9fc5b0f3)
+* incrementing version number - v4.6.2 (f98747db)
+* incrementing version number - v4.6.1 (f47aa678)
+* incrementing version number - v4.6.0 (ee395bc5)
+* incrementing version number - v4.5.2 (ad2da639)
+* incrementing version number - v4.5.1 (69f4b61f)
+* incrementing version number - v4.5.0 (f05c5d06)
+* incrementing version number - v4.4.6 (074043ad)
+* incrementing version number - v4.4.5 (6f106923)
+* incrementing version number - v4.4.4 (d323af44)
+* incrementing version number - v4.4.3 (d354c2eb)
+* incrementing version number - v4.4.2 (55c510ae)
+* incrementing version number - v4.4.1 (5ae79b4e)
+* incrementing version number - v4.4.0 (0a75eee3)
+* incrementing version number - v4.3.2 (b92b5d80)
+* incrementing version number - v4.3.1 (308e6b9f)
+* incrementing version number - v4.3.0 (bff291db)
+* incrementing version number - v4.2.2 (17fecc24)
+* incrementing version number - v4.2.1 (852a270c)
+* incrementing version number - v4.2.0 (87581958)
+* incrementing version number - v4.1.1 (b2afbb16)
+* incrementing version number - v4.1.0 (36c80850)
+* incrementing version number - v4.0.6 (4a52fb2e)
+* incrementing version number - v4.0.5 (1792a62b)
+* incrementing version number - v4.0.4 (b1125cce)
+* incrementing version number - v4.0.3 (2b65c735)
+* incrementing version number - v4.0.2 (73fe5fcf)
+* incrementing version number - v4.0.1 (a461b758)
+* incrementing version number - v4.0.0 (c1eaee45)
+* **i18n:**
+ * fallback strings for new resources: nodebb.admin-settings-activitypub (aeb53043)
+ * fallback strings for new resources: nodebb.world (e9063a63)
+ * fallback strings for new resources: nodebb.world (61414fa4)
+ * fallback strings for new resources: nodebb.world (702f7c62)
+ * fallback strings for new resources: nodebb.admin-settings-general (e3ba38f2)
+ * fallback strings for new resources: nodebb.admin-manage-users (a46f0136)
+ * fallback strings for new resources: nodebb.admin-advanced-jobs (8e050353)
+ * fallback strings for new resources: nodebb.admin-menu (5a8a1661)
+ * fallback strings for new resources: nodebb.error (a17cd6c7)
+ * fallback strings for new resources: nodebb.world (4d44e913)
+ * fallback strings for new resources: nodebb.admin-dashboard (49a21a1f)
+ * fallback strings for new resources: nodebb.admin-dashboard (858d84ff)
+
+##### Documentation Changes
+
+* wrong type for worldDefaultCid (895997b2)
+
+##### New Features
+
+* add /world as a potential home page route (58d3aa77)
+* add category selector to /world quick composer (2f5021e5)
+* ability to show only local posts in /world (44e65b8d)
+* #14094, notification drawer UX improvements (6c01a5d8)
+* allow 3 profile pics (#14092) (533ae69c)
+* screenshot upload in ACP, send fallback brand icons in manifest, serve assets for richer PWA install UI (75a6dfff)
+* category group actor outbox, #14083 (b317cdd3)
+* new ap mocks, now publishing user outboxes (f848393e)
+* show cronjobs in acp (#14068) (3c0a6540)
+* redirect cold requests to remote resources to their canonical source, #14043 (2b12f8b5)
+* include alt text in image/attachment property federating out (ca5aee10)
+
+##### Bug Fixes
+
+* improve idempotency of ap test (8ca34e74)
+* call syncfollowcounts on unfollow as well (ebe709da)
+* sync follow counts on local and remote follows, #14105 (44e78e47)
+* cold load redirect should only affect guests (cc606677)
+* schema fix for new api config value (7e2c7db3)
+* close notif drawer on item click, fix crash in module (7c65471b)
+* schema fix for new api config value (efaf8eb9)
+* issue where initial quickcreate post wouldn't go to the right cid (35c03e5c)
+* only show category selector on quickreply on /world (27b0fbe6)
+* delete cid::privilegeMask on category.purge (902533db)
+* bump themes (3aa8d5ba)
+* removing topic tools/checkbox from /world for guests, reword guest CTA in /world (53286625)
+* add back 'after' query param handling in /world that was removed accidentally (67a93da5)
+* restrict contextmenu preventDefault to the checkbox only (2eb0964d)
+* long-press support for topicSelect, #14045 (d1e1a008)
+* debug log (58da9036)
+* restore guest access to /world, default to latest(all) (1aa5ca88)
+* bump harmony (10859455)
+* restored popular calculation behaviour that was broken by e2131d1d2e1c6f14cb8867ac7e22840da3f4c63f, removed followingOnly arg passing for popular (1af83564)
+* imagesLoaded integration for handleBack in world.js (38a1da46)
+* merged chat notifications if all the messages are from the same user (26bb60ef)
+* type (59dd22ca)
+* type (40fecd01)
+* merged chat notifications if all the messages are from the same user (6147a4d0)
+* screenshot fallback (09c54127)
+* buildRecipients to handle if local uids are passed in followers (a8f081c0)
+* update Like/Dislike to have addressees in activity (c8e349ca)
+* accidental hardcoded cid (464bc275)
+* skip AP cache on context processing methods (a3ee7447)
+* skip AP cache on context processing methods (10e4d579)
+* cache key (9eea12ec)
+* cache key (74fa77dd)
+* missing orderedItems on category outbox index retrieval (8496e1ef)
+* #14084, fix tags not getting properly removed from topics (0a94cecb)
+* group badge on group details page (52e8ede8)
+* return digest header only if it is set to something (aka not null) (1ad9ce5f)
+* missing page parseInt (9978af59)
+* dont add self username when clicking reply (9fcaad38)
+* notifs (ed3a3672)
+* also use tx.compile in chat notif merge (6d22e33a)
+* publish id with user outbox, fixes #13478 (c08a45a5)
+* merge with txArgs (e1d0e2a0)
+* merged notification translations (34b68109)
+* derped handleBack in world.js (ac483152)
+* syntax error on undefined value (6b3b3e7e)
+* filter out image attachments from remote data if they are already embedded in content (40b8544f)
+* update thumbs loading logic to always include post attachments as part of thumbs (prior: was controlled by thumbsOnly flag orshowPostUploadsAsThumbnail setting) (c2d190e1)
+* #14072, world to call thumbs with thumbsOnly filter (f1976168)
+* promises in groups.leave (f826e629)
+* #14071, duplicate items loaded via IS on /world (d29f1fbd)
+* #14043, cold-load redirect should only affect guests (5a7316b1)
+* hacking handleBack module to work with world page (971c8603)
+* bump web-push (27e12a28)
+* patch translateKey to wrap arguments in first string isolate (FSI) and Pop Directional Isolate (PDI) characters (59f19ba4)
+* add missing db call (4d1d1c86)
+* #14061, world.js show more buttons on infinite scroll (0aead782)
+* update clamp-fade to use mask-image, add background to btn-link on Brite skin (9bc1b400)
+* #14046, sneak in a mention to the community in mocked replies (b8ef027c)
+* world page 'see more' bugs (cc733631)
+* #13239, unescape custom user field values (9e69b9ad)
+* restore `preview` as it is now supported by BridyFed (8a371d23)
+* missing done (9604a0cd)
+* bump harmony, #14042 (b02cdaa9)
+* #14042, adopt plugin-feed's show-more/less logic/scss (43f2951a)
+* update minimum title length default to zero to allow title-less topics via composer (6bfe3cd0)
+* parent cid (f567d970)
+* skip parsing of duplicate emoji tags (363cad29)
+* **deps:**
+ * update dependency cronstrue to v3.14.0 (#14107) (f51e1b2a)
+ * update dependency nodemailer to v8.0.3 (#14104) (fa7c1a52)
+ * update dependency esbuild to v0.27.4 (#14090) (c26bfddf)
+ * update dependency lru-cache to v11.2.7 (#14096) (3765fb37)
+ * update dependency tough-cookie to v6.0.1 (#14097) (d5f4a370)
+ * update dependency nodebb-theme-peace to v2.2.57 (#14076) (cd08a5e4)
+ * update dependency nodemailer to v8.0.2 (#14077) (add3c651)
+ * update dependency satori to v0.25.0 (#14037) (817c38b9)
+ * update dependency postcss to v8.5.8 (#14051) (942619db)
+ * update dependency pg to v8.20.0 (#14058) (9cc2c2f9)
+ * update dependency pg-cursor to v2.19.0 (#14059) (045a7073)
+ * update dependency terser-webpack-plugin to v5.3.17 (#14052) (4410d884)
+ * update dependency multer to v2.1.1 (#14050) (de22b7a9)
+ * update dependency webpack to v5.105.4 (#14053) (3dc3b2e2)
+ * update dependency fs-extra to v11.3.4 (#14049) (cfb6145e)
+ * update dependency satori to v0.19.3 (#14036) (250911b7)
+ * update dependency nodebb-plugin-emoji to v6.0.6 (#14034) (7434103c)
+ * update dependency sitemap to v9.0.1 (#14028) (f97484c2)
+ * update dependency webpack to v5.105.3 (#14022) (38787a2d)
+ * update dependency multer to v2.1.0 (#14024) (9b65e316)
+ * update dependency pg-cursor to v2.18.0 (#14026) (54810cfd)
+ * update dependency pg to v8.19.0 (#14025) (badb57f2)
+ * update dependency autoprefixer to v10.4.27 (#14021) (054b4aa6)
+
+##### Other Changes
+
+* remove unused (19bb37ca)
+* jobs.json (e1b6e617)
+* remove unused (d6d3116e)
+* remove unused (b50a10df)
+
+##### Performance Improvements
+
+* switch to set, remove parseFloat in redis (09de6fb9)
+* move out nconf.get and isClientScript regex (4d55ee0a)
+* move out nconf.get and isClientScript regex (f2bca332)
+* make a single round trip for set(s)Remove (bcbb7bc4)
+* cache groups:createtime (380d9895)
+
+##### Refactors
+
+* /world sorting logic to always use topics/sorted logic (e2131d1d)
+* move to data (36bf3f16)
+* get rid of cleanupUids use missing set (6569ea51)
+* remove async.series, use batch.processSortedSet (894248e6)
+* get rid of helper function (1cc77343)
+* switch to cursor (1c7daf0d)
+* use set (d9344140)
+* pass in cid to rename/remove (fe4a22fb)
+* remove admin.themes.getInstalled (92d72f67)
+
+##### Tests
+
+* add missing selectedCategory to world.yaml (779a372f)
+* exclude uploadScreenshot from routeMap parsing test (ff1e1b92)
+* make tests happy (08bed89b)
+* fix test maybe (25f6088f)
+* add one more topic to tag test (e01cb104)
+* cleaner user.delete test (215d6440)
+* set minimumtitlelength for test (7429b5d4)
+* added test to ensure that Likes do not get processed when privilege is rescinded (8cba65cd)
+* break apart inbox handling tests to its own file in test/activitypub (06e0bd6a)
+* add debug test to see if failing test is due to race condition (e3119c76)
+* fix spec (6dd9f734)
+
+#### v4.9.2 (2026-03-11)
+
+##### Chores
+
+* up deps (c1e1e4fd)
+* up deps (bbdf8263)
+* up harmony (c179a959)
+* up themes (4173793b)
+* up themes (a8bb0034)
+* up themes (829d8230)
+* up themes (4f8bb728)
+* up themes (58336941)
+* up widgets (95fcb392)
+* up peace (9b22d144)
+* incrementing version number - v4.9.1 (72e44c86)
+* update changelog for v4.9.1 (dcc46707)
+* incrementing version number - v4.9.0 (3fdd1bef)
+* incrementing version number - v4.8.1 (713ae0c0)
+* incrementing version number - v4.8.0 (3fac737a)
+* incrementing version number - v4.7.2 (cd419d8a)
+* incrementing version number - v4.7.1 (afb88805)
+* incrementing version number - v4.7.0 (e82d40f8)
+* incrementing version number - v4.6.3 (9fc5b0f3)
+* incrementing version number - v4.6.2 (f98747db)
+* incrementing version number - v4.6.1 (f47aa678)
+* incrementing version number - v4.6.0 (ee395bc5)
+* incrementing version number - v4.5.2 (ad2da639)
+* incrementing version number - v4.5.1 (69f4b61f)
+* incrementing version number - v4.5.0 (f05c5d06)
+* incrementing version number - v4.4.6 (074043ad)
+* incrementing version number - v4.4.5 (6f106923)
+* incrementing version number - v4.4.4 (d323af44)
+* incrementing version number - v4.4.3 (d354c2eb)
+* incrementing version number - v4.4.2 (55c510ae)
+* incrementing version number - v4.4.1 (5ae79b4e)
+* incrementing version number - v4.4.0 (0a75eee3)
+* incrementing version number - v4.3.2 (b92b5d80)
+* incrementing version number - v4.3.1 (308e6b9f)
+* incrementing version number - v4.3.0 (bff291db)
+* incrementing version number - v4.2.2 (17fecc24)
+* incrementing version number - v4.2.1 (852a270c)
+* incrementing version number - v4.2.0 (87581958)
+* incrementing version number - v4.1.1 (b2afbb16)
+* incrementing version number - v4.1.0 (36c80850)
+* incrementing version number - v4.0.6 (4a52fb2e)
+* incrementing version number - v4.0.5 (1792a62b)
+* incrementing version number - v4.0.4 (b1125cce)
+* incrementing version number - v4.0.3 (2b65c735)
+* incrementing version number - v4.0.2 (73fe5fcf)
+* incrementing version number - v4.0.1 (a461b758)
+* incrementing version number - v4.0.0 (c1eaee45)
+
+##### New Features
+
+* add partial query help in acp manage users (330106e8)
+* add mastodon share, closes #14069 (02b06492)
+* clicking on timeago permalink of a nested reply (4bb281ae)
+
+##### Bug Fixes
+
+* mask-image to use line-heights instead of hardcoded 60% (2e21d214)
+* closes #14074, only return url & name (92fcdd09)
+* closes #14073, fix teasers from child categories (a391d01d)
+* promises in groups.leave (8ec1cccc)
+* hide unread anchor properly when close to bottom (457f6cf3)
+* if quoting self, dont add @, but keep the username (304f89c0)
+* unread count changes from 99+ to 123 (b9b63bf5)
+* fix bottom sheet max-height so it doesn't push the top out of viewport (009be468)
+* #14062 recipients is normal set (0be40810)
+* add missing db call (d35c7455)
+* closes #14062 (1fc3edf7)
+* ghostscrollbar colors on dark skins (d6f5420b)
+* #13239, unescape custom user field values (2f5fccdb)
+* text-break on outgoing link (4f07b345)
+* logic in checkRequired (2428602f)
+* closes #14041, show specific error message (b2681646)
+* dont crash if payload isnt Error (c98ef396)
+* closes #14039, only keep chat input in view on the chats page (44434b0d)
+* thumbs, send type for resize (30893a1a)
+* #14033, fix gif profile images (06bf2abf)
+* **deps:**
+ * update dependency multer to v2.1.1 (#14050) (8f960ff4)
+ * update dependency nodebb-plugin-emoji to v6.0.6 (#14034) (811344b8)
+
+##### Performance Improvements
+
+* make a single round trip for set(s)Remove (f6f51f83)
+* cache groups:createtime (c4e9e1cb)
+
+##### Refactors
+
+* get rid of pop (4af03139)
+* switch to cursor (4aea3a80)
+* update upgrade script to scan for missing tid::recipients (75f52cad)
+* move resolve flags and activitypub.out.remove.context (88b91c20)
+* use includes (0c43e2da)
+
+##### Tests
+
+* fix spec (bdb91e82)
+* fix btn tests (c8308718)
+
+#### v4.9.1 (2026-03-01)
+
+##### Chores
+
+* up harmony (643991ab)
+* incrementing version number - v4.9.0 (3fdd1bef)
+* update changelog for v4.9.0 (a39fa9fc)
+* incrementing version number - v4.8.1 (713ae0c0)
+* incrementing version number - v4.8.0 (3fac737a)
+* incrementing version number - v4.7.2 (cd419d8a)
+* incrementing version number - v4.7.1 (afb88805)
+* incrementing version number - v4.7.0 (e82d40f8)
+* incrementing version number - v4.6.3 (9fc5b0f3)
+* incrementing version number - v4.6.2 (f98747db)
+* incrementing version number - v4.6.1 (f47aa678)
+* incrementing version number - v4.6.0 (ee395bc5)
+* incrementing version number - v4.5.2 (ad2da639)
+* incrementing version number - v4.5.1 (69f4b61f)
+* incrementing version number - v4.5.0 (f05c5d06)
+* incrementing version number - v4.4.6 (074043ad)
+* incrementing version number - v4.4.5 (6f106923)
+* incrementing version number - v4.4.4 (d323af44)
+* incrementing version number - v4.4.3 (d354c2eb)
+* incrementing version number - v4.4.2 (55c510ae)
+* incrementing version number - v4.4.1 (5ae79b4e)
+* incrementing version number - v4.4.0 (0a75eee3)
+* incrementing version number - v4.3.2 (b92b5d80)
+* incrementing version number - v4.3.1 (308e6b9f)
+* incrementing version number - v4.3.0 (bff291db)
+* incrementing version number - v4.2.2 (17fecc24)
+* incrementing version number - v4.2.1 (852a270c)
+* incrementing version number - v4.2.0 (87581958)
+* incrementing version number - v4.1.1 (b2afbb16)
+* incrementing version number - v4.1.0 (36c80850)
+* incrementing version number - v4.0.6 (4a52fb2e)
+* incrementing version number - v4.0.5 (1792a62b)
+* incrementing version number - v4.0.4 (b1125cce)
+* incrementing version number - v4.0.3 (2b65c735)
+* incrementing version number - v4.0.2 (73fe5fcf)
+* incrementing version number - v4.0.1 (a461b758)
+* incrementing version number - v4.0.0 (c1eaee45)
+
+##### New Features
+
+* allow callers to parse topic teasers (92c0bd8f)
+
+##### Bug Fixes
+
+* #14032, fix regression in room creation (2d49da78)
+* parent cid (04477f07)
+* ordering nested categories (a1b77fa0)
+* text-nowrap on timestamps (117ae6aa)
+* fullscreen acp graphs (f1fa8f12)
+* skip parsing of duplicate emoji tags (6f129167)
+
+##### Other Changes
+
+* remove unused (08e94e35)
+
+##### Refactors
+
+* more cid parseInt changes (1b518f0e)
+* show plus signs (c85e464b)
+
+##### Tests
+
+* fix spec (12122637)
+
+#### v4.9.0 (2026-02-27)
+
+##### Chores
+
+* up peace (cf0f2923)
+* up peace (0b3dd38b)
+* up peace (e4b15e05)
+* up peace (64a3c822)
+* up tdbsearch (50f5541e)
+* up harmony (44f663b1)
+* up harmony (fd2c9927)
+* up harmony (066470b1)
+* up harmony (bfa8d5aa)
+* up harmony (df3de36c)
+* up harmony (c1581a12)
+* up mentions (537d3676)
+* up harmony (41ef71fa)
+* up themes (38680c3e)
+* up harmony (6da00614)
+* up persona (033f9198)
+* up themes (84ec8ef9)
+* up harmony (f818dd96)
+* up themes (bac67399)
+* up harmony (dd84a303)
+* up composer (41bc49f7)
+* up themes, add hide to alert (824a9b77)
+* update harmony (b061d078)
+* up composer (d0cc1c95)
+* white space (3dfd9a43)
+* up themes (97917103)
+* up composer (1543650a)
+* up themes (47217803)
+* up composer (8423da04)
+* up themes (a84464cf)
+* up themes (bafd5db0)
+* up mentions (bc1fd892)
+* up mentions (0fd8200a)
+* up mentions (9cd87fca)
+* up mentions/composer (06f4f700)
+* up link-preview (4aac6562)
+* forcibly resetting all translations for custom-reason.json (c2695d89)
+* up harmony (d6b7f27c)
+* new fallbacks (1d17352f)
+* up harmony (72510734)
+* up harmony (2a5ab6dd)
+* up harmony (7d4a440a)
+* up markdown (86c62708)
+* up composer (3de603f6)
+* up deps (b3807656)
+* up deps (a241c624)
+* up composer (f06557b7)
+* harmony (118ceb72)
+* up harmony (f2795753)
+* up harmony (5c3f2651)
+* up composer & harmony (931ae67d)
+* up harmony (e6737941)
+* up harmony (8d6b6f6a)
+* incrementing version number - v4.8.1 (713ae0c0)
+* update changelog for v4.8.1 (f53aab43)
+* incrementing version number - v4.8.0 (3fac737a)
+* incrementing version number - v4.7.2 (cd419d8a)
+* incrementing version number - v4.7.1 (afb88805)
+* incrementing version number - v4.7.0 (e82d40f8)
+* incrementing version number - v4.6.3 (9fc5b0f3)
+* incrementing version number - v4.6.2 (f98747db)
+* incrementing version number - v4.6.1 (f47aa678)
+* incrementing version number - v4.6.0 (ee395bc5)
+* incrementing version number - v4.5.2 (ad2da639)
+* incrementing version number - v4.5.1 (69f4b61f)
+* incrementing version number - v4.5.0 (f05c5d06)
+* incrementing version number - v4.4.6 (074043ad)
+* incrementing version number - v4.4.5 (6f106923)
+* incrementing version number - v4.4.4 (d323af44)
+* incrementing version number - v4.4.3 (d354c2eb)
+* incrementing version number - v4.4.2 (55c510ae)
+* incrementing version number - v4.4.1 (5ae79b4e)
+* incrementing version number - v4.4.0 (0a75eee3)
+* incrementing version number - v4.3.2 (b92b5d80)
+* incrementing version number - v4.3.1 (308e6b9f)
+* incrementing version number - v4.3.0 (bff291db)
+* incrementing version number - v4.2.2 (17fecc24)
+* incrementing version number - v4.2.1 (852a270c)
+* incrementing version number - v4.2.0 (87581958)
+* incrementing version number - v4.1.1 (b2afbb16)
+* incrementing version number - v4.1.0 (36c80850)
+* incrementing version number - v4.0.6 (4a52fb2e)
+* incrementing version number - v4.0.5 (1792a62b)
+* incrementing version number - v4.0.4 (b1125cce)
+* incrementing version number - v4.0.3 (2b65c735)
+* incrementing version number - v4.0.2 (73fe5fcf)
+* incrementing version number - v4.0.1 (a461b758)
+* incrementing version number - v4.0.0 (c1eaee45)
+* **i18n:**
+ * fallback strings for new resources: nodebb.admin-manage-categories (a797090f)
+ * fallback strings for new resources: nodebb.notifications, nodebb.admin-menu, nodebb.admin-settings-activitypub (bde5e0b4)
+ * fallback strings for new resources: nodebb.admin-menu, nodebb.admin-settings-activitypub (b43fadd0)
+ * fallback strings for new resources: nodebb.admin-menu (7b71252e)
+ * fallback strings for new resources: nodebb.admin-dashboard (3f5dafd0)
+ * fallback strings for new resources: nodebb.admin-settings-uploads (aa4f4808)
+ * fallback strings for new resources: nodebb.notifications (c84a86e4)
+ * fallback strings for new resources: nodebb.notifications, nodebb.user (41e7c144)
+ * fallback strings for new resources: nodebb.admin-manage-users (c3315063)
+ * fallback strings for new resources: nodebb.notifications (9524359d)
+ * fallback strings for new resources: nodebb.topic (a4369b93)
+ * fallback strings for new resources: nodebb.error, nodebb.user (0b9efa85)
+ * fallback strings for new resources: nodebb.admin-manage-privileges (7f6fcd05)
+ * fallback strings for new resources: nodebb.topic (781a900c)
+ * fallback strings for new resources: nodebb.admin-advanced-cache (64dad9db)
+ * fallback strings for new resources: nodebb.admin-advanced-cache (f0fb661c)
+ * fallback strings for new resources: nodebb.admin-settings-chat, nodebb.admin-settings-notifications (756e2434)
+ * fallback strings for new resources: nodebb.groups (d133f910)
+ * fallback strings for new resources: nodebb.groups (4bccc311)
+ * fallback strings for new resources: nodebb.admin-settings-web-crawler (e4455b1c)
+ * fallback strings for new resources: nodebb.world (b527cb5a)
+ * fallback strings for new resources: nodebb.admin-manage-users, nodebb.notifications (b04d2dbc)
+ * fallback strings for new resources: nodebb.admin-manage-users (2c0a60c4)
+ * fallback strings for new resources: nodebb.category, nodebb.world (5bf6b335)
+ * fallback strings for new resources: nodebb.notifications (2a8b6d44)
+ * fallback strings for new resources: nodebb.notifications (304a2ab1)
+ * fallback strings for new resources: nodebb.notifications (3c6804d4)
+ * fallback strings for new resources: nodebb.modules, nodebb.notifications (317bcd89)
+ * fallback strings for new resources: nodebb.admin-development-info (54743724)
+ * fallback strings for new resources: nodebb.admin-settings-uploads (f8d6c4e8)
+ * fallback strings for new resources: nodebb.topic (77eef491)
+ * fallback strings for new resources: nodebb.themes-harmony (cc2772ba)
+ * fallback strings for new resources: nodebb.admin-settings-email (c26698d6)
+ * fallback strings for new resources: nodebb.error (aaa9570e)
+ * fallback strings for new resources: nodebb.topic (dce82aae)
+* **deps:**
+ * update redis docker tag to v8.6.1 (#14009) (898c3f1d)
+ * update commitlint monorepo to v20.4.2 (#14005) (1ae5041f)
+ * update dependency @stylistic/eslint-plugin to v5.9.0 (#14006) (efae106e)
+ * update dependency jsdom to v28.1.0 (#13992) (ec8e547c)
+ * update postgres docker tag to v18.2 (#13987) (25f866ca)
+ * update redis docker tag to v8.6.0 (#13976) (bb5e7118)
+ * update dependency @stylistic/eslint-plugin to v5.8.0 (#13965) (c61326df)
+ * update dependency jsdom to v28 (#13947) (b61fa426)
+ * update commitlint monorepo to v20.4.1 (#13945) (a9042602)
+ * update commitlint monorepo to v20.4.0 (#13938) (531b8374)
+ * update dependency smtp-server to v3.18.1 (#13936) (d8595d69)
+ * update dependency @stylistic/eslint-plugin to v5.7.1 (#13920) (b036034a)
+ * update dependency sass-embedded to v1.97.3 (#13921) (75a04aed)
+
+##### Documentation Changes
+
+* added new ACP routes (82b7f429)
+* add missing privileges prop to world schema (4ef9d5fa)
+* add bookmarks to postobject in /world (07f9eda9)
+* add bookmarks to postobject (9a15b571)
+* chat teasers are different (91323dce)
+* add teaser to postobject schema (0178e4fb)
+* OpenAPI schema for rules re-ordering route (072dd1ae)
+
+##### New Features
+
+* support the magic break string '[...]' in content, such that if found, outbound federation will use all content up to (and including) that string in its summary (cd357aaf)
+* add a '[...]' to the end of the generated summary when federating out articles (fep-b2b8) (bf0f5228)
+* prune topics remote cids, closes #13461 (20eb02f1)
+* change notif controls to toggles (523e3b49)
+* add invitedBy to user info page, closes #13972, closes #13997 (1dae3d22)
+* quick create on world page (5df2b8b7)
+* allow configuring unreadCutoff per user, closes #6811 (8c6ce198)
+* introduce new topics:crosspost privilege (5c35dc86)
+* add guest-cta.tpl and lang strings (9da67474)
+* track all caches created in acp (9ac507e5)
+* closes #5867, dont email if user already read notification (a55651d1)
+* allow re-ordering of auto-categorization rules (fd43368a)
+* add group tx key (45ff9f0d)
+* eslint10 (#13967) (62d88555)
+* closes #13968, add sitemap cache duration (fe35ad4f)
+* add data-field values from tpl into search dict (abcfc1a5)
+* closes https://github.com/NodeBB/NodeBB/pull/11970 (007efc21)
+* closes #13961, rename ban-reasons to custom reasons (0eaf2bee)
+* ban/mute reasons (#13960) (d086ed2c)
+* show bodyLong in notifications, closes #4767 (30541a96)
+* allow converting pasted images, closes #10352 (472a8fc1)
+* add language key for untitled topic draft (0125ab55)
+* add missing lang key for light/dark (870c6310)
+* closes #13009, add dedicated test smtp button (c8488012)
+* closes #13203, make users room owners on private chats (61662f19)
+* topic crossposts generate topic events, #13908 (0c79eaa5)
+* remote account banning, #13904 (560ad81f)
+* opportunistic backfill, #13895 (33c2de9c)
+
+##### Bug Fixes
+
+* #14003, set ACAO header on webfinger responses (415602d8)
+* restore coveralls script, update gh action to ignore failures (3fab2074)
+* change && to ; (95ea376a)
+* add `--no-fail` flag to coveralls invocation (c6ddef67)
+* dont show /register page after req.session.forceLogin is set (0ef27187)
+* escape fullname in chatWithMessage (64a072c9)
+* send guests to login page if they access uncategorized topics without local posts (b4f8e20b)
+* remove allowed check from notes.assert as it is already done downstream in topics.(post|reply), update privilege check to inherit world privs if passed-in cid is remote cid (64724629)
+* NaN on ap post delete (53b208b7)
+* guard against crash when malformed URL present in deliverees (6a0663cd)
+* remove unused ACP route (f7d87ecb)
+* remove unused ACP controller, add instance count to federation > safety (a35b7d73)
+* allow break string and summary limits to be defined and applied (29111ba7)
+* make tables responsive on relays/rules pages (0071216c)
+* don't show magic break string in regularly parsed posts, tests for ap mocks lib (b460506e)
+* remove `preview` in mocked note for now, due to lack of support (fep-b2b8) (31773694)
+* topic purge (e484899d)
+* upgrade script, dont remove while processing zset (7a23e291)
+* dont store ap tids in topics:tid (e8ef2e5c)
+* closes #14010 (003e6d07)
+* hook name (d6cf5fba)
+* add missing timestamp (68eba728)
+* gate /world behind ensureLoggedIn middleware (bcfdbf7c)
+* #14007, deny access for guests to topics in cid -1, unless a post from a local user exists (de4f016f)
+* closes #7221 restrict cropperjs box to profileImageDimension form ACP (f2bbf369)
+* category search shoudn't return results that match in the cid part (75477202)
+* favicon url (1a35131a)
+* allow passing a selected category markup (309d3003)
+* overflowing images on /world (438b4f62)
+* missing cb in world IS handler (ab62a8e4)
+* closes #14002, add max-height (9c5ffe36)
+* fallbacks and latest translations for nodebb.user (053ce073)
+* keep chat input in view after adding new messages (2f88f776)
+* #14001, regression from adjusted acceptable types list (80f61022)
+* don't publish name on generated titles (9fbdc792)
+* closes #13999, delay cache creation (42362ccf)
+* when registering through an invite, prepopulate the email field on /register/complete with the email (2015777f)
+* bump persona (a68311de)
+* bump harmony for world page changes (e76f8a60)
+* only call syncUserInboxes on post create if local uid creates post in cid -1 (45d2e628)
+* schema... not sure why I need this all of a sudden (3e2070b2)
+* minor cleanup of quick-reply args; opts.body (a9c2457f)
+* render new post in feed when posting via quick create (eb0aa6d8)
+* call syncUserInboxes asyncronously (5da35bda)
+* update quickreply.init so that it can be passed an options parameter, generate proper draft id for world page (94df9738)
+* lint, unused class (4bf0f61e)
+* increase categories sent to 1k closes #12841 (3c08b730)
+* #13993, encodeURICompoent pid since it can be AP url (b607a80a)
+* wrong wrapping of route (bb9033af)
+* dont call getInbox for /recent (1ca9841c)
+* #13990, don't blindly set `user` field on notification objects (8c8782fd)
+* unbans not triggering if user data is loaded wit 'banned' property only (0b7df274)
+* #13894, buildCategoryLabel helper checks fa-nbb-none (4b9b3648)
+* missing gap (e16c5677)
+* gate crossposting behind new topics:crosspost privilege (fe8fd9d6)
+* #13983, show only local categories in ACP privilege selector (c4411423)
+* add example value for failing schema test (292e70f7)
+* lint (1598004e)
+* bad relative path (7eb49136)
+* regression from refactor of uploadedpicture refactor (b95cd882)
+* organize rules and relays logic to separate methods (78d7130c)
+* #13969, bump mentions (4a38d67c)
+* lint (9ebd8f4f)
+* #13962, infinite scroll and pagination not working on world (9f1369a2)
+* bump themes, l10n world sort label (76fe4bdd)
+* rename translations as well (433d318f)
+* cant store URL in nconf (6cb6cf7d)
+* update tx config (1e109c2e)
+* derpy api page (aef0bd97)
+* guard against incomplete objects when building context/chain (13422bc8)
+* closes #13953, show uid pic in post queue notification (a8a1089e)
+* remote post notifs missing bodyLong (18c04d34)
+* double-ajaxify on socket connect (381334f4)
+* dont update teaser for public chats (149d649a)
+* acp graph labels, dont use indices (17bfd73e)
+* closes #8642, stricter username check (94885109)
+* if there is no hr create one (f249699d)
+* closes #13240, move the updatedTeaser to the top of the recent chat list (0a9c5d30)
+* regression with updateHistory (b7ea2767)
+* #13939, dont append / if url is empty (2dc49c82)
+* acp category selector when category has image (ef75f1ba)
+* pagination always getting set to default (eab4025b)
+* folder name (f05f8b63)
+* proper attachment generation on replies, fixed replies getting thumb attachment when it wasn't part of it (69c5f941)
+* closes #13734, set process.env.NODE_ENV early using argv (252d1d09)
+* update buildRecipents to add option to skip target creation step, update ap actors for note to not bother building targets (ad27347f)
+* notes announce cache, use cache when retrieving tid posters (eb27b964)
+* optimizations (e697d600)
+* cache detection logic in context parseItem executing earlier than needed causing false positives (f9affbad)
+* closes #12458, on socket.io reconnect (13bf64c9)
+* restrict topic backfill to logged-in users when browsing to a category (0262bb83)
+* replace attachment generation logic in notes.public (428b6e73)
+* #13900, assertion re-index (6383bb58)
+* simplicity tweak (39582cbd)
+* export sendMessage as _sendMessage for use in ap jobs lib (4bab9fb4)
+* #13892, logical flaw (8b7d350e)
+* **i18n:**
+ * global fallbacks again (955579fa)
+ * 'global' resource fallbacks (c47acec9)
+* **deps:**
+ * update dependency sanitize-html to v2.17.1 (#14004) (096e9a3e)
+ * update dependency redis to v5.11.0 (#13996) (63199ea7)
+ * update dependency rimraf to v6.1.3 (#13994) (b40f5c7b)
+ * update dependency qs to v6.15.0 (#13995) (5f82e56b)
+ * update dependency sortablejs to v1.15.7 (#13985) (71d4a6fc)
+ * update dependency nodebb-plugin-composer-default to v10.3.16 (#13991) (ff292f7d)
+ * update dependency webpack to v5.105.2 (#13986) (1020092b)
+ * update dependency qs to v6.14.2 (#13978) (6e4e02a6)
+ * update dependency lru-cache to v11.2.6 (#13970) (2cddaf86)
+ * update dependency satori to v0.19.2 (#13974) (c4420da3)
+ * update dependency webpack to v5.105.1 (#13975) (48929aae)
+ * update dependency esbuild to v0.27.3 (#13957) (15ba76e3)
+ * update dependency semver to v7.7.4 (#13958) (fe66c812)
+ * update dependency nodemailer to v8 (#13951) (ab60c39c)
+ * update dependency mongodb to v7.1.0 (#13950) (85e99d6b)
+ * update dependency webpack to v5.105.0 (#13949) (e7101330)
+ * update dependency commander to v14.0.3 (#13946) (765c1291)
+ * update dependency pg-cursor to v2.17.0 (#13942) (1f285293)
+ * update dependency pg to v8.18.0 (#13941) (4eb8854c)
+ * update dependency autoprefixer to v10.4.24 (#13940) (b837c253)
+ * update dependency nodebb-theme-harmony to v2.1.37 (#13935) (9ec96aec)
+ * update dependency nodemailer to v7.0.13 (#13934) (290198b1)
+ * update dependency express-useragent to v2.1.0 (#13929) (82d6f35b)
+ * update dependency lru-cache to v11.2.5 (#13932) (b4c5657a)
+ * update dependency ace-builds to v1.43.6 (#13922) (d911a736)
+ * update dependency sass to v1.97.3 (#13925) (87c4d416)
+ * update dependency express-session to v1.19.0 (#13926) (e0e7c5ea)
+ * update dependency nodebb-theme-harmony to v2.1.36 (#13923) (abfb10e3)
+ * update dependency pg-cursor to v2.16.2 (#13915) (14e20a32)
+ * update dependency lodash to v4.17.23 (#13916) (0b822c96)
+ * update dependency pg to v8.17.2 (#13914) (3f50d52a)
+ * update dependency pg to v8.17.1 (#13901) (271239d4)
+ * update dependency pg to v8.17.1 (#13893) (cc8b2db5)
+ * update dependency pg-cursor to v2.16.1 (#13894) (62498a3c)
+ * update dependency nodebb-theme-harmony to v2.1.35 (#13896) (5b5955d6)
+ * update dependency satori to v0.19.1 (#13898) (dd6fda81)
+
+##### Other Changes
+
+* fix lint errors (fc474238)
+* remove unused (68acc059)
+* remove useless assignment (652629df)
+* #13982, dont use btn-group on dropdowns (803473ca)
+* //github.com/NodeBB/NodeBB/issues/13982 (26af029a)
+* remove unused regex (1747cf81)
+* filter at the end of user.search (dcbbc187)
+* invalid-username doesnt have params (fb460725)
+
+##### Performance Improvements
+
+* don't call getUids on every topic load (8a60d9c2)
+
+##### Refactors
+
+* add topic-await-review notif text (bac9f1f7)
+* ActivityPub ACP page to its own top-level section with sub-pages (f0d2be35)
+* allow passing an array to topics.purge and topics.purgePost… (#14018) (e4c945f6)
+* dont store ap pids in posts:pid (de1f04d9)
+* closes #7155, (bb7be8c5)
+* shorter check (a70a62cc)
+* isHookValid (63c9a6e0)
+* add icons to selected/all (970a4204)
+* users table (e3d7abe0)
+* pass options to thumbs.load (0424728f)
+* slugify isn't heavy anymore (fb95f8a3)
+* don't create giant array, process in batches of 500 (ed8cbd6e)
+* use opendir instead of loading all files (ce9bd0bb)
+* teaser object schema to its own file (1869b807)
+* privileges.global.can works with array of privileges (fd6984d2)
+* shorter hook (a8a85bcb)
+* updateTags to modern js (3756a8fe)
+* shorter check (b0f2fead)
+* cache page to table (7336c58c)
+* emoji replacement code into helper function, remove use of regex on untrusted user input (9608cce6)
+* add createFieldChecker (#13973) (c65af199)
+* run searches in parallel (9a198c38)
+* shorter (3f67a000)
+* remove unused url (7f4d537d)
+* get rid of url.parse in core (157959df)
+* use translator.compile which escapes % and , (a2f4c185)
+* shorter (b3dc7f43)
+* remove log (ff1376b3)
+* get rid of cache for tid posters, was never cleared (065abbf2)
+* dont use module, explodes on latest webpack (a4e3fe10)
+* use lru directly (c8cd34bf)
+* format (070d77fd)
+* shorter tpl (e2fc349d)
+* get rid of global.env, use process.env.NODE_ENV (07d1f224)
+* make custom user field icons fixed width in the acp (2ded6813)
+* use local cache for plugin isActive check (7ac5446a)
+* Actors.getLocalFollowers to Actors.getFollowers, can pass in both local and remote ids (fac31859)
+* move username check to createOrQueue (37675689)
+* checkUsername function https://github.com/NodeBB/NodeBB/issues/10864 (7e27da61)
+* shorter params (05e76edd)
+* move ap jobs to its own file (c595edb4)
+
+##### Tests
+
+* remove assert (872d7c74)
+* remove old test (59f35e6f)
+* update tests to allow title-less topics (b1c097f8)
+* show topic data on test fail (6e6900ba)
+* fix redis, from was string in map, but int in notif object (a8c68ddc)
+* fix spec (0e2a42d5)
+* fix missing priv in tests (5c73d338)
+* add test to check picture!=uploadedpicture (0c2ab232)
+* fix hasOwn (d52b1359)
+* group members test (ffc4c0dd)
+* add more info to failiing response (87fdca2a)
+* fix spec, remove log (05dd46c3)
+* favicon test (ca237e67)
+* dont return cover:url if its not requested (e4d852b4)
+* fix username test (db07456b)
+* fix test that explodes on new URL (694b545c)
+* another test fix (94873c33)
+* fix file name (05d4d857)
+* fix spec (d601847a)
+* fix tests (0d19294a)
+* fix tests, update mentions composer (d6c69465)
+* fix typo in spec (43be594a)
+* fix spec (d1a39554)
+* add missing spec for admin page (30014f41)
+* remove unused (018e1c5f)
+* fix spec (bc1593b2)
+
+#### v4.8.1 (2026-01-28)
+
+##### Chores
+
+* fix progress (a82f18cc)
+* fix typo in upgrade script name (619819de)
+* up composer (871089da)
+* up composer (a061672d)
+* up themes (d2e1629f)
+* up link-preview (f90c8649)
+* up dbsearch (469a8ef9)
+* up harmony (c1a92c47)
+* up harmony (317be96f)
+* incrementing version number - v4.8.0 (3fac737a)
+* update changelog for v4.8.0 (a9fbcf2a)
+* incrementing version number - v4.7.2 (cd419d8a)
+* incrementing version number - v4.7.1 (afb88805)
+* incrementing version number - v4.7.0 (e82d40f8)
+* incrementing version number - v4.6.3 (9fc5b0f3)
+* incrementing version number - v4.6.2 (f98747db)
+* incrementing version number - v4.6.1 (f47aa678)
+* incrementing version number - v4.6.0 (ee395bc5)
+* incrementing version number - v4.5.2 (ad2da639)
+* incrementing version number - v4.5.1 (69f4b61f)
+* incrementing version number - v4.5.0 (f05c5d06)
+* incrementing version number - v4.4.6 (074043ad)
+* incrementing version number - v4.4.5 (6f106923)
+* incrementing version number - v4.4.4 (d323af44)
+* incrementing version number - v4.4.3 (d354c2eb)
+* incrementing version number - v4.4.2 (55c510ae)
+* incrementing version number - v4.4.1 (5ae79b4e)
+* incrementing version number - v4.4.0 (0a75eee3)
+* incrementing version number - v4.3.2 (b92b5d80)
+* incrementing version number - v4.3.1 (308e6b9f)
+* incrementing version number - v4.3.0 (bff291db)
+* incrementing version number - v4.2.2 (17fecc24)
+* incrementing version number - v4.2.1 (852a270c)
+* incrementing version number - v4.2.0 (87581958)
+* incrementing version number - v4.1.1 (b2afbb16)
+* incrementing version number - v4.1.0 (36c80850)
+* incrementing version number - v4.0.6 (4a52fb2e)
+* incrementing version number - v4.0.5 (1792a62b)
+* incrementing version number - v4.0.4 (b1125cce)
+* incrementing version number - v4.0.3 (2b65c735)
+* incrementing version number - v4.0.2 (73fe5fcf)
+* incrementing version number - v4.0.1 (a461b758)
+* incrementing version number - v4.0.0 (c1eaee45)
+
+##### Bug Fixes
+
+* upgrade script to handle topics that were already pruned (03b7374c)
+* closes #13899 (f98de3e9)
+* #10682, fix all the other rss routes as well (385a4d03)
+* protocol (da5605e0)
+* closes #12986 (310e90c7)
+* #13919 (b2c6fbed)
+* use min (090b9f55)
+* #13918, make arrayLimit configurable increase default to 50 (d25e7726)
+* closes #13258, dont mark digest as delivered if it fails (f29c9f06)
+* wrap fields in quotes in user csv export (1b08aef2)
+* closes #13199 normalize accept header (ec4e7ef1)
+* closes #10682, strip unicode control chars (d867d8ad)
+* require (d3f653e6)
+* remove bidi chars from displayname (07d2c946)
+* closes #11499 (50c26dd5)
+* remove lowercase bidi controls as well (512b1e72)
+* #13909, show 413 error properly (39af8383)
+* closes #11606, detect musl and use sass instead (442f9f1d)
+* make translator.unescape stricter like escape (e505e369)
+* closes #13887, make translator.escape stricter (b2fa7304)
+* closes #13897, display group create errors properly (7d36c757)
+* consider crossposts when building teasers, fixes #13891 (c494d002)
+* #13892, logical flaw (98c0a3fe)
+
+##### Refactors
+
+* get rid of map, move parallel calls into promise.all (e231c010)
+* dont include scheduled topics in unread (7bc9fe3b)
+* remove chats.initialized, all events handlers are removed before being added (fffe039f)
+* move chat page events to a new file (ab39e7f8)
+* add guards against bad data & infi loops (6b3ec636)
+* tags were moved into topic hash a while ago (2ba8907a)
+* already checked inside user.isPasswordValid (635715ef)
+* get rid of intersect and use a faster method to load recently created tids (1cbc128a)
+* shorter params (bb6ed76e)
+* use async/await for group search (fe4a4476)
+* put alltime in query string for term (639ea42d)
+* crossposts.get to support multiple tids (57a73c48)
+
+##### Tests
+
+* add missing awaits, change error message (918bb044)
+* dont return cross posts (be5b36bc)
+
+#### v4.8.0 (2026-01-14)
+
+##### Chores
+
+* **deps:**
+ * update dependency @stylistic/eslint-plugin to v5.7.0 (#13879) (be0d43cf)
+ * update commitlint monorepo to v20.3.1 (#13876) (c88ce519)
+ * update dependency sass-embedded to v1.97.2 (#13870) (27d511ff)
+ * update commitlint monorepo to v20.3.0 (#13865) (447cfd03)
+ * update dependency smtp-server to v3.18.0 (#13858) (f35c77dd)
+ * update dependency jsdom to v27.4.0 (#13860) (37c052f4)
+ * update dependency sass-embedded to v1.97.1 (#13850) (d28866ab)
+ * update dependency sass-embedded to v1.97.0 (#13837) (168b6e63)
+ * update dependency smtp-server to v3.17.1 (#13829) (ad895efb)
+ * update dependency @eslint/js to v9.39.2 (#13830) (22fe83f0)
+ * update github artifact actions (#13831) (b1696218)
+ * update actions/cache action to v5 (#13828) (0fcc8543)
+ * update dependency smtp-server to v3.17.0 (#13824) (3adcbe0f)
+ * update dependency sass-embedded to v1.96.0 (#13821) (b992511b)
+ * update dependency sass-embedded to v1.95.1 (#13817) (a2f2c8c7)
+ * update dependency jsdom to v27.3.0 (#13814) (a35c326a)
+ * update commitlint monorepo to v20.2.0 (#13810) (e50edd52)
+ * update dependency lint-staged to v16.2.7 (#13785) (76b6b3b2)
+ * update actions/checkout action to v6 (#13802) (7f21a171)
+* bump profile max upload size default (bed6ed3c)
+* up themes (b323b5d8)
+* up markdown (eb77c9bf)
+* up mentions (648d9c78)
+* incrementing version number - v4.7.2 (cd419d8a)
+* update changelog for v4.7.2 (2f0526b8)
+* incrementing version number - v4.7.1 (afb88805)
+* allow direct testing in test/categories.js (29687722)
+* incrementing version number - v4.7.0 (e82d40f8)
+* incrementing version number - v4.6.3 (9fc5b0f3)
+* incrementing version number - v4.6.2 (f98747db)
+* incrementing version number - v4.6.1 (f47aa678)
+* incrementing version number - v4.6.0 (ee395bc5)
+* incrementing version number - v4.5.2 (ad2da639)
+* incrementing version number - v4.5.1 (69f4b61f)
+* incrementing version number - v4.5.0 (f05c5d06)
+* incrementing version number - v4.4.6 (074043ad)
+* incrementing version number - v4.4.5 (6f106923)
+* incrementing version number - v4.4.4 (d323af44)
+* incrementing version number - v4.4.3 (d354c2eb)
+* incrementing version number - v4.4.2 (55c510ae)
+* incrementing version number - v4.4.1 (5ae79b4e)
+* incrementing version number - v4.4.0 (0a75eee3)
+* incrementing version number - v4.3.2 (b92b5d80)
+* incrementing version number - v4.3.1 (308e6b9f)
+* incrementing version number - v4.3.0 (bff291db)
+* incrementing version number - v4.2.2 (17fecc24)
+* incrementing version number - v4.2.1 (852a270c)
+* incrementing version number - v4.2.0 (87581958)
+* incrementing version number - v4.1.1 (b2afbb16)
+* incrementing version number - v4.1.0 (36c80850)
+* incrementing version number - v4.0.6 (4a52fb2e)
+* incrementing version number - v4.0.5 (1792a62b)
+* incrementing version number - v4.0.4 (b1125cce)
+* incrementing version number - v4.0.3 (2b65c735)
+* incrementing version number - v4.0.2 (73fe5fcf)
+* incrementing version number - v4.0.1 (a461b758)
+* incrementing version number - v4.0.0 (c1eaee45)
+
+##### Documentation Changes
+
+* update openapi schema for missing routes related to crossposting (d81b644d)
+
+##### New Features
+
+* user crossposts federate as:Announce (273bc68c)
+* add missing files, minor changes to crossposts list modal (38fd1798)
+* introduce new front-end UI button for cross-posting, hide move on topics in remote cids (0041cfe2)
+* disallow moving topics to and from remote categories, + basic tests for topic moving (ea1e4c7d)
+* API v3 calls to crosspost and uncrosspost a topic to and from a category (74172ecc)
+* refactor out.announce.topic to allow user announces, refactor tests to accommodate (874ffd7b)
+* stop extraneous vote and tids_read data from being saved for remote users (097d0802)
+* support remote Dislike activity, federate out a Dislike on downvote, bwahahah (528cd258)
+* expand postingRestrictedToMods mask testing, handle actor update for that prop (6a561050)
+* setAddBulk (#13805) (7d5402fe)
+* save privilege masking set when asserting group (f0a7a442)
+* patch low-level privilege query calls to accept privilege masks at the cid level (4020e1be)
+* federate out topic removal activities when topic is deleted and purged from a local category (3ab61615)
+
+##### Bug Fixes
+
+* i18n fallbacks (a73ab8ee)
+* #13889, custom emoji from Piefed (0c75934a)
+* #13888, decode html entities for AP category name and description (6eea4df5)
+* derp (bcc204fa)
+* bump themes (a4c470ff)
+* guard against negative uids crossposting (2f96eed4)
+* bump themes (943b53b0)
+* calling sortedSetRemove to remove multiple values, instead of baking it into sortedSetRemoveBulk (82507c0f)
+* unused values (b9b33f9f)
+* typo, client-side handling of crossposts as pertains to uncategorized topics (7465762d)
+* client-side handling of category selector when cross-posting so only local cids are sent to backend (ea417b06)
+* update category sync logic to utilise crossposts instead (e5ee52e5)
+* remove old remote user to remote category migration logic + tests (28249efb)
+* update auto-categorization rules to also handle already-categorized topics via crosspost (148663c5)
+* topic crosspost delete and purge handling (f6cc556d)
+* bug where privileges users could not uncrosspost others' crossposts. Tests (0a0a7da9)
+* allow non-mods to crosspost, move crosspost button out of topic tools, in-modal state updates (6daaad81)
+* removed ajaxify refresh on crosspost commit, dynamically update post stats in template, logic fix (b981082d)
+* nodeinfo route to publish federation.enabled in metadata section (14aa2bee)
+* bump link-preview again (74e47820)
+* bump link-preview (486e77c7)
+* remove commented out require (ffc3d279)
+* bump link-preview (cc1649e0)
+* auto-enable post queue as default, adjust tests to compensate (9390ccb6)
+* remove bidiControls from notification.bodyShort (b0679cad)
+* author of boosted content was not targeted in the activity (b05199d8)
+* closes #13872, use translator.compile for notification text (5a031d01)
+* #13715, dont reduce hardcap if usersPerPage is < 50 (cb31e70e)
+* dont use sass-embedded on freebsd, #13867 (b7de0cc7)
+* wrong increment value (20918b52)
+* increment progress on upgrade script (8abe0dfa)
+* add join-lemmy context for outgoing category group actors context prop (f1d50c35)
+* use setsAdd (d8e55d58)
+* missing await (4a6dcf1a)
+* admin privilege overrides only apply to local categories (7b194c69)
+* have notes.assert call out.announce.topic only if uid is set (so, if note assertion is called via search; manual pull) (3b7bcba6)
+* deep clone activity prop before execution; feps.announce (977a67f4)
+* minor comment fix (411baa21)
+* publish `postingRestrictedToMods` property in group actor (c365c1dc)
+* **deps:**
+ * update dependency spdx-license-list to v6.11.0 (#13890) (9b1c32b1)
+ * update dependency diff to v8.0.3 (#13882) (974ab1f8)
+ * update dependency nodebb-theme-persona to v14.1.23 (#13878) (47074b3c)
+ * update dependency nodebb-theme-harmony to v2.1.31 (#13877) (125c8e58)
+ * update dependency body-parser to v2.2.2 (#13873) (e717f00e)
+ * update dependency sass to v1.97.2 (#13871) (5100cc4f)
+ * update dependency nodebb-plugin-markdown to v13.2.3 (#13869) (a8c18f8a)
+ * update dependency nodebb-theme-harmony to v2.1.30 (#13863) (49379e2e)
+ * update dependency nodebb-theme-persona to v14.1.22 (#13864) (e4435e52)
+ * update dependency @isaacs/ttlcache to v2.1.4 (#13861) (89abdca1)
+ * update socket.io packages to v4.8.3 (#13857) (6807f860)
+ * update dependency sass to v1.97.1 (#13856) (7325b995)
+ * update dependency nodebb-theme-persona to v14.1.20 (#13855) (b8f68fb4)
+ * update dependency nodebb-theme-harmony to v2.1.28 (#13854) (f98fd6dc)
+ * update dependency fs-extra to v11.3.3 (#13851) (160ce17f)
+ * update dependency nodemailer to v7.0.12 (#13853) (f6ef041c)
+ * update dependency nodebb-plugin-2factor to v7.6.1 (#13852) (abcb2382)
+ * update dependency validator to v13.15.26 (#13846) (2a10f904)
+ * update dependency nodebb-theme-persona to v14.1.19 (#13849) (b933d1a2)
+ * update dependency nodebb-theme-harmony to v2.1.27 (#13848) (61d8cba9)
+ * update dependency webpack to v5.104.1 (#13847) (bb5a90a3)
+ * update dependency esbuild to v0.27.2 (#13842) (5844e393)
+ * update dependency nodebb-plugin-mentions to v4.8.4 (#13845) (2ffa4383)
+ * update dependency webpack to v5.104.0 (#13839) (f16eec30)
+ * update dependency sass to v1.97.0 (#13838) (ab8dbb41)
+ * update dependency fetch-cookie to v3.2.0 (#13836) (0ef5cbbb)
+ * update dependency autoprefixer to v10.4.23 (#13835) (7c2e8330)
+ * update dependency terser-webpack-plugin to v5.3.16 (#13827) (da7c9b32)
+ * update dependency sass to v1.96.0 (#13822) (d4f53a62)
+ * update dependency winston to v3.19.0 (#13812) (81c232f1)
+ * update dependency cron to v4.4.0 (#13818) (f077c4ca)
+ * update dependency sass to v1.95.1 (#13816) (adedb7b6)
+ * update dependency sass to v1.95.0 (#13815) (eaa6e71a)
+ * update dependency terser-webpack-plugin to v5.3.15 (#13811) (10d2e929)
+ * update dependency esbuild to v0.27.1 (#13806) (6b1dcb4b)
+ * update dependency jsonwebtoken to v9.0.3 (#13807) (7b734cfd)
+ * update dependency ace-builds to v1.43.5 (#13797) (93057306)
+ * update dependency lru-cache to v11.2.4 (#13798) (731933a6)
+ * update dependency express to v4.22.1 (#13800) (38321220)
+ * update dependency ipaddr.js to v2.3.0 (#13801) (ad5cd27b)
+ * update dependency nodemailer to v7.0.11 (#13799) (ecec1f45)
+ * update dependency cron to v4.3.5 (#13796) (5ba6bea0)
+ * update dependency body-parser to v2.2.1 (#13795) (624ef616)
+ * update dependency @isaacs/ttlcache to v2.1.3 (#13791) (5f55ca85)
+ * update dependency sass to v1.94.2 (#13786) (1cb8b381)
+ * update dependency redis to v5.10.0 (#13787) (1bcfe3f0)
+
+##### Other Changes
+
+* fix... tests (d20906b5)
+* still broken... more debug logs (a82e1f44)
+* log mock results (8236b594)
+
+##### Refactors
+
+* check if tid is truthy (0e1ccfc9)
+* crossposts.get to return limited category data (name, icon, etc.), fixed up crosspost modal to hide uncategorized and all categories options (349b0875)
+* move crosspost methods into their own file in src/topics (1be88ca0)
+* silence if-function deprecation on prod (403230cc)
+* clear quick reply as soon as submitting (a331f8da)
+
+##### Tests
+
+* intify uid/cid if they are numbers (when getting crossposts) (47e37ed5)
+* stop using partialDeepStrictEqual for now (0677689a)
+* ensure auto-cat and cat sync logic properly integrates with crossposts (add163a4)
+* crossposting behaviour and logic tests (947676ef)
+* new test file for crossposts (3560b6a3)
+* additional logic to allow multi-typing in schema type (4f1fa2d1)
+* lowercase tags (81cac015)
+* fix test to check for Secure in cookie string if test runner domain is https (5954015e)
+* more out.announce tests (cfdbbb04)
+* basic tests for activitypub.out (67912dc9)
+* update activitypub._sent to save targets as well, updated tests to accommodate format change (41368ef8)
+* test runs should not actually federate activities out (483ab083)
+* check if tests pass without await (5414cf47)
+* add back logs for failing test (301b5386)
+* add a test for set db.exists (#13809) (69562704)
+* fix failing test by adjusting the tests (c5292442)
+* privilege masking tests (934e6be9)
+* log label (22d3c523)
+* log activities (e39c9149)
+* on test fail show activities (841bd825)
+* new mongodb deps (#13793) (287b2569)
+
+#### v4.7.2 (2025-12-24)
+
+##### Chores
+
+* up body-parser (59dd1ca6)
+* up mentions (d505301f)
+* incrementing version number - v4.7.1 (afb88805)
+* update changelog for v4.7.1 (8668cfb3)
+* incrementing version number - v4.7.0 (e82d40f8)
+* incrementing version number - v4.6.3 (9fc5b0f3)
+* incrementing version number - v4.6.2 (f98747db)
+* incrementing version number - v4.6.1 (f47aa678)
+* incrementing version number - v4.6.0 (ee395bc5)
+* incrementing version number - v4.5.2 (ad2da639)
+* incrementing version number - v4.5.1 (69f4b61f)
+* incrementing version number - v4.5.0 (f05c5d06)
+* incrementing version number - v4.4.6 (074043ad)
+* incrementing version number - v4.4.5 (6f106923)
+* incrementing version number - v4.4.4 (d323af44)
+* incrementing version number - v4.4.3 (d354c2eb)
+* incrementing version number - v4.4.2 (55c510ae)
+* incrementing version number - v4.4.1 (5ae79b4e)
+* incrementing version number - v4.4.0 (0a75eee3)
+* incrementing version number - v4.3.2 (b92b5d80)
+* incrementing version number - v4.3.1 (308e6b9f)
+* incrementing version number - v4.3.0 (bff291db)
+* incrementing version number - v4.2.2 (17fecc24)
+* incrementing version number - v4.2.1 (852a270c)
+* incrementing version number - v4.2.0 (87581958)
+* incrementing version number - v4.1.1 (b2afbb16)
+* incrementing version number - v4.1.0 (36c80850)
+* incrementing version number - v4.0.6 (4a52fb2e)
+* incrementing version number - v4.0.5 (1792a62b)
+* incrementing version number - v4.0.4 (b1125cce)
+* incrementing version number - v4.0.3 (2b65c735)
+* incrementing version number - v4.0.2 (73fe5fcf)
+* incrementing version number - v4.0.1 (a461b758)
+* incrementing version number - v4.0.0 (c1eaee45)
+
+##### Bug Fixes
+
+* update data-isowner when changing is ownership (1f9f2dff)
+* bump 2factor (d0313712)
+
+##### Tests
+
+* change redis connection (#13844) (550411fb)
+* add await to check tests (1305faa8)
+* add back logs for failing test (9f8d5070)
+
+#### v4.7.1 (2025-12-17)
+
+##### Chores
+
+* up widget-essentials (9d666550)
+* remove log (2142b680)
+* up harmony (59f649b8)
+* incrementing version number - v4.7.0 (e82d40f8)
+* update changelog for v4.7.0 (1c0a43dc)
+* incrementing version number - v4.6.3 (9fc5b0f3)
+* incrementing version number - v4.6.2 (f98747db)
+* incrementing version number - v4.6.1 (f47aa678)
+* incrementing version number - v4.6.0 (ee395bc5)
+* incrementing version number - v4.5.2 (ad2da639)
+* incrementing version number - v4.5.1 (69f4b61f)
+* incrementing version number - v4.5.0 (f05c5d06)
+* incrementing version number - v4.4.6 (074043ad)
+* incrementing version number - v4.4.5 (6f106923)
+* incrementing version number - v4.4.4 (d323af44)
+* incrementing version number - v4.4.3 (d354c2eb)
+* incrementing version number - v4.4.2 (55c510ae)
+* incrementing version number - v4.4.1 (5ae79b4e)
+* incrementing version number - v4.4.0 (0a75eee3)
+* incrementing version number - v4.3.2 (b92b5d80)
+* incrementing version number - v4.3.1 (308e6b9f)
+* incrementing version number - v4.3.0 (bff291db)
+* incrementing version number - v4.2.2 (17fecc24)
+* incrementing version number - v4.2.1 (852a270c)
+* incrementing version number - v4.2.0 (87581958)
+* incrementing version number - v4.1.1 (b2afbb16)
+* incrementing version number - v4.1.0 (36c80850)
+* incrementing version number - v4.0.6 (4a52fb2e)
+* incrementing version number - v4.0.5 (1792a62b)
+* incrementing version number - v4.0.4 (b1125cce)
+* incrementing version number - v4.0.3 (2b65c735)
+* incrementing version number - v4.0.2 (73fe5fcf)
+* incrementing version number - v4.0.1 (a461b758)
+* incrementing version number - v4.0.0 (c1eaee45)
+
+##### Continuous Integration
+
+* drop ARM v7 from docker builds (#13808) (254370c5)
+
+##### New Features
+
+* stop extraneous vote and tids_read data from being saved for remote users (9f729964)
+* add hreflang to buildLinkTag (ba85474d)
+* #13790, allow ssl setup in psql (5bd1f7b7)
+
+##### Bug Fixes
+
+* wrong increment value (b1fc5bfd)
+* increment progress on upgrade script (9f94a721)
+* disallow inline viewing of unsafe files (#13833) (5ae8d553)
+* moving topic to cid=-1 will remove it from list (90a15134)
+* show errors when saving settings (f49f540b)
+* closes #13666, update category label (193aaf55)
+* respect user pagination settings in infinite scroll (#13765) (#13788) (ebf2a2c5)
+* remove hardcoded name for sentinel, #13794 (53e22acf)
+
+##### Other Changes
+
+* fix missing comma (9fb41c69)
+
+##### Reverts
+
+* spec change (b19281b0)
+
+##### Tests
+
+* fix tests (11b01dfc)
+
+#### v4.7.0 (2025-11-26)
+
+##### Chores
+
+* incrementing version number - v4.6.3 (9fc5b0f3)
+* update changelog for v4.6.3 (3fd193e3)
+* incrementing version number - v4.6.2 (f98747db)
+* up dbsearch (dfe53d29)
+* up harmony, closes #13753 (4e33c1df)
+* up express-useragent (b5ea2089)
+* up ttlcache to 2.x (a0a10c8b)
+* up themes (52c56bc5)
+* incrementing version number - v4.6.1 (f47aa678)
+* incrementing version number - v4.6.0 (ee395bc5)
+* incrementing version number - v4.5.2 (ad2da639)
+* incrementing version number - v4.5.1 (69f4b61f)
+* incrementing version number - v4.5.0 (f05c5d06)
+* incrementing version number - v4.4.6 (074043ad)
+* incrementing version number - v4.4.5 (6f106923)
+* incrementing version number - v4.4.4 (d323af44)
+* incrementing version number - v4.4.3 (d354c2eb)
+* incrementing version number - v4.4.2 (55c510ae)
+* incrementing version number - v4.4.1 (5ae79b4e)
+* incrementing version number - v4.4.0 (0a75eee3)
+* incrementing version number - v4.3.2 (b92b5d80)
+* incrementing version number - v4.3.1 (308e6b9f)
+* incrementing version number - v4.3.0 (bff291db)
+* incrementing version number - v4.2.2 (17fecc24)
+* incrementing version number - v4.2.1 (852a270c)
+* incrementing version number - v4.2.0 (87581958)
+* incrementing version number - v4.1.1 (b2afbb16)
+* incrementing version number - v4.1.0 (36c80850)
+* incrementing version number - v4.0.6 (4a52fb2e)
+* incrementing version number - v4.0.5 (1792a62b)
+* incrementing version number - v4.0.4 (b1125cce)
+* incrementing version number - v4.0.3 (2b65c735)
+* incrementing version number - v4.0.2 (73fe5fcf)
+* incrementing version number - v4.0.1 (a461b758)
+* incrementing version number - v4.0.0 (c1eaee45)
+* **deps:**
+ * update dependency @stylistic/eslint-plugin to v5.6.1 (#13778) (894f1988)
+ * update redis docker tag to v8.4.0 (#13782) (e24d8c17)
+ * update postgres docker tag to v18.1 (#13771) (3ea029bd)
+ * update dependency jsdom to v27.2.0 (#13770) (899414f4)
+ * update dependency smtp-server to v3.16.1 (#13755) (bc64d27f)
+ * update dependency mocha to v11.7.5 (#13754) (e1bf80dc)
+ * update redis docker tag to v8.2.3 (#13750) (4c5f7f60)
+ * update github artifact actions (#13730) (13c23fdd)
+ * update dependency @eslint/js to v9.39.1 (#13747) (4e7867a9)
+ * update dependency sass-embedded to v1.93.3 (#13745) (cb96701b)
+ * update dependency jsdom to v27.1.0 (#13743) (4ce4e773)
+ * update mongo docker tag to v8.2 (#13738) (97e5aa1d)
+ * update dependency smtp-server to v3.16.0 (#13737) (07d169d2)
+ * update dependency lint-staged to v16.2.6 (#13725) (e3c55f76)
+ * update dependency lint-staged to v16.2.5 (#13721) (83a172c9)
+ * update dependency @stylistic/eslint-plugin to v5.5.0 (#13717) (93d46c84)
+ * update dependency jsdom to v27.0.1 (#13718) (9d2b83f5)
+ * update dependency @eslint/js to v9.38.0 (#13716) (7fd9e894)
+ * update actions/setup-node action to v6 (#13708) (febe0ae0)
+ * update dependency smtp-server to v3.15.0 (#13702) (238600a0)
+ * update dependency lint-staged to v16.2.4 (#13699) (f608c7c7)
+ * update postgres docker tag to v18 (#13679) (923ddbc1)
+ * update dependency @eslint/js to v9.37.0 (#13693) (d73892ae)
+ * update redis docker tag to v8.2.2 (#13692) (4640a63e)
+ * update dependency mocha to v11.7.4 (#13685) (c7696667)
+ * update dependency @commitlint/cli to v20.1.0 (#13686) (eb06bda8)
+* **i18n:**
+ * fallback strings for new resources: nodebb.admin-manage-categories (49567c72)
+ * fallback strings for new resources: nodebb.admin-settings-uploads (e7498e8f)
+
+##### New Features
+
+* federate out undo(announce) when moving topics (832477f8)
+* native image appending for remote private notes (822f4edc)
+* add isNumber to client-side helpers (172aabcb)
+* handle Move(Context) activity (8ca52c7e)
+* update Remove(Context) to use target instead of origin, federate out Move(Context) on topic move between local cids (d02e188a)
+* context removal logic (aka moving topics to uncategorized, and federating this to other NodeBBs) (34e95e6d)
+* add new setting to control posts uploads being shown as thumbs (97e59fbe)
+* handle Delete(Context) as a move to cid -1 if the remote context still exists (f98a7216)
+* handle incoming Announce(Delete), closes #13712 (4d5005b9)
+* execute 1b12 rebroadcast logic on all tids even if not posted to a local cid (9583f0d4)
+* auto-enable link-preview plugin on new installations (b153941c)
+* bundle link-preview plugin (e7bdf6bc)
+* federate topic deletion on topic deletion as well as purge (4d24309a)
+* federate Delete on post delete as well as purge, topic deletion federates Announce(Delete(Object)) (93b6cb59)
+
+##### Bug Fixes
+
+* **deps:**
+ * bump mentions to fix #13637 (e3ac9ccf)
+ * update dependency rimraf to v6.1.2 (#13784) (5ab8f877)
+ * update dependency @isaacs/ttlcache to v2.1.2 (#13780) (cecc0fee)
+ * update dependency workerpool to v10.0.1 (#13781) (bfffb4b9)
+ * update dependency webpack to v5.103.0 (#13783) (5acfd184)
+ * update dependency sass to v1.94.1 (#13777) (b0c9bb1e)
+ * update dependency mongodb to v6.21.0 (#13772) (111ae163)
+ * update dependency sass to v1.94.0 (#13773) (c95bfcbf)
+ * update dependency validator to v13.15.23 (#13769) (93c69f9d)
+ * update dependency express-useragent to v2.0.2 (#13767) (e14d3ac1)
+ * update dependency autoprefixer to v10.4.22 (#13768) (9271e267)
+ * update dependency @isaacs/ttlcache to v2.1.1 (#13763) (f24bb090)
+ * update dependency esbuild to v0.27.0 (#13766) (63789ebb)
+ * update dependency cron to v4.3.4 (#13762) (6ad93cd3)
+ * update dependency sharp to v0.34.5 (#13758) (5be0a630)
+ * update dependency bcryptjs to v3.0.3 (#13751) (a34284df)
+ * update dependency sitemap to v9 (#13752) (1921ccaa)
+ * update dependency esbuild to v0.25.12 (#13748) (090eb088)
+ * update dependency rimraf to v6.1.0 (#13744) (a36d89fc)
+ * update dependency sass to v1.93.3 (#13746) (ba123073)
+ * update dependency sitemap to v8.0.2 (#13736) (b5c1e8e7)
+ * update mentions (5c3b1261)
+ * update dependency validator to v13.15.20 (#13733) (6f448ce2)
+ * bump mentions to 4.8.0 (964a5388)
+ * update dependency commander to v14.0.2 (#13731) (a49efe49)
+ * update dependency redis to v5.9.0 (#13727) (418717fd)
+ * update dependency nodemailer to v7.0.10 (#13726) (c1f6e52b)
+ * update dependency workerpool to v10 (#13723) (5a6c2097)
+ * update dependency sitemap to v8.0.1 (#13720) (1d9d7fc5)
+ * update dependency ace-builds to v1.43.4 (#13714) (27a0dc73)
+ * bump dbsearch (c25c6290)
+ * update dependency esbuild to v0.25.11 (#13710) (41b7a91d)
+ * update dependency chart.js to v4.5.1 (#13704) (bf37c7bd)
+ * update dependency nodebb-theme-persona to v14.1.15 (#13701) (fa18287d)
+ * update dependency nodebb-theme-harmony to v2.1.21 (#13700) (49a29325)
+ * update dependency nodemailer to v7.0.9 (#13695) (5d3709f0)
+ * update dependency semver to v7.7.3 (#13697) (a2892f60)
+ * update dependency webpack to v5.102.1 (#13698) (bb7b65ea)
+ * update dependency nodemailer to v7.0.7 (#13694) (5dc9f2c5)
+ * update dependency redis to v5.8.3 (#13691) (9b6e9b2a)
+ * update dependency winston to v3.18.3 (#13687) (19dc1025)
+* null check on attachments property in assertPrivate (9d83a3d0)
+* update announce and undo(announce) so that their IDs don't use timestamps (24e17683)
+* incorrect topic event added when topic moved out of cid -1 (used to be a share by the user; since removed.) (2b733e4a)
+* #13654, improper OrderedCollectionPage ID (aa7e078f)
+* IS logic when body.height < window.height (bdb45248)
+* update markdown and web-push to latest versions (c51b7b65)
+* bump mentions to 4.8.2 (2ce691cb)
+* rename activitypub.out.announce.category, federate out Delete on topic move to cid -1 (9bb8a955)
+* bump harmony and persona for #13756 (c616e657)
+* renderOverride to not clobber url if already set in template data (2066727f)
+* bump themes for cross-post support, #13396 (9d3e8179)
+* add replies in parallel during note assertion (4858abe1)
+* logic error in context generation (748cc5ee)
+* relax toPid assertion checks so that it only checks that it is a number or uri (30b1212a)
+* update logic so that purging a post does not remove toPid fields from children, updated addParentPosts so that post existence is checked (f6219d00)
+* update category mock to save full handle (524df6e5)
+* logic error in out.remove.context (ab9154aa)
+* cross-check remove(context) target prop against cid (194cedb4)
+* update logic re: federating out topic moves (4f2f872b)
+* bad var (22868d3f)
+* call api.topics method on topic move during note assertion, have category announce new topic on note assertion (3df4970c)
+* do not include image or icon props if they are falsy values (603068ae)
+* rebroadcasting logic should only execute for local tids if the remote cid is not addressed already (1d529473)
+* move Announce(Delete) out of topics.move and into topics API method (fadac616)
+* do not include actor from reflected activity when rebroadcasting remote cid (3fa74d4c)
+* broken category urls in to, cc (d4695f10)
+* update getPrivateKey to send application actor key when cid 0 (a45f6f9c)
+* update targets in 1b12 rebroadcast when cid is remote (58a9e1c4)
+* update 1b12 rebroadcast logic to send as application actor if post is in remote cid (79d08853)
+* regression caused by d3b3720915f5846e8f5a8e0bee9c17b3ff233902 (af5efbd7)
+* crash in tests (6c210068)
+* add attachments to retrieved post data onNewPost (07bed55e)
+
+##### Other Changes
+
+* //github.com/NodeBB/NodeBB/issues/13713 (2425f3b6)
+
+##### Refactors
+
+* deleteOrRestore internal method to federate out a Delete on delete, not just purge; better adheres to FEP 4f05 (e6911be3)
+* get rid of post.exists check, if post doesnt exist content is falsy (17944037)
+* move all methods in src/api/activitypub.js to src/activitypub.out.js (3ede64d8)
+* user announces no longer occur on topic move. Instead, the new category announces. Only occurs when topic moved to local categories. (e09bb8b6)
+* inbox announce(delete) handling to also handle context deletion, #13712 (2b2028e4)
+* move post attachment handling directly into posts.create (d3b37209)
+
+##### Reverts
+
+* remove `federatedDescription` category field, closes #13757 (ed83bc5b)
+
+##### Tests
+
+* update test for toPid logic to reflect that toPid stays even if parent is purged (98a1101d)
+
+#### v4.6.3 (2025-11-20)
+
+##### Chores
+
+* incrementing version number - v4.6.2 (f98747db)
+* update changelog for v4.6.2 (8da3819c)
+* incrementing version number - v4.6.1 (f47aa678)
+* incrementing version number - v4.6.0 (ee395bc5)
+* incrementing version number - v4.5.2 (ad2da639)
+* incrementing version number - v4.5.1 (69f4b61f)
+* incrementing version number - v4.5.0 (f05c5d06)
+* incrementing version number - v4.4.6 (074043ad)
+* incrementing version number - v4.4.5 (6f106923)
+* incrementing version number - v4.4.4 (d323af44)
+* incrementing version number - v4.4.3 (d354c2eb)
+* incrementing version number - v4.4.2 (55c510ae)
+* incrementing version number - v4.4.1 (5ae79b4e)
+* incrementing version number - v4.4.0 (0a75eee3)
+* incrementing version number - v4.3.2 (b92b5d80)
+* incrementing version number - v4.3.1 (308e6b9f)
+* incrementing version number - v4.3.0 (bff291db)
+* incrementing version number - v4.2.2 (17fecc24)
+* incrementing version number - v4.2.1 (852a270c)
+* incrementing version number - v4.2.0 (87581958)
+* incrementing version number - v4.1.1 (b2afbb16)
+* incrementing version number - v4.1.0 (36c80850)
+* incrementing version number - v4.0.6 (4a52fb2e)
+* incrementing version number - v4.0.5 (1792a62b)
+* incrementing version number - v4.0.4 (b1125cce)
+* incrementing version number - v4.0.3 (2b65c735)
+* incrementing version number - v4.0.2 (73fe5fcf)
+* incrementing version number - v4.0.1 (a461b758)
+* incrementing version number - v4.0.0 (c1eaee45)
+
+##### Bug Fixes
+
+* update validator dep. to get fix for CVE-2025-56200 (af477d0c)
+* missing logic in mocks.notes.private that precluded the use of emoji (76a07d59)
+* tiny fix for IS when page is empty (12dab849)
+
+#### v4.6.2 (2025-11-19)
+
+##### Chores
+
+* up emoji (5bc5bb3d)
+* up peace, closes #13774 (f764b791)
+* incrementing version number - v4.6.1 (f47aa678)
+* update changelog for v4.6.1 (655c858b)
+* incrementing version number - v4.6.0 (ee395bc5)
+* incrementing version number - v4.5.2 (ad2da639)
+* incrementing version number - v4.5.1 (69f4b61f)
+* incrementing version number - v4.5.0 (f05c5d06)
+* incrementing version number - v4.4.6 (074043ad)
+* incrementing version number - v4.4.5 (6f106923)
+* incrementing version number - v4.4.4 (d323af44)
+* incrementing version number - v4.4.3 (d354c2eb)
+* incrementing version number - v4.4.2 (55c510ae)
+* incrementing version number - v4.4.1 (5ae79b4e)
+* incrementing version number - v4.4.0 (0a75eee3)
+* incrementing version number - v4.3.2 (b92b5d80)
+* incrementing version number - v4.3.1 (308e6b9f)
+* incrementing version number - v4.3.0 (bff291db)
+* incrementing version number - v4.2.2 (17fecc24)
+* incrementing version number - v4.2.1 (852a270c)
+* incrementing version number - v4.2.0 (87581958)
+* incrementing version number - v4.1.1 (b2afbb16)
+* incrementing version number - v4.1.0 (36c80850)
+* incrementing version number - v4.0.6 (4a52fb2e)
+* incrementing version number - v4.0.5 (1792a62b)
+* incrementing version number - v4.0.4 (b1125cce)
+* incrementing version number - v4.0.3 (2b65c735)
+* incrementing version number - v4.0.2 (73fe5fcf)
+* incrementing version number - v4.0.1 (a461b758)
+* incrementing version number - v4.0.0 (c1eaee45)
+
+##### Bug Fixes
+
+* #13779, svg uploads (e3002411)
+* #13776, if plugin is in install/package.json use latest version from there (abfb6d13)
+* category labels showing up on infinite scroll on category page (dece0628)
+* crash in resolveInboxes (9900171f)
+* log out user if session cookie resolves to non-existent uid (5d9da603)
+* make i18n test failure message easier to read (3a81f903)
+* wrong auto-categorization if group actor is explicitly included in `audience` (be4d0e81)
+* order of operations when updating category handle (5cfec5b1)
+* closes #13729, fix filename encoding (9410f466)
+
+##### Other Changes
+
+* fix lint (008e1ae4)
+
+##### Refactors
+
+* remove unused share (aacd27ee)
+
+##### Tests
+
+* add test for #13729 (430a3e81)
+
+#### v4.6.1 (2025-10-17)
+
+##### Chores
+
+* up persona (b309a672)
+* up harmony (79327e6c)
+* incrementing version number - v4.6.0 (ee395bc5)
+* update changelog for v4.6.0 (c0d9bb07)
+* incrementing version number - v4.5.2 (ad2da639)
+* incrementing version number - v4.5.1 (69f4b61f)
+* incrementing version number - v4.5.0 (f05c5d06)
+* incrementing version number - v4.4.6 (074043ad)
+* incrementing version number - v4.4.5 (6f106923)
+* incrementing version number - v4.4.4 (d323af44)
+* incrementing version number - v4.4.3 (d354c2eb)
+* incrementing version number - v4.4.2 (55c510ae)
+* incrementing version number - v4.4.1 (5ae79b4e)
+* incrementing version number - v4.4.0 (0a75eee3)
+* incrementing version number - v4.3.2 (b92b5d80)
+* incrementing version number - v4.3.1 (308e6b9f)
+* incrementing version number - v4.3.0 (bff291db)
+* incrementing version number - v4.2.2 (17fecc24)
+* incrementing version number - v4.2.1 (852a270c)
+* incrementing version number - v4.2.0 (87581958)
+* incrementing version number - v4.1.1 (b2afbb16)
+* incrementing version number - v4.1.0 (36c80850)
+* incrementing version number - v4.0.6 (4a52fb2e)
+* incrementing version number - v4.0.5 (1792a62b)
+* incrementing version number - v4.0.4 (b1125cce)
+* incrementing version number - v4.0.3 (2b65c735)
+* incrementing version number - v4.0.2 (73fe5fcf)
+* incrementing version number - v4.0.1 (a461b758)
+* incrementing version number - v4.0.0 (c1eaee45)
+
+##### Bug Fixes
+
+* do not include image or icon props if they are falsy values (ecf95d18)
+* #13705, don't cover link if preview is opening up (499c50a4)
+* logic error in image mime type checking (623cec9d)
+* omg what. (ec399897)
+
+#### v4.6.0 (2025-10-01)
+
+##### Chores
+
+* remove unneeded secureRandom require (3fcaa678)
+* incrementing version number - v4.5.2 (ad2da639)
+* update changelog for v4.5.2 (9a596d67)
+* fix grammatical error in language string (cf3964be)
+* remove formatApiResponse logging (feda629f)
+* up eslint (a5ea4b40)
+* incrementing version number - v4.5.1 (69f4b61f)
+* update default settings (5d653571)
+* incrementing version number - v4.5.0 (f05c5d06)
+* incrementing version number - v4.4.6 (074043ad)
+* incrementing version number - v4.4.5 (6f106923)
+* incrementing version number - v4.4.4 (d323af44)
+* incrementing version number - v4.4.3 (d354c2eb)
+* incrementing version number - v4.4.2 (55c510ae)
+* incrementing version number - v4.4.1 (5ae79b4e)
+* incrementing version number - v4.4.0 (0a75eee3)
+* incrementing version number - v4.3.2 (b92b5d80)
+* incrementing version number - v4.3.1 (308e6b9f)
+* incrementing version number - v4.3.0 (bff291db)
+* incrementing version number - v4.2.2 (17fecc24)
+* incrementing version number - v4.2.1 (852a270c)
+* incrementing version number - v4.2.0 (87581958)
+* incrementing version number - v4.1.1 (b2afbb16)
+* incrementing version number - v4.1.0 (36c80850)
+* incrementing version number - v4.0.6 (4a52fb2e)
+* incrementing version number - v4.0.5 (1792a62b)
+* incrementing version number - v4.0.4 (b1125cce)
+* incrementing version number - v4.0.3 (2b65c735)
+* incrementing version number - v4.0.2 (73fe5fcf)
+* incrementing version number - v4.0.1 (a461b758)
+* incrementing version number - v4.0.0 (c1eaee45)
+* **deps:**
+ * update dependency lint-staged to v16.2.3 (#13681) (d7e93a5d)
+ * update actions/download-artifact action to v5 (#13646) (30ca0000)
+ * update dependency @eslint/js to v9.36.0 (#13670) (a4d8619b)
+ * update commitlint monorepo to v20 (#13678) (6dab3f2e)
+ * update dependency @stylistic/eslint-plugin to v5.4.0 (#13671) (3370c064)
+ * update dependency lint-staged to v16.2.1 (#13672) (13ce106b)
+ * update dependency sass-embedded to v1.93.2 (#13673) (df9d637c)
+ * update dependency jsdom to v27 (#13653) (3238248e)
+ * update dependency sass-embedded to v1.92.1 (#13638) (15b0b540)
+ * update dependency lint-staged to v16.1.6 (#13635) (7147a2e3)
+ * update actions/setup-node action to v5 (#13647) (4f5e770c)
+ * update dependency mocha to v11.7.2 (#13636) (ac90ef8c)
+* **i18n:**
+ * fallback strings for new resources: nodebb.admin-manage-categories (6055b345)
+ * fallback strings for new resources: nodebb.admin-manage-categories (8730073a)
+ * fallback strings for new resources: nodebb.admin-manage-categories (8d4e4652)
+ * fallback strings for new resources: nodebb.admin-settings-activitypub (89390101)
+
+##### Documentation Changes
+
+* update openapi schema to refer to try.nodebb.org instead of example.org (56a93366)
+
+##### New Features
+
+* ability to nickname remote categories, closes #13677 (bd80b77a)
+* allow activities to be addressed to as:Public or Public to be treated as public content (5f4790a4)
+* allow user auto-categorization rule (1d6a9fe7)
+* add minor pre-processing step to better handle header elements in incoming html (15f9fbaa)
+
+##### Bug Fixes
+
+* login handler to handle if non-confirmed email is entered (5ed19ef8)
+* allow quote-inline class in mocks sanitizer so quote-post fallback elements can be detected and removed during title generation, fixes #13688 (675178ac)
+* force outgoing page on direct access to `/ap` handler (9cee7999)
+* update outgoing page to match 404 design (954e7bc8)
+* don\'t begin processing local login if the passed-in username isn't even valid (c3df68f2)
+* #13667, record to instances:lastSeen instead of domains:lastSeen (7184507b)
+* #13676, bug where nested remote categories could not be removed (175dc209)
+* regression 218f5ea from via, stricter check on whether the calling user is a remote uid (8c553b18)
+* #13668, privilege checking on topic create for remote users; was not properly checking against fediverse pseudo-user (218f5eab)
+* update logic as to whether a post is served as an article or not (d122bf4a)
+* update activitypubFilterList logic so that it is also checked on resolveInbox and ActivityPub.get methods, updated instances.isAllowed to no longer return a promise (be9212b5)
+* add missing unlock in nested try/catch (9184a7a4)
+* wrap majority of note assertion logic in try..catch to handle exceptions so that the lock is always released (95fb084c)
+* use newline_boundaries param for tokenizer during title and summary generation, attempt to serve HTML in summary generation (2ea624fc)
+* deprecated call to api.topics.move (0f9015f0)
+* **deps:**
+ * update dependency webpack to v5.102.0 (#13683) (17dba0b0)
+ * update dependency mongodb to v6.20.0 (#13665) (9b00ff1e)
+ * update dependency lru-cache to v11.2.2 (#13669) (00d80616)
+ * update dependency sass to v1.93.2 (#13674) (1b5804e1)
+ * update fontsource monorepo (#13663) (6e84e35f)
+ * update dependency esbuild to v0.25.10 (#13664) (9b48bbd5)
+ * update dependency sharp to v0.34.4 (#13662) (c8680f30)
+ * update dependency satori to v0.18.3 (#13660) (b2d91dc3)
+ * update dependency nodebb-theme-harmony to v2.1.20 (#13659) (b845aa48)
+ * update dependency fs-extra to v11.3.2 (#13658) (8324be2d)
+ * update dependency @fontsource/inter to v5.2.7 (#13655) (db892509)
+ * update dependency commander to v14.0.1 (#13652) (19f39198)
+ * update dependency bootswatch to v5.3.8 (#13651) (1e82af66)
+ * update dependency sass to v1.92.1 (#13645) (10344c98)
+ * update dependency workerpool to v9.3.4 (#13650) (6a1e9e8a)
+ * update dependency lru-cache to v11.2.1 (#13644) (6adfbb24)
+
+##### Other Changes
+
+* disallow checkHeader from returning a URL from a different origin than the passed-in URL (4776d012)
+* 'nickname' and 'descriptionParsed' use in categories controller (051043b6)
+
+##### Performance Improvements
+
+* update old upgrade scripts to use bulkSet/Add (2b987d09)
+
+##### Refactors
+
+* notes.assert to add finally block, update assertPayload to update instances:lastSeen via method instead of direct db call (559155da)
+
+##### Reverts
+
+* post queue changes to fix tests (10350ea6)
+
+##### Tests
+
+* fix message (d6e7e168)
+* show tids on test fail (8614d825)
+* more fixes for note vs. article (3bba9029)
+* short OPs create Notes again (15878087)
+* ap timeouts (8d6a0f02)
+* disable post queue when testing posting logic (9bfce68b)
+
+#### v4.5.2 (2025-09-29)
+
+##### Chores
+
+* remove obsolete deprecation (52fec493)
+* up persona (405d2172)
+* incrementing version number - v4.5.1 (69f4b61f)
+* update changelog for v4.5.1 (a9fffd7c)
+* incrementing version number - v4.5.0 (f05c5d06)
+* incrementing version number - v4.4.6 (074043ad)
+* incrementing version number - v4.4.5 (6f106923)
+* incrementing version number - v4.4.4 (d323af44)
+* incrementing version number - v4.4.3 (d354c2eb)
+* incrementing version number - v4.4.2 (55c510ae)
+* incrementing version number - v4.4.1 (5ae79b4e)
+* incrementing version number - v4.4.0 (0a75eee3)
+* incrementing version number - v4.3.2 (b92b5d80)
+* incrementing version number - v4.3.1 (308e6b9f)
+* incrementing version number - v4.3.0 (bff291db)
+* incrementing version number - v4.2.2 (17fecc24)
+* incrementing version number - v4.2.1 (852a270c)
+* incrementing version number - v4.2.0 (87581958)
+* incrementing version number - v4.1.1 (b2afbb16)
+* incrementing version number - v4.1.0 (36c80850)
+* incrementing version number - v4.0.6 (4a52fb2e)
+* incrementing version number - v4.0.5 (1792a62b)
+* incrementing version number - v4.0.4 (b1125cce)
+* incrementing version number - v4.0.3 (2b65c735)
+* incrementing version number - v4.0.2 (73fe5fcf)
+* incrementing version number - v4.0.1 (a461b758)
+* incrementing version number - v4.0.0 (c1eaee45)
+
+##### New Features
+
+* add a term param to recent controller so it can be controller without req.query.term (9c18c6fe)
+* add a new hook to override generateUrl in navigator.js (68a8db85)
+* add topic templates per category, closes #13649 (0311b98e)
+
+##### Bug Fixes
+
+* skip header checking during note assertion if test runner is active (7abdfd86)
+* update note assertion topic members check to simpler posts.exists check (d0c05826)
+* re-jig handling of ap tag values so that only hashtags are considered (not Piefed community tags, etc.) (4d68e3fe)
+* missing actor assertion on 1b12 announced upboat (f9edb13f)
+* use parameterized query for key lookup (6cca55e3)
+* add pre-processing step to title generation logic so sbd doesn't fall over so badly (f7c47429)
+* switch to action (f7bbec7c)
+* handle cases where incoming ap object tag can be a non-array (b66c30a2)
+* local pids not always converted to absolute URLs on topic actor controller (f67942ca)
+* #13657, fix remote category data inconsistency in `sendNotificationToPostOwner` (225bf85e)
+* don't show votes on unread if rep system disabled (dfe19a98)
+* if reputation is disabled hide votes on /recent (8a786c71)
+* favicon path (e2dc592c)
+* check brand:touchIcon for correct path (56fad0be)
+* remove .auth call (f9ddbeba)
+* port the try/catch for notes.assert from develop (f9688b36)
+* perform Link header check on note assertion only when skipChecks is falsy (953c051c)
+* make auto-categorization logic case-insensitive (527f27af)
+* closes #13641, log test email sending errors server side (b3ffa007)
+* pass object to.auth (290a9395)
+* **deps:** bump 2factor to 7.6.0 (d1f5060f)
+
+##### Other Changes
+
+* remove unused (a6674f67)
+* fix (a37521b0)
+
+##### Performance Improvements
+
+* update upgrade script to use bulk methods (0a2fa45d)
+* update old upgrade scripts to use bulkSet/Add (32d0ee48)
+
+#### v4.5.1 (2025-09-04)
+
+##### Chores
+
+* up dbsearch (c07e81d2)
+* incrementing version number - v4.5.0 (f05c5d06)
+* update changelog for v4.5.0 (86d03b1e)
+* incrementing version number - v4.4.6 (074043ad)
+* incrementing version number - v4.4.5 (6f106923)
+* incrementing version number - v4.4.4 (d323af44)
+* incrementing version number - v4.4.3 (d354c2eb)
+* incrementing version number - v4.4.2 (55c510ae)
+* incrementing version number - v4.4.1 (5ae79b4e)
+* incrementing version number - v4.4.0 (0a75eee3)
+* incrementing version number - v4.3.2 (b92b5d80)
+* incrementing version number - v4.3.1 (308e6b9f)
+* incrementing version number - v4.3.0 (bff291db)
+* incrementing version number - v4.2.2 (17fecc24)
+* incrementing version number - v4.2.1 (852a270c)
+* incrementing version number - v4.2.0 (87581958)
+* incrementing version number - v4.1.1 (b2afbb16)
+* incrementing version number - v4.1.0 (36c80850)
+* incrementing version number - v4.0.6 (4a52fb2e)
+* incrementing version number - v4.0.5 (1792a62b)
+* incrementing version number - v4.0.4 (b1125cce)
+* incrementing version number - v4.0.3 (2b65c735)
+* incrementing version number - v4.0.2 (73fe5fcf)
+* incrementing version number - v4.0.1 (a461b758)
+* incrementing version number - v4.0.0 (c1eaee45)
+
+##### New Features
+
+* use _variables.scss overrides from acp in custom skins and bootswatch skins as well (0c48e0e9)
+
+##### Bug Fixes
+
+* remove unused dependency (8d7e3537)
+* remove test for 1b12 announce on topic move (as this no longer occurs) (9221d34f)
+* use existing id if checkHeader returns false (e6996846)
+* regression that caused Piefed (or potentially others) content to be dropped on receipt (86d9016f)
+* remove faulty code that tried to announce a remote object but couldn't as the ID was not a number (7adfe39e)
+
+#### v4.5.0 (2025-09-03)
+
+##### Chores
+
+* **deps:**
+ * pin dependency @stylistic/eslint-plugin to 5.3.1 (#13634) (4ade6007)
+ * update dependency sass-embedded to v1.91.0 (#13614) (e504ee34)
+ * update dependency @eslint/js to v9.34.0 (#13612) (dfc558cd)
+ * update redis docker tag to v8.2.1 (#13603) (02228c04)
+ * update dependency lint-staged to v16.1.5 (#13585) (f4f7953a)
+ * update postgres docker tag to v17.6 (#13599) (62d15a0e)
+ * update dependency @eslint/js to v9.33.0 (#13589) (bfdf47b6)
+ * update actions/checkout action to v5 (#13590) (311bbefa)
+ * update dependency sass-embedded to v1.90.0 (#13581) (c8694333)
+ * update dependency lint-staged to v16.1.4 (#13575) (34ecdf20)
+ * update redis docker tag to v8.2.0 (#13577) (25bc9ba0)
+ * update dependency @eslint/js to v9.31.0 (#13545) (97a5d543)
+ * update redis docker tag to v8.0.3 (#13539) (1b80910e)
+ * update dependency @eslint/js to v9.30.1 (#13524) (6d7df13f)
+ * update dependency @eslint/js to v9.30.0 (#13519) (15ea1233)
+ * update dependency smtp-server to v3.14.0 (#13515) (a41d2c0b)
+ * update dependency mocha to v11.7.1 (#13509) (bbacd8f6)
+ * update dependency mocha to v11.7.0 (#13502) (0a0dd1c1)
+ * update dependency @eslint/js to v9.29.0 (#13491) (2046ca72)
+ * update dependency lint-staged to v16.1.2 (#13492) (d6ba7930)
+ * update dependency sass-embedded to v1.89.2 (#13482) (f5651787)
+ * update dependency mocha to v11.6.0 (#13479) (9b4082dc)
+ * update dependency smtp-server to v3.13.8 (#13464) (d239125f)
+ * update redis docker tag to v8.0.2 (#13465) (166aaa7a)
+ * update dependency @eslint/js to v9.28.0 (#13469) (b3170c9c)
+ * update dependency sass-embedded to v1.89.1 (#13463) (32f13162)
+ * update dependency lint-staged to v16.1.0 (#13449) (6efe3fdd)
+ * update dependency mocha to v11.5.0 (#13442) (c1846475)
+ * update dependency smtp-server to v3.13.7 (#13437) (136e8814)
+ * update dependency sass-embedded to v1.89.0 (#13425) (aa977282)
+ * update dependency mocha to v11.4.0 (#13435) (5d017710)
+ * update dependency mocha to v11.3.0 (#13426) (650eeac9)
+ * update dependency @eslint/js to v9.27.0 (#13429) (475b0704)
+* **i18n:**
+ * fallback strings for new resources: nodebb.admin-settings-activitypub (cb00fb3b)
+ * fallback strings for new resources: nodebb.admin-manage-categories, nodebb.admin-settings-activitypub (40bda8fc)
+ * fallback strings for new resources: nodebb.social (eeabc990)
+ * fallback strings for new resources: nodebb.admin-dashboard (5d16fdc9)
+ * fallback strings for new resources: nodebb.admin-development-info (59c1ce85)
+ * fallback strings for new resources: nodebb.admin-development-info (5b54e926)
+ * fallback strings for new resources: nodebb.modules (f5aca114)
+ * fallback strings for new resources: nodebb.error (efb14ead)
+ * fallback strings for new resources: nodebb.error (e1eb76fe)
+* enable dbsearch on new installs (567f453b)
+* up peace (fdd0152e)
+* up harmony (6d60f945)
+* use fontsource-utils/scss to get rid of deprecation warning (44c0413c)
+* up eslibt (e68deaac)
+* up widget essentials (e7b47995)
+* incrementing version number - v4.4.6 (074043ad)
+* update changelog for v4.4.6 (3895a059)
+* incrementing version number - v4.4.5 (6f106923)
+* up eslint (637373e3)
+* up dbsearch (dae81b76)
+* up eslint-plugin (18d6e5e1)
+* up eslint (c056bf56)
+* remove logs (0315e369)
+* incrementing version number - v4.4.4 (d323af44)
+* incrementing version number - v4.4.3 (d354c2eb)
+* up eslint (536ae9d6)
+* incrementing version number - v4.4.2 (55c510ae)
+* eslint config (0d595008)
+* incrementing version number - v4.4.1 (5ae79b4e)
+* incrementing version number - v4.4.0 (0a75eee3)
+* incrementing version number - v4.3.2 (b92b5d80)
+* incrementing version number - v4.3.1 (308e6b9f)
+* incrementing version number - v4.3.0 (bff291db)
+* incrementing version number - v4.2.2 (17fecc24)
+* incrementing version number - v4.2.1 (852a270c)
+* incrementing version number - v4.2.0 (87581958)
+* incrementing version number - v4.1.1 (b2afbb16)
+* incrementing version number - v4.1.0 (36c80850)
+* incrementing version number - v4.0.6 (4a52fb2e)
+* incrementing version number - v4.0.5 (1792a62b)
+* incrementing version number - v4.0.4 (b1125cce)
+* incrementing version number - v4.0.3 (2b65c735)
+* incrementing version number - v4.0.2 (73fe5fcf)
+* incrementing version number - v4.0.1 (a461b758)
+* incrementing version number - v4.0.0 (c1eaee45)
+
+##### Continuous Integration
+
+* use native arm runners for building docker images (#13627) (931b7345)
+
+##### Documentation Changes
+
+* add missing routes to openapi schema (0f44034e)
+* openapi typo (560cc2eb)
+* update openapi schema for relays and rules (a9a12a9f)
+* openapi schema fixes for auto-categorization commits (c0248ca5)
+
+##### New Features
+
+* use sbd to more intelligently put together a sub-500 character summary based on existing sentences in post content (35641f37)
+* add sbd dependency to improve title generation (and for summary generation, later) (82686322)
+* send local posts out to established relays (aa26dfb3)
+* relay handshake logic, handle Follow/Accept, send back Accept. (f4d1df7c)
+* adding and removing relays from AP settings page in ACP (1e0fb20d)
+* apply auto-categorization logic (165af50d)
+* ability to add/remove auto-categorization rules for incoming federated content (bdcf28a3)
+* re-jigger 'add category' button to allow addition of remote category to main index (75639c86)
+* add Urdu localisation, thank you! (8c6992f5)
+* add wordpress (82037dee)
+* add wordpress (c10656ec)
+* only mark notifications read that match current filter (9d39ed51)
+* closes #13578, increase uniquevisitors (e1423636)
+* add new brite skin from bootswatch (e851a523)
+* add filter:post.getDiffs (97d4994a)
+* add filter:post.getDiffs (90a65129)
+* add expose-gc flag to loader (bba18e31)
+* add ap pageviews analytics (559a2d23)
+* add heap snapshot (f88329db)
+* add option to toggle chat join/leave message (92a3859f)
+* add protection mechanism to request lib so that network requests to reserved IP ranges throw an error (9d3b8c3a)
+
+##### Bug Fixes
+
+* **deps:**
+ * update dependency satori to v0.18.2 (#13628) (2dc39f1e)
+ * update dependency ace-builds to v1.43.3 (#13633) (7adabd60)
+ * update dependency nodemailer to v7.0.6 (#13630) (07b9cd16)
+ * update dependency mongodb to v6.19.0 (#13619) (6d856545)
+ * update dependency sass to v1.91.0 (#13615) (08ea56bd)
+ * update dependency bootstrap to v5.3.8 (#13618) (29a7402f)
+ * update dependency nodebb-theme-harmony to v2.1.17 (#13607) (2f4cf26c)
+ * update dependency nodebb-theme-peace to v2.2.47 (#13608) (8af76f3c)
+ * update dependency redis to v5.8.2 (#13606) (138c6753)
+ * update dependency webpack to v5.101.3 (#13602) (996740bd)
+ * update dependency webpack to v5.101.2 (#13598) (90bddccb)
+ * update dependency nodebb-widget-essentials to v7.0.40 (#13597) (f5b0444b)
+ * update dependency tough-cookie to v6 (#13600) (ceb65d13)
+ * update dependency esbuild to v0.25.9 (#13593) (9ef4cfa2)
+ * update dependency redis to v5.8.1 (#13594) (0f72b8cd)
+ * update dependency webpack to v5.101.1 (#13588) (c67aa43f)
+ * update dependency sass to v1.90.0 (#13582) (abf7dd74)
+ * update dependency fs-extra to v11.3.1 (#13579) (5ce556d4)
+ * update dependency redis to v5.8.0 (#13580) (3c3e4486)
+ * update dependency redis to v5.7.0 (#13570) (27d60a19)
+ * update dependency cron to v4.3.3 (#13573) (0b4efa14)
+ * update dependency satori to v0.16.2 (#13569) (70d3a29c)
+ * update dependency webpack to v5.101.0 (#13567) (6fc8dfa9)
+ * update dependency satori to v0.16.1 (#13560) (2d1a5fea)
+ * update dependency redis to v5.6.1 (#13564) (1262aee8)
+ * update dependency mongodb to v6.18.0 (#13563) (8e9d3843)
+ * update dependency esbuild to v0.25.8 (#13559) (6a732e36)
+ * update dependency esbuild to v0.25.7 (#13557) (1697e36f)
+ * update dependency express-session to v1.18.2 (#13554) (0eb0a67a)
+ * update dependency morgan to v1.10.1 (#13555) (0e457f15)
+ * update dependency multer to v2.0.2 (#13556) (35ca0e3b)
+ * update dependency compression to v1.8.1 (#13553) (12b9f4c7)
+ * update dependency ace-builds to v1.43.2 (#13548) (57564190)
+ * update dependency webpack to v5.100.2 (#13549) (0b398bba)
+ * update dependency webpack to v5.100.1 (#13544) (d8c26bec)
+ * update dependency cron to v4.3.2 (#13546) (e838bb26)
+ * update dependency nodebb-theme-peace to v2.2.46 (#13542) (e4f56e83)
+ * update dependency webpack to v5.100.0 (#13541) (4a5a4fe6)
+ * update dependency redis to v5.6.0 (#13540) (a6cb933b)
+ * update dependency esbuild to v0.25.6 (#13538) (8960fdb3)
+ * update dependency nodemailer to v7.0.5 (#13537) (c6f4148b)
+ * update dependency nodebb-theme-peace to v2.2.45 (#13529) (991f518e)
+ * update dependency nodebb-plugin-web-push to v0.7.5 (#13523) (ceae2aa1)
+ * update dependency ace-builds to v1.43.1 (#13525) (aba2ddad)
+ * update dependency nodemailer to v7.0.4 (#13522) (f1fbea7b)
+ * update dependency pg to v8.16.3 (#13517) (fd82919e)
+ * update dependency workerpool to v9.3.3 (#13518) (655a3bd3)
+ * update dependency pg-cursor to v2.15.3 (#13516) (6e5083c2)
+ * update dependency pg to v8.16.2 (#13505) (d2f0944e)
+ * update dependency nodebb-theme-peace to v2.2.44 (#13514) (59090931)
+ * update dependency nodebb-theme-harmony to v2.1.16 (#13513) (4be2e82b)
+ * update dependency bootswatch to v5.3.7 (#13510) (1eefaf5c)
+ * update dependency pg-cursor to v2.15.2 (#13506) (10f7b49b)
+ * update dependency ace-builds to v1.43.0 (#13507) (e360f649)
+ * update dependency pg-cursor to v2.15.1 (#13504) (3b364ba1)
+ * update dependency pg to v8.16.1 (#13503) (819e2805)
+ * update dependency bootstrap to v5.3.7 (#13499) (e84fc739)
+ * update dependency connect-redis to v9 (#13497) (d3faff36)
+ * update dependency chart.js to v4.5.0 (#13495) (f36a5ac8)
+ * update dependency postcss to v8.5.6 (#13494) (703fcbbf)
+ * update dependency postcss to v8.5.5 (#13490) (c101d0d5)
+ * update dependency sass to v1.89.2 (#13487) (442c6e71)
+ * update dependency nodebb-plugin-emoji to v6.0.3 (#13486) (efcbbf29)
+ * update dependency serve-favicon to v2.5.1 (#13488) (d2a7eecb)
+ * update dependency @fontsource/inter to v5.2.6 (#13477) (c04bd7cc)
+ * update dependency satori to v0.15.2 (#13481) (78ebe298)
+ * update dependency satori to v0.14.0 (#13476) (29afcd36)
+ * update dependency workerpool to v9.3.2 (#13452) (6b33b1f4)
+ * update dependency satori to v0.13.2 (#13468) (44d1a17b)
+ * update dependency postcss to v8.5.4 (#13453) (1c432925)
+ * update dependency multer to v2.0.1 (#13466) (d0060e5d)
+ * update dependency sass to v1.89.1 (#13467) (602417d0)
+ * update dependency ace-builds to v1.42.0 (#13470) (c363b84e)
+ * update dependency mongodb to v6.17.0 (#13471) (a3cc99a2)
+ * update dependency cron to v4.3.1 (#13457) (3694f655)
+ * update dependency validator to v13.15.15 (#13451) (36f0cf25)
+ * update dependency esbuild to v0.25.5 (#13447) (6a5bbe92)
+ * update dependency nodebb-plugin-dbsearch to v6.2.18 (#13445) (3ca6a9bc)
+ * update dependency bootbox to v6.0.4 (#13443) (e3a7fb5c)
+ * update dependency diff to v8.0.2 (#13440) (76a624b9)
+ * update dependency commander to v14 (#13434) (1d624aad)
+ * update dependency webpack to v5.99.9 (#13438) (314a4ff0)
+ * update dependency connect-redis to v8.1.0 (#13433) (ee8e223f)
+ * update dependency nodebb-plugin-dbsearch to v6.2.17 (#13432) (42f16da5)
+ * update dependency sass to v1.89.0 (#13427) (2417a79b)
+* display proper id if lock fails (19aa8a71)
+* closes #13624, update post fields before schedule code (9d4a9b83)
+* #13622, WordPress blog URLs not asserting properly (4ef605b1)
+* closes #13625, fix utils.params so it works with relative_paths (a0e78ff8)
+* remove webfinger error log (a0be4a28)
+* urlencoded param in openapi spec example (5f7085f3)
+* re-ordering dependencies because raisins (cbdc90a4)
+* missed a tab character (788301a5)
+* random hotkeys adding dependencies to my project smh (771b8dcb)
+* parseAndTranslate bug (40973ca7)
+* internationalize relay states (6576468e)
+* minor fixes for yukimochi/Activity-Relay compatibility (28b63891)
+* inbox.announce to not reject activities from relays (b1dbb19c)
+* handle webfinger responses with subject missing scheme (4967492f)
+* closes #13501 (bf279d71)
+* closes #13620 (027d6f30)
+* rare crash if queued item is no longer in db but id is in post:queue (e79dfeb7)
+* jquery selector on post edit (f5ad7862)
+* relative paths in openapi schema (a771b17f)
+* add missing routes to write.yaml (e8401472)
+* only process unique slugs (312df523)
+* remove special-case logic that added a requested object to a topic if its defined context didn't actually contain it (70d7e329)
+* return null if field is falsy (09898b94)
+* mark-all read notifications button (c16f9d64)
+* catch exceptions in assertPayload, closes #13611 (9bdf24f0)
+* add missing files (057e3b79)
+* add missing file to ur language folder (ecab347b)
+* regression caused by cc6fd49c4d2ddc6970ea23011dece5ba91517ec0 (06c38247)
+* protocol-relative URLs being accidentally munged, #13592 (cc6fd49c)
+* cache lookup error when doing loopback calls (67389639)
+* image handling when image url received is not a path with an extension (b4ff7906)
+* readd retry items (c6889f08)
+* set noindex tag on remote profiles as well (fe160160)
+* duplicate canonical link header (c8ad0867)
+* add rel canonical to remote user profiles (8ce5498f)
+* ap queue id to use payload.type payload.id (a8bf4ea0)
+* clearTimeout if item is evicted from cache (0997fbfa)
+* sometimes summary is null/undefined (65364bfa)
+* don't translate text on admin logs page (f6ed7ec2)
+* change the client side reloginTimer to match setting (c43c3533)
+* redis connect host/port (eac3d0a0)
+* closes #13558, override/extend json opts from config.json (25c24298)
+* add missing cache name (3f520c33)
+* add missing ap pageview middleware (01f2effc)
+* set to empty string if undefined (0ef98ec4)
+* make clickable element anchor (dbed2db9)
+* for attribute, remove upload trigger when click inputs (329f98d5)
+* check topic and thumbs (72fec565)
+* closes #13526, dont send multiple emails when user is invited (5a5ca8a5)
+* pubsub on node-redis (f7f70468)
+* typo (2280ea88)
+* ensure check returns false if no addresses are looked up, fix bug where cached value got changed accidentally (6478532b)
+* wrap cached returns for dns lookups in nextTick (010113a9)
+* #13459, unread indicators for remote categories (6411c197)
+* further guard against DNS rebinding attack (a8e613e1)
+* undefined check, allow plugins to append to allow list (70c04f0c)
+* simplify dns to use .lookup instead of .resolve4 and .resolve6, automatically allow requests to own hostname (df360216)
+* return 200 for non-implemented activities instead of 501 (fcb3bfbc)
+* remove null categories (28c021a0)
+* patch ap .probe() so that it does not execute on requests for its own resources (a80edfa1)
+* bring back auto-categorization if group and object are same-origin, handle Peertube putting channel names in `attributedTo` (8f933459)
+
+##### Other Changes
+
+* fix comma dangle (d4bf5f0c)
+* fix lint issue (5dfd2413)
+* remove unused url (076cc9e8)
+
+##### Refactors
+
+* revert, don't need to pass relative_path (f67265da)
+* leaner utils.params for relative path (648c4543)
+* remove invalid queued items (b73ee309)
+* braces (f83d2536)
+* add missing awaits (5ee1fd02)
+* category listing logic to allow remote categories to be added, disabled, and re-arranged in main forum index (cb0b6092)
+* show code/stack when dep check fails (f8733e06)
+* dont del if cache disabled (bc40d79c)
+* remove old arg (8305a742)
+* if user.delete fails in actor prune (d5f6d158)
+* use promise.all (472df3aa)
+* use promise.all (6eab44a0)
+* move ap retry queue from lru cache to db (#13568) (b3a4a128)
+* log uid that failed (de71cc63)
+* change default teaser to last-post (8ba230a2)
+* copy session/headers when building req (e4a0160e)
+* show both days and hours (1d7c32a5)
+* add missing cache name (272008bb)
+* another missing cache name (0fdde132)
+* add names to caches, add max to request cache (a08551a5)
+* closes #13547, process user uploads via batch (1ad97ac1)
+* move post uploads to post hash (#13533) (24e7cf4a)
+* parallel socket.io adapter (0b9bfc1c)
+* use strings for cids (57a5de26)
+
+##### Reverts
+
+* remove heapdump (e74996fb)
+
+##### Tests
+
+* delete commented-out test (70bbed93)
+* add timeout to ap.helpers.query (8f7411c3)
+* more logs (8e160fe0)
+* add more logs (f703a94b)
+* add more logs (681ce8bf)
+* debug timeout (029da6c5)
+* more logs for failing test (79c6e72c)
+* catch error in failing test (69a6c150)
+* sharp invalid png (1ea10eff)
+* latest sharp (3cdf28bd)
+* add logs for test that's timing out (15155809)
+* use protocol of test runner (04815497)
+* fix notification tests (f8a0a7e1)
+* one more fix (95f6688c)
+* fix spec (7393bdd4)
+* fix openapi (1071ac0c)
+* fix meta test (1776bd1d)
+* test fixes for default teaser change (8eedb38a)
+* add openapi spec (020e0ad1)
+* try timeout again (27aab921)
+* disable timeout (930ff21f)
+* psql fix (85e2d7d3)
+* one more test fix (22d1972f)
+* fix test, add joinLeaveMessages to newRoom (7acd63c2)
+* increase timeout (fa31ba05)
+* on more (1a85fafb)
+* testing timeout on failing test (82c8034c)
+* remove ci env (39d243b0)
+* add a null field test (1fc91d5e)
+
+#### v4.4.6 (2025-08-06)
+
+##### Chores
+
+* incrementing version number - v4.4.5 (6f106923)
+* update changelog for v4.4.5 (de05dad2)
+* incrementing version number - v4.4.4 (d323af44)
+* incrementing version number - v4.4.3 (d354c2eb)
+* incrementing version number - v4.4.2 (55c510ae)
+* incrementing version number - v4.4.1 (5ae79b4e)
+* incrementing version number - v4.4.0 (0a75eee3)
+* incrementing version number - v4.3.2 (b92b5d80)
+* incrementing version number - v4.3.1 (308e6b9f)
+* incrementing version number - v4.3.0 (bff291db)
+* incrementing version number - v4.2.2 (17fecc24)
+* incrementing version number - v4.2.1 (852a270c)
+* incrementing version number - v4.2.0 (87581958)
+* incrementing version number - v4.1.1 (b2afbb16)
+* incrementing version number - v4.1.0 (36c80850)
+* incrementing version number - v4.0.6 (4a52fb2e)
+* incrementing version number - v4.0.5 (1792a62b)
+* incrementing version number - v4.0.4 (b1125cce)
+* incrementing version number - v4.0.3 (2b65c735)
+* incrementing version number - v4.0.2 (73fe5fcf)
+* incrementing version number - v4.0.1 (a461b758)
+* incrementing version number - v4.0.0 (c1eaee45)
+
+##### New Features
+
+* add new brite skin from bootswatch (567ed875)
+
+##### Bug Fixes
+
+* pass max-memory expose-gc as process args (d5f57af3)
+
+#### v4.4.5 (2025-07-31)
+
+##### Chores
+
+* **config:** migrate config renovate.json (#13565) (5a864150)
+* incrementing version number - v4.4.4 (d323af44)
+* update changelog for v4.4.4 (7b14e267)
+* incrementing version number - v4.4.3 (d354c2eb)
+* incrementing version number - v4.4.2 (55c510ae)
+* incrementing version number - v4.4.1 (5ae79b4e)
+* incrementing version number - v4.4.0 (0a75eee3)
+* incrementing version number - v4.3.2 (b92b5d80)
+* incrementing version number - v4.3.1 (308e6b9f)
+* incrementing version number - v4.3.0 (bff291db)
+* incrementing version number - v4.2.2 (17fecc24)
+* incrementing version number - v4.2.1 (852a270c)
+* incrementing version number - v4.2.0 (87581958)
+* incrementing version number - v4.1.1 (b2afbb16)
+* incrementing version number - v4.1.0 (36c80850)
+* incrementing version number - v4.0.6 (4a52fb2e)
+* incrementing version number - v4.0.5 (1792a62b)
+* incrementing version number - v4.0.4 (b1125cce)
+* incrementing version number - v4.0.3 (2b65c735)
+* incrementing version number - v4.0.2 (73fe5fcf)
+* incrementing version number - v4.0.1 (a461b758)
+* incrementing version number - v4.0.0 (c1eaee45)
+
+##### New Features
+
+* add filter:post.getDiffs (bbb9a460)
+
+##### Bug Fixes
+
+* clearTimeout if item is evicted from cache (5f696176)
+* use sharp to convert svg to png, closes #13534 (b74c7898)
+* use filename to check for svg, tempPath doesn't always have extension (5bcf078a)
+* apply sanitizeSvg to regular uploads and uploads from manage uploads acp page (a8f4c5e6)
+
+##### Refactors
+
+* use promise.all (7c00e814)
+
+##### Tests
+
+* one more fix (5f5a6972)
+* fix spec (3b609316)
+* fix openapi (c7c83e0e)
+* increase timeout of failing test (fe9b49e3)
+
+#### v4.4.4 (2025-06-18)
+
+##### Chores
+
+* incrementing version number - v4.4.3 (d354c2eb)
+* update changelog for v4.4.3 (0c9297f8)
+* incrementing version number - v4.4.2 (55c510ae)
+* incrementing version number - v4.4.1 (5ae79b4e)
+* incrementing version number - v4.4.0 (0a75eee3)
+* incrementing version number - v4.3.2 (b92b5d80)
+* incrementing version number - v4.3.1 (308e6b9f)
+* incrementing version number - v4.3.0 (bff291db)
+* incrementing version number - v4.2.2 (17fecc24)
+* incrementing version number - v4.2.1 (852a270c)
+* incrementing version number - v4.2.0 (87581958)
+* incrementing version number - v4.1.1 (b2afbb16)
+* incrementing version number - v4.1.0 (36c80850)
+* incrementing version number - v4.0.6 (4a52fb2e)
+* incrementing version number - v4.0.5 (1792a62b)
+* incrementing version number - v4.0.4 (b1125cce)
+* incrementing version number - v4.0.3 (2b65c735)
+* incrementing version number - v4.0.2 (73fe5fcf)
+* incrementing version number - v4.0.1 (a461b758)
+* incrementing version number - v4.0.0 (c1eaee45)
+
+##### New Features
+
+* link to post in preview timestamp (8c69c6a0)
+* Add live reload functionality with Grunt watch and Socket.IO (#13489) (84d99a0f)
+* closes #13484, post preview changes (14e30c4b)
+
+##### Bug Fixes
+
+* sanitize svg when uploading site-logo, default avatar and og:image (da2597f8)
+* Revise package hash check in Docker entrypoint.sh (#13483) (6c5b2268)
+* more edge cases (32faaba0)
+* #13484, clear tooltip if cursor leaves link (0ebb31fe)
+
+##### Other Changes
+
+* fix lint (8ab034d8)
+
+##### Refactors
+
+* send single message (dc37789b)
+
+#### v4.4.3 (2025-06-09)
+
+##### Chores
+
+* up composer (5f51dfc4)
+* incrementing version number - v4.4.2 (55c510ae)
+* update changelog for v4.4.2 (6d40a211)
+* incrementing version number - v4.4.1 (5ae79b4e)
+* incrementing version number - v4.4.0 (0a75eee3)
+* incrementing version number - v4.3.2 (b92b5d80)
+* incrementing version number - v4.3.1 (308e6b9f)
+* incrementing version number - v4.3.0 (bff291db)
+* incrementing version number - v4.2.2 (17fecc24)
+* incrementing version number - v4.2.1 (852a270c)
+* incrementing version number - v4.2.0 (87581958)
+* incrementing version number - v4.1.1 (b2afbb16)
+* incrementing version number - v4.1.0 (36c80850)
+* incrementing version number - v4.0.6 (4a52fb2e)
+* incrementing version number - v4.0.5 (1792a62b)
+* incrementing version number - v4.0.4 (b1125cce)
+* incrementing version number - v4.0.3 (2b65c735)
+* incrementing version number - v4.0.2 (73fe5fcf)
+* incrementing version number - v4.0.1 (a461b758)
+* incrementing version number - v4.0.0 (c1eaee45)
+
+##### Bug Fixes
+
+* escape, query params (b02eb57d)
+* closes #13475, don't store escaped username (806e54bf)
+
+#### v4.4.2 (2025-06-02)
+
+##### Chores
+
+* up eslint stylistic (fd2ae726)
+* up dbsearch (e2de0ec2)
+* up dbsearch (30aa0fe6)
+* up harmony (99234b3f)
+* up harmony (a16bc738)
+* incrementing version number - v4.4.1 (5ae79b4e)
+* update changelog for v4.4.1 (a686cf20)
+* incrementing version number - v4.4.0 (0a75eee3)
+* incrementing version number - v4.3.2 (b92b5d80)
+* incrementing version number - v4.3.1 (308e6b9f)
+* incrementing version number - v4.3.0 (bff291db)
+* incrementing version number - v4.2.2 (17fecc24)
+* incrementing version number - v4.2.1 (852a270c)
+* incrementing version number - v4.2.0 (87581958)
+* incrementing version number - v4.1.1 (b2afbb16)
+* incrementing version number - v4.1.0 (36c80850)
+* incrementing version number - v4.0.6 (4a52fb2e)
+* incrementing version number - v4.0.5 (1792a62b)
+* incrementing version number - v4.0.4 (b1125cce)
+* incrementing version number - v4.0.3 (2b65c735)
+* incrementing version number - v4.0.2 (73fe5fcf)
+* incrementing version number - v4.0.1 (a461b758)
+* incrementing version number - v4.0.0 (c1eaee45)
+
+##### New Features
+
+* add action:post-queue.save (ebb88c12)
+* restrict access to ap.probe method to registered users, add rate limiting protection (e70e990a)
+
+##### Bug Fixes
+
+* return 200 for non-implemented activities instead of 501 (524a1e8b)
+* closes #13458, check if plugin is system (b1022566)
+* add try..catch around topics.post in note assertion logic (cc927026)
+* don't throw on unknown post on Undo(Like) (83a55f6a)
+* add try..catch wrapper around Announce(Like) call to internal method so as to not return a 500 — just drop the Like activity (629eec7b)
+* browser title translation (390f6428)
+* allow guests to load topic tools if they have privilege to view them (78de8c6d)
+* closes #13454, align dropdowns to opposite side on rtl (72417d82)
+* send actor in undo(follow) (49b5268e)
+* missed handling zset on ap unfollow (b20a6ed0)
+* additional tests for remote privileges, enforcing privileges for remote edits and deletes (a888b868)
+
+##### Tests
+
+* fix groups:find webfinger test (0c1a6183)
+
+#### v4.4.1 (2025-05-16)
+
+##### Chores
+
+* up themes (61a63851)
+* incrementing version number - v4.4.0 (0a75eee3)
+* update changelog for v4.4.0 (09cc91d5)
+* incrementing version number - v4.3.2 (b92b5d80)
+* incrementing version number - v4.3.1 (308e6b9f)
+* incrementing version number - v4.3.0 (bff291db)
+* incrementing version number - v4.2.2 (17fecc24)
+* incrementing version number - v4.2.1 (852a270c)
+* incrementing version number - v4.2.0 (87581958)
+* incrementing version number - v4.1.1 (b2afbb16)
+* incrementing version number - v4.1.0 (36c80850)
+* incrementing version number - v4.0.6 (4a52fb2e)
+* incrementing version number - v4.0.5 (1792a62b)
+* incrementing version number - v4.0.4 (b1125cce)
+* incrementing version number - v4.0.3 (2b65c735)
+* incrementing version number - v4.0.2 (73fe5fcf)
+* incrementing version number - v4.0.1 (a461b758)
+* incrementing version number - v4.0.0 (c1eaee45)
+
+##### New Features
+
+* save width and height values into post attachment (3674fa57)
+* use local date string for digest subject (3d96afb2)
+
+##### Bug Fixes
+
+* openapi schema to handle additional `attachments` field in postsobject (ce5ef1ab)
+* group edit url (0a574d72)
+* add attachments to getpostsummaries call in search, #13324 (8f9f3771)
+* bring back auto-categorization if group and object are same-origin, handle Peertube putting channel names in `attributedTo` (a460a550)
+* #13419, handle remote content with mediaType text/markdown (45a11d45)
+
+##### Refactors
+
+* create date once per digest.send (6c3e2a8e)
+
+##### Tests
+
+* fix tests to account for a460a55064e1280f36a0021e0510c7c557251030 (948bfe46)
+
+#### v4.4.0 (2025-05-14)
+
+##### Breaking Changes
+
+* removal of deprecated privilege hooks (8ea377a4)
+* removal of `filter:flags.getFilters` (547fb482)
+* removal of `filter:user.verify.code` (7e25946c)
+* removal of `filter:post.purge` (df5c1a93)
+* removal of `filter:post.purge` (c84b72fb)
+* removal of `filter:router.page` (9d8061ea)
+* removal of `filter:email.send` (b73a8d3e)
+
+##### Chores
+
+* **deps:**
+ * update redis docker tag to v8.0.1 (#13415) (fbe97b4e)
+ * update redis docker tag to v8 (#13387) (1df7313c)
+ * update postgres docker tag to v17.5 (#13398) (d319b0aa)
+ * update dependency sass-embedded to v1.88.0 (#13402) (694c79bc)
+ * update dependency lint-staged to v16 (#13404) (9d877481)
+ * update commitlint monorepo to v19.8.1 (#13394) (7a7a4f0a)
+ * update dependency lint-staged to v15.5.2 (#13383) (96dc5c89)
+ * update dependency @eslint/js to v9.26.0 (#13371) (450ce3b8)
+ * update dependency mocha to v11.2.2 (#13366) (e958010f)
+* incrementing version number - v4.3.2 (b92b5d80)
+* update changelog for v4.3.2 (0aa9c187)
+* incrementing version number - v4.3.1 (308e6b9f)
+* remove unused require (15b6a2c1)
+* incrementing version number - v4.3.0 (bff291db)
+* incrementing version number - v4.2.2 (17fecc24)
+* incrementing version number - v4.2.1 (852a270c)
+* incrementing version number - v4.2.0 (87581958)
+* incrementing version number - v4.1.1 (b2afbb16)
+* incrementing version number - v4.1.0 (36c80850)
+* incrementing version number - v4.0.6 (4a52fb2e)
+* incrementing version number - v4.0.5 (1792a62b)
+* incrementing version number - v4.0.4 (b1125cce)
+* incrementing version number - v4.0.3 (2b65c735)
+* incrementing version number - v4.0.2 (73fe5fcf)
+* incrementing version number - v4.0.1 (a461b758)
+* incrementing version number - v4.0.0 (c1eaee45)
+
+##### Documentation Changes
+
+* remove since-removed `labels` property from api (860ac895)
+
+##### Bug Fixes
+
+* adjust Peertube-specific handling to shove mp4 into post attachments, #13324 (799b08db)
+* #13081, don't add mention when you are replying to yourself (d5865613)
+* add `announces` to postdataobject schema (0f576a42)
+* #13375, plus additional tests (fe13c755)
+* missing awaits, more comprehensive 1b12 tests (5802c7dd)
+* another case (6bfe4e62)
+* handle missing orderedItems property in followers route (e042201f)
+* missing await (651ebaaf)
+* handle missing orderedItems (53bb0bbc)
+* extra `orderedItems` property in generated paginated OrderedCollection, #13153 (f83b1fbf)
+* #13153, follower and following collections to use generateCollection helper (a2de7aae)
+* #13374, updates to posts.edit to handle remote content updates better (b4338489)
+* leftover `handle` var (625ce96f)
+* AP inbox update handling for non-note objects (f8d012c8)
+* 1b12 creates being dropped (9f80d10d)
+* update AP api (un)follow ids to be url encoded id instead of handle (7cf61ab0)
+* **deps:**
+ * update dependency diff to v8 (#13409) (919d62ab)
+ * update dependency sanitize-html to v2.17.0 (#13418) (3e18af1e)
+ * update dependency satori to v0.13.1 (#13408) (f176d6b2)
+ * update dependency pg-cursor to v2.15.0 (#13414) (7320a858)
+ * update dependency nodebb-plugin-markdown to v13.2.1 (#13416) (84b8ecc7)
+ * update dependency semver to v7.7.2 (#13410) (366651d6)
+ * update dependency pg to v8.16.0 (#13411) (0825c569)
+ * update dependency nodebb-plugin-mentions to v4.7.6 (#13417) (383a7ce5)
+ * update dependency lru-cache to v11 (#12685) (23374fd7)
+ * update dependency rimraf to v6 (#12686) (6a4ffe02)
+ * update dependency bootswatch to v5.3.6 (#13400) (7a7cf830)
+ * update dependency csrf-sync to v4.2.1 (#13401) (ecce9998)
+ * update dependency sass to v1.88.0 (#13403) (7ffba218)
+ * update dependency nodemailer to v7.0.3 (#13395) (af3afba0)
+ * update dependency nodemailer to v7 (#13381) (0b4d403c)
+ * update dependency csrf-sync to v4.2.0 (#13364) (4f0f67a4)
+ * update dependency webpack to v5.99.8 (#13390) (c7a164ae)
+ * update dependency bootstrap to v5.3.6 (#13384) (e6a19612)
+ * update dependency esbuild to v0.25.4 (#13385) (b6f4de5b)
+ * update dependency @fontsource/poppins to v5.2.6 (#13376) (e2a8cf98)
+ * update dependency nodebb-plugin-mentions to v4.7.5 (#13386) (2c0aba02)
+ * update dependency nodebb-widget-essentials to v7.0.38 (#13380) (7f757615)
+ * update dependency nodebb-theme-persona to v14.1.11 (#13379) (954aa541)
+ * update dependency nodebb-theme-peace to v2.2.42 (#13378) (2aa0bfc5)
+ * update dependency nodebb-theme-harmony to v2.1.12 (#13377) (72b3a215)
+ * update dependency ace-builds to v1.41.0 (#13372) (4b78710b)
+ * bump markdown (f3bd8590)
+
+##### Other Changes
+
+* //github.com/NodeBB/NodeBB/issues/13367 (39953ee1)
+
+##### Refactors
+
+* use a single until (1b0b1da6)
+* Helpers.generateCollection so that total count and a bound function can be passed in, #13153 (7f59238d)
+
+##### Tests
+
+* a few additional tests for announce handling (61f6806b)
+* fix regression from 5802c7ddd9506a4e296f6dbdf2d9a32621c7f4ef (5b118904)
+* fix broken test due to adjusted note assertion relation logic (9dc91f11)
+* update filter:router.page tests to response:router.page (a819d39c)
+* adjustment for now-removed labels property (52df41b9)
+
+#### v4.3.2 (2025-05-12)
+
+##### Chores
+
+* up mentions (fcf9e8b7)
+* incrementing version number - v4.3.1 (308e6b9f)
+* update changelog for v4.3.1 (2310a7b8)
+* incrementing version number - v4.3.0 (bff291db)
+* incrementing version number - v4.2.2 (17fecc24)
+* incrementing version number - v4.2.1 (852a270c)
+* incrementing version number - v4.2.0 (87581958)
+* incrementing version number - v4.1.1 (b2afbb16)
+* incrementing version number - v4.1.0 (36c80850)
+* incrementing version number - v4.0.6 (4a52fb2e)
+* incrementing version number - v4.0.5 (1792a62b)
+* incrementing version number - v4.0.4 (b1125cce)
+* incrementing version number - v4.0.3 (2b65c735)
+* incrementing version number - v4.0.2 (73fe5fcf)
+* incrementing version number - v4.0.1 (a461b758)
+* incrementing version number - v4.0.0 (c1eaee45)
+
+##### Bug Fixes
+
+* sql injection in sortedSetScan (16504bad)
+* escape flag filters (285d438c)
+* #13407, don't restart user jobs (31be083e)
+* closes #13405, catch errors in ap.verify (8174578c)
+* send proper accept header for outgoing webfinger requests (20ab9069)
+* wrap generateCollection calls in try..catch to send 404 if thrown (64fdf91b)
+* #13397, null values in category sync list (26e6a222)
+* #13392, regression from c6f2c87, unable to unfollow from pending follows (401ff797)
+* #13397, update getCidByHandle to work with remote categories, fix sync with handles causing issues with null entries (a9a5ab5e)
+* correct stage name in dev dockerfile (#13393) (10077d0f)
+
+##### Refactors
+
+* wrap ap routes in try/catch (00668bdc)
+* call verify if request is POST (dfa21329)
+
+#### v4.3.1 (2025-05-07)
+
+##### Chores
+
+* node 18 eol (800426d6)
+* up widgets (ee2f91ad)
+* up themes (18867fb1)
+* update bundled plugins to use eslint9 (343f13e1)
+* incrementing version number - v4.3.0 (bff291db)
+* update changelog for v4.3.0 (76c03019)
+* incrementing version number - v4.2.2 (17fecc24)
+* incrementing version number - v4.2.1 (852a270c)
+* incrementing version number - v4.2.0 (87581958)
+* incrementing version number - v4.1.1 (b2afbb16)
+* incrementing version number - v4.1.0 (36c80850)
+* incrementing version number - v4.0.6 (4a52fb2e)
+* incrementing version number - v4.0.5 (1792a62b)
+* incrementing version number - v4.0.4 (b1125cce)
+* incrementing version number - v4.0.3 (2b65c735)
+* incrementing version number - v4.0.2 (73fe5fcf)
+* incrementing version number - v4.0.1 (a461b758)
+* incrementing version number - v4.0.0 (c1eaee45)
+
+##### Other Changes
+
+* //github.com/NodeBB/NodeBB/issues/13367 (d35aad31)
+
+##### Tests
+
+* fix android test (31af05c7)
+* fix android test (25979294)
+* fix a test (7ef79981)
+
+#### v4.3.0 (2025-05-01)
+
+##### Chores
+
+* **i18n:**
+ * fallback strings for new resources: nodebb.category, nodebb.world (2827498d)
+ * fallback strings for new resources: nodebb.error (c889d60c)
+ * fallback strings for new resources: nodebb.admin-settings-user, nodebb.user (d3409b40)
+ * fallback strings for new resources: nodebb.global (6c163f7c)
+ * fallback strings for new resources: nodebb.notifications (dcf34e3d)
+ * fallback strings for new resources: nodebb.error (b1e95bc6)
+* v4.3.0-beta.2 (e3e78445)
+* v4.3.0-beta.1 (0689da81)
+* cut 4.3.0-alpha.3 (2e3e675b)
+* cut v4.3.0-alpha.2 (c4690392)
+* cut v4.3.0-alpha (4379df68)
+* up pg, pg-cursor (#13351) (b57ce29d)
+* incrementing version number - v4.2.2 (17fecc24)
+* update changelog for v4.2.2 (ce196589)
+* up eslint-nodebb (853244a1)
+* up themes (4301bf97)
+* incrementing version number - v4.2.1 (852a270c)
+* up dbsearch (bc8126c7)
+* up dbsearch (4b9331d9)
+* incrementing version number - v4.2.0 (87581958)
+* incrementing version number - v4.1.1 (b2afbb16)
+* incrementing version number - v4.1.0 (36c80850)
+* incrementing version number - v4.0.6 (4a52fb2e)
+* incrementing version number - v4.0.5 (1792a62b)
+* incrementing version number - v4.0.4 (b1125cce)
+* incrementing version number - v4.0.3 (2b65c735)
+* incrementing version number - v4.0.2 (73fe5fcf)
+* incrementing version number - v4.0.1 (a461b758)
+* incrementing version number - v4.0.0 (c1eaee45)
+* **deps:**
+ * update redis docker tag to v7.4.3 (#13358) (7800016f)
+ * update dependency sass-embedded to v1.87.0 (#13347) (bee79784)
+ * update dependency @eslint/js to v9.25.1 (#13344) (25e4e844)
+ * update dependency eslint-config-nodebb to v1.1.3 (#13343) (d687fe60)
+ * update dependency @eslint/js to v9.25.0 (#13342) (0cc492c6)
+ * update dependency lint-staged to v15.5.1 (#13319) (9046acea)
+ * update dependency jsdom to v26.1.0 (#13330) (3f000ed6)
+ * update dependency @eslint/js to v9.24.0 (#13310) (41be539f)
+ * update dependency sass-embedded to v1.86.3 (#13301) (0bd43940)
+ * update dependency sass-embedded to v1.86.2 (#13291) (fdcd2a84)
+ * update dependency @apidevtools/swagger-parser to v10.1.1 (#13037) (3305c7b0)
+
+##### Documentation Changes
+
+* update openapi spec with new (missing) properties (b32b7fcc)
+
+##### New Features
+
+* upgrade script to remote duplicate remote users and categories as per #13352 (5aee2f26)
+* add new mixin clamp-fade, and handler for expanding it in category description (decc9cf1)
+* handle Announce(Update(Note)) as well, #13320 (04473669)
+* #13255, proper handling of upvotes shared by group actors (74e32a17)
+* send the whole post content in `summary` as well (5c5fd3d4)
+* show/hide categories on world page, #13255 (804208b7)
+* notice on remote categories that have no local followers, #13255 (93a5b35f)
+* add new option to categorySearch module, `defaultCategories`, use to populate the category list when you don't want to poll backend for the main category list (a487d5f6)
+* category quick search on world page, theme version updates, #13255 (17909516)
+* show tracked/watched remote categories in world page, #13255 (34ab6771)
+* remote user to category migration should also migrate local user follows into category watches (ac7b7f81)
+* allowing manual group assertion via category search input (23b3148c)
+* remote group actors migrated to categories if they were previous asserted as remote users (d19f692b)
+* #13255 new topics in remote category addresses remote category, tests, fixes to tests (b8c531d5)
+* #13255, deliver asserted topics to remote category followers (9c1d5cd3)
+* #13255, add category name and handle to category search zset (876d1b04)
+* integrate remote category pruning into actor pruning logic (9b5855f7)
+* migration of group-as-user to group-as-category, remote category purging, more tests (4be0f73a)
+* asserted topics and posts to remote categories will notify and add to unread based on remote category watch state (f483e883)
+* also include category in `to` field when mocking post for federation (f73f727d)
+* chat allow/deny list, closes #13359 (a5afad27)
+* show topic follower counts (#13326) (bf2d4c46)
+* federate out as:Article with `preview` for root-level posts in a topic, instead of `as:Note` (3c4be773)
+* body-parser-2.x test (#13278) (389bc062)
+* upgrade commander, get rid of custom color & wrapping code (485562d5)
+* testing eslint9 (#13266) (68136641)
+
+##### Bug Fixes
+
+* bump harmony (2bf2e556)
+* #13352, also do the webfinger backreference check when calling assertGroup (2572cbf5)
+* regression that caused non-public content with source.content to fail parsing (e9b3306e)
+* closes #13360, catch error in buildAccountData middleware (537a7428)
+* bug where disparate ids all claiming to be the same handle were causing duplicate remote users due to collisions, #13352 (c2a3ef81)
+* posts incorrectly excluded from results if result pid is in a remote category (a0a8c462)
+* ap helpers.makeSet to handle undefined property values (d020e334)
+* add back localCategories to categorySearch when defaultCategories is supplied (d58d5861)
+* remote bare hash for remote users on prune as well (f02d9661)
+* missing teasers for remote categories on /world (695312f1)
+* remove superfluous privilege filter in markAllRead (0fab4255)
+* reversed image and icon for remote categories, omit fa icon if remote category has icon property set, #13255 (dabcefaf)
+* closes #13289, id can be null (f1d1d082)
+* marking remote category topics as read (4a7111d0)
+* markAllRead to get tids based on same logic as unread page, instead of marking all recent posts read (b0236735)
+* key ownership cross-check to also work with remote categories, #13255 (6dee3e56)
+* #13255, assert all recipients of the main post when asserting a note, so that remote categories can be discovered (1f046782)
+* remote categories should not show up in a user's follow lists (4d1d7c3d)
+* #13255, remote user-to-category migration should not move shares that are already in an existing cid (3213da1c)
+* proper handling of actors.qualify response (f2e0ba21)
+* missing dep (2cb6d10d)
+* topics in remote categories showing up in /recent (c4274a3d)
+* regression that caused resolveInboxes to always return empty, added tests for resolveInboxes (0246c146)
+* spread fail, @julianlam (c1b71964)
+* filter out non-asserted targets when sending ap messages, diff. getter method when passed-in ID is a remote category (309deb0d)
+* tag whitelist check socket call for remote categories (c5901e0d)
+* migrate topics as system user instead of uid 0 (ee34396c)
+* do not send out ap (undo:)follow if local user or category is (not)already following (c6f2c874)
+* allow category controller to respond also by remote category id (0b333fb7)
+* #13255, update category search logic to allow for remote categories (6e23de46)
+* delete shares zset on account deletion (7ccd6b73)
+* persona tooltip so it doesn't appear when dropdowns are open (ea9f7903)
+* lang keys (4277765b)
+* closes #13353, don't use index for finding plugin data (ed92ffaf)
+* regression on search query that is a url, via 3526c937ccec843d4637efa894f49efc9bac5493 (41252197)
+* closes #13313, add error:post-deleted (b49a4586)
+* upgrade script (52ca086b)
+* tag urls getting double escaped (#13306) (3526c937)
+* notifications.markAllRead (bf243e07)
+* posts.uploads.usage since paths changed (c41c7e8a)
+* req.body can be undefined (cd70e6c6)
+* closes #13298, catch exceptions in webfinger and nodeinfo (bbfd6445)
+* closes #13205, make parent post font-size small until expanded (ef98f8f9)
+* closes #13275, set 'announces' after adding to zset to prevent race condition (2c59007b)
+* use slug instead of groupname in acp for groups (d9f33204)
+* do not await the batch call to sendMessage (aa4f23bf)
+* commenting out outward federation of Add activity, pending forumwg discussion (4b22f297)
+* on user deletion during assertion (due to 410), if delete fails, just run ap post-deletion to clean up (4bbe27d4)
+* race condition in test (807a8c66)
+* **deps:**
+ * update dependency pg to v8.15.6 (#13362) (7f533167)
+ * update dependency pg-cursor to v2.14.6 (#13363) (03e06784)
+ * update dependency webpack to v5.99.7 (#13361) (0a3e4d61)
+ * update dependency pg to v8.15.5 (#13356) (74558b0f)
+ * update dependency ace-builds to v1.40.1 (#13354) (4eec053a)
+ * update dependency esbuild to v0.25.3 (#13355) (43d7d47f)
+ * update dependency pg-cursor to v2.14.5 (#13350) (00be573d)
+ * update dependency pg to v8.15.2 (#13349) (b49436de)
+ * update dependency sass to v1.87.0 (#13348) (50a58bbc)
+ * update dependency connect-redis to v8.0.3 (#13345) (8d84206f)
+ * update dependency mongodb to v6.16.0 (#13346) (3c24810d)
+ * update dependency chart.js to v4.4.9 (#13328) (0c5ef0e8)
+ * update dependency nconf to v0.13.0 (#13333) (6f8c7aba)
+ * update dependency ace-builds to v1.40.0 (#13331) (5d461f04)
+ * update dependency nodemailer to v6.10.1 (#13329) (6fbb2b4b)
+ * update dependency ioredis to v5.6.1 (#13318) (74d9806d)
+ * update dependency cron to v4.3.0 (#13332) (f96ce25a)
+ * update dependency sanitize-html to v2.16.0 (#13339) (24a5f407)
+ * update dependency webpack to v5.99.6 (#13341) (cac1c37b)
+ * update dependency bootbox to v6.0.3 (#13327) (8f784bb3)
+ * update dependency nodebb-theme-harmony to v2.1.6 (#13314) (1bd12622)
+ * update dependency nodebb-theme-persona to v14.1.5 (#13316) (6de89952)
+ * update dependency webpack to v5.99.5 (#13312) (140440cc)
+ * update dependency cron to v4.1.4 (#13307) (5fa09a67)
+ * update dependency nodebb-theme-persona to v14.1.2 (#13311) (6f3e9853)
+ * update dependency nodebb-theme-harmony to v2.1.3 (#13309) (9905e6aa)
+ * update dependency bootswatch to v5.3.5 (#13308) (4b511546)
+ * update dependency bootstrap to v5.3.5 (#13304) (22b3dc65)
+ * update dependency sass to v1.86.3 (#13302) (70e788ba)
+ * update dependency spdx-license-list to v6.10.0 (#13303) (cd2ed209)
+ * update dependency bootstrap to v5.3.4 (#13299) (d9074dbc)
+ * update dependency nodebb-plugin-mentions to v4.7.3 (#13294) (dd3d1917)
+ * update dependency bootbox to v6.0.2 (#13293) (dfd2621e)
+ * update dependency sass to v1.86.2 (#13295) (1a763cbb)
+ * update dependency benchpressjs to v2.5.5 (#13292) (311cbec2)
+ * update dependency nodebb-theme-harmony to v2.1.0 (#13296) (5caadd2d)
+ * update dependency esbuild to v0.25.2 (#13284) (e6a02176)
+ * update dependency cron to v4.1.3 (#13282) (c46c2623)
+ * update dependency cron to v4.1.2 (#13281) (11f7b42c)
+ * update dependency satori to v0.12.2 (#13280) (28ec8a79)
+ * update dependency cron to v4.1.1 (#13276) (57819810)
+ * update dependency nodebb-plugin-composer-default to v10.2.49 (#13272) (40ecffa0)
+ * update dependency nodebb-theme-harmony to v2.0.42 (#13274) (5b40c149)
+ * bump mentions (7d32cdac)
+ * update dependency validator to v13.15.0 (#13273) (d275af60)
+ * update dependency csrf-sync to v4.1.0 (#13268) (92caab97)
+ * update dependency nodebb-theme-persona to v14.0.17 (#13263) (ca479efc)
+ * update dependency nodebb-theme-harmony to v2.0.41 (#13262) (33c25ce6)
+ * update dependency nodebb-plugin-composer-default to v10.2.48 (#13261) (5b98af9f)
+ * update dependency sanitize-html to v2.15.0 (#13264) (e17163ad)
+ * update dependency ace-builds to v1.39.1 (#13260) (532fea99)
+
+##### Other Changes
+
+* yup. (28b7a203)
+* fix tabs (4cdfcf95)
+* fix typo (352c42d8)
+
+##### Refactors
+
+* use promise.all (74661381)
+* categories.sortTidsBySet to not take cid, retrieve from tids themselves (bfc7daf2)
+* allow topics to be asserted directly into a remote category, or -1 otherwise (0fa98237)
+* ability to browse to remote categories, group actor assertion logic, etc. -- no logic to assign topics to remote categories yet (1f40995f)
+* remove datepicker (be7959e5)
+* add sping/ping into openapi (8ffbc359)
+* moved these rules to nodebb-config (e184c910)
+* switch eslint configs to esm (92d6e022)
+* move topic/post menu lists to core (9f93cc9b)
+* show topic tools if plugins add them (87aacc89)
+* remove reply icons (b73fb67b)
+* remove debug log (021b3af0)
+* break long line (c93dc589)
+* only write to db on runJobs processes (a6839b61)
+* use bulk increment (667367a6)
+* remove spammy error log (9637abca)
+
+##### Reverts
+
+* use of vanity domains, needs rethinking. Originally added in 709a02d97ae7acbab08c7fa1fecfd01e0dcadcc7 (55c89969)
+
+##### Tests
+
+* article for new topic, note for replies (3e508d6c)
+* missing clear ap send cache (512f889e)
+* additional test for ensuring handle:uid is continually set even after re-assertion (39fc9bae)
+* additional test for remote category topic assertion when ignoring category (c2f77cee)
+* #13255, reply to topic in remote category addresses remote category (85e7c1a2)
+* remote user pruning tests (53dc79a1)
+* introduce overrides into person and group mocks (4f748158)
+* have ap helper mocks for person and group auto-save to ap cache (80069a19)
+* add failing tests for actor/group assertion via wrong method, remote user to category migration (afc47643)
+* add tests for topics slotting into remote categories if addressed (804052f2)
+* group actor assertion tests (ca9a5b6d)
+* shorter test (e0235a1e)
+* eslint for tests (f864a5a4)
+* fix tests (321defb9)
+* fix test expecting Note when it is now Article (5d94f2ca)
+
+#### v4.2.2 (2025-04-22)
+
+##### Chores
+
+* incrementing version number - v4.2.1 (852a270c)
+* update changelog for v4.2.1 (4cee37b9)
+* incrementing version number - v4.2.0 (87581958)
+* incrementing version number - v4.1.1 (b2afbb16)
+* incrementing version number - v4.1.0 (36c80850)
+* incrementing version number - v4.0.6 (4a52fb2e)
+* incrementing version number - v4.0.5 (1792a62b)
+* incrementing version number - v4.0.4 (b1125cce)
+* incrementing version number - v4.0.3 (2b65c735)
+* incrementing version number - v4.0.2 (73fe5fcf)
+* incrementing version number - v4.0.1 (a461b758)
+* incrementing version number - v4.0.0 (c1eaee45)
+
+##### Bug Fixes
+
+* escape displayname in topic events (42a5a127)
+* closes #13336, allow main post deletion from "delete posts" tool (4f13eb03)
+* bug where generateHandle would throw when passed in an invalid slug (2a98a9b3)
+
+##### Other Changes
+
+* fix semi (6832541c)
+* fix missing comma (d59a5728)
+
+##### Refactors
+
+* use sortedSetsCard (46ed56cf)
+
+#### v4.2.1 (2025-04-10)
+
+##### Chores
+
+* up harmony (d161eb6f)
+* up persona (2237e17a)
+* up persona (75f1f6fb)
+* incrementing version number - v4.2.0 (87581958)
+* update changelog for v4.2.0 (c9e0198d)
+* incrementing version number - v4.1.1 (b2afbb16)
+* incrementing version number - v4.1.0 (36c80850)
+* incrementing version number - v4.0.6 (4a52fb2e)
+* incrementing version number - v4.0.5 (1792a62b)
+* incrementing version number - v4.0.4 (b1125cce)
+* incrementing version number - v4.0.3 (2b65c735)
+* incrementing version number - v4.0.2 (73fe5fcf)
+* incrementing version number - v4.0.1 (a461b758)
+* incrementing version number - v4.0.0 (c1eaee45)
+
+##### Bug Fixes
+
+* closes #13317, fix email confirm for changing email (33d50637)
+* check if latestversion is valid before using semver.gt (6fe066ce)
+* closes #13256, allow keyboard access to icon colors (c6620170)
+
+##### Refactors
+
+* get rid of async.parallel (e722e869)
+* remove pointless true (747457d7)
+* make register intro heading (c258f597)
+
+#### v4.2.0 (2025-03-19)
+
+##### Chores
+
+* **deps:**
+ * update commitlint monorepo to v19.8.0 (#13244) (ee3c0bf4)
+ * update dependency lint-staged to v15.5.0 (#13245) (f4fe3f5f)
+ * update dependency sass-embedded to v1.86.0 (#13251) (3bb861ae)
+* up widgets (ed57f896)
+* incrementing version number - v4.1.1 (b2afbb16)
+* update changelog for v4.1.1 (2c3f8561)
+* add missing file to az lang (d7116adc)
+* language labels for az/pl (61d17c95)
+* alphabetize transifex config file languages (b7bb35f8)
+* incrementing version number - v4.1.0 (36c80850)
+* incrementing version number - v4.0.6 (4a52fb2e)
+* incrementing version number - v4.0.5 (1792a62b)
+* incrementing version number - v4.0.4 (b1125cce)
+* incrementing version number - v4.0.3 (2b65c735)
+* incrementing version number - v4.0.2 (73fe5fcf)
+* incrementing version number - v4.0.1 (a461b758)
+* incrementing version number - v4.0.0 (c1eaee45)
+* **i18n:**
+ * fallback strings for new resources: nodebb.admin-settings-email (866cd539)
+ * fallback strings for new resources: nodebb.error (b4dfd7fe)
+ * fallback strings for new resources: nodebb.admin-settings-chat (2f957655)
+ * fallback strings for new resources: nodebb.user (78a2c087)
+ * fallback strings for new resources: nodebb.admin-manage-categories (c3993018)
+ * fallback strings for new resources: nodebb.admin-manage-categories (efdb416c)
+ * fallback strings for new resources: nodebb.category (8314d8ba)
+
+##### Documentation Changes
+
+* openapi schema for admin/extend/plugins (f2a16422)
+* update openapi schema from 6c26d9f4a3c398b4d7add0a2d9c91685a0336a74 (128dd2d3)
+
+##### New Features
+
+* 1b12 category announce on post move to a new tid, #13236 (254f0738)
+* add Azerbaijani localisations, təşəkkür edirəm! (825e4c70)
+* if an incoming remote message is too long, don't create the room, but notify the local recipients instead (885b83e5)
+* new ACP config for max length of remote chat messages, #13174 (81509b13)
+* add `federatedDescription` property to a category. (dfabadbe)
+* add link to category edit page in acp category sidebar (fa8216f2)
+* add additional logic that checks whether a cid follows the activity actor, and asserts note into that category if so (3589c570)
+* move category sidebar to ACP partial, add sidebar to category-federation (dc2dcaf1)
+* add line to description exposing a category's handle if accessible by fediverse pseudo-user, closes #13126 (6c26d9f4)
+* call announceObject on topic fork, #13215 (e3edfef8)
+
+##### Bug Fixes
+
+* wrong property name used (08796a0a)
+* #13254, configurable ap content prune (80e03c85)
+* only 1b12 announce topic fork if OP is local, fix race condition in tests (945617cb)
+* bug where remote post was attempted to be announced on post move (291af926)
+* handling of `href` in remote object attachments, #13169 (44354dac)
+* #13100, direct access to a tag page no longer excludes cid -1 (14fd33ce)
+* expose remote url in user object (78c9239b)
+* hide disable and purge buttons from category-federation.tpl (43248578)
+* show 'copy settings from' button in acp category sidebar only on category.tpl (1f6871e5)
+* improper cc and object fields in announceObject (deb5ee5e)
+* move AP send logging earlier (dca3c35d)
+* #13224, handle note attributedTo when it is of type object (d9483347)
+* allow actor assertion of loopback actors depending on ACP setting (73aaa990)
+* **deps:**
+ * update dependency mongodb to v6.15.0 (#13253) (1c23d0cf)
+ * update dependency pg to v8.14.1 (#13247) (4d6d71d8)
+ * update dependency nodebb-widget-essentials to v7.0.36 (#13250) (dbd0fd22)
+ * update dependency sass to v1.86.0 (#13252) (a1465268)
+ * update dependency esbuild to v0.25.1 (#13243) (ce3bb8b5)
+ * update dependency ioredis to v5.6.0 (#13246) (b96f532b)
+ * update dependency connect-redis to v8.0.2 (#13242) (e90a8b26)
+ * update dependency autoprefixer to v10.4.21 (#13241) (4e69ed56)
+ * update dependency pg-cursor to v2.13.1 (#13248) (92727549)
+ * update fontsource monorepo to v5.2.5 (#13226) (8ca1d6e6)
+ * update dependency mongodb to v6.14.2 (#13229) (b39e4d19)
+ * update dependency terser-webpack-plugin to v5.3.14 (#13230) (7b40e210)
+ * update dependency mongodb to v6.14.1 (#13225) (a58af228)
+ * update dependency tough-cookie to v5.1.2 (#13217) (e19109ad)
+ * update dependency mongodb to v6.14.0 (#13214) (ad680d6a)
+ * update dependency terser-webpack-plugin to v5.3.12 (#13213) (4c22af8c)
+ * update dependency cron to v4.1.0 (#13200) (f56838a3)
+
+##### Refactors
+
+* remove announceObject in favour of feps.announce, added create activity mock to support (74443c3b)
+* move all input note normalization into helper method, have assertPrivate mock a message object (with said normalization) before sending message (4ec7552c)
+
+##### Tests
+
+* add url/statusCode to failing test (8982923e)
+* fix remoteUrl property generation, tests for topic moving (0e1006fb)
+* fix actor tests (537880d2)
+* openapi schema for remoteUrl (fc64e89f)
+* add failing test for #13215 (feb94215)
+* adjust test runner detection in AP code (7ceb6d69)
+* new test file for feps (e510e826)
+* log outgoing AP messages for local test runner (6e872b5f)
+* allow ap/notes tests to be run in isolation (98aafaaf)
+
+#### v4.1.1 (2025-03-12)
+
+##### Chores
+
+* up themes (34414f16)
+* up mentions (39ff5dde)
+* up markdown (1d4be475)
+* incrementing version number - v4.1.0 (36c80850)
+* update changelog for v4.1.0 (3292a858)
+* incrementing version number - v4.0.6 (4a52fb2e)
+* incrementing version number - v4.0.5 (1792a62b)
+* incrementing version number - v4.0.4 (b1125cce)
+* incrementing version number - v4.0.3 (2b65c735)
+* incrementing version number - v4.0.2 (73fe5fcf)
+* incrementing version number - v4.0.1 (a461b758)
+* incrementing version number - v4.0.0 (c1eaee45)
+
+##### New Features
+
+* allow self-signed certs, closes #13238 (de502cd2)
+
+##### Bug Fixes
+
+* lang typo (fc9cc8d6)
+* check if folder exists when uploading files in acp (76896859)
+* sanitize category svg image files (810e8dbb)
+* #13094, update unread chats on reconnect (1e6c6f4e)
+* don't update topic lastposttime by announce (6b9f166c)
+* closes #13078, toggle /world navItem when AP is toggled (bef17920)
+* closes #13231, add some text-truncate, match width (bb13ea30)
+* #13228, use timestamp from mainpost/lastpost (48f0f47a)
+* add starterPlan check (40a5314e)
+* closes #13219, only delete local user folder (8dbd50d4)
+* don't crash if there are exceptions in action hooks (30068245)
+
+##### Other Changes
+
+* missing semi (c4e31395)
+* fix ) (9549f1fa)
+
+##### Refactors
+
+* prevent following symlinks (e775564f)
+* show simple error if path doesn't exist (6d74ee2f)
+* use navAdmin (b517f05e)
+* dont generate UUID if no email (c83f91bd)
+* show warning if there is no email for validation (84d3fe79)
+
+##### Tests
+
+* fix inf loop if dirname results in same dir, ie \ (1ca7b7ec)
+* #13078, add nav test (04279718)
+
+#### v4.1.0 (2025-02-27)
+
+##### Chores
+
+* incrementing version number - v4.0.6 (4a52fb2e)
+* update changelog for v4.0.6 (78bbea30)
+* comment out testing helper call (bad0a4c2)
+* incrementing version number - v4.0.5 (1792a62b)
+* incrementing version number - v4.0.4 (b1125cce)
+* incrementing version number - v4.0.3 (2b65c735)
+* up harmony (ea110a0e)
+* incrementing version number - v4.0.2 (73fe5fcf)
+* incrementing version number - v4.0.1 (a461b758)
+* bump emoji for #13077 as well (ff0de097)
+* fix ap dev helper (b14494b0)
+* add helper method to ease in dev (d7d64a14)
+* add helper method to ease in dev (7d5482b2)
+* incrementing version number - v4.0.0 (c1eaee45)
+* **deps:**
+ * update dependency sass-embedded to v1.85.1 (#13208) (3907e6c8)
+ * update postgres docker tag to v17.4 (#13196) (cba2bc5e)
+ * update postgres docker tag to v17.3 (#13162) (47e28a0e)
+ * update dependency sass-embedded to v1.85.0 (#13161) (2258e145)
+ * update commitlint monorepo to v19.7.1 (#13123) (ca6734b3)
+ * update coverallsapp/github-action action to v2.3.6 (#13089) (84b28fae)
+ * update dependency lint-staged to v15.4.3 (#13079) (1d846134)
+ * update dependency mocha to v11.1.0 (#13069) (8e99c97a)
+ * update dependency lint-staged to v15.4.1 (#13060) (153e65bc)
+ * update dependency lint-staged to v15.4.1 (#13060) (37b2b83d)
+* **i18n:**
+ * fallback strings for new resources: nodebb.category (00253821)
+ * fallback strings for new resources: nodebb.error (589be143)
+ * fallback strings for new resources: nodebb.themes-harmony (25049714)
+ * fallback strings for new resources: nodebb.admin-settings-advanced (ad6b6132)
+ * fallback strings for new resources: nodebb.themes-harmony (fc063bb0)
+ * fallback strings for new resources: nodebb.admin-settings-general (d41109a0)
+
+##### New Features
+
+* support remote "Video" type objects in note assertion, #13120 (95f2c4ed)
+* 1b12 compatibility (7dc1e8ab)
+* remove activities older than a week (d9e86c7b)
+* federate out Announce of a tid's mainPid if the tid is moved out of cid -1 (b7f9983a)
+* syncUserInboxes to take into account remote topic tags, closes #13074 (637addc4)
+* allow search bar to load remote 7888 Conversations, aka nodebb topics (7687da00)
+* introduce new 'markdown' post parsing type, closes #13077 (b386e4a6)
+* #13066, report canonical URL in user agent for outgoing requests (c3e9cb68)
+* changes to how a topic is presented via ActivityPub; conformance with upcoming changes to 7888 (4fd7a9dc)
+* changes to how a topic is presented via ActivityPub; conformance with upcoming changes to 7888 (adeaff4b)
+
+##### Bug Fixes
+
+* scheduled topics and posts should return 404 on AP request (428300de)
+* tag handling when remote objects contain tags without leading # symbol (5c3f1cfe)
+* handle multiple types in remote actor payload (65895651)
+* missing db (058befb3)
+* remove handle on category purge (adb430f2)
+* restrict feps methods to real cids (8b717d54)
+* restore old behaviour of 1b12 federating both object and activity (f0ee43dc)
+* send `actor` with 1b12 announce, fixes #13072 again (86b0e591)
+* isArray check (5f3ed76d)
+* delete from payload instead of setting null (489c5ce2)
+* send `actor` with 1b12 announce, fixes #13072 (3cd87f1b)
+* #13139, payload.version can be null (be1598d1)
+* tidChanged (bfd4e68b)
+* bad logic that invisibly broke outgoing user follows completely (334be721)
+* #13076, allow pulling in of topics by their topic URL fix: reapply fixes that were part of since-reverted 4fd7a9dc59b65e8654d704c493f2254793e8d6a9 (c6e6ab43)
+* call relativeToAbsolute helper when generating markdown source content in mocks.notes.public/private (02fb99eb)
+* extend remoteAnchorToLocalProfile ap helper to handle markdown content (db1f8959)
+* incorrect `posts` url in topic posts collection (812ec73e)
+* incorrect `posts` url in topic posts collection (b2530e61)
+* **deps:**
+ * update dependency sass to v1.85.1 (#13209) (386ab89f)
+ * update dependency bcryptjs to v3 (#13160) (6ea65678)
+ * update dependency cron to v4 (#13184) (41eec8d7)
+ * update dependency xregexp to v5.1.2 (#13195) (23621eca)
+ * update dependency ace-builds to v1.39.0 (#13197) (a3f5721a)
+ * update dependency chart.js to v4.4.8 (#13182) (474d267e)
+ * update dependency postcss to v8.5.3 (#13183) (5fc4c806)
+ * update dependency mongodb to v6.13.1 (#13187) (77b0160c)
+ * update dependency nodebb-plugin-web-push to v0.7.3 (#13178) (000ceee4)
+ * update dependency sass to v1.85.0 (#13163) (75a7188a)
+ * update dependency pg to v8.13.3 (#13157) (f3c156e9)
+ * update dependency pg-cursor to v2.12.3 (#13158) (6b8e4b39)
+ * update dependency webpack to v5.98.0 (#13159) (db74c1e8)
+ * update dependency nodebb-widget-essentials to v7.0.33 (#13156) (af7f4242)
+ * update dependency pg-cursor to v2.12.2 (#13150) (b5ce9e14)
+ * update dependency compression to v1.8.0 (#13152) (1e52cf34)
+ * update dependency ace-builds to v1.38.0 (#13151) (db0b816c)
+ * update dependency pg to v8.13.2 (#13149) (bea1367d)
+ * update dependency postcss to v8.5.2 (#13144) (3449e76d)
+ * update dependency benchpressjs to v2.5.3 (#13098) (6688edde)
+ * update dependency esbuild to v0.25.0 (#13141) (d7fdd80c)
+ * update dependency tough-cookie to v5.1.1 (#13140) (33ce7239)
+ * update dependency ioredis to v5.5.0 (#13138) (b337e999)
+ * update dependency sass to v1.84.0 (#13128) (f872a768)
+ * update dependency semver to v7.7.1 (#13122) (5f3c5a55)
+ * update dependency mongodb to v6.13.0 (#13106) (31ff6c2e)
+ * update dependency semver to v7.7.0 (#13099) (a348e808)
+ * update dependency nodemailer to v6.10.0 (#13073) (8ab71e4f)
+ * update dependency nodebb-theme-persona to v14.0.2 (#13064) (8ec3ceae)
+ * update dependency nodebb-theme-harmony to v2.0.3 (#13063) (b98d047a)
+
+##### Other Changes
+
+* remove unused db (06b3d9ad)
+* remove tab (54bc54e1)
+* fix tab (397d28e3)
+
+##### Performance Improvements
+
+* closes #13145, reduce calls in actors.prune (676acb7e)
+
+##### Refactors
+
+* remove cid:-1:tids (and variants) from intersection in /world, fixes #13125 (d0561a60)
+* single remove (0784e11b)
+* move 1b12 announce logic out of inbox and into separate feps module (9fd6ac6b)
+* acceptable types in context.js to index.js, allow searching for remote topis by topic url (d644c0f4)
+* Posts.relativeToAbsolute so that the regexes passed to it no longer need a pre-defined length, it is now calculated from the match result, added new regex for markdown image/anchors (f64e6f0f)
+
+##### Tests
+
+* moved AP actor tests to separate actors.js file, added failing test for scheduled topics (01be4d79)
+* update test to assert the note assertion itself (c6ba56a5)
+* update bcrypt hash for 3.x (bfffbfbe)
+* update pwd test for bcrypt3.x (ca0fa1d3)
+* add sourceContent to spec (d1d55461)
+* adjust webfinger test for updated 404 status code (59afd193)
+
+#### v4.0.6 (2025-02-27)
+
+##### Chores
+
+* up dbsearch (9e1a0a13)
+* add sourceContent to schema (b2cdd5fd)
+* up harmony (f94cf5ce)
+* up deps (a9563d75)
+* up harmony (08014e7c)
+* up harmony (8385d4ae)
+* up harmony (0a9d28d5)
+* up harmony (c920836a)
+* up esbuild (2ab6a368)
+* up widgets (02a8d9b6)
+* up harmony (05bbefd1)
+* incrementing version number - v4.0.5 (1792a62b)
+* update changelog for v4.0.5 (f84b9fc7)
+* incrementing version number - v4.0.4 (b1125cce)
+* incrementing version number - v4.0.3 (2b65c735)
+* incrementing version number - v4.0.2 (73fe5fcf)
+* incrementing version number - v4.0.1 (a461b758)
+* incrementing version number - v4.0.0 (c1eaee45)
+
+##### New Features
+
+* match events and parent style (e38d1531)
+* merge consecutive share events (9153f8cf)
+* **config:** add `acpPluginInstallDisabled` option (#13189) (577eee2f)
+
+##### Bug Fixes
+
+* add missing file (04d5edbb)
+* #13202, private note assertion failure when cc property is missing (c65e1ebb)
+* tests for public and private note assertion, failing test for private note assertion with missing cc prop (efb27ce0)
+* closes #13206, truncate long usernames (51872d54)
+* closes #13207, add localComments (13a13e1d)
+* handle multiple types in remote actor payload (d91b80d2)
+* don't send validation email for pending emails (07957e82)
+* missing db (52b23313)
+* #13198, use email from confirmObj (b4dfc48b)
+* summary post parse (e9d4c7b9)
+* add sourceContent to getPostSummaryByPids (ad92e931)
+* #13193, add lang strings (2c830567)
+* #13194, dont notify about cid=-1 (b8c8ae09)
+* old upgrade script so it doesn't create settings objects (fe980688)
+* escape confirm email in acp manage users (9bfa8853)
+* add missing await on filter:user.logout (c6b8256f)
+* relaxing strict allowedTags configuration for incoming AP content (allowing picture, source, and additional attributes for img) (2ad48f17)
+
+##### Other Changes
+
+* fix (ec11b0c2)
+
+##### Refactors
+
+* use sortedSetRemoveBulk (349084d8)
+* don't make db request if there is no code (53a2be9d)
+
+##### Tests
+
+* remove extra .only, add basic tests for public note assertion (64267f7d)
+
+#### v4.0.5 (2025-02-20)
+
+##### Chores
+
+* bump composer to 10.2.46 for #13132 (7520e4f6)
+* up harmony (f82f00e5)
+* up widgets (e23a14c1)
+* up harmony (c0996a80)
+* up dbsearch (d0a9ddea)
+* up dbsearch (310fab65)
+* add test helper to activitypub file (4bc0031f)
+* incrementing version number - v4.0.4 (b1125cce)
+* update changelog for v4.0.4 (d3b69a39)
+* incrementing version number - v4.0.3 (2b65c735)
+* incrementing version number - v4.0.2 (73fe5fcf)
+* incrementing version number - v4.0.1 (a461b758)
+* incrementing version number - v4.0.0 (c1eaee45)
+
+##### New Features
+
+* add upload button to quickreply (f67a0a12)
+* remove activities older than a week (9997189a)
+
+##### Bug Fixes
+
+* typo (e63f1234)
+* #13136, do not log 404s for AP requests (93f48409)
+* #13129, serve category backgroundImage as actor `icon`, not `image` (b8200095)
+* escape ip blacklist rules (625f4751)
+* closes #13180, don't execute cron jobs if ap disabled (a410587c)
+* #13172, Topics.addParentPosts not sending sourceContent in calling parsePosts (bb9687bd)
+* #13179, fix context resolution failure bug with frequency (6245e33d)
+* add back chronological sorting of asserted notes (de6e63bb)
+* #13170, remove mime-type and regex test for "Emoji" attachment, wrap tag name in colons if not provided (92708d2f)
+* closes #13176, check if uid is number when creating tokens (80cc1d34)
+* notes.assertPrivate sanity checks (5e71d597)
+* page index for single page, closes #13173 (b0e8058f)
+* remove handle on category purge (4134a075)
+
+##### Tests
+
+* dont clear local when testing (669755d1)
+* show objects on fail (f2824073)
+* wait after post request (64318242)
+
+#### v4.0.4 (2025-02-17)
+
+##### Chores
+
+* up harmony (0fed9a76)
+* up harmony (ef2c606d)
+* up harmony (f1da510f)
+* up deps (fa366095)
+* up harmony (df07fcfa)
+* up harmony (de5caf8f)
+* up harmony (d1f78295)
+* incrementing version number - v4.0.3 (2b65c735)
+* update changelog for v4.0.3 (123e1635)
+* incrementing version number - v4.0.2 (73fe5fcf)
+* incrementing version number - v4.0.1 (a461b758)
+* incrementing version number - v4.0.0 (c1eaee45)
+* **i18n:** fallback strings for new resources: nodebb.themes-harmony (99210918)
+
+##### Bug Fixes
+
+* clear parsed post cache when updating a post's attachments, #13164 (33d7b9b3)
+* logic failure causing remote posts with image to not parse properly, #13164 (d936d5c0)
+* change the passed-in notificatiom id for `notifyTagFollowers` to contain the list of matched tags (04f51cc6)
+* actor.prune, dont try deleting same users (ffbe4b7b)
+* getLocalFollowCounts, show non existing deletes (cfbb8ff8)
+* return null if field isn't in hash (70a9f6d3)
+* getUserField so that it always returns null (e85662a5)
+* isArray check (224910b1)
+* sanity-check the id when mocking a post (5cbf3dd7)
+* missing actor on some local activities when federating out (040584f0)
+
+##### Performance Improvements
+
+* closes #13145, reduce calls in actors.prune (d590c2af)
+
+##### Refactors
+
+* single remove (77dd6dd0)
+* cleanup ip:recent (d8724708)
+* hooks button (c4b01330)
+
+#### v4.0.3 (2025-02-09)
+
+##### Chores
+
+* up harmony (2ee0cda2)
+* update persona (b6b76639)
+* bump persona to fix theme description issue (cd88cce0)
+* up harmony (a01bf73e)
+* forgot to remove bad code (865c09a5)
+* up harmony (c3f8222f)
+* up harmony (f07f3801)
+* up harmony (67a789ad)
+* up themes (c1c5cc6e)
+* up themes (b2b0ed35)
+* up peace (55eedcbe)
+* up themes (38a21e29)
+* up harmony (58e551fe)
+* incrementing version number - v4.0.2 (73fe5fcf)
+* update changelog for v4.0.2 (75588ffe)
+* incrementing version number - v4.0.1 (a461b758)
+* incrementing version number - v4.0.0 (c1eaee45)
+
+##### Bug Fixes
+
+* delete from payload instead of setting null (1b4e0c87)
+* regression :tmi: (f5328aa8)
+* #13139, payload.version can be null (bfe6d9d8)
+* tidChanged (1f8e2f9a)
+* #13135, tids are not numeric for ap topics (d687f081)
+* handle cases where url passed to mime does not pass because url contained a query string (5baa46d0)
+* isDraft logic, closes #13119 (21156673)
+* path on windows, #13119 (36063d1f)
+* #13115, prevent messages from getting duplicated (1ff8e1e4)
+* #13115, limit bodyLength length (8e9fdb5f)
+
+##### Other Changes
+
+* remove log (a8e7bf35)
+
+##### Refactors
+
+* events are returned inside post objects (3ab22c2c)
+* move dropdown search inputs into dropdown (b993be6f)
+* server.destroy (72091ec4)
+* remove deprecated methods (265e44f0)
+
+##### Tests
+
+* search endpoint with start & end (c1b630d4)
+
+#### v4.0.2 (2025-02-02)
+
+##### Chores
+
+* up persona (0298a3af)
+* up harmony (d77d2055)
+* up themes, closes #13102 (6672de00)
+* incrementing version number - v4.0.1 (a461b758)
+* update changelog for v4.0.1 (3dbd2b30)
+* incrementing version number - v4.0.0 (c1eaee45)
+
+##### New Features
+
+* allow selecting empty for custom selects (be62ae24)
+* add uid to post.parent (4d733590)
+* add description and keywords to api/config (933c18f4)
+
+##### Bug Fixes
+
+* bad logic that invisibly broke outgoing user follows completely (51e660d5)
+* closes #13096, fix regression from renaming language files (0b92d525)
+
+##### Refactors
+
+* remove old comment (d4a1b4da)
+
+##### Tests
+
+* fix schema (ef5ae006)
+* fix schema (47734d4c)
+
+#### v4.0.1 (2025-01-29)
+
+##### Chores
+
+* up dbsearch (88fa4553)
+* up benchpress (c9584800)
+* up harmony (10409e0e)
+* up themes (6918c3f3)
+* up themes (050effe2)
+* up harmony (90e0a2d6)
+* incrementing version number - v4.0.0 (c1eaee45)
+* update changelog for v4.0.0 (ae8f58d6)
+
+##### New Features
+
+* use text-danger if chat over limit (2f5b4b29)
+
+##### Bug Fixes
+
+* #13087, disallow following cid -1 (ddb6e0f3)
+* encoding of pid in notifyCategoryFollowers, #13087 (6d88dcb2)
+* #13084 bump persona (4feda224)
+* closes #13091, dont show world category (4c66eed9)
+* #13088, up dbsearch (8644565a)
+* #13090, update themes fix selector (822bff62)
+* #13086 move rateLimit check (487d9f73)
+* null checks for category sync and actor assertions (b3b8b9e9)
+* #13067, add sourceContent to teasers (679fcb71)
+* #13065, send missing `actor` property when 1b12 announcing local posts (e61df4de)
+* closes #13068, encodeURIComponent X-Redirect (f3b8ed27)
+* #13062 add displayname to email tpl data (f0c2090d)
+
+##### Other Changes
+
+* missing ; (8b38cb3a)
+* reduce image size (#12702) (a95a51c6)
+
+##### Refactors
+
+* 🤡 (4ba01d18)
+
+##### Tests
+
+* adjust webfinger test for updated 404 status code (4a827b7e)
+* fix x-redirect tests (b80440aa)
+* add sourceContent to spec (526a9521)
+* change test to 404 (52f7f0a7)
+* remove only (0ba4ba65)
+
+#### v4.0.0 (2025-01-20)
+
+##### Breaking Changes
+
+* add new `escape` option to getPostSummaryByPids [breaking] (16c8a652)
+* core html stripping on plaintext, remove 'filter:teasers.configureStripTags' hook, remove html stripping from teaser generation (c01f1549)
+
+##### Chores
+
+* **i18n:**
+ * fallback strings for new resources: nodebb.error (e53b3737)
+ * fallback strings for new resources: nodebb.aria (d04bdd9d)
+* update changelog for v3.12.4 (e7e682ed)
+* bump persona (3e08eb39)
+* bump markdown, harmony, and persona to new major versions (499df8ab)
+* remove now-unneeded v4 upgrade scripts (487e7be5)
+* add type to webpack config file (#12072) (d79dfd03)
+* rc4 (aa1f65e9)
+* bump harmony for #12938 (8ec388af)
+* rc3 (754ef9b2)
+* upgrade script to fix outdated slugs for users with periods in their usernames (d1c27b4d)
+* bump to rc.2 (e2b653b0)
+* bump version to rc.1 (5aab151e)
+* up persona (b25aa336)
+* beta.4 (c1079356)
+* up harmony (098836c1)
+* beta.3 (27fb01f7)
+* up harmony (34353bdb)
+* beta.2 (cc267714)
+* beta tag (86f624f8)
+* up themes (471fbd3a)
+* up themes (d4cf5e7e)
+* restore activity history check in AP inbox middleware now that NodeBB sends unique IDs with applicable activities (7e23e192)
+* up harmony (16fe85e2)
+* up themes (789520e4)
+* up harmony (7a5588da)
+* bump version to 4.0.0-alpha (b691d2a9)
+* up harmony (aae0b5b0)
+* up harmony (b540ecd3)
+* up harmony (18f9baff)
+* info -> verbose logging in ap inbox.js (931a0f0a)
+* make getParentChain logging verbose (6069bee0)
+* lint (f6d4d563)
+* up mentions (68c91650)
+* up mentions (2b6e31a6)
+* commenting out logic that drops requests if the id has already been seen, due to a regression in interoperability between NodeBB instances (bb0360bf)
+* up mentions (2c87c6e8)
+* up mentions (bad094e8)
+* up markdown (58668b46)
+* up markdown (dbd901d3)
+* update ap cron job config (c680fa67)
+* up mentions (c4c3c207)
+* bump harmony (4cec6783)
+* bump mentions (5ec24977)
+* bump markdown (4fd0d27e)
+* up mentions (78e11d6e)
+* bump harmony (228c9173)
+* some linting (fdba6840)
+* debug log (3636dec7)
+* up widgets (1ce986f7)
+* lint (5e776088)
+* minor cleanup (1253ded7)
+* add verbose logging to middleware.validate (719bb0a0)
+* up harmony (550e522f)
+* move assertTopic to top of file, rename to assert (4ee8519d)
+* up harmony (a84dba27)
+* lint (c5c0c473)
+* remove now-unused notes.assert (c6624b63)
+* up harmony (66b4dc2c)
+* up harmony (d31978b3)
+* lint (0c2cfbe7)
+* removed unused requires (911177ce)
+* remove debug log (92c990f2)
+* remove debug log (403bf3e1)
+* update log verbiage (9c15b02a)
+* additional logging (641a94d6)
+* move assertNote to separate file in preparation for additional note-based methods (2b3b6e56)
+* small var rename (8a5fb86d)
+* minor re-shuffling of code (5e693702)
+* reorganize controllers for clarity (2e899008)
+* update AP helpers export, 404 logic reversal, no slugify in userslug in mock profile from remote instance (0cbbce8c)
+* **deps:**
+ * update dependency lint-staged to v15.4.0 (#13059) (1c4c4f57)
+ * update dependency sass-embedded to v1.83.4 (#13045) (be2098d8)
+ * update dependency @commitlint/config-angular to v19.7.0 (#13030) (03432960)
+ * update dependency jsdom to v26 (#13040) (d12d9efb)
+ * update redis docker tag to v7.4.2 (#13033) (fd6f3ee6)
+ * update dependency lint-staged to v15.3.0 (#13031) (3340d984)
+ * update dependency sass-embedded to v1.83.1 (#13025) (b9364de2)
+
+##### Documentation Changes
+
+* add `resizeImageWidth` to openapi definition for /api/config route (7c1b9000)
+* fix comment (e5331b84)
+* schema update for activitypub acp route (3a05171f)
+* update comment to reflect new behaviour (2cbd63dc)
+
+##### New Features
+
+* fix activitypub toggler to be more complete; tests. #13054 (af4d07fb)
+* add activitypub file to translations (74831034)
+* save audience into post hash (for remote posts) (b537437c)
+* add `filter:topics.hasThumbs` filter hook (f4835695)
+* append uploaded images into thumbnail set (cc65214d)
+* #12976, shares collection (e83036a9)
+* pending follows and logic for remote users, #12938 (2851e56b)
+* #12935, show 'shared this to x' in topic event when moving topics out of cid -1 (fcf0f799)
+* support for FEP fb2a (new-style account metadata) (549a6b7d)
+* #12924, parse incoming custom fields from remote users (0f351ba7)
+* #12924, custom user fields for local users now federating out (62fe70f2)
+* add title property to custom emoji markup (3968c822)
+* #12683, parse incoming emoji tags and replace in content prior to storage in database (09b1e119)
+* fire new hook `filter:activitypub.mocks.note` on note mocking (4ba41a68)
+* handle receipt of `Add` activity #12707 (3023b251)
+* associate new topics created from asserted notes with their originating context, if that context is resolvable (6f237c57)
+* #12822, send all outgoing links to `/ap` first to see if it's activitypub enabled, parse if able, otherwise redirect as normal (069c8228)
+* normalization middleware to ensure incoming objects' data types are as expected (simplifies later logic) (13c048a5)
+* send Update(Note) on chat message deletion and restoration, serving Tombstone if deleted (61445d3d)
+* handle Update(Note) when object has limited visibility, #12834 (e5948464)
+* check room counts on actor prune, #12834 (e0e2051d)
+* federate on chat message edit, #12834 (1659015c)
+* notify users on new message from remote users, fix use of parseInt in generating chat notification (2464d13c)
+* handle incoming non-public activities as chat message, #12834 (b82e20df)
+* federating out chat messages (2ab5ea39)
+* update mdidleware.assert.message so roomId is optional (2b71434e)
+* #12647, federate out `Add` activity on inbox.create and local post creation (bd44783e)
+* send 308 when activitypub request for remote post comes in, #12831 (7f1f4859)
+* dynamic category icon generation (edff3394)
+* enable web-push plugin on first install (34c4cefe)
+* service worker icon and badge support (4ae86145)
+* update `buildRecipients` to include all topic participants and their followers, #12735 (6752a541)
+* notification rescind support (d6bab253)
+* update service worker to handle push and notificationclick (5109b539)
+* add onmessage handler for service worker (40fe4d88)
+* extend activitypubApi.create.note to accept a post object to reduce unnecessary calls to retrieve post summary (b63440cb)
+* moving a topic out of cid -1 federates an Announce activity, #12734 (daa665eb)
+* additional copy re: editing remote posts, #12732 (c3e14912)
+* allow use of vanity domains pointing to an account hosted elsewhere (709a02d9)
+* show local users who follow (or are followed) by a remote user, on a remote user's profile (a884681a)
+* additional logic to handle special case where a queried object id reports a context, but it is not actually contained in the resolved context's collection (f9937a84)
+* #12695 Topic Synchronization via resolvable `context` (ff0c289e)
+* activitypub.get; allow the passing-in of custom headers via existing `options` parameter (da25fd21)
+* add post attachments to topic thumbnails (2aeabce5)
+* icon replacing user status for remote users, denoting that they are from outside the local instance, #12688 (a81ef609)
+* allow activitypub request cache to be ignored (485b7758)
+* send join date in local actor mock (3c9337b7)
+* AP note replies collection, closes #12675 (26a7c51a)
+* topic backfill logic via resolvable context #12647 (e75ec39b)
+* send out `Update(Actor)` when a category is edited (09d8fbf9)
+* instance-level allow andd deny list for federatioN (6e2178b0)
+* store encountered instances by last seen date (d0a1ebcf)
+* sending out 1b12-style Announce activities on incoming Create/Update/Like/Delete/Undo(Like) activities, when they pertain to notes (6569066e)
+* assert actors when mocking post (f5b856f4)
+* check to/cc/audience for local category and put topic there instead (overrides passed-in cid) (b6ffc47c)
+* plumb audience into _activitypub when mocking posts (d9f1fa3a)
+* send cause to ap.get error handler, delete local account representation if assertion fails with a 410 (3567f55a)
+* #12589, add nodeinfo endpoint (578a53dd)
+* add timestamp to most activity ids (42f514b7)
+* show category followers in category federation ACP page (7313d5c6)
+* logic for remote user deletion, cronjob, and ACP options for pruning options (4bb2c1a8)
+* remote user deletion logic, #12611 (539300ff)
+* allow user.exists to respond to requests for remote uids too (3dca79dd)
+* pruning of stale notes older than 30 days with no engagement (709c9132)
+* save remote user urls backreference (ff53f3c0)
+* add another sanitization round before federating to remove classes from all tags in output html, closes #12573 (7c79e231)
+* passing in types to parsePost for more specific handling by plugins (8cf96176)
+* track incoming requests by id, analytics increment for some metrics, ignore repeated requests by id (4e9cd8ef)
+* added analytics.peek (b106a6a0)
+* Note deletion logic and refactoring, #12551 (ccd187e0)
+* handle receipt of Update(Tombstone) (f4043959)
+* on post delete, federate out an Update(Tombstone) (96db519b)
+* serve Tombstone objects for soft deleted posts (5e9d47a1)
+* ability to query remote users by webfinger handle (97615267)
+* support the ability to search for posts and users by url (4cbb1f2a)
+* basic retry queue (50bc9a37)
+* on post edit, also target anyone who announced the post and their followers (807c3eac)
+* add id to reject activity (32d1adf6)
+* openapi spec for acp category federation page (fc3f3a78)
+* support rescinding user flags (61a595de)
+* slightly better title generation (b9d6aa46)
+* help modal for world page (cf291a51)
+* remove `/world/all` route, add intro header to `/world` (af324dae)
+* add id to Like (ab055a77)
+* handle 1b14 announce for remote content too (2ce3a116)
+* resolve Crate and Announce activities (f802564e)
+* utility functions to get local followers/counts given a remote actor uri, plumb cid into notes.assert via inbox.announce if a local cid is following the sending actor (452cb0a9)
+* send id back during accepts (b7629c6e)
+* handle Undo(Flag) (a1a7fb77)
+* send undo when rescinding/deleting a report (c1dfa8d2)
+* federate flag creation (2a2b855f)
+* bulk purge flags (7bacbf76)
+* rescind post flags (9ab1a2d1)
+* integrate post uploads into attachments for outgoing note mocks (fdbd30dc)
+* add id to profile updates (4d07ca4c)
+* noremalize actor property in middleware (18ba2e38)
+* save remote post url into hash for use (525b7c2c)
+* note attachments via link preview plugin (6fc6cc33)
+* add ids for undoing follows (3cc09d20)
+* send back follow id in Accept (66b0d81c)
+* add id to follows and verify accepts (72dbcfe3)
+* resolve objects from ids in middleware (102c174e)
+* filter out topics in cid -1 from tagged topics page, closes #12489 (d437d969)
+* sign public key requests (fcd5447c)
+* populate and send link tag/header respectively for activitypub-enabled content (4e0d7dd3)
+* basic AP Flag support (d9eba6d2)
+* send unique identifiers for note activities (9fc194e3)
+* upgrade script to re-assert all known actors to save URL into hash, and bump mentions (943cef6d)
+* sorting an filtering in /world (d1fa6a59)
+* make the /api/world data more category-like (e266b447)
+* add more properties from /category to /world (3c6966fb)
+* follow redirects in API (e0138cbe)
+* add checks to only continue with topic assertion if there is a relation to existing content, #12442 (55e947a0)
+* add assertion lock on activitypub.notes.assert (2688b6bb)
+* have category actor send Announce(Note) on remote replies to topics in a cid (04c743eb)
+* have category actor send Announce(Note) activity on posts from that cid (7df5cabb)
+* ability to update category handles (9dc20d0c)
+* category handles, #12434 (3cc99a17)
+* rename 'world' category to 'uncategorized' (9a5d4ffb)
+* plumb pid into return data from posts.loadPostTools, add link to view original post, for remote content (17f62f24)
+* add TTL cache for Actors.assert (d75894eb)
+* log all post edits to the event log, return eid when logging events, plumb eid into Update(Note) to federate out as a unique id (83392f3c)
+* if Update(Note) is received for a post that does not already exist, assert it (0bfdbb6a)
+* return count of new notes in assertTopic (519e025e)
+* add /world and /world/all to available nav items (f31d8c2e)
+* mentions support (e4c1ca1e)
+* allow user.search to handle remote handles, beginning of mentions support (1b64fdb5)
+* integrate notifications for remote likes, follows, and announces. (c707a32a)
+* federate tags out on new post (if new topic) (e1c43112)
+* restrict loopback calls (77a3efb4)
+* fine-grained privileges integration for fediverse users and world pseudo-category (1bd8f9a1)
+* temporarily deny handling non-public notes (eaba2aa3)
+* shared inbox (49c69a0f)
+* security, cross-check key ownership against received actor (a94341f4)
+* attachments support (e5b6ee97)
+* save tids to individual user inboxes based on recipient list, new /world/all route (89128634)
+* save actor follower URL backreference and sorted set backreference (da085b0e)
+* infinite scrolling for /world (874b24cb)
+* record remote Announce(Note) (6508287d)
+* handle Announce(Note) when Note is a piece of remote content (94dcd29e)
+* Announce(Note) and Undo(Announce) (415b4fe1)
+* exposed method to find topic events based on a subset of saved info, returns topic event ids (b9821c52)
+* topic and category S2S get responses (a461e5dd)
+* send proper content-type on AP S2S responses (d18e65c4)
+* category actors, stub outbox (88733a51)
+* returning following and follower collections upon request (ae042ce3)
+* Like(Note) and Undo(Like); federating likes (607c4623)
+* origin checking on received Update activities (6930973d)
+* Update(Note) (0e59f312)
+* Update(Person) (6e87cf57)
+* activitypub response to note retrieval via pid (6b517252)
+* added mocks.actor and Update(Person) activity on profile update (8453b83e)
+* Create(Note) on new topic or reply (0e016c6e)
+* proper webfinger response for instance actor (da0211b1)
+* application actor + public key for uid 0 signs, moved homepage route to after core routes are generated (9885f94a)
+* native parsing of title for topics (981b4f14)
+* beginnings of the /world route (04423232)
+* handle Update(note) (ac672f08)
+* handle Create(note) (f7477536)
+* flesh out more topic info, fix navigator (7e89eadb)
+* some additional work to properly save and retrieve remote topic data (4bd7a574)
+* ability to browse to any ActivityPub note and have the entire topic chain render (485cf200)
+* add activitypub request cache (326bb995)
+* assertNotes method (ab40ba61)
+* ability to load remote post data in a topic (3ce84b39)
+* plumb uid into .addParentPosts() so .assertNotes() can be properly called (0d478b2c)
+* stub lib for retrieving and mocking posts (f1e5e5a0)
+* send name property in getActor response (5e1e8099)
+* ability to browse follower/following lists of remote accounts (2a77ae55)
+* expose following/follower counts in actor response (7fd15d66)
+* show remote followers/following in user profile pages (739b0548)
+* update mockProfile to accept actor uris as well as actor objects (672c7014)
+* accept and undo support (4c1b2b3f)
+* update activitypub helper resolveLocalUid to accept both webfinger name and full URL as input (1f79f542)
+* follow/unfollow logic and receipt (c02271c7)
+* actor cache, method to resolve inboxes, stub code for sending requests. Now base64 encoding digest as expected by Mastodon (cdc4275f)
+* http signatures support, .sign() and .verify() AP helper methods (e7184eb8)
+* add webfinger ttl cache (4f5f025d)
+* add .has() call to cache/ttl (57895b72)
+* ability to view federated profiles via url manipulation (a05b674e)
+* followers and following endpoints (7e1dac39)
+* inbox and outbox routes, stub controllers (81b6260f)
+* global switch for disabling federation, + test (099124c4)
+* activitypub actor endpoint for user accounts (2dec357a)
+* **activitypub:** show world category in selectors (953231fc)
+
+##### Bug Fixes
+
+* ap webfinger test (3e33e1a3)
+* if user is logged in after registration don't go back to /login (23b37f62)
+* closes #13056, guard against undefined keyid,compare (6073a25b)
+* bug where newly create cids were not responding via webfinger, 404 on webfinger errors, not 400 (c17809e4)
+* #12990, local references via remote posts are not linkified properly, + tests for helper (98280d30)
+* #12984, fix pids numeric sorting, handle non-integers (4dc740a2)
+* add deprecation note re: as:audience (3cf3f93a)
+* #13021, save details of follow request before sending the follow, avoid race condition (16616814)
+* handle ap send errors with object body (450322d1)
+* thumbs.get to handle null case from mime.getType (50b510e3)
+* post upload sync duplication bug (cfeb49dd)
+* language fallbacks for activitypub-related strings (37a4fd7c)
+* add sourceContent prop to posts API; fix other tests (e1db9642)
+* add sourceContent prop to posts API (8ebe6de1)
+* add missing file for openapi tests (e6b20ed3)
+* activitypub tests (12fb205b)
+* broken tests (9c78255e)
+* #13014, possible fix for peertube incompatibility: strip hash value from key IDs during check (0ad8ed9d)
+* #12996, invalid title generation when remote post content has markdown source (1d36ab6d)
+* #13017, probe redirection if url is identical to id (39705a17)
+* #13016, remote account deletion frontend UI bug (2005a02a)
+* add missing catch, closes #13012 (45021b5b)
+* check if url is undefined (fa81078a)
+* #12941, inherit audience from earlier posts in the chain so as to send a coherent value to Lemmy instances, re: lemmynet/lemmy#5278 (97384b2c)
+* add 10s timeout for AP message send (25d6ef43)
+* ignore subsequent shares of the same topic by that user (d734ce49)
+* #12972, allow bridgyfed accounts to pass isWebfinger regex validation (a7e6cfe8)
+* bump harmony (ee8ec61e)
+* fix double thumb due to post attachments (755b9855)
+* lemmy integration, handle `image` property as topic thumb (b15a684a)
+* wrap try..catch around topics.reply in note assertion to output errors (b551abce)
+* have options.update also trigger handle and search updates on actor assertion (050acb4f)
+* separate out removals vs. additions in actor assertion in order to hopefully resolve #12959 (546ffed2)
+* openapi schema for ap routes (c86b6f24)
+* get version directly from package.json (3340720e)
+* set linkValue for remote user fields (3d653cbb)
+* crash due to missing param when calling getCustomUserFields (e5fdf9f1)
+* set a user-agent when sending requests (64339e61)
+* persist `sourceContent` into post hash when ingesting remote posts, update markdown so that field is parsed instead of ignoring content (1839388b)
+* use fediverse pseudo-user for webfinger privilege checks (f32184b2)
+* regression on remote deletes, received object is not always a simple id (d7fe3558)
+* thrown exception from failed note assertion (830aab66)
+* one more (304fa554)
+* another fix re: 3780fdc6ff9fb23048266b43ceae86646fb795cc (69d5544a)
+* thrown exception from failed note assertion (f7a294a7)
+* additional fixes re: 3780fdc6ff9fb23048266b43ceae86646fb795cc (97861dd1)
+* regression on remote deletes, received object is not always a simple id (3780fdc6)
+* #12939 convert custom emoji in actor summary into images (78a9e86c)
+* translate custom field names and values when federating out (e6edcefd)
+* bump emoji-android version (552298f8)
+* bump harmony and re-tag (593a1933)
+* bump emoji to 6.0.1 (efa0cac3)
+* bump harmony (00b2dd49)
+* strip html from remote custom fields, linkify if url detected in now-plaintext field value (065f84b6)
+* handling of empty custom user fields from remote users (1bebb82b)
+* don't send custom fields in remote user actor object if no value is entered (09f00f8e)
+* hotfix for empty user fields (ce1efd39)
+* bump mentions (e5f804ff)
+* #12928, topic showing wrong queued posts in-topic when topic is remote (7b747c8f)
+* replace parseInt that was excluding remote pids from calculation (93bb73c1)
+* #12923, inability to start chat with remote users via profile (b6a2520f)
+* inability to directly post to a nodebb category from the fediverse (55ab85ac)
+* #12919, handle when buildTopicsSortedSet returns a non-array (e4e6b1d2)
+* #12912, strip custom emoji from remote content titles (7adc3140)
+* don't chop off colons when generating titles as they could interfere with emoji (f449fafc)
+* #12893, topic with pages returning OrderedCollectionPage instead of OrderedCollection. (d685b20e)
+* missing return (cf3555fa)
+* #12887, strip target attribute from remote posts' html (3eb0a0ed)
+* #12866 again, more tests (a59dae3f)
+* raise probe timeout to 2s (94e34907)
+* topic count not showing up on category page (dd363446)
+* #12882, view original post circles back to same topic (93844321)
+* #12883, activitypub probe timeout (f8729571)
+* errant mention detection via actors.note (22dbf15e)
+* #12880, refactored ap controller.list to use `buildTopicsSortedSet`, moved out poor man's intersect to internal method (05c8ee9f)
+* don't trust timestamps on received items (b1d779ca)
+* use `categories.getTopicIds` instead of duplicating existing logic to get world tids (7bf41138)
+* #12866, improve title generator, refactor tests (beb85604)
+* one more fix (eccad588)
+* debug return not restored back (0e982fcf)
+* #12865, crash on liking a chat message (fc3243d6)
+* possible fix to escaped emoji in titles (f5324501)
+* #12707 ensure actor matches context attributedTo (998273cd)
+* federate out an Add on post creation even if there are no category followers (15516862)
+* accidental sending of Set to ActivityPub.send (3030a720)
+* #12857 byebye cheerio (8492b5f4)
+* inputIndex check (cac4f8e7)
+* convert some more verbose logging to use ap logging helper (6208ab8d)
+* regression introduced by 903d03891941902ddac80b380552530e1853c306 (d451adaf)
+* lint (c34407d8)
+* errant parseInt in canEditDelete (0f1b1164)
+* guard against missing to/cc (1d5f490d)
+* object not array (873d033b)
+* backend logic fixes for #12853 (b472c589)
+* groups not showing up on new reply (1bf09907)
+* re-enable logging only for dev mode (a226ee9e)
+* defer postdata retrieval (9062691a)
+* `inReplyTo` incorrectly including system messages, #12834 (7ad7bc47)
+* remote debug log (e9a27db2)
+* error on replying to remote mids #12834 (adf33cfa)
+* proper urls in `to`, #12834 (94ac57ea)
+* simplify uid logic, explicitly mention all participants, even local users, #12834 (70fe8689)
+* adjust timestamp after message creation instead of passing timestamp in, #12834 (0346e92b)
+* limited visibility remote posts with greater scope than asserted roomId should add those users to the chat room, #12834 (22931be1)
+* empty mid on frontend for remote posts (8abfd951)
+* recent chats string generation to handle remote users #12834 (0a17a0b9)
+* inReplyTo bug, #12834 (fc1d064d)
+* remove sender from recipients, #12834 (8f7d0499)
+* private note `inReplyTo` url, #12834 (f3045309)
+* `inReplyTo` for private notes so that refer to the immediately previous message if not explicitly defined (f4a02d9c)
+* duplicate logic and double-parsing issue, #12834 (8a1abe68)
+* federate out a Create(Note) instead of just the note... doi... (74d5ced2)
+* chat room kicking of remote users, (un)read logic for remote users (there is none), sendNotification to only apply to local uids (52080ba2)
+* restrict the ability to make a remote user a chat room owner (b610b520)
+* display of remote users in chat room search (f5129017)
+* also ignore non-public notes on Update activity (2713d13c)
+* bump web-push (f57758b9)
+* logic tweak (15f60b24)
+* fall back to inReplyTo traversal on context resolution failure (903d0389)
+* tests (45a0b818)
+* null defense (3d25a079)
+* #12821, improvements to search bar and search logic (0b83e5b8)
+* lint (c265666c)
+* parse aboutme when mocking a user (c5e10c1a)
+* remove superfluous service-worker code (90cc7e61)
+* explicitly set `updated` property when federating notes out (6fe4d446)
+* buttons for general settings (5bc907a0)
+* bump mentions (e0c410cd)
+* actors.assert attempting to process things that aren't actors, #12809 (6b4b4b1a)
+* carry out mime-type guessing on incoming attachments (71ce3089)
+* re-use already parsed html in api.posts.edit's call to getPostSummaryByPids, delay federating out edit activity for 5s to give link preview a chance to resolve (b04a1105)
+* id on 1b12 announces (047d5992)
+* better handling for remote posts that do not contain content (3c55d102)
+* #12799 add externally linked images to `attachment` (1a0a2cd1)
+* remove includeUncontrolled as we are posting messages, and that only works with windows you control lol (028b6d74)
+* add logic to automatically take over clients from old service workers (1fbf9114)
+* closes #12787, filter null topics (c2600b12)
+* remove use of jquery $(this) in ajaxify (176f4d0d)
+* crash when AP S2S call made to retrieve a remote user account (not allowed); now returning 404 (d42d3b1c)
+* prevent crash if items is undefined (a80e3141)
+* regression that caused replies to not get federated (652d6c6e)
+* #12760, add proper security context for application actor (045e16d3)
+* on topic move out of cid -1, also federate to the public address (909437c3)
+* bump harmony (6ed32f67)
+* type casting in user block logic (0f63f67b)
+* restrict announce activity to topic moving OUT of cid -1 (f3eb6d50)
+* #12751, topics:recent zset not updated when tid moved in/out of cid -1 (76551c71)
+* bump mentions (e6d8e059)
+* bump composer (22952c54)
+* bump composer (e2879563)
+* #12732 editing of remote post content (25bf97ae)
+* #12733, html present in generated title for remote topics (34747122)
+* #12729, replies to existing topics from Pixelfed not asserting properly due to incorrect `toPid` (f481cde1)
+* move topic reply call in notes.assert to its own line (95e6d2b4)
+* #12510, blocking of a single remote user causes content from all remote users to be blocked (53aee401)
+* serve category actor image instead of nothing, serve brand logo in icon (cbe0a0ad)
+* lint (d33fb92d)
+* have note federation call .parsePost instead of firing plugin hook (93536386)
+* always send replies uri instead of null if no replies exist, @trwnh (ff08fbb7)
+* send `null` instead of empty array in `replies` property if mocked note has no replies (9bd6896d)
+* bug that caused remote replies to other remote content to not always assert (2ced3502)
+* bugs in user searching causing remote lookups to fail (1f896fb6)
+* `audience` property in topic actor response (9a54f6bc)
+* updating of post counts for remote users (3e494dc7)
+* add privilege check to user follows (399d4103)
+* accidental passing of string instead of constant (7bf349b6)
+* lint (fc5a829c)
+* update upgrade script date (b9f37c5c)
+* include follower sets for reassertion (be393d57)
+* missing await (5c9ac5d3)
+* null check for note attachments for thumbs view (2aa04837)
+* incorrect parsing of context items during note assertion, logic error with slicing (60408f23)
+* logging in topic actor logic (bc00835c)
+* issue with topic actors not returning proper json (609035b5)
+* off by one error @barisusakli (cfbaf145)
+* map to actual mainPid value (7bdf3769)
+* skip topic retrieval when cid is -1, as it is done again later (92191995)
+* flawed logic in generating topic context collection (31c7226e)
+* rename announcers to shares (3c0d7616)
+* catch thrown errors in src/api/activitypub (fdc0d670)
+* federating category mentions (00a26679)
+* send html in category description (f605e188)
+* Update activity handling for non-Person actors (5e343a83)
+* remove await from category update federation call (bacbfba9)
+* issue where incrementing user hash fields didn't use the right key name for remote announce @barisusakli (e84cfd8c)
+* lint (b0eec67d)
+* send back empty array if no direct replies, bug with reply generation (af6ae6ee)
+* accidental passing-in of an array into getUserField, breaks in pgsql? (8e1fccf0)
+* hardcoded tid in topic thumbs test (78a6c60c)
+* tighten up logic in checkToPid internal method (f629b20f)
+* partial revert to fix url_parsed not being available at top of file @barisusakli (8ecbb5cc)
+* removal of topics from applicable user inboxes when synced (46341673)
+* tweak logic for topic counters sorted sets, #12642 (0d549f1d)
+* #12667; handle cases where received id is not a URL (d92efb8a)
+* #12673 fullname not defined in some remote actors (f662a606)
+* only send Update(Actor) to followers, #12674 (26946c7f)
+* missing sorted set member removal on category unfollow (a748068c)
+* add timestamp to follow activity to make it unique (eab231ee)
+* additional logging for activities with no context property (cb5e5b4b)
+* update handling of Announce(Create(Note)) to also handle non-note types (600b1a86)
+* push instead of unshift, now that order is reversed (cc0bbcb7)
+* wrong property name for OrderedCollection items (a2fb939b)
+* improper sourceContent in mocks (615aaa01)
+* #12662, add original activity actor to Announced activity's cc (d6f44d8e)
+* remove duplicate 1b12 announce in notes.assert (already handled in inbox) (4dbb73a4)
+* #12652, incorrect user, post, topic counters with AP enabled (fe70a2b8)
+* incorrect activity id sent out on 1b12 announce (ef97a784)
+* #12654, incorrect location of `sharedInbox` property (b66d998d)
+* regression that caused new notes to have undefined cid and fail privilege check (a371c9fc)
+* move call to retrieve cid followers out of loop (89dd2fb0)
+* do not retrieve remote outbox count when asserting actor (16f8f536)
+* double sanitization (d9ac7f49)
+* dont load cid=-1 in tag filter dropdown (7d679db2)
+* change setImmediate to a 5s timeout to give plugins (or anything waiting for the return value of the API call) a chance to finish execution (7fada44b)
+* openapi spec for v3 posts get (4b86b378)
+* wrap ap note creation in setImmediate to let internal hooks have a chance to wrap up first (a3c6c872)
+* improper sanitization and parsing in mocks.note (59818031)
+* remove parseInt on users controller (5a2fa52c)
+* send additional @context entry for `publicKey` support, fixes #12604 (4eb998d5)
+* null case handling (e6e6c2a2)
+* category follow schema test (4b8a9e58)
+* getCidByPid call returning improper values because a remote url to a local post was passed in (4030c09e)
+* 1b12 conformance for inbox.create as well (c8bc6e55)
+* re-add sending of Announce(Note) for microblog support, #12434 (89d2363d)
+* FEP 1b12 conformance, federate Announce(Create(Note)) instead of Announce(Note), #12434 (be95b5b1)
+* missing openapi schema change (e9a0d495)
+* eliminate infinite loop in actors.assert via user.getUsersFields (18e58318)
+* minor adjustment in logic to work around relation logic (1219d7d3)
+* introduce artificial 5s delay for 1b12 announces (101062cb)
+* move logic to move topic on note assertion earlier in the flow so it actually runs (acd1630b)
+* post count (badb7e2c)
+* skip follower count check if cid follower is found (f29214e0)
+* don't crash process on error in cronjobs (89465ec6)
+* handle missing fullname in actor removal logic (ae3fa85f)
+* guard against infinite loop during topic purge batch call (6272d059)
+* unintentional parseInt during post purge (bcfac00b)
+* pid in api call (70625133)
+* missing await on topic purge (6ecc791d)
+* don't attempt user reset token cleaning if uid is not a number (8d790964)
+* set (f83a3672)
+* incorrect use of .map on a Set (c6f2155f)
+* another crash (f8d9f644)
+* closes #12618, handle missing selector (35eb2d0d)
+* crash in mocks.profile (6f37825b)
+* bug that stopped remote users with dashes in their handle from being properly asserted (76290e37)
+* parse incoming HTML to remove useless classes too (47406d13)
+* update post cache clearing logic to call helper function (547fc17d)
+* have replies provide `name` when mocked (b6653d15)
+* lint (f93b237e)
+* remove .only (a0054400)
+* minor cleanup (129017f7)
+* Notes.delete to delete announcer zsets too (b5b89038)
+* rename api.activitypub.create.post to .note() (2d7ca48d)
+* canPurge logic fault (d40d0b06)
+* allow remote content to skip isReady check on topic creation/reply (5bfde4c4)
+* Topic.isOwner check to handle remote users (0a1ad87d)
+* special handling for privsTopics.canPurge for remote posts (b67a7c3c)
+* Posts.isMain cast pid to String instead (9fbd48b1)
+* special logic for purge privilege checks (9f44e99f)
+* unnecessary parseInt in post purge api method (eda97da1)
+* type error in attachment emptying method (336ea1ee)
+* tag notification if pid is not int (baada2fc)
+* encode most uses of pid to avoid more bugs like #12545 (c973a9ca)
+* allow quoting AP posts, fixes #12545 (43dfb60f)
+* Update(Note) federation should only apply to local content (6f9fa660)
+* attach announcers and their followers to cc, not to targets, only attach announcers to targets (51089a34)
+* bump harmony (2cd9088c)
+* inability to query local content via remote url (ac74d9c5)
+* ensure consistent return type from notes.assert (a7aeabc8)
+* remove unnecessary check and guard against unsupported URIs before fetching (af986758)
+* handle retry queue invalidation across a cluster (22b42f11)
+* use batch.processArray properly (729f0fca)
+* if an unknown post is navigated to by a logged-in user, automatically assert the post and add it to their inbox (4e7b12b9)
+* bump harmony (e341a5d8)
+* bump composer-default (4e006adb)
+* save followersUrl to remote user hashes (738d47c7)
+* notifications for tag followers not being sent if author is a remote user (8de2352e)
+* send topic title in context object (05cdb7d9)
+* partOf and type (109f4232)
+* if post count is less than posts per page, don't paginate in ordered collection (1a21c8ad)
+* send id for category announces (0336e8f0)
+* post deletion of remote posts (5e203197)
+* update title generator to include the punctuation, and also take into account question marks and exclamation marks (6ac5a779)
+* remove unneeded `flagged` property in favour of flagId, use existing language key for rescind-report (449ffd66)
+* have category sync routes return full api response, openapi schema for that pair of routes (b7ad4317)
+* update signature parsing logic to handle values with equal signs in them, closes #12538 (596a5e4b)
+* unintentional object pollution by buildForSelectCategories (40b9dabd)
+* better logic for choosing webfinger lookups (ed84eed8)
+* don't look up webfinger when it's not necessary (dd71340a)
+* update hasRelation condition to be true if cid is passed in in options (6964b1fd)
+* handle requests to URI IDs correctly (1ecbf02a)
+* handle URI actor IDs (70001664)
+* percent-encode outgoing webfinger requests (3d1e2cde)
+* bump harmony (59021d8a)
+* icon:text and icon:bgColor for remote users (3721f819)
+* handle Announce(Create(Note)) (a9a7fd1e)
+* use system pseudo-user for topic move call (dce33446)
+* if the topic already existed in -1, move it to another category if one was passed in options (49a64dc7)
+* add back reverse lookup for notes assertion checking via cids (407dda78)
+* actors.assert should return false if webfinger cannot resolve to an id (b7ff7be2)
+* support reporting remote content in Flag (026449dc)
+* #12505, convert relative urls in links and images into absolute urls, uses same logic as for emails (7c4ae8eb)
+* #12502, improper decrement (6befff5e)
+* send userslug in preferredUsername (64258dac)
+* wrong variable name (50f31b23)
+* change default attachment type to Link, or Image if mediaType matches (bb4e418d)
+* save modified actor back to req.body (c3365908)
+* you scurvy cur! (52271cae)
+* handle (created) and (expires) in http signatures (4d23a837)
+* #12496, url in schema (f7833386)
+* handle remote userslugs with non-lowercase letters (f5ea470d)
+* send hs2019 as algo (to match cavage-12, handle incoming algorithm value (8d0876b8)
+* bump harmony (b8daa02f)
+* throw errors when local objects don't exist (959e1820)
+* #12493, send unescaped fullname through via AP if displayname is set/used (e0f542c9)
+* send only the id into actors.assert (465a46f2)
+* use a slightly better error code to indicate object resolution failure (c92b5e07)
+* assume object is full object and not just id everywhere (e0166ccc)
+* use resolved object in likes (962c6351)
+* reject accepts of invalid follows and return when already following (b6168202)
+* handle resolved objects in flag (41f77f8f)
+* additional verbose logging for signature verification (464dd806)
+* bump mentions (6b169e04)
+* default to showing alternate as link to the post object (86107535)
+* pid via index calculation (de83d6b0)
+* support ldjson with ActivityStreams profile in actor queries (c30c1288)
+* early return on invalid actor (2d1524ee)
+* use actor id in flags (e25f0621)
+* make sort work with world filters (cd8a91fe)
+* uppercase digest algorithm name for compatibility reasons (5c1c1d21)
+* better handle null return from notes.assert (cbfc8d25)
+* bump mentions (86caf237)
+* actor assertion logic to ignore loopback urls (f40df387)
+* lol (983153fb)
+* maybe last tweak (42bdffdc)
+* tweak upgrade script again (ae146024)
+* tweak upgrade script again (166e3e2f)
+* add timeout on activitypub.get, tweak upgrade script (442e98e4)
+* tests, save actor URL into userRemote hash (59709a3c)
+* show locally captured remote posts when browsing remote profiles (1084f21d)
+* have getCidsByPrivilege include cid -1 when set is categories:cid (e828e87e)
+* updateLastOnlineTime for remote uids (893788a2)
+* bump harmony (2cbc3913)
+* adjust world schema (a3dce463)
+* redirect to /api/world for API requests (495d5435)
+* lint (f078e1e2)
+* skip notes.assert checks for Announce(Note) if it's a remote object, do our own checks; #12442 (4fcd2bb2)
+* getSortedTopics; filter out topics in cid -1 unless explicitly asked for (dff5d1c6)
+* #12444 add uncategorized topics counted stats to separate sorted set (8dcdf8ef)
+* undefined object in notes.assert (1fb3c4fd)
+* typo (bab41d12)
+* restore userOrGroupExists, as alias to slugTaken (e0f6b707)
+* send handle as category actor's preferredUsername, #12434 (803975fd)
+* use CategoryObject in admins-mods schema def (aafdefa7)
+* only send activitypub+json links via webfinger if activitypub is global enabled (65bb8666)
+* bump harmony (9c03e6e9)
+* resolve interoperability issues with Misskey, et al. (003c6469)
+* bump harmony (da2a1e20)
+* issue where cid -1 appeared in all category searches (8f131b71)
+* bump harmony (2756aae7)
+* post urls to use prefix instead of linking out directly to origin server, exposed encodeURIComponent as a template helper for themes (2408ecd8)
+* regression that caused S2S calls to topics to return with a 404 (5a2d17df)
+* restore accidentally removed calls to updateLocalRecipients and saveAttachments (5f60f75f)
+* properly handle empty fields param (c76d4018)
+* circular object ref. (7af07151)
+* tweak maxTags handling (ccd9c7ed)
+* bump mentions (ff6cc90c)
+* send topic notif on reply (1a92239c)
+* typo (44a183dd)
+* double-OP issue when remote reply comes in to local mainPid (0a2482cf)
+* filter out system tags and prune extra tags beyond number allowed, when creating topic from remote data (7aa56c72)
+* resolve toPid to local pid if able (ebd750b4)
+* tweak user.search to better handle local usernames with colons in them (c346177b)
+* accidental saving of ephemeral _activitypub object into db, should plumb into hooks only (81b319f4)
+* handle actor assertion failure if mocked profile does not have a fullname (338c568c)
+* template helper (52c143aa)
+* tests (4b2495b5)
+* remove unused param in addParentPosts (01f7af92)
+* only dereference id if it doesn't exist locally — fewer calls (eb8ff75b)
+* specify param for api test for /world (b1491ca3)
+* AP S2S handling for /user/:userslug route (9cd6b496)
+* handle fetch failures on helpers.query (5768a437)
+* more duplicate detection in to/cc (ceab77e4)
+* markAsRead to handle remote topics (17c55922)
+* parse questions like a post (90e7d3a1)
+* properly build recipients... old logic was just plain wrong :shipit: (1e663239)
+* reallow topic:read privilege for fediverse group (97e5b0fd)
+* only serve local posts via S2S when queried (00101d9e)
+* note not federated out to mentioned users' inboxes (6423d514)
+* update styling of available nav items in ACP (6aece689)
+* remove unresolvable actors from parsing prior to mocking profile (39da3ab6)
+* send explicitly empty array for attachment prop in mocks.note (4a8b06e8)
+* remove some privs from fediverse in world category (6999bd68)
+* inability to retrieve previously-unknown remote users via url manipulation (28f38b26)
+* tags received via AP should only be of type Hashtag (as mentions are also in tag prop (81b81e54)
+* data schema of reject activities (beaedc86)
+* fallbacks for if preferredUsername is not set (9f8c706f)
+* pass proper uid to privilege check in AP note federation (95427c4a)
+* remove console logging (4c2cbb5b)
+* move fallback 0 return in parseIntFields to other side of ternary conditional (5b74f6da)
+* remove intFields hack and update db.parseIntFields to only parseInt if field value is a number (f368a1a8)
+* truthy check in notes.assert (6671b511)
+* remote user avatars in notifications (aef1215f)
+* bump mentions (ae09aa20)
+* properly handle if mainPid is not a number (1ca9994f)
+* mainPid detection in unprocessed ids in assertTopic (b529610b)
+* redir on bad world filter (0cf6af9b)
+* serve fallback images on category actor (8cb984d4)
+* bump markdown (44452a3b)
+* missing invocation of generatePostUrl in generateRepliedTo helper (a08b2efb)
+* unable to process Update(Person) (96a3a746)
+* crash in resolveLocalId if Number is passed in (d51f5e59)
+* missing await, and handle local posts with no toPid (i.e. reply to OP) (0b6b86d1)
+* don't overwrite title if present, on assertTopic (a3368a69)
+* bump markdown (b1894276)
+* copy fixes, rename upgrade script, disable federation on upgrades (281e9d6e)
+* update ap-related deps to prerelease versions (10abb82e)
+* defer federation of new topics when topic is scheduled, tie activitypub api module to global enable toggle (5f85e700)
+* lint (563db78f)
+* put postcount retrieval behind try..catch so errors are handled appropriately (28370b10)
+* side-effects from adding toPid to post intFields (now removed) (b0115951)
+* revert introduction of toPid into post intFields, manually cast toPid as int in getPostSummaryByPids if present and numeric (3a870360)
+* check origin only if object is a string (92a8951b)
+* send string to validator (893dd523)
+* regression re: attachment handling (53d1c10e)
+* parseIntFields for tids (31fd135f)
+* handle undo(Announce) of remote notes (cfbbf4ca)
+* assert actors on note assertion, resolve crash if announcing something that's already been announced (6a7f8f14)
+* don't crash when no attachment, oops (0edaf17c)
+* sanitize post remote post content regardless (8b0ccc80)
+* wrong id parsed in announce (068c4fa9)
+* accidental overwrite of hoisted internal variable (56cfae07)
+* include mainPid in topic counts calculation (5c04e805)
+* guests visiting /world should see all remote topics (19d017b9)
+* timestamp calculation (6a11c89b)
+* better handling of missing of invalid to, cc, timestamp values (76d5feb7)
+* remote announces not showing up in local inboxes (814c4794)
+* handle inaccessible boosts (9439987e)
+* remove invalid/inaccessible object from parent traversal chain on get error (672a907d)
+* handle invalid score (609a9a37)
+* mainPid accidental int (22da3a6a)
+* getParentChain error handling (69f1ace3)
+* take mainPid into account in syncUserInboxes (d13980c8)
+* typo (de71b733)
+* stringify error body in ap.send (401b4c5f)
+* activitypub.get failure handling (12968b62)
+* only log warning on ap.send failure (ce4b5679)
+* rejig some tertiary conditionals, fix broken inReplyTo when toPid is not defined and mainPid is a remote post (5fee4e33)
+* resolveLocalId to return null values instead of throwing for no resolution (11dba85d)
+* don't crash on activitypub.send non-2xx, better logging for successful sends (ac56289f)
+* replies to remote content overriding mainPid in topic (2b1a3477)
+* assertTopic incorrectly creating new id if passed-in id did not match the actual object's id (f1b8f3fe)
+* urls in posts and announces (4fb6574c)
+* remove now unused world/:tid route and assoc. controller (a61e7fe7)
+* cast cids passed in to getCategoriesFields as ints (aafdebd2)
+* logic error (80377599)
+* logic derp (9795abbf)
+* new language source file for activitypub text (21a2876e)
+* getUserInfo internal method in topic events to not filter out uids because getUsersFields already does it (f7259ccb)
+* category following and acceptance logic (25f0d484)
+* properly assert resources in AP router (d2f14c36)
+* update preferredUsername in category actor to match webfinger representation (d213ce79)
+* follower calls to return empty item list unless a page is explicitly passed in (94361721)
+* move all actor object urls to immutable variants (86a607ce)
+* send proper @context value for posts (was missing) (457bfe16)
+* remote follows, yet again (fef18824)
+* a bunch of broken things, added test for Create(Note) (a3a0edb7)
+* error handling for actor.assert (fa1c5490)
+* missing break statement (2c834263)
+* reject spiders on remote profile GETs (a355c05d)
+* send back correct actor id on webfinger calls (25434d2a)
+* parseInt on timestamp from post (ddf17ee5)
+* /uid/:uid route to return actor (0b3ca8e3)
+* the id of an actor should be its immutable uri (/uid/:uid) and not userslug (e07c3131)
+* unused require, tests (3c24cfb4)
+* send full as:Image object for icon and image in mocked actor object (0af97dd4)
+* clear post cache on Update(Note) (f51bbe91)
+* webfinger loopback (1ee03f2b)
+* revert home page routing change and moved instance actor endpoint to (e00a03bb)
+* restore avatars in topic list (3bdaa8a8)
+* send preferredUsername in application actor response (f8cfe64c)
+* note assertion on Create(Note) and Update(Note) to use instance key instead of uid 1's user key (4cc7ee65)
+* add workaround for nodejs/undici#1305 required to remove sec-fetch-mode header (2cb37088)
+* response, not res (9e58b04c)
+* automatically reject unsigned POSTs to inbox (a3e1a666)
+* handle case where pubKey cannot be found (33f3da8a)
+* user data in /world (518169fe)
+* bookmark in topic data is nullable now (970a5a6e)
+* saving teaserPid, timestamp, lastposttime in topic, fixed post index issue in loading topics (60bc27ec)
+* preserve cid if set (e038eb05)
+* incorrect author uid saved in topic (75654852)
+* infinite scroll for posts (8cd3ff1a)
+* reply expansion (5ac02765)
+* issues related to adding new reply chains to an existing topic, resolveId method in notes module (2981f663)
+* simplify increasePostCount logic by combining methods (81d81098)
+* have mocks.posts return same number of items as received (d992239d)
+* show full names for remote users (d1cdb8f8)
+* improper params sent to get and getActor (9221506b)
+* restore hostname prop in getActor method (ec3c6b67)
+* ActivityPub.get now throws on failure, handle in getActor (7ec75f58)
+* send in mocked profile data in follow routes as well (942a9b7e)
+* tests (c66b1867)
+* isUri helper so that it passes ci tests (27e256d2)
+* frontend follow logic, as uid is no longer webfinger slug (fcca9259)
+* use simpler getSortedSetRevRange instead of unnecessary zunion call (283e460a)
+* accept and undo logic saving improper id into database, updated follow logic so remote follow is not added to collection until an accept is received (759d69e0)
+* relax activity-failed condition (3339baac)
+* additional refactors and updates to follow/unfollow logic (6a54e009)
+* bug where body wasn't properly sent on ap-style content-types (ac344011)
+* send actor uris in follow instead of webfinger ids (543daee8)
+* some wip code regarding handling a follow activity, remove unfollow activity as that does not exist (f3b0794d)
+* accidental double-hash in sign/verify (0eadad84)
+* incorrect logic (71e3d26b)
+* update proceedOnActivityPub middleware to handle how Mastodon doesn't send the 'Accepts' header (dd480aa4)
+* another bad call to request lib (88527884)
+* broken call to request lib, tests (8d796170)
+* update isJSON test in request lib (510763af)
+* handle null actor uri in helpers.query (a21110fd)
+* unused require (7f46f07c)
+* store remote followed users count separately from local (e794f1d2)
+* icon text and bgColor in remote profiles (4324f09c)
+* add basic sanity-checking to middleware.validateActivity (99cc60c8)
+* incorrect host/hostname usage in well-known test (bcee1c8d)
+* save remote follower count separately from local follower count (4218ecc4)
+* missing req.body when parsing ActivityPub requests (e6753ce5)
+* bugs, more prep to start making calls to self (5d95765e)
+* moved .well-known assets to separate router file, added basic webfinger implementation (51d8f3b1)
+* **deps:**
+ * update dependency ace-builds to v1.37.5 (#13058) (76a14de3)
+ * update dependency fs-extra to v11.3.0 (#13055) (9a401b5b)
+ * update dependency postcss to v8.5.1 (#13050) (3ba1d264)
+ * update dependency nodebb-plugin-web-push to v0.7.2 (#13049) (e9a4c42b)
+ * update dependency nodebb-plugin-2factor to v7.5.8 (#13048) (3827f438)
+ * update dependency sass to v1.83.4 (#13046) (8e62800b)
+ * update dependency postcss to v8.5.0 (#13044) (c4c89116)
+ * update dependency cron to v3.5.0 (#13042) (5e5d920b)
+ * pin dependencies (#12987) (430d1479)
+ * update dependency satori to ^0.12.0 (#12995) (05f7b58c)
+ * update dependency tough-cookie to v5.1.0 (#13039) (34b0cf6b)
+ * update fontsource monorepo to v5.1.1 (#13029) (b1e87aa9)
+ * update dependency fetch-cookie to v3.1.0 (#13006) (df69b399)
+ * update dependency ace-builds to v1.37.4 (#12988) (3a33cd5b)
+ * update dependency esbuild to v0.24.2 (#12989) (701780fe)
+ * update dependency sanitize-html to v2.14.0 (#12994) (bfc962b9)
+ * update dependency ioredis to v5.4.2 (#12993) (7943fcde)
+ * update dependency cron to v3.4.0 (#13026) (de571d24)
+ * update dependency sass to v1.83.1 (#13028) (438f4e0a)
+ * update dependency nodebb-widget-essentials to v7.0.32 (#13027) (de076a21)
+ * #12683 bump emoji plugin to v6 (e8fda4c0)
+ * swap ntfy for web-push plugin (aa060d31)
+ * persona v4 support (83993cad)
+ * bump markdown (daed7413)
+
+##### Other Changes
+
+* fix paranthesis (8fd8079a)
+* remove unused utils (7e450e1d)
+* remove unused function (26765fe9)
+* remove unused (530241e0)
+* comment out actor assertion call in Users.getUsersFields (691f6917)
+* fix some but not all tests (76453650)
+* fix privileges in test runner (aadac705)
+* unused requires, linting fixes (3e02efcd)
+* additional logging (08f8babd)
+* fix eslint errors (47b3ffb9)
+
+##### Performance Improvements
+
+* ~18x speedup of /world route (f6f01ba3)
+* get rid of exists call, load all attachments in one call (9b8c834e)
+* use batch in resolveInboxes (644bcec5)
+* get rid of getPidByIndex, use postAtIndex (ad22b54e)
+* '-inf' faster (c95075e1)
+* move attachments to post hash (291bf7db)
+
+##### Refactors
+
+* use helpers.log (40257663)
+* add `thumbsOnly` option to thumbs retrieval method so that embeds/attachments don't show up in composer thumbnail modal (51fd65ab)
+* split (and remove) activitypub.json file and move strings to more appropriate locations (e4e10636)
+* topic thumb logic so that `isDraft` is based on topic existence, and not whether it is a UUID, as remote topics are also UUIDs. (3439fdb6)
+* post object schema to its own reference object, added sourceContent as optional value in post data (3073abd9)
+* prolly dont need exists check (a42c9a6b)
+* buildTopicsSortedSet (c1093c92)
+* expose buildRecipients as a main activitypub lib method, call buildReceipients in ap controller actors for notes (5e47b194)
+* followers url filtering logic, #12834 (ca683c6d)
+* check HTTP signatures on all activitypub requests (8ef0df57)
+* simplified ajaxify.check and likely made it equally more confusing (cf6c4c52)
+* split out logic to determine ajaxification into exported method (fc4f6a4c)
+* standardization; onNewPost internal method to return a superset of post summary (9357e718)
+* follow/accept/undo logic to pass the same timestamp throughout the follow's lifetime (e015339c)
+* store local follow backreferences for remote users (both followers and following), update actor pruning to take local follow counts into consideration, fixes #12701 (39f92eac)
+* collection logic out to an activitypub helper (352857cf)
+* context item retrieval logic (20aee8e9)
+* announces (c021e7e8)
+* single db call (c231ab78)
+* actor pruning logic (6227ab90)
+* catch errors (f76a5863)
+* add method from mentions into core (3eca9785)
+* dont need exist check, if post doesnt exist getPostData returns null (b2d03da9)
+* User.getUidsByUserslugs, so it works with multiple slugs (eb6fe339)
+* suggest topics, use strings for tids (3488a4bf)
+* unused winston (869df3c2)
+* change to info (d1625d5f)
+* remove verbose logs, (2ae58570)
+* comment out verbose logs (ba2d1841)
+* get rid of noop (eaf43541)
+* single cache.del call (9868a728)
+* #12553, buildRecipients so that it is separate from addressing in mocks.js (1fa93465)
+* use batch.processArray for sending AP messages (ea6e15bf)
+* context actor to serve an as:OrderedCollection instead of as:Page, and added context property (as per FEP-7888) to refer to it, changed audience to point to category (4b29a1b9)
+* post announce logic to save to separate zset instead of to topic events, closes #12536 (119800d9)
+* remove unnecessary flag routes added in 9ab1a2d (53b352d0)
+* split activitypub tests to subfolder files (94eafe1d)
+* use URLSearchParams instead of multiple encodeURIComponent (844d1402)
+* stub routes for category synchronization, refactor remote follow logic to allow categories to conduct follows as well (59a9dd84)
+* use a helper to resolve actor URI (b921f8d1)
+* use getSortedSetUnion in syncUserInboxes instead (6c1a0fb1)
+* use one internal rejection method (ac765f1e)
+* use topics.post, topics.reply, and posts.edit in Create(Note), Create(Note), and Update(Note), respectively (f7c8967e)
+* use topics.create internal method instead of directly setting topic hash, handle incoming tags for OP (f5a61079)
+* assertTopic to only call setObject when it is a new topic (bdcd862c)
+* resolveId method, add hostname verification (ed4ccbfc)
+* use existing sets for topics (instead of topicRemote, etc.) (ec2b375a)
+* activitypub sending to handle signed requests from categories (35819cc9)
+* replace JIT actor retrieval with actor assertion and storage logic (ef8cd34b)
+* added mocks.note in preparation for AP note retrieval logic, inReplyTo is always populated now, unless new topic (5de4f084)
+* simplify remote (un)follow controller (c9feb925)
+* guard dispatcher definition so non-Node runtimes won't have issues (2ce14f50)
+* generate a topic id when asserting a new topic (2ff70fdd)
+* move activitypub-related middlewares to their own file (538776f9)
+* simplify mocks.post as it only needs minimal data for saving into db (2bd9e984)
+* move mockProfile and mockPost to separate mocks.js (06e15834)
+* update ActivityPub.get and all methods calling it to take a uid so that requests can be signed (a1c8c3a0)
+* validator check to helper method (2e330d8b)
+* move profile mocking logic to discrete method in main activitypub lib (8d4fd9c0)
+* update ap libs to use core request lib (5c881d3f)
+* update activitypub.getActor to accept either url or webfinger id (68d5e4a8)
+* minor restructure to move logic out of main controller file to src/api (c803b212)
+* acp tpl + config option (ab3ff320)
+
+##### Code Style Changes
+
+* remove unused variable (9f94653b)
+
+##### Tests
+
+* fix spec (b80f0dab)
+* missing ; (866588f7)
+* fix guest handles in onNewPost (81f7371a)
+* have actor assertion always use cache for tests (ad05f06b)
+* fix broken test in category follows (4949d6c4)
+* add attachments (6042f4a7)
+* refactor tests to support additional Note tests (0c0f01b5)
+* use encoded parameters in webfinger tests (8fd4ae2d)
+* fix well-known error code repsonse (175521ba)
+* refactor AP tests (42a09241)
+* fix tests (e138b915)
+* fix tests to reflect new immutable IDs, and added new tests for resource retrieval (42bb3c33)
+* fix error copy (91a509c4)
+* allow http proto on ci (24c1dfac)
+* fixed improper signed_string reconstruction in `.verify()` (cc0d1886)
+* fix webfinger test (9dfa1b72)
+* added passing test cases for .sign() and .verify() (a10df987)
+* updated activitypub test suite (1c8e13bb)
+* added test cases for activitypub integration, WIP (4bd8d28a)
+
+#### v3.12.4 (2025-01-20)
+
+##### Chores
+
+* up harmony (cfb22da1)
+* up harmony (d0715ca4)
+* incrementing version number - v3.12.3 (abb2417e)
+* update changelog for v3.12.3 (0cc94bbe)
+* incrementing version number - v3.12.2 (a1269b39)
+* incrementing version number - v3.12.1 (944c4e66)
+* incrementing version number - v3.12.0 (052c195e)
+* incrementing version number - v3.11.1 (0c0dd480)
+* incrementing version number - v3.11.0 (acf27e85)
+* incrementing version number - v3.10.3 (57d54224)
+* incrementing version number - v3.10.2 (2f15f464)
+* incrementing version number - v3.10.1 (cca3a644)
+* incrementing version number - v3.10.0 (b60a9b4e)
+* incrementing version number - v3.9.1 (f120c91c)
+* incrementing version number - v3.9.0 (4880f32d)
+* incrementing version number - v3.8.4 (4833f9a6)
+* incrementing version number - v3.8.3 (97ce2c44)
+* incrementing version number - v3.8.2 (72d91251)
+* incrementing version number - v3.8.1 (527326f7)
+* incrementing version number - v3.8.0 (e228a6eb)
+* 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)
-* update changelog for v3.5.0 (5d7c10f1)
* incrementing version number - v3.4.3 (5c984250)
* incrementing version number - v3.4.2 (3f0dac38)
* incrementing version number - v3.4.1 (01e69574)
@@ -33,6 +4517,1865 @@
* incrementing version number - v3.0.1 (26f6ea49)
* incrementing version number - v3.0.0 (224e08cd)
+##### Bug Fixes
+
+* 404 request if payload invalid (de021bda)
+* add HEAD check to unsub route (205bf477)
+
+#### v3.12.3 (2025-01-15)
+
+##### Chores
+
+* up harmony (5120d117)
+* up 2factor (c6eaea30)
+* incrementing version number - v3.12.2 (a1269b39)
+* update changelog for v3.12.2 (98e5d1b5)
+* incrementing version number - v3.12.1 (944c4e66)
+* incrementing version number - v3.12.0 (052c195e)
+* incrementing version number - v3.11.1 (0c0dd480)
+* incrementing version number - v3.11.0 (acf27e85)
+* incrementing version number - v3.10.3 (57d54224)
+* incrementing version number - v3.10.2 (2f15f464)
+* incrementing version number - v3.10.1 (cca3a644)
+* incrementing version number - v3.10.0 (b60a9b4e)
+* incrementing version number - v3.9.1 (f120c91c)
+* incrementing version number - v3.9.0 (4880f32d)
+* incrementing version number - v3.8.4 (4833f9a6)
+* incrementing version number - v3.8.3 (97ce2c44)
+* incrementing version number - v3.8.2 (72d91251)
+* incrementing version number - v3.8.1 (527326f7)
+* incrementing version number - v3.8.0 (e228a6eb)
+* 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
+
+* closes #13051, catch errors from widget render (168e6b2c)
+* for attribute label (e89b7ec8)
+* don't confirm emails on HEAD request (45eabbf5)
+
+##### Performance Improvements
+
+* closes #13052, only call loadConfig once per page (539693a4)
+
+#### v3.12.2 (2025-01-08)
+
+##### Chores
+
+* remove log (2f5effda)
+* up markdown (0a135d88)
+* up deps (48944a86)
+* up composer-default (80ddc03a)
+* up harmony (5b2dfd74)
+* incrementing version number - v3.12.1 (944c4e66)
+* update changelog for v3.12.1 (22606767)
+* incrementing version number - v3.12.0 (052c195e)
+* incrementing version number - v3.11.1 (0c0dd480)
+* incrementing version number - v3.11.0 (acf27e85)
+* incrementing version number - v3.10.3 (57d54224)
+* incrementing version number - v3.10.2 (2f15f464)
+* incrementing version number - v3.10.1 (cca3a644)
+* incrementing version number - v3.10.0 (b60a9b4e)
+* incrementing version number - v3.9.1 (f120c91c)
+* incrementing version number - v3.9.0 (4880f32d)
+* incrementing version number - v3.8.4 (4833f9a6)
+* incrementing version number - v3.8.3 (97ce2c44)
+* incrementing version number - v3.8.2 (72d91251)
+* incrementing version number - v3.8.1 (527326f7)
+* incrementing version number - v3.8.0 (e228a6eb)
+* 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)
+
+##### New Features
+
+* add -y flag to upgrade, closes #13023 (4f682a31)
+* add missing default notification settings (d155da3c)
+* closes #13001, allow keyboard to change cover position (45c5351f)
+* use displayname for user image titles (52366101)
+
+##### Bug Fixes
+
+* closes #13036, if image isn't loaded yet width is 0 (d05c203b)
+* closes #13024, on register dont auto login with user doesn't have local:login privilege (238a3ed5)
+* closes #13022, don't do anything if notif setting isnt set to email (fcf50a3c)
+* closes #13019, use displayname in vote tooltip (dcc2342c)
+* overflow on dashboard/searches (1b13cce2)
+* #13011, catch errors (25655d5a)
+* truncate popular search terms, closes #13010 (2f72e32d)
+* #13007, replace $ with \uFF04, like . (c60cee59)
+* dont stripEXIF from gifs (f478adac)
+* closes #13008, catch errors in post redirect (77521494)
+* test on redis (a6f0eba5)
+* convert to str than filter (c69fa811)
+* closes #13002, make chats keyboard focusable (e71feeec)
+* js error when clicking a notification (d40762b7)
+* don't close search if children have focus, closes #13004 (1cb7bb6a)
+* #12991, switch to nodemailer address object (a489abc7)
+* make fork/move dropdowns go up (89b8de50)
+
+##### Other Changes
+
+* whitespace (27e945fd)
+* index.js (7bfca7ba)
+* //github.com/NodeBB/NodeBB/issues/13018 (68f73fd0)
+
+##### Refactors
+
+* silence deprecations in prod (d75b169c)
+* check if useragent exists firt (a0e66816)
+* get rid of RegExp (e4dd697a)
+* remove debug (646b9ea7)
+
+##### Tests
+
+* fix spec (23298060)
+* remove resizeImageWidth (25f1fa67)
+* editor tests (82538ca3)
+* missing service worker test (e845afc1)
+* add last one (54233dcd)
+* custom fields tests (ae2bd5ab)
+* fix controller tests (b129c6c0)
+* missing translator tests (0d3a8757)
+* fix relative path in tests (127e0e22)
+* add translateInPlace test (225c91ed)
+* subfolder in category link (407b0cc6)
+* add helper tests (95b42f83)
+* debounce/throttle (d5ae91a3)
+* add back disabled test since node 18 is minimum (8864e658)
+* fix user picture test (29804a10)
+* fix thumb test (fa24f1dd)
+
+#### v3.12.1 (2024-12-20)
+
+##### Chores
+
+* up harmony (18904bbb)
+* up persona (b4ec3a6a)
+* incrementing version number - v3.12.0 (052c195e)
+* update changelog for v3.12.0 (5395062d)
+* incrementing version number - v3.11.1 (0c0dd480)
+* incrementing version number - v3.11.0 (acf27e85)
+* incrementing version number - v3.10.3 (57d54224)
+* incrementing version number - v3.10.2 (2f15f464)
+* incrementing version number - v3.10.1 (cca3a644)
+* incrementing version number - v3.10.0 (b60a9b4e)
+* incrementing version number - v3.9.1 (f120c91c)
+* incrementing version number - v3.9.0 (4880f32d)
+* incrementing version number - v3.8.4 (4833f9a6)
+* incrementing version number - v3.8.3 (97ce2c44)
+* incrementing version number - v3.8.2 (72d91251)
+* incrementing version number - v3.8.1 (527326f7)
+* incrementing version number - v3.8.0 (e228a6eb)
+* 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
+
+* check install.values, it can be undefined (9bb8002a)
+
+#### v3.12.0 (2024-12-18)
+
+##### Chores
+
+* **deps:**
+ * update dependency @commitlint/cli to v19.6.1 (#12981) (f25312a8)
+ * update dependency sass-embedded to v1.83.0 (#12974) (c4399dd0)
+ * update dependency lint-staged to v15.2.11 (#12964) (607d1895)
+ * update dependency sass-embedded to v1.82.0 (#12951) (6e2b33b7)
+ * update dependency mocha to v11 (#12954) (55ad7af8)
+* up harmony (831422d0)
+* up peace, refactor widgets (0f5e1457)
+* up themes (a79426f9)
+* up harmony (5045a1ae)
+* up harmony (03b9df08)
+* remove lines re: incrementing version number, in changelog (cc6963f2)
+* up themes (e0c345b2)
+* up persona (2a085cdb)
+* incrementing version number - v3.11.1 (0c0dd480)
+* update changelog for v3.11.1 (fee57816)
+* up themes (e532dcb4)
+* up spam-be-gone (3a7e9733)
+* up peace (a72c067f)
+* up themes (a4a752bb)
+* up mentions (4db5a5b6)
+* incrementing version number - v3.11.0 (acf27e85)
+* incrementing version number - v3.10.3 (57d54224)
+* incrementing version number - v3.10.2 (2f15f464)
+* incrementing version number - v3.10.1 (cca3a644)
+* incrementing version number - v3.10.0 (b60a9b4e)
+* incrementing version number - v3.9.1 (f120c91c)
+* incrementing version number - v3.9.0 (4880f32d)
+* incrementing version number - v3.8.4 (4833f9a6)
+* incrementing version number - v3.8.3 (97ce2c44)
+* incrementing version number - v3.8.2 (72d91251)
+* incrementing version number - v3.8.1 (527326f7)
+* incrementing version number - v3.8.0 (e228a6eb)
+* 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)
+* **i18n:**
+ * fallback strings for new resources: nodebb.admin-extend-plugins (6b5b9a4e)
+ * fallback strings for new resources: nodebb.admin-extend-plugins (26a1a2f1)
+ * fallback strings for new resources: nodebb.admin-settings-uploads (0c665342)
+ * fallback strings for new resources: nodebb.admin-manage-user-custom-fields (1c33285a)
+
+##### New Features
+
+* add support for saas_plan (68198e8a)
+* add some missing canonical tags, closes #12961 (e6bdbb6b)
+* use displayname in chat teasers/userlist, in digest email (69a08c0f)
+* add "keep original image after resize" option (9a635870)
+* add visibility option to, closes #12942 (77382e3b)
+
+##### Bug Fixes
+
+* **deps:**
+ * update dependency ace-builds to v1.37.0 (#12983) (808e483e)
+ * update dependency @fortawesome/fontawesome-free to v6.7.2 (#12982) (69214d79)
+ * update dependency terser-webpack-plugin to v5.3.11 (#12973) (a054cbd7)
+ * update dependency sass to v1.83.0 (#12975) (7f020037)
+ * update dependency nodebb-theme-peace to v2.2.30 (#12970) (645bddb8)
+ * update dependency cron to v3.3.1 (#12969) (b8a0a502)
+ * update dependency jsesc to v3.1.0 (#12968) (3a8ae12c)
+ * update dependency cron to v3.3.0 (#12965) (0913c307)
+ * update dependency mongodb to v6.12.0 (#12966) (3d33c5cb)
+ * update dependency nodebb-theme-peace to v2.2.29 (#12967) (6b77441b)
+ * update dependency express to v4.21.2 (#12955) (55a07bcb)
+ * update dependency chart.js to v4.4.7 (#12950) (300ca704)
+ * update dependency sass to v1.82.0 (#12952) (3bd447be)
+ * update dependency webpack to v5.97.1 (#12953) (122d3841)
+ * update dependency connect-redis to v8.0.1 (#12944) (38d904b2)
+ * update dependency sortablejs to v1.15.6 (#12943) (694827cf)
+* closes #12980, properly reset all plugins with `./nodebb reset -a` (f0aa960c)
+* chat header line-height (8883eaf7)
+* make sure theme screenshot starts with themeDir (3b713afe)
+* closes #12963, change translation to general (04eb9e1a)
+* race condition that results in 2x localReset call the same process (c25fd40a)
+* closes #12962, fix js error for guests on /users (4568ec3e)
+* closes #12957, don't overflow thumbs modal if filename is too long (c8a38667)
+* escape about me on user flags (26026fb2)
+* issue where clicking on a topic thumb caused a page nav, fixes #12948 (5b60aee6)
+* users page QoL improvements (2e0a1751)
+
+##### Other Changes
+
+* missing semi (0495842f)
+* long line (c69765e3)
+* update connect-redis to 8 (8c5d7c4d)
+
+##### Refactors
+
+* closes #12979, show plugin id/version on semver error (abcb200f)
+* move to saas plugin (27867d77)
+* check if caches have the requested cache name (38520769)
+* add csrf protection to webinstall POST route (8f465afc)
+* explicit settings/appearance routes (bb0ff6d6)
+* only send required fields in query (76caa92c)
+* replace math.random with crypto (9d2af7e1)
+* remove "password" in comments (fe811537)
+
+##### Tests
+
+* fix spec (68f87ccf)
+* add missing field (456373c5)
+* add missing spec files (6eb28077)
+* remove routes that no longer exist (468d930a)
+* fix test (b05dc7f7)
+
+#### v3.11.1 (2024-12-09)
+
+##### Chores
+
+* **config:** migrate config renovate.json (#12960) (14f698f9)
+* up spam-be-gone (e5c8deb8)
+* update changelog for v3.11.0 (0333d263)
+
+##### Bug Fixes
+
+* escape about me on user flags (4e69bff7)
+
+#### v3.11.0 (2024-11-27)
+
+##### Chores
+
+* **i18n:**
+ * fallback strings for new resources: nodebb.admin-settings-reputation, nodebb.error (985e5e3d)
+ * fallback strings for new resources: nodebb.admin-manage-user-custom-fields, nodebb.error (174be398)
+ * fallback strings for new resources: nodebb.error (b676c220)
+ * fallback strings for new resources: nodebb.admin-manage-user-custom-fields (b89036cd)
+ * fallback strings for new resources: nodebb.admin-settings-uploads (e3ef858b)
+ * fallback strings for new resources: nodebb.admin-manage-users, nodebb.error (15e16704)
+ * fallback strings for new resources: nodebb.topic (9fd5ca27)
+ * fallback strings for new resources: nodebb.pages, nodebb.user (1c26048f)
+* migrate admin/settings/social.json into admin/settings/general.json (206613dd)
+* migrate admin/settings/languages.json into admin/settings/general.json (ab143b1d)
+* migrate admin/settings/homepage.json into admin/settings/general.json (a7678185)
+* combine admin/settings/guest.json language file into admin/settings/user.json (3f14373c)
+* up themes (388a156d)
+* up harmony (2324a5bf)
+* up harmony (03cea237)
+* up themes (2ec3d1af)
+* up themes (965ca636)
+* up persona (1a4a9d08)
+* up peace (acd42c23)
+* up peace (7179a280)
+* up peace (bcf8dee2)
+* up peace (524b2b76)
+* up themes (4ad082b4)
+* up peace (953ea609)
+* up widgets (6a71fd24)
+* up harmony (f13b7f8d)
+* up persona (6f89bf6b)
+* up persona (79c93c85)
+* up themes (d63a828d)
+* up themes (6aa8f1b6)
+* up peace (a4d8baf3)
+* up themes (24e9adf6)
+* up persona (baff68b4)
+* up peace (c4b50607)
+* up lavender (c32c63aa)
+* up lavender (66214bea)
+* update tx config (4ce387b9)
+* up themes (65f64eba)
+* up themes (280e7613)
+* up widgets (b13bd803)
+* update changelog for v3.10.3 (83965385)
+* up harmony (f6f1d906)
+* up harmony (9426fd1a)
+* **deps:**
+ * update commitlint monorepo to v19.6.0 (#12920) (151e0164)
+ * update postgres docker tag to v17.2 (#12931) (036f4564)
+ * update postgres docker tag to v17.1 (#12915) (0d0f9144)
+ * update dependency sass-embedded to v1.81.0 (#12914) (ff258028)
+ * update dependency sass-embedded to v1.80.6 (#12894) (37f877b3)
+ * update dependency sass-embedded to v1.80.5 (#12889) (383f332c)
+ * update dependency mocha to v10.8.2 (#12884) (d86bedf8)
+ * update coverallsapp/github-action action to v2.3.4 (#12867) (351bcdbf)
+ * update dependency sass-embedded to v1.80.4 (#12861) (be0c92ec)
+ * update dependency smtp-server to v3.13.6 (#12859) (a0804485)
+ * update coverallsapp/github-action action to v2.3.3 (#12854) (48b09f1d)
+ * update coverallsapp/github-action action to v2.3.2 (#12846) (c16192dc)
+ * update dependency sass-embedded to v1.79.5 (#12850) (6f227264)
+ * update dependency eslint-plugin-import to v2.31.0 (#12832) (cc2e0e9f)
+ * update redis docker tag to v7.4.1 (#12836) (e7cba341)
+ * update mongo docker tag to v8 (#12810) (2fd89558)
+ * update dependency sass-embedded to v1.79.4 (#12825) (24928b17)
+ * update postgres docker tag to v17 (#12829) (d7299f90)
+
+##### New Features
+
+* use displayname in chat system messages, closes #12937 (e6f78d25)
+* move website/location fields into custom user fields (669c9c50)
+* add pagination to groups page, api routes (49e0e1ab)
+* add date and multiselect custom fields (9cf85ced)
+* new language file for user custom fields (05fb8aa5)
+* closes #12902, allow adding users as post editors (bc00df3c)
+* added nn_NO, takk\! (b9eff72d)
+* add read topics route (757d7101)
+
+##### Bug Fixes
+
+* update acp template to use new lang keys (bc5b91aa)
+* spec, dont show registered-users, verified-users, unverified-users in manage groups (8605584f)
+* #12927, give more right padding on FF (5b3b003d)
+* dont show chat upload btn if maxFileSize is 0, #12926 (14125858)
+* dont allow core user fields to be used as custom fields (836e8458)
+* button to match category dropdown (5e9b7b44)
+* filter undefined posts/topics (db291ecd)
+* don't crash if post is undefined (d4770908)
+* spec (d5c9c0ba)
+* block search showing old matches (a9fc13dd)
+* missing template (008ad1e3)
+* naive checking to handle uploaded images whose filenames end with '-resized' (1268ed50)
+* update copy to reflect real default value of 2000px for `resizeImageWidthThreshold` (4614958b)
+* editor removal (977d80c1)
+* add warning txt file for nn-NO (23b3a64a)
+* incorrect folder syntax for nn_NO (396c7766)
+* use postData.topic.title instead of topicData.title (d24bc5c5)
+* another missing await (10a85e94)
+* **deps:**
+ * update dependency sortablejs to v1.15.4 (#12934) (2db5b815)
+ * update dependency nodebb-plugin-2factor to v7.5.7 (#12930) (f9c4815a)
+ * update dependency @fortawesome/fontawesome-free to v6.7.1 (#12929) (80b4d10b)
+ * update dependency mongodb to v6.11.0 (#12932) (c3b42c85)
+ * update dependency @fortawesome/fontawesome-free to v6.7.0 (#12921) (a3042479)
+ * update dependency ace-builds to v1.36.5 (#12913) (68637633)
+ * update dependency sass to v1.81.0 (#12916) (ee91e516)
+ * update dependency cron to v3.2.1 (#12911) (42791287)
+ * update dependency postcss to v8.4.49 (#12910) (85f55695)
+ * update dependency winston to v3.17.0 (#12906) (87c276dd)
+ * update dependency postcss to v8.4.48 (#12907) (aa57b248)
+ * update dependency nodebb-theme-peace to v2.2.8 (#12901) (8af37a7d)
+ * update dependency cron to v3.1.9 (#12899) (87ec8637)
+ * update dependency ace-builds to v1.36.4 (#12898) (3aa0fa61)
+ * update dependency winston to v3.16.0 (#12896) (a4f75ca1)
+ * update dependency compression to v1.7.5 (#12890) (f5439d95)
+ * update dependency webpack to v5.96.1 (#12895) (3d847a5a)
+ * update dependency sass to v1.80.6 (#12892) (c5dd8b67)
+ * update dependency jquery-ui to v1.14.1 (#12891) (3fb6587a)
+ * update dependency nodebb-plugin-composer-default to v10.2.42 (#12888) (2cb2ac3a)
+ * update dependency cron to v3.1.8 (#12881) (8ae2f503)
+ * update dependency chart.js to v4.4.6 (#12876) (89bd1a24)
+ * update dependency nodemailer to v6.9.16 (#12874) (51cb249e)
+ * update dependency pg-cursor to v2.12.1 (#12870) (e3203b66)
+ * update dependency pg to v8.13.1 (#12869) (b628013d)
+ * update socket.io packages to v4.8.1 (#12871) (cdd9caa7)
+ * update dependency nodebb-theme-harmony to v1.2.77 (#12868) (d30e1f91)
+ * update dependency mongodb to v6.10.0 (#12862) (6da24583)
+ * update dependency ace-builds to v1.36.3 (#12860) (8d8243c4)
+ * update dependency sass to v1.80.4 (#12855) (80034ae8)
+ * update socket.io packages to v4.8.0 (#12815) (4788e2a3)
+ * update dependency chart.js to v4.4.5 (#12852) (c504b49f)
+ * update dependency workerpool to v9.2.0 (#12851) (8dfb2237)
+ * update dependency sass to v1.79.5 (#12847) (ab859aec)
+ * update dependency cookie-parser to v1.4.7 (#12842) (526faf07)
+ * update dependency express to v4.21.1 (#12843) (0e7f11bd)
+ * update dependency express-session to v1.18.1 (#12844) (38c1072f)
+ * update dependency sanitize-html to v2.13.1 (#12839) (5159552d)
+ * update dependency winston to v3.15.0 (#12840) (29826cf2)
+ * update dependency webpack to v5.95.0 (#12828) (55faa8a2)
+ * update dependency sass to v1.79.4 (#12826) (376ac905)
+ * update dependency helmet to v7.2.0 (#12827) (5acf0398)
+ * update dependency nodebb-theme-harmony to v1.2.71 (#12820) (b1993ff0)
+
+##### Other Changes
+
+* remove unused utils (0e4fc531)
+* remove unused utils (b6a79365)
+* //github.com/NodeBB/NodeBB/issues/12824 (c4a60dbb)
+
+##### Refactors
+
+* shorter check for showfullname (6ebff2e1)
+* remove unused uids (20da7148)
+* no category sharing for a long time (6af5cef7)
+* move flags into core (3dff083d)
+* add some margin bottom to bs tags (40758b32)
+* post queue btn and dropdown (038fb71e)
+* search logic to use switch..case (bd76ccf0)
+
+##### Tests
+
+* fix tests (173c604a)
+* fix crash due to excludeGroups (61d43ee1)
+* fix spec (70d99501)
+* fix spec (c586854a)
+* update spec on plugins (f9178a39)
+
+#### v3.10.3 (2024-10-23)
+
+##### Chores
+
+* update changelog for v3.10.2 (e780120a)
+
+##### Bug Fixes
+
+* add missing await (0082ac98)
+* closes #12858 (e6ab4b07)
+* don't crash if profile folder doesn't exist (8a89c5d7)
+
+#### v3.10.2 (2024-10-18)
+
+##### Chores
+
+* update changelog for v3.10.1 (d63a8cca)
+
+##### Bug Fixes
+
+* closes #12848, add missing purge class (64779352)
+
+##### Performance Improvements
+
+* make unread faster if there are 60k+ unread topics (f53f1394)
+
+##### Refactors
+
+* single line (120b184e)
+* hide modal and show alert on success (a309918e)
+* more immediate feedback on category purge (72ccb870)
+
+#### v3.10.1 (2024-10-09)
+
+##### Chores
+
+* up composer (a5f3d097)
+* update changelog for v3.10.0 (a9da495d)
+
+##### Bug Fixes
+
+* **deps:** bump 2factor (712767f6)
+
+##### Refactors
+
+* don't block ./nodebb upgrade if suggested modules are not loaded (39f57f9e)
+
+#### v3.10.0 (2024-09-25)
+
+##### Chores
+
+* move service worker generation code to its own controller file (c153c469)
+* **deps:**
+ * update dependency jsdom to v25.0.1 (#12816) (9a24eb7e)
+ * update dependency sass-embedded to v1.79.3 (#12813) (e0cb1d26)
+ * update dependency sass-embedded to v1.79.2 (#12811) (8a6ced2d)
+ * update dependency nyc to v17.1.0 (#12806) (d55c3f03)
+
+##### New Features
+
+* port updated service worker code to `develop`, allow plugins to define scripts to import into service worker (979954c2)
+
+##### Bug Fixes
+
+* **deps:**
+ * update dependency esbuild to v0.24.0 (#12817) (8c148bc4)
+ * update dependency commander to v12.1.0 (#12587) (c7d4db8c)
+ * update dependency sass to v1.79.3 (#12814) (f0cdc249)
+ * update dependency sass to v1.79.2 (#12812) (2a5d481f)
+ * update dependency nodebb-widget-essentials to v7.0.29 (#12805) (86c2caed)
+
+##### Refactors
+
+* silence saas deprecations on prod (3fdec51a)
+
+#### v3.9.1 (2024-09-25)
+
+##### Chores
+
+* up themes (8bca9768)
+* up widgets (41c73de5)
+* update changelog for v3.9.0 (c3d97c6c)
+
+##### Bug Fixes
+
+* closes #12819, add helper to escape tx strings (7d0c2cb6)
+* closes #12807, fix quick reply js error (06ac0c99)
+
+##### Refactors
+
+* silence saas deprecations on prod (05e4307e)
+* remove deprecation warnings, still used from widgets (3cee59f9)
+
+#### v3.9.0 (2024-09-18)
+
+##### Chores
+
+* **deps:**
+ * update dependency sass-embedded to v1.79.1 (#12803) (fa75a7e0)
+ * update dependency eslint to v8.57.1 (#12800) (fc9f0e8c)
+ * update commitlint monorepo to v19.5.0 (#12790) (b25e7639)
+ * update dependency smtp-server to v3.13.5 (#12781) (98957726)
+ * update dependency eslint-plugin-import to v2.30.0 (#12771) (2460b050)
+ * update redis docker tag to v7.4.0 (#12712) (a2a30ebd)
+ * update dependency sass-embedded to v1.78.0 (#12772) (fde0a65a)
+ * update dependency lint-staged to v15.2.10 (#12767) (a55b985e)
+ * update commitlint monorepo to v19.4.1 (#12762) (f608f786)
+ * update dependency jsdom to v25 (#12756) (e8abf502)
+ * update dependency jsdom to v24.1.3 (#12755) (07151f8a)
+ * update dependency lint-staged to v15.2.9 (#12730) (1b6572bb)
+ * update dependency mocha to v10.7.3 (#12723) (e0850ef7)
+ * update postgres docker tag to v16.4 (#12726) (948d3080)
+ * update dependency @commitlint/cli to v19.4.0 (#12725) (bf5c1855)
+ * update dependency lint-staged to v15.2.8 (#12717) (d0e6cd8f)
+ * update dependency jsdom to v24.1.1 (#12705) (f35068e6)
+ * update dependency mocha to v10.7.0 (#12704) (4609083e)
+ * update dependency sass-embedded to v1.77.8 (#12691) (39bcc903)
+ * update dependency mocha to v10.6.0 (#12672) (8ea9b4a8)
+ * update dependency mocha to v10.5.2 (#12657) (1933b765)
+ * update dependency mocha to v10.5.1 (#12651) (35053887)
+ * update docker/build-push-action action to v6 (#12641) (a78cd1b4)
+ * update dependency lint-staged to v15.2.7 (#12638) (d023933d)
+ * update dependency nyc to v17 (#12627) (31186b8c)
+ * update dependency sass-embedded to v1.77.5 (#12639) (66f66ede)
+ * update dependency jsdom to v24.1.0 (#12601) (91e79c22)
+ * update dependency lint-staged to v15.2.5 (#12598) (3f904986)
+ * update postgres docker tag to v16.3 (#12576) (8f6ef987)
+ * update dependency lint-staged to v15.2.4 (#12592) (0b004b4b)
+ * update redis docker tag to v7.2.5 (#12588) (fc29ea85)
+ * update dependency sass-embedded to v1.77.2 (#12583) (42754e39)
+* up harmony (5cd68c0b)
+* up composer (b0d9664b)
+* up themes (3e5a8d1c)
+* up deps (5220503c)
+* up persona (8af4a184)
+* up persona (1abececa)
+* up themes (35e92d6d)
+* up persona (c9cadbad)
+* up persona (db84d04a)
+* up widget essentials (675ea0f9)
+* up widgets (a4aea98c)
+* up widgets (a6a99553)
+* up widgets (9e673a41)
+* up widgets (f759a07d)
+* up widgets (bf6be3ef)
+* up widgets (32d4ac84)
+* up harmony (780db9e2)
+* update changelog for v3.8.4 (693bac5b)
+* **i18n:**
+ * fallback strings for new resources: nodebb.users (d348d1df)
+ * fallback strings for new resources: nodebb.admin-extend-widgets (16ee1ad7)
+ * fallback strings for new resources: nodebb.themes-harmony (90e0013c)
+ * fallback strings for new resources: nodebb.modules (3531617d)
+ * fallback strings for new resources: nodebb.admin-settings-reputation (28c0abf9)
+ * fallback strings for new resources: nodebb.notifications (6fbc6040)
+ * fallback strings for new resources: nodebb.post-queue (b46a82db)
+ * fallback strings for new resources: nodebb.admin-development-info (cfedfc2d)
+ * fallback strings for new resources: nodebb.admin-settings-reputation (1bb47280)
+
+##### New Features
+
+* give category selector input min-width for mobile (2a15856b)
+* add action:topics.scheduled.notify (705796f6)
+* add followed users lang string (d6643160)
+* add a new widget container (1c2afcc1)
+* show a friendly message on invalid or expired code, closes #12738 (01a2f0e7)
+* allow chat rooms in widgets (f80b7b87)
+* migrate topic move socket call to api v3 (2d14a798)
+* add allow and frameborder to allow attrs (c3f02b74)
+* add missing event type (334c8c9d)
+* send topic title into user-posted-topic-with-tag notification type, unbold tags in copy (1611b17b)
+
+##### Bug Fixes
+
+* **deps:**
+ * update dependency sass to v1.79.1 (#12804) (ff77a7ab)
+ * update dependency pg to v8.13.0 (#12801) (1ad1e0ba)
+ * update dependency pg-cursor to v2.12.0 (#12802) (c8627f05)
+ * update dependency connect-pg-simple to v10 (#12798) (64b21674)
+ * update dependency postcss to v8.4.47 (#12797) (2473e57d)
+ * update dependency nodebb-plugin-ntfy to v1.7.7 (#12796) (d67ebafe)
+ * update dependency mongodb to v6.9.0 (#12792) (edc468d4)
+ * update dependency nodebb-plugin-2factor to v7.5.5 (#12794) (63589d50)
+ * update dependency tough-cookie to v5 (#12782) (396dd38b)
+ * update dependency express to v4.21.0 (#12784) (1d9812e0)
+ * update fontsource monorepo to v5.1.0 (#12791) (03f13433)
+ * update fontsource monorepo (#12779) (6dc58177)
+ * update dependency body-parser to v1.20.3 (#12783) (8943a54d)
+ * update dependency diff to v7 (#12778) (e97e1373)
+ * update dependency mongodb to v6.8.1 (#12777) (0784683d)
+ * update dependency diff to v6 (#12774) (0dda1f34)
+ * update dependency nodemailer to v6.9.15 (#12768) (70f01acb)
+ * update dependency sortablejs to v1.15.3 (#12770) (84b483c6)
+ * update dependency postcss to v8.4.45 (#12769) (81757595)
+ * update dependency sass to v1.78.0 (#12773) (e8cc695d)
+ * update dependency ace-builds to v1.36.2 (#12765) (25deb062)
+ * update dependency ace-builds to v1.36.1 (#12764) (ee715f36)
+ * update dependency rtlcss to v4.3.0 (#12759) (da61bd49)
+ * update dependency webpack to v5.94.0 (#12752) (1f88b551)
+ * update dependency ace-builds to v1.36.0 (#12750) (fbd09b2a)
+ * update dependency nodebb-widget-essentials to v7.0.21 (#12749) (23eb3538)
+ * update dependency chart.js to v4.4.4 (#12748) (dc24e5ba)
+ * update dependency async to v3.2.6 (#12747) (e578dfca)
+ * update dependency ace-builds to v1.35.5 (#12746) (3d0e55d5)
+ * update dependency esbuild to v0.23.1 (#12745) (6297322c)
+ * update dependency @fontsource/poppins to v5.0.15 (#12744) (51b9c5b4)
+ * update dependency winston to v3.14.2 (#12741) (6300d849)
+ * update dependency nodebb-plugin-ntfy to v1.7.6 (#12724) (42aa8786)
+ * update dependency winston to v3.14.1 (#12727) (0e547405)
+ * update dependency postcss to v8.4.41 (#12718) (f54519f1)
+ * update dependency jquery-ui to v1.14.0 (#12719) (4e97a091)
+ * update dependency autoprefixer to v10.4.20 (#12716) (89c87f51)
+ * update dependency rimraf to v5.0.10 (#12715) (7b1dc6a7)
+ * update dependency @fontsource/inter to v5.0.20 (#12714) (703951d3)
+ * update dependency postcss to v8.4.40 (#12710) (48d52840)
+ * update dependency rtlcss to v4.2.0 (#12709) (5aa4c219)
+ * update dependency ace-builds to v1.35.4 (#12706) (405264d9)
+ * update dependency @fortawesome/fontawesome-free to v6.6.0 (#12696) (7723e4af)
+ * update dependency ace-builds to v1.35.3 (#12700) (ee8fd06e)
+ * update dependency semver to v7.6.3 (#12697) (2bcf7f79)
+ * update dependency compare-versions to v6.1.1 (#12693) (c52364a5)
+ * update dependency webpack to v5.93.0 (#12692) (710bf2f8)
+ * update dependency sass to v1.77.8 (#12687) (50030473)
+ * update dependency winston to v3.13.1 (#12690) (5678430e)
+ * update dependency lru-cache to v10.4.3 (#12681) (38e9bbba)
+ * update dependency rimraf to v5.0.9 (#12684) (335bc685)
+ * update dependency lru-cache to v10.3.1 (#12678) (fcfe1f57)
+ * update dependency nodebb-theme-persona to v13.3.25 (#12679) (871367c1)
+ * update dependency rimraf to v5.0.8 (#12680) (48bd5519)
+ * update dependency webpack-merge to v6 (#12670) (d39c05ab)
+ * update dependency @fontsource/inter to v5.0.19 (#12677) (540a05d2)
+ * update dependency esbuild to v0.23.0 (#12668) (088217f3)
+ * update dependency ace-builds to v1.35.2 (#12669) (18f9b1d6)
+ * update dependency postcss to v8.4.39 (#12666) (ba65f193)
+ * update dependency workerpool to v9.1.3 (#12665) (cba80283)
+ * update dependency mongodb to v6.8.0 (#12663) (48f8e464)
+ * update dependency lru-cache to v10.3.0 (#12664) (12e0aecb)
+ * update dependency ace-builds to v1.35.1 (#12659) (3c46c5f4)
+ * update dependency nodemailer to v6.9.14 (#12643) (94691372)
+ * update dependency webpack to v5.92.1 (#12644) (115f236f)
+ * update dependency sass to v1.77.6 (#12640) (b80a8dec)
+ * update dependency webpack to v5.92.0 (#12631) (21e061a0)
+ * update dependency esbuild to v0.21.5 (#12626) (e29bcbce)
+ * update dependency ace-builds to v1.35.0 (#12630) (0053c788)
+ * update dependency nodebb-plugin-markdown to v12.2.8 (#12624) (c3ff16e5)
+ * update dependency pg-cursor to v2.11.0 (#12617) (24d0999f)
+ * update dependency pg to v8.12.0 (#12616) (bee05fe2)
+ * update dependency workerpool to v9.1.2 (#12612) (bff0f0e8)
+ * update dependency sass to v1.77.4 (#12608) (eba8179e)
+ * update dependency mongodb to v6.7.0 (#12603) (606342c5)
+ * update dependency sass to v1.77.3 (#12605) (f783ce30)
+ * update dependency esbuild to v0.21.4 (#12600) (c1a6293f)
+ * update dependency ace-builds to v1.34.2 (#12599) (5595a35e)
+ * update dependency nodebb-plugin-2factor to v7.5.2 (#12577) (72a0fe93)
+ * update dependency sitemap to v8 (#12595) (9ebd96e8)
+ * update dependency nodebb-plugin-markdown to v12.2.7 (#12590) (333ebd9b)
+ * update dependency ace-builds to v1.34.1 (#12591) (7a6b70f0)
+ * update dependency chart.js to v4.4.3 (#12585) (95023355)
+ * update dependency sass to v1.77.2 (#12584) (f6509266)
+ * update dependency mongodb to v6.6.2 (#12579) (984717a8)
+ * update dependency esbuild to v0.21.3 (#12580) (d66118bb)
+ * update dependency nodebb-theme-harmony to v1.2.56 (#12581) (2dd6b148)
+* closes #12795, don't crash if there is an error in auto approve from queue (6ccf40bf)
+* closes #12780, 404 in api/v3 if topic doesn't exist (220af706)
+* vague description for harmony settings.enableBreadcrumbs, help text (17029952)
+* closes #12758, show different error message for block (c0b30ea4)
+* reset form/invalid code style (20053af6)
+* #12754, throw if currentPwd == newPwd (f361df01)
+* #12736, merged notifications use username instead of displayname (ad68809b)
+* #12728, don't display unread badge if nav link doesn't exist (6f7eecd1)
+* bump composer (a7934f36)
+* closes #12721, export all users (6e1c6436)
+* bump 2factor and ntfy (79c4eadd)
+* crash if error objecft passed to handleErrors contains no message (e630f006)
+* don't allow joining topic_ & category_ (503a97e5)
+* sanitize-html configuration passed in src/posts/parse.js (db30834e)
+* handle unhandled exception at handleErrors (598c10c6)
+
+##### Other Changes
+
+* up themes fix btn-ghost-sm (106291fa)
+
+##### Performance Improvements
+
+* don't load unread page again if everything already loaded (4aad6019)
+
+##### Refactors
+
+* change the path of follow notif to go to the user (cf405b18)
+* move textcomplete to core (20fd75bf)
+* don't use composer directly, use the post hook (da7044e4)
+* fix whitespace (609a9878)
+* fix btn-ghost usage to match bootstrap (c58e09f9)
+* remove unused (feefd733)
+* remove log (c5b2f988)
+* #12713, update chat teasers even if chat notifications are disabled (ac644ac2)
+
+##### Tests
+
+* fix spec (5fa8ddbc)
+* since admin pwd changes in test, login with new pwd (be32cf44)
+* add logs for test failures (33587358)
+* create topic for socket.io tests (ed2f3b75)
+
+#### v3.8.4 (2024-08-01)
+
+##### Chores
+
+* up widgets (d1663ac2)
+* up widgets (cb4bf9dd)
+* up persona (324610de)
+* update changelog for v3.8.3 (2a239a79)
+
+##### New Features
+
+* update chat teasers when a new chat starts, closes #12713 (0204f2aa)
+* add downvoteVisibility setting, closes #12698 (269fc068)
+
+##### Bug Fixes
+
+* prevent category filter to go to selected cid (10c5cd4c)
+* add sizes to maskable so it doesnt crash chrome application tab (ccc86825)
+* post preview not working on parent post (a28dd70f)
+
+##### Refactors
+
+* hooks page design (cea18d0c)
+* closes #12699, allow boolean false for log-colorize (42ac1f9d)
+
+##### Tests
+
+* test fix maybe (a73f269f)
+
+#### v3.8.3 (2024-06-27)
+
+##### Chores
+
+* up themes (b15a5894)
+* up harmony (3eb69c58)
+* up harmony (b98333f3)
+* up dbsearch (8a42db6f)
+* use nodebb fork of spider-detector (3a1b39c9)
+* up 2factor (142de2ca)
+* update changelog for v3.8.2 (3854a434)
+
+##### New Features
+
+* closes #12656, only send required meta/link tags on /api calls (64875b3f)
+* show links in post queue (500e3342)
+* show connetion count on /info (60b4bc66)
+* make upload scores descending for ordering (3ec44d64)
+* add isACP to config, closes #12623 (c51b772f)
+* allow passing min,max to sortedSetsCardSum (70b4a0e2)
+* add voters/upvoters v3 routes (1aaa6cbb)
+
+##### Bug Fixes
+
+* wront topic events showing up in topic (54b01395)
+* dont show self in suggested topics (381bbb04)
+* #12645, use titleRaw like reply button (3332480c)
+* update follower/following counts after removing uid from zsets (6f6cfb1a)
+* suggested topic tid (351ee71d)
+* #12633, don't check post index (6e3b012b)
+* recent chat pagination, closes #12637 (f7c9b7ae)
+* info.tpl table (6f79d305)
+* closes #12632, dont load data twice (66adfa29)
+* don't error if file required too early (4430de8c)
+* require of spider-detector (be86d8ef)
+* return early for guests/spiders (8d56e097)
+* dont show error alert when user user mouse overs votes (6bbe3d1c)
+* dont load chat rooms for quests/spiders (ca4a7751)
+* set uid in case its spider(-1), closes #12621 (9d74539a)
+* dont add spiders to online_guests room (bcd4997d)
+* dont autoconnect for spiders, closes #12620 (b6671d16)
+* #12614 fix html markup for widget containers (56b5850a)
+
+##### Other Changes
+
+* remove unused winston (69ce3bf0)
+* remove unused (adb0566f)
+* fix semicolons (795a0daa)
+* fix whitespace (b4db2f7f)
+
+##### Performance Improvements
+
+* cleanup sessions every 30 seconds (26feb2bb)
+* change revokeSession to work with an array of sids (172bc249)
+* dont make db call if posts is already loaded client side (461e95d8)
+* if sigs disabled dont filter uids (73241bd5)
+* cache isAdmin, isGlobalMod checks (fedfce7b)
+* get rid of async call in user load for expiring bans (023d52a3)
+* call getIconbackgrounds once (1dadd16f)
+* get rid of more calls, fix other profile pages #12632 (5c6a853e)
+
+##### Refactors
+
+* sessionUUID (#12658) (d6c946cf)
+* move delete call (65a91ea5)
+* use array.some (85b329af)
+* add placeholders on demand (8f486b1b)
+* move getTopicData call to avoid db calls when its not in cache (252d0df7)
+* remove exits check (74dd2844)
+* move als requires, move autoLocale to api/page routes (3356022a)
+* move requires down (8eccdb48)
+* posts cache to get rid of require in functions (236ac323)
+* closes #12629, allow passing arrays to meta.userOrGroupExists (bad15643)
+* suggest topics, use strings for tids (8ded36f2)
+* #12623, add filter:config.get.admin (2d86552b)
+* add sanity checks to sio (e98f1848)
+
+##### Tests
+
+* dont track session for api/v3 (#12660) (61e5293a)
+* move set (9108c900)
+* spec (41f1cd69)
+* spec (b148d0fc)
+* fix path replace (9ecee782)
+* update openapi spec (9af3a2da)
+* fix tests (c2f63090)
+* return empty array on db.exists([]); (1b283ccc)
+* fix test only set for spiders (7c2a3a6e)
+* fix post test (42230300)
+
+#### v3.8.2 (2024-05-29)
+
+##### Chores
+
+* up composer (83facb7d)
+* up harmony (17ea61a0)
+* update changelog for v3.8.1 (5ef3e0f3)
+
+##### New Features
+
+* show ignored/watched topics in topic list, closes #10974 (29dbe92d)
+* convert "All Votes Are Public" toggle to vote visibility (e0515080)
+
+##### Bug Fixes
+
+* wrong var for ignored (7969e62d)
+* reduce docker image size again and speed up build (56ef2bdd)
+* update thumb count when removing thumbs (6214336c)
+
+##### Refactors
+
+* render (2c0f8c91)
+
+#### v3.8.1 (2024-05-15)
+
+##### Chores
+
+* update changelog for v3.8.0 (2ef2750d)
+
+##### 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)
+* update changelog for v3.7.5 (febeede5)
+* up harmony (80a1a0e0)
+* up harmony (1a000eae)
+* **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
+
+* update changelog for v3.7.4 (8a1b281b)
+
+##### Bug Fixes
+
+* #12543, use PATCH (420c8999)
+
+#### v3.7.4 (2024-04-17)
+
+##### Chores
+
+* up harmony (18990795)
+* up harmony (c2465a16)
+* up themes (ba86740a)
+* up themes (5d8a5571)
+* update changelog for v3.7.3 (8d450eea)
+
+##### New Features
+
+* #12495, add unblock button to users on /blocks (afe597a2)
+
+##### Bug Fixes
+
+* zipObject (110ce66a)
+* index should be cid (8410cec7)
+* uniqCids (de0176ef)
+* if votes are not public, dont show upvoter names in tooltip (5af69dbc)
+* add canView check to /api/v3/users/:uid (5bee324c)
+* is user doesnt have view:users privilege (14f5774f)
+* copy dropdown closing on copy ip/text/link (48281f96)
+* align teaser avatar (5fcd1a8a)
+* if you have chat:privileged the chat icons should show up (ca07e517)
+* #12485, resolve flags on a topics posts on topic delete (d7256796)
+* #12471, remove readable strings (0b1f2546)
+
+##### Refactors
+
+* add new hooks for notifications/websockets (d2e042d1)
+* move parseInt to filter (52e71522)
+* better label for show to groups (cfd29db0)
+
+##### Tests
+
+* update spec (6816e39b)
+* fix tests and use action (acab46e6)
+
+#### v3.7.3 (2024-04-03)
+
+##### Chores
+
+* up ntfy (0058ca68)
+* update changelog for v3.7.2 (277e1787)
+
+##### Bug Fixes
+
+* change digest to use posts sorting first (3aae9234)
+* #12452, fix admin/mod image change (c206ccdd)
+
+#### v3.7.2 (2024-03-27)
+
+##### Chores
+
+* up harmony (0171e73a)
+* up harmony (c6915398)
+* update changelog for v3.7.1 (07640389)
+
+##### New Features
+
+* add hook to modify sorting options/fields (168419cf)
+* add playsinline video attribute (#12419) (5924a6eb)
+
+##### Bug Fixes
+
+* #12446, fix groups.ownership.rescind (ed41e416)
+* #12415, fix notification escaping for queued posts (4787d013)
+
+##### Refactors
+
+* remove log (3b2d8551)
+
+##### Tests
+
+* add test for #12446 (bf4e257c)
+
+#### v3.7.1 (2024-03-14)
+
+##### Chores
+
+* up harmony (1b24b337)
+* up harmony (b6c3a9d2)
+* up harmony (f107a7ff)
+* update changelog for v3.7.0 (f1f81b17)
+
+##### New Features
+
+* allow setting max-old-space-size in config (d1ce594c)
+
+##### Bug Fixes
+
+* #12408, fix mem leak due to mongodb 6.4.0 (285293c4)
+* tids:create on topic post (3b48695b)
+
+#### v3.7.0 (2024-03-06)
+
+##### Chores
+
+* **i18n:**
+ * fallback strings for new resources: nodebb.admin-settings-post, nodebb.topic (0bd0a740)
+ * fallback strings for new resources: nodebb.themes-harmony (8fb0ed82)
+ * fallback strings for new resources: nodebb.aria (a55fb29e)
+ * fallback strings for new resources: nodebb.aria (e6a358ed)
+ * fallback strings for new resources: nodebb.user (c88811a9)
+ * fallback strings for new resources: nodebb.topic (7e862a78)
+ * fallback strings for new resources: nodebb.topic, nodebb.unread (53ea10a7)
+ * fallback strings for new resources: nodebb.global (73e7d467)
+ * fallback strings for new resources: nodebb.topic (72f1e515)
+ * fallback strings for new resources: nodebb.global (642cd8e2)
+ * fallback strings for new resources: nodebb.global, nodebb.user (a998136c)
+ * fallback strings for new resources: nodebb.tags (4d35cb4e)
+ * fallback strings for new resources: nodebb.global, nodebb.themes-harmony (0bc9ac74)
+ * fallback strings for new resources: nodebb.global, nodebb.topic (a2819e9e)
+ * fallback strings for new resources: nodebb.error (9d5702f8)
+ * fallback strings for new resources: nodebb.admin-settings-reputation, nodebb.error (1230d22d)
+ * fallback strings for new resources: nodebb.admin-dashboard (f3974c0b)
+ * fallback strings for new resources: nodebb.search (43bf1f9b)
+* up harmony (25ef62dc)
+* up peace (3aaa0727)
+* up peace (65f3c734)
+* update changelog for v3.6.7 (caf8722f)
+* up harmony (22cd80b9)
+* up themes (96fc20a3)
+* up themes (421c7fc5)
+* closes #12355 (fadee8d7)
+* up themes (9ee864ce)
+* up composer (8324adc5)
+* up composer (0ff7adb4)
+* up themes (43a02c89)
+* up themes (69342342)
+* up harmony (9bbaef84)
+* up harmony (35e98a9f)
+* up harmony (22398d47)
+* up themes (5cbb8bb1)
+* up harmony (3f3f0d66)
+* up harmony (4f42172d)
+* up harmony (c0db10af)
+* up harmony (0743cb3c)
+* up harmony (09414efa)
+* up harmony (bbdefad3)
+* up themes (79ebbee5)
+* up composer (c31e321b)
+* **deps:**
+ * update commitlint monorepo to v19 (#12369) (516c8d04)
+ * update dependency smtp-server to v3.13.3 (#12378) (0ab1982c)
+ * update dependency eslint to v8.57.0 (#12362) (6c33c01d)
+ * update dependency sass-embedded to v1.71.1 (#12350) (99ad9d38)
+ * update dependency sass-embedded to v1.71.0 (#12344) (920f787f)
+ * update postgres docker tag to v16.2 (#12338) (254bad89)
+ * update commitlint monorepo to v18.6.1 (#12339) (92ef8548)
+ * update dependency mocha to v10.3.0 (#12334) (9cd299db)
+ * update dependency smtp-server to v3.13.2 (#12324) (048e664c)
+ * update dependency lint-staged to v15.2.2 (#12327) (a7008fb3)
+ * update dependency lint-staged to v15.2.1 (#12319) (264e71d2)
+ * update commitlint monorepo to v18.6.0 (#12305) (7e7bbfa4)
+ * update dependency jsdom to v24 (#12294) (45f02ff0)
+ * update commitlint monorepo to v18.5.0 (#12296) (5a776f9f)
+ * update dependency sass-embedded to v1.70.0 (#12286) (0063dd45)
+ * update dependency jsdom to v23.2.0 (#12269) (7cc69df0)
+ * update dependency jsdom to v23.1.0 (#12265) (12aeb6f7)
+ * update commitlint monorepo to v18.4.4 (#12261) (b25dfd47)
+ * update dependency sass-embedded to v1.69.7 (#12257) (ce78cb0e)
+ * update dependency sass-embedded to v1.69.6 (#12249) (1777ec4b)
+
+##### New Features
+
+* add new sorting option to categories (2a9b0a3c)
+* add chat widget areas, closes #12375 (53b3c5d6)
+* add hook into user.posts.isReady (7207814b)
+* refactor group title editing (112493fa)
+* cli command for maintenance mode closes #12293 (80960296)
+* fallbacks for aria.json (19bc442b)
+* add new lang keys for a11y (3ce89d1e)
+* add missing aria/role attributes to dropdown elements (7917fd82)
+* add lang keys for hidden labels (e298fb6b)
+* show unread categories based on unread topics (#12317) (45cfb369)
+* limit post/user flags per day closes #12274 (2b1fdc56)
+* search in bookmarks on search page (5213e22a)
+* #12247 (c5730b36)
+
+##### Bug Fixes
+
+* #12389, update privilege group check (87a79059)
+* dupe id (f4b63790)
+* #12357, properly update lists and counters (f34ebcc9)
+* use lang key for user avatar label (863f5d0a)
+* spec (4bcbf759)
+* move winston logging for plugin hook firing to debug level (e240d0f9)
+* closes #12326 (9302d9b4)
+* some layout fixes for group details page (301eee17)
+* bookmark in topic data is nullable now (d500ebb1)
+* bug where body wasn't properly sent on ap-style content-types (4b87c30f)
+* dont send topic notification to poster (c2239e48)
+* **deps:**
+ * update dependency nodebb-theme-harmony to v1.2.36 (#12392) (db2f7c03)
+ * update dependency nodebb-theme-peace to v2.2.4 (#12381) (073a79eb)
+ * update dependency mongodb to v6.4.0 (#12382) (716482b2)
+ * update dependency nodebb-plugin-mentions to v4.4.0 (#12385) (6f04859e)
+ * update dependency ace-builds to v1.32.7 (#12386) (9eb54394)
+ * update dependency autoprefixer to v10.4.18 (#12387) (339e2cfa)
+ * update dependency nodebb-theme-harmony to v1.2.35 (#12388) (7b1b4510)
+ * update dependency nodebb-theme-harmony to v1.2.34 (#12383) (430c6b6c)
+ * update dependency nodemailer to v6.9.11 (#12380) (aa6859df)
+ * update dependency express to v4.18.3 (#12379) (2c3540b2)
+ * update dependency nodebb-plugin-markdown to v12.2.6 (#12371) (fb98dc05)
+ * update dependency archiver to v7 (#12374) (9de0ab31)
+ * update dependency chart.js to v4.4.2 (#12376) (131d2fe7)
+ * update dependency bootswatch to v5.3.3 (#12373) (1ed4d763)
+ * update dependency fetch-cookie to v3.0.1 (#12363) (835820a0)
+ * update dependency sanitize-html to v2.12.1 (#12360) (00bcf935)
+ * update dependency spdx-license-list to v6.9.0 (#12354) (b58dde1c)
+ * update dependency sass to v1.71.1 (#12351) (3094996b)
+ * update dependency sanitize-html to v2.12.0 (#12353) (ee90866a)
+ * update dependency nodemailer to v6.9.10 (#12356) (80ea6eb9)
+ * update dependency bootstrap to v5.3.3 (#12348) (4007882b)
+ * update dependency sass to v1.71.0 (#12345) (faf5a9c8)
+ * update dependency esbuild to v0.20.1 (#12346) (a0021b1d)
+ * update dependency webpack to v5.90.3 (#12347) (748bbab0)
+ * update dependency nodebb-plugin-spam-be-gone to v2.2.1 (#12343) (acad7317)
+ * update dependency webpack to v5.90.2 (#12341) (cb6fe9c7)
+ * update dependency nodebb-theme-harmony to v1.2.25 (#12340) (99474a7e)
+ * update dependency commander to v12 (#12325) (b61486eb)
+ * update dependency diff to v5.2.0 (#12337) (d0f6f0cc)
+ * update dependency postcss to v8.4.35 (#12333) (3bc506f6)
+ * update dependency ace-builds to v1.32.6 (#12332) (523f7ace)
+ * update dependency postcss to v8.4.34 (#12330) (9d036be3)
+ * update dependency semver to v7.6.0 (#12328) (3af04956)
+ * update dependency fetch-cookie to v2.2.0 (#12323) (b56d6a88)
+ * update dependency nodebb-theme-harmony to v1.2.12 (#12318) (65fead81)
+ * update dependency webpack to v5.90.1 (#12322) (98b455ce)
+ * update dependency nodemailer to v6.9.9 (#12321) (3f74cca3)
+ * update dependency ace-builds to v1.32.5 (#12316) (ef06be6d)
+ * update dependency nodebb-theme-harmony to v1.2.10 (#12314) (d648972c)
+ * update dependency ace-builds to v1.32.4 (#12313) (9fb7c163)
+ * update dependency express-session to v1.18.0 (#12311) (6444eeb9)
+ * update dependency esbuild to v0.20.0 (#12309) (aa1344fc)
+ * update dependency nodebb-theme-harmony to v1.2.8 (#12310) (fd20e3a5)
+ * update dependency nodebb-theme-harmony to v1.2.7 (#12307) (eabbf195)
+ * update dependency lru-cache to v10.2.0 (#12306) (400a1aa3)
+ * update dependency webpack to v5.90.0 (#12303) (44a798bc)
+ * update dependency esbuild to v0.19.12 (#12302) (72bb81f0)
+ * update dependency connect-redis to v7.1.1 (#12298) (575f072a)
+ * update dependency nodebb-theme-harmony to v1.2.6 (#12300) (e1adf5b3)
+ * update dependency nodebb-widget-essentials to v7.0.15 (#12295) (876fa4a7)
+ * update dependency nodebb-theme-persona to v13.3.3 (#12290) (f8893cd8)
+ * update dependency nodebb-theme-harmony to v1.2.4 (#12292) (e33e9dea)
+ * update dependency autoprefixer to v10.4.17 (#12285) (9e11b927)
+ * update dependency workerpool to v9.1.0 (#12288) (7a24961d)
+ * update dependency sass to v1.70.0 (#12287) (a1cdec08)
+ * update dependency sortablejs to v1.15.2 (#12283) (cc93caff)
+ * update dependency nodebb-theme-persona to v13.3.2 (#12284) (91ce17c7)
+ * update dependency nodebb-theme-harmony to v1.2.3 (#12280) (34a8069b)
+ * update dependency nodebb-theme-persona to v13.3.1 (#12281) (fe0845b9)
+ * update dependency nodebb-theme-harmony to v1.2.2 (#12279) (fc78b00c)
+ * update socket.io packages to v4.7.4 (#12278) (16598f7f)
+ * update dependency postcss to v8.4.33 (#12264) (3a32fc8f)
+ * update dependency nodebb-theme-harmony to v1.1.108 (#12263) (4924d170)
+ * update socket.io packages to v4.7.3 (#12259) (eb7a3091)
+ * update dependency sass to v1.69.7 (#12258) (d5dc4655)
+ * update dependency nodemailer to v6.9.8 (#12254) (1953a635)
+ * update dependency esbuild to v0.19.11 (#12253) (c8007bf6)
+ * update dependency ace-builds to v1.32.3 (#12252) (c40b2322)
+ * update dependency sass to v1.69.6 (#12250) (f8a0cb9e)
+ * update dependency terser-webpack-plugin to v5.3.10 (#12248) (9101caff)
+ * update dependency workerpool to v9.0.4 (#12244) (8165f454)
+ * update dependency workerpool to v9.0.3 (#12238) (3e08ef81)
+ * update dependency esbuild to v0.19.10 (#12237) (6ef8e767)
+
+##### Other Changes
+
+* fix (f5586968)
+
+##### Refactors
+
+* move tomap inside (5e89dfad)
+* shorter tag translation (a9e8c184)
+* search stats (82f6721d)
+
+##### Tests
+
+* fix test (c8a5e24a)
+* update test (5afc735b)
+
+#### v3.6.7 (2024-02-28)
+
+##### Chores
+
+* update changelog for v3.6.6 (debaa2b9)
+
+##### Bug Fixes
+
+* #12372, fix manual digest buttons (107f5613)
+* closes #12365, staticHooks with callbacks (00e29403)
+* #12359, fix api call (c61b3bbd)
+* closes #12358, only load pending/invited for owners (3960d370)
+* retry setAdd on e11000 error (4a405ce0)
+
+##### Tests
+
+* better test for #12352 (4e51bf81)
+
+#### v3.6.6 (2024-02-14)
+
+##### Chores
+
+* update changelog for v3.6.5 (04039f76)
+
+##### Bug Fixes
+
+* closes #12329, fix default value of categoryWatchState (88e9fa37)
+
+##### Tests
+
+* fix spec (5fec8b23)
+
+#### v3.6.5 (2024-01-31)
+
+##### Chores
+
+* update changelog for v3.6.4 (6e6c3974)
+
+##### Bug Fixes
+
+* #12320, .text() gets \n\t characters (67c8bd99)
+
+#### v3.6.4 (2024-01-24)
+
+##### Chores
+
+* update changelog for v3.6.3 (92ffc57c)
+
+##### New Features
+
+* add success hook to quick reply (cb21f28b)
+
+##### Bug Fixes
+
+* if there is no bookmarkThreshold dont init unread indicator (cf40d681)
+* remove leftover code from 2.x, closes #12301 (d5f445f1)
+* copy single line code blocks, closes #12297 (06269cdf)
+* validate plugin id in toggleActive (76f3efff)
+
+##### Tests
+
+* add plugin id tests (e8befbcc)
+
+#### v3.6.3 (2024-01-12)
+
+##### Chores
+
+* update changelog for v3.6.2 (82a936c3)
+
+##### Bug Fixes
+
+* #12275, pin sharp to 0.32.6 (f3927ce7)
+* topic event translations closes #12273 (5f91cc83)
+
+#### v3.6.2 (2024-01-10)
+
+##### Chores
+
+* up composer (ef8f8db7)
+* up harmony (2bed405c)
+* up harmony (b6dbe1a6)
+* up lavender (16f0affa)
+* up themes (980bfee8)
+* update changelog for v3.6.1 (1e4abdbf)
+
+##### New Features
+
+* #12247 (0af19afd)
+
+##### Bug Fixes
+
+* recent loading (d3d6d77d)
+* closes #12246, direction is passed in as string as query param with new api call (8867f243)
+* stricter selector for sort (a74b5141)
+
+##### Performance Improvements
+
+* dont load all followed tids on unread/recent?filter=watched (563e03b6)
+
+#### v3.6.1 (2023-12-22)
+
+##### Chores
+
+* update changelog for v3.6.0 (eb92cee6)
+
+##### Bug Fixes
+
+* #12243, don' set process.env.config if it doesnt exist (788404c1)
+* lang key for move notification closes #12241 (48a2b5f7)
+* dont send topic notification to poster (e72b26f5)
+
+#### v3.6.0 (2023-12-20)
+
+##### Chores
+
+* **i18n:**
+ * fallback strings for new resources: nodebb.error (d3cfa1b7)
+ * fallback strings for new resources: nodebb.post-queue (64fe1278)
+ * fallback strings for new resources: nodebb.post-queue (f98205c1)
+ * fallback strings for new resources: nodebb.social (081352b6)
+ * fallback strings for new resources: nodebb.modules (4fe84ae8)
+ * fallback strings for new resources: nodebb.admin-settings-chat, nodebb.admin-settings-post, nodebb.admin-settings-user (94777927)
+ * fallback strings for new resources: nodebb.admin-settings-user, nodebb.category, nodebb.notifications (29b3a403)
+ * fallback strings for new resources: nodebb.error (7d8f700f)
+ * fallback strings for new resources: nodebb.modules (83931138)
+* make error:email-taken slightly more descriptive (dd0743d3)
+* up harmony (250cc771)
+* up harmony (9324a75c)
+* update changelog for v3.5.3 (e49ddaf8)
+* up harmony (dbbf3a2c)
+* up harmony (e4656bd4)
+* up themes (0ec9d4c3)
+* added missing deprecation warning for .getTopics (9079ad0b)
+* update note at top of file (2de534fa)
+* up dbsearch (b6981693)
+* up themes (9a1f8e9b)
+* up themes (ed10dda2)
+* up composer (22d7e92f)
+* up themes (fcdd3737)
+* v4 note for deprecations (f4c36b84)
+* minor re-order of routes/controllers in admin api v3 router/controller (181a9399)
+* add in note at top of files ready for deletion in v4 (54a08087)
+* up harmony (1b8dcbc2)
+* **deps:**
+ * update dependency eslint-plugin-import to v2.29.1 (#12229) (055b7597)
+ * update dependency eslint to v8.56.0 (#12231) (a7dd0f92)
+ * update dependency eslint to v8.55.0 (#12203) (32a403b2)
+ * update dependency lint-staged to v15.2.0 (#12210) (9763e97f)
+ * update dependency jsdom to v23.0.1 (#12196) (a50b141f)
+ * update dependency jsdom to v23 (#12186) (8c0472a0)
+ * update commitlint monorepo to v18.4.3 (#12177) (fd5d7b65)
+ * update dependency eslint to v8.54.0 (#12172) (b6275453)
+ * update commitlint monorepo to v18.4.2 (#12169) (d6a92d4c)
+ * update postgres docker tag to v16.1 (#12167) (616ff573)
+ * update mongo docker tag to v7 (#12166) (5f8a4f3a)
+ * update redis docker tag to v7.2.3 (#12165) (c41f9a75)
+ * update dependency lint-staged to v15.1.0 (#12161) (1796ed2b)
+ * update dependency @commitlint/cli to v18.4.1 (#12162) (be3d3393)
+ * update commitlint monorepo to v18.4.0 (#12159) (128c24f2)
+ * update dependency eslint to v8.53.0 (#12151) (d1a7ba35)
+ * update redis docker tag to v7.2.3 (#12152) (2eff6912)
+ * update commitlint monorepo to v18 (#12105) (97016f47)
+ * update dependency sass-embedded to v1.69.5 (#12127) (9e8a2116)
+* **socket.io:** deprecate categories.(isModerator|ignore|watch|getSelectCategories|getMoveCategories|getCategoriesByPrivilege) (f1dbfaa2)
+
+##### Documentation Changes
+
+* fix improper verbiage in category watch schema (f8cc8548)
+* openapi schema for api.search.categories (4ffe0417)
+* **socket.io:**
+ * openapi schema for remaining added routes (5399e86a)
+ * added schema for new routes (f279bca0)
+
+##### New Features
+
+* add 500 page for missing tpls, closes #12230 (06221a0d)
+* remove gif exif stripping exception (f8219aa6)
+* update groups.leave to allow global mods to kick users out of groups (2c6024e0)
+* better layout for manage chat room modal (f4faa0b7)
+* update Messaging.toggleOwner to optionally take a third `state` argument (932bd292)
+* new language strings for post-queue page (5d03321e)
+* add some new social share buttons (ace171a6)
+* docker improvements (#12031) (7f3a9968)
+* closes #12158, add sortable rewards (5ea7dec9)
+* add copy text (4b2491be)
+* closes #12154, add exempt groups (fdff165e)
+* update moved keys (119c3362)
+* move new user restrrictions (3d505c5c)
+* add tracking categories and make watching send notifications (#12147) (84fed97b)
+* add new lang string for minutes (d8d26c9f)
+* add direct message link (#12138) (4c4f3ac9)
+* closes #5584, setup winston to output to file (87a859aa)
+* batch.processSortedSet min/max (#12129) (6c7e6144)
+
+##### Bug Fixes
+
+* fix display post history (dc975838)
+* update isJSON test in request lib (506d7be5)
+* 503 rendering on ajaxify (f7e0fd0b)
+* #12227, fix crash in redirect (2dc1def5)
+* deprecated emailer hook (565ca3cc)
+* extract all pages when stripping metadata (0b3eb6c0)
+* incorrect call to load additional group members (78835ebb)
+* closes #12185, fix cli user password reset (b9050139)
+* don't require login for listing categories (50a90f8e)
+* #12183, remove ensureLoggedIn middleware (0a4f3c8a)
+* remove unused requires (b5940a5d)
+* remove lodash require (f9c471a0)
+* #12171, bump harmony (89a1134c)
+* update design of post-queue (41bdc9e8)
+* update post-queue template for #12171 (63ba4986)
+* language key (4c7c46f3)
+* another missing state (f4bbc5bd)
+* add missing tracking (3b91e8e2)
+* bump harmony (a5e3754b)
+* #12133 dropdown menus on mobile stay open during ajaxify (4601a6f7)
+* update ajaxifyTimer logic to only drop the request if the URL is the same as the one it's already processing (b4297cd8)
+* #12141, use apiv3 for category search module (cefd4061)
+* made parentCid optional in api.search.categories (581516c8)
+* don't count internal links towards link count when restricting new users from posting links (022fa0e7)
+* closes #12126, fix language keys (075cd598)
+* param (e5a60dc8)
+* handle public chat rooms too (6a696c43)
+* suppress chat message notifications for users who are known to be in the chat room (uid is present in the corresponding socket.io room) (18c27d1a)
+* **deps:**
+ * update dependency workerpool to v9 (#12234) (2cccbcf6)
+ * update dependency sharp to v0.33.1 (#12233) (45143000)
+ * update dependency csrf-sync to v4.0.3 (#12232) (9e2a6f86)
+ * update dependency ace-builds to v1.32.2 (#12228) (b6ca117a)
+ * update dependency ace-builds to v1.32.1 (#12226) (6036d144)
+ * update dependency esbuild to v0.19.9 (#12224) (d96d4d09)
+ * update dependency @fontsource/inter to v5.0.16 (#12219) (e32eb8b3)
+ * update dependency chart.js to v4.4.1 (#12217) (b6b569c0)
+ * update dependency nodebb-theme-persona to v13.2.49 (#12218) (6dab99fd)
+ * update dependency postcss to v8.4.32 (#12204) (da879704)
+ * update dependency @fortawesome/fontawesome-free to v6.5.1 (#12198) (b41c7f2a)
+ * update dependency nodebb-theme-harmony to v1.1.101 (#12199) (72d6a4b1)
+ * update dependency sortablejs to v1.15.1 (#12200) (cd625705)
+ * update dependency ace-builds to v1.32.0 (#12197) (75f063ba)
+ * update dependency @fortawesome/fontawesome-free to v6.5.0 (#12193) (a94f4a48)
+ * update dependency sharp to v0.33.0 (#12194) (1f287c74)
+ * update dependency fs-extra to v11.2.0 (#12191) (4eaf2320)
+ * update dependency passport to v0.7.0 (#12190) (bbf7c5e1)
+ * update dependency esbuild to v0.19.8 (#12187) (bc59856e)
+ * update dependency lru-cache to v10.1.0 (#12181) (22932bdb)
+ * update dependency esbuild to v0.19.7 (#12176) (00cb5839)
+ * update dependency lru-cache to v10.0.3 (#12175) (c404ef73)
+ * update dependency ace-builds to v1.31.2 (#12168) (b4a41af9)
+ * update dependency mongodb to v6.3.0 (#12170) (85936a59)
+ * update dependency lru-cache to v10.0.2 (#12160) (9d18d3c7)
+ * update dependency helmet to v7.1.0 (#12155) (50aa1a7c)
+ * update dependency async to v3.2.5 (#12150) (0e9eafa1)
+ * update dependency nodebb-theme-persona to v13.2.44 (#12149) (b489af06)
+ * update dependency nodebb-theme-harmony to v1.1.95 (#12148) (77b0baea)
+ * update dependency connect-pg-simple to v9.0.1 (#12144) (4e23d0d1)
+ * update dependency nodebb-theme-persona to v13.2.43 (#12140) (91e45fa2)
+ * update dependency nodebb-theme-harmony to v1.1.92 (#12131) (a3452c8f)
+ * update dependency nodebb-theme-peace to v2.1.24 (#12139) (29a59b90)
+ * update dependency spdx-license-list to v6.8.0 (2337d641)
+ * update dependency nodebb-plugin-composer-default to v10.2.25 (#12136) (cdb40719)
+ * update dependency cron to v3.1.6 (#12132) (2fb3af3c)
+ * update dependency ace-builds to v1.31.1 (#12135) (6b28f1dc)
+ * update dependency workerpool to v8 (#12121) (9bed7646)
+ * update dependency sass to v1.69.5 (#12128) (b351c00a)
+* **socket.io:** update getPosts controller to return object containing posts instead of straight array (54000aab)
+
+##### Other Changes
+
+* **socket.io:** deprecate socketGroups.getChatGroups in favour of api.admin.listGroups (dc4cc74f)
+
+##### Refactors
+
+* line breaks good (4e560ade)
+* replace deprecated call with api call (f91b823e)
+* move async call to parallel (dabc282d)
+* **socket.io:**
+ * deprecate SocketModules.chats.typing in favour of api.chats.toggleTyping (c1e6be77)
+ * deprecate SocketModules.chats.loadPinnedMessages in favour of api.chats.getPinnedMessages" (401e8636)
+ * deprecate SocketModules.chats.searchMessages in favour of api.search.roomMessages (f9dc3502)
+ * deprecate SocketModules.chats.setNotificationSetting in favour of api.chats.watch (75c8cda1)
+ * deprecated SocketModules.chats.toggleOwner in favour of api.chats.toggleOwner (b13c6ee4)
+ * deprecated SocketModules.chats.searchMembers in favour of api.search.roomUsers (6e952263)
+ * deprecate SocketModules.sortPublicRooms in favour of api.chats.sortPublicRooms (62b7dfd4)
+ * deprecate SocketModules.chat.getUnreadCount in favour of api.chats.getUnread (5eaffb42)
+ * deprecate SocketModules.chats.getIP in favour of api.chats.getIpAddress (214989a8)
+ * deprecate SocketModules.chats.hasPrivateChat in favour of api.users.getPrivateRoomId (0d3c94e6)
+ * deprecate SocketModules.chats.canMessage and .markAllRead with no alternative. deprecate .getRecentChats in favour of api.chats.list (a4133500)
+ * deprecate SocketModules.chats.isDnD in favour of api.users.getStatus (eebea4df)
+ * deprecate SocketModules.chats.getRaw in favour of api.chats.getRawMessage (c4b4e79b)
+ * deprecate socketGroups.loadMoreMembers in favour of api.groups.listMembers (807d778c)
+ * deprecate socketGroups.searchMembers in favour of api.groups.listMembers (d2f3333a)
+ * deprecate socketGroups.loadMore in favour of api.groups.list (b61e8147)
+ * deprecate categories.categorySearch in favour of api.search.categories (00de9d5b)
+ * deprecate categories.loadMore in favour of api.categories.getTopics (1ce4ca54)
+ * deprecate categories.loadMoreSubCategories in favour of api.categories.getChildren (010727f5)
+ * deprecate categories.setWatchState in favour of api.categories.setWatchState (d7c6b3d6)
+ * deprecate categories.getTopicCount in favour of api.categories.getTopicCount (c442b6e6)
+ * deprecate categories.get in favour of api.categories.list (96046373)
+ * deprecate categories.getRecentReplies in favour of api.categories.getPosts (52b78e83)
+
+##### Tests
+
+* migrate socket modules tests to v3 api (445b70de)
+* migrate socket.io groups tests to use api v3 (2c1c4dfe)
+
+#### v3.5.3 (2023-12-13)
+
+##### Chores
+
+* up composer (245e5df3)
+* up composer default (c1f82b78)
+* update changelog for v3.5.2 (e2e85053)
+
+##### Bug Fixes
+
+* change translator escape (c434262e)
+
+##### Other Changes
+
+* add types for database abstration layer (#10762) (17cd19c7)
+
+#### v3.5.2 (2023-11-29)
+
+##### Chores
+
+* up composer (49013f81)
+* update changelog for v3.5.1 (48f7ae99)
+
+##### Bug Fixes
+
+* closes #12185, fix cli user password reset (6790000d)
+* thumb width (a9ef58a5)
+
+#### v3.5.1 (2023-11-14)
+
+##### Chores
+
+* up mentions (b1b3dcb6)
+* update changelog for v3.5.0 (5d7c10f1)
+
##### New Features
* closes #12123, allow setting hh:mm for pin expiry (1f800747)
@@ -76,7 +6419,6 @@
* up persona (cc5e9d9c)
* up harmony (769f879e)
* up themes (46530337)
-* incrementing version number - v3.4.3 (5c984250)
* update changelog for v3.4.3 (08949be9)
* up themes (e0b29ba9)
* up emoji (00dd0cb3)
@@ -86,38 +6428,12 @@
* up emoji (7568be3c)
* up themes (b7d8fd1e)
* up themes (d0682905)
-* incrementing version number - v3.4.2 (3f0dac38)
* up deps (f1021542)
* up composer (45b9803a)
* up composer (7e5d9b71)
* up harmony (13ea14f1)
* up engines (0f9f875b)
-* incrementing version number - v3.4.1 (01e69574)
* up dbsearch (b4775b18)
-* 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)
* **deps:**
* update actions/setup-node action to v4 (#12114) (762ad161)
* update dependency eslint-plugin-import to v2.29.0 (#12112) (2ae031ed)
@@ -330,33 +6646,7 @@
##### Chores
-* incrementing version number - v3.4.2 (3f0dac38)
* update changelog for v3.4.2 (f9323de6)
-* 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
@@ -383,32 +6673,7 @@
* up harmony (512c44d5)
* up harmony (319d3b1f)
* up themes (d7a7c355)
-* incrementing version number - v3.4.1 (01e69574)
* update changelog for v3.4.1 (f24a334c)
-* 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
@@ -432,31 +6697,7 @@
##### Chores
* up dbsearch (8357bb2e)
-* incrementing version number - v3.4.0 (fd9247c5)
* update changelog for v3.4.0 (5c023025)
-* 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
@@ -475,44 +6716,21 @@
* up themes (10d11924)
* up harmony (0334b389)
* up harmony (32c870f4)
-* incrementing version number - v3.3.9 (5805e770)
* update changelog for v3.3.9 (50d44777)
* up composer (ffd6ea5a)
* up composer (c2534287)
* up composer (540b9f18)
* up composer (87015e9b)
* up themes (dd3647ed)
-* incrementing version number - v3.3.8 (a5603565)
-* incrementing version number - v3.3.7 (b26f1744)
* markdown dep (03f11a24)
* up markdown (f399db9d)
-* incrementing version number - v3.3.6 (7fb38792)
* up deps (a7843a40)
* up composer (05a7c761)
* up themes (c4b865e1)
* up themes (7d9ff9bf)
-* 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)
* up themes (5c14438d)
* up themes (cb3252be)
* up harmony (c7df93b4)
-* 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)
* **deps:**
* update coverallsapp/github-action action to v2.2.2 (#11977) (15c6fd6b)
* update dependency jquery to v3.7.1 (#11963) (94f07c14)
@@ -609,29 +6827,7 @@
##### Chores
* up mentions (4ec3a480)
-* incrementing version number - v3.3.8 (a5603565)
* update changelog for v3.3.8 (65e16e9f)
-* 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
@@ -645,28 +6841,7 @@
##### Chores
-* incrementing version number - v3.3.7 (b26f1744)
* update changelog for v3.3.7 (1193fa04)
-* 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
@@ -677,27 +6852,7 @@
##### Chores
-* incrementing version number - v3.3.6 (7fb38792)
* update changelog for v3.3.6 (a43354c0)
-* 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
@@ -708,49 +6863,12 @@
##### Chores
* up deps (db55f18a)
-* 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)
#### v3.3.4 (2023-08-20)
##### Chores
-* incrementing version number - v3.3.3 (f94d239b)
* update changelog for v3.3.3 (38149a57)
-* 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
@@ -760,24 +6878,7 @@
##### Chores
-* incrementing version number - v3.3.2 (ec9dac97)
* update changelog for v3.3.2 (2ecf15c4)
-* 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
@@ -793,23 +6894,7 @@
##### Chores
-* incrementing version number - v3.3.1 (151cc68f)
* update changelog for v3.3.1 (6f961f9c)
-* 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
@@ -820,22 +6905,7 @@
##### Chores
* up themes (62231baa)
-* incrementing version number - v3.3.0 (fc1ad70f)
* update changelog for v3.3.0 (46f7405d)
-* 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)
##### New Features
@@ -899,7 +6969,6 @@
* up harmony (ee0128d7)
* up harmony (ba03e223)
* up themes (6fc80f9f)
-* incrementing version number - v3.2.3 (b06d3e63)
* update changelog for v3.2.3 (afb38c71)
* up mentions (4b92df75)
* up composer (48a04eb7)
@@ -917,20 +6986,7 @@
* up themes (62429252)
* remove log (954db1ee)
* up themes (9fda8dce)
-* incrementing version number - v3.2.2 (758ecfcd)
-* incrementing version number - v3.2.1 (20145074)
* up markdown (f23cda10)
-* 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.admin-dashboard (80ea4eb0)
* fallback strings for new resources: nodebb.admin-settings-chat, nodebb.error (e27d1743)
@@ -1106,20 +7162,7 @@
##### Chores
* downgrade harmony to correct version (7c94506b)
-* incrementing version number - v3.2.2 (758ecfcd)
* update changelog for v3.2.2 (91a432ad)
-* 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
@@ -1137,19 +7180,7 @@
* up themes (f1170b18)
* up spam-be-gone (eed34d04)
* remove log (509faa5e)
-* incrementing version number - v3.2.1 (20145074)
* update changelog for v3.2.1 (c7f8cee9)
-* 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
@@ -1163,18 +7194,7 @@
* up harmony (9fc5ae08)
* up composer (82d37702)
* up spider-detector (97d8f858)
-* incrementing version number - v3.2.0 (9ecac38e)
* update changelog for v3.2.0 (080f9e75)
-* 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
@@ -1212,7 +7232,6 @@
* up harmony (777c7d09)
* up deps (7f465006)
* up harmony (f9e37829)
-* incrementing version number - v3.1.7 (0b4e81ab)
* update changelog for v3.1.7 (8744e412)
* up persona (7a0e5c6d)
* up harmony (be474fb4)
@@ -1223,14 +7242,12 @@
* up themes (b2f70a2e)
* up composer (21919524)
* up harmony (64441602)
-* incrementing version number - v3.1.6 (b3a3b130)
* up themes (61420fdc)
* up themes (f9990cab)
* bump themes for da02361b13d064763223533368f9b71d998ecf37 (c97977f8)
* up harmony (0f84f597)
* up emoji (4b0d3940)
* up emoji (291aa58e)
-* incrementing version number - v3.1.5 (ec19343a)
* up harmony (56ac610b)
* up themes (0bfe361c)
* up themes (67ab222d)
@@ -1251,17 +7268,10 @@
* up themes (14c93cd5)
* up harmony (6188d8be)
* up harmony (9e416d7f)
-* incrementing version number - v3.1.4 (2452783c)
* up persona (78c2e29c)
* up markdown (7f5ec0ef)
* up themes (cdfc1bfe)
* up harmony (fd80b612)
-* 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.admin-appearance-skins (7ca85c60)
* fallback strings for new resources: nodebb.admin-advanced-cache, nodebb.admin-advanced-errors, nodebb.admin-development-logger (fa8e656d)
@@ -1490,16 +7500,7 @@
##### Chores
-* incrementing version number - v3.1.6 (b3a3b130)
* update changelog for v3.1.6 (f10a2d2e)
-* 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
@@ -1511,15 +7512,7 @@
##### Chores
-* incrementing version number - v3.1.5 (ec19343a)
* update changelog for v3.1.5 (b0d16861)
-* 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
@@ -1532,14 +7525,7 @@
* fix persona (74174414)
* up themes (97ff1f11)
-* incrementing version number - v3.1.4 (2452783c)
* update changelog for v3.1.4 (633dc2de)
-* 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)
##### New Features
@@ -1567,13 +7553,7 @@
##### Chores
* up markdown (51bf5e95)
-* incrementing version number - v3.1.3 (3b4e9d3f)
* update changelog for v3.1.3 (9924fde6)
-* 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
@@ -1595,12 +7575,7 @@
##### Chores
-* incrementing version number - v3.1.2 (40fa3489)
* update changelog for v3.1.2 (5b398782)
-* 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)
##### Continuous Integration
@@ -1621,11 +7596,7 @@
##### Chores
-* incrementing version number - v3.1.1 (40250733)
* update changelog for v3.1.1 (ccd6f48c)
-* incrementing version number - v3.1.0 (0cb386bd)
-* incrementing version number - v3.0.1 (26f6ea49)
-* incrementing version number - v3.0.0 (224e08cd)
##### Bug Fixes
@@ -1635,10 +7606,7 @@
##### Chores
-* incrementing version number - v3.1.0 (0cb386bd)
* update changelog for v3.1.0 (2c515dc3)
-* incrementing version number - v3.0.1 (26f6ea49)
-* incrementing version number - v3.0.0 (224e08cd)
##### Documentation Changes
@@ -1668,7 +7636,6 @@
* up harmony (eab2679f)
* up harmony (7f19913b)
* up themes (832fe95a)
-* incrementing version number - v3.0.1 (26f6ea49)
* update changelog for v3.0.1 (fd30af10)
* whopps (ec0da196)
* up harmony (2caf4afc)
@@ -1680,7 +7647,6 @@
* up widgets (2588853b)
* up harmony (01669fa5)
* up harmony (c58d07f4)
-* incrementing version number - v3.0.0 (224e08cd)
* **i18n:**
* fallback strings for new resources: nodebb.themes-harmony, nodebb.themes-persona (48a4fd50)
* fallback strings for new resources: nodebb.admin-settings-email (489163aa)
@@ -1822,7 +7788,6 @@
##### Chores
-* incrementing version number - v3.0.0 (224e08cd)
* update changelog for v3.0.0 (56ad381f)
##### Bug Fixes
@@ -2216,39 +8181,7 @@
##### Chores
* removing superfluous changelog items (5343d2a0)
-* incrementing version number - v2.8.11 (2ec81eff)
* update changelog for v2.8.11 (f2ca93f6)
-* incrementing version number - v2.8.10 (5b7c3671)
-* incrementing version number - v2.8.9 (57f14e41)
-* incrementing version number - v2.8.8 (b331b942)
-* incrementing version number - v2.8.7 (3f8248d6)
-* incrementing version number - v2.8.6 (af6ce447)
-* incrementing version number - v2.8.5 (bff5ce2d)
-* incrementing version number - v2.8.4 (a46b2bbc)
-* incrementing version number - v2.8.3 (c20b20a7)
-* incrementing version number - v2.8.2 (050e43f8)
-* incrementing version number - v2.8.1 (727f879e)
-* incrementing version number - v2.8.0 (8e77673d)
-* incrementing version number - v2.7.0 (96cc0617)
-* incrementing version number - v2.6.1 (7e52a7a5)
-* incrementing version number - v2.6.0 (e7fcf482)
-* incrementing version number - v2.5.8 (dec0e7de)
-* incrementing version number - v2.5.7 (5836bf4a)
-* incrementing version number - v2.5.6 (c7bd7dbf)
-* incrementing version number - v2.5.5 (3509ed94)
-* incrementing version number - v2.5.4 (e83260ca)
-* incrementing version number - v2.5.3 (7e922936)
-* incrementing version number - v2.5.2 (babcd17e)
-* incrementing version number - v2.5.1 (ce3aa950)
-* incrementing version number - v2.5.0 (01d276cb)
-* incrementing version number - v2.4.5 (dd3e1a28)
-* incrementing version number - v2.4.4 (d5525c87)
-* incrementing version number - v2.4.3 (9c647c6c)
-* incrementing version number - v2.4.2 (3aa7b855)
-* incrementing version number - v2.4.1 (60cbd148)
-* incrementing version number - v2.4.0 (4834cde3)
-* incrementing version number - v2.3.1 (d2425942)
-* incrementing version number - v2.3.0 (046ea120)
##### New Features
@@ -2268,7 +8201,6 @@
##### Chores
-* incrementing version number - v2.8.10 (5b7c3671)
* update changelog for v2.8.10 (188ec62f)
##### Continuous Integration
@@ -2293,7 +8225,6 @@
##### Chores
* up composer-default (e9a8e195)
-* incrementing version number - v2.8.9 (57f14e41)
* update changelog for v2.8.9 (18b2150e)
##### Bug Fixes
@@ -2312,7 +8243,6 @@
##### Chores
* up cron (73a50d17)
-* incrementing version number - v2.8.8 (b331b942)
* update changelog for v2.8.8 (c03d5db7)
##### Bug Fixes
@@ -2334,7 +8264,6 @@
##### Chores
-* incrementing version number - v2.8.7 (3f8248d6)
* update changelog for v2.8.7 (2ca38e7b)
##### Bug Fixes
@@ -2349,7 +8278,6 @@
##### Chores
-* incrementing version number - v2.8.6 (af6ce447)
* update changelog for v2.8.6 (f3306d03)
##### Documentation Changes
@@ -2377,7 +8305,6 @@
##### Chores
* **i18n:** fallback strings for new resources: nodebb.error (8335f90a)
-* incrementing version number - v2.8.5 (bff5ce2d)
* update changelog for v2.8.5 (24e58c28)
##### New Features
@@ -2402,7 +8329,6 @@
##### Chores
-* incrementing version number - v2.8.4 (a46b2bbc)
* update changelog for v2.8.4 (c13f0e21)
##### Bug Fixes
@@ -2413,7 +8339,6 @@
##### Chores
-* incrementing version number - v2.8.3 (c20b20a7)
* update changelog for v2.8.3 (eb2841ee)
#### v2.8.3 (2023-01-25)
@@ -2421,7 +8346,6 @@
##### Chores
* remove extraneous lines from changelog (48c9f447)
-* incrementing version number - v2.8.2 (050e43f8)
* update changelog for v2.8.2 (66aa3169)
##### Bug Fixes
@@ -2449,7 +8373,6 @@
##### Chores
-* incrementing version number - v2.8.1 (727f879e)
* update changelog for v2.8.1 (d17d4ec0)
##### Bug Fixes
@@ -2462,7 +8385,6 @@
* fallbacks for new language string (8a69e740)
* remove extraneous lines from changelog (bbaf26ce)
-* incrementing version number - v2.8.0 (8e77673d)
* update changelog for v2.8.0 (a5c2edb9)
##### Bug Fixes
@@ -2480,7 +8402,6 @@
* update dependency mocha to v10.2.0 (#11094) (c4cc1e61)
* up jquery (3e8f5378)
* remove extraneous lines from changelog (e213dbc3)
-* incrementing version number - v2.7.0 (96cc0617)
* update changelog for v2.7.0 (4701c96d)
* **i18n:**
* fallback strings for new resources: nodebb.admin-settings-email (717b3612)
@@ -2561,25 +8482,7 @@
##### Chores
-* incrementing version number - v2.6.0 (e7fcf482)
* update changelog for v2.6.0 (eedd84ae)
-* incrementing version number - v2.5.8 (dec0e7de)
-* incrementing version number - v2.5.7 (5836bf4a)
-* incrementing version number - v2.5.6 (c7bd7dbf)
-* incrementing version number - v2.5.5 (3509ed94)
-* incrementing version number - v2.5.4 (e83260ca)
-* incrementing version number - v2.5.3 (7e922936)
-* incrementing version number - v2.5.2 (babcd17e)
-* incrementing version number - v2.5.1 (ce3aa950)
-* incrementing version number - v2.5.0 (01d276cb)
-* incrementing version number - v2.4.5 (dd3e1a28)
-* incrementing version number - v2.4.4 (d5525c87)
-* incrementing version number - v2.4.3 (9c647c6c)
-* incrementing version number - v2.4.2 (3aa7b855)
-* incrementing version number - v2.4.1 (60cbd148)
-* incrementing version number - v2.4.0 (4834cde3)
-* incrementing version number - v2.3.1 (d2425942)
-* incrementing version number - v2.3.0 (046ea120)
##### Documentation Changes
@@ -2620,7 +8523,6 @@
* update postgres docker tag to v14 (#10829) (5aa55d29)
* update dependency eslint to v8.23.1 (#10885) (0c6fb6e3)
* remove derpy extra changelog bits (445f09f0)
-* incrementing version number - v2.5.8 (dec0e7de)
* update changelog for v2.5.8 (c9cd8975)
##### New Features
@@ -2745,7 +8647,6 @@
* really fix indents this time (c2024f34)
* fix indents (d50512e7)
* add bootstrap5 to test runner for now (be5d6d29)
-* incrementing version number - v2.5.7 (5836bf4a)
* update changelog for v2.5.7 (17e948ab)
##### New Features
@@ -2780,7 +8681,6 @@
##### Chores
-* incrementing version number - v2.5.6 (c7bd7dbf)
* update changelog for v2.5.6 (e92238d0)
##### Performance Improvements
@@ -2791,7 +8691,6 @@
##### Chores
-* incrementing version number - v2.5.5 (3509ed94)
* update changelog for v2.5.5 (e7d0040d)
##### Bug Fixes
@@ -2804,7 +8703,6 @@
##### Chores
* up plugins (b91ef6dd)
-* incrementing version number - v2.5.4 (e83260ca)
* update changelog for v2.5.4 (aabf073c)
#### v2.5.4 (2022-10-11)
@@ -2812,7 +8710,6 @@
##### Chores
* 🤔 (7240e8ce)
-* incrementing version number - v2.5.3 (7e922936)
* update changelog for v2.5.3 (fdf240f6)
##### Continuous Integration
@@ -2834,7 +8731,6 @@
* remove duplicate version increment lines in changelog (5dbcfef9)
* bring back treding plugins (8aa1596d)
-* incrementing version number - v2.5.2 (babcd17e)
* update changelog for v2.5.2 (84b6a7c7)
##### New Features
@@ -2864,7 +8760,6 @@
##### Chores
-* incrementing version number - v2.5.1 (ce3aa950)
* update changelog for v2.5.1 (2b2fd4f3)
##### Bug Fixes
@@ -2883,7 +8778,6 @@
##### Chores
-* incrementing version number - v2.5.0 (01d276cb)
* update changelog for v2.5.0 (1076285d)
##### Bug Fixes
@@ -2905,7 +8799,6 @@
* fallback strings for new resources: nodebb.admin-advanced-cache (90fc50e1)
* move @textcomplete and its modules to composer-default (3cbb7a3d)
* remove client-side js file for tpl that no longer exists (bc2ea860)
-* incrementing version number - v2.4.5 (dd3e1a28)
* update changelog for v2.4.5 (d505cc47)
* **deps:**
@@ -2968,7 +8861,6 @@
##### Chores
-* incrementing version number - v2.4.4 (d5525c87)
* update changelog for v2.4.4 (77e492b8)
##### Bug Fixes
@@ -2980,7 +8872,6 @@
##### Chores
-* incrementing version number - v2.4.3 (9c647c6c)
* update changelog for v2.4.3 (06da15a5)
##### Bug Fixes
@@ -2991,7 +8882,6 @@
##### Chores
-* incrementing version number - v2.4.2 (3aa7b855)
* update changelog for v2.4.2 (ba7a3466)
##### Bug Fixes
@@ -3002,7 +8892,6 @@
##### Chores
-* incrementing version number - v2.4.1 (60cbd148)
* update changelog for v2.4.1 (4b6baabb)
##### Documentation Changes
@@ -3026,7 +8915,6 @@
* update docker/build-push-action action to v3 (bfd6318c)
* update docker/login-action action to v2 (3d68accf)
* update docker/setup-buildx-action action to v2 (371ac032)
-* incrementing version number - v2.4.0 (4834cde3)
* update changelog for v2.4.0 (c4714ff7)
##### Bug Fixes
@@ -3043,7 +8931,6 @@
* update to new transifex project url (659cfe85)
* re-order interstitial tests so email and gdpr tests are in sub-blocks (342cca35)
* opt-out of dependabot, due to conflicts with renovate (70d60289)
-* incrementing version number - v2.3.1 (d2425942)
* update changelog for v2.3.1 (2f487175)
* **i18n:**
* fallback strings for new resources: nodebb.admin-settings-email (cdaa8f21)
@@ -3104,7 +8991,6 @@
* bump sanitize-html from 2.7.0 to 2.7.1 in /install (7b606d2e)
* bump webpack from 5.73.0 to 5.74.0 in /install (a9900625)
* **i18n:** fallback strings for new resources: nodebb.admin-settings-advanced, nodebb.admin-menu, nodebb.error (17120e03)
-* incrementing version number - v2.3.0 (046ea120)
* update changelog for v2.3.0 (a6f7fff0)
##### New Features
@@ -3166,12 +9052,7 @@
* bump jquery-ui from 1.13.1 to 1.13.2 in /install (abb19e98)
* bump nodebb-theme-persona in /install (9e52b8c6)
* bump ioredis from 5.1.0 to 5.2.0 in /install (8c20fdad)
-* incrementing version number - v2.2.4 (d1d63e6b)
* update changelog for v2.2.4 (52f7ed64)
-* incrementing version number - v2.2.3 (f80476b9)
-* incrementing version number - v2.2.2 (343ffa66)
-* incrementing version number - v2.2.1 (efc77b2a)
-* incrementing version number - v2.2.0 (eecb836d)
##### Bug Fixes
@@ -3192,11 +9073,7 @@
* **deps-dev:**
* bump @commitlint/cli from 17.0.2 to 17.0.3 in /install (9e44cdad)
* bump eslint from 8.18.0 to 8.19.0 in /install (7139ad5f)
-* incrementing version number - v2.2.3 (f80476b9)
* update changelog for v2.2.3 (8719a93f)
-* incrementing version number - v2.2.2 (343ffa66)
-* incrementing version number - v2.2.1 (efc77b2a)
-* incrementing version number - v2.2.0 (eecb836d)
##### Bug Fixes
@@ -3209,10 +9086,7 @@
##### Chores
-* incrementing version number - v2.2.2 (343ffa66)
* update changelog for v2.2.2 (f59ddc34)
-* incrementing version number - v2.2.1 (efc77b2a)
-* incrementing version number - v2.2.0 (eecb836d)
##### Bug Fixes
@@ -3230,9 +9104,7 @@
* **deps-dev:**
* bump eslint from 8.17.0 to 8.18.0 in /install (bfd626b0)
* bump jsdom from 19.0.0 to 20.0.0 in /install (d037c2c9)
-* incrementing version number - v2.2.1 (efc77b2a)
* update changelog for v2.2.1 (667780cf)
-* incrementing version number - v2.2.0 (eecb836d)
##### Bug Fixes
@@ -3251,7 +9123,6 @@
* fallback strings for new resources: nodebb.admin-settings-uploads (da481163)
* fallback strings for new resources: nodebb.admin-settings-advanced (34d75e96)
* add in warning in language directories about not editing files directly (06074e8c)
-* incrementing version number - v2.2.0 (eecb836d)
* update changelog for v2.2.0 (bb3766df)
##### Documentation Changes
@@ -3327,7 +9198,6 @@
* **deps-dev:**
* bump @commitlint/config-angular in /install (e5e788d2)
* bump eslint from 8.16.0 to 8.17.0 in /install (52c86dba)
-* incrementing version number - v2.1.0 (a3114d33)
* update changelog for v2.1.0 (7121949d)
##### Documentation Changes
@@ -3347,15 +9217,12 @@
##### Chores
* update changelog for v2.1.0 (7121949d)
-* incrementing version number - v2.1.0 (987045c3)
* bump persona (91f32487)
* update changelog for v2.0.1 (abd8e216)
-* incrementing version number - v2.0.1 (768427d4)
* remove optional `middleware` parameter from setupPageRoute and setupAdminPageRoute calls (54ff768f)
* add note re: sort module (5aca106b)
* up emoji (265a0139)
* update changelog for v2.0.0 (60fc3f5d)
-* incrementing version number - v2.0.0 (f23c3ff5)
* **deps:**
* bump nodebb-plugin-2factor from 4.0.1 to 5.0.0 in /install (6e95e5c5)
* update dependency lint-staged to v12.5.0 (01f607a5)
@@ -3463,7 +9330,6 @@
##### Chores
-* incrementing version number - v2.0.0 (f23c3ff5)
* update changelog for v1.19.7 (a764df52)
* **deps:**
* update dependency mocha to v10 (a7986773)
@@ -3509,7 +9375,6 @@
##### Chores
-* incrementing version number - v1.19.7 (0c4850e2)
* update changelog for v1.19.6 (acca7811)
* **deps:**
* update commitlint monorepo to v16.2.4 (0d9179f7)
@@ -3556,7 +9421,6 @@
##### Chores
-* incrementing version number - v1.19.6 (283a0072)
* update changelog for v1.19.5 (05032ca2)
* **deps:**
* bump semver from 7.3.6 to 7.3.7 in /install (#10493) (65cec8d0)
@@ -3639,7 +9503,6 @@
##### Chores
-* incrementing version number - v1.19.5 (48d6eb4f)
* update changelog for v1.19.4 (0e6e49b2)
* **deps:**
* bump less from 3.13.1 to 4.1.2 in /install (#9856) (d33485f6)
@@ -3692,10 +9555,8 @@
##### Chores
-* incrementing version number - v1.19.4 (67282057)
* delay `filter:email.send` removal to v2.0.0 (83fd4311)
* up persona (c23b2089)
-* incrementing version number - v1.19.3 (09cb11c8)
* update changelog for v1.19.3 (0b48ec54)
* **deps:**
* bump postcss from 8.4.7 to 8.4.8 in /install (#10372) (d7a4ae1f)
@@ -3793,7 +9654,6 @@
* update commitlint monorepo to v16.2.1 (2290cee5)
* update dependency eslint to v8.9.0 (763cd193)
* remove punycode dep (e9cb1452)
-* incrementing version number - v1.19.2 (e49b31f0)
* update changelog for v1.19.2 (f012984d)
##### New Features
@@ -3869,7 +9729,6 @@
* up persona (f29bed27)
* up packages (b4a4e60e)
* up persona (3e30b6cd)
-* incrementing version number - v1.19.1 (7f450268)
* update changelog for v1.19.1 (55df683a)
* **deps:**
* bump ioredis from 4.28.4 to 4.28.5 in /install (#10254) (b496ad44)
@@ -4014,7 +9873,6 @@
* add test.sh to gitignore (d7796f0b)
* delete test script (250274c7)
* remove unused lang key #10180 (2fe91e36)
-* incrementing version number - v1.19.0 (18b0a29f)
* update changelog for v1.19.0 (c8f1bc53)
* **i18n:**
* fallback strings for new resources: nodebb.admin-settings-user (78cd6de7)
@@ -4109,7 +9967,6 @@
* right dropdown (7aa85882)
* right dropdown (a998cc1c)
* update readme mongodb version (af5393ec)
-* incrementing version number - v1.18.6 (3a78a151)
* update changelog for v1.18.6 (3c8109e2)
* **deps:**
* update commitlint monorepo (56d134c3)
@@ -4417,7 +10274,6 @@
* up mentions (98b98a11)
* up mentions (3e4d477e)
* fix type.yaml example and summary (591424ce)
-* incrementing version number - v1.18.5 (1e418f5b)
* update changelog for v1.18.5 (82eda23a)
* remove .opacity() mixin as it is supported cross-browser (28efcb59)
* **deps:**
@@ -4525,7 +10381,6 @@
* remove .opacity() mixin as it is supported cross-browser (28efcb59)
* up themes (463b2076)
* up persona (1438f409)
-* incrementing version number - v1.18.4 (945c2b0b)
* update changelog for v1.18.4 (7cbcb521)
* **deps:**
* update dependency lint-staged to v11.2.6 (8d4bb8bb)
@@ -4678,7 +10533,6 @@
##### Chores
* up persona (f4e62fb1)
-* incrementing version number - v1.18.3 (57358743)
* update changelog for v1.18.3 (f066ddb8)
* **deps:**
* update dependency lint-staged to v11.2.0 (840b49b9)
@@ -4754,7 +10608,6 @@
##### Chores
* **deps:** update docker/build-push-action action to v2.7.0 (ee027719)
-* incrementing version number - v1.18.2 (0a56158b)
* update changelog for v1.18.2 (27e9282a)
##### New Features
@@ -4829,7 +10682,6 @@
##### Chores
* **deps:** update commitlint monorepo to v13 (87ba768f)
-* incrementing version number - v1.18.1 (f8f80e4f)
* update changelog for v1.18.1 (0713475d)
##### New Features
@@ -4872,7 +10724,6 @@
##### Chores
* found some hooks that don't play well docgen (ae793b4a)
-* incrementing version number - v1.18.0 (1e436ae7)
* update changelog for v1.18.0 (2fd9c095)
* **deps:** update dependency mocha to v9.1.1 (64bac178)
@@ -4942,7 +10793,6 @@
* update dependency eslint to v7.31.0 (f5a53b7f)
* update dependency lint-staged to v11.0.1 (02101315)
* up markdown/composer-default, fixes: #9708 (b74eefac)
-* incrementing version number - v1.17.2 (46be2046)
* update changelog for v1.17.2 (5c9c0605)
##### Documentation Changes
@@ -5095,7 +10945,6 @@
* lint (2b42e7ed)
* fix indentation (d07229aa)
* up rewards (ca9ca876)
-* incrementing version number - v1.17.1 (0aad1312)
* update changelog for v1.17.1 (1e6ed0ad)
##### Documentation Changes
@@ -5207,7 +11056,6 @@
* update dependency mocha to v8.4.0 (461e187b)
* update dependency eslint to v7.25.0 (32c20806)
* update dependency grunt to v1.4.0 (a30deef3)
-* incrementing version number - v1.17.0 (75f7972b)
* update changelog for v1.17.0 (4c441a1b)
##### Documentation Changes
@@ -5350,23 +11198,16 @@
* update dependency husky to v5 (d89ccf26)
* update dependency lint-staged to v10.5.4 (030ecffa)
* update dependency eslint to v7.19.0 (3696a199)
-* incrementing version number - v1.17.0-beta.5 (42c4f963)
* fix indent (6406e527)
* benchpress 2.4.1 (3403635c)
* remove log (a1ee1a2a)
-* incrementing version number - v1.17.0-beta.4 (91992240)
* bump composer-default (289bfc0b)
* up themes (d14ba1f4)
* remove node 10 (8d3ec234)
* bump composer-default to 6.5.20 (33fbfdfe)
-* incrementing version number - v1.17.0-beta.3 (6e8b1bb9)
* add multiparty dep (ef3ec96a)
-* incrementing version number - v1.17.0-beta.2 (0c1945dc)
-* incrementing version number - v1.17.0-beta.1 (31872aac)
* bump composer (30954789)
* bump deps (#9335) (b9fd2c87)
-* incrementing version number - v1.17.0-beta.0 (b61257ef)
-* incrementing version number - v1.16.3-beta.0 (477157cc)
* extra console.log (1ae8dda8)
* up composer (1c9acef6)
* eslint max-len (cc9d6fd0)
@@ -5385,7 +11226,6 @@
* fallbacks (74be1a59)
* deprecation notices for plugins using plugin old hook methods (3052256d)
* add deprecation notice in comments for ajaxify.loadExtraScripts (8b09292e)
-* incrementing version number - v1.16.2 (ea7f8381)
* update changelog for v1.16.2 (d3883d4b)
##### Documentation Changes
@@ -5929,8 +11769,6 @@
* update dependency husky to v4.3.8 (a6f5de86)
* update dependency eslint to v7.18.0 (afbef95f)
* update dependency husky to v4.3.7 (d3e041e2)
-* incrementing version number - v1.16.2-beta.0 (43ff8e41)
-* incrementing version number - v1.16.1 (e3cd7a23)
* update changelog for v1.16.1 (b6d71710)
##### New Features
@@ -6008,10 +11846,8 @@
##### Chores
* increase test timeout (0d7dfeeb)
-* incrementing version number - v1.16.1-beta.0 (5fcf3ea6)
* add deprecation notice to topic thumb tpl value (05d8b3c3)
* minor reordering of lines (8e5a413e)
-* incrementing version number - v1.16.0 (6d01fd50)
* update changelog for v1.16.0 (1437c62f)
* **deps:**
* update dependency eslint to v7.17.0 (18ae7cf7)
@@ -6134,7 +11970,6 @@
* update dependency lint-staged to v10.5.3 (3e6f7359)
* appease codeclimate (9f62df15)
* add comment for clarification (6037f5ee)
-* incrementing version number - v1.15.5 (57cd1343)
* update changelog for v1.15.5 (b0299326)
* **i18n:** fallbacks for new topic thumb keys (15f1a089)
@@ -6259,7 +12094,6 @@
##### Chores
* up persona (c111bde1)
-* incrementing version number - v1.15.4 (a1b658d9)
* update changelog for v1.15.4 (252dddfc)
##### New Features
@@ -6284,7 +12118,6 @@
* fallbacks for nodebb.error (82ca3760)
* fallbacks for nodebb.topic (5b269bc5)
* remove test code (07fe959c)
-* incrementing version number - v1.15.3 (d1ae08fa)
* update changelog for v1.15.3 (cf157c9b)
##### New Features
@@ -6412,10 +12245,8 @@
* up persona (5c9ff18e)
* add missing plugin hook deprecation warning (98a05e4d)
* pin autoprefixer to latest (46eb7701)
-* incrementing version number - v1.15.3-beta.0 (28fa03bd)
* up persona (81984285)
* up slick (5f2fe883)
-* incrementing version number - v1.15.2 (5867a5b9)
* update changelog for v1.15.2 (37965d45)
* **spec:** replace ugly hack with another hack for optional properties (45a4f136)
* **deps:**
@@ -6494,9 +12325,7 @@
##### Chores
-* incrementing version number - v1.15.2-beta.1 (20c05e80)
* remove debug log (0a0b4661)
-* incrementing version number - v1.15.2-beta.0 (996174a1)
* **deps:** update dependency smtp-server to v3.8.0 (5f5f0edb)
##### Documentation Changes
@@ -6571,7 +12400,6 @@
##### Chores
-* incrementing version number - v1.15.1-beta.0 (e033da8a)
* fallback l10n for admin-settings-api (8368c25b)
* **deps:**
* update dependency eslint to v7.13.0 (bcbc0854)
@@ -6647,40 +12475,27 @@
##### Chores
* update changelog for v1.15.0-rc.5 (69f4d5ac)
-* incrementing version number - v1.15.0-rc.5 (4bd2788b)
* add info log into tests (b6d86878)
* update renovate config to automatically merge non-major version bumps #yolo (1c8b8ce1)
* update changelog for v1.15.0-rc.4 (16882941)
-* incrementing version number - v1.15.0-rc.4 (57b49320)
* update changelog for v1.15.0-rc.3 (2738041b)
-* incrementing version number - v1.15.0-rc.3 (6de7760a)
* bump persona (e0b67817)
* update changelog for v1.15.0-rc.2 (c3a7ab54)
-* incrementing version number - v1.15.0-rc.2 (7c084134)
* update changelog for v1.15.0-rc.1 (4f49b3da)
-* incrementing version number - v1.15.0-rc.1 (943424b5)
* update changelog for v1.15.0-rc.0 (aab5f018)
-* incrementing version number - v1.15.0-rc.0 (8d48455b)
* update changelog for v1.15.0-beta.30 (39648722)
-* incrementing version number - v1.15.0-beta.30 (2dd3c962)
* some optimizations for codeclimate (4a63c20a)
* update changelog for v1.15.0-beta.29 (63696c40)
-* incrementing version number - v1.15.0-beta.29 (fca176d2)
* refactor src/emailer.js (75459517)
* update changelog for v1.15.0-beta.28 (fd975a66)
-* incrementing version number - v1.15.0-beta.28 (57f83162)
* update changelog for v1.15.0-beta.27 (70673824)
-* incrementing version number - v1.15.0-beta.27 (78fad240)
* lint notifications.js (4fc84e9f)
* update changelog for v1.15.0-beta.26 (5e01d288)
-* incrementing version number - v1.15.0-beta.26 (62c44095)
* up persona (ff8a833a)
* up persona (4a0f54ae)
* update changelog for v1.15.0-beta.25 (240a04b4)
-* incrementing version number - v1.15.0-beta.25 (1124d4ee)
* up persona (032e6001)
* update changelog for v1.15.0-beta.24 (72ab5ba1)
-* incrementing version number - v1.15.0-beta.24 (23ba071d)
* up persona (5407bf48)
* up persona (4c2eab4b)
* up persona (91133b0f)
@@ -6688,72 +12503,30 @@
* up persona (9dc4db1f)
* up persona (ba70a1bf)
* update changelog for v1.15.0-beta.23 (e6ea208c)
-* incrementing version number - v1.15.0-beta.23 (61a04eb9)
* update changelog for v1.15.0-beta.22 (59ee74c2)
-* incrementing version number - v1.15.0-beta.22 (9c9329ee)
* update changelog for v1.15.0-beta.21 (8089542e)
-* incrementing version number - v1.15.0-beta.21 (966cdc13)
* update changelog for v1.15.0-beta.20 (1650f303)
-* incrementing version number - v1.15.0-beta.20 (c8e57ec1)
* update changelog for v1.15.0-beta.19 (9cde5105)
-* incrementing version number - v1.15.0-beta.19 (2eb7c284)
* update changelog for v1.15.0-beta.18 (b2ca9686)
-* incrementing version number - v1.15.0-beta.18 (e096791e)
* update changelog for v1.15.0-beta.17 (d6178158)
-* incrementing version number - v1.15.0-beta.17 (f1c28092)
* update changelog for v1.15.0-beta.16 (e08297ff)
-* incrementing version number - v1.15.0-beta.16 (6043c9cb)
* update changelog for v1.15.0-beta.15 (f878b92c)
-* incrementing version number - v1.15.0-beta.15 (10b94f9b)
* update changelog for v1.15.0-beta.14 (5e60d092)
-* incrementing version number - v1.15.0-beta.14 (6ca4b86f)
* update commitlint config (61a8c6f0)
* update changelog for v1.15.0-beta.13 (ca8d492b)
-* incrementing version number - v1.15.0-beta.13 (bdd71c51)
* update changelog for v1.15.0-beta.12 (0a242605)
-* incrementing version number - v1.15.0-beta.12 (b852c9b7)
* update changelog for v1.15.0-beta.11 (f07ba866)
-* incrementing version number - v1.15.0-beta.11 (c1ce7391)
* update changelog for v1.15.0-beta.10 (9c34eced)
-* incrementing version number - v1.15.0-beta.10 (f252d4d7)
* update changelog for v1.15.0-beta.9 (affc7927)
-* incrementing version number - v1.15.0-beta.9 (8dc513da)
* update changelog for v1.15.0-beta.8 (3b960c3b)
-* incrementing version number - v1.15.0-beta.8 (34bb869c)
* update changelog for v1.15.0-beta.7 (e449ff9a)
-* incrementing version number - v1.15.0-beta.7 (fd917b8e)
* update changelog for v1.15.0-beta.6 (a7f03b64)
-* incrementing version number - v1.15.0-beta.6 (a9019cbe)
* update changelog for v1.15.0-beta.5 (0e90064e)
-* incrementing version number - v1.15.0-beta.5 (81e4c4df)
* update changelog for v1.15.0-beta.4 (6c4aed8c)
-* incrementing version number - v1.15.0-beta.4 (f2726a6d)
* update changelog for v1.15.0-beta.3 (11e2ccab)
-* incrementing version number - v1.15.0-beta.3 (39178c2d)
* update changelog for v1.15.0-beta.2 (d8a9f1c3)
-* incrementing version number - v1.15.0-beta.2 (59b50d0a)
* update changelog for v1.15.0-beta.1 (aeca19d5)
-* incrementing version number - v1.15.0-beta.1 (4fa57fbb)
-* incrementing version number - v1.15.0-beta.0 (bff80983)
-* incrementing version number - v1.14.3-beta.16 (d9a05035)
-* incrementing version number - v1.14.3-beta.15 (e2a253f2)
-* incrementing version number - v1.14.3-beta.14 (9500871e)
-* incrementing version number - v1.14.3-beta.13 (b5a2e4b6)
-* incrementing version number - v1.14.3-beta.12 (f4c986a7)
-* incrementing version number - v1.14.3-beta.11 (8618c32a)
-* incrementing version number - v1.14.3-beta.10 (fa341714)
-* incrementing version number - v1.14.3-beta.9 (9945c409)
-* incrementing version number - v1.14.3-beta.8 (b5dcce9c)
-* incrementing version number - v1.14.3-beta.7 (2531c44c)
-* incrementing version number - v1.14.3-beta.6 (97088f68)
-* incrementing version number - v1.14.3-beta.5 (a33a8a5a)
-* incrementing version number - v1.14.3-beta.4 (55b3e376)
-* incrementing version number - v1.14.3-beta.3 (5a5abf3c)
-* incrementing version number - v1.14.3-beta.2 (bbab183f)
-* incrementing version number - v1.14.3-beta.1 (2c06f6ac)
-* incrementing version number - v1.14.3-beta.0 (3f87d5f9)
* update changelog for v1.14.2 (cd94c24a)
-* incrementing version number - v1.14.2 (1e4d683f)
* update changelog for v1.14.2 (488e69fd)
* **deps:**
* update dependency mocha to v8.2.1 (35e725d1)
@@ -7536,14 +13309,10 @@
##### Chores
-* incrementing version number - v1.14.2 (1e4d683f)
* update changelog for v1.14.2 (488e69fd)
* up theme (63fb2ad7)
-* incrementing version number - v1.14.2-beta.1 (9d1465d0)
* up theme (15aabfd3)
* up theme (599c5015)
-* incrementing version number - v1.14.2-beta.0 (fca4ee31)
-* incrementing version number - v1.14.1 (31203b16)
* update changelog for v1.14.1 (d4c16086)
* **deps:** update commitlint monorepo to v9.1.1 (0ca7e28a)
@@ -7584,13 +13353,7 @@
##### Chores
-* incrementing version number - v1.14.1 (31203b16)
* update changelog for v1.14.1 (d4c16086)
-* incrementing version number - v1.14.1-beta.3 (e8ecef6b)
-* incrementing version number - v1.14.1-beta.2 (b8d9b6b1)
-* incrementing version number - v1.14.1-beta.1 (be85123a)
-* incrementing version number - v1.14.1-beta.0 (c279875a)
-* incrementing version number - v1.14.0 (bb73d6a4)
* update changelog for v1.14.0 (cffae0f1)
##### New Features
@@ -7651,13 +13414,10 @@
##### Chores
-* incrementing version number - v1.14.0 (bb73d6a4)
* update changelog for v1.14.0 (cffae0f1)
* bump persona (19f9af94)
* latest translations and fallbacks (22879633)
-* incrementing version number - v1.13.3 (ee583e80)
* bump persona (d2bd746c)
-* incrementing version number - v1.13.2 (beafd613)
* **deps:**
* update dependency smtp-server to v3.7.0 (e80100b5)
* update dependency eslint to v7.3.1 (#8417) (33492744)
@@ -8146,9 +13906,7 @@
##### Chores
-* incrementing version number - v1.13.3 (ee583e80)
* bump persona (d2bd746c)
-* incrementing version number - v1.13.2 (beafd613)
* **deps:**
* update dependency coveralls to v3.1.0 (5ed4a108)
* pin dependency @apidevtools/swagger-parser to 9.0.1 (51eccef5)
@@ -8379,11 +14137,9 @@
##### Chores
-* incrementing version number - v1.13.2 (71f4607d)
* bump themes (027f3f22)
* bump vanilla (236a1730)
* bump persona (82ace391)
-* incrementing version number - v1.13.1 (cc6758a0)
* **deps:**
* update dependency eslint to v6.8.0 (#8062) (15783213)
* update dependency nyc to v15 (#8094) (976e26a9)
@@ -8475,8 +14231,6 @@
##### Chores
-* incrementing version number - v1.13.1 (d1e0672f)
-* incrementing version number - v1.13.0 (c38b2d23)
* **deps:**
* update dependency husky to v3.1.0 (#8046) (c3418c26)
* update dependency coveralls to v3.0.9 (#8067) (0aeee144)
@@ -8546,8 +14300,6 @@
##### Chores
-* incrementing version number - v1.13.0 (c38b2d23)
-* incrementing version number - v1.12.2 (810e2c0b)
* **deps:**
* update dependency jsdom to v15.2.1 (9d946d1c)
* update dependency eslint to v6.6.0 (d0e428e9)
@@ -9159,12 +14911,10 @@
##### Chores
-* incrementing version number - v1.12.2 (22db818e)
* bump themes #7576 (d349754d)
* bump themes (59bdc970)
* bump themes (abcca134)
* bump themes (551b18cd)
-* incrementing version number - v1.12.1 (dd973abe)
* **deps:**
* update dependency lint-staged to v8.1.7 (dc6b49ca)
* update commitlint monorepo (9998e86b)
@@ -9243,11 +14993,9 @@
##### Chores
-* incrementing version number - v1.12.1 (dd973abe)
* comment cleanup (6bed51ef)
* bump persona (1f4db132)
* bump themes, fix: https://github.com/NodeBB/NodeBB/issues/7446 (0d19bb3d)
-* incrementing version number - v1.12.0 (d87f8c52)
* **deps:**
* update dependency lint-staged to v8.1.5 (ae17481d)
* update node:8.15.1 docker digest to 918f0be (5f787d73)
@@ -9348,8 +15096,6 @@
##### Chores
-* incrementing version number - v1.12.0 (d87f8c52)
-* incrementing version number - v1.11.2 (757bff27)
* **deps:**
* update node:8.15.1 docker digest to 287b8a5 (0b8d1833)
* update node.js to v8.15.1 (ae89db28)
@@ -9498,8 +15244,6 @@
##### Chores
-* incrementing version number - v1.11.2 (757bff27)
-* incrementing version number - v1.11.1 (2104877c)
* **deps:**
* update node:8.15.0 docker digest to cb66110 (1719cd77)
* update dependency eslint-plugin-import to v2.15.0 (f7191eb9)
@@ -9809,7 +15553,6 @@
##### Chores
-* incrementing version number - v1.11.1 (2104877c)
* **deps:**
* update dependency husky to v1.2.1 (63f4b569)
* update node:8.14.0 docker digest to dd2381f (7449ae3e)
diff --git a/Dockerfile b/Dockerfile
index 14f61d3ada..ceb707c374 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,51 +1,76 @@
-FROM --platform=$BUILDPLATFORM node:lts as npm
+FROM node:lts as build
-RUN mkdir -p /usr/src/build && \
- chown -R node:node /usr/src/build
-WORKDIR /usr/src/build
+ENV NODE_ENV=production \
+ DAEMON=false \
+ SILENT=false \
+ USER=nodebb \
+ UID=1001 \
+ GID=1001
-ARG NODE_ENV
-ENV NODE_ENV $NODE_ENV
+WORKDIR /usr/src/app/
-COPY --chown=node:node install/package.json /usr/src/build/package.json
+COPY . /usr/src/app/
-USER node
+# Install corepack to allow usage of other package managers
+RUN corepack enable
-RUN npm install --omit=dev
+# Removing unnecessary files for us
+RUN find . -mindepth 1 -maxdepth 1 -name '.*' ! -name '.' ! -name '..' -exec bash -c 'echo "Deleting {}"; rm -rf {}' \;
-FROM node:lts as rebuild
+# Prepage package.json
+RUN cp /usr/src/app/install/package.json /usr/src/app/
-ARG BUILDPLATFORM
-ARG TARGETPLATFORM
+RUN apt-get update \
+ && DEBIAN_FRONTEND=noninteractive \
+ apt-get -y --no-install-recommends install \
+ tini
-RUN mkdir -p /usr/src/build && \
- chown -R node:node /usr/src/build
+RUN groupadd --gid ${GID} ${USER} \
+ && useradd --uid ${UID} --gid ${GID} --home-dir /usr/src/app/ --shell /bin/bash ${USER} \
+ && chown -R ${USER}:${USER} /usr/src/app/
-COPY --from=npm /usr/src/build /usr/src/build
+USER ${USER}
-RUN if [ $BUILDPLATFORM != $TARGETPLATFORM ]; then \
- npm rebuild && \
- npm cache clean --force; fi
+RUN npm install --omit=dev \
+ && rm -rf .npm
+ # TODO: generate lockfiles for each package manager
+ ## pnpm import \
-FROM node:lts-slim as run
+FROM node:lts-slim AS final
-ARG NODE_ENV
-ENV NODE_ENV=$NODE_ENV \
- daemon=false \
- silent=false
+ENV NODE_ENV=production \
+ DAEMON=false \
+ SILENT=false \
+ USER=nodebb \
+ UID=1001 \
+ GID=1001
-RUN mkdir -p /usr/src/app && \
- chown -R node:node /usr/src/app
+WORKDIR /usr/src/app/
-COPY --chown=node:node --from=rebuild /usr/src/build /usr/src/app
+RUN corepack enable \
+ && groupadd --gid ${GID} ${USER} \
+ && useradd --uid ${UID} --gid ${GID} --home-dir /usr/src/app/ --shell /bin/bash ${USER} \
+ && mkdir -p /usr/src/app/logs/ /opt/config/ \
+ && chown -R ${USER}:${USER} /usr/src/app/ /opt/config/
+COPY --from=build --chown=${USER}:${USER} /usr/src/app/ /usr/src/app/install/docker/setup.json /usr/src/app/
+COPY --from=build --chown=${USER}:${USER} /usr/bin/tini /usr/src/app/install/docker/entrypoint.sh /usr/local/bin/
-WORKDIR /usr/src/app
+RUN chmod +x /usr/local/bin/entrypoint.sh \
+ && chmod +x /usr/local/bin/tini
-USER node
+# TODO: Have docker-compose use environment variables to create files like setup.json and config.json.
+# COPY --from=hairyhenderson/gomplate:stable /gomplate /usr/local/bin/gomplate
-COPY --chown=node:node . /usr/src/app
+USER ${USER}
EXPOSE 4567
-VOLUME ["/usr/src/app/node_modules", "/usr/src/app/build", "/usr/src/app/public/uploads", "/opt/config"]
-ENTRYPOINT ["./install/docker/entrypoint.sh"]
\ No newline at end of file
+
+VOLUME ["/usr/src/app/node_modules", "/usr/src/app/build", "/usr/src/app/public/uploads", "/opt/config/"]
+
+# Utilising tini as our init system within the Docker container for graceful start-up and termination.
+# Tini serves as an uncomplicated init system, adept at managing the reaping of zombie processes and forwarding signals.
+# This approach is crucial to circumvent issues with unmanaged subprocesses and signal handling in containerised environments.
+# By integrating tini, we enhance the reliability and stability of our Docker containers.
+# Ensures smooth start-up and shutdown processes, and reliable, safe handling of signal processing.
+ENTRYPOINT ["tini", "--", "entrypoint.sh"]
\ No newline at end of file
diff --git a/Gruntfile.js b/Gruntfile.js
index dcfa831cd6..60d8f8b23e 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -173,7 +173,10 @@ module.exports = function (grunt) {
winston.error(err.stack);
}
if (worker) {
- worker.send({ compiling: compiling });
+ worker.send({
+ compiling: compiling,
+ livereload: true, // Send livereload event via Socket.IO for instant browser refresh
+ });
}
});
});
diff --git a/README.md b/README.md
index 307d90cca2..dbf2ff306f 100644
--- a/README.md
+++ b/README.md
@@ -3,7 +3,7 @@
[](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)
+[](https://discord.gg/S2aAweHwDc)
[**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.
@@ -39,8 +39,8 @@ Our minimalist "Harmony" theme gets you going right away, no coding experience r
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))
-* MongoDB, version 3.6 or greater **or** Redis, version 2.8.9 or greater
+* A version of Node.js at least 20 or greater ([installation/upgrade instructions](https://github.com/nodesource/distributions))
+* MongoDB, version 5 or greater **or** Redis, version 7.2 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)
diff --git a/app.js b/app.js
index b6067d726b..c493817491 100644
--- a/app.js
+++ b/app.js
@@ -33,7 +33,6 @@ const path = require('path');
const file = require('./src/file');
process.env.NODE_ENV = process.env.NODE_ENV || 'production';
-global.env = process.env.NODE_ENV || 'production';
// Alternate configuration file support
const configFile = path.resolve(__dirname, nconf.any(['config', 'CONFIG']) || 'config.json');
diff --git a/dev.Dockerfile b/dev.Dockerfile
new file mode 100644
index 0000000000..b02384558a
--- /dev/null
+++ b/dev.Dockerfile
@@ -0,0 +1,78 @@
+FROM node:lts AS git
+
+ENV USER=nodebb \
+ UID=1001 \
+ GID=1001
+
+WORKDIR /usr/src/app/
+
+RUN groupadd --gid ${GID} ${USER} \
+ && useradd --uid ${UID} --gid ${GID} --home-dir /usr/src/app/ --shell /bin/bash ${USER} \
+ && chown -R ${USER}:${USER} /usr/src/app/
+
+RUN apt-get update \
+ && apt-get -y --no-install-recommends install tini
+
+USER ${USER}
+
+# Change to the git branch you want to test
+RUN git clone --recurse-submodules -j8 --depth 1 https://github.com/NodeBB/NodeBB.git .
+
+RUN find . -mindepth 1 -maxdepth 1 -name '.*' ! -name '.' ! -name '..' -exec bash -c 'echo "Deleting {}"; rm -rf {}' \;
+
+FROM node:lts AS node_modules_touch
+
+ENV NODE_ENV=development \
+ USER=nodebb \
+ UID=1001 \
+ GID=1001
+
+WORKDIR /usr/src/app/
+
+RUN corepack enable \
+ && groupadd --gid ${GID} ${USER} \
+ && useradd --uid ${UID} --gid ${GID} --home-dir /usr/src/app/ --shell /bin/bash ${USER} \
+ && chown -R ${USER}:${USER} /usr/src/app/
+
+COPY --from=git --chown=${USER}:${USER} /usr/src/app/install/package.json /usr/src/app/
+
+USER ${USER}
+
+RUN npm install \
+ && rm -rf .npm
+
+FROM node:lts-slim AS final
+
+ENV NODE_ENV=development \
+ DAEMON=false \
+ SILENT=false \
+ USER=nodebb \
+ UID=1001 \
+ GID=1001
+
+WORKDIR /usr/src/app/
+
+RUN corepack enable \
+ && groupadd --gid ${GID} ${USER} \
+ && useradd --uid ${UID} --gid ${GID} --home-dir /usr/src/app/ --shell /bin/bash ${USER} \
+ && mkdir -p /usr/src/app/logs/ /opt/config/ \
+ && chown -R ${USER}:${USER} /usr/src/app/ /opt/config/
+
+COPY --from=git --chown=${USER}:${USER} /usr/src/app/ /usr/src/app/install/docker/setup.json /usr/src/app/
+COPY --from=git --chown=${USER}:${USER} /usr/bin/tini /usr/src/app/install/docker/entrypoint.sh /usr/local/bin/
+COPY --from=node_modules_touch --chown=${USER}:${USER} /usr/src/app/ /usr/src/app/
+COPY --from=git --chown=${USER}:${USER} /usr/src/app/ /usr/src/app/
+
+RUN chmod +x /usr/local/bin/entrypoint.sh \
+ && chmod +x /usr/local/bin/tini
+
+# TODO: Have docker-compose use environment variables to create files like setup.json and config.json.
+# COPY --from=hairyhenderson/gomplate:stable /gomplate /usr/local/bin/gomplate
+
+USER ${USER}
+
+EXPOSE 4567
+
+VOLUME ["/usr/src/app/node_modules", "/usr/src/app/build", "/usr/src/app/public/uploads", "/opt/config/"]
+
+ENTRYPOINT ["tini", "--", "entrypoint.sh"]
\ No newline at end of file
diff --git a/docker-compose-pgsql.yml b/docker-compose-pgsql.yml
new file mode 100644
index 0000000000..618f571f5c
--- /dev/null
+++ b/docker-compose-pgsql.yml
@@ -0,0 +1,70 @@
+version: '3.8'
+
+services:
+ nodebb:
+ build: .
+ # image: ghcr.io/nodebb/nodebb:latest
+ restart: unless-stopped
+ ports:
+ - '4567:4567' # comment this out if you don't want to expose NodeBB to the host, or change the first number to any port you want
+ volumes:
+ - nodebb-build:/usr/src/app/build
+ - nodebb-uploads:/usr/src/app/public/uploads
+ - nodebb-config:/opt/config
+ - ./install/docker/setup.json:/usr/src/app/setup.json
+
+ postgres:
+ image: postgres:18.3-alpine
+ restart: unless-stopped
+ environment:
+ POSTGRES_USER: nodebb
+ POSTGRES_PASSWORD: nodebb
+ POSTGRES_DB: nodebb
+ volumes:
+ - postgres-data:/var/lib/postgresql/data
+
+ redis:
+ image: redis:8.6.2-alpine
+ restart: unless-stopped
+ command: ['redis-server', '--appendonly', 'yes', '--loglevel', 'warning']
+ # command: ["redis-server", "--save", "60", "1", "--loglevel", "warning"] # uncomment if you want to use snapshotting instead of AOF
+ volumes:
+ - redis-data:/data
+ profiles:
+ - redis
+
+volumes:
+ postgres-data:
+ driver: local
+ driver_opts:
+ o: bind
+ type: none
+ device: ./.docker/database/postgresql/data
+
+ redis-data:
+ driver: local
+ driver_opts:
+ o: bind
+ type: none
+ device: ./.docker/database/redis
+
+ nodebb-build:
+ driver: local
+ driver_opts:
+ o: bind
+ type: none
+ device: ./.docker/build
+
+ nodebb-uploads:
+ driver: local
+ driver_opts:
+ o: bind
+ type: none
+ device: ./.docker/public/uploads
+
+ nodebb-config:
+ driver: local
+ driver_opts:
+ o: bind
+ type: none
+ device: ./.docker/config
diff --git a/docker-compose-redis.yml b/docker-compose-redis.yml
new file mode 100644
index 0000000000..67e5fc4acc
--- /dev/null
+++ b/docker-compose-redis.yml
@@ -0,0 +1,51 @@
+version: '3.8'
+
+services:
+ nodebb:
+ build: .
+ # image: ghcr.io/nodebb/nodebb:latest
+ restart: unless-stopped
+ ports:
+ - '4567:4567' # comment this out if you don't want to expose NodeBB to the host, or change the first number to any port you want
+ volumes:
+ - nodebb-build:/usr/src/app/build
+ - nodebb-uploads:/usr/src/app/public/uploads
+ - nodebb-config:/opt/config
+ - ./install/docker/setup.json:/usr/src/app/setup.json
+
+ redis:
+ image: redis:8.6.2-alpine
+ restart: unless-stopped
+ command: ['redis-server', '--appendonly', 'yes', '--loglevel', 'warning']
+ # command: ["redis-server", "--save", "60", "1", "--loglevel", "warning"] # uncomment if you want to use snapshotting instead of AOF
+ volumes:
+ - redis-data:/data
+
+volumes:
+ redis-data:
+ driver: local
+ driver_opts:
+ o: bind
+ type: none
+ device: ./.docker/database/redis
+
+ nodebb-build:
+ driver: local
+ driver_opts:
+ o: bind
+ type: none
+ device: ./.docker/build
+
+ nodebb-uploads:
+ driver: local
+ driver_opts:
+ o: bind
+ type: none
+ device: ./.docker/public/uploads
+
+ nodebb-config:
+ driver: local
+ driver_opts:
+ o: bind
+ type: none
+ device: ./.docker/config
diff --git a/docker-compose.yml b/docker-compose.yml
index cca3deb496..7f00a1a549 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -1,55 +1,89 @@
-version: '3.8'
-
services:
nodebb:
build: .
+ # image: ghcr.io/nodebb/nodebb:latest
restart: unless-stopped
ports:
- - "4567:4567/tcp" # comment this out if you don't want to expose NodeBB to the host, or change the first number to any port you want
- # uncomment if you want to use another container as a reverse proxy
- # expose:
- # - 4567
+ - '4567:4567' # comment this out if you don't want to expose NodeBB to the host, or change the first number to any port you want
volumes:
- - ./.docker/build:/usr/src/app/build
- - ./.docker/public/uploads:/usr/src/app/public/uploads
- - ./.docker:/opt/config
+ - nodebb-build:/usr/src/app/build
+ - nodebb-uploads:/usr/src/app/public/uploads
+ - nodebb-config:/opt/config
- ./install/docker/setup.json:/usr/src/app/setup.json
+
mongo:
- image: "mongo:7-jammy"
+ image: 'mongo:7-jammy'
restart: unless-stopped
- expose:
- - "27017"
+ ports:
+ - '27017:27017'
environment:
MONGO_INITDB_ROOT_USERNAME: nodebb
MONGO_INITDB_ROOT_PASSWORD: nodebb
MONGO_INITDB_DATABASE: nodebb
volumes:
- - ./.docker/database/mongo/config:/etc/mongo
- - ./.docker/database/mongo/data:/data/db
+ - mongo-data:/data/db
- ./install/docker/mongodb-user-init.js:/docker-entrypoint-initdb.d/user-init.js
- profiles:
- - mongo
- postgres:
- image: postgres:16.1-alpine
+ redis:
+ image: redis:8.6.2-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:18.3-alpine
restart: unless-stopped
- expose:
- - "5432"
environment:
POSTGRES_USER: nodebb
POSTGRES_PASSWORD: nodebb
POSTGRES_DB: nodebb
volumes:
- - ./.docker/database/postgresql/data:/var/lib/postgresql/data
+ - postgres-data:/var/lib/postgresql/data
profiles:
- postgres
- redis:
- image: redis:7.2.3-alpine
- restart: unless-stopped
- command: ["redis-server", "--appendonly", "yes", "--loglevel", "warning"]
- # command: ["redis-server", "--save", "60", "1", "--loglevel", "warning"] # uncomment if you want to use snapshotting instead of AOF
- expose:
- - "6379"
- volumes:
- - ./.docker/database/redis:/data
- profiles:
- - redis
\ No newline at end of file
+
+volumes:
+ mongo-data:
+ driver: local
+ driver_opts:
+ o: bind
+ type: none
+ device: ./.docker/database/mongo/data
+
+ redis-data:
+ driver: local
+ driver_opts:
+ o: bind
+ type: none
+ device: ./.docker/database/redis
+
+ postgres-data:
+ driver: local
+ driver_opts:
+ o: bind
+ type: none
+ device: ./.docker/database/postgresql/data
+
+ nodebb-build:
+ driver: local
+ driver_opts:
+ o: bind
+ type: none
+ device: ./.docker/build
+
+ nodebb-uploads:
+ driver: local
+ driver_opts:
+ o: bind
+ type: none
+ device: ./.docker/public/uploads
+
+ nodebb-config:
+ driver: local
+ driver_opts:
+ o: bind
+ type: none
+ device: ./.docker/config
diff --git a/eslint.config.mjs b/eslint.config.mjs
new file mode 100644
index 0000000000..5b3c417f7d
--- /dev/null
+++ b/eslint.config.mjs
@@ -0,0 +1,70 @@
+'use strict';
+
+import serverConfig from 'eslint-config-nodebb';
+import publicConfig from 'eslint-config-nodebb/public';
+import commonRules from 'eslint-config-nodebb/common';
+
+import { defineConfig } from 'eslint/config';
+import stylisticJs from '@stylistic/eslint-plugin'
+import js from '@eslint/js';
+import globals from 'globals';
+
+export default defineConfig([
+ {
+ ignores: [
+ 'node_modules/',
+ '.project',
+ '.vagrant',
+ '.DS_Store',
+ '.tx',
+ 'logs/',
+ 'public/uploads/',
+ 'public/vendor/',
+ '.idea/',
+ '.vscode/',
+ '*.ipr',
+ '*.iws',
+ 'coverage/',
+ 'build/',
+ 'test/files/',
+ '*.min.js',
+ 'install/docker/',
+ ],
+ },
+ // tests
+ {
+ plugins: {
+ js,
+ '@stylistic/js': stylisticJs,
+ },
+ extends: ['js/recommended'],
+ files: ['test/**/*.js'],
+ languageOptions: {
+ ecmaVersion: 2020,
+ sourceType: 'commonjs',
+ globals: {
+ ...globals.node,
+ ...globals.browser,
+ it: 'readonly',
+ describe: 'readonly',
+ before: 'readonly',
+ beforeEach: 'readonly',
+ after: 'readonly',
+ afterEach: 'readonly',
+ },
+ },
+ rules: {
+ ...commonRules,
+ 'no-unused-vars': 'off',
+ 'no-prototype-builtins': 'off',
+ }
+ },
+ ...publicConfig,
+ ...serverConfig,
+ {
+ rules: {
+ 'preserve-caught-error': 'off'
+ }
+ }
+]);
+
diff --git a/install/data/defaults.json b/install/data/defaults.json
index d60984e99e..a6b25a2732 100644
--- a/install/data/defaults.json
+++ b/install/data/defaults.json
@@ -24,8 +24,8 @@
"newbieChatMessageDelay": 120000,
"notificationSendDelay": 60,
"newbieReputationThreshold": 3,
- "postQueue": 0,
- "postQueueReputationThreshold": 0,
+ "postQueue": 1,
+ "postQueueReputationThreshold": 1,
"groupsExemptFromPostQueue": ["administrators", "Global Moderators"],
"groupsExemptFromNewUserRestrictions": ["administrators", "Global Moderators"],
"groupsExemptFromMaintenanceMode": ["administrators", "Global Moderators"],
@@ -36,27 +36,30 @@
"maximumTagsPerTopic": 5,
"minimumTagLength": 3,
"maximumTagLength": 15,
- "undoTimeout": 10000,
+ "undoTimeout": 0,
"allowTopicsThumbnail": 1,
+ "showPostUploadsAsThumbnails": 1,
"registrationType": "normal",
"registrationApprovalType": "normal",
"allowAccountDelete": 1,
"privateUploads": 0,
- "allowedFileExtensions": "png,jpg,bmp,txt",
+ "allowedFileExtensions": "png,jpg,bmp,txt,webp,webm,mp4,gif",
"uploadRateLimitThreshold": 10,
"uploadRateLimitCooldown": 60,
"allowUserHomePage": 1,
- "allowMultipleBadges": 0,
+ "allowMultipleBadges": 1,
"maximumFileSize": 2048,
"stripEXIFData": 1,
"orphanExpiryDays": 0,
"resizeImageWidthThreshold": 2000,
"resizeImageWidth": 760,
+ "resizeImageKeepOriginal": 1,
"rejectImageWidth": 5000,
"rejectImageHeight": 5000,
"resizeImageQuality": 80,
+ "convertPastedImageTo": "image/jpeg",
"topicThumbSize": 512,
- "minimumTitleLength": 3,
+ "minimumTitleLength": 0,
"maximumTitleLength": 255,
"minimumUsernameLength": 2,
"maximumUsernameLength": 16,
@@ -66,15 +69,16 @@
"maximumAboutMeLength": 1000,
"maximumUsersInChatRoom": 0,
"maximumChatMessageLength": 1000,
+ "maximumRemoteChatMessageLength": 5000,
"maximumChatRoomNameLength": 50,
- "maximumProfileImageSize": 256,
+ "maximumProfileImageSize": 2048,
"maximumCoverImageSize": 2048,
"profileImageDimension": 200,
"profile:convertProfileImageToPNG": 0,
"profile:keepAllUserImages": 0,
"gdpr_enabled": 1,
"allowProfileImageUploads": 1,
- "teaserPost": "last-reply",
+ "teaserPost": "last-post",
"showPostPreviewsOnHover": 1,
"allowPrivateGroups": 1,
"unreadCutoff": 2,
@@ -99,16 +103,21 @@
"min:rep:aboutme": 0,
"min:rep:signature": 0,
"flags:limitPerTarget": 0,
+ "flags:postFlagsPerDay": 10,
+ "flags:userFlagsPerDay": 10,
"flags:autoFlagOnDownvoteThreshold": 0,
"flags:actionOnResolve": "rescind",
"flags:actionOnReject": "rescind",
"notificationType_upvote": "notification",
"notificationType_new-topic": "notification",
+ "notificationType_new-topic-with-tag": "notification",
+ "notificationType_new-topic-in-category": "notification",
"notificationType_new-reply": "notification",
"notificationType_post-edit": "notification",
"notificationType_follow": "notification",
"notificationType_new-chat": "notification",
"notificationType_new-group-chat": "notification",
+ "notificationType_new-public-chat": "none",
"notificationType_group-invite": "notification",
"notificationType_group-leave": "notification",
"notificationType_group-request-membership": "notification",
@@ -133,13 +142,16 @@
"feeds:disableSitemap": 0,
"feeds:disableRSS": 0,
"sitemapTopics": 500,
+ "sitemapCacheDurationHours": 24,
"maintenanceMode": 0,
"maintenanceModeStatus": 503,
- "votesArePublic": 0,
+ "upvoteVisibility": "all",
+ "downvoteVisibility": "privileged",
"maximumInvites": 0,
"username:disableEdit": 0,
"email:disableEdit": 0,
"email:smtpTransport:pool": 0,
+ "email:smtpTransport:allow-self-signed": 0,
"hideFullname": 0,
"hideEmail": 0,
"showFullnameAsDisplayName": 0,
@@ -176,7 +188,7 @@
"onlineCutoff": 30,
"timeagoCutoff": 30,
"necroThreshold": 7,
- "categoryWatchState": "watching",
+ "categoryWatchState": "tracking",
"submitPluginUsage": 1,
"showAverageApprovalTime": 1,
"autoApproveTime": 0,
@@ -187,5 +199,15 @@
"composer:allowPluginHelp": 1,
"maxReconnectionAttempts": 5,
"reconnectionDelay": 1500,
- "disableCustomUserSkins": 0
-}
\ No newline at end of file
+ "disableCustomUserSkins": 0,
+ "activitypubEnabled": 1,
+ "activitypubAllowLoopback": 0,
+ "activitypubProbe": 1,
+ "activitypubProbeTimeout": 2000,
+ "activitypubContentPruneDays": 30,
+ "activitypubUserPruneDays": 7,
+ "activitypubFilter": 0,
+ "activitypubSummaryLimit": 500,
+ "activitypubBreakString": "[...]",
+ "activitypubWorldDefaultCid": -1
+}
diff --git a/install/data/navigation.json b/install/data/navigation.json
index 5a744dbdf7..0532dae545 100644
--- a/install/data/navigation.json
+++ b/install/data/navigation.json
@@ -41,6 +41,14 @@
"textClass": "d-lg-none",
"text": "[[global:header.popular]]"
},
+ {
+ "route": "/world",
+ "title": "[[global:header.world]]",
+ "enabled": true,
+ "iconClass": "fa-globe",
+ "textClass": "d-lg-none",
+ "text": "[[global:header.world]]"
+ },
{
"route": "/users",
"title": "[[global:header.users]]",
diff --git a/install/docker/entrypoint.sh b/install/docker/entrypoint.sh
index e5b2036321..98579fd68c 100755
--- a/install/docker/entrypoint.sh
+++ b/install/docker/entrypoint.sh
@@ -1,46 +1,238 @@
#!/bin/bash
-export CONFIG_DIR="${CONFIG_DIR:-/opt/config}"
-export CONFIG=$CONFIG_DIR/config.json
-export FORCE_BUILD_BEFORE_START="${FORCE_BUILD_BEFORE_START:-false}"
+set -e
-# Supported verbs: install (web install), setup (interactive CLI session). Default: web install
-# TODO: constraint it using a hash set (or hash table)
-export NODEBB_INIT_VERB="${NODEBB_INIT_VERB:-install}"
-# Setup variable for backward compatibility, default:
-export SETUP="${SETUP:-}"
+# Function to set default values for environment variables
+set_defaults() {
+ export CONFIG_DIR="${CONFIG_DIR:-/opt/config}"
+ export CONFIG="$CONFIG_DIR/config.json"
+ export NODEBB_INIT_VERB="${NODEBB_INIT_VERB:-install}"
+ export NODEBB_BUILD_VERB="${NODEBB_BUILD_VERB:-build}"
+ export START_BUILD="${START_BUILD:-${FORCE_BUILD_BEFORE_START:-false}}"
+ export SETUP="${SETUP:-}"
+ export PACKAGE_MANAGER="${PACKAGE_MANAGER:-npm}"
+ export OVERRIDE_UPDATE_LOCK="${OVERRIDE_UPDATE_LOCK:-false}"
+ export NODEBB_ADDITIONAL_PLUGINS="${NODEBB_ADDITIONAL_PLUGINS:-}"
+}
-mkdir -p $CONFIG_DIR
-
-# if the folder is mounted as a volume this can fail, the check below is to ensure there is still write access
-chmod -fR 760 $CONFIG_DIR 2> /dev/null
-
-if [[ ! -w $CONFIG_DIR ]]; then
- echo "panic: no write permission for $CONFIG_DIR"
- exit 1
-fi
-
-[[ -f $CONFIG_DIR/package.json ]] || cp install/package.json $CONFIG_DIR/package.json
-[[ -f $CONFIG_DIR/package-lock.json ]] || touch $CONFIG_DIR/package-lock.json
-
-ln -fs $CONFIG_DIR/package.json package.json
-ln -fs $CONFIG_DIR/package-lock.json package-lock.json
-
-npm install --omit=dev
-
-if [[ -n $SETUP ]]; then
- echo "Setup environmental variable detected"
- echo "Starting setup session"
- ./nodebb setup --config=$CONFIG
-elif [ -f $CONFIG ]; then
- echo "Config file exist at $CONFIG, assuming it is a valid config"
- echo "Starting forum"
- if [ "$FORCE_BUILD_BEFORE_START" = true ]; then
- ./nodebb build --config=$CONFIG
+# Function to check if a directory exists and is writable
+check_directory() {
+ local dir="$1"
+ if [ ! -d "$dir" ]; then
+ echo "Error: Directory $dir does not exist. Creating..."
+ mkdir -p "$dir" || {
+ echo "Error: Failed to create directory $dir"
+ exit 1
+ }
fi
- ./nodebb start --config=$CONFIG
-else
- echo "Config file not found at $CONFIG"
+ if [ ! -w "$dir" ]; then
+ echo "Warning: No write permission for directory $dir, attempting to fix..."
+ chown -R $USER:$USER "$dir" || true # attempt to change ownership, do not exit on failure
+ chmod -R 760 "$dir" || true # attempt to change permissions, do not exit on failure
+ if [ ! -w "$dir" ]; then
+ echo "Error: No write permission for directory $dir. Exiting..."
+ exit 1
+ fi
+ fi
+}
+
+# Function to copy or link package.json and lock files based on package manager
+copy_or_link_files() {
+ local src_dir="$1"
+ local dest_dir="$2"
+ local package_manager="$3"
+ local lock_file
+
+ case "$package_manager" in
+ yarn) lock_file="yarn.lock" ;;
+ npm) lock_file="package-lock.json" ;;
+ pnpm) lock_file="pnpm-lock.yaml" ;;
+ *)
+ echo "Unknown package manager: $package_manager"
+ exit 1
+ ;;
+ esac
+
+ # Check if source and destination files are the same
+ if [ "$(realpath "$src_dir/package.json")" != "$(realpath "$dest_dir/package.json")" ] || [ "$OVERRIDE_UPDATE_LOCK" = true ]; then
+ cp "$src_dir/package.json" "$dest_dir/package.json"
+ fi
+
+ if [ "$(realpath "$src_dir/$lock_file")" != "$(realpath "$dest_dir/$lock_file")" ] || [ "$OVERRIDE_UPDATE_LOCK" = true ]; then
+ cp "$src_dir/$lock_file" "$dest_dir/$lock_file"
+ fi
+
+ # Remove unnecessary lock files in src_dir
+ rm -f "$src_dir/"{yarn.lock,package-lock.json,pnpm-lock.yaml}
+
+ # Symbolically link the copied files in src_dir to dest_dir
+ ln -fs "$dest_dir/package.json" "$src_dir/package.json"
+ ln -fs "$dest_dir/$lock_file" "$src_dir/$lock_file"
+}
+
+# Function to install dependencies using npm/yarn/pnpm
+install_dependencies() {
+ case "$PACKAGE_MANAGER" in
+ yarn) yarn install || {
+ echo "Failed to install dependencies with yarn"
+ exit 1
+ } ;;
+ npm) npm install || {
+ echo "Failed to install dependencies with npm"
+ exit 1
+ } ;;
+ pnpm) pnpm install || {
+ echo "Failed to install dependencies with pnpm"
+ exit 1
+ } ;;
+ *)
+ echo "Unknown package manager: $PACKAGE_MANAGER"
+ exit 1
+ ;;
+ esac
+}
+
+# Function to start setup session
+start_setup_session() {
+ local config="$1"
+ echo "Starting setup session"
+ exec /usr/src/app/nodebb setup --config="$config"
+}
+
+# Handle building and upgrading NodeBB
+build_forum() {
+ local config="$1"
+ local start_build="$2"
+ local package_hash=$(md5sum install/package.json | head -c 32)
+ if [ "$package_hash" != "$(cat $CONFIG_DIR/install_hash.md5 || true)" ]; then
+ echo "package.json was updated. Upgrading..."
+ /usr/src/app/nodebb upgrade --config="$config" || {
+ echo "Failed to build NodeBB. Exiting..."
+ exit 1
+ }
+ elif [ "$start_build" = true ]; then
+ echo "Build before start is enabled. Building..."
+ /usr/src/app/nodebb "${NODEBB_BUILD_VERB}" --config="$config" || {
+ echo "Failed to build NodeBB. Exiting..."
+ exit 1
+ }
+ else
+ echo "No changes in package.json. Skipping build..."
+ return
+ fi
+ echo -n $package_hash > $CONFIG_DIR/install_hash.md5
+}
+
+
+# Function to start forum
+start_forum() {
+ local config="$1"
+ local start_build="$2"
+
+ build_forum "$config" "$start_build"
+
+ case "$PACKAGE_MANAGER" in
+ yarn)
+ yarn start --config="$config" --no-silent --no-daemon || {
+ echo "Failed to start forum with yarn"
+ exit 1
+ }
+ ;;
+ npm)
+ npm start -- --config="$config" --no-silent --no-daemon || {
+ echo "Failed to start forum with npm"
+ exit 1
+ }
+ ;;
+ pnpm)
+ pnpm start -- --config="$config" --no-silent --no-daemon || {
+ echo "Failed to start forum with pnpm"
+ exit 1
+ }
+ ;;
+ *)
+ echo "Unknown package manager: $PACKAGE_MANAGER"
+ exit 1
+ ;;
+ esac
+}
+
+# Function to start installation session
+start_installation_session() {
+ local nodebb_init_verb="$1"
+ local config="$2"
+
+ echo "Config file not found at $config"
echo "Starting installation session"
- ./nodebb "${NODEBB_INIT_VERB}" --config=$CONFIG
-fi
\ No newline at end of file
+ exec /usr/src/app/nodebb "$nodebb_init_verb" --config="$config"
+}
+
+# Function for debugging and logging
+debug_log() {
+ local message="$1"
+ echo "DEBUG: $message"
+}
+
+install_additional_plugins() {
+ if [[ -n ${NODEBB_ADDITIONAL_PLUGINS} ]]; then
+ # Create a local array to work with
+ local plugins_to_install=()
+
+ # check if NODEBB_ADDITIONAL_PLUGINS is an array or a space-separated string
+ if [[ "$(declare -p NODEBB_ADDITIONAL_PLUGINS 2>/dev/null)" == "declare -a"* ]]; then
+ plugins_to_install=("${NODEBB_ADDITIONAL_PLUGINS[@]}")
+ else
+ plugins_to_install=(${NODEBB_ADDITIONAL_PLUGINS})
+ fi
+
+ export START_BUILD="true"
+ for plugin in "${plugins_to_install[@]}"; do
+ echo "Installing additional plugin ${plugin}..."
+ case "$PACKAGE_MANAGER" in
+ yarn) yarn add "${plugin}" || {
+ echo "Failed to install plugin ${plugin} with yarn"
+ exit 1
+ } ;;
+ npm) npm install "${plugin}" || {
+ echo "Failed to install plugin ${plugin} with npm"
+ exit 1
+ } ;;
+ pnpm) pnpm add "${plugin}" || {
+ echo "Failed to install plugin ${plugin} with pnpm"
+ exit 1
+ } ;;
+ *)
+ echo "Unknown package manager: $PACKAGE_MANAGER"
+ exit 1
+ ;;
+ esac
+ done
+ fi
+}
+
+# Main function
+main() {
+ set_defaults
+ check_directory "$CONFIG_DIR"
+ copy_or_link_files /usr/src/app "$CONFIG_DIR" "$PACKAGE_MANAGER"
+ install_dependencies
+
+ debug_log "PACKAGE_MANAGER: $PACKAGE_MANAGER"
+ debug_log "CONFIG location: $CONFIG"
+ debug_log "START_BUILD: $START_BUILD"
+ debug_log "NODEBB_ADDITIONAL_PLUGINS: ${NODEBB_ADDITIONAL_PLUGINS}"
+
+ if [ -n "$SETUP" ]; then
+ start_setup_session "$CONFIG"
+ fi
+
+ if [ -f "$CONFIG" ]; then
+ install_additional_plugins
+ start_forum "$CONFIG" "$START_BUILD"
+ else
+ start_installation_session "$NODEBB_INIT_VERB" "$CONFIG"
+ fi
+}
+
+# Execute main function
+main "$@"
diff --git a/install/docker/setup.json b/install/docker/setup.json
index 3fad840593..a9fa9017bb 100644
--- a/install/docker/setup.json
+++ b/install/docker/setup.json
@@ -1,21 +1,23 @@
{
- "mongo": {
- "host": "mongo",
- "port": 27017,
- "database": "nodebb",
- "username": "nodebb",
- "password": "nodebb"
- },
- "redis": {
- "host": "redis",
- "port": 6379,
- "database": 0
- },
- "postgres": {
- "host": "postgres",
- "port": 5432,
- "database": "nodebb",
- "username": "nodebb",
- "password": "nodebb"
+ "defaults": {
+ "mongo": {
+ "host": "mongo",
+ "port": 27017,
+ "database": "nodebb",
+ "username": "nodebb",
+ "password": "nodebb"
+ },
+ "redis": {
+ "host": "redis",
+ "port": 6379,
+ "database": 0
+ },
+ "postgres": {
+ "host": "postgres",
+ "port": 5432,
+ "database": "nodebb",
+ "username": "nodebb",
+ "password": "nodebb"
+ }
}
}
\ No newline at end of file
diff --git a/install/package.json b/install/package.json
index fcab369b69..a25861a599 100644
--- a/install/package.json
+++ b/install/package.json
@@ -2,7 +2,7 @@
"name": "nodebb",
"license": "GPL-3.0",
"description": "NodeBB Forum",
- "version": "3.5.1",
+ "version": "4.10.1",
"homepage": "https://www.nodebb.org",
"repository": {
"type": "git",
@@ -29,150 +29,160 @@
},
"dependencies": {
"@adactive/bootstrap-tagsinput": "0.8.2",
- "@fontsource/inter": "5.0.15",
- "@fontsource/poppins": "5.0.8",
- "@fortawesome/fontawesome-free": "6.4.2",
- "@isaacs/ttlcache": "1.4.1",
+ "@fontsource-utils/scss": "0.2.2",
+ "@fontsource/inter": "5.2.8",
+ "@fontsource/poppins": "5.2.7",
+ "@fortawesome/fontawesome-free": "6.7.2",
+ "@isaacs/ttlcache": "2.1.4",
+ "@nodebb/spider-detector": "2.0.3",
"@popperjs/core": "2.11.8",
- "ace-builds": "1.31.2",
- "archiver": "6.0.1",
- "async": "3.2.5",
- "autoprefixer": "10.4.16",
- "bcryptjs": "2.4.3",
- "benchpressjs": "2.5.1",
- "body-parser": "1.20.2",
- "bootbox": "6.0.0",
- "bootstrap": "5.3.2",
- "bootswatch": "5.3.2",
+ "@textcomplete/contenteditable": "0.1.13",
+ "@textcomplete/core": "0.1.13",
+ "@textcomplete/textarea": "0.1.13",
+ "ace-builds": "1.43.6",
+ "archiver": "7.0.1",
+ "async": "3.2.6",
+ "autoprefixer": "10.4.27",
+ "bcryptjs": "3.0.3",
+ "benchpressjs": "2.5.5",
+ "body-parser": "2.2.2",
+ "bootbox": "6.0.4",
+ "bootstrap": "5.3.8",
+ "bootswatch": "5.3.8",
"chalk": "4.1.2",
- "chart.js": "4.4.0",
+ "chart.js": "4.5.1",
"cli-graph": "3.2.2",
"clipboard": "2.0.11",
- "colors": "1.4.0",
- "commander": "11.1.0",
- "compare-versions": "6.1.0",
- "compression": "1.7.4",
+ "commander": "14.0.3",
+ "compare-versions": "6.1.1",
+ "compression": "1.8.1",
"connect-flash": "0.1.1",
- "connect-mongo": "5.1.0",
- "connect-multiparty": "2.2.0",
- "connect-pg-simple": "9.0.1",
- "connect-redis": "7.1.0",
- "cookie-parser": "1.4.6",
- "cron": "3.1.6",
- "cropperjs": "1.6.1",
- "csrf-sync": "4.0.1",
+ "connect-mongo": "6.0.0",
+ "connect-pg-simple": "10.0.0",
+ "connect-redis": "9.0.0",
+ "cookie-parser": "1.4.7",
+ "cron": "4.4.0",
+ "cronstrue": "3.14.0",
+ "cropperjs": "1.6.2",
+ "csrf-sync": "4.2.1",
+ "csv-parse": "6.2.1",
"daemon": "1.1.0",
- "diff": "5.1.0",
- "esbuild": "0.19.5",
- "express": "4.18.2",
- "express-session": "1.17.3",
- "express-useragent": "1.0.15",
+ "diff": "8.0.4",
+ "esbuild": "0.27.4",
+ "express": "4.22.1",
+ "express-session": "1.19.0",
+ "express-useragent": "2.1.0",
+ "fetch-cookie": "3.2.0",
"file-loader": "6.2.0",
- "fs-extra": "11.1.1",
+ "fs-extra": "11.3.4",
"graceful-fs": "4.2.11",
- "helmet": "7.1.0",
+ "helmet": "7.2.0",
"html-to-text": "9.0.5",
"imagesloaded": "5.0.0",
- "ipaddr.js": "2.1.0",
+ "ipaddr.js": "2.3.0",
"jquery": "3.7.1",
"jquery-deserialize": "2.0.0",
"jquery-form": "4.3.0",
"jquery-serializeobject": "1.0.0",
- "jquery-ui": "1.13.2",
- "jsesc": "3.0.2",
+ "jquery-ui": "1.14.1",
+ "jsesc": "3.1.0",
"json2csv": "5.0.7",
- "jsonwebtoken": "9.0.2",
- "lodash": "4.17.21",
+ "jsonwebtoken": "9.0.3",
+ "lodash": "4.17.23",
"logrotate-stream": "0.2.9",
- "lru-cache": "10.0.2",
+ "lru-cache": "11.2.7",
"mime": "3.0.0",
"mkdirp": "3.0.1",
- "mongodb": "6.3.0",
- "morgan": "1.10.0",
+ "mongodb": "7.1.1",
+ "morgan": "1.10.1",
"mousetrap": "1.6.5",
- "multiparty": "4.2.3",
- "nconf": "0.12.1",
- "nodebb-plugin-2factor": "7.4.0",
- "nodebb-plugin-composer-default": "10.2.27",
- "nodebb-plugin-dbsearch": "6.2.3",
- "nodebb-plugin-emoji": "5.1.13",
- "nodebb-plugin-emoji-android": "4.0.0",
- "nodebb-plugin-markdown": "12.2.5",
- "nodebb-plugin-mentions": "4.3.7",
- "nodebb-plugin-ntfy": "1.7.3",
- "nodebb-plugin-spam-be-gone": "2.2.0",
- "nodebb-rewards-essentials": "1.0.0",
- "nodebb-theme-harmony": "1.1.99",
- "nodebb-theme-lavender": "7.1.5",
- "nodebb-theme-peace": "2.1.25",
- "nodebb-theme-persona": "13.2.47",
- "nodebb-widget-essentials": "7.0.14",
- "nodemailer": "6.9.7",
+ "multer": "2.1.1",
+ "nconf": "0.13.0",
+ "nodebb-plugin-2factor": "7.6.1",
+ "nodebb-plugin-composer-default": "10.3.28",
+ "nodebb-plugin-dbsearch": "6.4.1",
+ "nodebb-plugin-emoji": "6.0.6",
+ "nodebb-plugin-emoji-android": "4.1.1",
+ "nodebb-plugin-link-preview": "2.2.3",
+ "nodebb-plugin-markdown": "13.2.4",
+ "nodebb-plugin-mentions": "4.8.18",
+ "nodebb-plugin-spam-be-gone": "2.3.2",
+ "nodebb-plugin-web-push": "0.7.7",
+ "nodebb-rewards-essentials": "1.0.2",
+ "nodebb-theme-harmony": "2.2.63",
+ "nodebb-theme-lavender": "7.1.21",
+ "nodebb-theme-peace": "2.2.58",
+ "nodebb-theme-persona": "14.2.34",
+ "nodebb-widget-essentials": "7.0.43",
+ "nodemailer": "8.0.4",
"nprogress": "0.2.0",
- "passport": "0.6.0",
+ "passport": "0.7.0",
"passport-http-bearer": "1.0.1",
"passport-local": "1.0.0",
- "pg": "8.11.3",
- "pg-cursor": "2.10.3",
- "postcss": "8.4.31",
+ "pg": "8.20.0",
+ "pg-cursor": "2.19.0",
+ "postcss": "8.5.8",
"postcss-clean": "1.2.0",
+ "pretty": "^2.0.0",
"progress-webpack-plugin": "1.0.16",
"prompt": "1.3.0",
- "ioredis": "5.3.2",
- "request": "2.88.2",
- "request-promise-native": "1.0.9",
- "rimraf": "5.0.5",
+ "qs": "6.15.0",
+ "redis": "5.11.0",
+ "rimraf": "6.1.3",
"rss": "1.2.2",
- "rtlcss": "4.1.1",
- "sanitize-html": "2.11.0",
- "sass": "1.69.5",
- "semver": "7.5.4",
- "serve-favicon": "2.5.0",
- "sharp": "0.32.6",
- "sitemap": "7.1.1",
- "socket.io": "4.7.2",
- "socket.io-client": "4.7.2",
- "@socket.io/redis-adapter": "8.2.1",
- "sortablejs": "1.15.0",
- "spdx-license-list": "6.8.0",
- "spider-detector": "2.0.1",
- "terser-webpack-plugin": "5.3.9",
+ "rtlcss": "4.3.0",
+ "sanitize-html": "2.17.2",
+ "sass": "1.98.0",
+ "satori": "0.26.0",
+ "sbd": "^1.0.19",
+ "semver": "7.7.4",
+ "serve-favicon": "2.5.1",
+ "sharp": "0.34.5",
+ "sitemap": "9.0.1",
+ "socket.io": "4.8.3",
+ "socket.io-client": "4.8.3",
+ "@socket.io/redis-adapter": "8.3.0",
+ "sortablejs": "1.15.7",
+ "spdx-license-list": "6.11.0",
+ "terser-webpack-plugin": "5.4.0",
"textcomplete": "0.18.2",
"textcomplete.contenteditable": "0.1.1",
"timeago": "1.6.7",
"tinycon": "0.6.8",
"toobusy-js": "0.5.1",
- "validator": "13.11.0",
- "webpack": "5.89.0",
- "webpack-merge": "5.10.0",
- "winston": "3.11.0",
- "workerpool": "8.0.0",
+ "tough-cookie": "6.0.1",
+ "undici": "^7.10.0",
+ "validator": "13.15.26",
+ "webpack": "5.105.4",
+ "webpack-merge": "6.0.1",
+ "winston": "3.19.0",
+ "workerpool": "10.0.1",
"xml": "1.0.1",
- "xregexp": "5.1.1",
"yargs": "17.7.2",
"zxcvbn": "4.4.2"
},
"devDependencies": {
"@apidevtools/swagger-parser": "10.1.0",
- "@commitlint/cli": "18.4.2",
- "@commitlint/config-angular": "18.4.2",
+ "@commitlint/cli": "20.5.0",
+ "@commitlint/config-angular": "20.5.0",
"coveralls": "3.1.1",
- "eslint": "8.54.0",
- "eslint-config-nodebb": "0.2.1",
- "eslint-plugin-import": "2.29.0",
+ "@eslint/js": "10.0.1",
+ "@stylistic/eslint-plugin": "5.10.0",
+ "eslint-config-nodebb": "2.0.1",
+ "globals": "17.4.0",
"grunt": "1.6.1",
"grunt-contrib-watch": "1.1.0",
"husky": "8.0.3",
- "jsdom": "22.1.0",
- "lint-staged": "15.1.0",
- "mocha": "10.2.0",
+ "jsdom": "29.0.1",
+ "lint-staged": "16.4.0",
+ "mocha": "11.7.5",
"mocha-lcov-reporter": "1.3.0",
"mockdate": "3.0.5",
- "nyc": "15.1.0",
- "smtp-server": "3.13.0"
+ "nyc": "18.0.0",
+ "smtp-server": "3.18.3"
},
"optionalDependencies": {
- "sass-embedded": "1.69.5"
+ "sass-embedded": "1.98.0"
},
"resolutions": {
"*/jquery": "3.7.1"
@@ -181,7 +191,7 @@
"url": "https://github.com/NodeBB/NodeBB/issues"
},
"engines": {
- "node": ">=16"
+ "node": ">=20"
},
"maintainers": [
{
@@ -195,4 +205,4 @@
"url": "https://github.com/barisusakli"
}
]
-}
+}
\ No newline at end of file
diff --git a/install/web.js b/install/web.js
index 92fe675c22..cd38c3be6e 100644
--- a/install/web.js
+++ b/install/web.js
@@ -2,6 +2,7 @@
const winston = require('winston');
const express = require('express');
+const session = require('express-session');
const bodyParser = require('body-parser');
const fs = require('fs');
const path = require('path');
@@ -13,7 +14,10 @@ const nconf = require('nconf');
const Benchpress = require('benchpressjs');
const { mkdirp } = require('mkdirp');
const { paths } = require('../src/constants');
-const sass = require('../src/utils').getSass();
+const utils = require('../src/utils');
+
+const sass = utils.getSass();
+const { generateToken, csrfSynchronisedProtection } = require('../src/middleware/csrf');
const app = express();
let server;
@@ -73,6 +77,13 @@ web.install = async function (port) {
app.use(bodyParser.urlencoded({
extended: true,
}));
+
+ app.use(session({
+ secret: utils.generateUUID(),
+ resave: false,
+ saveUninitialized: false,
+ }));
+
try {
await Promise.all([
compileTemplate(),
@@ -103,8 +114,8 @@ function launchExpress(port) {
}
function setupRoutes() {
- app.get('/', welcome);
- app.post('/', install);
+ app.get('/', csrfSynchronisedProtection, welcome);
+ app.post('/', csrfSynchronisedProtection, install);
app.get('/testdb', testDatabase);
app.get('/ping', ping);
app.get('/sping', ping);
@@ -160,6 +171,7 @@ function welcome(req, res) {
minimumPasswordStrength: defaults.minimumPasswordStrength,
installing: installing,
percentInstalled: installing ? ((Date.now() - timeStart) / totalTime * 100).toFixed(2) : 0,
+ csrf_token: generateToken(req),
});
}
diff --git a/loader.js b/loader.js
index a960327208..334e156192 100644
--- a/loader.js
+++ b/loader.js
@@ -2,7 +2,6 @@
const nconf = require('nconf');
const fs = require('fs');
-const url = require('url');
const path = require('path');
const { fork } = require('child_process');
const logrotate = require('logrotate-stream');
@@ -26,7 +25,7 @@ if (!fs.existsSync(logDir)) {
mkdirp.sync(path.dirname(outputLogFilePath));
}
-const output = logrotate({ file: outputLogFilePath, size: '1m', keep: 3, compress: true });
+const output = logrotate({ file: outputLogFilePath, size: '10m', keep: 3, compress: true });
const silent = nconf.get('silent') === 'false' ? false : nconf.get('silent') !== false;
let numProcs;
const workers = [];
@@ -99,6 +98,13 @@ Loader.start = function () {
function forkWorker(index, isPrimary) {
const ports = getPorts();
const args = [];
+ const execArgv = [];
+ if (nconf.get('max-memory')) {
+ execArgv.push(`--max-old-space-size=${nconf.get('max-memory')}`);
+ }
+ if (nconf.get('expose-gc')) {
+ execArgv.push('--expose-gc');
+ }
if (!ports[index]) {
return console.log(`[cluster] invalid port for worker : ${index} ports: ${ports.length}`);
@@ -107,10 +113,10 @@ function forkWorker(index, isPrimary) {
process.env.isPrimary = isPrimary;
process.env.isCluster = nconf.get('isCluster') || ports.length > 1;
process.env.port = ports[index];
-
const worker = fork(appPath, args, {
silent: silent,
env: process.env,
+ execArgv: execArgv,
});
worker.index = index;
@@ -133,7 +139,7 @@ function getPorts() {
console.log('[cluster] url is undefined, please check your config.json');
process.exit();
}
- const urlObject = url.parse(_url);
+ const urlObject = new URL(_url);
let port = nconf.get('PORT') || nconf.get('port') || urlObject.port || 4567;
if (!Array.isArray(port)) {
port = [port];
diff --git a/public/.eslintrc b/public/.eslintrc
deleted file mode 100644
index a3ce8297a6..0000000000
--- a/public/.eslintrc
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "extends": "nodebb/public"
-}
diff --git a/public/500.html b/public/500.html
new file mode 100644
index 0000000000..eec0e49f7a
--- /dev/null
+++ b/public/500.html
@@ -0,0 +1,41 @@
+
+
+ Internal Server Error
+
+
+
+
+
+
+
+
+
500
+
+ Internal server error.
+
+
+ {message}
+
+
+ Alright. You can stop clicking... it's not going to make the site come back sooner!
+
+
+
+
+
diff --git a/public/503.html b/public/503.html
index 43d1e648d9..51d0e52d53 100644
--- a/public/503.html
+++ b/public/503.html
@@ -2,147 +2,12 @@
Excessive Load Warning
-
+
+
+
+
[[search:no-matches]]
+
+
+
+
+
+
+
+
+ {{{ end }}}
+
\ No newline at end of file
diff --git a/src/views/partials/chats/message.tpl b/src/views/partials/chats/message.tpl
new file mode 100644
index 0000000000..3d2e0ce122
--- /dev/null
+++ b/src/views/partials/chats/message.tpl
@@ -0,0 +1,76 @@
+
+
+ {{{ if messages.parent }}}
+
+ {{{ end }}}
+
+
+
+
+ {messages.content}
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/partials/chats/messages.tpl b/src/views/partials/chats/messages.tpl
new file mode 100644
index 0000000000..d59cce50a5
--- /dev/null
+++ b/src/views/partials/chats/messages.tpl
@@ -0,0 +1,7 @@
+{{{each messages}}}
+ {{{ if !./system }}}
+
+ {{{ else }}}
+
+ {{{ end }}}
+{{{end}}}
\ No newline at end of file
diff --git a/src/views/partials/chats/options.tpl b/src/views/partials/chats/options.tpl
new file mode 100644
index 0000000000..88deba08d2
--- /dev/null
+++ b/src/views/partials/chats/options.tpl
@@ -0,0 +1,100 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{{ if users.length }}}
+
+
+ {{{ if ./users.0 }}}
+ {buildAvatar(./users.0, "24px", true)}
+ {{{ end }}}
+ {{{ if ./users.1 }}}
+ {buildAvatar(./users.1, "24px", true)}
+ {{{ end }}}
+ {{{ if ./users.2 }}}
+ {buildAvatar(./users.2, "24px", true)}
+ {{{ end }}}
+
+ {formattedNumber(./userCount)}
+
+ {{{ end }}}
+
diff --git a/src/views/partials/chats/parent.tpl b/src/views/partials/chats/parent.tpl
new file mode 100644
index 0000000000..81e566a6d4
--- /dev/null
+++ b/src/views/partials/chats/parent.tpl
@@ -0,0 +1,12 @@
+
+
+
+
{messages.parent.content}
+
+
\ No newline at end of file
diff --git a/src/views/partials/chats/pinned-messages-list.tpl b/src/views/partials/chats/pinned-messages-list.tpl
new file mode 100644
index 0000000000..7fbe978328
--- /dev/null
+++ b/src/views/partials/chats/pinned-messages-list.tpl
@@ -0,0 +1,32 @@
+{{{ each messages }}}
+
+
+ {{{ if messages.parent }}}
+
+ {{{ end }}}
+
+
+
+
+ {messages.content}
+
+
+
+ {{{ if (isAdminOrGlobalMod || (!config.disableChatMessageEditing && messages.self)) }}}
+
+ {{{ end }}}
+ {{{ if (isAdminOrGlobalMod || isOwner )}}}
+
+
+ {{{ end }}}
+
+
+
+
+{{{ end }}}
\ No newline at end of file
diff --git a/src/views/partials/chats/pinned-messages.tpl b/src/views/partials/chats/pinned-messages.tpl
new file mode 100644
index 0000000000..20d33f9c1d
--- /dev/null
+++ b/src/views/partials/chats/pinned-messages.tpl
@@ -0,0 +1,12 @@
+
+
[[modules:chat.pinned-messages]]
+
+
+
+
[[modules:chat.no-pinned-messages]]
+
+
+
+
diff --git a/src/views/partials/chats/reactions.tpl b/src/views/partials/chats/reactions.tpl
new file mode 100644
index 0000000000..c8f127e786
--- /dev/null
+++ b/src/views/partials/chats/reactions.tpl
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/views/partials/chats/recent_room.tpl b/src/views/partials/chats/recent_room.tpl
new file mode 100644
index 0000000000..2ba8314a0f
--- /dev/null
+++ b/src/views/partials/chats/recent_room.tpl
@@ -0,0 +1,51 @@
+{{{ if (loadingMore && @first)}}}
+
+{{{ end }}}
+
+{{{ if !@last }}}
+
+{{{ else }}}
+{{{ if showBottomHr }}}
+
+{{{ end }}}
+{{{ end }}}
diff --git a/src/views/partials/chats/room-teaser.tpl b/src/views/partials/chats/room-teaser.tpl
new file mode 100644
index 0000000000..ee5aa856d8
--- /dev/null
+++ b/src/views/partials/chats/room-teaser.tpl
@@ -0,0 +1,10 @@
+
+ {{{ if ./teaser }}}
+
+ {buildAvatar(./teaser.user, "14px", true, "align-middle")}
+ {./teaser.user.displayname}:
+ {./teaser.content}
+
+
{{{ if ./teaser.timeagoLong }}}{./teaser.timeagoLong}{{{ else }}} {{{ end }}}
+ {{{ end }}}
+
\ No newline at end of file
diff --git a/src/views/partials/chats/scroll-up-alert.tpl b/src/views/partials/chats/scroll-up-alert.tpl
new file mode 100644
index 0000000000..52601bfa47
--- /dev/null
+++ b/src/views/partials/chats/scroll-up-alert.tpl
@@ -0,0 +1,3 @@
+
+
[[modules:chat.scroll-up-alert]]
+
\ No newline at end of file
diff --git a/src/views/partials/chats/system-message.tpl b/src/views/partials/chats/system-message.tpl
new file mode 100644
index 0000000000..04cbfcf588
--- /dev/null
+++ b/src/views/partials/chats/system-message.tpl
@@ -0,0 +1,7 @@
+
+
+
+ [[modules:chat.system.{messages.content}, {messages.fromUser.displayname}, {messages.timestampISO}]]
+
+
+
\ No newline at end of file
diff --git a/src/views/partials/chats/user-list.tpl b/src/views/partials/chats/user-list.tpl
new file mode 100644
index 0000000000..5825ab7874
--- /dev/null
+++ b/src/views/partials/chats/user-list.tpl
@@ -0,0 +1,11 @@
+
\ No newline at end of file
diff --git a/src/views/partials/chats/user.tpl b/src/views/partials/chats/user.tpl
new file mode 100644
index 0000000000..9ed5b71fbf
--- /dev/null
+++ b/src/views/partials/chats/user.tpl
@@ -0,0 +1 @@
+{buildAvatar(rooms.users, "32px", true)}
\ No newline at end of file
diff --git a/src/views/partials/custom-reason.tpl b/src/views/partials/custom-reason.tpl
new file mode 100644
index 0000000000..50af17294b
--- /dev/null
+++ b/src/views/partials/custom-reason.tpl
@@ -0,0 +1,20 @@
+
+
+
[[admin/manage/users:temp-ban.reason]]
+ {{{ if reasons.length }}}
+
+
+ [[admin/manage/users:temp-ban.select-reason]]
+
+
+
+
+ {{{ end }}}
+
+
+
+
\ No newline at end of file
diff --git a/src/views/partials/data/topic.tpl b/src/views/partials/data/topic.tpl
index 4c3b70640c..846d17eb40 100644
--- a/src/views/partials/data/topic.tpl
+++ b/src/views/partials/data/topic.tpl
@@ -1 +1 @@
-data-index="{posts.index}" data-pid="{posts.pid}" data-uid="{posts.uid}" data-timestamp="{posts.timestamp}" data-username="{posts.user.username}" data-userslug="{posts.user.userslug}"{{{ if posts.allowDupe }}} data-allow-dupe="1"{{{ end }}}{{{ if posts.navigatorIgnore }}} data-navigator-ignore="1"{{{ end }}} itemscope itemtype="http://schema.org/Comment"
\ No newline at end of file
+data-index="{posts.index}" data-pid="{posts.pid}" data-uid="{posts.uid}" data-timestamp="{posts.timestamp}" data-username="{posts.user.username}" data-userslug="{posts.user.userslug}"{{{ if posts.allowDupe }}} data-allow-dupe="1"{{{ end }}}{{{ if posts.navigatorIgnore }}} data-navigator-ignore="1"{{{ end }}} itemprop="comment" itemtype="http://schema.org/Comment" itemscope
\ No newline at end of file
diff --git a/src/views/partials/feed/item.tpl b/src/views/partials/feed/item.tpl
new file mode 100644
index 0000000000..daf69dfd44
--- /dev/null
+++ b/src/views/partials/feed/item.tpl
@@ -0,0 +1,94 @@
+
+ {{{ if (showThumbs && ./topic.thumbs.length)}}}
+
+
+
+
+ {{{ each ./topic.thumbs }}}
+ {{{ if (@index != 0) }}}
+
+ {{{ end }}}
+ {{{ end }}}
+ {{{ if greaterthan(./topic.thumbs.length, "4") }}}
+
+{increment(./topic.thumbs.length, "-3")}
+ {{{ end }}}
+
+
+ {{{ end }}}
+
+
+
+
+
+
+
+
+ {{{ if (./category.cid != "-1") }}}
+ {buildCategoryLabel(./category, "a", "border text-xs flex-shrink-0")}
+ {{{ end }}}
+ {{{ if showSelect }}}
+
+
+
+ {{{ end }}}
+
+
+
+
+
+
+
[[world:see-more]]
+
+
+ {{{ if ./topic.teaser }}}
+
+ {{{ if (./replies && (./replies != "1")) }}}
+
[[global:read-more]] →
+ {{{ end }}}
+
+
+
+
+ {./topic.teaser.content}
+
+
+
+ {{{ end }}}
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/partials/flags/bulk-actions.tpl b/src/views/partials/flags/bulk-actions.tpl
new file mode 100644
index 0000000000..31a6242a9e
--- /dev/null
+++ b/src/views/partials/flags/bulk-actions.tpl
@@ -0,0 +1,9 @@
+
+
+ [[flags:bulk-actions]]
+
+
+
\ No newline at end of file
diff --git a/src/views/partials/flags/filters.tpl b/src/views/partials/flags/filters.tpl
new file mode 100644
index 0000000000..d0f91243e6
--- /dev/null
+++ b/src/views/partials/flags/filters.tpl
@@ -0,0 +1,189 @@
+
+
+
+
+
+ {{{ if selectedCategory }}}
+
+ {buildCategoryIcon(selectedCategory, "18px", "rounded-circle")}
+ {selectedCategory.name}
+
+ {{{ else }}}
+ [[unread:all-categories]]
+ {{{ end }}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/partials/flags/results.tpl b/src/views/partials/flags/results.tpl
new file mode 100644
index 0000000000..f8c319eacf
--- /dev/null
+++ b/src/views/partials/flags/results.tpl
@@ -0,0 +1,38 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/partials/gdpr_consent.tpl b/src/views/partials/gdpr_consent.tpl
index 21ec19074c..1759d39589 100644
--- a/src/views/partials/gdpr_consent.tpl
+++ b/src/views/partials/gdpr_consent.tpl
@@ -2,7 +2,7 @@
[[user:consent.lead]]
[[user:consent.intro]]
-
+
[[register:gdpr-agree-data]]
@@ -16,7 +16,7 @@
-
+
[[register:gdpr-agree-email]]
\ No newline at end of file
diff --git a/src/views/partials/groups/filter-dropdown-content.tpl b/src/views/partials/groups/filter-dropdown-content.tpl
new file mode 100644
index 0000000000..1243bed751
--- /dev/null
+++ b/src/views/partials/groups/filter-dropdown-content.tpl
@@ -0,0 +1,25 @@
+
+
+ {{{ if selectedGroup }}}
+ {selectedGroup.displayName}
+ {{{ else }}}
+ [[groups:all-groups]]
+ {{{ end }}}
+
+
+
\ No newline at end of file
diff --git a/src/views/partials/reconnect-alert.tpl b/src/views/partials/reconnect-alert.tpl
index 90ab679fde..b8eba8b67e 100644
--- a/src/views/partials/reconnect-alert.tpl
+++ b/src/views/partials/reconnect-alert.tpl
@@ -1,4 +1,4 @@
-
-
+
+
[[global:reconnecting-message, {config.siteTitle}]]
\ No newline at end of file
diff --git a/src/views/partials/tags/filter-dropdown-content.tpl b/src/views/partials/tags/filter-dropdown-content.tpl
new file mode 100644
index 0000000000..acdfbbfc15
--- /dev/null
+++ b/src/views/partials/tags/filter-dropdown-content.tpl
@@ -0,0 +1,38 @@
+
+ {{{ if selectedTag }}}
+
+
+ {selectedTag.label}
+
+ {{{ else }}}
+
+ [[tags:all-tags]]
+ {{{ end }}}
+
+
+
\ No newline at end of file
diff --git a/src/views/partials/tags/filter-dropdown-left.tpl b/src/views/partials/tags/filter-dropdown-left.tpl
index b80f290a56..37bfc4b293 100644
--- a/src/views/partials/tags/filter-dropdown-left.tpl
+++ b/src/views/partials/tags/filter-dropdown-left.tpl
@@ -1,3 +1,3 @@
-
+
\ No newline at end of file
diff --git a/src/views/partials/tags/watch.tpl b/src/views/partials/tags/watch.tpl
new file mode 100644
index 0000000000..75f5ebbb3c
--- /dev/null
+++ b/src/views/partials/tags/watch.tpl
@@ -0,0 +1,42 @@
+{{{ if config.loggedIn }}}
+
+
+
+
+ [[tags:watching]]
+
+
+
+
+ [[tags:not-watching]]
+
+
+
+
+{{{ end }}}
\ No newline at end of file
diff --git a/src/views/partials/topic-filters.tpl b/src/views/partials/topic-filters.tpl
new file mode 100644
index 0000000000..0dc3cd4669
--- /dev/null
+++ b/src/views/partials/topic-filters.tpl
@@ -0,0 +1,16 @@
+
+
+
+ {selectedFilter.name}
+
+
+
\ No newline at end of file
diff --git a/src/views/partials/topic-terms.tpl b/src/views/partials/topic-terms.tpl
new file mode 100644
index 0000000000..da7c2abd7b
--- /dev/null
+++ b/src/views/partials/topic-terms.tpl
@@ -0,0 +1,16 @@
+
+
+
+ {selectedTerm.name}
+
+
+
\ No newline at end of file
diff --git a/src/views/partials/topic/deleted-message.tpl b/src/views/partials/topic/deleted-message.tpl
index fe258db567..32ccc09267 100644
--- a/src/views/partials/topic/deleted-message.tpl
+++ b/src/views/partials/topic/deleted-message.tpl
@@ -1,4 +1,4 @@
-
+
[[topic:deleted-message]]
{{{ if deleter }}}
diff --git a/src/views/partials/topic/forked-message.tpl b/src/views/partials/topic/forked-message.tpl
index 7117bdd1ce..c4c3795693 100644
--- a/src/views/partials/topic/forked-message.tpl
+++ b/src/views/partials/topic/forked-message.tpl
@@ -1,4 +1,4 @@
-
+
[[topic:forked-message, {config.relative_path}/topic/{forkedFromTid}, {forker.forkedFromTitle}]]
{forker.username}
diff --git a/src/views/partials/topic/guest-cta.tpl b/src/views/partials/topic/guest-cta.tpl
new file mode 100644
index 0000000000..506cabc82f
--- /dev/null
+++ b/src/views/partials/topic/guest-cta.tpl
@@ -0,0 +1,22 @@
+
+
\ No newline at end of file
diff --git a/src/views/partials/topic/merged-message.tpl b/src/views/partials/topic/merged-message.tpl
index 3a4bb560ec..210c0b371e 100644
--- a/src/views/partials/topic/merged-message.tpl
+++ b/src/views/partials/topic/merged-message.tpl
@@ -1,4 +1,4 @@
-
+
[[topic:merged-message, {config.relative_path}/topic/{mergeIntoTid}, {merger.mergedIntoTitle}]]
{merger.username}
diff --git a/src/views/partials/topic/post-menu-list.tpl b/src/views/partials/topic/post-menu-list.tpl
new file mode 100644
index 0000000000..2367b97062
--- /dev/null
+++ b/src/views/partials/topic/post-menu-list.tpl
@@ -0,0 +1,156 @@
+{{{ if posts.display_moderator_tools }}}
+
+
+ [[topic:edit]]
+
+
+{{{ if posts.display_delete_tools }}}
+
+
+ [[topic:delete]]
+
+
+
+
+ [[topic:restore]]
+
+
+{{{ end }}}
+{{{ if posts.display_purge_tools }}}
+
+
+ [[topic:purge]]
+
+
+{{{ end }}}
+
+{{{ if posts.display_move_tools }}}
+
+
+ [[topic:move]]
+
+
+{{{ end }}}
+
+{{{ if posts.display_change_owner_tools }}}
+
+
+ [[topic:change-owner]]
+
+
+{{{ end }}}
+
+{{{ if posts.display_manage_editors_tools }}}
+
+
+ [[topic:manage-editors]]
+
+
+{{{ end }}}
+
+{{{ if posts.ip }}}
+
+
+ [[topic:copy-ip]] {posts.ip}
+
+
+{{{ if posts.display_ip_ban }}}
+
+
+ [[topic:ban-ip]] {posts.ip}
+
+
+{{{ end }}}
+{{{ end }}}
+{{{ end }}}
+
+{{{ each posts.tools }}}
+
+
+ {{./html}}
+
+
+{{{ end }}}
+
+{{{ if !posts.deleted }}}
+ {{{ if posts.display_history}}}
+
+
+ [[topic:view-history]]
+
+
+ {{{ end }}}
+
+ {{{ if config.loggedIn }}}
+
+
+
+ [[topic:bookmark]]
+ {posts.bookmarks}
+
+
+ {{{ end }}}
+
+
+ {{{ if !posts.display_original_url }}}
+
+
+ [[topic:copy-permalink]]
+
+
+ {{{ else }}}
+
+
+ [[topic:copy-permalink]]
+
+
+
+
+ [[topic:go-to-original]]
+
+
+ {{{ end }}}
+
+ {{{ if postSharing.length }}}
+ {{{ if config.loggedIn }}} {{{ end }}}
+
+ {{{ end }}}
+
+ {{{ each postSharing }}}
+
+ {{{ end }}}
+
+{{{ end }}}
+
+{{{ if posts.display_flag_tools }}}
+
+
+
+ [[topic:flag-post]]
+
+
+ [[topic:already-flagged]]
+
+
+{{{ if (!posts.selfPost && posts.uid) }}}
+
+ [[topic:flag-user]]
+
+{{{ end }}}
+{{{ end }}}
+
+{{{ if posts.display_moderator_tools }}}
+{{{ if posts.flags.exists }}}
+
+ [[topic:view-flag-report]]
+
+{{{ if (posts.flags.state == "open") }}}
+
+ [[topic:resolve-flag]]
+
+{{{ end }}}
+{{{ end }}}
+{{{ end }}}
diff --git a/src/views/partials/topic/post-parent.tpl b/src/views/partials/topic/post-parent.tpl
new file mode 100644
index 0000000000..5e73f8cf70
--- /dev/null
+++ b/src/views/partials/topic/post-parent.tpl
@@ -0,0 +1,11 @@
+
diff --git a/src/views/partials/topic/post-preview.tpl b/src/views/partials/topic/post-preview.tpl
index 107075eef3..d3436bf6ba 100644
--- a/src/views/partials/topic/post-preview.tpl
+++ b/src/views/partials/topic/post-preview.tpl
@@ -1,11 +1,14 @@
diff --git a/src/views/partials/topic/tools-right.tpl b/src/views/partials/topic/tools-right.tpl
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/src/views/partials/topic/topic-menu-list.tpl b/src/views/partials/topic/topic-menu-list.tpl
new file mode 100644
index 0000000000..f32ea80ec5
--- /dev/null
+++ b/src/views/partials/topic/topic-menu-list.tpl
@@ -0,0 +1,76 @@
+{{{ if privileges.editable }}}
+
+ [[topic:thread-tools.lock]]
+
+
+
+ [[topic:thread-tools.unlock]]
+
+
+
+ [[topic:thread-tools.pin]]
+
+
+
+ [[topic:thread-tools.unpin]]
+
+
+{{{ if isNumber(cid) }}}
+
+ [[topic:thread-tools.move]]
+
+{{{ end }}}
+
+
+ [[topic:thread-tools.merge]]
+
+
+
+ [[topic:thread-tools.fork]]
+
+
+
+ [[topic:thread-tools.tag]]
+
+
+{{{ if !scheduled }}}
+
+ [[topic:thread-tools.move-posts]]
+
+{{{ end }}}
+
+
+ [[topic:thread-tools.markAsUnreadForAll]]
+
+
+
+{{{ end }}}
+
+{{{ if privileges.deletable }}}
+
+ [[topic:thread-tools.delete]]
+
+
+{{{ if !scheduled }}}
+
+ [[topic:thread-tools.restore]]
+
+{{{ end }}}
+
+{{{ if privileges.purge }}}
+
+ [[topic:thread-tools.purge]]
+
+{{{ end }}}
+{{{ if privileges.isAdminOrMod }}}
+
+ [[topic:thread-tools.delete-posts]]
+
+{{{ end }}}
+{{{ end }}}
+
+{{{ each thread_tools }}}
+
+ {./title}
+
+{{{ end }}}
diff --git a/src/views/partials/users/filter-dropdown-content.tpl b/src/views/partials/users/filter-dropdown-content.tpl
new file mode 100644
index 0000000000..e639059b2d
--- /dev/null
+++ b/src/views/partials/users/filter-dropdown-content.tpl
@@ -0,0 +1,23 @@
+
+ {{{ if selectedUser }}}
+ {buildAvatar(selectedUser, "20px", true, "not-responsive")} {selectedUser.username}
+ {{{ else }}}
+ [[users:all-users]]
+ {{{ end }}}
+
+
diff --git a/src/views/post-queue.tpl b/src/views/post-queue.tpl
index 69b4f759b6..569bfb68e3 100644
--- a/src/views/post-queue.tpl
+++ b/src/views/post-queue.tpl
@@ -1,91 +1,158 @@
-{{{ if isAdmin }}}
-{{{ if !enabled }}}
-
-
[[post-queue:enabling-help, {config.relative_path}/admin/settings/post#post-queue]]
-
-{{{ end }}}
-{{{ else }}}
-
-
[[post-queue:public-intro]]
-
[[post-queue:public-description]]
-
-
-{{{ end }}}
-
-{{{ if (!singlePost && posts.length) }}}
-
-
-
+
+ {{{ if isAdmin }}}
+ {{{ if !enabled }}}
+
+ [[post-queue:enabling-help, {config.relative_path}/admin/settings/post#post-queue]]
-
-
- [[post-queue:bulk-actions]]
-
-
+ {{{ end }}}
+ {{{ else }}}
+
+
[[post-queue:public-intro]]
+
[[post-queue:public-description]]
+
-
+ {{{ end }}}
-
-{{{ end }}}
+ {{{ if (!singlePost && posts.length) }}}
+
+
+
+
-
-
-
- {{{ if !posts.length }}}
- {{{ if !singlePost }}}
-
-
-
-
-
- [[post-queue:no-queued-posts]]
-
-
+
+
+ [[post-queue:bulk-actions]]
+
+
+
+
+ {{{ end }}}
- {{{ each posts }}}
-
-