Compare commits

...

54 Commits

Author SHA1 Message Date
69bfd56ff6 chore(master): release 0.11.0 2025-11-24 20:10:53 +02:00
8476b772e3 fix(l10n): unify same messages with different placeholders 2025-11-24 18:44:16 +02:00
Nextcloud bot
c43a0a0f89 fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2025-11-24 16:16:48 +00:00
3c7236f956 fix(l10n): unusable pluralization 2025-11-24 15:43:55 +02:00
Nextcloud bot
fcf40da4aa fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2025-11-24 12:54:52 +00:00
71efe00265 chore: fix isSystemRole func type assertion 2025-11-24 11:18:35 +02:00
843f81a087 fix(l10n): translation source string issues 2025-11-24 10:36:57 +02:00
Nextcloud bot
f0f06cef25 fix(l10n): Update translations from Transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2025-11-24 06:48:51 +00:00
248c875319 fix(AdminDashboard): improve contributors sorting 2025-11-23 23:25:21 +02:00
8b973c3ad5 feat(AdminRoleEdit): allow checking/unchecking multiple categories 2025-11-23 23:18:46 +02:00
f4530ae2a3 fix(Categories): admin should always see all categories 2025-11-23 23:18:04 +02:00
3ed74eea8f feat(Category Admin): refresh categories/headers in sidebar afer modifying 2025-11-23 23:00:03 +02:00
49ad2c9810 chore(master): release 0.10.1 2025-11-23 14:07:45 +02:00
09f6ea4a3b fix(Seed): don't seed admin category permission 2025-11-23 14:03:48 +02:00
e795ec2667 fix(Seed): improve seed idempotency 2025-11-23 13:55:35 +02:00
be51e8a1a5 chore(master): release 0.10.0 2025-11-23 02:11:43 +02:00
53875b1eef fix(AdminDashboard): exclude thread posts from post count 2025-11-23 02:08:03 +02:00
0f9d5ea9a5 fix: modal actions spacing 2025-11-23 02:07:30 +02:00
4708d8cf87 chore: exclude gen/ changes from php test trigger 2025-11-23 02:07:03 +02:00
20a15b42d9 chore(test): swap phpunit local/docker 2025-11-23 00:17:15 +02:00
7a1853935e chore: run php tests on commit 2025-11-22 23:48:42 +02:00
04ec7ffcf8 test: add/update role & permission tests 2025-11-22 23:47:53 +02:00
c9a76e5cd9 feat(Roles): admin always has full permissions 2025-11-22 23:37:05 +02:00
94787052ef refactor(Role): improve role logic in UI 2025-11-22 23:07:19 +02:00
e20bfdadab refactor(Roles): update UserRoleController & SetRole command to use UserRoleService 2025-11-22 23:05:02 +02:00
328b37be6e fix(Roles): prevent deleting system roles on backend 2025-11-22 23:03:58 +02:00
c7f84d4a18 fix(UserEventListener): add User role to newly created users 2025-11-22 23:03:33 +02:00
d09987600b chore(master): release 0.9.2 2025-11-22 22:03:04 +02:00
dcdcde31ed chore: allow blank issue templates 2025-11-22 21:53:14 +02:00
f66169288e build: reduce test workflow count 2025-11-22 21:50:27 +02:00
7a17dbc524 docs: update README.md 2025-11-22 21:44:09 +02:00
c1443014b5 build: update phpunit workflows 2025-11-22 21:44:02 +02:00
4c2e47d86b build: update phpunit workflows 2025-11-22 21:38:46 +02:00
8408402148 fix(l10n): plural tokens + text alignment strings 2025-11-22 21:18:58 +02:00
3d113f1f31 fix(l10n): update translation source strings 2025-11-22 20:59:43 +02:00
48b7679e3b chore: remove unused file 2025-11-22 20:58:36 +02:00
5f0317b153 build: update php test versions matrix 2025-11-22 03:39:45 +02:00
56dc0049b8 build: include all composer.lock files 2025-11-22 03:37:32 +02:00
7519088e2b build: update php test version matrix 2025-11-22 03:34:22 +02:00
0f3be447fa build: add phpunit-pgsql task 2025-11-22 03:33:02 +02:00
f73d902962 build: update phpunit workflow min php version 2025-11-22 03:29:08 +02:00
4a9ae9bfc6 build: update phpunit workflow min php version 2025-11-22 03:27:00 +02:00
37012590a1 build: update test workflow 2025-11-22 03:21:12 +02:00
00b80b817d build: include composer.lock 2025-11-22 03:20:56 +02:00
3472e95065 docs: update README.md badges 2025-11-22 03:15:11 +02:00
7fde88a158 build: add phpunit-mysql workflow 2025-11-22 02:49:44 +02:00
5ebeb56636 test: add missing tests 2025-11-22 02:29:36 +02:00
a66bcd4612 fix(PostController): exclude first posts from post_count fields 2025-11-22 02:29:14 +02:00
36d8ecd5bb test: fix failing tests 2025-11-22 02:01:31 +02:00
257a12dfc4 fix: post counts in threads/categories 2025-11-22 01:55:06 +02:00
b67813fa34 fix(SeedHelper): subscribe author to welcome thread 2025-11-22 01:39:05 +02:00
d6c6626bad fix(l10n): bbcode help dialog strings 2025-11-22 00:51:26 +02:00
9837fc4683 chore(master): release 0.9.1 2025-11-22 00:42:58 +02:00
a3b0582d2c fix(l10n): fix welcome post & bbcode example strings 2025-11-22 00:39:46 +02:00
205 changed files with 10836 additions and 2133 deletions

View File

@@ -1,4 +1,4 @@
blank_issues_enabled: false
blank_issues_enabled: true
contact_links:
- name: Nextcloud Community Forum
url: https://help.nextcloud.com

201
.github/workflows/phpunit-mysql.yml vendored Normal file
View File

@@ -0,0 +1,201 @@
# This workflow is provided via the organization template repository
#
# https://github.com/nextcloud/.github
# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization
#
# SPDX-FileCopyrightText: 2022-2024 Nextcloud GmbH and Nextcloud contributors
# SPDX-License-Identifier: MIT
name: PHPUnit MySQL
on: pull_request
permissions:
contents: read
concurrency:
group: phpunit-mysql-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
jobs:
matrix:
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.set-matrix.outputs.matrix }}
steps:
- name: Checkout app
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
with:
persist-credentials: false
- name: Get supported server versions
id: versions
uses: icewind1991/nextcloud-version-matrix@58becf3b4bb6dc6cef677b15e2fd8e7d48c0908f # v1.3.1
- name: Build test matrix
id: set-matrix
run: |
# Get server branches from version matrix
BRANCHES='${{ steps.versions.outputs.branches }}'
# Build minimal matrix: min Nextcloud with PHP 8.2, max Nextcloud with PHP 8.3
MATRIX=$(jq -nc \
--argjson branches "$BRANCHES" \
'{include: [{"php-versions": "8.2", "mysql-versions": "8.4", "server-versions": $branches[0]}, {"php-versions": "8.3", "mysql-versions": "8.4", "server-versions": $branches[-1]}]}'
)
echo "matrix=$MATRIX" >> $GITHUB_OUTPUT
echo "Generated matrix: $MATRIX"
changes:
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: read
outputs:
src: ${{ steps.changes.outputs.src}}
steps:
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
id: changes
continue-on-error: true
with:
filters: |
src:
- '.github/workflows/**'
- 'appinfo/**'
- 'lib/**'
- 'templates/**'
- 'tests/**'
- 'vendor/**'
- 'vendor-bin/**'
- '.php-cs-fixer.dist.php'
- 'composer.json'
- 'composer.lock'
phpunit-mysql:
runs-on: ubuntu-latest
needs: [changes, matrix]
if: needs.changes.outputs.src != 'false'
strategy:
matrix: ${{ fromJson(needs.matrix.outputs.matrix) }}
name: MySQL ${{ matrix.mysql-versions }} PHP ${{ matrix.php-versions }} Nextcloud ${{ matrix.server-versions }}
services:
mysql:
image: ghcr.io/nextcloud/continuous-integration-mysql-${{ matrix.mysql-versions }}:latest
ports:
- 4444:3306/tcp
env:
MYSQL_ROOT_PASSWORD: rootpassword
options: --health-cmd="mysqladmin ping" --health-interval 5s --health-timeout 2s --health-retries 10
steps:
- name: Checkout app
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
persist-credentials: false
path: app-checkout
- name: Detect app ID from appinfo/info.xml
run: |
APP_ID=$(grep -oP '(?<=<id>)[^<]+' app-checkout/appinfo/info.xml | head -1)
echo "APP_NAME=$APP_ID" >> $GITHUB_ENV
echo "Detected app ID: $APP_ID"
- name: Checkout server
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
persist-credentials: false
submodules: true
repository: nextcloud/server
ref: ${{ matrix.server-versions }}
- name: Checkout app
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
persist-credentials: false
path: apps/${{ env.APP_NAME }}
- name: Set up php ${{ matrix.php-versions }}
uses: shivammathur/setup-php@0f7f1d08e3e32076e51cae65eb0b0c871405b16e # v2.34.1
with:
php-version: ${{ matrix.php-versions }}
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, mysql, pdo_mysql
coverage: none
ini-file: development
# Temporary workaround for missing pcntl_* in PHP 8.3
ini-values: disable_functions=
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Enable ONLY_FULL_GROUP_BY MySQL option
run: |
echo "SET GLOBAL sql_mode=(SELECT CONCAT(@@sql_mode,',ONLY_FULL_GROUP_BY'));" | mysql -h 127.0.0.1 -P 4444 -u root -prootpassword
echo 'SELECT @@sql_mode;' | mysql -h 127.0.0.1 -P 4444 -u root -prootpassword
- name: Check composer file existence
id: check_composer
uses: andstor/file-existence-action@076e0072799f4942c8bc574a82233e1e4d13e9d6 # v3.0.0
with:
files: apps/${{ env.APP_NAME }}/composer.json
- name: Set up dependencies
# Only run if phpunit config file exists
if: steps.check_composer.outputs.files_exists == 'true'
working-directory: apps/${{ env.APP_NAME }}
run: |
composer remove nextcloud/ocp --dev --no-scripts
composer i
- name: Set up Nextcloud
env:
DB_PORT: 4444
run: |
mkdir data
./occ maintenance:install --verbose --database=mysql --database-name=nextcloud --database-host=127.0.0.1 --database-port=$DB_PORT --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass admin
./occ app:enable --force ${{ env.APP_NAME }}
- name: Check PHPUnit script is defined
id: check_phpunit
continue-on-error: true
working-directory: apps/${{ env.APP_NAME }}
run: |
composer run --list | grep '^ test:unit ' | wc -l | grep 1
- name: PHPUnit
# Only run if phpunit config file exists
if: steps.check_phpunit.outcome == 'success'
working-directory: apps/${{ env.APP_NAME }}
run: composer run test:unit
- name: Print logs
if: always()
run: |
cat data/nextcloud.log
- name: Skipped
# Fail the action when unit tests are not specified
if: steps.check_phpunit.outcome == 'failure'
run: |
echo 'PHPUnit tests are not specified in composer.json scripts'
exit 1
summary:
permissions:
contents: none
runs-on: ubuntu-latest
needs: [changes, phpunit-mysql]
if: always()
name: phpunit-mysql-summary
steps:
- name: Summary status
run: if ${{ needs.changes.outputs.src != 'false' && needs.phpunit-mysql.result != 'success' }}; then exit 1; fi

216
.github/workflows/phpunit-pgsql.yml vendored Normal file
View File

@@ -0,0 +1,216 @@
# This workflow is provided via the organization template repository
#
# https://github.com/nextcloud/.github
# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization
#
# SPDX-FileCopyrightText: 2022-2024 Nextcloud GmbH and Nextcloud contributors
# SPDX-License-Identifier: MIT
name: PHPUnit PostgreSQL
on: pull_request
permissions:
contents: read
concurrency:
group: phpunit-pgsql-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
jobs:
matrix:
runs-on: ubuntu-latest
outputs:
matrix: ${{ steps.set-matrix.outputs.matrix }}
steps:
- name: Checkout app
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
with:
persist-credentials: false
- name: Get supported server versions
id: versions
uses: icewind1991/nextcloud-version-matrix@58becf3b4bb6dc6cef677b15e2fd8e7d48c0908f # v1.3.1
- name: Build test matrix
id: set-matrix
run: |
# Get server branches from version matrix
BRANCHES='${{ steps.versions.outputs.branches }}'
# Build minimal matrix: only latest Nextcloud with PHP 8.3
MATRIX=$(jq -nc \
--argjson branches "$BRANCHES" \
'{include: [{"php-versions": "8.3", "server-versions": $branches[-1]}]}'
)
echo "matrix=$MATRIX" >> $GITHUB_OUTPUT
echo "Generated matrix: $MATRIX"
changes:
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: read
outputs:
src: ${{ steps.changes.outputs.src }}
steps:
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
id: changes
continue-on-error: true
with:
filters: |
src:
- '.github/workflows/**'
- 'appinfo/**'
- 'lib/**'
- 'templates/**'
- 'tests/**'
- 'vendor/**'
- 'vendor-bin/**'
- '.php-cs-fixer.dist.php'
- 'composer.json'
- 'composer.lock'
phpunit-pgsql:
runs-on: ubuntu-latest
needs: [changes, matrix]
if: needs.changes.outputs.src != 'false'
strategy:
matrix: ${{ fromJson(needs.matrix.outputs.matrix) }}
name: PostgreSQL PHP ${{ matrix.php-versions }} Nextcloud ${{ matrix.server-versions }}
services:
postgres:
image: ghcr.io/nextcloud/continuous-integration-postgres-16:latest # zizmor: ignore[unpinned-images]
ports:
- 4444:5432/tcp
env:
POSTGRES_USER: root
POSTGRES_PASSWORD: rootpassword
POSTGRES_DB: nextcloud
options: --health-cmd pg_isready --health-interval 5s --health-timeout 2s --health-retries 5
steps:
- name: Checkout app
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
with:
persist-credentials: false
path: app-checkout
- name: Detect app ID from appinfo/info.xml
run: |
APP_ID=$(grep -oP '(?<=<id>)[^<]+' app-checkout/appinfo/info.xml | head -1)
echo "APP_NAME=$APP_ID" >> $GITHUB_ENV
echo "Detected app ID: $APP_ID"
- name: Checkout server
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
with:
persist-credentials: false
submodules: true
repository: nextcloud/server
ref: ${{ matrix.server-versions }}
- name: Checkout app
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
with:
persist-credentials: false
path: apps/${{ env.APP_NAME }}
- name: Set up php ${{ matrix.php-versions }}
uses: shivammathur/setup-php@bf6b4fbd49ca58e4608c9c89fba0b8d90bd2a39f # v2.35.5
with:
php-version: ${{ matrix.php-versions }}
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, pgsql, pdo_pgsql
coverage: none
ini-file: development
# Temporary workaround for missing pcntl_* in PHP 8.3
ini-values: disable_functions=
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Check composer file existence
id: check_composer
uses: andstor/file-existence-action@076e0072799f4942c8bc574a82233e1e4d13e9d6 # v3.0.0
with:
files: apps/${{ env.APP_NAME }}/composer.json
- name: Set up dependencies
# Only run if phpunit config file exists
if: steps.check_composer.outputs.files_exists == 'true'
working-directory: apps/${{ env.APP_NAME }}
run: |
composer remove nextcloud/ocp --dev --no-scripts
composer i
- name: Set up Nextcloud
env:
DB_PORT: 4444
run: |
mkdir data
./occ maintenance:install --verbose --database=pgsql --database-name=nextcloud --database-host=127.0.0.1 --database-port=$DB_PORT --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass admin
./occ app:enable --force ${{ env.APP_NAME }}
- name: Check PHPUnit script is defined
id: check_phpunit
continue-on-error: true
working-directory: apps/${{ env.APP_NAME }}
run: |
composer run --list | grep '^ test:unit ' | wc -l | grep 1
- name: PHPUnit
# Only run if phpunit config file exists
if: steps.check_phpunit.outcome == 'success'
working-directory: apps/${{ env.APP_NAME }}
run: composer run test:unit
- name: Check PHPUnit integration script is defined
id: check_integration
continue-on-error: true
working-directory: apps/${{ env.APP_NAME }}
run: |
composer run --list | grep '^ test:integration ' | wc -l | grep 1
- name: Run Nextcloud
# Only run if phpunit integration config file exists
if: steps.check_integration.outcome == 'success'
run: php -S localhost:8080 &
- name: PHPUnit integration
# Only run if phpunit integration config file exists
if: steps.check_integration.outcome == 'success'
working-directory: apps/${{ env.APP_NAME }}
run: composer run test:integration
- name: Print logs
if: always()
run: |
cat data/nextcloud.log
- name: Skipped
# Fail the action when neither unit nor integration tests ran
if: steps.check_phpunit.outcome == 'failure' && steps.check_integration.outcome == 'failure'
run: |
echo 'Neither PHPUnit nor PHPUnit integration tests are specified in composer.json scripts'
exit 1
summary:
permissions:
contents: none
runs-on: ubuntu-latest
needs: [changes, phpunit-pgsql]
if: always()
name: phpunit-pgsql-summary
steps:
- name: Summary status
run: if ${{ needs.changes.outputs.src != 'false' && needs.phpunit-pgsql.result != 'success' }}; then exit 1; fi

1
.gitignore vendored
View File

@@ -12,7 +12,6 @@
/js
/css
.DS_Store
composer.lock
build/
tsconfig.app.tsbuildinfo
.env

View File

@@ -2,9 +2,16 @@ module.exports = {
'*.{ts,vue}': ['eslint --fix'],
'*.{scss,vue,ts,md}': ['prettier --write'],
'*.json': (files) => {
const filtered = files.filter(file => !file.includes('openapi.json'));
return filtered.length > 0 ? `prettier --write ${filtered.join(' ')}` : [];
const filtered = files.filter(file => !file.includes('openapi.json'))
return filtered.length > 0 ? `prettier --write ${filtered.join(' ')}` : []
},
'*.php': (files) => {
const nonGenFiles = files.filter(file => !file.includes('/gen/'))
const commands = []
if (nonGenFiles.length > 0) {
commands.push('make php-cs-fixer', 'make test')
}
return commands
},
'*.php': [() => 'make php-cs-fixer'],
'*Controller.php': [() => 'make openapi', () => 'git add openapi.json'],
}

View File

@@ -1 +1 @@
{".":"0.9.0"}
{".":"0.11.0"}

View File

@@ -1,5 +1,67 @@
# Changelog
## [0.11.0](https://github.com/chenasraf/nextcloud-forum/compare/v0.10.1...v0.11.0) (2025-11-24)
### Features
* **AdminRoleEdit:** allow checking/unchecking multiple categories ([8b973c3](https://github.com/chenasraf/nextcloud-forum/commit/8b973c3ad5349bb91b4039b86edd4416f136fc7b))
* **Category Admin:** refresh categories/headers in sidebar afer modifying ([3ed74ee](https://github.com/chenasraf/nextcloud-forum/commit/3ed74eea8f85d062e8a95749d8b487ee42066c2f))
### Bug Fixes
* **AdminDashboard:** improve contributors sorting ([248c875](https://github.com/chenasraf/nextcloud-forum/commit/248c8753198b801c71ad94ede35d06b0bbd4aed1))
* **Categories:** admin should always see all categories ([f4530ae](https://github.com/chenasraf/nextcloud-forum/commit/f4530ae2a3c01ba2d1f36c3c9e32ead2502580d0))
* **l10n:** translation source string issues ([843f81a](https://github.com/chenasraf/nextcloud-forum/commit/843f81a08725b3109067b6f1f3ad2f538209ee26))
* **l10n:** unify same messages with different placeholders ([8476b77](https://github.com/chenasraf/nextcloud-forum/commit/8476b772e305c9893b4d796c0dc3e9df1151fe09))
* **l10n:** unusable pluralization ([3c7236f](https://github.com/chenasraf/nextcloud-forum/commit/3c7236f956736e5e249e72344ed2c973a6e65540))
* **l10n:** Update translations from Transifex ([c43a0a0](https://github.com/chenasraf/nextcloud-forum/commit/c43a0a0f893378eb430e94209396d51f7c7fd830))
* **l10n:** Update translations from Transifex ([fcf40da](https://github.com/chenasraf/nextcloud-forum/commit/fcf40da4aaed59d0a6d6ee58f039c73f4c5eba98))
* **l10n:** Update translations from Transifex ([f0f06ce](https://github.com/chenasraf/nextcloud-forum/commit/f0f06cef258fc658e935d3375bbe92d8000b6d33))
## [0.10.1](https://github.com/chenasraf/nextcloud-forum/compare/v0.10.0...v0.10.1) (2025-11-23)
### Bug Fixes
* **Seed:** don't seed admin category permission ([09f6ea4](https://github.com/chenasraf/nextcloud-forum/commit/09f6ea4a3b56bdf723f7b90a204a2450d1b4137e))
* **Seed:** improve seed idempotency ([e795ec2](https://github.com/chenasraf/nextcloud-forum/commit/e795ec266736f413c71ebd3f9f3c9081e86cf082))
## [0.10.0](https://github.com/chenasraf/nextcloud-forum/compare/v0.9.2...v0.10.0) (2025-11-23)
### Features
* **Roles:** admin always has full permissions ([c9a76e5](https://github.com/chenasraf/nextcloud-forum/commit/c9a76e5cd97df0c82bb79825799eeba7ce66086e))
### Bug Fixes
* **AdminDashboard:** exclude thread posts from post count ([53875b1](https://github.com/chenasraf/nextcloud-forum/commit/53875b1eefaddcbe8c4024c98834e44c3a01aeb0))
* modal actions spacing ([0f9d5ea](https://github.com/chenasraf/nextcloud-forum/commit/0f9d5ea9a5a99dda9bb351ed98d91ae880ddf64f))
* **Roles:** prevent deleting system roles on backend ([328b37b](https://github.com/chenasraf/nextcloud-forum/commit/328b37be6eec2b0001517ef74779565457de7213))
* **UserEventListener:** add User role to newly created users ([c7f84d4](https://github.com/chenasraf/nextcloud-forum/commit/c7f84d4a186ab7832d5fa96c2143bef30ddf3a85))
## [0.9.2](https://github.com/chenasraf/nextcloud-forum/compare/v0.9.1...v0.9.2) (2025-11-22)
### Bug Fixes
* **l10n:** bbcode help dialog strings ([d6c6626](https://github.com/chenasraf/nextcloud-forum/commit/d6c6626badf90636aae4f59fbe4765a5f786f5ab))
* **l10n:** plural tokens + text alignment strings ([8408402](https://github.com/chenasraf/nextcloud-forum/commit/8408402148c9935b50df1f75915cffba7d76b043))
* **l10n:** update translation source strings ([3d113f1](https://github.com/chenasraf/nextcloud-forum/commit/3d113f1f31887b7849753d07712a548392f574d6))
* post counts in threads/categories ([257a12d](https://github.com/chenasraf/nextcloud-forum/commit/257a12dfc43d7784d7e63ab79a8545d80022251e))
* **PostController:** exclude first posts from post_count fields ([a66bcd4](https://github.com/chenasraf/nextcloud-forum/commit/a66bcd4612a1889624e608e9e0207d7e09fc32df))
* **SeedHelper:** subscribe author to welcome thread ([b67813f](https://github.com/chenasraf/nextcloud-forum/commit/b67813fa34746de8f999b16e609c6ee7a9458e9b))
## [0.9.1](https://github.com/chenasraf/nextcloud-forum/compare/v0.9.0...v0.9.1) (2025-11-21)
### Bug Fixes
* **l10n:** fix welcome post & bbcode example strings ([a3b0582](https://github.com/chenasraf/nextcloud-forum/commit/a3b0582d2cce2c22cd5070f3c335a732c25c5e67))
## [0.9.0](https://github.com/chenasraf/nextcloud-forum/compare/v0.8.2...v0.9.0) (2025-11-21)

View File

@@ -230,7 +230,7 @@ test: composer
exit 1; \
fi; \
echo "\x1b[32mUsing Nextcloud root: $$NC_ROOT\x1b[0m"; \
NEXTCLOUD_ROOT="$$NC_ROOT" $(CURDIR)/vendor/phpunit/phpunit/phpunit -c tests/phpunit.local.xml; \
NEXTCLOUD_ROOT="$$NC_ROOT" $(CURDIR)/vendor/phpunit/phpunit/phpunit -c tests/phpunit.xml; \
if [ -f tests/phpunit.integration.xml ]; then \
NEXTCLOUD_ROOT="$$NC_ROOT" $(CURDIR)/vendor/phpunit/phpunit/phpunit -c tests/phpunit.integration.xml; \
fi
@@ -265,7 +265,7 @@ test-docker:
exit 1; \
fi; \
echo "\x1b[33mRunning tests in container $$CONTAINER_ID for app $$APP_DIR\x1b[0m"; \
docker exec $$CONTAINER_ID phpunit -c apps-shared/$$APP_DIR/tests/phpunit.xml
docker exec $$CONTAINER_ID phpunit -c apps-shared/$$APP_DIR/tests/phpunit.docker.xml
# lint:
# - Lint JS via pnpm and PHP via composer script "lint"

View File

@@ -5,7 +5,9 @@ SPDX-License-Identifier: CC0-1.0
# Nextcloud Forum
![GitHub Release](https://img.shields.io/github/v/release/chenasraf/nextcloud-forum)
[![GitHub Release](https://img.shields.io/github/v/release/chenasraf/nextcloud-forum?color=blue)](https://github.com/chenasraf/nextcloud-forum/releases/latest)
[![PHPUnit MySQL](https://github.com/chenasraf/nextcloud-forum/actions/workflows/phpunit-mysql.yml/badge.svg)](https://github.com/chenasraf/nextcloud-forum/actions/workflows/phpunit-mysql.yml)
[![PHPUnit PostgreSQL](https://github.com/chenasraf/nextcloud-forum/actions/workflows/phpunit-pgsql.yml/badge.svg)](https://github.com/chenasraf/nextcloud-forum/actions/workflows/phpunit-pgsql.yml)
A full-featured forum application for Nextcloud, allowing users to create discussion categories,
threads, and posts within their Nextcloud instance.

View File

@@ -8,12 +8,12 @@
<name>Forum</name>
<summary>A community-driven forum built right into your Nextcloud instance</summary>
<description><![CDATA[
Create discussions, share ideas, and collaborate with your community directly in Nextcloud.
Create discussions, share ideas and collaborate with your community directly in Nextcloud.
**⚠️ Early Development Notice:**
This app is in early stages of development. While functional, you may encounter bugs or incomplete features. Please report any issues on GitHub and consider backing up your data regularly.
**Key Features:**
**Key features:**
- **Thread-based Discussions** - Create and reply to organized discussion threads
- **Category Organization** - Structure your forum with customizable categories and headers
- **Rich Text Formatting** - Use BBCode for formatting posts with bold, italic, links, images, code blocks and more
@@ -23,10 +23,10 @@ This app is in early stages of development. While functional, you may encounter
- **Search** - Find discussions quickly with built-in search
- **User Profiles** - View user post history and statistics
- **Role-Based Permissions** - Control access and moderation with flexible roles
- **Admin Tools** - Manage categories, roles, BBCodes, and forum settings
- **Moderation Tools** - Pin, lock, and manage threads and posts
- **Admin Tools** - Manage categories, roles, BBCodes and forum settings
- **Moderation Tools** - Pin, lock and manage threads and posts
**Perfect For:**
**Perfect for:**
- Team discussions and collaboration
- Community forums
- Support channels
@@ -36,7 +36,7 @@ This app is in early stages of development. While functional, you may encounter
The forum integrates seamlessly with your Nextcloud instance, using your existing users and groups for authentication and access control.
]]></description>
<version>0.9.0</version>
<version>0.11.0</version>
<licence>agpl</licence>
<author mail="contact@casraf.dev" homepage="https://casraf.dev">Chen Asraf</author>
<namespace>Forum</namespace>

3039
composer.lock generated Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +0,0 @@
OC.L10N.register(
"forum",
{
"Last 7 Days" : "In den letzten 7 Tagen"
},
"nplurals=2; plural=(n != 1);");

View File

@@ -1,4 +0,0 @@
{ "translations": {
"Last 7 Days" : "In den letzten 7 Tagen"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

View File

@@ -1,6 +0,0 @@
OC.L10N.register(
"forum",
{
"Dashboard" : "Tablero de control"
},
"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");

View File

@@ -1,4 +0,0 @@
{ "translations": {
"Dashboard" : "Tablero de control"
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
}

View File

@@ -1,6 +0,0 @@
OC.L10N.register(
"forum",
{
"Dashboard" : "Tablero de control"
},
"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");

View File

@@ -1,4 +0,0 @@
{ "translations": {
"Dashboard" : "Tablero de control"
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
}

View File

@@ -1,8 +0,0 @@
OC.L10N.register(
"forum",
{
"Underlined text" : "Texto subrayado",
"Dashboard" : "Tablero de control",
"Create" : "Crear"
},
"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");

View File

@@ -1,6 +0,0 @@
{ "translations": {
"Underlined text" : "Texto subrayado",
"Dashboard" : "Tablero de control",
"Create" : "Crear"
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
}

View File

@@ -1,8 +0,0 @@
OC.L10N.register(
"forum",
{
"Save" : "Guardar",
"Dashboard" : "Tablero de control",
"Uncategorized" : "Sin categoría"
},
"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");

View File

@@ -1,6 +0,0 @@
{ "translations": {
"Save" : "Guardar",
"Dashboard" : "Tablero de control",
"Uncategorized" : "Sin categoría"
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
}

View File

@@ -1,8 +0,0 @@
OC.L10N.register(
"forum",
{
"Save" : "Guardar",
"Dashboard" : "Tablero de control",
"Uncategorized" : "Sin categoría"
},
"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");

View File

@@ -1,6 +0,0 @@
{ "translations": {
"Save" : "Guardar",
"Dashboard" : "Tablero de control",
"Uncategorized" : "Sin categoría"
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
}

View File

@@ -1,12 +0,0 @@
OC.L10N.register(
"forum",
{
"Underlined text" : "Texto subrayado",
"Save" : "Guardar",
"Dashboard" : "Tablero de control",
"Collapse" : "Colapsar",
"Uncategorized" : "Sin categoría",
"Preferences" : "Preferencias",
"Create" : "Crear"
},
"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");

View File

@@ -1,10 +0,0 @@
{ "translations": {
"Underlined text" : "Texto subrayado",
"Save" : "Guardar",
"Dashboard" : "Tablero de control",
"Collapse" : "Colapsar",
"Uncategorized" : "Sin categoría",
"Preferences" : "Preferencias",
"Create" : "Crear"
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
}

View File

@@ -1,9 +0,0 @@
OC.L10N.register(
"forum",
{
"Save" : "Guardar",
"Dashboard" : "Tablero de control",
"Collapse" : "Colapsar",
"Uncategorized" : "Sin categoría"
},
"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");

View File

@@ -1,7 +0,0 @@
{ "translations": {
"Save" : "Guardar",
"Dashboard" : "Tablero de control",
"Collapse" : "Colapsar",
"Uncategorized" : "Sin categoría"
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
}

View File

@@ -1,9 +0,0 @@
OC.L10N.register(
"forum",
{
"Save" : "Guardar",
"Dashboard" : "Tablero de control",
"Collapse" : "Colapsar",
"Uncategorized" : "Sin categoría"
},
"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");

View File

@@ -1,7 +0,0 @@
{ "translations": {
"Save" : "Guardar",
"Dashboard" : "Tablero de control",
"Collapse" : "Colapsar",
"Uncategorized" : "Sin categoría"
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
}

View File

@@ -1,9 +0,0 @@
OC.L10N.register(
"forum",
{
"Save" : "Guardar",
"Dashboard" : "Tablero de control",
"Collapse" : "Colapsar",
"Uncategorized" : "Sin categoría"
},
"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");

View File

@@ -1,7 +0,0 @@
{ "translations": {
"Save" : "Guardar",
"Dashboard" : "Tablero de control",
"Collapse" : "Colapsar",
"Uncategorized" : "Sin categoría"
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
}

View File

@@ -1,10 +0,0 @@
OC.L10N.register(
"forum",
{
"Save" : "Guardar",
"Dashboard" : "Tablero de control",
"Collapse" : "Colapsar",
"Delete" : "Borrar",
"Uncategorized" : "Sin categoría"
},
"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");

View File

@@ -1,8 +0,0 @@
{ "translations": {
"Save" : "Guardar",
"Dashboard" : "Tablero de control",
"Collapse" : "Colapsar",
"Delete" : "Borrar",
"Uncategorized" : "Sin categoría"
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
}

View File

@@ -1,9 +0,0 @@
OC.L10N.register(
"forum",
{
"Save" : "Guardar",
"Dashboard" : "Tablero de control",
"Collapse" : "Colapsar",
"Uncategorized" : "Sin categoría"
},
"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");

View File

@@ -1,7 +0,0 @@
{ "translations": {
"Save" : "Guardar",
"Dashboard" : "Tablero de control",
"Collapse" : "Colapsar",
"Uncategorized" : "Sin categoría"
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
}

View File

@@ -1,11 +0,0 @@
OC.L10N.register(
"forum",
{
"Clear" : "Limpiar",
"Save" : "Guardar",
"Dashboard" : "Tablero de control",
"Collapse" : "Colapsar",
"Delete" : "Borrar",
"Uncategorized" : "Sin categoría"
},
"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");

View File

@@ -1,9 +0,0 @@
{ "translations": {
"Clear" : "Limpiar",
"Save" : "Guardar",
"Dashboard" : "Tablero de control",
"Collapse" : "Colapsar",
"Delete" : "Borrar",
"Uncategorized" : "Sin categoría"
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
}

View File

@@ -1,10 +0,0 @@
OC.L10N.register(
"forum",
{
"Save" : "Guardar",
"Dashboard" : "Tablero de control",
"Collapse" : "Colapsar",
"Delete" : "Borrar",
"Uncategorized" : "Sin categoría"
},
"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");

View File

@@ -1,8 +0,0 @@
{ "translations": {
"Save" : "Guardar",
"Dashboard" : "Tablero de control",
"Collapse" : "Colapsar",
"Delete" : "Borrar",
"Uncategorized" : "Sin categoría"
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
}

View File

@@ -1,16 +0,0 @@
OC.L10N.register(
"forum",
{
"Underlined text" : "Allajoonitud tekst",
"Light" : "Hele kujundus",
"Clear" : "Tühjenda",
"Save" : "Salvesta",
"Dashboard" : "Töölaud/Juhtpaneel",
"Collapse" : "Sulge",
"Delete" : "Kustuta",
"Uncategorized" : "Määratlemata",
"Preferences" : "Eelistused",
"Create" : "Lisa",
"Last 7 Days" : "Viimase 7 päeva jooksul"
},
"nplurals=2; plural=(n != 1);");

View File

@@ -1,14 +0,0 @@
{ "translations": {
"Underlined text" : "Allajoonitud tekst",
"Light" : "Hele kujundus",
"Clear" : "Tühjenda",
"Save" : "Salvesta",
"Dashboard" : "Töölaud/Juhtpaneel",
"Collapse" : "Sulge",
"Delete" : "Kustuta",
"Uncategorized" : "Määratlemata",
"Preferences" : "Eelistused",
"Create" : "Lisa",
"Last 7 Days" : "Viimase 7 päeva jooksul"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

View File

@@ -1,15 +0,0 @@
OC.L10N.register(
"forum",
{
"Underlined text" : "Alleviivattu teksti",
"Light" : "Vaalea",
"Clear" : "Tyhjennä",
"Save" : "Tallenna",
"Dashboard" : "Kojelauta",
"Collapse" : "Kutista näkymää",
"Delete" : "Poista",
"Uncategorized" : "Luokittelematon",
"Preferences" : "Asetukset",
"Create" : "Luo"
},
"nplurals=2; plural=(n != 1);");

View File

@@ -1,13 +0,0 @@
{ "translations": {
"Underlined text" : "Alleviivattu teksti",
"Light" : "Vaalea",
"Clear" : "Tyhjennä",
"Save" : "Tallenna",
"Dashboard" : "Kojelauta",
"Collapse" : "Kutista näkymää",
"Delete" : "Poista",
"Uncategorized" : "Luokittelematon",
"Preferences" : "Asetukset",
"Create" : "Luo"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

View File

@@ -1,11 +0,0 @@
OC.L10N.register(
"forum",
{
"Light" : "Soilleir",
"Save" : "Sàbhail",
"Delete" : "Sguab às",
"Uncategorized" : "Gun seòrsachadh",
"Preferences" : "Roghainnean",
"Create" : "Cruthaich"
},
"nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : (n > 2 && n < 20) ? 2 : 3;");

View File

@@ -1,9 +0,0 @@
{ "translations": {
"Light" : "Soilleir",
"Save" : "Sàbhail",
"Delete" : "Sguab às",
"Uncategorized" : "Gun seòrsachadh",
"Preferences" : "Roghainnean",
"Create" : "Cruthaich"
},"pluralForm" :"nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : (n > 2 && n < 20) ? 2 : 3;"
}

6
l10n/hr.js Normal file
View File

@@ -0,0 +1,6 @@
OC.L10N.register(
"forum",
{
"ID" : "ID"
},
"nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;");

4
l10n/hr.json Normal file
View File

@@ -0,0 +1,4 @@
{ "translations": {
"ID" : "ID"
},"pluralForm" :"nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;"
}

View File

@@ -1,18 +1,6 @@
OC.L10N.register(
"forum",
{
"Underlined text" : "Aláhúzott szöveg",
"Light" : "Világos",
"Clear" : "Törlés",
"Save" : "Mentés",
"Loading…" : "Betöltés…",
"Dashboard" : "Irányítópult",
"Collapse" : "Összecsukás",
"Delete" : "Törlés",
"React with {emoji}" : "Reagálás ezzel: {emoji}",
"Uncategorized" : "Kategorizálatlan",
"Preferences" : "Beállítások",
"Create" : "Létrehozás",
"Last 7 Days" : "Elmúlt 7 nap"
"ID" : "Azonosító"
},
"nplurals=2; plural=(n != 1);");

View File

@@ -1,16 +1,4 @@
{ "translations": {
"Underlined text" : "Aláhúzott szöveg",
"Light" : "Világos",
"Clear" : "Törlés",
"Save" : "Mentés",
"Loading…" : "Betöltés…",
"Dashboard" : "Irányítópult",
"Collapse" : "Összecsukás",
"Delete" : "Törlés",
"React with {emoji}" : "Reagálás ezzel: {emoji}",
"Uncategorized" : "Kategorizálatlan",
"Preferences" : "Beállítások",
"Create" : "Létrehozás",
"Last 7 Days" : "Elmúlt 7 nap"
"ID" : "Azonosító"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

View File

@@ -1,9 +0,0 @@
OC.L10N.register(
"forum",
{
"Save" : "Salveguardar",
"Loading…" : "Cargante...",
"Collapse" : "Collaber",
"Delete" : "Deler"
},
"nplurals=2; plural=(n != 1);");

View File

@@ -1,7 +0,0 @@
{ "translations": {
"Save" : "Salveguardar",
"Loading…" : "Cargante...",
"Collapse" : "Collaber",
"Delete" : "Deler"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

View File

@@ -1,7 +1,6 @@
OC.L10N.register(
"forum",
{
"Save" : "Simpan",
"Delete" : "Padam"
"ID" : "ID"
},
"nplurals=1; plural=0;");

View File

@@ -1,5 +1,4 @@
{ "translations": {
"Save" : "Simpan",
"Delete" : "Padam"
"ID" : "ID"
},"pluralForm" :"nplurals=1; plural=0;"
}

6
l10n/is.js Normal file
View File

@@ -0,0 +1,6 @@
OC.L10N.register(
"forum",
{
"ID" : "ID"
},
"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);");

4
l10n/is.json Normal file
View File

@@ -0,0 +1,4 @@
{ "translations": {
"ID" : "ID"
},"pluralForm" :"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);"
}

View File

@@ -1,6 +1,6 @@
OC.L10N.register(
"forum",
{
"Dashboard" : "Tablero de control"
"ID" : "ID"
},
"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");

View File

@@ -1,4 +1,4 @@
{ "translations": {
"Dashboard" : "Tablero de control"
"ID" : "ID"
},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
}

View File

@@ -1,18 +1,6 @@
OC.L10N.register(
"forum",
{
"Underlined text" : "下線を引きたい文字",
"Light" : "明るい",
"Clear" : "クリア",
"Save" : "保存する",
"Loading…" : "読み込み中…",
"Dashboard" : "ダッシュボード",
"Collapse" : "折りたたむ",
"Delete" : "削除",
"React with {emoji}" : "{emoji} で反応する",
"Uncategorized" : "未分類",
"Preferences" : "環境設定",
"Create" : "作成",
"Last 7 Days" : "7日以内"
"ID" : "ID"
},
"nplurals=1; plural=0;");

View File

@@ -1,16 +1,4 @@
{ "translations": {
"Underlined text" : "下線を引きたい文字",
"Light" : "明るい",
"Clear" : "クリア",
"Save" : "保存する",
"Loading…" : "読み込み中…",
"Dashboard" : "ダッシュボード",
"Collapse" : "折りたたむ",
"Delete" : "削除",
"React with {emoji}" : "{emoji} で反応する",
"Uncategorized" : "未分類",
"Preferences" : "環境設定",
"Create" : "作成",
"Last 7 Days" : "7日以内"
"ID" : "ID"
},"pluralForm" :"nplurals=1; plural=0;"
}

6
l10n/ka.js Normal file
View File

@@ -0,0 +1,6 @@
OC.L10N.register(
"forum",
{
"ID" : "ID"
},
"nplurals=2; plural=(n!=1);");

4
l10n/ka.json Normal file
View File

@@ -0,0 +1,4 @@
{ "translations": {
"ID" : "ID"
},"pluralForm" :"nplurals=2; plural=(n!=1);"
}

View File

@@ -1,11 +1,6 @@
OC.L10N.register(
"forum",
{
"Clear" : "გასუფთავება",
"Save" : "შენახვა",
"Dashboard" : "მთავარი დაფა",
"Collapse" : "აკეცვა",
"Delete" : "წაშლა",
"Uncategorized" : "არაკატეგორიზირებული"
"ID" : "ID"
},
"nplurals=2; plural=(n!=1);");

View File

@@ -1,9 +1,4 @@
{ "translations": {
"Clear" : "გასუფთავება",
"Save" : "შენახვა",
"Dashboard" : "მთავარი დაფა",
"Collapse" : "აკეცვა",
"Delete" : "წაშლა",
"Uncategorized" : "არაკატეგორიზირებული"
"ID" : "ID"
},"pluralForm" :"nplurals=2; plural=(n!=1);"
}

View File

@@ -1,13 +0,0 @@
OC.L10N.register(
"forum",
{
"Light" : "Aceɛlal",
"Clear" : "Ṣfeḍ",
"Save" : "Sekles",
"Loading…" : "Asali...",
"Dashboard" : "Tafelwit n usenqed",
"Delete" : "Kkes",
"Preferences" : "Tiwelhiwin",
"Create" : "Snulfu-d"
},
"nplurals=2; plural=(n != 1);");

View File

@@ -1,11 +0,0 @@
{ "translations": {
"Light" : "Aceɛlal",
"Clear" : "Ṣfeḍ",
"Save" : "Sekles",
"Loading…" : "Asali...",
"Dashboard" : "Tafelwit n usenqed",
"Delete" : "Kkes",
"Preferences" : "Tiwelhiwin",
"Create" : "Snulfu-d"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

View File

@@ -1,9 +0,0 @@
OC.L10N.register(
"forum",
{
"Light" : "ភ្លឺt",
"Save" : "រក្សាទុក",
"Collapse" : "បត់បង្រួម",
"Delete" : "លុប"
},
"nplurals=1; plural=0;");

View File

@@ -1,7 +0,0 @@
{ "translations": {
"Light" : "ភ្លឺt",
"Save" : "រក្សាទុក",
"Collapse" : "បត់បង្រួម",
"Delete" : "លុប"
},"pluralForm" :"nplurals=1; plural=0;"
}

7
l10n/ko.js Normal file
View File

@@ -0,0 +1,7 @@
OC.L10N.register(
"forum",
{
"ID" : "ID",
"Loading users …" : "사용자 불러오는 중 ..."
},
"nplurals=1; plural=0;");

5
l10n/ko.json Normal file
View File

@@ -0,0 +1,5 @@
{ "translations": {
"ID" : "ID",
"Loading users …" : "사용자 불러오는 중 ..."
},"pluralForm" :"nplurals=1; plural=0;"
}

View File

@@ -1,9 +0,0 @@
OC.L10N.register(
"forum",
{
"Save" : "Späicheren",
"Loading…" : "Et gëtt gelueden",
"Collapse" : "Zesumme falen",
"Delete" : "Läschen"
},
"nplurals=2; plural=(n != 1);");

View File

@@ -1,7 +0,0 @@
{ "translations": {
"Save" : "Späicheren",
"Loading…" : "Et gëtt gelueden",
"Collapse" : "Zesumme falen",
"Delete" : "Läschen"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

7
l10n/lo.js Normal file
View File

@@ -0,0 +1,7 @@
OC.L10N.register(
"forum",
{
"Tag" : "Tag",
"ID" : "ໄອດີ"
},
"nplurals=1; plural=0;");

5
l10n/lo.json Normal file
View File

@@ -0,0 +1,5 @@
{ "translations": {
"Tag" : "Tag",
"ID" : "ໄອດີ"
},"pluralForm" :"nplurals=1; plural=0;"
}

View File

@@ -1,19 +1,9 @@
OC.L10N.register(
"forum",
{
"Underlined text" : "Pabrauktas tekstas",
"Light" : "Šviesus",
"Clear" : "Išvalyti",
"Save" : "Įrašyti",
"Loading…" : "Įkeliama…",
"Dashboard" : "Skydelis",
"Collapse" : "Suskleisti",
"Delete" : "Ištrinti",
"React with {emoji}" : "Reaguoti naudojant {emoji}",
"Uncategorized" : "Nekategorizuotas",
"Reply" : "Atsakyt",
"Preferences" : "Nuostatos",
"Create" : "Sukurti",
"Last 7 Days" : "Paskutinės 7 dienos"
"Tag" : "Žymė",
"ID" : "ID",
"Loading users …" : "Įkeliami naudotojai…"
},
"nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);");

View File

@@ -1,17 +1,7 @@
{ "translations": {
"Underlined text" : "Pabrauktas tekstas",
"Light" : "Šviesus",
"Clear" : "Išvalyti",
"Save" : "Įrašyti",
"Loading…" : "Įkeliama…",
"Dashboard" : "Skydelis",
"Collapse" : "Suskleisti",
"Delete" : "Ištrinti",
"React with {emoji}" : "Reaguoti naudojant {emoji}",
"Uncategorized" : "Nekategorizuotas",
"Reply" : "Atsakyt",
"Preferences" : "Nuostatos",
"Create" : "Sukurti",
"Last 7 Days" : "Paskutinės 7 dienos"
"Tag" : "Žymė",
"ID" : "ID",
"Loading users …" : "Įkeliami naudotojai…"
},"pluralForm" :"nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);"
}

View File

@@ -1,12 +1,7 @@
OC.L10N.register(
"forum",
{
"Clear" : "Notīrīt",
"Save" : "Saglabāt",
"Loading…" : "Ielādē…",
"Dashboard" : "Informācijas panelis",
"Collapse" : "Sakļaut",
"Delete" : "Izdzēst",
"Uncategorized" : "Bez kategorijas"
"Tag" : "Birkas"
},
"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);");

View File

@@ -1,10 +1,5 @@
{ "translations": {
"Clear" : "Notīrīt",
"Save" : "Saglabāt",
"Loading…" : "Ielādē…",
"Dashboard" : "Informācijas panelis",
"Collapse" : "Sakļaut",
"Delete" : "Izdzēst",
"Uncategorized" : "Bez kategorijas"
"Tag" : "Birkas"
},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);"
}

8
l10n/mk.js Normal file
View File

@@ -0,0 +1,8 @@
OC.L10N.register(
"forum",
{
"Preferences" : "Перформанси",
"ID" : "ID",
"Loading users …" : "Вчитување корисници ..."
},
"nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;");

6
l10n/mk.json Normal file
View File

@@ -0,0 +1,6 @@
{ "translations": {
"Preferences" : "Перформанси",
"ID" : "ID",
"Loading users …" : "Вчитување корисници ..."
},"pluralForm" :"nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;"
}

View File

@@ -1,10 +1,6 @@
OC.L10N.register(
"forum",
{
"Forum" : "Хэлэлцүүлэг",
"Save" : "Хадгалах",
"Loading…" : "уншиж байна",
"Delete" : "Устгах",
"Create" : "үүсгэх"
"ID" : "ID"
},
"nplurals=2; plural=(n != 1);");

View File

@@ -1,8 +1,4 @@
{ "translations": {
"Forum" : "Хэлэлцүүлэг",
"Save" : "Хадгалах",
"Loading…" : "уншиж байна",
"Delete" : "Устгах",
"Create" : "үүсгэх"
"ID" : "ID"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

View File

@@ -1,19 +1,8 @@
OC.L10N.register(
"forum",
{
"Forum" : "Forum",
"Underlined text" : "Understreket tekst",
"Light" : "Lys",
"Clear" : "Tøm",
"Save" : "Lagre",
"Loading…" : "Laster...",
"Dashboard" : "Instrumentpanel",
"Collapse" : "Skjul",
"Delete" : "Slett",
"React with {emoji}" : "Reager med {emoji}",
"Uncategorized" : "Ukategorisert",
"Preferences" : "Innstillinger",
"Create" : "Opprett",
"Active" : "Aktiv"
"ID" : "ID",
"Loading users …" : "Laster brukere..."
},
"nplurals=2; plural=(n != 1);");

View File

@@ -1,17 +1,6 @@
{ "translations": {
"Forum" : "Forum",
"Underlined text" : "Understreket tekst",
"Light" : "Lys",
"Clear" : "Tøm",
"Save" : "Lagre",
"Loading…" : "Laster...",
"Dashboard" : "Instrumentpanel",
"Collapse" : "Skjul",
"Delete" : "Slett",
"React with {emoji}" : "Reager med {emoji}",
"Uncategorized" : "Ukategorisert",
"Preferences" : "Innstillinger",
"Create" : "Opprett",
"Active" : "Aktiv"
"ID" : "ID",
"Loading users …" : "Laster brukere..."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

View File

@@ -1,21 +1,11 @@
OC.L10N.register(
"forum",
{
"Forum" : "Forum",
"User" : "Gebruiker",
"Underlined text" : "Onderstreepte tekst",
"Light" : "Licht",
"Clear" : "Terug",
"Duplicate" : "Duplicaat",
"Save" : "Opslaan",
"Loading…" : "Laden…",
"Dashboard" : "Dashboard",
"Collapse" : "Inklappen",
"Delete" : "Verwijderen",
"React with {emoji}" : "Reageer met {emoji}",
"Uncategorized" : "Niet gecategoriseerd",
"Preferences" : "Voorkeuren",
"Create" : "Creëer",
"Active" : "Actief"
"Tag" : "Label",
"Move down" : "Lager zetten",
"ID" : "ID",
"Loading users …" : "Laden gebruikers ..."
},
"nplurals=2; plural=(n != 1);");

View File

@@ -1,19 +1,9 @@
{ "translations": {
"Forum" : "Forum",
"User" : "Gebruiker",
"Underlined text" : "Onderstreepte tekst",
"Light" : "Licht",
"Clear" : "Terug",
"Duplicate" : "Duplicaat",
"Save" : "Opslaan",
"Loading…" : "Laden…",
"Dashboard" : "Dashboard",
"Collapse" : "Inklappen",
"Delete" : "Verwijderen",
"React with {emoji}" : "Reageer met {emoji}",
"Uncategorized" : "Niet gecategoriseerd",
"Preferences" : "Voorkeuren",
"Create" : "Creëer",
"Active" : "Actief"
"Tag" : "Label",
"Move down" : "Lager zetten",
"ID" : "ID",
"Loading users …" : "Laden gebruikers ..."
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

View File

@@ -1,12 +1,7 @@
OC.L10N.register(
"forum",
{
"Forum" : "Forum",
"User" : "Bruker",
"Save" : "Lagre",
"Loading…" : "Lastar...",
"Dashboard" : "Skrivebord",
"Delete" : "Slett",
"Reply" : "Svare"
"ID" : "ID"
},
"nplurals=2; plural=(n != 1);");

View File

@@ -1,10 +1,5 @@
{ "translations": {
"Forum" : "Forum",
"User" : "Bruker",
"Save" : "Lagre",
"Loading…" : "Lastar...",
"Dashboard" : "Skrivebord",
"Delete" : "Slett",
"Reply" : "Svare"
"ID" : "ID"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

View File

@@ -1,18 +1,7 @@
OC.L10N.register(
"forum",
{
"Forum" : "Forum",
"User" : "Utilizator",
"Light" : "Clar",
"Clear" : "Escafar",
"Save" : "Enregistrar",
"Loading…" : "Telecargament…",
"Dashboard" : "Tablèu de bòrd",
"Collapse" : "Replegar",
"Delete" : "Suprimir",
"React with {emoji}" : "Reagir amb {emoji}",
"Uncategorized" : "Desorganizadas",
"Create" : "Crear",
"Active" : "Activa"
"ID" : "ID"
},
"nplurals=2; plural=(n > 1);");

View File

@@ -1,16 +1,5 @@
{ "translations": {
"Forum" : "Forum",
"User" : "Utilizator",
"Light" : "Clar",
"Clear" : "Escafar",
"Save" : "Enregistrar",
"Loading…" : "Telecargament…",
"Dashboard" : "Tablèu de bòrd",
"Collapse" : "Replegar",
"Delete" : "Suprimir",
"React with {emoji}" : "Reagir amb {emoji}",
"Uncategorized" : "Desorganizadas",
"Create" : "Crear",
"Active" : "Activa"
"ID" : "ID"
},"pluralForm" :"nplurals=2; plural=(n > 1);"
}

11
l10n/pl.js Normal file
View File

@@ -0,0 +1,11 @@
OC.L10N.register(
"forum",
{
"Save" : "Zapisz",
"Preferences" : "Preferencje",
"Tag" : "Etykieta",
"Move down" : "Przenieś niżej",
"ID" : "ID",
"Loading users …" : "Wczytywanie użytkowników ..."
},
"nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);");

9
l10n/pl.json Normal file
View File

@@ -0,0 +1,9 @@
{ "translations": {
"Save" : "Zapisz",
"Preferences" : "Preferencje",
"Tag" : "Etykieta",
"Move down" : "Przenieś niżej",
"ID" : "ID",
"Loading users …" : "Wczytywanie użytkowników ..."
},"pluralForm" :"nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);"
}

View File

@@ -1,7 +1,6 @@
OC.L10N.register(
"forum",
{
"Save" : "ساتل",
"Delete" : "ړنګول"
"Save" : "ساتل"
},
"nplurals=2; plural=(n != 1);");

View File

@@ -1,5 +1,4 @@
{ "translations": {
"Save" : "ساتل",
"Delete" : "ړنګول"
"Save" : "ساتل"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

View File

@@ -1,25 +1,13 @@
OC.L10N.register(
"forum",
{
"Forum" : "Fórum",
"User" : "Usuário",
"Underlined text" : "Texto sublinhado",
"Light" : "Claro",
"Clear" : "Limpar",
"Duplicate" : "Duplicar",
"Save" : "Salvar",
"Loading…" : "Carregando…",
"Dashboard" : "Painel",
"Collapse" : "Recolher",
"Delete" : "Excluir",
"React with {emoji}" : "Reagir com {emoji}",
"Uncategorized" : "Sem categoria",
"Reply" : "Resposta",
"Preferences" : "Preferências",
"Create" : "Criar",
"Enter category name" : "Insira o nome da categoria",
"Last 7 Days" : "Nos Últimos 7 Dias",
"Failed to save settings" : "Falha ao salvar configurações",
"Active" : "Ativada"
"This action cannot be undone." : "Esta ação não pode ser desfeita.",
"Tag" : "Etiqueta",
"Move down" : "Mover para baixo",
"ID" : "ID",
"Loading users …" : "Carregando usuários …"
},
"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");

View File

@@ -1,23 +1,11 @@
{ "translations": {
"Forum" : "Fórum",
"User" : "Usuário",
"Underlined text" : "Texto sublinhado",
"Light" : "Claro",
"Clear" : "Limpar",
"Duplicate" : "Duplicar",
"Save" : "Salvar",
"Loading…" : "Carregando…",
"Dashboard" : "Painel",
"Collapse" : "Recolher",
"Delete" : "Excluir",
"React with {emoji}" : "Reagir com {emoji}",
"Uncategorized" : "Sem categoria",
"Reply" : "Resposta",
"Preferences" : "Preferências",
"Create" : "Criar",
"Enter category name" : "Insira o nome da categoria",
"Last 7 Days" : "Nos Últimos 7 Dias",
"Failed to save settings" : "Falha ao salvar configurações",
"Active" : "Ativada"
"This action cannot be undone." : "Esta ação não pode ser desfeita.",
"Tag" : "Etiqueta",
"Move down" : "Mover para baixo",
"ID" : "ID",
"Loading users …" : "Carregando usuários …"
},"pluralForm" :"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
}

View File

@@ -1,21 +1,10 @@
OC.L10N.register(
"forum",
{
"Forum" : "Fórum",
"User" : "Utilizador",
"Underlined text" : "Texto sublinhado",
"Light" : "Claro",
"Clear" : "Limpar",
"Save" : "Guardar",
"Loading…" : "A carregar…",
"Dashboard" : "Painel de controle",
"Collapse" : "Expandir",
"Delete" : "Eliminar",
"Uncategorized" : "Sem categoria ",
"Reply" : "Responder",
"Preferences" : "Preferências",
"Create" : "Criar",
"Failed to save settings" : "Erro ao gravar as definições",
"Category" : "Categoria"
"Tag" : "Etiqueta",
"Move down" : "Mover para baixo",
"ID" : "Id."
},
"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;");

View File

@@ -1,19 +1,8 @@
{ "translations": {
"Forum" : "Fórum",
"User" : "Utilizador",
"Underlined text" : "Texto sublinhado",
"Light" : "Claro",
"Clear" : "Limpar",
"Save" : "Guardar",
"Loading…" : "A carregar…",
"Dashboard" : "Painel de controle",
"Collapse" : "Expandir",
"Delete" : "Eliminar",
"Uncategorized" : "Sem categoria ",
"Reply" : "Responder",
"Preferences" : "Preferências",
"Create" : "Criar",
"Failed to save settings" : "Erro ao gravar as definições",
"Category" : "Categoria"
"Tag" : "Etiqueta",
"Move down" : "Mover para baixo",
"ID" : "Id."
},"pluralForm" :"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"
}

10
l10n/ro.js Normal file
View File

@@ -0,0 +1,10 @@
OC.L10N.register(
"forum",
{
"Save" : "Salvează",
"React with {emoji}" : "Reacționează cu {emoji}",
"Preferences" : "Preferințe",
"Move down" : "Mută în jos",
"ID" : "ID"
},
"nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));");

8
l10n/ro.json Normal file
View File

@@ -0,0 +1,8 @@
{ "translations": {
"Save" : "Salvează",
"React with {emoji}" : "Reacționează cu {emoji}",
"Preferences" : "Preferințe",
"Move down" : "Mută în jos",
"ID" : "ID"
},"pluralForm" :"nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));"
}

View File

@@ -1,25 +1,14 @@
OC.L10N.register(
"forum",
{
"Forum" : "Форум",
"User" : "Пользователь",
"Underlined text" : "Подчеркнутый текст",
"Light" : "Светлое",
"Clear" : "Очистить",
"Duplicate" : "Дублировать",
"Unread" : "Непрочитанное",
"Save" : "Сохранить",
"Loading…" : "Загрузка…",
"Dashboard" : "Виджеты",
"Collapse" : "Свернуть",
"Delete" : "Удалить",
"React with {emoji}" : "Отреагируйте с {emoji}",
"Uncategorized" : "Без категории",
"Reply" : "Ответ",
"Preferences" : "Свойства",
"Create" : "Создать",
"Last 7 Days" : "Последние 7 дней",
"Failed to save settings" : "Не удалось сохранить параметры",
"Category" : "Категория",
"Active" : "Активно"
"Tag" : "Метка",
"Move down" : "Переместить ниже",
"ID" : "ID",
"Loading users …" : "Загрузка пользователей…",
"Deleted" : "Удалено"
},
"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);");

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