Compare commits

...

61 Commits

Author SHA1 Message Date
Julius Härtl
70fa18f186 Bump version to 1.8.2
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-11-18 16:32:59 +01:00
Nextcloud bot
43a7255c2a [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-11-17 02:21:27 +00:00
Julius Härtl
8c24def8d8 Merge pull request #4208 from nextcloud/automated/noid/stable25-update-nextcloud-ocp 2022-11-13 16:55:58 +01:00
nextcloud-command
937f285689 Update psalm baseline
Signed-off-by: GitHub <noreply@github.com>
2022-11-13 03:38:08 +00:00
Nextcloud bot
a66c960b21 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-11-12 02:22:15 +00:00
Julius Härtl
81d922c8bd Merge pull request #4201 from nextcloud/backport/4180/stable25 2022-11-11 15:46:45 +01:00
Johannes Szeibert
347364543d minor style fixes
Signed-off-by: Johannes Szeibert <johannes@szeibert.de>
2022-11-11 14:58:21 +01:00
Nextcloud bot
6bc703a9b0 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-11-11 02:21:19 +00:00
Nextcloud bot
ee99a768f4 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-11-10 02:22:57 +00:00
Julius Härtl
beee212fcb Merge pull request #4198 from nextcloud/backport/4196/stable25 2022-11-09 11:45:53 +01:00
Julius Härtl
33145e377b Add missing userId property
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-11-09 09:57:45 +00:00
Nextcloud bot
5552a9d538 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-11-09 02:21:44 +00:00
Nextcloud bot
4fcdb6f304 [tx-robot] updated from transifex
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-11-05 02:22:31 +00:00
Nextcloud bot
0e4d345fc1 [tx-robot] Update transifex configuration
Signed-off-by: Nextcloud bot <bot@nextcloud.com>
2022-11-05 02:22:07 +00:00
Julius Härtl
ee0092e7ca Merge pull request #4179 from nextcloud/backport/4173/stable25 2022-11-03 21:47:14 +01:00
Julius Härtl
c3f0a1edc4 Fix validation of attachment data
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-11-03 20:37:47 +01:00
Julius Härtl
a8b46ad10f Unify getting the share for attachments
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-10-31 20:18:10 +00:00
Julius Härtl
daa65b40fb Add integration test for attachment handling on cards
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-10-31 20:18:10 +00:00
Julius Härtl
fa6027f7ba Merge pull request #4174 from nextcloud/backport/4059/stable25 2022-10-31 15:54:06 +01:00
Julius Härtl
f26a085b13 Add some tests for parameter validation
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-10-31 11:59:50 +00:00
Luka Trovic
9d09916c17 feat: add validators to check values in services
Signed-off-by: Luka Trovic <luka@nextcloud.com>
2022-10-31 11:59:50 +00:00
Julius Härtl
f250d9956b Merge pull request #4172 from nextcloud/automated/noid/stable25-update-nextcloud-ocp
[stable25] Update nextcloud/ocp dependency
2022-10-30 08:40:35 +01:00
nextcloud-command
93994bb39c Update psalm baseline
Signed-off-by: GitHub <noreply@github.com>
2022-10-30 03:58:20 +00:00
Marcel Klehr
17f7d19624 Merge pull request #4157 from nextcloud/release/1.8.1 2022-10-27 11:47:05 +02:00
Julius Härtl
7e0c1a8024 Merge pull request #4092 from nextcloud/migrate-stable25-christophwurst-package 2022-10-27 11:32:59 +02:00
Julius Härtl
f6dc22c545 Do not install composer dev dependencies for running
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-10-27 09:37:16 +02:00
Joas Schilling
d196956519 Migrate to nextcloud/OCP package in stable25
Signed-off-by: Joas Schilling <coding@schilljs.com>
2022-10-26 21:19:16 +02:00
Marcel Klehr
4769c69ba7 v1.8.1
Signed-off-by: Marcel Klehr <mklehr@gmx.net>
2022-10-26 15:59:27 +02:00
Julius Härtl
f322b6191e Merge pull request #4155 from nextcloud/backport/4153/stable25 2022-10-25 21:26:46 +02:00
Joas Schilling
e076c76b3f Fix Duedate activity
Signed-off-by: Joas Schilling <coding@schilljs.com>
2022-10-25 19:17:50 +00:00
Julius Härtl
df8257a18f Merge pull request #4151 from nextcloud/automated/noid/stable25-update-nextcloud-ocp 2022-10-23 10:22:20 +02:00
nextcloud-command
e7f22ca0d3 Update psalm baseline
Signed-off-by: GitHub <noreply@github.com>
2022-10-23 04:14:17 +00:00
Julius Härtl
a9921ecdf0 Bump version to 1.8.0
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-10-19 21:56:11 +02:00
Julius Härtl
a5da643513 Merge pull request #4142 from nextcloud/backport/4101/stable25
[stable25] disables autocomplete on card creation
2022-10-19 21:32:16 +02:00
Julius Härtl
8c68b7ce83 Merge pull request #4141 from nextcloud/backport/4065/stable25 2022-10-19 21:22:13 +02:00
Julius Härtl
a4137a4edd Merge pull request #4090 from nextcloud/backport/4084/stable25 2022-10-19 21:15:54 +02:00
mokkin
cb5a181993 disables autocomplete on card creation
solves https://github.com/nextcloud/deck/issues/4083

Signed-off-by: mokkin <markus@haybach.com>
2022-10-19 19:10:57 +00:00
Julius Härtl
46972646d8 Cache user membership for circles
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-10-19 19:05:47 +00:00
Julius Härtl
8549d4a13f Merge pull request #4140 from nextcloud/backport/4115/stable25 2022-10-19 21:05:00 +02:00
Joas Schilling
47077af838 Fix missing icon for activity rendering
Signed-off-by: Joas Schilling <coding@schilljs.com>
2022-10-19 21:00:47 +02:00
Julius Härtl
6cc589539b Avoid always setting the current time on card updates
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-10-19 18:56:39 +00:00
Marcel Klehr
2237745c09 Fix duedate tests
Signed-off-by: Marcel Klehr <mklehr@gmx.net>
2022-10-19 18:56:39 +00:00
Joas Schilling
b74569abef Fix issue with duedate format
Signed-off-by: Joas Schilling <coding@schilljs.com>
2022-10-19 18:56:39 +00:00
Julius Härtl
de67847ef1 Pin postgres to 14
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-10-18 11:29:24 +02:00
Julius Härtl
a430eaf41f Merge pull request #4117 from nextcloud/backport/3439/stable25 2022-10-18 11:26:36 +02:00
Julius Härtl
31b68ae5e5 Activity: Set event link also for notifications that get emitted from activity
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-10-14 10:50:59 +00:00
Julius Härtl
fa1877ef7b Merge pull request #4116 from nextcloud/backport/4113/stable25
[stable25] Fix sorting stacks
2022-10-13 18:50:39 +02:00
Joas Schilling
5851c4a5f1 Fix sorting stacks
Signed-off-by: Joas Schilling <coding@schilljs.com>
2022-10-13 13:27:46 +00:00
Julius Härtl
4fadb9a633 Merge pull request #4105 from nextcloud/fix/25-no-card-menu-without-description 2022-10-11 14:53:32 +02:00
Marcel Klehr
d021559d7c Fix Card menu not displaying when description is not set
Signed-off-by: Marcel Klehr <mklehr@gmx.net>
2022-10-07 11:46:25 +02:00
Julius Härtl
7f22925063 Merge pull request #4068 from nextcloud/update-stable25-target-versions
Adjust testing matrix for Nextcloud 25 on stable25
2022-10-02 10:22:32 +02:00
Julien Veyssier
e65fa778cb Merge pull request #4078 from nextcloud/backport/4077/stable25
[stable25] use OCP\Collaboration\Reference\Reference
2022-09-27 10:21:51 +02:00
Julien Veyssier
003ee7a926 use OCP\Collaboration\Reference\Reference instead of the recently removed OC\Collaboration\Reference\Reference
Signed-off-by: Julien Veyssier <eneiluj@posteo.net>
2022-09-26 17:48:49 +00:00
Julien Veyssier
8b344a653f Merge pull request #4075 from nextcloud/backport/4069/stable25
[stable25] Reference widget adjustments for Text
2022-09-25 22:29:24 +02:00
Julien Veyssier
7403aafe16 fix width issues
Signed-off-by: Julien Veyssier <eneiluj@posteo.net>
2022-09-25 20:23:37 +00:00
Julien Veyssier
f7b6e8a3bc use richtext component for description, adjust style to make it work in Text
Signed-off-by: Julien Veyssier <eneiluj@posteo.net>
2022-09-25 20:23:36 +00:00
Julius Härtl
ad051c5e0e Bump version to 1.8.0-beta.2
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-09-23 14:40:50 +02:00
Julius Härtl
7ceb23f7a2 Merge pull request #4072 from nextcloud/backport/4071/stable25
[stable25] Use global import for nextcloud-vue
2022-09-23 12:59:37 +02:00
Julius Härtl
9760c838aa Fix imports
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-09-23 10:00:37 +00:00
Julius Härtl
8002cecda4 Use global import for nextcloud-vue
Signed-off-by: Julius Härtl <jus@bitgrid.net>
2022-09-23 10:00:37 +00:00
Joas Schilling
27b1c6a2f2 Adjust testing matrix for Nextcloud 25 on stable25
Signed-off-by: Joas Schilling <coding@schilljs.com>
2022-09-22 20:31:13 +02:00
107 changed files with 2037 additions and 615 deletions

View File

@@ -23,7 +23,7 @@ jobs:
# containers: [1, 2, 3] # containers: [1, 2, 3]
php-versions: [ '7.4' ] php-versions: [ '7.4' ]
databases: [ 'sqlite' ] databases: [ 'sqlite' ]
server-versions: [ 'master' ] server-versions: [ 'stable25' ]
steps: steps:
- name: Use Node.js ${{ matrix.node-version }} - name: Use Node.js ${{ matrix.node-version }}
@@ -77,7 +77,7 @@ jobs:
php occ app:enable deck php occ app:enable deck
php occ app:list php occ app:list
cd apps/deck cd apps/deck
composer install composer install --no-dev
npm ci npm ci
npm run build npm run build
cd ../../ cd ../../

View File

@@ -27,13 +27,13 @@ jobs:
matrix: matrix:
php-versions: ['7.4'] php-versions: ['7.4']
databases: ['sqlite', 'mysql', 'pgsql'] databases: ['sqlite', 'mysql', 'pgsql']
server-versions: ['master'] server-versions: ['stable25']
name: php${{ matrix.php-versions }}-${{ matrix.databases }}-${{ matrix.server-versions }} name: php${{ matrix.php-versions }}-${{ matrix.databases }}-${{ matrix.server-versions }}
services: services:
postgres: postgres:
image: postgres image: postgres:14
ports: ports:
- 4445:5432/tcp - 4445:5432/tcp
env: env:

View File

@@ -28,13 +28,13 @@ jobs:
matrix: matrix:
php-versions: ['7.4', '8.0', '8.1'] php-versions: ['7.4', '8.0', '8.1']
databases: ['sqlite', 'mysql', 'pgsql'] databases: ['sqlite', 'mysql', 'pgsql']
server-versions: ['master'] server-versions: ['stable25']
name: php${{ matrix.php-versions }}-${{ matrix.databases }}-${{ matrix.server-versions }} name: php${{ matrix.php-versions }}-${{ matrix.databases }}-${{ matrix.server-versions }}
services: services:
postgres: postgres:
image: postgres image: postgres:14
ports: ports:
- 4445:5432/tcp - 4445:5432/tcp
env: env:

35
.github/workflows/psalm.yml vendored Normal file
View File

@@ -0,0 +1,35 @@
# 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
name: Static analysis
on:
pull_request:
push:
branches:
- master
- main
- stable*
jobs:
static-analysis:
runs-on: ubuntu-latest
name: Nextcloud
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Set up php
uses: shivammathur/setup-php@v2
with:
php-version: 7.4
coverage: none
- name: Install dependencies
run: composer i
- name: Run coding standards check
run: composer run psalm

View File

@@ -1,31 +0,0 @@
name: Static analysis
on:
pull_request:
push:
branches:
- master
- stable*
jobs:
static-psalm-analysis:
runs-on: ubuntu-latest
strategy:
matrix:
ocp-version: [ 'dev-master' ]
name: Nextcloud ${{ matrix.ocp-version }}
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Set up php
uses: shivammathur/setup-php@2.21.2
with:
php-version: 7.4
tools: composer:v1
coverage: none
- name: Install dependencies
run: composer i
- name: Install dependencies
run: composer require --dev christophwurst/nextcloud:${{ matrix.ocp-version }}
- name: Run coding standards check
run: composer run psalm

View File

@@ -0,0 +1,65 @@
# 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
name: Update nextcloud/ocp
on:
workflow_dispatch:
schedule:
- cron: "5 2 * * 0"
jobs:
update-nextcloud-ocp:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
branches: ["master", "stable25", "stable24", "stable23"]
name: update-nextcloud-ocp-${{ matrix.branches }}
steps:
- uses: actions/checkout@v3
with:
ref: ${{ matrix.branches }}
submodules: true
- name: Set up php7.4
uses: shivammathur/setup-php@v2
with:
php-version: 7.4
extensions: ctype,curl,dom,fileinfo,gd,intl,json,mbstring,openssl,pdo_sqlite,posix,sqlite,xml,zip
coverage: none
- name: Composer install
run: composer install
- name: Composer update nextcloud/ocp
run: composer require --dev nextcloud/ocp:dev-${{ matrix.branches }}
continue-on-error: true
- name: Reset checkout dirs
run: |
git clean -f 3rdparty
git clean -f vendor
git checkout 3rdparty vendor
continue-on-error: true
- name: Create Pull Request
uses: peter-evans/create-pull-request@v3
with:
token: ${{ secrets.COMMAND_BOT_PAT }}
commit-message: Update psalm baseline
committer: GitHub <noreply@github.com>
author: nextcloud-command <nextcloud-command@users.noreply.github.com>
signoff: true
branch: automated/noid/${{ matrix.branches }}-update-nextcloud-ocp
title: "[${{ matrix.branches }}] Update nextcloud/ocp dependency"
body: |
Auto-generated update of [nextcloud/ocp](https://github.com/nextcloud-deps/ocp/) dependency
labels: |
dependencies
3. to review

View File

@@ -2,8 +2,9 @@
host = https://www.transifex.com host = https://www.transifex.com
lang_map = bg_BG: bg, cs_CZ: cs, fi_FI: fi, hu_HU: hu, nb_NO: nb, sk_SK: sk, th_TH: th, ja_JP: ja lang_map = bg_BG: bg, cs_CZ: cs, fi_FI: fi, hu_HU: hu, nb_NO: nb, sk_SK: sk, th_TH: th, ja_JP: ja
[nextcloud.deck] [o:nextcloud:p:nextcloud:r:deck]
file_filter = translationfiles/<lang>/deck.po file_filter = translationfiles/<lang>/deck.po
source_file = translationfiles/templates/deck.pot source_file = translationfiles/templates/deck.pot
source_lang = en source_lang = en
type = PO type = PO

View File

@@ -1,8 +1,24 @@
# Changelog # Changelog
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
## 1.8.0-beta.1 ## 1.8.2
### Enhancements
### Fixed
- minor style fixes [#4201](https://github.com/nextcloud/deck/pull/4201)
- feat: add validators to check values in services [#4174](https://github.com/nextcloud/deck/pull/4174)
- Add integration test for attachment handling on cards [#4179](https://github.com/nextcloud/deck/pull/4179)
- Add missing userId property [#4198](https://github.com/nextcloud/deck/pull/4198)
## 1.8.1
### Fixed
- Fix Duedate activity @nickvergessen [#4155](https://github.com/nextcloud/deck/pull/4155)
## 1.8.0
### Added
- Nextcloud 25 compatibility - Nextcloud 25 compatibility
- Performance improvements - Performance improvements
@@ -14,10 +30,26 @@ All notable changes to this project will be documented in this file.
- Improve filter popover accessibility @juliushaertl [#3820](https://github.com/nextcloud/deck/pull/3820) - Improve filter popover accessibility @juliushaertl [#3820](https://github.com/nextcloud/deck/pull/3820)
- Set ids to skip to content/navigation @juliushaertl [#3924](https://github.com/nextcloud/deck/pull/3924) - Set ids to skip to content/navigation @juliushaertl [#3924](https://github.com/nextcloud/deck/pull/3924)
- Invert icons properly in dark mode @juliushaertl [#3939](https://github.com/nextcloud/deck/pull/3939) - Invert icons properly in dark mode @juliushaertl [#3939](https://github.com/nextcloud/deck/pull/3939)
- Bump dependencies - Implement card reference widget @eneiluj [#4031](https://github.com/nextcloud/deck/pull/4031)
- Implement new dashboard widget interfaces @eneiluj [#4033](https://github.com/nextcloud/deck/pull/4033)
- Add related resources panel to board sharing tab sidebar @Pytal [#4000](https://github.com/nextcloud/deck/pull/4000)
### Fixed ### Fixed
- Fix sorting stacks [#4116](https://github.com/nextcloud/deck/pull/4116)
- Fix issue with duedate format [#4140](https://github.com/nextcloud/deck/pull/4140)
- Fix missing icon for activity rendering [#4090](https://github.com/nextcloud/deck/pull/4090)
- disables autocomplete on card creation [#4142](https://github.com/nextcloud/deck/pull/4142)
- Set event link also for notifications that get emitted from activities [#4117](https://github.com/nextcloud/deck/pull/4117)
- Fix attachment creator name: show display name @eneiluj [#4036](https://github.com/nextcloud/deck/pull/4036)
- Fix reference provider when caching @eneiluj [#4056](https://github.com/nextcloud/deck/pull/4056)
- Use global import for nextcloud-vue [#4072](https://github.com/nextcloud/deck/pull/4072)
- Disable Create card button while no stack is chosen @icewind1991 [#4014](https://github.com/nextcloud/deck/pull/4014)
- Adjust testing matrix for Nextcloud 25 on stable25 @nickvergessen [#4068](https://github.com/nextcloud/deck/pull/4068)
- Fix Card menu not displaying when description is not set @marcelklehr [#4105](https://github.com/nextcloud/deck/pull/4105)
- Reference widget adjustments for Text [#4075](https://github.com/nextcloud/deck/pull/4075)
- use OCP\Collaboration\Reference\Reference [#4078](https://github.com/nextcloud/deck/pull/4078)
- Cache user membership for circles [#4141](https://github.com/nextcloud/deck/pull/4141)
- set last modified when the card was found. Fixes #3763 @ylebre [#3796](https://github.com/nextcloud/deck/pull/3796) - set last modified when the card was found. Fixes #3763 @ylebre [#3796](https://github.com/nextcloud/deck/pull/3796)
- Increase file count after sharing @luka-nextcloud [#3682](https://github.com/nextcloud/deck/pull/3682) - Increase file count after sharing @luka-nextcloud [#3682](https://github.com/nextcloud/deck/pull/3682)
- Align Duedate-delete icon properly - fixes nextcloud/deck#3791 @Ben-Ro [#3811](https://github.com/nextcloud/deck/pull/3811) - Align Duedate-delete icon properly - fixes nextcloud/deck#3791 @Ben-Ro [#3811](https://github.com/nextcloud/deck/pull/3811)

View File

@@ -16,7 +16,7 @@
- 🚀 Get your project organized - 🚀 Get your project organized
</description> </description>
<version>1.8.0-beta.1</version> <version>1.8.2</version>
<licence>agpl</licence> <licence>agpl</licence>
<author>Julius Härtl</author> <author>Julius Härtl</author>
<namespace>Deck</namespace> <namespace>Deck</namespace>

View File

@@ -14,12 +14,12 @@
}, },
"require-dev": { "require-dev": {
"roave/security-advisories": "dev-master", "roave/security-advisories": "dev-master",
"christophwurst/nextcloud": "dev-master",
"phpunit/phpunit": "^9", "phpunit/phpunit": "^9",
"nextcloud/coding-standard": "^1.0.0", "nextcloud/coding-standard": "^1.0.0",
"symfony/event-dispatcher": "^4.0", "symfony/event-dispatcher": "^4.0",
"vimeo/psalm": "^4.3", "vimeo/psalm": "^4.3",
"php-parallel-lint/php-parallel-lint": "^1.2" "php-parallel-lint/php-parallel-lint": "^1.2",
"nextcloud/ocp": "dev-stable25"
}, },
"config": { "config": {
"optimize-autoloader": true, "optimize-autoloader": true,
@@ -44,5 +44,10 @@
], ],
"test:unit": "phpunit -c tests/phpunit.xml", "test:unit": "phpunit -c tests/phpunit.xml",
"test:integration": "phpunit -c tests/phpunit.integration.xml && cd tests/integration && ./run.sh" "test:integration": "phpunit -c tests/phpunit.integration.xml && cd tests/integration && ./run.sh"
},
"autoload-dev": {
"psr-4": {
"OCP\\": "vendor/nextcloud/ocp/OCP"
}
} }
} }

91
composer.lock generated
View File

@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "33c2fe0cccf29841e021001c6430310a", "content-hash": "445858d371d9a1c7057d0603c566966a",
"packages": [ "packages": [
{ {
"name": "cogpowered/finediff", "name": "cogpowered/finediff",
@@ -299,50 +299,6 @@
], ],
"time": "2021-03-30T17:13:30+00:00" "time": "2021-03-30T17:13:30+00:00"
}, },
{
"name": "christophwurst/nextcloud",
"version": "dev-master",
"source": {
"type": "git",
"url": "https://github.com/ChristophWurst/nextcloud_composer.git",
"reference": "6a6fe9467e4427f17b1fade97d6252793fc7a9e8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/ChristophWurst/nextcloud_composer/zipball/6a6fe9467e4427f17b1fade97d6252793fc7a9e8",
"reference": "6a6fe9467e4427f17b1fade97d6252793fc7a9e8",
"shasum": ""
},
"require": {
"php": "^7.4 || ~8.0 || ~8.1",
"psr/container": "^1.1.1",
"psr/event-dispatcher": "^1.0",
"psr/log": "^1.1"
},
"default-branch": true,
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "25.0.0-dev"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"AGPL-3.0-or-later"
],
"authors": [
{
"name": "Christoph Wurst",
"email": "christoph@winzerhof-wurst.at"
}
],
"description": "Composer package containing Nextcloud's public API (classes, interfaces)",
"support": {
"issues": "https://github.com/ChristophWurst/nextcloud_composer/issues",
"source": "https://github.com/ChristophWurst/nextcloud_composer/tree/master"
},
"time": "2022-07-06T02:28:38+00:00"
},
{ {
"name": "composer/package-versions-deprecated", "name": "composer/package-versions-deprecated",
"version": "1.11.99.5", "version": "1.11.99.5",
@@ -1234,6 +1190,49 @@
}, },
"time": "2021-11-10T08:44:10+00:00" "time": "2021-11-10T08:44:10+00:00"
}, },
{
"name": "nextcloud/ocp",
"version": "dev-stable25",
"source": {
"type": "git",
"url": "https://github.com/nextcloud-deps/ocp.git",
"reference": "9b19a5a12c990cafe832aa8ccc95be4f57f24c9d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/nextcloud-deps/ocp/zipball/9b19a5a12c990cafe832aa8ccc95be4f57f24c9d",
"reference": "9b19a5a12c990cafe832aa8ccc95be4f57f24c9d",
"shasum": ""
},
"require": {
"php": "^7.4 || ~8.0 || ~8.1",
"psr/container": "^1.1.1",
"psr/event-dispatcher": "^1.0",
"psr/log": "^1.1"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "26.0.0-dev"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"AGPL-3.0-or-later"
],
"authors": [
{
"name": "Christoph Wurst",
"email": "christoph@winzerhof-wurst.at"
}
],
"description": "Composer package containing Nextcloud's public API (classes, interfaces)",
"support": {
"issues": "https://github.com/nextcloud-deps/ocp/issues",
"source": "https://github.com/nextcloud-deps/ocp/tree/stable25"
},
"time": "2022-11-11T00:48:02+00:00"
},
{ {
"name": "nikic/php-parser", "name": "nikic/php-parser",
"version": "v4.14.0", "version": "v4.14.0",
@@ -5392,7 +5391,7 @@
"minimum-stability": "stable", "minimum-stability": "stable",
"stability-flags": { "stability-flags": {
"roave/security-advisories": 20, "roave/security-advisories": 20,
"christophwurst/nextcloud": 20 "nextcloud/ocp": 20
}, },
"prefer-stable": false, "prefer-stable": false,
"prefer-lowest": false, "prefer-lowest": false,

View File

@@ -13,7 +13,7 @@ describe('Board', function() {
}) })
it('Can create a board', function() { it('Can create a board', function() {
const board = 'Test' const board = 'TestBoard'
cy.intercept({ cy.intercept({
method: 'POST', method: 'POST',

1
img/archive.svg Normal file
View File

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><g transform="translate(0 -1036.362)"><path d="M1.93 1041.296c-.185 0-.336.138-.336.31v9.842c0 .172.15.313.336.313h12.517c.185 0 .333-.14.333-.313v-9.842c0-.172-.148-.31-.333-.31H1.93zm4.124 1.507h4.223c.39 0 .705.314.705.704v.43c0 .39-.315.705-.705.705H6.054a.703.703 0 0 1-.705-.705v-.43c0-.39.314-.704.705-.704z"/><rect width="15.742" height="2.296" x=".136" y="1037.543" ry=".42"/></g></svg>

After

Width:  |  Height:  |  Size: 478 B

View File

@@ -183,8 +183,10 @@ OC.L10N.register(
"Failed to transfer the board to {user}" : "Неуспешно прехвърляне на таблото на {user}", "Failed to transfer the board to {user}" : "Неуспешно прехвърляне на таблото на {user}",
"Add a new list" : "Добавяне на нов списък", "Add a new list" : "Добавяне на нов списък",
"Archive all cards" : "Архивира всички карти", "Archive all cards" : "Архивира всички карти",
"Unarchive all cards" : "Разархивиране на всички карти",
"Delete list" : "Изтрива списък", "Delete list" : "Изтрива списък",
"Archive all cards in this list" : "Архивира всички карти в този списък", "Archive all cards in this list" : "Архивира всички карти в този списък",
"Unarchive all cards in this list" : "Разархивиране всички карти в този списък",
"Add a new card" : "Добави нова карта", "Add a new card" : "Добави нова карта",
"Card name" : "Име на карта", "Card name" : "Име на карта",
"List deleted" : "Списъкът е изтрит", "List deleted" : "Списъкът е изтрит",
@@ -260,6 +262,7 @@ OC.L10N.register(
"Shared with you" : "Споделени с вас", "Shared with you" : "Споделени с вас",
"Deck settings" : "Настройки на платформата", "Deck settings" : "Настройки на платформата",
"Use bigger card view" : "Използва по-голям изглед на картата", "Use bigger card view" : "Използва по-голям изглед на картата",
"Show card ID badge" : "Показване на обозначение за самоличност на картата",
"Show boards in calendar/tasks" : "Показване на таблата в календар / задачи", "Show boards in calendar/tasks" : "Показване на таблата в календар / задачи",
"Limit deck usage of groups" : "Ограничава използването на набора от групи", "Limit deck usage of groups" : "Ограничава използването на набора от групи",
"Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Ограничаването на приложението Deck/набор/ ще блокира потребителите, които не са част от тези групи, да създават свои собствени табла. Потребителите все още ще могат да работят на таблата, които са споделени с тях.", "Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Ограничаването на приложението Deck/набор/ ще блокира потребителите, които не са част от тези групи, да създават свои собствени табла. Потребителите все още ще могат да работят на таблата, които са споделени с тях.",
@@ -286,6 +289,7 @@ OC.L10N.register(
"Search for {searchQuery} in all boards" : "Търсене на {searchQuery} във всички табла", "Search for {searchQuery} in all boards" : "Търсене на {searchQuery} във всички табла",
"No results found" : "Няма намерени резултати", "No results found" : "Няма намерени резултати",
"{stack} in {board}" : "{stack} в {board}", "{stack} in {board}" : "{stack} в {board}",
"Click to expand description" : "Кликване за разширяване на описанието",
"* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Създаден на {created}\n* Последна промяна на {lastMod} \n* {nbAttachments} прикачени файлове \n* {nbComments} коментара", "* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Създаден на {created}\n* Последна промяна на {lastMod} \n* {nbAttachments} прикачени файлове \n* {nbComments} коментара",
"{nbCards} cards" : "{nbCards} карти", "{nbCards} cards" : "{nbCards} карти",
"No upcoming cards" : "Няма предстоящи карти", "No upcoming cards" : "Няма предстоящи карти",

View File

@@ -181,8 +181,10 @@
"Failed to transfer the board to {user}" : "Неуспешно прехвърляне на таблото на {user}", "Failed to transfer the board to {user}" : "Неуспешно прехвърляне на таблото на {user}",
"Add a new list" : "Добавяне на нов списък", "Add a new list" : "Добавяне на нов списък",
"Archive all cards" : "Архивира всички карти", "Archive all cards" : "Архивира всички карти",
"Unarchive all cards" : "Разархивиране на всички карти",
"Delete list" : "Изтрива списък", "Delete list" : "Изтрива списък",
"Archive all cards in this list" : "Архивира всички карти в този списък", "Archive all cards in this list" : "Архивира всички карти в този списък",
"Unarchive all cards in this list" : "Разархивиране всички карти в този списък",
"Add a new card" : "Добави нова карта", "Add a new card" : "Добави нова карта",
"Card name" : "Име на карта", "Card name" : "Име на карта",
"List deleted" : "Списъкът е изтрит", "List deleted" : "Списъкът е изтрит",
@@ -258,6 +260,7 @@
"Shared with you" : "Споделени с вас", "Shared with you" : "Споделени с вас",
"Deck settings" : "Настройки на платформата", "Deck settings" : "Настройки на платформата",
"Use bigger card view" : "Използва по-голям изглед на картата", "Use bigger card view" : "Използва по-голям изглед на картата",
"Show card ID badge" : "Показване на обозначение за самоличност на картата",
"Show boards in calendar/tasks" : "Показване на таблата в календар / задачи", "Show boards in calendar/tasks" : "Показване на таблата в календар / задачи",
"Limit deck usage of groups" : "Ограничава използването на набора от групи", "Limit deck usage of groups" : "Ограничава използването на набора от групи",
"Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Ограничаването на приложението Deck/набор/ ще блокира потребителите, които не са част от тези групи, да създават свои собствени табла. Потребителите все още ще могат да работят на таблата, които са споделени с тях.", "Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Ограничаването на приложението Deck/набор/ ще блокира потребителите, които не са част от тези групи, да създават свои собствени табла. Потребителите все още ще могат да работят на таблата, които са споделени с тях.",
@@ -284,6 +287,7 @@
"Search for {searchQuery} in all boards" : "Търсене на {searchQuery} във всички табла", "Search for {searchQuery} in all boards" : "Търсене на {searchQuery} във всички табла",
"No results found" : "Няма намерени резултати", "No results found" : "Няма намерени резултати",
"{stack} in {board}" : "{stack} в {board}", "{stack} in {board}" : "{stack} в {board}",
"Click to expand description" : "Кликване за разширяване на описанието",
"* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Създаден на {created}\n* Последна промяна на {lastMod} \n* {nbAttachments} прикачени файлове \n* {nbComments} коментара", "* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Създаден на {created}\n* Последна промяна на {lastMod} \n* {nbAttachments} прикачени файлове \n* {nbComments} коментара",
"{nbCards} cards" : "{nbCards} карти", "{nbCards} cards" : "{nbCards} карти",
"No upcoming cards" : "Няма предстоящи карти", "No upcoming cards" : "Няма предстоящи карти",

View File

@@ -101,10 +101,12 @@ OC.L10N.register(
"Could not write file to disk" : "No sha pogut escriure el fitxer al disc", "Could not write file to disk" : "No sha pogut escriure el fitxer al disc",
"A PHP extension stopped the file upload" : "Una extensió del PHP ha aturat la carregada del fitxer", "A PHP extension stopped the file upload" : "Una extensió del PHP ha aturat la carregada del fitxer",
"No file uploaded or file size exceeds maximum of %s" : "No s'ha carregat cap fitxer o la mida del fitxer sobrepassa el màxim de %s", "No file uploaded or file size exceeds maximum of %s" : "No s'ha carregat cap fitxer o la mida del fitxer sobrepassa el màxim de %s",
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : "Aquest comentari té més de %s caràcters.\nS'ha afegit com a fitxer adjunt a la targeta amb el nom %s.\nAccessible a l'URL: %s.",
"Card not found" : "No s'ha trobat la targeta", "Card not found" : "No s'ha trobat la targeta",
"Path is already shared with this card" : "Aquesta ruta ja ha estat compartida amb aquesta targeta", "Path is already shared with this card" : "Aquesta ruta ja ha estat compartida amb aquesta targeta",
"Invalid date, date format must be YYYY-MM-DD" : "La data no és vàlida, el format de la data ha de ser YYYY-MM-DD", "Invalid date, date format must be YYYY-MM-DD" : "La data no és vàlida, el format de la data ha de ser YYYY-MM-DD",
"Personal planning and team project organization" : "Planificació personal i organització de projectes en equip", "Personal planning and team project organization" : "Planificació personal i organització de projectes en equip",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in Markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your Markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Tauler és una eina d'organització a l'estil kanban dirigida a la planificació personal i a l'organització de projectes per equips integrada a Nextcloud.\n\n\n- 📥 Afegiu les tasques en targetes i poseu-les en ordre\n- 📄 Apunteu notes addicionals en format Markdown\n- 🔖 Assigneu etiquetes per una millor organització\n- 👥 Compartiu amb el vostre equip, família o amics\n- 📎 Adjunteu fitxers i encasteu-los en la descripció en markdown\n- 💬 Converses amb el vostre equip fent servir comentaris\n- ⚡ Mantingueu el seguiment de canvis al flux d'activitat\n- 🚀 Tingueu el vostre projecte organitzat",
"Card details" : "Detalls de la targeta", "Card details" : "Detalls de la targeta",
"Add board" : "Afegeix un tauler", "Add board" : "Afegeix un tauler",
"Select the board to link to a project" : "Selecciona el tauler per enllaçar a un projecte", "Select the board to link to a project" : "Selecciona el tauler per enllaçar a un projecte",
@@ -115,7 +117,7 @@ OC.L10N.register(
"Select a list" : "Seleccioneu una llista", "Select a list" : "Seleccioneu una llista",
"Card title" : "Títol de la targeta", "Card title" : "Títol de la targeta",
"Cancel" : "Cancel·la", "Cancel" : "Cancel·la",
"Creating the new card …" : "Creant la nova targeta", "Creating the new card …" : "Creant la nova targeta",
"Card \"{card}\" was added to \"{board}\"" : "La targeta \"{card}\" s'ha afegit a \"{board}\"", "Card \"{card}\" was added to \"{board}\"" : "La targeta \"{card}\" s'ha afegit a \"{board}\"",
"Open card" : "Obre la targeta", "Open card" : "Obre la targeta",
"Close" : "Tanca", "Close" : "Tanca",
@@ -134,6 +136,7 @@ OC.L10N.register(
"Archived cards" : "Targetes arxivades", "Archived cards" : "Targetes arxivades",
"Add list" : "Afegeix una llista", "Add list" : "Afegeix una llista",
"List name" : "Nom de la llista", "List name" : "Nom de la llista",
"Active filters" : "Filtres actius",
"Apply filter" : "Aplica el filtre", "Apply filter" : "Aplica el filtre",
"Filter by tag" : "Filtra per etiqueta", "Filter by tag" : "Filtra per etiqueta",
"Filter by assigned user" : "Filtra per usuari assignat", "Filter by assigned user" : "Filtra per usuari assignat",
@@ -162,7 +165,7 @@ OC.L10N.register(
"Undo" : "Desfés", "Undo" : "Desfés",
"Deleted cards" : "Targetes suprimides", "Deleted cards" : "Targetes suprimides",
"Share board with a user, group or circle …" : "Compartir tauler amb un usuari, grup o cercle …", "Share board with a user, group or circle …" : "Compartir tauler amb un usuari, grup o cercle …",
"Searching for users, groups and circles …" : "Buscant usuaris, grups i cercles", "Searching for users, groups and circles …" : "Buscant usuaris, grups i cercles",
"No participants found" : "No s'han trobat participants", "No participants found" : "No s'han trobat participants",
"Board owner" : "Propietari del tauler", "Board owner" : "Propietari del tauler",
"(Group)" : "(Grup)", "(Group)" : "(Grup)",
@@ -173,7 +176,11 @@ OC.L10N.register(
"Owner" : "Propietari", "Owner" : "Propietari",
"Delete" : "Eliminar", "Delete" : "Eliminar",
"Failed to create share with {displayName}" : "Ha fallat la creació de la compartició amb {displayName}", "Failed to create share with {displayName}" : "Ha fallat la creació de la compartició amb {displayName}",
"Are you sure you want to transfer the board {title} to {user}?" : "Esteu segur que voleu transferir el tauler {title} a {user}?",
"Transfer the board." : "Transfereix el tauler.",
"Transfer" : "Transferència", "Transfer" : "Transferència",
"The board has been transferred to {user}" : "El tauler s'ha transferit a {user}",
"Failed to transfer the board to {user}" : "No s'ha pogut transferir el tauler a {user}",
"Add a new list" : "Afegir una llista nova", "Add a new list" : "Afegir una llista nova",
"Archive all cards" : "Arxiva totes les targetes", "Archive all cards" : "Arxiva totes les targetes",
"Delete list" : "Suprimeix la llista", "Delete list" : "Suprimeix la llista",
@@ -203,7 +210,7 @@ OC.L10N.register(
"Comments" : "Comentaris", "Comments" : "Comentaris",
"Modified" : "Darrera modificació", "Modified" : "Darrera modificació",
"Created" : "Creat", "Created" : "Creat",
"The title cannot be empty." : "El títol no pot estar buit", "The title cannot be empty." : "El títol no pot estar buit.",
"No comments yet. Begin the discussion!" : "No hi ha comentaris encara. Començar la discussió!", "No comments yet. Begin the discussion!" : "No hi ha comentaris encara. Començar la discussió!",
"Failed to load comments" : "No s'han pogut carregar els comentaris", "Failed to load comments" : "No s'han pogut carregar els comentaris",
"Assign a tag to this card…" : "Assigna una etiqueta a aquesta targeta…", "Assign a tag to this card…" : "Assigna una etiqueta a aquesta targeta…",
@@ -232,10 +239,12 @@ OC.L10N.register(
"Edit description" : "Edita descripció", "Edit description" : "Edita descripció",
"View description" : "Veure descripció", "View description" : "Veure descripció",
"Add Attachment" : "Afegeix un adjunt", "Add Attachment" : "Afegeix un adjunt",
"Write a description …" : "Escriviu una descripció...", "Write a description …" : "Escriviu una descripció",
"Choose attachment" : "Triar adjunt", "Choose attachment" : "Triar adjunt",
"(group)" : "(grup)", "(group)" : "(grup)",
"Todo items" : "Elements pendents",
"{count} comments, {unread} unread" : "{count} comentaris, {unread} no llegits", "{count} comments, {unread} unread" : "{count} comentaris, {unread} no llegits",
"Edit card title" : "Edita el títol de la targeta",
"Assign to me" : "Assigna'm a mi", "Assign to me" : "Assigna'm a mi",
"Unassign myself" : "Desasignar a mi mateix", "Unassign myself" : "Desasignar a mi mateix",
"Move card" : "Mou la targeta", "Move card" : "Mou la targeta",
@@ -249,6 +258,7 @@ OC.L10N.register(
"All boards" : "Tots els taulers", "All boards" : "Tots els taulers",
"Archived boards" : "Taulers arxivats", "Archived boards" : "Taulers arxivats",
"Shared with you" : "Us han compartit", "Shared with you" : "Us han compartit",
"Deck settings" : "Configuració del Tauler",
"Use bigger card view" : "Utilitza la visualització de targetes més gran", "Use bigger card view" : "Utilitza la visualització de targetes més gran",
"Show boards in calendar/tasks" : "Mostra els taulers al calendari/tasques", "Show boards in calendar/tasks" : "Mostra els taulers al calendari/tasques",
"Limit deck usage of groups" : "Limitar l'ús del tauler de grups", "Limit deck usage of groups" : "Limitar l'ús del tauler de grups",
@@ -269,13 +279,19 @@ OC.L10N.register(
"Only assigned cards" : "Només les targetes assignades", "Only assigned cards" : "Només les targetes assignades",
"No reminder" : "Sense recordatoris", "No reminder" : "Sense recordatoris",
"An error occurred" : "S'ha produït un error", "An error occurred" : "S'ha produït un error",
"Are you sure you want to delete the board {title}? This will delete all the data of this board including archived cards." : "Esteu segur que voleu suprimir el tauler {title}? Això suprimirà totes les dades d'aquest tauler, incloses les targetes arxivades.",
"Delete the board?" : "Voleu suprimir el tauler?", "Delete the board?" : "Voleu suprimir el tauler?",
"Loading filtered view" : "S'està carregant la visualització filtrada", "Loading filtered view" : "S'està carregant la visualització filtrada",
"No due" : "Sense venciment", "No due" : "Sense venciment",
"Search for {searchQuery} in all boards" : "Busca {searchQuery} a tots els taulers", "Search for {searchQuery} in all boards" : "Busca {searchQuery} a tots els taulers",
"No results found" : "No s'han trobat resultats", "No results found" : "No s'han trobat resultats",
"{stack} in {board}" : "{stack} a {board}",
"Click to expand description" : "Feu clic per ampliar la descripció",
"* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Creat el {created}\n* Última modificació el dia {lastMod}\n* {nbAttachments} fitxers adjunts\n* {nbComments} comentaris",
"{nbCards} cards" : "{nbCards} targetes",
"No upcoming cards" : "No hi ha pròximes targetes", "No upcoming cards" : "No hi ha pròximes targetes",
"upcoming cards" : "pròximes targetes", "upcoming cards" : "pròximes targetes",
"Due on {date}" : "Venciment el dia {date}",
"Link to a board" : "Enllaça a un tauler", "Link to a board" : "Enllaça a un tauler",
"Link to a card" : "Enllaç una targeta", "Link to a card" : "Enllaç una targeta",
"Create a card" : "Crea una targeta", "Create a card" : "Crea una targeta",
@@ -288,7 +304,11 @@ OC.L10N.register(
"Share {file} with a Deck card" : "Compartir {file} amb una targeta de Deck", "Share {file} with a Deck card" : "Compartir {file} amb una targeta de Deck",
"Share" : "Compartir", "Share" : "Compartir",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Tauler és una eina d'organització a l'estil kanban dirigida a la planificació personal i a l'organització de projectes per equips integrada a Nextcloud.\n\n\n- 📥 Afegiu les tasques en targetes i poseu-les en ordre\n- 📄 Apunteu notes addicionals en markdown\n- 🔖 Assigneu etiquetes per una organització encara millor\n- 👥 Compartiu amb el vostre equip, família o amics\n- 📎 Adjunteu fitxers i encasteu-los en la descripció en markdown\n- 💬 Debateu amb el vostre equip fent servir comentaris\n- ⚡ Mantingueu el seguiment de canvis al flux d'activitat\n- 🚀 Tingueu el vostre projecte organitzat", "Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Tauler és una eina d'organització a l'estil kanban dirigida a la planificació personal i a l'organització de projectes per equips integrada a Nextcloud.\n\n\n- 📥 Afegiu les tasques en targetes i poseu-les en ordre\n- 📄 Apunteu notes addicionals en markdown\n- 🔖 Assigneu etiquetes per una organització encara millor\n- 👥 Compartiu amb el vostre equip, família o amics\n- 📎 Adjunteu fitxers i encasteu-los en la descripció en markdown\n- 💬 Debateu amb el vostre equip fent servir comentaris\n- ⚡ Mantingueu el seguiment de canvis al flux d'activitat\n- 🚀 Tingueu el vostre projecte organitzat",
"Are you sure you want to transfer the board {title} for {user} ?" : "Esteu segur que voleu transferir el tauler {title} per a {user}?",
"Transfer the board for {user} successfully" : "Transfereix el tauler per a {user} correctament",
"Failed to transfer the board for {user}" : "No s'ha pogut transferir el tauler per a {user}",
"Are you sure you want to delete the board {title}? This will delete all the data of this board." : "Esteu segur que voleu suprimir el tauler {title}? Això eliminarà totes les dades d'aquest tauler.", "Are you sure you want to delete the board {title}? This will delete all the data of this board." : "Esteu segur que voleu suprimir el tauler {title}? Això eliminarà totes les dades d'aquest tauler.",
"This week" : "Aquesta setmana" "This week" : "Aquesta setmana",
"Are you sure you want to transfer the board {title} for {user}?" : "Esteu segur que voleu transferir el tauler {title} per a {user}?"
}, },
"nplurals=2; plural=(n != 1);"); "nplurals=2; plural=(n != 1);");

View File

@@ -99,10 +99,12 @@
"Could not write file to disk" : "No sha pogut escriure el fitxer al disc", "Could not write file to disk" : "No sha pogut escriure el fitxer al disc",
"A PHP extension stopped the file upload" : "Una extensió del PHP ha aturat la carregada del fitxer", "A PHP extension stopped the file upload" : "Una extensió del PHP ha aturat la carregada del fitxer",
"No file uploaded or file size exceeds maximum of %s" : "No s'ha carregat cap fitxer o la mida del fitxer sobrepassa el màxim de %s", "No file uploaded or file size exceeds maximum of %s" : "No s'ha carregat cap fitxer o la mida del fitxer sobrepassa el màxim de %s",
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : "Aquest comentari té més de %s caràcters.\nS'ha afegit com a fitxer adjunt a la targeta amb el nom %s.\nAccessible a l'URL: %s.",
"Card not found" : "No s'ha trobat la targeta", "Card not found" : "No s'ha trobat la targeta",
"Path is already shared with this card" : "Aquesta ruta ja ha estat compartida amb aquesta targeta", "Path is already shared with this card" : "Aquesta ruta ja ha estat compartida amb aquesta targeta",
"Invalid date, date format must be YYYY-MM-DD" : "La data no és vàlida, el format de la data ha de ser YYYY-MM-DD", "Invalid date, date format must be YYYY-MM-DD" : "La data no és vàlida, el format de la data ha de ser YYYY-MM-DD",
"Personal planning and team project organization" : "Planificació personal i organització de projectes en equip", "Personal planning and team project organization" : "Planificació personal i organització de projectes en equip",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in Markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your Markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Tauler és una eina d'organització a l'estil kanban dirigida a la planificació personal i a l'organització de projectes per equips integrada a Nextcloud.\n\n\n- 📥 Afegiu les tasques en targetes i poseu-les en ordre\n- 📄 Apunteu notes addicionals en format Markdown\n- 🔖 Assigneu etiquetes per una millor organització\n- 👥 Compartiu amb el vostre equip, família o amics\n- 📎 Adjunteu fitxers i encasteu-los en la descripció en markdown\n- 💬 Converses amb el vostre equip fent servir comentaris\n- ⚡ Mantingueu el seguiment de canvis al flux d'activitat\n- 🚀 Tingueu el vostre projecte organitzat",
"Card details" : "Detalls de la targeta", "Card details" : "Detalls de la targeta",
"Add board" : "Afegeix un tauler", "Add board" : "Afegeix un tauler",
"Select the board to link to a project" : "Selecciona el tauler per enllaçar a un projecte", "Select the board to link to a project" : "Selecciona el tauler per enllaçar a un projecte",
@@ -113,7 +115,7 @@
"Select a list" : "Seleccioneu una llista", "Select a list" : "Seleccioneu una llista",
"Card title" : "Títol de la targeta", "Card title" : "Títol de la targeta",
"Cancel" : "Cancel·la", "Cancel" : "Cancel·la",
"Creating the new card …" : "Creant la nova targeta", "Creating the new card …" : "Creant la nova targeta",
"Card \"{card}\" was added to \"{board}\"" : "La targeta \"{card}\" s'ha afegit a \"{board}\"", "Card \"{card}\" was added to \"{board}\"" : "La targeta \"{card}\" s'ha afegit a \"{board}\"",
"Open card" : "Obre la targeta", "Open card" : "Obre la targeta",
"Close" : "Tanca", "Close" : "Tanca",
@@ -132,6 +134,7 @@
"Archived cards" : "Targetes arxivades", "Archived cards" : "Targetes arxivades",
"Add list" : "Afegeix una llista", "Add list" : "Afegeix una llista",
"List name" : "Nom de la llista", "List name" : "Nom de la llista",
"Active filters" : "Filtres actius",
"Apply filter" : "Aplica el filtre", "Apply filter" : "Aplica el filtre",
"Filter by tag" : "Filtra per etiqueta", "Filter by tag" : "Filtra per etiqueta",
"Filter by assigned user" : "Filtra per usuari assignat", "Filter by assigned user" : "Filtra per usuari assignat",
@@ -160,7 +163,7 @@
"Undo" : "Desfés", "Undo" : "Desfés",
"Deleted cards" : "Targetes suprimides", "Deleted cards" : "Targetes suprimides",
"Share board with a user, group or circle …" : "Compartir tauler amb un usuari, grup o cercle …", "Share board with a user, group or circle …" : "Compartir tauler amb un usuari, grup o cercle …",
"Searching for users, groups and circles …" : "Buscant usuaris, grups i cercles", "Searching for users, groups and circles …" : "Buscant usuaris, grups i cercles",
"No participants found" : "No s'han trobat participants", "No participants found" : "No s'han trobat participants",
"Board owner" : "Propietari del tauler", "Board owner" : "Propietari del tauler",
"(Group)" : "(Grup)", "(Group)" : "(Grup)",
@@ -171,7 +174,11 @@
"Owner" : "Propietari", "Owner" : "Propietari",
"Delete" : "Eliminar", "Delete" : "Eliminar",
"Failed to create share with {displayName}" : "Ha fallat la creació de la compartició amb {displayName}", "Failed to create share with {displayName}" : "Ha fallat la creació de la compartició amb {displayName}",
"Are you sure you want to transfer the board {title} to {user}?" : "Esteu segur que voleu transferir el tauler {title} a {user}?",
"Transfer the board." : "Transfereix el tauler.",
"Transfer" : "Transferència", "Transfer" : "Transferència",
"The board has been transferred to {user}" : "El tauler s'ha transferit a {user}",
"Failed to transfer the board to {user}" : "No s'ha pogut transferir el tauler a {user}",
"Add a new list" : "Afegir una llista nova", "Add a new list" : "Afegir una llista nova",
"Archive all cards" : "Arxiva totes les targetes", "Archive all cards" : "Arxiva totes les targetes",
"Delete list" : "Suprimeix la llista", "Delete list" : "Suprimeix la llista",
@@ -201,7 +208,7 @@
"Comments" : "Comentaris", "Comments" : "Comentaris",
"Modified" : "Darrera modificació", "Modified" : "Darrera modificació",
"Created" : "Creat", "Created" : "Creat",
"The title cannot be empty." : "El títol no pot estar buit", "The title cannot be empty." : "El títol no pot estar buit.",
"No comments yet. Begin the discussion!" : "No hi ha comentaris encara. Començar la discussió!", "No comments yet. Begin the discussion!" : "No hi ha comentaris encara. Començar la discussió!",
"Failed to load comments" : "No s'han pogut carregar els comentaris", "Failed to load comments" : "No s'han pogut carregar els comentaris",
"Assign a tag to this card…" : "Assigna una etiqueta a aquesta targeta…", "Assign a tag to this card…" : "Assigna una etiqueta a aquesta targeta…",
@@ -230,10 +237,12 @@
"Edit description" : "Edita descripció", "Edit description" : "Edita descripció",
"View description" : "Veure descripció", "View description" : "Veure descripció",
"Add Attachment" : "Afegeix un adjunt", "Add Attachment" : "Afegeix un adjunt",
"Write a description …" : "Escriviu una descripció...", "Write a description …" : "Escriviu una descripció",
"Choose attachment" : "Triar adjunt", "Choose attachment" : "Triar adjunt",
"(group)" : "(grup)", "(group)" : "(grup)",
"Todo items" : "Elements pendents",
"{count} comments, {unread} unread" : "{count} comentaris, {unread} no llegits", "{count} comments, {unread} unread" : "{count} comentaris, {unread} no llegits",
"Edit card title" : "Edita el títol de la targeta",
"Assign to me" : "Assigna'm a mi", "Assign to me" : "Assigna'm a mi",
"Unassign myself" : "Desasignar a mi mateix", "Unassign myself" : "Desasignar a mi mateix",
"Move card" : "Mou la targeta", "Move card" : "Mou la targeta",
@@ -247,6 +256,7 @@
"All boards" : "Tots els taulers", "All boards" : "Tots els taulers",
"Archived boards" : "Taulers arxivats", "Archived boards" : "Taulers arxivats",
"Shared with you" : "Us han compartit", "Shared with you" : "Us han compartit",
"Deck settings" : "Configuració del Tauler",
"Use bigger card view" : "Utilitza la visualització de targetes més gran", "Use bigger card view" : "Utilitza la visualització de targetes més gran",
"Show boards in calendar/tasks" : "Mostra els taulers al calendari/tasques", "Show boards in calendar/tasks" : "Mostra els taulers al calendari/tasques",
"Limit deck usage of groups" : "Limitar l'ús del tauler de grups", "Limit deck usage of groups" : "Limitar l'ús del tauler de grups",
@@ -267,13 +277,19 @@
"Only assigned cards" : "Només les targetes assignades", "Only assigned cards" : "Només les targetes assignades",
"No reminder" : "Sense recordatoris", "No reminder" : "Sense recordatoris",
"An error occurred" : "S'ha produït un error", "An error occurred" : "S'ha produït un error",
"Are you sure you want to delete the board {title}? This will delete all the data of this board including archived cards." : "Esteu segur que voleu suprimir el tauler {title}? Això suprimirà totes les dades d'aquest tauler, incloses les targetes arxivades.",
"Delete the board?" : "Voleu suprimir el tauler?", "Delete the board?" : "Voleu suprimir el tauler?",
"Loading filtered view" : "S'està carregant la visualització filtrada", "Loading filtered view" : "S'està carregant la visualització filtrada",
"No due" : "Sense venciment", "No due" : "Sense venciment",
"Search for {searchQuery} in all boards" : "Busca {searchQuery} a tots els taulers", "Search for {searchQuery} in all boards" : "Busca {searchQuery} a tots els taulers",
"No results found" : "No s'han trobat resultats", "No results found" : "No s'han trobat resultats",
"{stack} in {board}" : "{stack} a {board}",
"Click to expand description" : "Feu clic per ampliar la descripció",
"* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Creat el {created}\n* Última modificació el dia {lastMod}\n* {nbAttachments} fitxers adjunts\n* {nbComments} comentaris",
"{nbCards} cards" : "{nbCards} targetes",
"No upcoming cards" : "No hi ha pròximes targetes", "No upcoming cards" : "No hi ha pròximes targetes",
"upcoming cards" : "pròximes targetes", "upcoming cards" : "pròximes targetes",
"Due on {date}" : "Venciment el dia {date}",
"Link to a board" : "Enllaça a un tauler", "Link to a board" : "Enllaça a un tauler",
"Link to a card" : "Enllaç una targeta", "Link to a card" : "Enllaç una targeta",
"Create a card" : "Crea una targeta", "Create a card" : "Crea una targeta",
@@ -286,7 +302,11 @@
"Share {file} with a Deck card" : "Compartir {file} amb una targeta de Deck", "Share {file} with a Deck card" : "Compartir {file} amb una targeta de Deck",
"Share" : "Compartir", "Share" : "Compartir",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Tauler és una eina d'organització a l'estil kanban dirigida a la planificació personal i a l'organització de projectes per equips integrada a Nextcloud.\n\n\n- 📥 Afegiu les tasques en targetes i poseu-les en ordre\n- 📄 Apunteu notes addicionals en markdown\n- 🔖 Assigneu etiquetes per una organització encara millor\n- 👥 Compartiu amb el vostre equip, família o amics\n- 📎 Adjunteu fitxers i encasteu-los en la descripció en markdown\n- 💬 Debateu amb el vostre equip fent servir comentaris\n- ⚡ Mantingueu el seguiment de canvis al flux d'activitat\n- 🚀 Tingueu el vostre projecte organitzat", "Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Tauler és una eina d'organització a l'estil kanban dirigida a la planificació personal i a l'organització de projectes per equips integrada a Nextcloud.\n\n\n- 📥 Afegiu les tasques en targetes i poseu-les en ordre\n- 📄 Apunteu notes addicionals en markdown\n- 🔖 Assigneu etiquetes per una organització encara millor\n- 👥 Compartiu amb el vostre equip, família o amics\n- 📎 Adjunteu fitxers i encasteu-los en la descripció en markdown\n- 💬 Debateu amb el vostre equip fent servir comentaris\n- ⚡ Mantingueu el seguiment de canvis al flux d'activitat\n- 🚀 Tingueu el vostre projecte organitzat",
"Are you sure you want to transfer the board {title} for {user} ?" : "Esteu segur que voleu transferir el tauler {title} per a {user}?",
"Transfer the board for {user} successfully" : "Transfereix el tauler per a {user} correctament",
"Failed to transfer the board for {user}" : "No s'ha pogut transferir el tauler per a {user}",
"Are you sure you want to delete the board {title}? This will delete all the data of this board." : "Esteu segur que voleu suprimir el tauler {title}? Això eliminarà totes les dades d'aquest tauler.", "Are you sure you want to delete the board {title}? This will delete all the data of this board." : "Esteu segur que voleu suprimir el tauler {title}? Això eliminarà totes les dades d'aquest tauler.",
"This week" : "Aquesta setmana" "This week" : "Aquesta setmana",
"Are you sure you want to transfer the board {title} for {user}?" : "Esteu segur que voleu transferir el tauler {title} per a {user}?"
},"pluralForm" :"nplurals=2; plural=(n != 1);" },"pluralForm" :"nplurals=2; plural=(n != 1);"
} }

View File

@@ -138,7 +138,7 @@ OC.L10N.register(
"List name" : "Název seznamu", "List name" : "Název seznamu",
"Active filters" : "Zapnuté filtry", "Active filters" : "Zapnuté filtry",
"Apply filter" : "Uplatnit filtr", "Apply filter" : "Uplatnit filtr",
"Filter by tag" : "Filtrovat podle příznaků", "Filter by tag" : "Filtrovat podle štítku",
"Filter by assigned user" : "Filtrovat podle uživatele, který je úkolem pověřen", "Filter by assigned user" : "Filtrovat podle uživatele, který je úkolem pověřen",
"Unassigned" : "Nepřiřazeno", "Unassigned" : "Nepřiřazeno",
"Filter by due date" : "Filtrovat podle termínu", "Filter by due date" : "Filtrovat podle termínu",
@@ -183,8 +183,10 @@ OC.L10N.register(
"Failed to transfer the board to {user}" : "Nepodařilo se předat vlastnictví tabule uživateli {user}", "Failed to transfer the board to {user}" : "Nepodařilo se předat vlastnictví tabule uživateli {user}",
"Add a new list" : "Přidat nový sloupec", "Add a new list" : "Přidat nový sloupec",
"Archive all cards" : "Archivovat všechny karty", "Archive all cards" : "Archivovat všechny karty",
"Unarchive all cards" : "Zrušit archivaci všech karet",
"Delete list" : "Smazat seznam", "Delete list" : "Smazat seznam",
"Archive all cards in this list" : "Archivovat všechny karty v tomto seznamu", "Archive all cards in this list" : "Archivovat všechny karty v tomto seznamu",
"Unarchive all cards in this list" : "Zrušit archivaci všech karet v tomto seznamu",
"Add a new card" : "Přidat novou kartu", "Add a new card" : "Přidat novou kartu",
"Card name" : "Název karty", "Card name" : "Název karty",
"List deleted" : "Seznam smazán", "List deleted" : "Seznam smazán",
@@ -260,6 +262,7 @@ OC.L10N.register(
"Shared with you" : "Sdíleno s vámi", "Shared with you" : "Sdíleno s vámi",
"Deck settings" : "Nastavení pro Deck", "Deck settings" : "Nastavení pro Deck",
"Use bigger card view" : "Použít větší zobrazení karet", "Use bigger card view" : "Použít větší zobrazení karet",
"Show card ID badge" : "Zobrazit odznáček s identifikátorem karty",
"Show boards in calendar/tasks" : "Zobrazit tabule v kalendáři/úkolech", "Show boards in calendar/tasks" : "Zobrazit tabule v kalendáři/úkolech",
"Limit deck usage of groups" : "Omezit využití deck na skupiny", "Limit deck usage of groups" : "Omezit využití deck na skupiny",
"Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Omezení nastavené pro Deck brání uživatelům, kteří nejsou součástí těchto skupin, ve vytváření vlastních tabulí. Nicméně i tak ale pořád budou moci pracovat na tabulích, které jsou jim nasdíleny.", "Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Omezení nastavené pro Deck brání uživatelům, kteří nejsou součástí těchto skupin, ve vytváření vlastních tabulí. Nicméně i tak ale pořád budou moci pracovat na tabulích, které jsou jim nasdíleny.",
@@ -286,6 +289,7 @@ OC.L10N.register(
"Search for {searchQuery} in all boards" : "Hledat {searchQuery} na všech tabulích", "Search for {searchQuery} in all boards" : "Hledat {searchQuery} na všech tabulích",
"No results found" : "Nenalezeny žádné výsledky", "No results found" : "Nenalezeny žádné výsledky",
"{stack} in {board}" : "{stack} v {board}", "{stack} in {board}" : "{stack} v {board}",
"Click to expand description" : "Popis rozbalíte kliknutím",
"* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Vytvořeno {created}\n* Naposledy upraveno {lastMod}\n* {nbAttachments} příloh\n* {nbComments} komentářů", "* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Vytvořeno {created}\n* Naposledy upraveno {lastMod}\n* {nbAttachments} příloh\n* {nbComments} komentářů",
"{nbCards} cards" : "{nbCards} karet", "{nbCards} cards" : "{nbCards} karet",
"No upcoming cards" : "Žádné nadcházející karty", "No upcoming cards" : "Žádné nadcházející karty",

View File

@@ -136,7 +136,7 @@
"List name" : "Název seznamu", "List name" : "Název seznamu",
"Active filters" : "Zapnuté filtry", "Active filters" : "Zapnuté filtry",
"Apply filter" : "Uplatnit filtr", "Apply filter" : "Uplatnit filtr",
"Filter by tag" : "Filtrovat podle příznaků", "Filter by tag" : "Filtrovat podle štítku",
"Filter by assigned user" : "Filtrovat podle uživatele, který je úkolem pověřen", "Filter by assigned user" : "Filtrovat podle uživatele, který je úkolem pověřen",
"Unassigned" : "Nepřiřazeno", "Unassigned" : "Nepřiřazeno",
"Filter by due date" : "Filtrovat podle termínu", "Filter by due date" : "Filtrovat podle termínu",
@@ -181,8 +181,10 @@
"Failed to transfer the board to {user}" : "Nepodařilo se předat vlastnictví tabule uživateli {user}", "Failed to transfer the board to {user}" : "Nepodařilo se předat vlastnictví tabule uživateli {user}",
"Add a new list" : "Přidat nový sloupec", "Add a new list" : "Přidat nový sloupec",
"Archive all cards" : "Archivovat všechny karty", "Archive all cards" : "Archivovat všechny karty",
"Unarchive all cards" : "Zrušit archivaci všech karet",
"Delete list" : "Smazat seznam", "Delete list" : "Smazat seznam",
"Archive all cards in this list" : "Archivovat všechny karty v tomto seznamu", "Archive all cards in this list" : "Archivovat všechny karty v tomto seznamu",
"Unarchive all cards in this list" : "Zrušit archivaci všech karet v tomto seznamu",
"Add a new card" : "Přidat novou kartu", "Add a new card" : "Přidat novou kartu",
"Card name" : "Název karty", "Card name" : "Název karty",
"List deleted" : "Seznam smazán", "List deleted" : "Seznam smazán",
@@ -258,6 +260,7 @@
"Shared with you" : "Sdíleno s vámi", "Shared with you" : "Sdíleno s vámi",
"Deck settings" : "Nastavení pro Deck", "Deck settings" : "Nastavení pro Deck",
"Use bigger card view" : "Použít větší zobrazení karet", "Use bigger card view" : "Použít větší zobrazení karet",
"Show card ID badge" : "Zobrazit odznáček s identifikátorem karty",
"Show boards in calendar/tasks" : "Zobrazit tabule v kalendáři/úkolech", "Show boards in calendar/tasks" : "Zobrazit tabule v kalendáři/úkolech",
"Limit deck usage of groups" : "Omezit využití deck na skupiny", "Limit deck usage of groups" : "Omezit využití deck na skupiny",
"Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Omezení nastavené pro Deck brání uživatelům, kteří nejsou součástí těchto skupin, ve vytváření vlastních tabulí. Nicméně i tak ale pořád budou moci pracovat na tabulích, které jsou jim nasdíleny.", "Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Omezení nastavené pro Deck brání uživatelům, kteří nejsou součástí těchto skupin, ve vytváření vlastních tabulí. Nicméně i tak ale pořád budou moci pracovat na tabulích, které jsou jim nasdíleny.",
@@ -284,6 +287,7 @@
"Search for {searchQuery} in all boards" : "Hledat {searchQuery} na všech tabulích", "Search for {searchQuery} in all boards" : "Hledat {searchQuery} na všech tabulích",
"No results found" : "Nenalezeny žádné výsledky", "No results found" : "Nenalezeny žádné výsledky",
"{stack} in {board}" : "{stack} v {board}", "{stack} in {board}" : "{stack} v {board}",
"Click to expand description" : "Popis rozbalíte kliknutím",
"* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Vytvořeno {created}\n* Naposledy upraveno {lastMod}\n* {nbAttachments} příloh\n* {nbComments} komentářů", "* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Vytvořeno {created}\n* Naposledy upraveno {lastMod}\n* {nbAttachments} příloh\n* {nbComments} komentářů",
"{nbCards} cards" : "{nbCards} karet", "{nbCards} cards" : "{nbCards} karet",
"No upcoming cards" : "Žádné nadcházející karty", "No upcoming cards" : "Žádné nadcházející karty",

View File

@@ -183,8 +183,10 @@ OC.L10N.register(
"Failed to transfer the board to {user}" : "Das Board konnte nicht an {user} übertragen werden", "Failed to transfer the board to {user}" : "Das Board konnte nicht an {user} übertragen werden",
"Add a new list" : "Eine neue Liste hinzufügen", "Add a new list" : "Eine neue Liste hinzufügen",
"Archive all cards" : "Alle Karten archivieren", "Archive all cards" : "Alle Karten archivieren",
"Unarchive all cards" : "Alle Karten dearchivieren",
"Delete list" : "Liste löschen", "Delete list" : "Liste löschen",
"Archive all cards in this list" : "Alle Karten in dieser Liste archivieren", "Archive all cards in this list" : "Alle Karten in dieser Liste archivieren",
"Unarchive all cards in this list" : "Alle Karten dieser Liste dearchivieren",
"Add a new card" : "Neue Karte hinzufügen", "Add a new card" : "Neue Karte hinzufügen",
"Card name" : "Kartenname", "Card name" : "Kartenname",
"List deleted" : "Liste gelöscht", "List deleted" : "Liste gelöscht",
@@ -235,7 +237,7 @@ OC.L10N.register(
"Description" : "Beschreibung", "Description" : "Beschreibung",
"(Unsaved)" : "(nicht gespeichert)", "(Unsaved)" : "(nicht gespeichert)",
"(Saving…)" : "(Speichere…)", "(Saving…)" : "(Speichere…)",
"Formatting help" : "Formatierungshilfe", "Formatting help" : "Hilfe zur Formatierung",
"Edit description" : "Beschreibung bearbeiten", "Edit description" : "Beschreibung bearbeiten",
"View description" : "Beschreibung anzeigen", "View description" : "Beschreibung anzeigen",
"Add Attachment" : "Anhang anhängen", "Add Attachment" : "Anhang anhängen",
@@ -286,6 +288,7 @@ OC.L10N.register(
"Search for {searchQuery} in all boards" : "Suche nach {searchQuery} in allen Boards", "Search for {searchQuery} in all boards" : "Suche nach {searchQuery} in allen Boards",
"No results found" : "Keine Ergebnisse gefunden", "No results found" : "Keine Ergebnisse gefunden",
"{stack} in {board}" : "{stack} in {board}", "{stack} in {board}" : "{stack} in {board}",
"Click to expand description" : "Klicken, um die Beschreibung zu erweitern",
"* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Erstellt am {created}\n* Zuletzt geändert am {lastMod}\n* {nbAttachments} Anhänge\n* {nbComments} Kommentare", "* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Erstellt am {created}\n* Zuletzt geändert am {lastMod}\n* {nbAttachments} Anhänge\n* {nbComments} Kommentare",
"{nbCards} cards" : "{nbCards} Karten", "{nbCards} cards" : "{nbCards} Karten",
"No upcoming cards" : "Keine anstehenden Karten", "No upcoming cards" : "Keine anstehenden Karten",

View File

@@ -181,8 +181,10 @@
"Failed to transfer the board to {user}" : "Das Board konnte nicht an {user} übertragen werden", "Failed to transfer the board to {user}" : "Das Board konnte nicht an {user} übertragen werden",
"Add a new list" : "Eine neue Liste hinzufügen", "Add a new list" : "Eine neue Liste hinzufügen",
"Archive all cards" : "Alle Karten archivieren", "Archive all cards" : "Alle Karten archivieren",
"Unarchive all cards" : "Alle Karten dearchivieren",
"Delete list" : "Liste löschen", "Delete list" : "Liste löschen",
"Archive all cards in this list" : "Alle Karten in dieser Liste archivieren", "Archive all cards in this list" : "Alle Karten in dieser Liste archivieren",
"Unarchive all cards in this list" : "Alle Karten dieser Liste dearchivieren",
"Add a new card" : "Neue Karte hinzufügen", "Add a new card" : "Neue Karte hinzufügen",
"Card name" : "Kartenname", "Card name" : "Kartenname",
"List deleted" : "Liste gelöscht", "List deleted" : "Liste gelöscht",
@@ -233,7 +235,7 @@
"Description" : "Beschreibung", "Description" : "Beschreibung",
"(Unsaved)" : "(nicht gespeichert)", "(Unsaved)" : "(nicht gespeichert)",
"(Saving…)" : "(Speichere…)", "(Saving…)" : "(Speichere…)",
"Formatting help" : "Formatierungshilfe", "Formatting help" : "Hilfe zur Formatierung",
"Edit description" : "Beschreibung bearbeiten", "Edit description" : "Beschreibung bearbeiten",
"View description" : "Beschreibung anzeigen", "View description" : "Beschreibung anzeigen",
"Add Attachment" : "Anhang anhängen", "Add Attachment" : "Anhang anhängen",
@@ -284,6 +286,7 @@
"Search for {searchQuery} in all boards" : "Suche nach {searchQuery} in allen Boards", "Search for {searchQuery} in all boards" : "Suche nach {searchQuery} in allen Boards",
"No results found" : "Keine Ergebnisse gefunden", "No results found" : "Keine Ergebnisse gefunden",
"{stack} in {board}" : "{stack} in {board}", "{stack} in {board}" : "{stack} in {board}",
"Click to expand description" : "Klicken, um die Beschreibung zu erweitern",
"* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Erstellt am {created}\n* Zuletzt geändert am {lastMod}\n* {nbAttachments} Anhänge\n* {nbComments} Kommentare", "* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Erstellt am {created}\n* Zuletzt geändert am {lastMod}\n* {nbAttachments} Anhänge\n* {nbComments} Kommentare",
"{nbCards} cards" : "{nbCards} Karten", "{nbCards} cards" : "{nbCards} Karten",
"No upcoming cards" : "Keine anstehenden Karten", "No upcoming cards" : "Keine anstehenden Karten",

View File

@@ -183,8 +183,10 @@ OC.L10N.register(
"Failed to transfer the board to {user}" : "Das Board konnte nicht auf {user} übertragen werden", "Failed to transfer the board to {user}" : "Das Board konnte nicht auf {user} übertragen werden",
"Add a new list" : "Eine neue Liste hinzufügen", "Add a new list" : "Eine neue Liste hinzufügen",
"Archive all cards" : "Alle Karten archivieren", "Archive all cards" : "Alle Karten archivieren",
"Unarchive all cards" : "Alle Karten dearchivieren",
"Delete list" : "Liste löschen", "Delete list" : "Liste löschen",
"Archive all cards in this list" : "Alle Karten in dieser Liste archivieren", "Archive all cards in this list" : "Alle Karten in dieser Liste archivieren",
"Unarchive all cards in this list" : "Alle Karten in dieser Liste dearchivieren",
"Add a new card" : "Neue Karte hinzufügen", "Add a new card" : "Neue Karte hinzufügen",
"Card name" : "Kartenname", "Card name" : "Kartenname",
"List deleted" : "Liste gelöscht", "List deleted" : "Liste gelöscht",
@@ -260,6 +262,7 @@ OC.L10N.register(
"Shared with you" : "Mit Ihnen geteilt", "Shared with you" : "Mit Ihnen geteilt",
"Deck settings" : "Deck-Einstellungen", "Deck settings" : "Deck-Einstellungen",
"Use bigger card view" : "Größere Kartenansicht verwenden", "Use bigger card view" : "Größere Kartenansicht verwenden",
"Show card ID badge" : "Abzeichen mit Karten-ID zeigen",
"Show boards in calendar/tasks" : "Board in Kalender/Aufgaben anzeigen", "Show boards in calendar/tasks" : "Board in Kalender/Aufgaben anzeigen",
"Limit deck usage of groups" : "Nutzung auf Gruppen einschränken", "Limit deck usage of groups" : "Nutzung auf Gruppen einschränken",
"Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Wenn Sie Deck einschränken, können Benutzer, die nicht zu diesen Gruppen gehören, keine eigenen Boards erstellen. Die Benutzer können weiterhin an Boards arbeiten, die für sie freigegeben wurden.", "Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Wenn Sie Deck einschränken, können Benutzer, die nicht zu diesen Gruppen gehören, keine eigenen Boards erstellen. Die Benutzer können weiterhin an Boards arbeiten, die für sie freigegeben wurden.",
@@ -286,6 +289,7 @@ OC.L10N.register(
"Search for {searchQuery} in all boards" : "Suche nach {searchQuery} in allen Boards", "Search for {searchQuery} in all boards" : "Suche nach {searchQuery} in allen Boards",
"No results found" : "Keine Ergebnisse gefunden", "No results found" : "Keine Ergebnisse gefunden",
"{stack} in {board}" : "{stack} auf {board}", "{stack} in {board}" : "{stack} auf {board}",
"Click to expand description" : "Klicken, um die Beschreibung zu erweitern",
"* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Erstellt am {created}\n* Zuletzt geändert am {lastMod}\n* {nbAttachments} Anhänge\n* {nbComments} Kommentare", "* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Erstellt am {created}\n* Zuletzt geändert am {lastMod}\n* {nbAttachments} Anhänge\n* {nbComments} Kommentare",
"{nbCards} cards" : "{nbCards} Karten", "{nbCards} cards" : "{nbCards} Karten",
"No upcoming cards" : "Keine anstehenden Karten", "No upcoming cards" : "Keine anstehenden Karten",

View File

@@ -181,8 +181,10 @@
"Failed to transfer the board to {user}" : "Das Board konnte nicht auf {user} übertragen werden", "Failed to transfer the board to {user}" : "Das Board konnte nicht auf {user} übertragen werden",
"Add a new list" : "Eine neue Liste hinzufügen", "Add a new list" : "Eine neue Liste hinzufügen",
"Archive all cards" : "Alle Karten archivieren", "Archive all cards" : "Alle Karten archivieren",
"Unarchive all cards" : "Alle Karten dearchivieren",
"Delete list" : "Liste löschen", "Delete list" : "Liste löschen",
"Archive all cards in this list" : "Alle Karten in dieser Liste archivieren", "Archive all cards in this list" : "Alle Karten in dieser Liste archivieren",
"Unarchive all cards in this list" : "Alle Karten in dieser Liste dearchivieren",
"Add a new card" : "Neue Karte hinzufügen", "Add a new card" : "Neue Karte hinzufügen",
"Card name" : "Kartenname", "Card name" : "Kartenname",
"List deleted" : "Liste gelöscht", "List deleted" : "Liste gelöscht",
@@ -258,6 +260,7 @@
"Shared with you" : "Mit Ihnen geteilt", "Shared with you" : "Mit Ihnen geteilt",
"Deck settings" : "Deck-Einstellungen", "Deck settings" : "Deck-Einstellungen",
"Use bigger card view" : "Größere Kartenansicht verwenden", "Use bigger card view" : "Größere Kartenansicht verwenden",
"Show card ID badge" : "Abzeichen mit Karten-ID zeigen",
"Show boards in calendar/tasks" : "Board in Kalender/Aufgaben anzeigen", "Show boards in calendar/tasks" : "Board in Kalender/Aufgaben anzeigen",
"Limit deck usage of groups" : "Nutzung auf Gruppen einschränken", "Limit deck usage of groups" : "Nutzung auf Gruppen einschränken",
"Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Wenn Sie Deck einschränken, können Benutzer, die nicht zu diesen Gruppen gehören, keine eigenen Boards erstellen. Die Benutzer können weiterhin an Boards arbeiten, die für sie freigegeben wurden.", "Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Wenn Sie Deck einschränken, können Benutzer, die nicht zu diesen Gruppen gehören, keine eigenen Boards erstellen. Die Benutzer können weiterhin an Boards arbeiten, die für sie freigegeben wurden.",
@@ -284,6 +287,7 @@
"Search for {searchQuery} in all boards" : "Suche nach {searchQuery} in allen Boards", "Search for {searchQuery} in all boards" : "Suche nach {searchQuery} in allen Boards",
"No results found" : "Keine Ergebnisse gefunden", "No results found" : "Keine Ergebnisse gefunden",
"{stack} in {board}" : "{stack} auf {board}", "{stack} in {board}" : "{stack} auf {board}",
"Click to expand description" : "Klicken, um die Beschreibung zu erweitern",
"* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Erstellt am {created}\n* Zuletzt geändert am {lastMod}\n* {nbAttachments} Anhänge\n* {nbComments} Kommentare", "* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Erstellt am {created}\n* Zuletzt geändert am {lastMod}\n* {nbAttachments} Anhänge\n* {nbComments} Kommentare",
"{nbCards} cards" : "{nbCards} Karten", "{nbCards} cards" : "{nbCards} Karten",
"No upcoming cards" : "Keine anstehenden Karten", "No upcoming cards" : "Keine anstehenden Karten",

View File

@@ -183,8 +183,10 @@ OC.L10N.register(
"Failed to transfer the board to {user}" : "Failed to transfer the board to {user}", "Failed to transfer the board to {user}" : "Failed to transfer the board to {user}",
"Add a new list" : "Añadir una lista nueva", "Add a new list" : "Añadir una lista nueva",
"Archive all cards" : "Archivar todas las tarjetas", "Archive all cards" : "Archivar todas las tarjetas",
"Unarchive all cards" : "Desarchivar todas las tarjetas",
"Delete list" : "Eliminar lista", "Delete list" : "Eliminar lista",
"Archive all cards in this list" : "Archivar todas las tarjetas en esta lista", "Archive all cards in this list" : "Archivar todas las tarjetas en esta lista",
"Unarchive all cards in this list" : "Desarchivar todas las tarjetas en esta lista",
"Add a new card" : "Añadir una nueva tarjeta", "Add a new card" : "Añadir una nueva tarjeta",
"Card name" : "Nombre de la tarjeta", "Card name" : "Nombre de la tarjeta",
"List deleted" : "Lista borrada", "List deleted" : "Lista borrada",
@@ -242,6 +244,7 @@ OC.L10N.register(
"Write a description …" : "Escribe una descripción...", "Write a description …" : "Escribe una descripción...",
"Choose attachment" : "Escoger adjunto", "Choose attachment" : "Escoger adjunto",
"(group)" : "(grupo)", "(group)" : "(grupo)",
"Todo items" : "Ítems pendientes",
"{count} comments, {unread} unread" : "{count} comentarios, {unread} sin leer", "{count} comments, {unread} unread" : "{count} comentarios, {unread} sin leer",
"Edit card title" : "Editar el título de la tarjeta", "Edit card title" : "Editar el título de la tarjeta",
"Assign to me" : "Asignarme a mí", "Assign to me" : "Asignarme a mí",
@@ -257,7 +260,9 @@ OC.L10N.register(
"All boards" : "Todos los tableros", "All boards" : "Todos los tableros",
"Archived boards" : "Tableros archivados", "Archived boards" : "Tableros archivados",
"Shared with you" : "Compartido contigo", "Shared with you" : "Compartido contigo",
"Deck settings" : "Configuración del tablero",
"Use bigger card view" : "Usar vista de tarjeta mayor", "Use bigger card view" : "Usar vista de tarjeta mayor",
"Show card ID badge" : "Mostrar insignia de la ID de tarjeta",
"Show boards in calendar/tasks" : "Mostrar tableros en calendario/tareas", "Show boards in calendar/tasks" : "Mostrar tableros en calendario/tareas",
"Limit deck usage of groups" : "Limitar el uso de Deck a grupos", "Limit deck usage of groups" : "Limitar el uso de Deck a grupos",
"Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Limitar Deck impedirá que usuarios que no formen parte de esos grupos creen sus propios tableros. Los usuarios todavía podrán trabajar en tableros que hayan sido compartidos con ellos.", "Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Limitar Deck impedirá que usuarios que no formen parte de esos grupos creen sus propios tableros. Los usuarios todavía podrán trabajar en tableros que hayan sido compartidos con ellos.",
@@ -277,14 +282,19 @@ OC.L10N.register(
"Only assigned cards" : "Sólo las tarjetas asignadas", "Only assigned cards" : "Sólo las tarjetas asignadas",
"No reminder" : "No hay recordatorio", "No reminder" : "No hay recordatorio",
"An error occurred" : "Ocurrió un error", "An error occurred" : "Ocurrió un error",
"Are you sure you want to delete the board {title}? This will delete all the data of this board including archived cards." : "¿Está seguro de querer eliminar el tablero {title}? Esto eliminará todos los datos del tablero incluyendo las tarjetas archivadas.",
"Delete the board?" : "¿Borrar el tablero?", "Delete the board?" : "¿Borrar el tablero?",
"Loading filtered view" : "Cargando vista filtrada", "Loading filtered view" : "Cargando vista filtrada",
"No due" : "Sin finalizar", "No due" : "Sin finalizar",
"Search for {searchQuery} in all boards" : "Buscar {searchQuery} en todos los tableros", "Search for {searchQuery} in all boards" : "Buscar {searchQuery} en todos los tableros",
"No results found" : "No se encontraron resultados", "No results found" : "No se encontraron resultados",
"{stack} in {board}" : "{stack} en {board}", "{stack} in {board}" : "{stack} en {board}",
"Click to expand description" : "Pulse para expandir la descripción",
"* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Creada en {created}\n* Ultima moficiación en {lastMod}\n* {nbAttachments} adjuntos\n* {nbComments} comentarios",
"{nbCards} cards" : "{nbCards} tarjetas",
"No upcoming cards" : "No hay tarjetas próximas", "No upcoming cards" : "No hay tarjetas próximas",
"upcoming cards" : "próximas tarjetas", "upcoming cards" : "próximas tarjetas",
"Due on {date}" : "Vence en {date}",
"Link to a board" : "Enlace a un tablero", "Link to a board" : "Enlace a un tablero",
"Link to a card" : "Enlace a una tarjeta", "Link to a card" : "Enlace a una tarjeta",
"Create a card" : "Crear una tarjeta", "Create a card" : "Crear una tarjeta",

View File

@@ -181,8 +181,10 @@
"Failed to transfer the board to {user}" : "Failed to transfer the board to {user}", "Failed to transfer the board to {user}" : "Failed to transfer the board to {user}",
"Add a new list" : "Añadir una lista nueva", "Add a new list" : "Añadir una lista nueva",
"Archive all cards" : "Archivar todas las tarjetas", "Archive all cards" : "Archivar todas las tarjetas",
"Unarchive all cards" : "Desarchivar todas las tarjetas",
"Delete list" : "Eliminar lista", "Delete list" : "Eliminar lista",
"Archive all cards in this list" : "Archivar todas las tarjetas en esta lista", "Archive all cards in this list" : "Archivar todas las tarjetas en esta lista",
"Unarchive all cards in this list" : "Desarchivar todas las tarjetas en esta lista",
"Add a new card" : "Añadir una nueva tarjeta", "Add a new card" : "Añadir una nueva tarjeta",
"Card name" : "Nombre de la tarjeta", "Card name" : "Nombre de la tarjeta",
"List deleted" : "Lista borrada", "List deleted" : "Lista borrada",
@@ -240,6 +242,7 @@
"Write a description …" : "Escribe una descripción...", "Write a description …" : "Escribe una descripción...",
"Choose attachment" : "Escoger adjunto", "Choose attachment" : "Escoger adjunto",
"(group)" : "(grupo)", "(group)" : "(grupo)",
"Todo items" : "Ítems pendientes",
"{count} comments, {unread} unread" : "{count} comentarios, {unread} sin leer", "{count} comments, {unread} unread" : "{count} comentarios, {unread} sin leer",
"Edit card title" : "Editar el título de la tarjeta", "Edit card title" : "Editar el título de la tarjeta",
"Assign to me" : "Asignarme a mí", "Assign to me" : "Asignarme a mí",
@@ -255,7 +258,9 @@
"All boards" : "Todos los tableros", "All boards" : "Todos los tableros",
"Archived boards" : "Tableros archivados", "Archived boards" : "Tableros archivados",
"Shared with you" : "Compartido contigo", "Shared with you" : "Compartido contigo",
"Deck settings" : "Configuración del tablero",
"Use bigger card view" : "Usar vista de tarjeta mayor", "Use bigger card view" : "Usar vista de tarjeta mayor",
"Show card ID badge" : "Mostrar insignia de la ID de tarjeta",
"Show boards in calendar/tasks" : "Mostrar tableros en calendario/tareas", "Show boards in calendar/tasks" : "Mostrar tableros en calendario/tareas",
"Limit deck usage of groups" : "Limitar el uso de Deck a grupos", "Limit deck usage of groups" : "Limitar el uso de Deck a grupos",
"Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Limitar Deck impedirá que usuarios que no formen parte de esos grupos creen sus propios tableros. Los usuarios todavía podrán trabajar en tableros que hayan sido compartidos con ellos.", "Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Limitar Deck impedirá que usuarios que no formen parte de esos grupos creen sus propios tableros. Los usuarios todavía podrán trabajar en tableros que hayan sido compartidos con ellos.",
@@ -275,14 +280,19 @@
"Only assigned cards" : "Sólo las tarjetas asignadas", "Only assigned cards" : "Sólo las tarjetas asignadas",
"No reminder" : "No hay recordatorio", "No reminder" : "No hay recordatorio",
"An error occurred" : "Ocurrió un error", "An error occurred" : "Ocurrió un error",
"Are you sure you want to delete the board {title}? This will delete all the data of this board including archived cards." : "¿Está seguro de querer eliminar el tablero {title}? Esto eliminará todos los datos del tablero incluyendo las tarjetas archivadas.",
"Delete the board?" : "¿Borrar el tablero?", "Delete the board?" : "¿Borrar el tablero?",
"Loading filtered view" : "Cargando vista filtrada", "Loading filtered view" : "Cargando vista filtrada",
"No due" : "Sin finalizar", "No due" : "Sin finalizar",
"Search for {searchQuery} in all boards" : "Buscar {searchQuery} en todos los tableros", "Search for {searchQuery} in all boards" : "Buscar {searchQuery} en todos los tableros",
"No results found" : "No se encontraron resultados", "No results found" : "No se encontraron resultados",
"{stack} in {board}" : "{stack} en {board}", "{stack} in {board}" : "{stack} en {board}",
"Click to expand description" : "Pulse para expandir la descripción",
"* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Creada en {created}\n* Ultima moficiación en {lastMod}\n* {nbAttachments} adjuntos\n* {nbComments} comentarios",
"{nbCards} cards" : "{nbCards} tarjetas",
"No upcoming cards" : "No hay tarjetas próximas", "No upcoming cards" : "No hay tarjetas próximas",
"upcoming cards" : "próximas tarjetas", "upcoming cards" : "próximas tarjetas",
"Due on {date}" : "Vence en {date}",
"Link to a board" : "Enlace a un tablero", "Link to a board" : "Enlace a un tablero",
"Link to a card" : "Enlace a una tarjeta", "Link to a card" : "Enlace a una tarjeta",
"Create a card" : "Crear una tarjeta", "Create a card" : "Crear una tarjeta",

View File

@@ -279,14 +279,19 @@ OC.L10N.register(
"Only assigned cards" : "Bakarrik esleitutako txartelak", "Only assigned cards" : "Bakarrik esleitutako txartelak",
"No reminder" : "Abisurik ez", "No reminder" : "Abisurik ez",
"An error occurred" : "Errore bat gertatu da", "An error occurred" : "Errore bat gertatu da",
"Are you sure you want to delete the board {title}? This will delete all the data of this board including archived cards." : "Ziur zaude {title} taula ezabatu nahi duzula? Honek taula honen datu guztiak ezabatuko ditu, artxibatutako kartak barne.",
"Delete the board?" : "Taula ezabatu?", "Delete the board?" : "Taula ezabatu?",
"Loading filtered view" : "Kargatzen iragazitako ikuspegia", "Loading filtered view" : "Kargatzen iragazitako ikuspegia",
"No due" : "Epemugarik ez", "No due" : "Epemugarik ez",
"Search for {searchQuery} in all boards" : "Bilatu {searchQuery} taula guztietan", "Search for {searchQuery} in all boards" : "Bilatu {searchQuery} taula guztietan",
"No results found" : "Ez da emaitzarik aurkitu", "No results found" : "Ez da emaitzarik aurkitu",
"{stack} in {board}" : "{stack} {board}-(e)n", "{stack} in {board}" : "{stack} {board}-(e)n",
"Click to expand description" : "Egin klik deskribapena handitzeko",
"* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Sorrera-data {created}\n* Azken aldaketa data {lastMod}\n* {nbAttachments} eranskin\n* {nbComments} iruzkin",
"{nbCards} cards" : "{nbCards} karta",
"No upcoming cards" : "Ez dago hurrengo txartelik", "No upcoming cards" : "Ez dago hurrengo txartelik",
"upcoming cards" : "hurrengo txartelak", "upcoming cards" : "hurrengo txartelak",
"Due on {date}" : "Iraungitze-data {date}",
"Link to a board" : "Estekatu taula batera", "Link to a board" : "Estekatu taula batera",
"Link to a card" : "Estekatu txartel batera", "Link to a card" : "Estekatu txartel batera",
"Create a card" : "Sortu txartela", "Create a card" : "Sortu txartela",

View File

@@ -277,14 +277,19 @@
"Only assigned cards" : "Bakarrik esleitutako txartelak", "Only assigned cards" : "Bakarrik esleitutako txartelak",
"No reminder" : "Abisurik ez", "No reminder" : "Abisurik ez",
"An error occurred" : "Errore bat gertatu da", "An error occurred" : "Errore bat gertatu da",
"Are you sure you want to delete the board {title}? This will delete all the data of this board including archived cards." : "Ziur zaude {title} taula ezabatu nahi duzula? Honek taula honen datu guztiak ezabatuko ditu, artxibatutako kartak barne.",
"Delete the board?" : "Taula ezabatu?", "Delete the board?" : "Taula ezabatu?",
"Loading filtered view" : "Kargatzen iragazitako ikuspegia", "Loading filtered view" : "Kargatzen iragazitako ikuspegia",
"No due" : "Epemugarik ez", "No due" : "Epemugarik ez",
"Search for {searchQuery} in all boards" : "Bilatu {searchQuery} taula guztietan", "Search for {searchQuery} in all boards" : "Bilatu {searchQuery} taula guztietan",
"No results found" : "Ez da emaitzarik aurkitu", "No results found" : "Ez da emaitzarik aurkitu",
"{stack} in {board}" : "{stack} {board}-(e)n", "{stack} in {board}" : "{stack} {board}-(e)n",
"Click to expand description" : "Egin klik deskribapena handitzeko",
"* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Sorrera-data {created}\n* Azken aldaketa data {lastMod}\n* {nbAttachments} eranskin\n* {nbComments} iruzkin",
"{nbCards} cards" : "{nbCards} karta",
"No upcoming cards" : "Ez dago hurrengo txartelik", "No upcoming cards" : "Ez dago hurrengo txartelik",
"upcoming cards" : "hurrengo txartelak", "upcoming cards" : "hurrengo txartelak",
"Due on {date}" : "Iraungitze-data {date}",
"Link to a board" : "Estekatu taula batera", "Link to a board" : "Estekatu taula batera",
"Link to a card" : "Estekatu txartel batera", "Link to a card" : "Estekatu txartel batera",
"Create a card" : "Sortu txartela", "Create a card" : "Sortu txartela",

View File

@@ -150,7 +150,7 @@ OC.L10N.register(
"Clear filter" : "Supprimer le filtre", "Clear filter" : "Supprimer le filtre",
"Hide archived cards" : "Masquer les cartes archivées", "Hide archived cards" : "Masquer les cartes archivées",
"Show archived cards" : "Afficher les cartes archivées", "Show archived cards" : "Afficher les cartes archivées",
"Toggle compact mode" : "Activer / Désactiver le mode compact", "Toggle compact mode" : "Activer/Désactiver l'affichage compact",
"Open details" : "Ouvrir les détails", "Open details" : "Ouvrir les détails",
"Details" : "Détails", "Details" : "Détails",
"Loading board" : "Chargement du tableau…", "Loading board" : "Chargement du tableau…",
@@ -178,13 +178,15 @@ OC.L10N.register(
"Failed to create share with {displayName}" : "Échec de la création du partage avec {displayName}", "Failed to create share with {displayName}" : "Échec de la création du partage avec {displayName}",
"Are you sure you want to transfer the board {title} to {user}?" : "Êtes-vous sûr de vouloir transférer le tableau {title} à {user} ?", "Are you sure you want to transfer the board {title} to {user}?" : "Êtes-vous sûr de vouloir transférer le tableau {title} à {user} ?",
"Transfer the board." : "Transférer le tableau", "Transfer the board." : "Transférer le tableau",
"Transfer" : "Transfert", "Transfer" : "Transférer",
"The board has been transferred to {user}" : "Le tableau a été transféré à {user}", "The board has been transferred to {user}" : "Le tableau a été transféré à {user}",
"Failed to transfer the board to {user}" : "Échec du transfert du tableau à {user}", "Failed to transfer the board to {user}" : "Échec du transfert du tableau à {user}",
"Add a new list" : "Ajouter une nouvelle liste", "Add a new list" : "Ajouter une nouvelle liste",
"Archive all cards" : "Archiver toutes les cartes", "Archive all cards" : "Archiver toutes les cartes",
"Unarchive all cards" : "Désarchiver toutes les cartes",
"Delete list" : "Supprimer la liste", "Delete list" : "Supprimer la liste",
"Archive all cards in this list" : "Archiver toutes les cartes de cette liste", "Archive all cards in this list" : "Archiver toutes les cartes de cette liste",
"Unarchive all cards in this list" : "Désarchiver toutes les cartes de cette liste",
"Add a new card" : "Ajouter une nouvelle carte", "Add a new card" : "Ajouter une nouvelle carte",
"Card name" : "Nom de la carte", "Card name" : "Nom de la carte",
"List deleted" : "Liste supprimée", "List deleted" : "Liste supprimée",
@@ -204,7 +206,7 @@ OC.L10N.register(
"Restore Attachment" : "Restaurer la pièce jointe", "Restore Attachment" : "Restaurer la pièce jointe",
"File to share" : "Fichier à partager", "File to share" : "Fichier à partager",
"Invalid path selected" : "Chemin sélectionné non valide", "Invalid path selected" : "Chemin sélectionné non valide",
"Open in sidebar view" : "Ouvrir dans la barre latérale", "Open in sidebar view" : "Ouvrir dans le panneau latéral",
"Open in bigger view" : "Ouvrir dans la vue principale", "Open in bigger view" : "Ouvrir dans la vue principale",
"Attachments" : "Pièces jointes", "Attachments" : "Pièces jointes",
"Comments" : "Commentaires", "Comments" : "Commentaires",
@@ -239,7 +241,7 @@ OC.L10N.register(
"Edit description" : "Modifier la description", "Edit description" : "Modifier la description",
"View description" : "Afficher la description", "View description" : "Afficher la description",
"Add Attachment" : "Ajouter une pièce jointe", "Add Attachment" : "Ajouter une pièce jointe",
"Write a description …" : "Écrire une description ...", "Write a description …" : "Écrire une description",
"Choose attachment" : "Choisir une pièce jointe", "Choose attachment" : "Choisir une pièce jointe",
"(group)" : "(groupe)", "(group)" : "(groupe)",
"Todo items" : "À faire", "Todo items" : "À faire",
@@ -260,6 +262,7 @@ OC.L10N.register(
"Shared with you" : "Partagés avec vous", "Shared with you" : "Partagés avec vous",
"Deck settings" : "Paramètres de Deck", "Deck settings" : "Paramètres de Deck",
"Use bigger card view" : "Utiliser la vue large des cartes", "Use bigger card view" : "Utiliser la vue large des cartes",
"Show card ID badge" : "Afficher la carte d'identité du badge",
"Show boards in calendar/tasks" : "Afficher les tableaux dans les agendas/tâches", "Show boards in calendar/tasks" : "Afficher les tableaux dans les agendas/tâches",
"Limit deck usage of groups" : "Limiter l'utilisation du tableau aux groupes", "Limit deck usage of groups" : "Limiter l'utilisation du tableau aux groupes",
"Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Limiter Deck empêchera les utilisateurs ne faisant pas partie de ces groupes de créer leurs propres tableaux. Ces utilisateurs pourront toujours travailler sur les tableaux qui ont été partagés avec eux.", "Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Limiter Deck empêchera les utilisateurs ne faisant pas partie de ces groupes de créer leurs propres tableaux. Ces utilisateurs pourront toujours travailler sur les tableaux qui ont été partagés avec eux.",
@@ -275,17 +278,18 @@ OC.L10N.register(
"Assigned cards" : "Cartes assignées", "Assigned cards" : "Cartes assignées",
"No notifications" : "Aucune notification", "No notifications" : "Aucune notification",
"Delete board" : "Supprimer le tableau", "Delete board" : "Supprimer le tableau",
"Board {0} deleted" : "Tableau \"{0}\" supprimé", "Board {0} deleted" : "Tableau {0} supprimé",
"Only assigned cards" : "Uniquement les cartes assignées", "Only assigned cards" : "Uniquement les cartes assignées",
"No reminder" : "Aucun rappel", "No reminder" : "Aucun rappel",
"An error occurred" : "Une erreur est survenue", "An error occurred" : "Une erreur est survenue",
"Are you sure you want to delete the board {title}? This will delete all the data of this board including archived cards." : "Êtes-vous sûr de vouloir supprimer le tableau \"{titre}\" ? Cela supprimera toutes les données de ce tableau, y compris les cartes archivées.", "Are you sure you want to delete the board {title}? This will delete all the data of this board including archived cards." : "Êtes-vous sûr de vouloir supprimer le tableau {titre} ? Cela supprimera toutes les données de ce tableau, y compris les cartes archivées.",
"Delete the board?" : "Supprimer le tableau ?", "Delete the board?" : "Supprimer le tableau ?",
"Loading filtered view" : "Chargement de la vue filtrée", "Loading filtered view" : "Chargement de la vue filtrée",
"No due" : "Sans échéance", "No due" : "Sans échéance",
"Search for {searchQuery} in all boards" : "Rechercher {searchQuery} dans tous les tableaux", "Search for {searchQuery} in all boards" : "Rechercher {searchQuery} dans tous les tableaux",
"No results found" : "Aucun résultat", "No results found" : "Aucun résultat",
"{stack} in {board}" : "{stack} dans {board}", "{stack} in {board}" : "{stack} dans {board}",
"Click to expand description" : "Cliquer pour visualiser la description",
"* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Créée le {created}\n* Dernière modification le {lastMod}\n* {nbAttachments} pièces jointes\n* {nbComments} commentaires", "* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Créée le {created}\n* Dernière modification le {lastMod}\n* {nbAttachments} pièces jointes\n* {nbComments} commentaires",
"{nbCards} cards" : "{nbCards} cartes", "{nbCards} cards" : "{nbCards} cartes",
"No upcoming cards" : "Pas de cartes à venir", "No upcoming cards" : "Pas de cartes à venir",
@@ -306,7 +310,7 @@ OC.L10N.register(
"Are you sure you want to transfer the board {title} for {user} ?" : "Êtes-vous sûr de vouloir transférer le tableau {title} pour {user} ?", "Are you sure you want to transfer the board {title} for {user} ?" : "Êtes-vous sûr de vouloir transférer le tableau {title} pour {user} ?",
"Transfer the board for {user} successfully" : "Transfert du tableau pour {user} avec succès", "Transfer the board for {user} successfully" : "Transfert du tableau pour {user} avec succès",
"Failed to transfer the board for {user}" : "Échec du transfert du tableau pour {user}", "Failed to transfer the board for {user}" : "Échec du transfert du tableau pour {user}",
"Are you sure you want to delete the board {title}? This will delete all the data of this board." : "Êtes-vous certain de vouloir supprimer le tableau \"{title}\" ? Cela supprimera l'ensemble des données de ce tableau.", "Are you sure you want to delete the board {title}? This will delete all the data of this board." : "Êtes-vous certain de vouloir supprimer le tableau {title} ? Cela supprimera l'ensemble des données de ce tableau.",
"This week" : "Cette semaine", "This week" : "Cette semaine",
"Are you sure you want to transfer the board {title} for {user}?" : "Êtes-vous sûr de vouloir transférer le tableau {title} pour {user} ?" "Are you sure you want to transfer the board {title} for {user}?" : "Êtes-vous sûr de vouloir transférer le tableau {title} pour {user} ?"
}, },

View File

@@ -148,7 +148,7 @@
"Clear filter" : "Supprimer le filtre", "Clear filter" : "Supprimer le filtre",
"Hide archived cards" : "Masquer les cartes archivées", "Hide archived cards" : "Masquer les cartes archivées",
"Show archived cards" : "Afficher les cartes archivées", "Show archived cards" : "Afficher les cartes archivées",
"Toggle compact mode" : "Activer / Désactiver le mode compact", "Toggle compact mode" : "Activer/Désactiver l'affichage compact",
"Open details" : "Ouvrir les détails", "Open details" : "Ouvrir les détails",
"Details" : "Détails", "Details" : "Détails",
"Loading board" : "Chargement du tableau…", "Loading board" : "Chargement du tableau…",
@@ -176,13 +176,15 @@
"Failed to create share with {displayName}" : "Échec de la création du partage avec {displayName}", "Failed to create share with {displayName}" : "Échec de la création du partage avec {displayName}",
"Are you sure you want to transfer the board {title} to {user}?" : "Êtes-vous sûr de vouloir transférer le tableau {title} à {user} ?", "Are you sure you want to transfer the board {title} to {user}?" : "Êtes-vous sûr de vouloir transférer le tableau {title} à {user} ?",
"Transfer the board." : "Transférer le tableau", "Transfer the board." : "Transférer le tableau",
"Transfer" : "Transfert", "Transfer" : "Transférer",
"The board has been transferred to {user}" : "Le tableau a été transféré à {user}", "The board has been transferred to {user}" : "Le tableau a été transféré à {user}",
"Failed to transfer the board to {user}" : "Échec du transfert du tableau à {user}", "Failed to transfer the board to {user}" : "Échec du transfert du tableau à {user}",
"Add a new list" : "Ajouter une nouvelle liste", "Add a new list" : "Ajouter une nouvelle liste",
"Archive all cards" : "Archiver toutes les cartes", "Archive all cards" : "Archiver toutes les cartes",
"Unarchive all cards" : "Désarchiver toutes les cartes",
"Delete list" : "Supprimer la liste", "Delete list" : "Supprimer la liste",
"Archive all cards in this list" : "Archiver toutes les cartes de cette liste", "Archive all cards in this list" : "Archiver toutes les cartes de cette liste",
"Unarchive all cards in this list" : "Désarchiver toutes les cartes de cette liste",
"Add a new card" : "Ajouter une nouvelle carte", "Add a new card" : "Ajouter une nouvelle carte",
"Card name" : "Nom de la carte", "Card name" : "Nom de la carte",
"List deleted" : "Liste supprimée", "List deleted" : "Liste supprimée",
@@ -202,7 +204,7 @@
"Restore Attachment" : "Restaurer la pièce jointe", "Restore Attachment" : "Restaurer la pièce jointe",
"File to share" : "Fichier à partager", "File to share" : "Fichier à partager",
"Invalid path selected" : "Chemin sélectionné non valide", "Invalid path selected" : "Chemin sélectionné non valide",
"Open in sidebar view" : "Ouvrir dans la barre latérale", "Open in sidebar view" : "Ouvrir dans le panneau latéral",
"Open in bigger view" : "Ouvrir dans la vue principale", "Open in bigger view" : "Ouvrir dans la vue principale",
"Attachments" : "Pièces jointes", "Attachments" : "Pièces jointes",
"Comments" : "Commentaires", "Comments" : "Commentaires",
@@ -237,7 +239,7 @@
"Edit description" : "Modifier la description", "Edit description" : "Modifier la description",
"View description" : "Afficher la description", "View description" : "Afficher la description",
"Add Attachment" : "Ajouter une pièce jointe", "Add Attachment" : "Ajouter une pièce jointe",
"Write a description …" : "Écrire une description ...", "Write a description …" : "Écrire une description",
"Choose attachment" : "Choisir une pièce jointe", "Choose attachment" : "Choisir une pièce jointe",
"(group)" : "(groupe)", "(group)" : "(groupe)",
"Todo items" : "À faire", "Todo items" : "À faire",
@@ -258,6 +260,7 @@
"Shared with you" : "Partagés avec vous", "Shared with you" : "Partagés avec vous",
"Deck settings" : "Paramètres de Deck", "Deck settings" : "Paramètres de Deck",
"Use bigger card view" : "Utiliser la vue large des cartes", "Use bigger card view" : "Utiliser la vue large des cartes",
"Show card ID badge" : "Afficher la carte d'identité du badge",
"Show boards in calendar/tasks" : "Afficher les tableaux dans les agendas/tâches", "Show boards in calendar/tasks" : "Afficher les tableaux dans les agendas/tâches",
"Limit deck usage of groups" : "Limiter l'utilisation du tableau aux groupes", "Limit deck usage of groups" : "Limiter l'utilisation du tableau aux groupes",
"Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Limiter Deck empêchera les utilisateurs ne faisant pas partie de ces groupes de créer leurs propres tableaux. Ces utilisateurs pourront toujours travailler sur les tableaux qui ont été partagés avec eux.", "Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Limiter Deck empêchera les utilisateurs ne faisant pas partie de ces groupes de créer leurs propres tableaux. Ces utilisateurs pourront toujours travailler sur les tableaux qui ont été partagés avec eux.",
@@ -273,17 +276,18 @@
"Assigned cards" : "Cartes assignées", "Assigned cards" : "Cartes assignées",
"No notifications" : "Aucune notification", "No notifications" : "Aucune notification",
"Delete board" : "Supprimer le tableau", "Delete board" : "Supprimer le tableau",
"Board {0} deleted" : "Tableau \"{0}\" supprimé", "Board {0} deleted" : "Tableau {0} supprimé",
"Only assigned cards" : "Uniquement les cartes assignées", "Only assigned cards" : "Uniquement les cartes assignées",
"No reminder" : "Aucun rappel", "No reminder" : "Aucun rappel",
"An error occurred" : "Une erreur est survenue", "An error occurred" : "Une erreur est survenue",
"Are you sure you want to delete the board {title}? This will delete all the data of this board including archived cards." : "Êtes-vous sûr de vouloir supprimer le tableau \"{titre}\" ? Cela supprimera toutes les données de ce tableau, y compris les cartes archivées.", "Are you sure you want to delete the board {title}? This will delete all the data of this board including archived cards." : "Êtes-vous sûr de vouloir supprimer le tableau {titre} ? Cela supprimera toutes les données de ce tableau, y compris les cartes archivées.",
"Delete the board?" : "Supprimer le tableau ?", "Delete the board?" : "Supprimer le tableau ?",
"Loading filtered view" : "Chargement de la vue filtrée", "Loading filtered view" : "Chargement de la vue filtrée",
"No due" : "Sans échéance", "No due" : "Sans échéance",
"Search for {searchQuery} in all boards" : "Rechercher {searchQuery} dans tous les tableaux", "Search for {searchQuery} in all boards" : "Rechercher {searchQuery} dans tous les tableaux",
"No results found" : "Aucun résultat", "No results found" : "Aucun résultat",
"{stack} in {board}" : "{stack} dans {board}", "{stack} in {board}" : "{stack} dans {board}",
"Click to expand description" : "Cliquer pour visualiser la description",
"* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Créée le {created}\n* Dernière modification le {lastMod}\n* {nbAttachments} pièces jointes\n* {nbComments} commentaires", "* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Créée le {created}\n* Dernière modification le {lastMod}\n* {nbAttachments} pièces jointes\n* {nbComments} commentaires",
"{nbCards} cards" : "{nbCards} cartes", "{nbCards} cards" : "{nbCards} cartes",
"No upcoming cards" : "Pas de cartes à venir", "No upcoming cards" : "Pas de cartes à venir",
@@ -304,7 +308,7 @@
"Are you sure you want to transfer the board {title} for {user} ?" : "Êtes-vous sûr de vouloir transférer le tableau {title} pour {user} ?", "Are you sure you want to transfer the board {title} for {user} ?" : "Êtes-vous sûr de vouloir transférer le tableau {title} pour {user} ?",
"Transfer the board for {user} successfully" : "Transfert du tableau pour {user} avec succès", "Transfer the board for {user} successfully" : "Transfert du tableau pour {user} avec succès",
"Failed to transfer the board for {user}" : "Échec du transfert du tableau pour {user}", "Failed to transfer the board for {user}" : "Échec du transfert du tableau pour {user}",
"Are you sure you want to delete the board {title}? This will delete all the data of this board." : "Êtes-vous certain de vouloir supprimer le tableau \"{title}\" ? Cela supprimera l'ensemble des données de ce tableau.", "Are you sure you want to delete the board {title}? This will delete all the data of this board." : "Êtes-vous certain de vouloir supprimer le tableau {title} ? Cela supprimera l'ensemble des données de ce tableau.",
"This week" : "Cette semaine", "This week" : "Cette semaine",
"Are you sure you want to transfer the board {title} for {user}?" : "Êtes-vous sûr de vouloir transférer le tableau {title} pour {user} ?" "Are you sure you want to transfer the board {title} for {user}?" : "Êtes-vous sûr de vouloir transférer le tableau {title} pour {user} ?"
},"pluralForm" :"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" },"pluralForm" :"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"

View File

@@ -183,8 +183,10 @@ OC.L10N.register(
"Failed to transfer the board to {user}" : "A tábla átadása {user} számára sikertelen", "Failed to transfer the board to {user}" : "A tábla átadása {user} számára sikertelen",
"Add a new list" : "Új lista hozzáadása", "Add a new list" : "Új lista hozzáadása",
"Archive all cards" : "Az összes kártya archiválása", "Archive all cards" : "Az összes kártya archiválása",
"Unarchive all cards" : "Az összes kártya archiválásának visszavonása",
"Delete list" : "Lista törlése", "Delete list" : "Lista törlése",
"Archive all cards in this list" : "Az összes kártya archiválása ebben a listában", "Archive all cards in this list" : "Az összes kártya archiválása ebben a listában",
"Unarchive all cards in this list" : "Az összes kártya archiválásának visszavonása ebben a listában",
"Add a new card" : "Új kártya hozzáadása", "Add a new card" : "Új kártya hozzáadása",
"Card name" : "Kártya neve", "Card name" : "Kártya neve",
"List deleted" : "Lista törölve", "List deleted" : "Lista törölve",
@@ -260,6 +262,7 @@ OC.L10N.register(
"Shared with you" : "Megosztva Önnel", "Shared with you" : "Megosztva Önnel",
"Deck settings" : "Kártyák beállításai", "Deck settings" : "Kártyák beállításai",
"Use bigger card view" : "Nagyobb kártyanézet használata", "Use bigger card view" : "Nagyobb kártyanézet használata",
"Show card ID badge" : "Kártyaazonosító jelvény megjelenítése",
"Show boards in calendar/tasks" : "Táblák megjelenítése a naptárak/teendők között", "Show boards in calendar/tasks" : "Táblák megjelenítése a naptárak/teendők között",
"Limit deck usage of groups" : "A kártyák használatának csoportokra korlátozása", "Limit deck usage of groups" : "A kártyák használatának csoportokra korlátozása",
"Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "A Kártyák korlátozása blokkolja a saját táblák létrehozását azoknál a felhasználóknál, akik nem tagjai a megadott csoportoknak. A felhasználók továbbra is tudnak dolgozni a velük megosztott táblákon.", "Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "A Kártyák korlátozása blokkolja a saját táblák létrehozását azoknál a felhasználóknál, akik nem tagjai a megadott csoportoknak. A felhasználók továbbra is tudnak dolgozni a velük megosztott táblákon.",
@@ -286,6 +289,7 @@ OC.L10N.register(
"Search for {searchQuery} in all boards" : "Keresés a(z) {searchQuery} kifejezésre az összes táblában", "Search for {searchQuery} in all boards" : "Keresés a(z) {searchQuery} kifejezésre az összes táblában",
"No results found" : "Nincs találat", "No results found" : "Nincs találat",
"{stack} in {board}" : "{stack} itt: {board}", "{stack} in {board}" : "{stack} itt: {board}",
"Click to expand description" : "Kattintson a leírás kibontásához",
"* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Létrehozva: {created}\n* Utoljára módosítva: {lastMod}\n* {nbAttachments} melléklet\n* {nbComments} megjegyzés", "* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Létrehozva: {created}\n* Utoljára módosítva: {lastMod}\n* {nbAttachments} melléklet\n* {nbComments} megjegyzés",
"{nbCards} cards" : "{nbCards} kártya", "{nbCards} cards" : "{nbCards} kártya",
"No upcoming cards" : "Nincsenek közelgő kártyák", "No upcoming cards" : "Nincsenek közelgő kártyák",

View File

@@ -181,8 +181,10 @@
"Failed to transfer the board to {user}" : "A tábla átadása {user} számára sikertelen", "Failed to transfer the board to {user}" : "A tábla átadása {user} számára sikertelen",
"Add a new list" : "Új lista hozzáadása", "Add a new list" : "Új lista hozzáadása",
"Archive all cards" : "Az összes kártya archiválása", "Archive all cards" : "Az összes kártya archiválása",
"Unarchive all cards" : "Az összes kártya archiválásának visszavonása",
"Delete list" : "Lista törlése", "Delete list" : "Lista törlése",
"Archive all cards in this list" : "Az összes kártya archiválása ebben a listában", "Archive all cards in this list" : "Az összes kártya archiválása ebben a listában",
"Unarchive all cards in this list" : "Az összes kártya archiválásának visszavonása ebben a listában",
"Add a new card" : "Új kártya hozzáadása", "Add a new card" : "Új kártya hozzáadása",
"Card name" : "Kártya neve", "Card name" : "Kártya neve",
"List deleted" : "Lista törölve", "List deleted" : "Lista törölve",
@@ -258,6 +260,7 @@
"Shared with you" : "Megosztva Önnel", "Shared with you" : "Megosztva Önnel",
"Deck settings" : "Kártyák beállításai", "Deck settings" : "Kártyák beállításai",
"Use bigger card view" : "Nagyobb kártyanézet használata", "Use bigger card view" : "Nagyobb kártyanézet használata",
"Show card ID badge" : "Kártyaazonosító jelvény megjelenítése",
"Show boards in calendar/tasks" : "Táblák megjelenítése a naptárak/teendők között", "Show boards in calendar/tasks" : "Táblák megjelenítése a naptárak/teendők között",
"Limit deck usage of groups" : "A kártyák használatának csoportokra korlátozása", "Limit deck usage of groups" : "A kártyák használatának csoportokra korlátozása",
"Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "A Kártyák korlátozása blokkolja a saját táblák létrehozását azoknál a felhasználóknál, akik nem tagjai a megadott csoportoknak. A felhasználók továbbra is tudnak dolgozni a velük megosztott táblákon.", "Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "A Kártyák korlátozása blokkolja a saját táblák létrehozását azoknál a felhasználóknál, akik nem tagjai a megadott csoportoknak. A felhasználók továbbra is tudnak dolgozni a velük megosztott táblákon.",
@@ -284,6 +287,7 @@
"Search for {searchQuery} in all boards" : "Keresés a(z) {searchQuery} kifejezésre az összes táblában", "Search for {searchQuery} in all boards" : "Keresés a(z) {searchQuery} kifejezésre az összes táblában",
"No results found" : "Nincs találat", "No results found" : "Nincs találat",
"{stack} in {board}" : "{stack} itt: {board}", "{stack} in {board}" : "{stack} itt: {board}",
"Click to expand description" : "Kattintson a leírás kibontásához",
"* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Létrehozva: {created}\n* Utoljára módosítva: {lastMod}\n* {nbAttachments} melléklet\n* {nbComments} megjegyzés", "* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Létrehozva: {created}\n* Utoljára módosítva: {lastMod}\n* {nbAttachments} melléklet\n* {nbComments} megjegyzés",
"{nbCards} cards" : "{nbCards} kártya", "{nbCards} cards" : "{nbCards} kártya",
"No upcoming cards" : "Nincsenek közelgő kártyák", "No upcoming cards" : "Nincsenek közelgő kártyák",

25
l10n/kab.js Normal file
View File

@@ -0,0 +1,25 @@
OC.L10N.register(
"deck",
{
"Personal" : "Udmawan",
"Finished" : "Immed",
"The file was uploaded" : "Ulac afaylu yettwaznen",
"The file was only partially uploaded" : "Afaylu, cwiṭ kan i yettwaznen segs",
"No file was uploaded" : "Ulac afaylu i d-yettwasulin",
"Missing a temporary folder" : "Ixuṣ ukaram akudan",
"Cancel" : "Sefsex",
"Close" : "Mdel",
"Details" : "Talqayt",
"Sharing" : "Beṭṭu",
"Tags" : "Tibzimin",
"Delete" : "Kkes",
"Edit" : "Ẓreg",
"Download" : "Sider",
"Modified" : "Yettwabeddel",
"Today" : "Ass-a",
"Save" : "Sekles",
"No notifications" : "Ulac tisezmal",
"Share" : "Bḍu",
"This week" : "Dduṛt agi"
},
"nplurals=2; plural=(n != 1);");

23
l10n/kab.json Normal file
View File

@@ -0,0 +1,23 @@
{ "translations": {
"Personal" : "Udmawan",
"Finished" : "Immed",
"The file was uploaded" : "Ulac afaylu yettwaznen",
"The file was only partially uploaded" : "Afaylu, cwiṭ kan i yettwaznen segs",
"No file was uploaded" : "Ulac afaylu i d-yettwasulin",
"Missing a temporary folder" : "Ixuṣ ukaram akudan",
"Cancel" : "Sefsex",
"Close" : "Mdel",
"Details" : "Talqayt",
"Sharing" : "Beṭṭu",
"Tags" : "Tibzimin",
"Delete" : "Kkes",
"Edit" : "Ẓreg",
"Download" : "Sider",
"Modified" : "Yettwabeddel",
"Today" : "Ass-a",
"Save" : "Sekles",
"No notifications" : "Ulac tisezmal",
"Share" : "Bḍu",
"This week" : "Dduṛt agi"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

View File

@@ -70,6 +70,7 @@ OC.L10N.register(
"Personal" : "Asmeniniai", "Personal" : "Asmeniniai",
"The card \"%s\" on \"%s\" has been assigned to you by %s." : "Kortelę \"%s\" ties \"%s\" priskyrė jums %s.", "The card \"%s\" on \"%s\" has been assigned to you by %s." : "Kortelę \"%s\" ties \"%s\" priskyrė jums %s.",
"The card \"%s\" on \"%s\" has reached its due date." : "Kortelė „%s“, esanti lentoje „%s“, pasiekė savo galutinį terminą.", "The card \"%s\" on \"%s\" has reached its due date." : "Kortelė „%s“, esanti lentoje „%s“, pasiekė savo galutinį terminą.",
"The card {deck-card} on {deck-board} has reached its due date." : "Kortelė {deck-card}, esanti lentoje {deck-board} pasiekė savo galutinio termino datą.",
"%s has mentioned you in a comment on \"%s\"." : "%s paminėjo jus komentare ties \"%s\".", "%s has mentioned you in a comment on \"%s\"." : "%s paminėjo jus komentare ties \"%s\".",
"The board \"%s\" has been shared with you by %s." : "Lentą \"%s\" su jumis bendrina %s.", "The board \"%s\" has been shared with you by %s." : "Lentą \"%s\" su jumis bendrina %s.",
"%s on %s" : "%s ant %s", "%s on %s" : "%s ant %s",
@@ -200,9 +201,9 @@ OC.L10N.register(
"Assign to users" : "Priskirti naudotojams", "Assign to users" : "Priskirti naudotojams",
"Assign to users/groups/circles" : "Priskirti naudotojams/grupėms/ratams", "Assign to users/groups/circles" : "Priskirti naudotojams/grupėms/ratams",
"Assign a user to this card…" : "Priskirti šiai kortelei naudotoją…", "Assign a user to this card…" : "Priskirti šiai kortelei naudotoją…",
"Due date" : "Terminas", "Due date" : "Galutinio termino data",
"Set a due date" : "Nustatyti galutinį terminą", "Set a due date" : "Nustatyti galutinį terminą",
"Remove due date" : "Pašalinti terminą", "Remove due date" : "Šalinti galutinio termino datą",
"Select Date" : "Pasirinkti datą", "Select Date" : "Pasirinkti datą",
"Today" : "Šiandien", "Today" : "Šiandien",
"Tomorrow" : "Rytoj", "Tomorrow" : "Rytoj",
@@ -243,9 +244,9 @@ OC.L10N.register(
"Clone board" : "Dubliuoti lentą", "Clone board" : "Dubliuoti lentą",
"Unarchive board" : "Išarchyvuoti lentą", "Unarchive board" : "Išarchyvuoti lentą",
"Archive board" : "Archyvuoti lentą", "Archive board" : "Archyvuoti lentą",
"Turn on due date reminders" : "Įjungti priminimus apie galutinį terminą", "Turn on due date reminders" : "Įjungti priminimus apie galutinio termino datą",
"Turn off due date reminders" : "Išjungti priminimus apie galutinį terminą", "Turn off due date reminders" : "Išjungti priminimus apie galutinio termino datą",
"Due date reminders" : "Priminimai apie galutinį terminą", "Due date reminders" : "Priminimai apie galutinio termino datą",
"All cards" : "Visos kortelės", "All cards" : "Visos kortelės",
"Assigned cards" : "Priskirtos kortelės", "Assigned cards" : "Priskirtos kortelės",
"No notifications" : "Pranešimų nėra", "No notifications" : "Pranešimų nėra",
@@ -257,6 +258,7 @@ OC.L10N.register(
"Delete the board?" : "Ištrinti lentą?", "Delete the board?" : "Ištrinti lentą?",
"No due" : "Be galutinio termino", "No due" : "Be galutinio termino",
"No results found" : "Nerasta jokių rezultatų", "No results found" : "Nerasta jokių rezultatų",
"Due on {date}" : "Galutinis terminas {date}",
"Link to a board" : "Susieti su lenta", "Link to a board" : "Susieti su lenta",
"Link to a card" : "Susieti su kortele", "Link to a card" : "Susieti su kortele",
"Create a card" : "Sukurti kortelę", "Create a card" : "Sukurti kortelę",

View File

@@ -68,6 +68,7 @@
"Personal" : "Asmeniniai", "Personal" : "Asmeniniai",
"The card \"%s\" on \"%s\" has been assigned to you by %s." : "Kortelę \"%s\" ties \"%s\" priskyrė jums %s.", "The card \"%s\" on \"%s\" has been assigned to you by %s." : "Kortelę \"%s\" ties \"%s\" priskyrė jums %s.",
"The card \"%s\" on \"%s\" has reached its due date." : "Kortelė „%s“, esanti lentoje „%s“, pasiekė savo galutinį terminą.", "The card \"%s\" on \"%s\" has reached its due date." : "Kortelė „%s“, esanti lentoje „%s“, pasiekė savo galutinį terminą.",
"The card {deck-card} on {deck-board} has reached its due date." : "Kortelė {deck-card}, esanti lentoje {deck-board} pasiekė savo galutinio termino datą.",
"%s has mentioned you in a comment on \"%s\"." : "%s paminėjo jus komentare ties \"%s\".", "%s has mentioned you in a comment on \"%s\"." : "%s paminėjo jus komentare ties \"%s\".",
"The board \"%s\" has been shared with you by %s." : "Lentą \"%s\" su jumis bendrina %s.", "The board \"%s\" has been shared with you by %s." : "Lentą \"%s\" su jumis bendrina %s.",
"%s on %s" : "%s ant %s", "%s on %s" : "%s ant %s",
@@ -198,9 +199,9 @@
"Assign to users" : "Priskirti naudotojams", "Assign to users" : "Priskirti naudotojams",
"Assign to users/groups/circles" : "Priskirti naudotojams/grupėms/ratams", "Assign to users/groups/circles" : "Priskirti naudotojams/grupėms/ratams",
"Assign a user to this card…" : "Priskirti šiai kortelei naudotoją…", "Assign a user to this card…" : "Priskirti šiai kortelei naudotoją…",
"Due date" : "Terminas", "Due date" : "Galutinio termino data",
"Set a due date" : "Nustatyti galutinį terminą", "Set a due date" : "Nustatyti galutinį terminą",
"Remove due date" : "Pašalinti terminą", "Remove due date" : "Šalinti galutinio termino datą",
"Select Date" : "Pasirinkti datą", "Select Date" : "Pasirinkti datą",
"Today" : "Šiandien", "Today" : "Šiandien",
"Tomorrow" : "Rytoj", "Tomorrow" : "Rytoj",
@@ -241,9 +242,9 @@
"Clone board" : "Dubliuoti lentą", "Clone board" : "Dubliuoti lentą",
"Unarchive board" : "Išarchyvuoti lentą", "Unarchive board" : "Išarchyvuoti lentą",
"Archive board" : "Archyvuoti lentą", "Archive board" : "Archyvuoti lentą",
"Turn on due date reminders" : "Įjungti priminimus apie galutinį terminą", "Turn on due date reminders" : "Įjungti priminimus apie galutinio termino datą",
"Turn off due date reminders" : "Išjungti priminimus apie galutinį terminą", "Turn off due date reminders" : "Išjungti priminimus apie galutinio termino datą",
"Due date reminders" : "Priminimai apie galutinį terminą", "Due date reminders" : "Priminimai apie galutinio termino datą",
"All cards" : "Visos kortelės", "All cards" : "Visos kortelės",
"Assigned cards" : "Priskirtos kortelės", "Assigned cards" : "Priskirtos kortelės",
"No notifications" : "Pranešimų nėra", "No notifications" : "Pranešimų nėra",
@@ -255,6 +256,7 @@
"Delete the board?" : "Ištrinti lentą?", "Delete the board?" : "Ištrinti lentą?",
"No due" : "Be galutinio termino", "No due" : "Be galutinio termino",
"No results found" : "Nerasta jokių rezultatų", "No results found" : "Nerasta jokių rezultatų",
"Due on {date}" : "Galutinis terminas {date}",
"Link to a board" : "Susieti su lenta", "Link to a board" : "Susieti su lenta",
"Link to a card" : "Susieti su kortele", "Link to a card" : "Susieti su kortele",
"Create a card" : "Sukurti kortelę", "Create a card" : "Sukurti kortelę",

View File

@@ -8,6 +8,7 @@ OC.L10N.register(
"You have restored the board {board}" : "Du har gjennopprettet tavle {board}", "You have restored the board {board}" : "Du har gjennopprettet tavle {board}",
"{user} has restored the board {board}" : "{user} har gjennopprettet tavle {board}", "{user} has restored the board {board}" : "{user} har gjennopprettet tavle {board}",
"You have shared the board {board} with {acl}" : "Du har delt tavle {board} med {acl}", "You have shared the board {board} with {acl}" : "Du har delt tavle {board} med {acl}",
"{user} has shared the board {board} with {acl}" : "{user} har delt table {board} med {acl}",
"You have removed {acl} from the board {board}" : "Du har fjernet {acl} fra tavle {board}", "You have removed {acl} from the board {board}" : "Du har fjernet {acl} fra tavle {board}",
"{user} has removed {acl} from the board {board}" : "{user} har fjernet {acl} fra tavle {board}", "{user} has removed {acl} from the board {board}" : "{user} har fjernet {acl} fra tavle {board}",
"You have renamed the board {before} to {board}" : "Du har endret navn på tavle {before} til {board}", "You have renamed the board {before} to {board}" : "Du har endret navn på tavle {before} til {board}",
@@ -16,22 +17,48 @@ OC.L10N.register(
"{user} has archived the board {before}" : "{user} har arkivert tavle {board}", "{user} has archived the board {before}" : "{user} har arkivert tavle {board}",
"You have unarchived the board {board}" : "Du har hentet tavle {board} fra arkiv", "You have unarchived the board {board}" : "Du har hentet tavle {board} fra arkiv",
"{user} has unarchived the board {before}" : "{user} har hentet tavle {board} fra arkiv", "{user} has unarchived the board {before}" : "{user} har hentet tavle {board} fra arkiv",
"You have created a new list {stack} on board {board}" : "Du har opprettet en ny stabel {stack} på tavle {board}",
"{user} has created a new list {stack} on board {board}" : "{user} har opprettet en ny stabel {stack} på tavle {board}",
"You have renamed list {before} to {stack} on board {board}" : "Du har endret navn på stabel {before} til {stack} på tavle {board}",
"{user} has renamed list {before} to {stack} on board {board}" : "{user} har endret navn på stabel {before} til {stack} på tavle {board}",
"You have deleted list {stack} on board {board}" : "Du har slettet stabel {stack} på tavle {board}",
"{user} has deleted list {stack} on board {board}" : "{user} har slettet stabel {stack} på tavle {board}",
"You have created card {card} in list {stack} on board {board}" : "Du har opprettet kort {card} i stabel {stack} på tavle {board}",
"{user} has created card {card} in list {stack} on board {board}" : "{user} har opprettet kort {card} i stabel {stack} på tavle {board}",
"You have deleted card {card} in list {stack} on board {board}" : "Du har slettet kort {card} i stabel {stack} på tavle {board}",
"{user} has deleted card {card} in list {stack} on board {board}" : "{user} har slettet kort {card} i stabel {stack} på tavle {board}",
"You have renamed the card {before} to {card}" : "Du har endret navn fra {before} til {card}", "You have renamed the card {before} to {card}" : "Du har endret navn fra {before} til {card}",
"{user} has renamed the card {before} to {card}" : "{user} har endret navn fra {before} til {card}", "{user} has renamed the card {before} to {card}" : "{user} har endret navn fra {before} til {card}",
"You have added a description to card {card} in list {stack} on board {board}" : "Du har lagt til beskrivelse på kort {card} i stable {stack} på table {board}",
"{user} has added a description to card {card} in list {stack} on board {board}" : "{user} har lagt til beskrivelse på kort {card} i stabel {stack} på tavle {board}",
"You have updated the description of card {card} in list {stack} on board {board}" : "Du har oppdatert beskrivelsen på kort {card} i stabel {stack} på tavle {board}",
"{user} has updated the description of the card {card} in list {stack} on board {board}" : "{user} har oppdatert beskrivelsen på kort {card} i stabel {stack} på tavle {board}",
"You have archived card {card} in list {stack} on board {board}" : "Du har arkivert kort {card} i stabel {stack} på tavle {board}",
"{user} has archived card {card} in list {stack} on board {board}" : "{user} har arkivert kort {card} i stabel {stack} på tavle {board}",
"You have unarchived card {card} in list {stack} on board {board}" : "Du har hentet arkivert kort {card} i stabel {stack} på tavle {board}",
"{user} has unarchived card {card} in list {stack} on board {board}" : "{user} har hentet arkivert kort {card} i stabel {stack} på tavle {board}",
"You have removed the due date of card {card}" : "Du har fjernet forfallsdato for kort {card}", "You have removed the due date of card {card}" : "Du har fjernet forfallsdato for kort {card}",
"{user} has removed the due date of card {card}" : "{user} har fjernet forfallsdato for kort {card}", "{user} has removed the due date of card {card}" : "{user} har fjernet forfallsdato for kort {card}",
"You have set the due date of card {card} to {after}" : "Du har satt forfallsdato på kort {card} etter {after}", "You have set the due date of card {card} to {after}" : "Du har satt forfallsdato på kort {card} etter {after}",
"{user} has set the due date of card {card} to {after}" : "{user} har satt forfallsdato på kort {card} etter {after}", "{user} has set the due date of card {card} to {after}" : "{user} har satt forfallsdato på kort {card} etter {after}",
"You have updated the due date of card {card} to {after}" : "Du har oppdatert forfallsdato på kort {card} etter {after}", "You have updated the due date of card {card} to {after}" : "Du har oppdatert forfallsdato på kort {card} etter {after}",
"{user} has updated the due date of card {card} to {after}" : "{user} har oppdatert forfallsdato på kort {card} etter {after}", "{user} has updated the due date of card {card} to {after}" : "{user} har oppdatert forfallsdato på kort {card} etter {after}",
"You have added the tag {label} to card {card} in list {stack} on board {board}" : "Du har lagt til merke {label} til kort {card} i stabel {stack} på tavle {board}",
"{user} has added the tag {label} to card {card} in list {stack} on board {board}" : "{user} har lagt til merke {label} til kort {card} i stabel {stack} på tavle {board}",
"You have removed the tag {label} from card {card} in list {stack} on board {board}" : "Du har fjernet merke {label} fra kort {card} i stabel {stack} på tavle {board}",
"{user} has removed the tag {label} from card {card} in list {stack} on board {board}" : "{user} har fjernet merke {label} fra kort {card} i stabel {stack} på tavle {board}",
"You have assigned {assigneduser} to card {card} on board {board}" : "Du har tildelt {assigneduser} til kort {card} på tavle {board}", "You have assigned {assigneduser} to card {card} on board {board}" : "Du har tildelt {assigneduser} til kort {card} på tavle {board}",
"{user} has assigned {assigneduser} to card {card} on board {board}" : "{user} har tildelt {assigneduser} til kort {card} på tavle {board}", "{user} has assigned {assigneduser} to card {card} on board {board}" : "{user} har tildelt {assigneduser} til kort {card} på tavle {board}",
"You have unassigned {assigneduser} from card {card} on board {board}" : "Du har fjernet {assigneduser} fra kort {card} på tavle {board}", "You have unassigned {assigneduser} from card {card} on board {board}" : "Du har fjernet {assigneduser} fra kort {card} på tavle {board}",
"{user} has unassigned {assigneduser} from card {card} on board {board}" : "{user} har fjernet {assigneduser} fra kort {card} på tavle {board}", "{user} has unassigned {assigneduser} from card {card} on board {board}" : "{user} har fjernet {assigneduser} fra kort {card} på tavle {board}",
"You have moved the card {card} from list {stackBefore} to {stack}" : "Du har flyttet kort {card} fra stabel {stackBefore} til {stack}",
"{user} has moved the card {card} from list {stackBefore} to {stack}" : "{user} har flyttet kort {card} fra stabel {stackBefore} til {stack}",
"You have added the attachment {attachment} to card {card}" : "Du har lagt til vedlegget {attachment} ti kortet {card}", "You have added the attachment {attachment} to card {card}" : "Du har lagt til vedlegget {attachment} ti kortet {card}",
"{user} has added the attachment {attachment} to card {card}" : "{user} har lagt til vedlegget {attachment} på kortet {card}", "{user} has added the attachment {attachment} to card {card}" : "{user} har lagt til vedlegget {attachment} på kortet {card}",
"You have updated the attachment {attachment} on card {card}" : "Du har oppdatert vedlegget {attachment} på kortet {card}", "You have updated the attachment {attachment} on card {card}" : "Du har oppdatert vedlegget {attachment} på kortet {card}",
"{user} has updated the attachment {attachment} on card {card}" : "{user} har oppdateret vedlegget {attachment} på kortet {card}",
"You have deleted the attachment {attachment} from card {card}" : "Du har slettet vedlegget {attachment} på kortet {card}", "You have deleted the attachment {attachment} from card {card}" : "Du har slettet vedlegget {attachment} på kortet {card}",
"{user} has deleted the attachment {attachment} from card {card}" : "{user} har slettet vedlegget {attachment} fra kortet {card}",
"You have restored the attachment {attachment} to card {card}" : "Du har gjennopprettet vedlegget {attachment} på kortet {card}", "You have restored the attachment {attachment} to card {card}" : "Du har gjennopprettet vedlegget {attachment} på kortet {card}",
"{user} has restored the attachment {attachment} to card {card}" : "{user} har gjennopprettet vedlegget {attachment} på kortet {card}", "{user} has restored the attachment {attachment} to card {card}" : "{user} har gjennopprettet vedlegget {attachment} på kortet {card}",
"You have commented on card {card}" : "Du har kommetnert på kort {card}", "You have commented on card {card}" : "Du har kommetnert på kort {card}",
@@ -39,12 +66,19 @@ OC.L10N.register(
"A <strong>card description</strong> inside the Deck app has been changed" : "En <strong>kort beskrivelse</strong>i Stokk-appen er endret", "A <strong>card description</strong> inside the Deck app has been changed" : "En <strong>kort beskrivelse</strong>i Stokk-appen er endret",
"Deck" : "Stokk", "Deck" : "Stokk",
"Changes in the <strong>Deck app</strong>" : "Endringer i <strong>Stokk-appen</strong>", "Changes in the <strong>Deck app</strong>" : "Endringer i <strong>Stokk-appen</strong>",
"A <strong>comment</strong> was created on a card" : "En <strong>kommentar</strong> ble skrevet på kortet",
"Upcoming cards" : "Kommende kort",
"Load more" : "Last mer", "Load more" : "Last mer",
"Personal" : "Personlig", "Personal" : "Personlig",
"The card \"%s\" on \"%s\" has been assigned to you by %s." : "Kortet \"%s\" på \"%s\" er endret til deg av %s.", "The card \"%s\" on \"%s\" has been assigned to you by %s." : "Kortet \"%s\" på \"%s\" er endret til deg av %s.",
"{user} has assigned the card {deck-card} on {deck-board} to you." : "{user} har tildelt kortet {deck-card} på {deck-board} til deg.",
"The card \"%s\" on \"%s\" has reached its due date." : "Kortet \"%s\" på \"%s\" har nådd sin utløpsdato.", "The card \"%s\" on \"%s\" has reached its due date." : "Kortet \"%s\" på \"%s\" har nådd sin utløpsdato.",
"The card {deck-card} on {deck-board} has reached its due date." : "Kortet {deck-card} på {deck-board} har nådd sin utløpsdato.",
"%s has mentioned you in a comment on \"%s\"." : "%shar nevnt deg i en kommentar på \"%s\".", "%s has mentioned you in a comment on \"%s\"." : "%shar nevnt deg i en kommentar på \"%s\".",
"{user} has mentioned you in a comment on {deck-card}." : "{user} har nevnt deg i en kommentar på {deck-card}.",
"The board \"%s\" has been shared with you by %s." : "Brettet \"%s\" har blitt delt med deg av %s.", "The board \"%s\" has been shared with you by %s." : "Brettet \"%s\" har blitt delt med deg av %s.",
"{user} has shared {deck-board} with you." : "{user} har delt brettet {deck-board} med deg.",
"Card comments" : "Kommentarer på kortet",
"%s on %s" : "%s på %s", "%s on %s" : "%s på %s",
"No data was provided to create an attachment." : "Ingen data for å opprette vedlegg.", "No data was provided to create an attachment." : "Ingen data for å opprette vedlegg.",
"Finished" : "Fullført", "Finished" : "Fullført",
@@ -67,52 +101,124 @@ OC.L10N.register(
"Could not write file to disk" : "Kan ikke skrive til disk", "Could not write file to disk" : "Kan ikke skrive til disk",
"A PHP extension stopped the file upload" : "En PHP utvidelse stoppet når fil ble lastet opp", "A PHP extension stopped the file upload" : "En PHP utvidelse stoppet når fil ble lastet opp",
"No file uploaded or file size exceeds maximum of %s" : "Ingen fil lastet opp eller filen er større enn %s", "No file uploaded or file size exceeds maximum of %s" : "Ingen fil lastet opp eller filen er større enn %s",
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : "Denne kommentaren har enn %s tegn.\nLa til som vedlegg til kortet med navnet %s.\nTilgjengelig på URL: %s.",
"Card not found" : "Kort ikke funnet", "Card not found" : "Kort ikke funnet",
"Path is already shared with this card" : "Stien er allerede delt med dette kortet",
"Invalid date, date format must be YYYY-MM-DD" : "Feil dato, dato må være i formatet YYYY-MM-DD", "Invalid date, date format must be YYYY-MM-DD" : "Feil dato, dato må være i formatet YYYY-MM-DD",
"Personal planning and team project organization" : "Personlig planlegging og organisering av prosjekter i team",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in Markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your Markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Stokk er et kanban inspirert verktøy for organisering for personlig planlegging og prosjekt organisering for team integrert med Nextcloud.\n\n\n- 📥 Legg til oppgaver på kort og hold orden på disse.\n- 📄 Legg til notater.\n- 🔖 Tildel merke for enda bedre organisering.\n- 👥 Del med team, venner eller familile.\n- 📎 Legg ved filer som kan integreres i beskrivelser.\n- 💬 Diskuter med ditt team ved å bruke kommentarer.\n- ⚡ Hold oversikt over endringer i aktivitetsstrøm.\n- 🚀 Få dine prosjekt organisert.",
"Card details" : "Kort-detaljer",
"Add board" : "Legg til tavle", "Add board" : "Legg til tavle",
"Select the board to link to a project" : "Velg tavle som skal lenkes til prosjekt", "Select the board to link to a project" : "Velg tavle som skal lenkes til prosjekt",
"Search by board title" : "Søk på tittel på tavle",
"Select board" : "Velg tavle", "Select board" : "Velg tavle",
"Create a new card" : "Opprett et nytt kort",
"Select a board" : "Velg en tavle",
"Select a list" : "Velg en stabel",
"Card title" : "Kortittel",
"Cancel" : "Avbryt", "Cancel" : "Avbryt",
"Creating the new card …" : "Oppretter det nye kortet ...",
"Card \"{card}\" was added to \"{board}\"" : "Kort \"{card}\" ble lagt til i \"{board}\"",
"Open card" : "Åpne kort",
"Close" : "Lukk", "Close" : "Lukk",
"Create card" : "Opprett kort",
"Select a card" : "Velg et kort",
"Select the card to link to a project" : "Velg kort som skal lenkes til prosjekt",
"Link to card" : "Lenke til kort",
"File already exists" : "Filen finnes allerede", "File already exists" : "Filen finnes allerede",
"A file with the name {filename} already exists." : "En fil med navnet {filename} finnes allerede.",
"Do you want to overwrite it?" : "Vil du overskrive?", "Do you want to overwrite it?" : "Vil du overskrive?",
"Overwrite file" : "Overskriv fil",
"Keep existing file" : "Behold eksisterende fil",
"This board is read only" : "Denne tavlen er kun lesbar",
"Drop your files to upload" : "Dropp filer for å laste opp",
"Add card" : "Legg til kort", "Add card" : "Legg til kort",
"Archived cards" : "Arkiver tavle", "Archived cards" : "Arkiver tavle",
"Add list" : "Legg til liste", "Add list" : "Legg til liste",
"List name" : "Listenavn",
"Active filters" : "Aktivt filter",
"Apply filter" : "Aktiver filter",
"Filter by tag" : "Filtrer på knagg", "Filter by tag" : "Filtrer på knagg",
"Filter by assigned user" : "Filtrer på tildelt bruker", "Filter by assigned user" : "Filtrer på tildelt bruker",
"Unassigned" : "Ikke tildelt", "Unassigned" : "Ikke tildelt",
"Filter by due date" : "Filtrer på forfallsdato", "Filter by due date" : "Filtrer på forfallsdato",
"Overdue" : "Utløpt", "Overdue" : "Utløpt",
"Next 24 hours" : "Neste 24 timer",
"Next 7 days" : "Neste 7 dager", "Next 7 days" : "Neste 7 dager",
"Next 30 days" : "Neste 30 dager", "Next 30 days" : "Neste 30 dager",
"No due date" : "Ingen forfallsdato", "No due date" : "Ingen forfallsdato",
"Clear filter" : "Tøm filter",
"Hide archived cards" : "Skjul arkiverte kort", "Hide archived cards" : "Skjul arkiverte kort",
"Show archived cards" : "Vis arkiverkte kort", "Show archived cards" : "Vis arkiverkte kort",
"Toggle compact mode" : "Endre kompakt modus", "Toggle compact mode" : "Endre kompakt modus",
"Open details" : "Åpne detaljer",
"Details" : "Detaljer", "Details" : "Detaljer",
"Loading board" : "Laster tavle",
"No lists available" : "Ingen stabler tilgjengelig",
"Create a new list to add cards to this board" : "Lag en ny stabel for å legge til kort til denne tavlen",
"Board not found" : "Tavle ikke funnet",
"Sharing" : "Deling", "Sharing" : "Deling",
"Tags" : "Merkelapper", "Tags" : "Merkelapper",
"Deleted items" : "Slettede element", "Deleted items" : "Slettede element",
"Timeline" : "Tidslinje", "Timeline" : "Tidslinje",
"Deleted lists" : "Slettede stabler",
"Undo" : "Angre", "Undo" : "Angre",
"Deleted cards" : "Slettede kort", "Deleted cards" : "Slettede kort",
"Share board with a user, group or circle …" : "Del tavle med bruker, gruppe eller sirkel",
"Searching for users, groups and circles …" : "Søker etter brukere, grupper og sirkler ...",
"No participants found" : "Ingen deltakere funnet",
"Board owner" : "Tavle-eier",
"(Group)" : "(Gruppe)", "(Group)" : "(Gruppe)",
"(Circle)" : "(Sirkel)",
"Can edit" : "Kan redigere", "Can edit" : "Kan redigere",
"Can share" : "Kan dele", "Can share" : "Kan dele",
"Can manage" : "Kan behandle",
"Owner" : "Eier", "Owner" : "Eier",
"Delete" : "Slett", "Delete" : "Slett",
"Failed to create share with {displayName}" : "Klarte ikke å opprette deling med {displayName}",
"Are you sure you want to transfer the board {title} to {user}?" : "Er du sikker på at du vil overføre tavlen {title} til {user}?",
"Transfer the board." : "Overfør tavle.",
"Transfer" : "Overfør", "Transfer" : "Overfør",
"The board has been transferred to {user}" : "Tavlen har blitt overført til {user}",
"Failed to transfer the board to {user}" : "Klarte ikke overføre tavlen til {user}",
"Add a new list" : "Legg til en ny stabel",
"Archive all cards" : "Arkiver alle kort",
"Delete list" : "Slett listen", "Delete list" : "Slett listen",
"Archive all cards in this list" : "Arkiver alle kort i en stabel",
"Add a new card" : "Legg til nytt kort",
"Card name" : "Navn på kort",
"List deleted" : "Stabel slettet",
"Edit" : "Rediger", "Edit" : "Rediger",
"Add a new tag" : "Legg til nytt merke",
"title and color value must be provided" : "Du må oppgi verdier for tittel og farge",
"Board name" : "Navn på tavle",
"Members" : "Medlemmer", "Members" : "Medlemmer",
"Upload new files" : "Last opp nye filer",
"Share from Files" : "Del fra Filer",
"Pending share" : "Ventende deling",
"Add this attachment" : "Legg til vedlegg",
"Show in Files" : "Vis i Filer",
"Download" : "Last ned", "Download" : "Last ned",
"Remove attachment" : "Fjern vedlegg",
"Delete Attachment" : "Slett vedlegg",
"Restore Attachment" : "Gjenopprett vedlegg",
"File to share" : "Fil for deling",
"Invalid path selected" : "Ugyldig angitt sti", "Invalid path selected" : "Ugyldig angitt sti",
"Open in sidebar view" : "Åpne med sidepanel",
"Open in bigger view" : "Åpen i større visning",
"Attachments" : "Vedlegg", "Attachments" : "Vedlegg",
"Comments" : "Kommentarer", "Comments" : "Kommentarer",
"Modified" : "Endret", "Modified" : "Endret",
"Created" : "Opprettet", "Created" : "Opprettet",
"The title cannot be empty." : "Tittel kan ikke være tom",
"No comments yet. Begin the discussion!" : "Ingen kommentarer ennå. Start diskusjonen!",
"Failed to load comments" : "Feil i lasting av kommentarer",
"Assign a tag to this card…" : "Legg til et merke til dette kortet...",
"Assign to users" : "Tildel brukere",
"Assign to users/groups/circles" : "Tildel brukere/grupper/sirkler",
"Assign a user to this card…" : "Tildel bruker til dette kortet...",
"Due date" : "Forfallsdato", "Due date" : "Forfallsdato",
"Set a due date" : "Set forfallsdato",
"Remove due date" : "Fjern forfallsdato", "Remove due date" : "Fjern forfallsdato",
"Select Date" : "Velg dato", "Select Date" : "Velg dato",
"Today" : "I dag", "Today" : "I dag",
@@ -120,33 +226,89 @@ OC.L10N.register(
"Next week" : "Neste uke", "Next week" : "Neste uke",
"Next month" : "Neste måned", "Next month" : "Neste måned",
"Save" : "Lagre", "Save" : "Lagre",
"The comment cannot be empty." : "Kommentaren kan ikke være tom.",
"The comment cannot be longer than 1000 characters." : "Kommentaren kan ikke være lenger enn 1000 tegn.",
"In reply to" : "Som svar på",
"Cancel reply" : "Avbryt svar",
"Reply" : "Svar", "Reply" : "Svar",
"Update" : "Oppdater", "Update" : "Oppdater",
"Description" : "Beskrivelse", "Description" : "Beskrivelse",
"(Unsaved)" : "(Ikke lagret)",
"(Saving…)" : "(Lagrer...)",
"Formatting help" : "Formateringshjelp", "Formatting help" : "Formateringshjelp",
"Edit description" : "Rediger beskrivelse", "Edit description" : "Rediger beskrivelse",
"View description" : "Se beskrivelse",
"Add Attachment" : "Legg til vedlegg",
"Write a description …" : "Skriv en beskrivelse ...",
"Choose attachment" : "Velg vedlegg",
"(group)" : "(gruppe)", "(group)" : "(gruppe)",
"Todo items" : "Gjøremålspunkter",
"{count} comments, {unread} unread" : "{count} kommentarer, {unread} ulest",
"Edit card title" : "Rediger korttittel",
"Assign to me" : "Tildel meg",
"Unassign myself" : "Fjern meg fra tildeling",
"Move card" : "Flytt kort", "Move card" : "Flytt kort",
"Unarchive card" : "Hent kort fra arkiv", "Unarchive card" : "Hent kort fra arkiv",
"Archive card" : "Arkiver kort", "Archive card" : "Arkiver kort",
"Delete card" : "Slett kort", "Delete card" : "Slett kort",
"Move card to another board" : "Flytt kort til annen tavle",
"List is empty" : "Stabel er tom",
"Card deleted" : "Kort slettet",
"seconds ago" : "sekunder siden", "seconds ago" : "sekunder siden",
"All boards" : "Alle tabler",
"Archived boards" : "Arkiverte tavler", "Archived boards" : "Arkiverte tavler",
"Shared with you" : "Delt med deg", "Shared with you" : "Delt med deg",
"Deck settings" : "Innstillinger for Stokk",
"Use bigger card view" : "Bruk større visning på kort",
"Show boards in calendar/tasks" : "Vis tavler i kalender/oppgaver",
"Limit deck usage of groups" : "Begrens stokk-bruk til grupper",
"Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Begrensning av tavler vil hindre tilgang til de brukere som ikke er medlem av en gruppe fra å lage egne tavler. Bruker kan arbeide på de tavler som er delt med dem.", "Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Begrensning av tavler vil hindre tilgang til de brukere som ikke er medlem av en gruppe fra å lage egne tavler. Bruker kan arbeide på de tavler som er delt med dem.",
"Board details" : "Forumseksjonsdetaljer", "Board details" : "Forumseksjonsdetaljer",
"Edit board" : "Rediger tavle", "Edit board" : "Rediger tavle",
"Clone board" : "Klon tavle", "Clone board" : "Klon tavle",
"Unarchive board" : "Aktiver tavle", "Unarchive board" : "Aktiver tavle",
"Archive board" : "Arkiver tavle", "Archive board" : "Arkiver tavle",
"Turn on due date reminders" : "Skru på påminnelser for forfallsdato",
"Turn off due date reminders" : "Skru av påminnelser for forfallsdato",
"Due date reminders" : "Påminnelser for forfallsdato",
"All cards" : "Alle kort",
"Assigned cards" : "Tildelte kort",
"No notifications" : "Ingen varsler", "No notifications" : "Ingen varsler",
"Delete board" : "Slett tavle", "Delete board" : "Slett tavle",
"Board {0} deleted" : "Tavle {0} slettet",
"Only assigned cards" : "Kun tildelte kort",
"No reminder" : "Ingen varsel", "No reminder" : "Ingen varsel",
"An error occurred" : "En feil oppstod", "An error occurred" : "En feil oppstod",
"Are you sure you want to delete the board {title}? This will delete all the data of this board including archived cards." : "Are du sikker på sletting av tavlen {title}? Handlingen vil slette all data i denne tavlen, inkludert arkiverte kort.",
"Delete the board?" : "Slett tavlen?",
"Loading filtered view" : "Laster filtrert visning",
"No due" : "Ingen forfall",
"Search for {searchQuery} in all boards" : "Søk etter {searchQuery} i alle tavler",
"No results found" : "Ingen resultater funnet",
"{stack} in {board}" : "{stack} i {board}",
"Click to expand description" : "Klikk for å utvide beskrivelsen",
"* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Opprettet {created}\n* Sist endret {lastMod}\n* {nbAttachments} vedlegg\n* {nbComments} kommentarer",
"{nbCards} cards" : "{nbCards} kort",
"No upcoming cards" : "Ingen kommende kort",
"upcoming cards" : "kommende kort",
"Due on {date}" : "Utløper {date}",
"Link to a board" : "Lenke til tavle", "Link to a board" : "Lenke til tavle",
"Link to a card" : "Lenke til et kort",
"Create a card" : "Opprett kort",
"Message from {author} in {conversationName}" : "Melding fra {author} i {conversationName}",
"Something went wrong" : "Noe gikk galt",
"Failed to upload {name}" : "Klarte ikke laste opp {name}",
"Maximum file size of {size} exceeded" : "Maksimal størrelse for filer på {size} er overskredet", "Maximum file size of {size} exceeded" : "Maksimal størrelse for filer på {size} er overskredet",
"Error creating the share" : "Feil ved oppretting av deling",
"Share with a Deck card" : "Del med et Stokk-kort",
"Share {file} with a Deck card" : "Del {file} med et Stokk-kort",
"Share" : "Del", "Share" : "Del",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Stokk er et kanban inspirert verktøy for organisering for personlig planlegging og prosjekt organisering for team integrert med Nextcloud.\n\n\n- 📥 Legg til oppgaver på kort og hold orden på disse.\n- 📄 Legg til notater.\n- 🔖 Tildel merke for enda bedre organisering.\n- 👥 Del med team, venner eller familile.\n- 📎 Legg ved filer som kan integreres i beskrivelser.\n- 💬 Diskuter med ditt team ved å bruke kommentarer.\n- ⚡ Hold oversikt over endringer i aktivitetsstrøm.\n- 🚀 Få dine prosjekt organisert.", "Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Stokk er et kanban inspirert verktøy for organisering for personlig planlegging og prosjekt organisering for team integrert med Nextcloud.\n\n\n- 📥 Legg til oppgaver på kort og hold orden på disse.\n- 📄 Legg til notater.\n- 🔖 Tildel merke for enda bedre organisering.\n- 👥 Del med team, venner eller familile.\n- 📎 Legg ved filer som kan integreres i beskrivelser.\n- 💬 Diskuter med ditt team ved å bruke kommentarer.\n- ⚡ Hold oversikt over endringer i aktivitetsstrøm.\n- 🚀 Få dine prosjekt organisert.",
"This week" : "Denne uken" "Are you sure you want to transfer the board {title} for {user} ?" : "Er du sikker på at du vil overføre tavlen {title} for {user} ?",
"Transfer the board for {user} successfully" : "Tavlen ble overført for {user}",
"Failed to transfer the board for {user}" : "Klarte ikke overføre tavlen for {user}",
"Are you sure you want to delete the board {title}? This will delete all the data of this board." : "Er du sikker på sletting av tavlen {title}? Dette vil slette alt innholdet på denne tavlen.",
"This week" : "Denne uken",
"Are you sure you want to transfer the board {title} for {user}?" : "Er du sikker på at du vil overføre tavlen {title} for {user}?"
}, },
"nplurals=2; plural=(n != 1);"); "nplurals=2; plural=(n != 1);");

View File

@@ -6,6 +6,7 @@
"You have restored the board {board}" : "Du har gjennopprettet tavle {board}", "You have restored the board {board}" : "Du har gjennopprettet tavle {board}",
"{user} has restored the board {board}" : "{user} har gjennopprettet tavle {board}", "{user} has restored the board {board}" : "{user} har gjennopprettet tavle {board}",
"You have shared the board {board} with {acl}" : "Du har delt tavle {board} med {acl}", "You have shared the board {board} with {acl}" : "Du har delt tavle {board} med {acl}",
"{user} has shared the board {board} with {acl}" : "{user} har delt table {board} med {acl}",
"You have removed {acl} from the board {board}" : "Du har fjernet {acl} fra tavle {board}", "You have removed {acl} from the board {board}" : "Du har fjernet {acl} fra tavle {board}",
"{user} has removed {acl} from the board {board}" : "{user} har fjernet {acl} fra tavle {board}", "{user} has removed {acl} from the board {board}" : "{user} har fjernet {acl} fra tavle {board}",
"You have renamed the board {before} to {board}" : "Du har endret navn på tavle {before} til {board}", "You have renamed the board {before} to {board}" : "Du har endret navn på tavle {before} til {board}",
@@ -14,22 +15,48 @@
"{user} has archived the board {before}" : "{user} har arkivert tavle {board}", "{user} has archived the board {before}" : "{user} har arkivert tavle {board}",
"You have unarchived the board {board}" : "Du har hentet tavle {board} fra arkiv", "You have unarchived the board {board}" : "Du har hentet tavle {board} fra arkiv",
"{user} has unarchived the board {before}" : "{user} har hentet tavle {board} fra arkiv", "{user} has unarchived the board {before}" : "{user} har hentet tavle {board} fra arkiv",
"You have created a new list {stack} on board {board}" : "Du har opprettet en ny stabel {stack} på tavle {board}",
"{user} has created a new list {stack} on board {board}" : "{user} har opprettet en ny stabel {stack} på tavle {board}",
"You have renamed list {before} to {stack} on board {board}" : "Du har endret navn på stabel {before} til {stack} på tavle {board}",
"{user} has renamed list {before} to {stack} on board {board}" : "{user} har endret navn på stabel {before} til {stack} på tavle {board}",
"You have deleted list {stack} on board {board}" : "Du har slettet stabel {stack} på tavle {board}",
"{user} has deleted list {stack} on board {board}" : "{user} har slettet stabel {stack} på tavle {board}",
"You have created card {card} in list {stack} on board {board}" : "Du har opprettet kort {card} i stabel {stack} på tavle {board}",
"{user} has created card {card} in list {stack} on board {board}" : "{user} har opprettet kort {card} i stabel {stack} på tavle {board}",
"You have deleted card {card} in list {stack} on board {board}" : "Du har slettet kort {card} i stabel {stack} på tavle {board}",
"{user} has deleted card {card} in list {stack} on board {board}" : "{user} har slettet kort {card} i stabel {stack} på tavle {board}",
"You have renamed the card {before} to {card}" : "Du har endret navn fra {before} til {card}", "You have renamed the card {before} to {card}" : "Du har endret navn fra {before} til {card}",
"{user} has renamed the card {before} to {card}" : "{user} har endret navn fra {before} til {card}", "{user} has renamed the card {before} to {card}" : "{user} har endret navn fra {before} til {card}",
"You have added a description to card {card} in list {stack} on board {board}" : "Du har lagt til beskrivelse på kort {card} i stable {stack} på table {board}",
"{user} has added a description to card {card} in list {stack} on board {board}" : "{user} har lagt til beskrivelse på kort {card} i stabel {stack} på tavle {board}",
"You have updated the description of card {card} in list {stack} on board {board}" : "Du har oppdatert beskrivelsen på kort {card} i stabel {stack} på tavle {board}",
"{user} has updated the description of the card {card} in list {stack} on board {board}" : "{user} har oppdatert beskrivelsen på kort {card} i stabel {stack} på tavle {board}",
"You have archived card {card} in list {stack} on board {board}" : "Du har arkivert kort {card} i stabel {stack} på tavle {board}",
"{user} has archived card {card} in list {stack} on board {board}" : "{user} har arkivert kort {card} i stabel {stack} på tavle {board}",
"You have unarchived card {card} in list {stack} on board {board}" : "Du har hentet arkivert kort {card} i stabel {stack} på tavle {board}",
"{user} has unarchived card {card} in list {stack} on board {board}" : "{user} har hentet arkivert kort {card} i stabel {stack} på tavle {board}",
"You have removed the due date of card {card}" : "Du har fjernet forfallsdato for kort {card}", "You have removed the due date of card {card}" : "Du har fjernet forfallsdato for kort {card}",
"{user} has removed the due date of card {card}" : "{user} har fjernet forfallsdato for kort {card}", "{user} has removed the due date of card {card}" : "{user} har fjernet forfallsdato for kort {card}",
"You have set the due date of card {card} to {after}" : "Du har satt forfallsdato på kort {card} etter {after}", "You have set the due date of card {card} to {after}" : "Du har satt forfallsdato på kort {card} etter {after}",
"{user} has set the due date of card {card} to {after}" : "{user} har satt forfallsdato på kort {card} etter {after}", "{user} has set the due date of card {card} to {after}" : "{user} har satt forfallsdato på kort {card} etter {after}",
"You have updated the due date of card {card} to {after}" : "Du har oppdatert forfallsdato på kort {card} etter {after}", "You have updated the due date of card {card} to {after}" : "Du har oppdatert forfallsdato på kort {card} etter {after}",
"{user} has updated the due date of card {card} to {after}" : "{user} har oppdatert forfallsdato på kort {card} etter {after}", "{user} has updated the due date of card {card} to {after}" : "{user} har oppdatert forfallsdato på kort {card} etter {after}",
"You have added the tag {label} to card {card} in list {stack} on board {board}" : "Du har lagt til merke {label} til kort {card} i stabel {stack} på tavle {board}",
"{user} has added the tag {label} to card {card} in list {stack} on board {board}" : "{user} har lagt til merke {label} til kort {card} i stabel {stack} på tavle {board}",
"You have removed the tag {label} from card {card} in list {stack} on board {board}" : "Du har fjernet merke {label} fra kort {card} i stabel {stack} på tavle {board}",
"{user} has removed the tag {label} from card {card} in list {stack} on board {board}" : "{user} har fjernet merke {label} fra kort {card} i stabel {stack} på tavle {board}",
"You have assigned {assigneduser} to card {card} on board {board}" : "Du har tildelt {assigneduser} til kort {card} på tavle {board}", "You have assigned {assigneduser} to card {card} on board {board}" : "Du har tildelt {assigneduser} til kort {card} på tavle {board}",
"{user} has assigned {assigneduser} to card {card} on board {board}" : "{user} har tildelt {assigneduser} til kort {card} på tavle {board}", "{user} has assigned {assigneduser} to card {card} on board {board}" : "{user} har tildelt {assigneduser} til kort {card} på tavle {board}",
"You have unassigned {assigneduser} from card {card} on board {board}" : "Du har fjernet {assigneduser} fra kort {card} på tavle {board}", "You have unassigned {assigneduser} from card {card} on board {board}" : "Du har fjernet {assigneduser} fra kort {card} på tavle {board}",
"{user} has unassigned {assigneduser} from card {card} on board {board}" : "{user} har fjernet {assigneduser} fra kort {card} på tavle {board}", "{user} has unassigned {assigneduser} from card {card} on board {board}" : "{user} har fjernet {assigneduser} fra kort {card} på tavle {board}",
"You have moved the card {card} from list {stackBefore} to {stack}" : "Du har flyttet kort {card} fra stabel {stackBefore} til {stack}",
"{user} has moved the card {card} from list {stackBefore} to {stack}" : "{user} har flyttet kort {card} fra stabel {stackBefore} til {stack}",
"You have added the attachment {attachment} to card {card}" : "Du har lagt til vedlegget {attachment} ti kortet {card}", "You have added the attachment {attachment} to card {card}" : "Du har lagt til vedlegget {attachment} ti kortet {card}",
"{user} has added the attachment {attachment} to card {card}" : "{user} har lagt til vedlegget {attachment} på kortet {card}", "{user} has added the attachment {attachment} to card {card}" : "{user} har lagt til vedlegget {attachment} på kortet {card}",
"You have updated the attachment {attachment} on card {card}" : "Du har oppdatert vedlegget {attachment} på kortet {card}", "You have updated the attachment {attachment} on card {card}" : "Du har oppdatert vedlegget {attachment} på kortet {card}",
"{user} has updated the attachment {attachment} on card {card}" : "{user} har oppdateret vedlegget {attachment} på kortet {card}",
"You have deleted the attachment {attachment} from card {card}" : "Du har slettet vedlegget {attachment} på kortet {card}", "You have deleted the attachment {attachment} from card {card}" : "Du har slettet vedlegget {attachment} på kortet {card}",
"{user} has deleted the attachment {attachment} from card {card}" : "{user} har slettet vedlegget {attachment} fra kortet {card}",
"You have restored the attachment {attachment} to card {card}" : "Du har gjennopprettet vedlegget {attachment} på kortet {card}", "You have restored the attachment {attachment} to card {card}" : "Du har gjennopprettet vedlegget {attachment} på kortet {card}",
"{user} has restored the attachment {attachment} to card {card}" : "{user} har gjennopprettet vedlegget {attachment} på kortet {card}", "{user} has restored the attachment {attachment} to card {card}" : "{user} har gjennopprettet vedlegget {attachment} på kortet {card}",
"You have commented on card {card}" : "Du har kommetnert på kort {card}", "You have commented on card {card}" : "Du har kommetnert på kort {card}",
@@ -37,12 +64,19 @@
"A <strong>card description</strong> inside the Deck app has been changed" : "En <strong>kort beskrivelse</strong>i Stokk-appen er endret", "A <strong>card description</strong> inside the Deck app has been changed" : "En <strong>kort beskrivelse</strong>i Stokk-appen er endret",
"Deck" : "Stokk", "Deck" : "Stokk",
"Changes in the <strong>Deck app</strong>" : "Endringer i <strong>Stokk-appen</strong>", "Changes in the <strong>Deck app</strong>" : "Endringer i <strong>Stokk-appen</strong>",
"A <strong>comment</strong> was created on a card" : "En <strong>kommentar</strong> ble skrevet på kortet",
"Upcoming cards" : "Kommende kort",
"Load more" : "Last mer", "Load more" : "Last mer",
"Personal" : "Personlig", "Personal" : "Personlig",
"The card \"%s\" on \"%s\" has been assigned to you by %s." : "Kortet \"%s\" på \"%s\" er endret til deg av %s.", "The card \"%s\" on \"%s\" has been assigned to you by %s." : "Kortet \"%s\" på \"%s\" er endret til deg av %s.",
"{user} has assigned the card {deck-card} on {deck-board} to you." : "{user} har tildelt kortet {deck-card} på {deck-board} til deg.",
"The card \"%s\" on \"%s\" has reached its due date." : "Kortet \"%s\" på \"%s\" har nådd sin utløpsdato.", "The card \"%s\" on \"%s\" has reached its due date." : "Kortet \"%s\" på \"%s\" har nådd sin utløpsdato.",
"The card {deck-card} on {deck-board} has reached its due date." : "Kortet {deck-card} på {deck-board} har nådd sin utløpsdato.",
"%s has mentioned you in a comment on \"%s\"." : "%shar nevnt deg i en kommentar på \"%s\".", "%s has mentioned you in a comment on \"%s\"." : "%shar nevnt deg i en kommentar på \"%s\".",
"{user} has mentioned you in a comment on {deck-card}." : "{user} har nevnt deg i en kommentar på {deck-card}.",
"The board \"%s\" has been shared with you by %s." : "Brettet \"%s\" har blitt delt med deg av %s.", "The board \"%s\" has been shared with you by %s." : "Brettet \"%s\" har blitt delt med deg av %s.",
"{user} has shared {deck-board} with you." : "{user} har delt brettet {deck-board} med deg.",
"Card comments" : "Kommentarer på kortet",
"%s on %s" : "%s på %s", "%s on %s" : "%s på %s",
"No data was provided to create an attachment." : "Ingen data for å opprette vedlegg.", "No data was provided to create an attachment." : "Ingen data for å opprette vedlegg.",
"Finished" : "Fullført", "Finished" : "Fullført",
@@ -65,52 +99,124 @@
"Could not write file to disk" : "Kan ikke skrive til disk", "Could not write file to disk" : "Kan ikke skrive til disk",
"A PHP extension stopped the file upload" : "En PHP utvidelse stoppet når fil ble lastet opp", "A PHP extension stopped the file upload" : "En PHP utvidelse stoppet når fil ble lastet opp",
"No file uploaded or file size exceeds maximum of %s" : "Ingen fil lastet opp eller filen er større enn %s", "No file uploaded or file size exceeds maximum of %s" : "Ingen fil lastet opp eller filen er større enn %s",
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : "Denne kommentaren har enn %s tegn.\nLa til som vedlegg til kortet med navnet %s.\nTilgjengelig på URL: %s.",
"Card not found" : "Kort ikke funnet", "Card not found" : "Kort ikke funnet",
"Path is already shared with this card" : "Stien er allerede delt med dette kortet",
"Invalid date, date format must be YYYY-MM-DD" : "Feil dato, dato må være i formatet YYYY-MM-DD", "Invalid date, date format must be YYYY-MM-DD" : "Feil dato, dato må være i formatet YYYY-MM-DD",
"Personal planning and team project organization" : "Personlig planlegging og organisering av prosjekter i team",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in Markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your Markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Stokk er et kanban inspirert verktøy for organisering for personlig planlegging og prosjekt organisering for team integrert med Nextcloud.\n\n\n- 📥 Legg til oppgaver på kort og hold orden på disse.\n- 📄 Legg til notater.\n- 🔖 Tildel merke for enda bedre organisering.\n- 👥 Del med team, venner eller familile.\n- 📎 Legg ved filer som kan integreres i beskrivelser.\n- 💬 Diskuter med ditt team ved å bruke kommentarer.\n- ⚡ Hold oversikt over endringer i aktivitetsstrøm.\n- 🚀 Få dine prosjekt organisert.",
"Card details" : "Kort-detaljer",
"Add board" : "Legg til tavle", "Add board" : "Legg til tavle",
"Select the board to link to a project" : "Velg tavle som skal lenkes til prosjekt", "Select the board to link to a project" : "Velg tavle som skal lenkes til prosjekt",
"Search by board title" : "Søk på tittel på tavle",
"Select board" : "Velg tavle", "Select board" : "Velg tavle",
"Create a new card" : "Opprett et nytt kort",
"Select a board" : "Velg en tavle",
"Select a list" : "Velg en stabel",
"Card title" : "Kortittel",
"Cancel" : "Avbryt", "Cancel" : "Avbryt",
"Creating the new card …" : "Oppretter det nye kortet ...",
"Card \"{card}\" was added to \"{board}\"" : "Kort \"{card}\" ble lagt til i \"{board}\"",
"Open card" : "Åpne kort",
"Close" : "Lukk", "Close" : "Lukk",
"Create card" : "Opprett kort",
"Select a card" : "Velg et kort",
"Select the card to link to a project" : "Velg kort som skal lenkes til prosjekt",
"Link to card" : "Lenke til kort",
"File already exists" : "Filen finnes allerede", "File already exists" : "Filen finnes allerede",
"A file with the name {filename} already exists." : "En fil med navnet {filename} finnes allerede.",
"Do you want to overwrite it?" : "Vil du overskrive?", "Do you want to overwrite it?" : "Vil du overskrive?",
"Overwrite file" : "Overskriv fil",
"Keep existing file" : "Behold eksisterende fil",
"This board is read only" : "Denne tavlen er kun lesbar",
"Drop your files to upload" : "Dropp filer for å laste opp",
"Add card" : "Legg til kort", "Add card" : "Legg til kort",
"Archived cards" : "Arkiver tavle", "Archived cards" : "Arkiver tavle",
"Add list" : "Legg til liste", "Add list" : "Legg til liste",
"List name" : "Listenavn",
"Active filters" : "Aktivt filter",
"Apply filter" : "Aktiver filter",
"Filter by tag" : "Filtrer på knagg", "Filter by tag" : "Filtrer på knagg",
"Filter by assigned user" : "Filtrer på tildelt bruker", "Filter by assigned user" : "Filtrer på tildelt bruker",
"Unassigned" : "Ikke tildelt", "Unassigned" : "Ikke tildelt",
"Filter by due date" : "Filtrer på forfallsdato", "Filter by due date" : "Filtrer på forfallsdato",
"Overdue" : "Utløpt", "Overdue" : "Utløpt",
"Next 24 hours" : "Neste 24 timer",
"Next 7 days" : "Neste 7 dager", "Next 7 days" : "Neste 7 dager",
"Next 30 days" : "Neste 30 dager", "Next 30 days" : "Neste 30 dager",
"No due date" : "Ingen forfallsdato", "No due date" : "Ingen forfallsdato",
"Clear filter" : "Tøm filter",
"Hide archived cards" : "Skjul arkiverte kort", "Hide archived cards" : "Skjul arkiverte kort",
"Show archived cards" : "Vis arkiverkte kort", "Show archived cards" : "Vis arkiverkte kort",
"Toggle compact mode" : "Endre kompakt modus", "Toggle compact mode" : "Endre kompakt modus",
"Open details" : "Åpne detaljer",
"Details" : "Detaljer", "Details" : "Detaljer",
"Loading board" : "Laster tavle",
"No lists available" : "Ingen stabler tilgjengelig",
"Create a new list to add cards to this board" : "Lag en ny stabel for å legge til kort til denne tavlen",
"Board not found" : "Tavle ikke funnet",
"Sharing" : "Deling", "Sharing" : "Deling",
"Tags" : "Merkelapper", "Tags" : "Merkelapper",
"Deleted items" : "Slettede element", "Deleted items" : "Slettede element",
"Timeline" : "Tidslinje", "Timeline" : "Tidslinje",
"Deleted lists" : "Slettede stabler",
"Undo" : "Angre", "Undo" : "Angre",
"Deleted cards" : "Slettede kort", "Deleted cards" : "Slettede kort",
"Share board with a user, group or circle …" : "Del tavle med bruker, gruppe eller sirkel",
"Searching for users, groups and circles …" : "Søker etter brukere, grupper og sirkler ...",
"No participants found" : "Ingen deltakere funnet",
"Board owner" : "Tavle-eier",
"(Group)" : "(Gruppe)", "(Group)" : "(Gruppe)",
"(Circle)" : "(Sirkel)",
"Can edit" : "Kan redigere", "Can edit" : "Kan redigere",
"Can share" : "Kan dele", "Can share" : "Kan dele",
"Can manage" : "Kan behandle",
"Owner" : "Eier", "Owner" : "Eier",
"Delete" : "Slett", "Delete" : "Slett",
"Failed to create share with {displayName}" : "Klarte ikke å opprette deling med {displayName}",
"Are you sure you want to transfer the board {title} to {user}?" : "Er du sikker på at du vil overføre tavlen {title} til {user}?",
"Transfer the board." : "Overfør tavle.",
"Transfer" : "Overfør", "Transfer" : "Overfør",
"The board has been transferred to {user}" : "Tavlen har blitt overført til {user}",
"Failed to transfer the board to {user}" : "Klarte ikke overføre tavlen til {user}",
"Add a new list" : "Legg til en ny stabel",
"Archive all cards" : "Arkiver alle kort",
"Delete list" : "Slett listen", "Delete list" : "Slett listen",
"Archive all cards in this list" : "Arkiver alle kort i en stabel",
"Add a new card" : "Legg til nytt kort",
"Card name" : "Navn på kort",
"List deleted" : "Stabel slettet",
"Edit" : "Rediger", "Edit" : "Rediger",
"Add a new tag" : "Legg til nytt merke",
"title and color value must be provided" : "Du må oppgi verdier for tittel og farge",
"Board name" : "Navn på tavle",
"Members" : "Medlemmer", "Members" : "Medlemmer",
"Upload new files" : "Last opp nye filer",
"Share from Files" : "Del fra Filer",
"Pending share" : "Ventende deling",
"Add this attachment" : "Legg til vedlegg",
"Show in Files" : "Vis i Filer",
"Download" : "Last ned", "Download" : "Last ned",
"Remove attachment" : "Fjern vedlegg",
"Delete Attachment" : "Slett vedlegg",
"Restore Attachment" : "Gjenopprett vedlegg",
"File to share" : "Fil for deling",
"Invalid path selected" : "Ugyldig angitt sti", "Invalid path selected" : "Ugyldig angitt sti",
"Open in sidebar view" : "Åpne med sidepanel",
"Open in bigger view" : "Åpen i større visning",
"Attachments" : "Vedlegg", "Attachments" : "Vedlegg",
"Comments" : "Kommentarer", "Comments" : "Kommentarer",
"Modified" : "Endret", "Modified" : "Endret",
"Created" : "Opprettet", "Created" : "Opprettet",
"The title cannot be empty." : "Tittel kan ikke være tom",
"No comments yet. Begin the discussion!" : "Ingen kommentarer ennå. Start diskusjonen!",
"Failed to load comments" : "Feil i lasting av kommentarer",
"Assign a tag to this card…" : "Legg til et merke til dette kortet...",
"Assign to users" : "Tildel brukere",
"Assign to users/groups/circles" : "Tildel brukere/grupper/sirkler",
"Assign a user to this card…" : "Tildel bruker til dette kortet...",
"Due date" : "Forfallsdato", "Due date" : "Forfallsdato",
"Set a due date" : "Set forfallsdato",
"Remove due date" : "Fjern forfallsdato", "Remove due date" : "Fjern forfallsdato",
"Select Date" : "Velg dato", "Select Date" : "Velg dato",
"Today" : "I dag", "Today" : "I dag",
@@ -118,33 +224,89 @@
"Next week" : "Neste uke", "Next week" : "Neste uke",
"Next month" : "Neste måned", "Next month" : "Neste måned",
"Save" : "Lagre", "Save" : "Lagre",
"The comment cannot be empty." : "Kommentaren kan ikke være tom.",
"The comment cannot be longer than 1000 characters." : "Kommentaren kan ikke være lenger enn 1000 tegn.",
"In reply to" : "Som svar på",
"Cancel reply" : "Avbryt svar",
"Reply" : "Svar", "Reply" : "Svar",
"Update" : "Oppdater", "Update" : "Oppdater",
"Description" : "Beskrivelse", "Description" : "Beskrivelse",
"(Unsaved)" : "(Ikke lagret)",
"(Saving…)" : "(Lagrer...)",
"Formatting help" : "Formateringshjelp", "Formatting help" : "Formateringshjelp",
"Edit description" : "Rediger beskrivelse", "Edit description" : "Rediger beskrivelse",
"View description" : "Se beskrivelse",
"Add Attachment" : "Legg til vedlegg",
"Write a description …" : "Skriv en beskrivelse ...",
"Choose attachment" : "Velg vedlegg",
"(group)" : "(gruppe)", "(group)" : "(gruppe)",
"Todo items" : "Gjøremålspunkter",
"{count} comments, {unread} unread" : "{count} kommentarer, {unread} ulest",
"Edit card title" : "Rediger korttittel",
"Assign to me" : "Tildel meg",
"Unassign myself" : "Fjern meg fra tildeling",
"Move card" : "Flytt kort", "Move card" : "Flytt kort",
"Unarchive card" : "Hent kort fra arkiv", "Unarchive card" : "Hent kort fra arkiv",
"Archive card" : "Arkiver kort", "Archive card" : "Arkiver kort",
"Delete card" : "Slett kort", "Delete card" : "Slett kort",
"Move card to another board" : "Flytt kort til annen tavle",
"List is empty" : "Stabel er tom",
"Card deleted" : "Kort slettet",
"seconds ago" : "sekunder siden", "seconds ago" : "sekunder siden",
"All boards" : "Alle tabler",
"Archived boards" : "Arkiverte tavler", "Archived boards" : "Arkiverte tavler",
"Shared with you" : "Delt med deg", "Shared with you" : "Delt med deg",
"Deck settings" : "Innstillinger for Stokk",
"Use bigger card view" : "Bruk større visning på kort",
"Show boards in calendar/tasks" : "Vis tavler i kalender/oppgaver",
"Limit deck usage of groups" : "Begrens stokk-bruk til grupper",
"Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Begrensning av tavler vil hindre tilgang til de brukere som ikke er medlem av en gruppe fra å lage egne tavler. Bruker kan arbeide på de tavler som er delt med dem.", "Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Begrensning av tavler vil hindre tilgang til de brukere som ikke er medlem av en gruppe fra å lage egne tavler. Bruker kan arbeide på de tavler som er delt med dem.",
"Board details" : "Forumseksjonsdetaljer", "Board details" : "Forumseksjonsdetaljer",
"Edit board" : "Rediger tavle", "Edit board" : "Rediger tavle",
"Clone board" : "Klon tavle", "Clone board" : "Klon tavle",
"Unarchive board" : "Aktiver tavle", "Unarchive board" : "Aktiver tavle",
"Archive board" : "Arkiver tavle", "Archive board" : "Arkiver tavle",
"Turn on due date reminders" : "Skru på påminnelser for forfallsdato",
"Turn off due date reminders" : "Skru av påminnelser for forfallsdato",
"Due date reminders" : "Påminnelser for forfallsdato",
"All cards" : "Alle kort",
"Assigned cards" : "Tildelte kort",
"No notifications" : "Ingen varsler", "No notifications" : "Ingen varsler",
"Delete board" : "Slett tavle", "Delete board" : "Slett tavle",
"Board {0} deleted" : "Tavle {0} slettet",
"Only assigned cards" : "Kun tildelte kort",
"No reminder" : "Ingen varsel", "No reminder" : "Ingen varsel",
"An error occurred" : "En feil oppstod", "An error occurred" : "En feil oppstod",
"Are you sure you want to delete the board {title}? This will delete all the data of this board including archived cards." : "Are du sikker på sletting av tavlen {title}? Handlingen vil slette all data i denne tavlen, inkludert arkiverte kort.",
"Delete the board?" : "Slett tavlen?",
"Loading filtered view" : "Laster filtrert visning",
"No due" : "Ingen forfall",
"Search for {searchQuery} in all boards" : "Søk etter {searchQuery} i alle tavler",
"No results found" : "Ingen resultater funnet",
"{stack} in {board}" : "{stack} i {board}",
"Click to expand description" : "Klikk for å utvide beskrivelsen",
"* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Opprettet {created}\n* Sist endret {lastMod}\n* {nbAttachments} vedlegg\n* {nbComments} kommentarer",
"{nbCards} cards" : "{nbCards} kort",
"No upcoming cards" : "Ingen kommende kort",
"upcoming cards" : "kommende kort",
"Due on {date}" : "Utløper {date}",
"Link to a board" : "Lenke til tavle", "Link to a board" : "Lenke til tavle",
"Link to a card" : "Lenke til et kort",
"Create a card" : "Opprett kort",
"Message from {author} in {conversationName}" : "Melding fra {author} i {conversationName}",
"Something went wrong" : "Noe gikk galt",
"Failed to upload {name}" : "Klarte ikke laste opp {name}",
"Maximum file size of {size} exceeded" : "Maksimal størrelse for filer på {size} er overskredet", "Maximum file size of {size} exceeded" : "Maksimal størrelse for filer på {size} er overskredet",
"Error creating the share" : "Feil ved oppretting av deling",
"Share with a Deck card" : "Del med et Stokk-kort",
"Share {file} with a Deck card" : "Del {file} med et Stokk-kort",
"Share" : "Del", "Share" : "Del",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Stokk er et kanban inspirert verktøy for organisering for personlig planlegging og prosjekt organisering for team integrert med Nextcloud.\n\n\n- 📥 Legg til oppgaver på kort og hold orden på disse.\n- 📄 Legg til notater.\n- 🔖 Tildel merke for enda bedre organisering.\n- 👥 Del med team, venner eller familile.\n- 📎 Legg ved filer som kan integreres i beskrivelser.\n- 💬 Diskuter med ditt team ved å bruke kommentarer.\n- ⚡ Hold oversikt over endringer i aktivitetsstrøm.\n- 🚀 Få dine prosjekt organisert.", "Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Stokk er et kanban inspirert verktøy for organisering for personlig planlegging og prosjekt organisering for team integrert med Nextcloud.\n\n\n- 📥 Legg til oppgaver på kort og hold orden på disse.\n- 📄 Legg til notater.\n- 🔖 Tildel merke for enda bedre organisering.\n- 👥 Del med team, venner eller familile.\n- 📎 Legg ved filer som kan integreres i beskrivelser.\n- 💬 Diskuter med ditt team ved å bruke kommentarer.\n- ⚡ Hold oversikt over endringer i aktivitetsstrøm.\n- 🚀 Få dine prosjekt organisert.",
"This week" : "Denne uken" "Are you sure you want to transfer the board {title} for {user} ?" : "Er du sikker på at du vil overføre tavlen {title} for {user} ?",
"Transfer the board for {user} successfully" : "Tavlen ble overført for {user}",
"Failed to transfer the board for {user}" : "Klarte ikke overføre tavlen for {user}",
"Are you sure you want to delete the board {title}? This will delete all the data of this board." : "Er du sikker på sletting av tavlen {title}? Dette vil slette alt innholdet på denne tavlen.",
"This week" : "Denne uken",
"Are you sure you want to transfer the board {title} for {user}?" : "Er du sikker på at du vil overføre tavlen {title} for {user}?"
},"pluralForm" :"nplurals=2; plural=(n != 1);" },"pluralForm" :"nplurals=2; plural=(n != 1);"
} }

View File

@@ -183,8 +183,10 @@ OC.L10N.register(
"Failed to transfer the board to {user}" : "Nie udało się przenieść tablicy do {user}", "Failed to transfer the board to {user}" : "Nie udało się przenieść tablicy do {user}",
"Add a new list" : "Dodaj nową listę", "Add a new list" : "Dodaj nową listę",
"Archive all cards" : "Zarchiwizuj wszystkie karty", "Archive all cards" : "Zarchiwizuj wszystkie karty",
"Unarchive all cards" : "Przywróć wszystkie karty z archiwum",
"Delete list" : "Usuń listę", "Delete list" : "Usuń listę",
"Archive all cards in this list" : "Zarchiwizuj wszystkie karty na tej liście", "Archive all cards in this list" : "Zarchiwizuj wszystkie karty na tej liście",
"Unarchive all cards in this list" : "Cofnij archiwizację wszystkich kart z tej listy",
"Add a new card" : "Dodaj nową kartę", "Add a new card" : "Dodaj nową kartę",
"Card name" : "Nazwa karty", "Card name" : "Nazwa karty",
"List deleted" : "Lista usunięta", "List deleted" : "Lista usunięta",
@@ -260,6 +262,7 @@ OC.L10N.register(
"Shared with you" : "Udostępnione Tobie", "Shared with you" : "Udostępnione Tobie",
"Deck settings" : "Ustawienia Tablicy", "Deck settings" : "Ustawienia Tablicy",
"Use bigger card view" : "Użyj większego widoku karty", "Use bigger card view" : "Użyj większego widoku karty",
"Show card ID badge" : "Pokaż ID karty",
"Show boards in calendar/tasks" : "Pokaż tablice w kalendarzu/zadaniach", "Show boards in calendar/tasks" : "Pokaż tablice w kalendarzu/zadaniach",
"Limit deck usage of groups" : "Ogranicz użycie tablic dla grup", "Limit deck usage of groups" : "Ogranicz użycie tablic dla grup",
"Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Ograniczenie Tablicy zablokuje użytkownikom z tych grup możliwość tworzenia własnych tablic. Użytkownicy nadal będą mogli pracować na tablicach, które zostały im udostępnione.", "Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Ograniczenie Tablicy zablokuje użytkownikom z tych grup możliwość tworzenia własnych tablic. Użytkownicy nadal będą mogli pracować na tablicach, które zostały im udostępnione.",
@@ -286,6 +289,7 @@ OC.L10N.register(
"Search for {searchQuery} in all boards" : "Wyszukaj dla {searchQuery} na wszystkich tablicach", "Search for {searchQuery} in all boards" : "Wyszukaj dla {searchQuery} na wszystkich tablicach",
"No results found" : "Nie znaleziono wyników", "No results found" : "Nie znaleziono wyników",
"{stack} in {board}" : "{stack} na {board}", "{stack} in {board}" : "{stack} na {board}",
"Click to expand description" : "Kliknij, aby rozwinąć opis",
"* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Utworzono {created}\n* Ostatnia modyfikacja {lastMod}\n* Załączniki {nbAttachments}\n* Komentarze {nbComments}", "* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Utworzono {created}\n* Ostatnia modyfikacja {lastMod}\n* Załączniki {nbAttachments}\n* Komentarze {nbComments}",
"{nbCards} cards" : "Karty {nbCards}", "{nbCards} cards" : "Karty {nbCards}",
"No upcoming cards" : "Brak nadchodzących kart", "No upcoming cards" : "Brak nadchodzących kart",

View File

@@ -181,8 +181,10 @@
"Failed to transfer the board to {user}" : "Nie udało się przenieść tablicy do {user}", "Failed to transfer the board to {user}" : "Nie udało się przenieść tablicy do {user}",
"Add a new list" : "Dodaj nową listę", "Add a new list" : "Dodaj nową listę",
"Archive all cards" : "Zarchiwizuj wszystkie karty", "Archive all cards" : "Zarchiwizuj wszystkie karty",
"Unarchive all cards" : "Przywróć wszystkie karty z archiwum",
"Delete list" : "Usuń listę", "Delete list" : "Usuń listę",
"Archive all cards in this list" : "Zarchiwizuj wszystkie karty na tej liście", "Archive all cards in this list" : "Zarchiwizuj wszystkie karty na tej liście",
"Unarchive all cards in this list" : "Cofnij archiwizację wszystkich kart z tej listy",
"Add a new card" : "Dodaj nową kartę", "Add a new card" : "Dodaj nową kartę",
"Card name" : "Nazwa karty", "Card name" : "Nazwa karty",
"List deleted" : "Lista usunięta", "List deleted" : "Lista usunięta",
@@ -258,6 +260,7 @@
"Shared with you" : "Udostępnione Tobie", "Shared with you" : "Udostępnione Tobie",
"Deck settings" : "Ustawienia Tablicy", "Deck settings" : "Ustawienia Tablicy",
"Use bigger card view" : "Użyj większego widoku karty", "Use bigger card view" : "Użyj większego widoku karty",
"Show card ID badge" : "Pokaż ID karty",
"Show boards in calendar/tasks" : "Pokaż tablice w kalendarzu/zadaniach", "Show boards in calendar/tasks" : "Pokaż tablice w kalendarzu/zadaniach",
"Limit deck usage of groups" : "Ogranicz użycie tablic dla grup", "Limit deck usage of groups" : "Ogranicz użycie tablic dla grup",
"Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Ograniczenie Tablicy zablokuje użytkownikom z tych grup możliwość tworzenia własnych tablic. Użytkownicy nadal będą mogli pracować na tablicach, które zostały im udostępnione.", "Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Ograniczenie Tablicy zablokuje użytkownikom z tych grup możliwość tworzenia własnych tablic. Użytkownicy nadal będą mogli pracować na tablicach, które zostały im udostępnione.",
@@ -284,6 +287,7 @@
"Search for {searchQuery} in all boards" : "Wyszukaj dla {searchQuery} na wszystkich tablicach", "Search for {searchQuery} in all boards" : "Wyszukaj dla {searchQuery} na wszystkich tablicach",
"No results found" : "Nie znaleziono wyników", "No results found" : "Nie znaleziono wyników",
"{stack} in {board}" : "{stack} na {board}", "{stack} in {board}" : "{stack} na {board}",
"Click to expand description" : "Kliknij, aby rozwinąć opis",
"* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Utworzono {created}\n* Ostatnia modyfikacja {lastMod}\n* Załączniki {nbAttachments}\n* Komentarze {nbComments}", "* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Utworzono {created}\n* Ostatnia modyfikacja {lastMod}\n* Załączniki {nbAttachments}\n* Komentarze {nbComments}",
"{nbCards} cards" : "Karty {nbCards}", "{nbCards} cards" : "Karty {nbCards}",
"No upcoming cards" : "Brak nadchodzących kart", "No upcoming cards" : "Brak nadchodzących kart",

View File

@@ -286,6 +286,7 @@ OC.L10N.register(
"Search for {searchQuery} in all boards" : "Pesquisar por {searchQuery} em todos os painéis", "Search for {searchQuery} in all boards" : "Pesquisar por {searchQuery} em todos os painéis",
"No results found" : "Nenhum resultado encontrado", "No results found" : "Nenhum resultado encontrado",
"{stack} in {board}" : "{stack} de {board}", "{stack} in {board}" : "{stack} de {board}",
"Click to expand description" : "Clique para expandir a descrição",
"* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Criado em {created}\n* Última modificação em {lastMod}\n* {nbAttachments} anexos\n* {nbComments} comentários", "* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Criado em {created}\n* Última modificação em {lastMod}\n* {nbAttachments} anexos\n* {nbComments} comentários",
"{nbCards} cards" : "{nbCards} cartões", "{nbCards} cards" : "{nbCards} cartões",
"No upcoming cards" : "Não há mais cartões", "No upcoming cards" : "Não há mais cartões",

View File

@@ -284,6 +284,7 @@
"Search for {searchQuery} in all boards" : "Pesquisar por {searchQuery} em todos os painéis", "Search for {searchQuery} in all boards" : "Pesquisar por {searchQuery} em todos os painéis",
"No results found" : "Nenhum resultado encontrado", "No results found" : "Nenhum resultado encontrado",
"{stack} in {board}" : "{stack} de {board}", "{stack} in {board}" : "{stack} de {board}",
"Click to expand description" : "Clique para expandir a descrição",
"* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Criado em {created}\n* Última modificação em {lastMod}\n* {nbAttachments} anexos\n* {nbComments} comentários", "* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Criado em {created}\n* Última modificação em {lastMod}\n* {nbAttachments} anexos\n* {nbComments} comentários",
"{nbCards} cards" : "{nbCards} cartões", "{nbCards} cards" : "{nbCards} cartões",
"No upcoming cards" : "Não há mais cartões", "No upcoming cards" : "Não há mais cartões",

View File

@@ -176,11 +176,17 @@ OC.L10N.register(
"Owner" : "Vlastník", "Owner" : "Vlastník",
"Delete" : "Zmazať", "Delete" : "Zmazať",
"Failed to create share with {displayName}" : "Nepodarilo sa vytvoriť sprístupnenie pre {displayName}", "Failed to create share with {displayName}" : "Nepodarilo sa vytvoriť sprístupnenie pre {displayName}",
"Are you sure you want to transfer the board {title} to {user}?" : "Naozaj chcete preniesť nástenku {title} na užívateľa {user}?",
"Transfer the board." : "Prenos nástenky.",
"Transfer" : "Prenos", "Transfer" : "Prenos",
"The board has been transferred to {user}" : "Nástenka bola presunutá na {user}",
"Failed to transfer the board to {user}" : "Chyba pri presune nástenky na {user}",
"Add a new list" : "Pridať nový zoznam", "Add a new list" : "Pridať nový zoznam",
"Archive all cards" : "Archivovať všetky karty", "Archive all cards" : "Archivovať všetky karty",
"Unarchive all cards" : "Zrušiť archiváciu všetkých kariet",
"Delete list" : "Vymazať zoznam", "Delete list" : "Vymazať zoznam",
"Archive all cards in this list" : "Archivovať všetky karty v tomto zozname", "Archive all cards in this list" : "Archivovať všetky karty v tomto zozname",
"Unarchive all cards in this list" : "Zrušiť archiváciu všetkých kariet v tomto zozname",
"Add a new card" : "Pridať novú kartu", "Add a new card" : "Pridať novú kartu",
"Card name" : "Názov karty", "Card name" : "Názov karty",
"List deleted" : "Zoznam bol vymazaný", "List deleted" : "Zoznam bol vymazaný",
@@ -238,7 +244,9 @@ OC.L10N.register(
"Write a description …" : "Napíšte popis...", "Write a description …" : "Napíšte popis...",
"Choose attachment" : "Vybrať prílohu", "Choose attachment" : "Vybrať prílohu",
"(group)" : "(skupina)", "(group)" : "(skupina)",
"Todo items" : "Položky úloh",
"{count} comments, {unread} unread" : "{count} komentárov, {unread} neprečítaných", "{count} comments, {unread} unread" : "{count} komentárov, {unread} neprečítaných",
"Edit card title" : "Upraviť názov karty",
"Assign to me" : "Priradiť mne", "Assign to me" : "Priradiť mne",
"Unassign myself" : "Zrušiť priradenie mne", "Unassign myself" : "Zrušiť priradenie mne",
"Move card" : "Presunúť kartu", "Move card" : "Presunúť kartu",
@@ -252,7 +260,9 @@ OC.L10N.register(
"All boards" : "Všetky nástenky", "All boards" : "Všetky nástenky",
"Archived boards" : "Archivované nástenky", "Archived boards" : "Archivované nástenky",
"Shared with you" : "Vám sprístupnené", "Shared with you" : "Vám sprístupnené",
"Deck settings" : "Nastavenia paluby",
"Use bigger card view" : "Použiť väčšie zobrazenie karty", "Use bigger card view" : "Použiť väčšie zobrazenie karty",
"Show card ID badge" : "Ukázať ID karty",
"Show boards in calendar/tasks" : "Zobrazovať nástenky v kalendári/úlohách", "Show boards in calendar/tasks" : "Zobrazovať nástenky v kalendári/úlohách",
"Limit deck usage of groups" : "Obmedziť použitie Deck na skupiny", "Limit deck usage of groups" : "Obmedziť použitie Deck na skupiny",
"Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Obmedzenie Násteniek bráni používateľom, ktorí nie sú súčasťou týchto skupín, aby si vytvárali vlastné nástenky. Môžu však stále pracovať na nástenkách, ktoré im niekto sprístupní.", "Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Obmedzenie Násteniek bráni používateľom, ktorí nie sú súčasťou týchto skupín, aby si vytvárali vlastné nástenky. Môžu však stále pracovať na nástenkách, ktoré im niekto sprístupní.",
@@ -272,14 +282,19 @@ OC.L10N.register(
"Only assigned cards" : "Len priradené karty", "Only assigned cards" : "Len priradené karty",
"No reminder" : "Žiadna pripomienka", "No reminder" : "Žiadna pripomienka",
"An error occurred" : "Vyskytla sa chyba", "An error occurred" : "Vyskytla sa chyba",
"Are you sure you want to delete the board {title}? This will delete all the data of this board including archived cards." : "Naozaj chcete chcete vymazať nástenku {title}? Toto zmaže všetky údaje o tejto nástenke vrátane archivovaných kariet.",
"Delete the board?" : "Vymazať nástenku?", "Delete the board?" : "Vymazať nástenku?",
"Loading filtered view" : "Načítavanie filtrovaného pohľadu", "Loading filtered view" : "Načítavanie filtrovaného pohľadu",
"No due" : "Žiadny termín dokončenia", "No due" : "Žiadny termín dokončenia",
"Search for {searchQuery} in all boards" : "Vyhľadať {searchQuery} na všetkých plochách", "Search for {searchQuery} in all boards" : "Vyhľadať {searchQuery} na všetkých plochách",
"No results found" : "Neboli nájdené žiadne výsledky", "No results found" : "Neboli nájdené žiadne výsledky",
"{stack} in {board}" : "{stack} v {board}", "{stack} in {board}" : "{stack} v {board}",
"Click to expand description" : "Kliknite pre rozšírenie popisu",
"* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Vytvorené dňa {created}\n* Naposledy upravené {lastMod}\n* {nbAttachments} príloh\n* Komentáre: {nbComments}",
"{nbCards} cards" : "{nbCards} kariet",
"No upcoming cards" : "Žiadne nadchádzajúce karty", "No upcoming cards" : "Žiadne nadchádzajúce karty",
"upcoming cards" : "nadchádzajúce karty", "upcoming cards" : "nadchádzajúce karty",
"Due on {date}" : "Platné do {date}",
"Link to a board" : "Odkaz na nástenku", "Link to a board" : "Odkaz na nástenku",
"Link to a card" : "Prepojiť s kartou", "Link to a card" : "Prepojiť s kartou",
"Create a card" : "Vytvoriť kartu", "Create a card" : "Vytvoriť kartu",
@@ -292,7 +307,11 @@ OC.L10N.register(
"Share {file} with a Deck card" : "Zdieľať {file} s kartou Deck", "Share {file} with a Deck card" : "Zdieľať {file} s kartou Deck",
"Share" : "Zdieľať", "Share" : "Zdieľať",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Karty sú nástroj zacielený na osobné alebo projektové plánovanie tímov v štýle Kanban integrovaný do Nextcloud.\n\n\n- 📥 Zadávajte a usporadúvajte svoje úlohy do kariet\n- 📄 Zapisujte si dodatočné poznámky\n- 🔖 Priraďujte štítky pre ešte lepšiu organizáciu\n- 👥 Zdieľajte so svojim tímom, priateľmi alebo rodinou\n- 🚀 Dostaňte svoj projekt pod kontrolu", "Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Karty sú nástroj zacielený na osobné alebo projektové plánovanie tímov v štýle Kanban integrovaný do Nextcloud.\n\n\n- 📥 Zadávajte a usporadúvajte svoje úlohy do kariet\n- 📄 Zapisujte si dodatočné poznámky\n- 🔖 Priraďujte štítky pre ešte lepšiu organizáciu\n- 👥 Zdieľajte so svojim tímom, priateľmi alebo rodinou\n- 🚀 Dostaňte svoj projekt pod kontrolu",
"Are you sure you want to transfer the board {title} for {user} ?" : "Naozaj chcete preniesť nástenku {title} na užívateľa {user} ?",
"Transfer the board for {user} successfully" : "Presun nástenky na {user} bolo úspešné",
"Failed to transfer the board for {user}" : "Chyba pri presune nástenky na {user}",
"Are you sure you want to delete the board {title}? This will delete all the data of this board." : "Naozaj chcete chcete vymazať nástenku {title}? Toto zmaže všetky údaje o tejto nástenke.", "Are you sure you want to delete the board {title}? This will delete all the data of this board." : "Naozaj chcete chcete vymazať nástenku {title}? Toto zmaže všetky údaje o tejto nástenke.",
"This week" : "Tento týždeň" "This week" : "Tento týždeň",
"Are you sure you want to transfer the board {title} for {user}?" : "Naozaj chcete preniesť nástenku {title} na užívateľa {user}?"
}, },
"nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);"); "nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);");

View File

@@ -174,11 +174,17 @@
"Owner" : "Vlastník", "Owner" : "Vlastník",
"Delete" : "Zmazať", "Delete" : "Zmazať",
"Failed to create share with {displayName}" : "Nepodarilo sa vytvoriť sprístupnenie pre {displayName}", "Failed to create share with {displayName}" : "Nepodarilo sa vytvoriť sprístupnenie pre {displayName}",
"Are you sure you want to transfer the board {title} to {user}?" : "Naozaj chcete preniesť nástenku {title} na užívateľa {user}?",
"Transfer the board." : "Prenos nástenky.",
"Transfer" : "Prenos", "Transfer" : "Prenos",
"The board has been transferred to {user}" : "Nástenka bola presunutá na {user}",
"Failed to transfer the board to {user}" : "Chyba pri presune nástenky na {user}",
"Add a new list" : "Pridať nový zoznam", "Add a new list" : "Pridať nový zoznam",
"Archive all cards" : "Archivovať všetky karty", "Archive all cards" : "Archivovať všetky karty",
"Unarchive all cards" : "Zrušiť archiváciu všetkých kariet",
"Delete list" : "Vymazať zoznam", "Delete list" : "Vymazať zoznam",
"Archive all cards in this list" : "Archivovať všetky karty v tomto zozname", "Archive all cards in this list" : "Archivovať všetky karty v tomto zozname",
"Unarchive all cards in this list" : "Zrušiť archiváciu všetkých kariet v tomto zozname",
"Add a new card" : "Pridať novú kartu", "Add a new card" : "Pridať novú kartu",
"Card name" : "Názov karty", "Card name" : "Názov karty",
"List deleted" : "Zoznam bol vymazaný", "List deleted" : "Zoznam bol vymazaný",
@@ -236,7 +242,9 @@
"Write a description …" : "Napíšte popis...", "Write a description …" : "Napíšte popis...",
"Choose attachment" : "Vybrať prílohu", "Choose attachment" : "Vybrať prílohu",
"(group)" : "(skupina)", "(group)" : "(skupina)",
"Todo items" : "Položky úloh",
"{count} comments, {unread} unread" : "{count} komentárov, {unread} neprečítaných", "{count} comments, {unread} unread" : "{count} komentárov, {unread} neprečítaných",
"Edit card title" : "Upraviť názov karty",
"Assign to me" : "Priradiť mne", "Assign to me" : "Priradiť mne",
"Unassign myself" : "Zrušiť priradenie mne", "Unassign myself" : "Zrušiť priradenie mne",
"Move card" : "Presunúť kartu", "Move card" : "Presunúť kartu",
@@ -250,7 +258,9 @@
"All boards" : "Všetky nástenky", "All boards" : "Všetky nástenky",
"Archived boards" : "Archivované nástenky", "Archived boards" : "Archivované nástenky",
"Shared with you" : "Vám sprístupnené", "Shared with you" : "Vám sprístupnené",
"Deck settings" : "Nastavenia paluby",
"Use bigger card view" : "Použiť väčšie zobrazenie karty", "Use bigger card view" : "Použiť väčšie zobrazenie karty",
"Show card ID badge" : "Ukázať ID karty",
"Show boards in calendar/tasks" : "Zobrazovať nástenky v kalendári/úlohách", "Show boards in calendar/tasks" : "Zobrazovať nástenky v kalendári/úlohách",
"Limit deck usage of groups" : "Obmedziť použitie Deck na skupiny", "Limit deck usage of groups" : "Obmedziť použitie Deck na skupiny",
"Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Obmedzenie Násteniek bráni používateľom, ktorí nie sú súčasťou týchto skupín, aby si vytvárali vlastné nástenky. Môžu však stále pracovať na nástenkách, ktoré im niekto sprístupní.", "Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Obmedzenie Násteniek bráni používateľom, ktorí nie sú súčasťou týchto skupín, aby si vytvárali vlastné nástenky. Môžu však stále pracovať na nástenkách, ktoré im niekto sprístupní.",
@@ -270,14 +280,19 @@
"Only assigned cards" : "Len priradené karty", "Only assigned cards" : "Len priradené karty",
"No reminder" : "Žiadna pripomienka", "No reminder" : "Žiadna pripomienka",
"An error occurred" : "Vyskytla sa chyba", "An error occurred" : "Vyskytla sa chyba",
"Are you sure you want to delete the board {title}? This will delete all the data of this board including archived cards." : "Naozaj chcete chcete vymazať nástenku {title}? Toto zmaže všetky údaje o tejto nástenke vrátane archivovaných kariet.",
"Delete the board?" : "Vymazať nástenku?", "Delete the board?" : "Vymazať nástenku?",
"Loading filtered view" : "Načítavanie filtrovaného pohľadu", "Loading filtered view" : "Načítavanie filtrovaného pohľadu",
"No due" : "Žiadny termín dokončenia", "No due" : "Žiadny termín dokončenia",
"Search for {searchQuery} in all boards" : "Vyhľadať {searchQuery} na všetkých plochách", "Search for {searchQuery} in all boards" : "Vyhľadať {searchQuery} na všetkých plochách",
"No results found" : "Neboli nájdené žiadne výsledky", "No results found" : "Neboli nájdené žiadne výsledky",
"{stack} in {board}" : "{stack} v {board}", "{stack} in {board}" : "{stack} v {board}",
"Click to expand description" : "Kliknite pre rozšírenie popisu",
"* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Vytvorené dňa {created}\n* Naposledy upravené {lastMod}\n* {nbAttachments} príloh\n* Komentáre: {nbComments}",
"{nbCards} cards" : "{nbCards} kariet",
"No upcoming cards" : "Žiadne nadchádzajúce karty", "No upcoming cards" : "Žiadne nadchádzajúce karty",
"upcoming cards" : "nadchádzajúce karty", "upcoming cards" : "nadchádzajúce karty",
"Due on {date}" : "Platné do {date}",
"Link to a board" : "Odkaz na nástenku", "Link to a board" : "Odkaz na nástenku",
"Link to a card" : "Prepojiť s kartou", "Link to a card" : "Prepojiť s kartou",
"Create a card" : "Vytvoriť kartu", "Create a card" : "Vytvoriť kartu",
@@ -290,7 +305,11 @@
"Share {file} with a Deck card" : "Zdieľať {file} s kartou Deck", "Share {file} with a Deck card" : "Zdieľať {file} s kartou Deck",
"Share" : "Zdieľať", "Share" : "Zdieľať",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Karty sú nástroj zacielený na osobné alebo projektové plánovanie tímov v štýle Kanban integrovaný do Nextcloud.\n\n\n- 📥 Zadávajte a usporadúvajte svoje úlohy do kariet\n- 📄 Zapisujte si dodatočné poznámky\n- 🔖 Priraďujte štítky pre ešte lepšiu organizáciu\n- 👥 Zdieľajte so svojim tímom, priateľmi alebo rodinou\n- 🚀 Dostaňte svoj projekt pod kontrolu", "Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Karty sú nástroj zacielený na osobné alebo projektové plánovanie tímov v štýle Kanban integrovaný do Nextcloud.\n\n\n- 📥 Zadávajte a usporadúvajte svoje úlohy do kariet\n- 📄 Zapisujte si dodatočné poznámky\n- 🔖 Priraďujte štítky pre ešte lepšiu organizáciu\n- 👥 Zdieľajte so svojim tímom, priateľmi alebo rodinou\n- 🚀 Dostaňte svoj projekt pod kontrolu",
"Are you sure you want to transfer the board {title} for {user} ?" : "Naozaj chcete preniesť nástenku {title} na užívateľa {user} ?",
"Transfer the board for {user} successfully" : "Presun nástenky na {user} bolo úspešné",
"Failed to transfer the board for {user}" : "Chyba pri presune nástenky na {user}",
"Are you sure you want to delete the board {title}? This will delete all the data of this board." : "Naozaj chcete chcete vymazať nástenku {title}? Toto zmaže všetky údaje o tejto nástenke.", "Are you sure you want to delete the board {title}? This will delete all the data of this board." : "Naozaj chcete chcete vymazať nástenku {title}? Toto zmaže všetky údaje o tejto nástenke.",
"This week" : "Tento týždeň" "This week" : "Tento týždeň",
"Are you sure you want to transfer the board {title} for {user}?" : "Naozaj chcete preniesť nástenku {title} na užívateľa {user}?"
},"pluralForm" :"nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);" },"pluralForm" :"nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);"
} }

View File

@@ -136,6 +136,7 @@ OC.L10N.register(
"Archived cards" : "Arkiverade kort", "Archived cards" : "Arkiverade kort",
"Add list" : "Lägg till lista...", "Add list" : "Lägg till lista...",
"List name" : "Namn på lista", "List name" : "Namn på lista",
"Active filters" : "Aktiva filter",
"Apply filter" : "Tillämpa filter", "Apply filter" : "Tillämpa filter",
"Filter by tag" : "Filtrera efter tagg", "Filter by tag" : "Filtrera efter tagg",
"Filter by assigned user" : "Filtrera efter tilldelad användare", "Filter by assigned user" : "Filtrera efter tilldelad användare",
@@ -175,11 +176,17 @@ OC.L10N.register(
"Owner" : "Ägare", "Owner" : "Ägare",
"Delete" : "Ta bort", "Delete" : "Ta bort",
"Failed to create share with {displayName}" : "Kunde inte skapa delning med {displayName}", "Failed to create share with {displayName}" : "Kunde inte skapa delning med {displayName}",
"Are you sure you want to transfer the board {title} to {user}?" : "Är du säker att du vill överföra tavlan {title} till {user}?",
"Transfer the board." : "Överför tavlan.",
"Transfer" : "Överför", "Transfer" : "Överför",
"The board has been transferred to {user}" : "Tavlan har överförts till {user}",
"Failed to transfer the board to {user}" : "Kunde inte överföra tavlan till {user}",
"Add a new list" : "Lägg till en ny lista", "Add a new list" : "Lägg till en ny lista",
"Archive all cards" : "Arkivera alla kort", "Archive all cards" : "Arkivera alla kort",
"Unarchive all cards" : "Ta ut alla kort ur arkivet",
"Delete list" : "Ta bort lista", "Delete list" : "Ta bort lista",
"Archive all cards in this list" : "Arkivera alla kort i denna lista", "Archive all cards in this list" : "Arkivera alla kort i denna lista",
"Unarchive all cards in this list" : "Ta ut alla kort i denna lista ur arkivet",
"Add a new card" : "Lägg till ett nytt kort", "Add a new card" : "Lägg till ett nytt kort",
"Card name" : "Kortets namn", "Card name" : "Kortets namn",
"List deleted" : "Listan har raderats", "List deleted" : "Listan har raderats",
@@ -237,7 +244,9 @@ OC.L10N.register(
"Write a description …" : "Ange en beskrivning ...", "Write a description …" : "Ange en beskrivning ...",
"Choose attachment" : "Välj bilaga", "Choose attachment" : "Välj bilaga",
"(group)" : " (grupp)", "(group)" : " (grupp)",
"Todo items" : "Todo saker",
"{count} comments, {unread} unread" : "{count} kommentarer, {unread} olästa", "{count} comments, {unread} unread" : "{count} kommentarer, {unread} olästa",
"Edit card title" : "Ändra korttitel",
"Assign to me" : "Tilldela till mig", "Assign to me" : "Tilldela till mig",
"Unassign myself" : "Ta bort från mig själv", "Unassign myself" : "Ta bort från mig själv",
"Move card" : "Flytta kort", "Move card" : "Flytta kort",
@@ -251,7 +260,9 @@ OC.L10N.register(
"All boards" : "Alla tavlor", "All boards" : "Alla tavlor",
"Archived boards" : "Arkiverade tavlor", "Archived boards" : "Arkiverade tavlor",
"Shared with you" : "Delad med dig", "Shared with you" : "Delad med dig",
"Deck settings" : "Deck-inställningar",
"Use bigger card view" : "Visa större kort", "Use bigger card view" : "Visa större kort",
"Show card ID badge" : "Visa kortets ID-märke",
"Show boards in calendar/tasks" : "Visa tavlor i kalender / uppgifter", "Show boards in calendar/tasks" : "Visa tavlor i kalender / uppgifter",
"Limit deck usage of groups" : "Begränsa användningen av grupper", "Limit deck usage of groups" : "Begränsa användningen av grupper",
"Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Begränsning av Deck blockerar användare som inte ingår i dessa grupper från att skapa egna tavlor. Användare kan dock fortfarande integrera med tavlor som har delats med dem.", "Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Begränsning av Deck blockerar användare som inte ingår i dessa grupper från att skapa egna tavlor. Användare kan dock fortfarande integrera med tavlor som har delats med dem.",
@@ -271,13 +282,19 @@ OC.L10N.register(
"Only assigned cards" : "Bara tilldelade kort", "Only assigned cards" : "Bara tilldelade kort",
"No reminder" : "Ingen påminnelse", "No reminder" : "Ingen påminnelse",
"An error occurred" : "Ett fel uppstod", "An error occurred" : "Ett fel uppstod",
"Are you sure you want to delete the board {title}? This will delete all the data of this board including archived cards." : "Är du säker på att du vill radera brädet {title}? Detta kommer radera all data som tillhör brädet inklusive arkiverade kort.",
"Delete the board?" : "Ta bort tavlan?", "Delete the board?" : "Ta bort tavlan?",
"Loading filtered view" : "Laddar filtrerad vy", "Loading filtered view" : "Laddar filtrerad vy",
"No due" : "Inget slut", "No due" : "Inget slut",
"Search for {searchQuery} in all boards" : "Sök efter {searchQuery} i alla tavlor", "Search for {searchQuery} in all boards" : "Sök efter {searchQuery} i alla tavlor",
"No results found" : "Inga resultat funna", "No results found" : "Inga resultat funna",
"{stack} in {board}" : "{stack} i {board}",
"Click to expand description" : "Klicka för att utöka beskrivningen",
"* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Skapades {created}\n* Ändrades senast {lastMod}\n* {nbAttachments} bilagor\n* {nbComments} kommentarer",
"{nbCards} cards" : "{nbCards} kort",
"No upcoming cards" : "Inga kommande kort", "No upcoming cards" : "Inga kommande kort",
"upcoming cards" : "kommande kort", "upcoming cards" : "kommande kort",
"Due on {date}" : "Går ut {date}",
"Link to a board" : "Länka till en tavla", "Link to a board" : "Länka till en tavla",
"Link to a card" : "Länka till ett kort", "Link to a card" : "Länka till ett kort",
"Create a card" : "Skapa ett kort", "Create a card" : "Skapa ett kort",
@@ -290,7 +307,11 @@ OC.L10N.register(
"Share {file} with a Deck card" : "Dela {file} med ett Deck-kort", "Share {file} with a Deck card" : "Dela {file} med ett Deck-kort",
"Share" : "Dela", "Share" : "Dela",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck är en kanban-liknande projekt- och organiseringsapp för arbetsgrupper i Nextcloud.\n\n\n- 📥 Lägg till uppgifter på kort och ordna dem\n- 📄 Skriv anteckningar i markdown\n- 🔖 Tilldela etiketter för organisering\n- 👥 Dela med arbetsgruppen, vänner eller familj\n- 📎 Bifoga filer och bädda in dem i markdown-anteckningarna\n- 💬 Diskutera i arbetsgruppen genom kommentarer\n- ⚡ Håll koll på ändringar i aktivitetsflödet\n- 🚀 Börja organisera din arbetsgrupp nu!", "Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck är en kanban-liknande projekt- och organiseringsapp för arbetsgrupper i Nextcloud.\n\n\n- 📥 Lägg till uppgifter på kort och ordna dem\n- 📄 Skriv anteckningar i markdown\n- 🔖 Tilldela etiketter för organisering\n- 👥 Dela med arbetsgruppen, vänner eller familj\n- 📎 Bifoga filer och bädda in dem i markdown-anteckningarna\n- 💬 Diskutera i arbetsgruppen genom kommentarer\n- ⚡ Håll koll på ändringar i aktivitetsflödet\n- 🚀 Börja organisera din arbetsgrupp nu!",
"Are you sure you want to transfer the board {title} for {user} ?" : "Är du säker på att du vill överföra brädet {title} för {user}?",
"Transfer the board for {user} successfully" : "Överförde brädet för {user}",
"Failed to transfer the board for {user}" : "Misslyckades med att överföra brädet för {user}",
"Are you sure you want to delete the board {title}? This will delete all the data of this board." : "Är du säker på att du vill radera tavla {title}? Detta kommer att radera all information från denna tavla.", "Are you sure you want to delete the board {title}? This will delete all the data of this board." : "Är du säker på att du vill radera tavla {title}? Detta kommer att radera all information från denna tavla.",
"This week" : "Denna vecka" "This week" : "Denna vecka",
"Are you sure you want to transfer the board {title} for {user}?" : "Är du säker på att du vill överföra brädet {title} för {user}?"
}, },
"nplurals=2; plural=(n != 1);"); "nplurals=2; plural=(n != 1);");

View File

@@ -134,6 +134,7 @@
"Archived cards" : "Arkiverade kort", "Archived cards" : "Arkiverade kort",
"Add list" : "Lägg till lista...", "Add list" : "Lägg till lista...",
"List name" : "Namn på lista", "List name" : "Namn på lista",
"Active filters" : "Aktiva filter",
"Apply filter" : "Tillämpa filter", "Apply filter" : "Tillämpa filter",
"Filter by tag" : "Filtrera efter tagg", "Filter by tag" : "Filtrera efter tagg",
"Filter by assigned user" : "Filtrera efter tilldelad användare", "Filter by assigned user" : "Filtrera efter tilldelad användare",
@@ -173,11 +174,17 @@
"Owner" : "Ägare", "Owner" : "Ägare",
"Delete" : "Ta bort", "Delete" : "Ta bort",
"Failed to create share with {displayName}" : "Kunde inte skapa delning med {displayName}", "Failed to create share with {displayName}" : "Kunde inte skapa delning med {displayName}",
"Are you sure you want to transfer the board {title} to {user}?" : "Är du säker att du vill överföra tavlan {title} till {user}?",
"Transfer the board." : "Överför tavlan.",
"Transfer" : "Överför", "Transfer" : "Överför",
"The board has been transferred to {user}" : "Tavlan har överförts till {user}",
"Failed to transfer the board to {user}" : "Kunde inte överföra tavlan till {user}",
"Add a new list" : "Lägg till en ny lista", "Add a new list" : "Lägg till en ny lista",
"Archive all cards" : "Arkivera alla kort", "Archive all cards" : "Arkivera alla kort",
"Unarchive all cards" : "Ta ut alla kort ur arkivet",
"Delete list" : "Ta bort lista", "Delete list" : "Ta bort lista",
"Archive all cards in this list" : "Arkivera alla kort i denna lista", "Archive all cards in this list" : "Arkivera alla kort i denna lista",
"Unarchive all cards in this list" : "Ta ut alla kort i denna lista ur arkivet",
"Add a new card" : "Lägg till ett nytt kort", "Add a new card" : "Lägg till ett nytt kort",
"Card name" : "Kortets namn", "Card name" : "Kortets namn",
"List deleted" : "Listan har raderats", "List deleted" : "Listan har raderats",
@@ -235,7 +242,9 @@
"Write a description …" : "Ange en beskrivning ...", "Write a description …" : "Ange en beskrivning ...",
"Choose attachment" : "Välj bilaga", "Choose attachment" : "Välj bilaga",
"(group)" : " (grupp)", "(group)" : " (grupp)",
"Todo items" : "Todo saker",
"{count} comments, {unread} unread" : "{count} kommentarer, {unread} olästa", "{count} comments, {unread} unread" : "{count} kommentarer, {unread} olästa",
"Edit card title" : "Ändra korttitel",
"Assign to me" : "Tilldela till mig", "Assign to me" : "Tilldela till mig",
"Unassign myself" : "Ta bort från mig själv", "Unassign myself" : "Ta bort från mig själv",
"Move card" : "Flytta kort", "Move card" : "Flytta kort",
@@ -249,7 +258,9 @@
"All boards" : "Alla tavlor", "All boards" : "Alla tavlor",
"Archived boards" : "Arkiverade tavlor", "Archived boards" : "Arkiverade tavlor",
"Shared with you" : "Delad med dig", "Shared with you" : "Delad med dig",
"Deck settings" : "Deck-inställningar",
"Use bigger card view" : "Visa större kort", "Use bigger card view" : "Visa större kort",
"Show card ID badge" : "Visa kortets ID-märke",
"Show boards in calendar/tasks" : "Visa tavlor i kalender / uppgifter", "Show boards in calendar/tasks" : "Visa tavlor i kalender / uppgifter",
"Limit deck usage of groups" : "Begränsa användningen av grupper", "Limit deck usage of groups" : "Begränsa användningen av grupper",
"Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Begränsning av Deck blockerar användare som inte ingår i dessa grupper från att skapa egna tavlor. Användare kan dock fortfarande integrera med tavlor som har delats med dem.", "Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Begränsning av Deck blockerar användare som inte ingår i dessa grupper från att skapa egna tavlor. Användare kan dock fortfarande integrera med tavlor som har delats med dem.",
@@ -269,13 +280,19 @@
"Only assigned cards" : "Bara tilldelade kort", "Only assigned cards" : "Bara tilldelade kort",
"No reminder" : "Ingen påminnelse", "No reminder" : "Ingen påminnelse",
"An error occurred" : "Ett fel uppstod", "An error occurred" : "Ett fel uppstod",
"Are you sure you want to delete the board {title}? This will delete all the data of this board including archived cards." : "Är du säker på att du vill radera brädet {title}? Detta kommer radera all data som tillhör brädet inklusive arkiverade kort.",
"Delete the board?" : "Ta bort tavlan?", "Delete the board?" : "Ta bort tavlan?",
"Loading filtered view" : "Laddar filtrerad vy", "Loading filtered view" : "Laddar filtrerad vy",
"No due" : "Inget slut", "No due" : "Inget slut",
"Search for {searchQuery} in all boards" : "Sök efter {searchQuery} i alla tavlor", "Search for {searchQuery} in all boards" : "Sök efter {searchQuery} i alla tavlor",
"No results found" : "Inga resultat funna", "No results found" : "Inga resultat funna",
"{stack} in {board}" : "{stack} i {board}",
"Click to expand description" : "Klicka för att utöka beskrivningen",
"* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Skapades {created}\n* Ändrades senast {lastMod}\n* {nbAttachments} bilagor\n* {nbComments} kommentarer",
"{nbCards} cards" : "{nbCards} kort",
"No upcoming cards" : "Inga kommande kort", "No upcoming cards" : "Inga kommande kort",
"upcoming cards" : "kommande kort", "upcoming cards" : "kommande kort",
"Due on {date}" : "Går ut {date}",
"Link to a board" : "Länka till en tavla", "Link to a board" : "Länka till en tavla",
"Link to a card" : "Länka till ett kort", "Link to a card" : "Länka till ett kort",
"Create a card" : "Skapa ett kort", "Create a card" : "Skapa ett kort",
@@ -288,7 +305,11 @@
"Share {file} with a Deck card" : "Dela {file} med ett Deck-kort", "Share {file} with a Deck card" : "Dela {file} med ett Deck-kort",
"Share" : "Dela", "Share" : "Dela",
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck är en kanban-liknande projekt- och organiseringsapp för arbetsgrupper i Nextcloud.\n\n\n- 📥 Lägg till uppgifter på kort och ordna dem\n- 📄 Skriv anteckningar i markdown\n- 🔖 Tilldela etiketter för organisering\n- 👥 Dela med arbetsgruppen, vänner eller familj\n- 📎 Bifoga filer och bädda in dem i markdown-anteckningarna\n- 💬 Diskutera i arbetsgruppen genom kommentarer\n- ⚡ Håll koll på ändringar i aktivitetsflödet\n- 🚀 Börja organisera din arbetsgrupp nu!", "Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 📎 Attach files and embed them in your markdown description\n- 💬 Discuss with your team using comments\n- ⚡ Keep track of changes in the activity stream\n- 🚀 Get your project organized" : "Deck är en kanban-liknande projekt- och organiseringsapp för arbetsgrupper i Nextcloud.\n\n\n- 📥 Lägg till uppgifter på kort och ordna dem\n- 📄 Skriv anteckningar i markdown\n- 🔖 Tilldela etiketter för organisering\n- 👥 Dela med arbetsgruppen, vänner eller familj\n- 📎 Bifoga filer och bädda in dem i markdown-anteckningarna\n- 💬 Diskutera i arbetsgruppen genom kommentarer\n- ⚡ Håll koll på ändringar i aktivitetsflödet\n- 🚀 Börja organisera din arbetsgrupp nu!",
"Are you sure you want to transfer the board {title} for {user} ?" : "Är du säker på att du vill överföra brädet {title} för {user}?",
"Transfer the board for {user} successfully" : "Överförde brädet för {user}",
"Failed to transfer the board for {user}" : "Misslyckades med att överföra brädet för {user}",
"Are you sure you want to delete the board {title}? This will delete all the data of this board." : "Är du säker på att du vill radera tavla {title}? Detta kommer att radera all information från denna tavla.", "Are you sure you want to delete the board {title}? This will delete all the data of this board." : "Är du säker på att du vill radera tavla {title}? Detta kommer att radera all information från denna tavla.",
"This week" : "Denna vecka" "This week" : "Denna vecka",
"Are you sure you want to transfer the board {title} for {user}?" : "Är du säker på att du vill överföra brädet {title} för {user}?"
},"pluralForm" :"nplurals=2; plural=(n != 1);" },"pluralForm" :"nplurals=2; plural=(n != 1);"
} }

View File

@@ -183,8 +183,10 @@ OC.L10N.register(
"Failed to transfer the board to {user}" : "Pano {user} kullanıcısına aktarılamadı", "Failed to transfer the board to {user}" : "Pano {user} kullanıcısına aktarılamadı",
"Add a new list" : "Yeni liste ekle", "Add a new list" : "Yeni liste ekle",
"Archive all cards" : "Tüm kartları arşivle", "Archive all cards" : "Tüm kartları arşivle",
"Unarchive all cards" : "Tüm kartları arşivden çıkar",
"Delete list" : "Listeyi sil", "Delete list" : "Listeyi sil",
"Archive all cards in this list" : "Bu listedeki tüm kartları arşivle", "Archive all cards in this list" : "Bu listedeki tüm kartları arşivle",
"Unarchive all cards in this list" : "Bu listedeki tüm kartları arşivden çıkar",
"Add a new card" : "Yeni kart ekle", "Add a new card" : "Yeni kart ekle",
"Card name" : "Kart adı", "Card name" : "Kart adı",
"List deleted" : "Liste silindi", "List deleted" : "Liste silindi",
@@ -260,6 +262,7 @@ OC.L10N.register(
"Shared with you" : "Sizinle paylaşıldı", "Shared with you" : "Sizinle paylaşıldı",
"Deck settings" : "Tahta ayarları", "Deck settings" : "Tahta ayarları",
"Use bigger card view" : "Daha büyük kart görünümü kullanılsın", "Use bigger card view" : "Daha büyük kart görünümü kullanılsın",
"Show card ID badge" : "Kart kodu etiketi görüntülensin",
"Show boards in calendar/tasks" : "Takvimler ve görevlerde panolar görüntülensin", "Show boards in calendar/tasks" : "Takvimler ve görevlerde panolar görüntülensin",
"Limit deck usage of groups" : "Tahtayı şu gruplar kullanabilsin", "Limit deck usage of groups" : "Tahtayı şu gruplar kullanabilsin",
"Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Tahta kullanımı gruplar ile sınırlandığında belirtilen grupların üyesi olmayan kişiler kendi tahtalarını oluşturamaz. Bu kullanıcılar ancak kendileri ile paylaşılan tahtalar üzerinde çalışabilir.", "Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Tahta kullanımı gruplar ile sınırlandığında belirtilen grupların üyesi olmayan kişiler kendi tahtalarını oluşturamaz. Bu kullanıcılar ancak kendileri ile paylaşılan tahtalar üzerinde çalışabilir.",
@@ -286,6 +289,7 @@ OC.L10N.register(
"Search for {searchQuery} in all boards" : "Tüm panolarda {searchQuery} için sonuçlar", "Search for {searchQuery} in all boards" : "Tüm panolarda {searchQuery} için sonuçlar",
"No results found" : "Herhangi bir sonuç bulunamadı", "No results found" : "Herhangi bir sonuç bulunamadı",
"{stack} in {board}" : "{stack} {board} panosunda", "{stack} in {board}" : "{stack} {board} panosunda",
"Click to expand description" : "Açıklamayı genişletmek için tıklayın",
"* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Oluşturulma: {created}\n* Son değiştirilme: {lastMod}\n* {nbAttachments} ek dosya\n* {nbComments} yorum", "* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Oluşturulma: {created}\n* Son değiştirilme: {lastMod}\n* {nbAttachments} ek dosya\n* {nbComments} yorum",
"{nbCards} cards" : "{nbCards} kart", "{nbCards} cards" : "{nbCards} kart",
"No upcoming cards" : "Yaklaşan bir kart yok", "No upcoming cards" : "Yaklaşan bir kart yok",

View File

@@ -181,8 +181,10 @@
"Failed to transfer the board to {user}" : "Pano {user} kullanıcısına aktarılamadı", "Failed to transfer the board to {user}" : "Pano {user} kullanıcısına aktarılamadı",
"Add a new list" : "Yeni liste ekle", "Add a new list" : "Yeni liste ekle",
"Archive all cards" : "Tüm kartları arşivle", "Archive all cards" : "Tüm kartları arşivle",
"Unarchive all cards" : "Tüm kartları arşivden çıkar",
"Delete list" : "Listeyi sil", "Delete list" : "Listeyi sil",
"Archive all cards in this list" : "Bu listedeki tüm kartları arşivle", "Archive all cards in this list" : "Bu listedeki tüm kartları arşivle",
"Unarchive all cards in this list" : "Bu listedeki tüm kartları arşivden çıkar",
"Add a new card" : "Yeni kart ekle", "Add a new card" : "Yeni kart ekle",
"Card name" : "Kart adı", "Card name" : "Kart adı",
"List deleted" : "Liste silindi", "List deleted" : "Liste silindi",
@@ -258,6 +260,7 @@
"Shared with you" : "Sizinle paylaşıldı", "Shared with you" : "Sizinle paylaşıldı",
"Deck settings" : "Tahta ayarları", "Deck settings" : "Tahta ayarları",
"Use bigger card view" : "Daha büyük kart görünümü kullanılsın", "Use bigger card view" : "Daha büyük kart görünümü kullanılsın",
"Show card ID badge" : "Kart kodu etiketi görüntülensin",
"Show boards in calendar/tasks" : "Takvimler ve görevlerde panolar görüntülensin", "Show boards in calendar/tasks" : "Takvimler ve görevlerde panolar görüntülensin",
"Limit deck usage of groups" : "Tahtayı şu gruplar kullanabilsin", "Limit deck usage of groups" : "Tahtayı şu gruplar kullanabilsin",
"Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Tahta kullanımı gruplar ile sınırlandığında belirtilen grupların üyesi olmayan kişiler kendi tahtalarını oluşturamaz. Bu kullanıcılar ancak kendileri ile paylaşılan tahtalar üzerinde çalışabilir.", "Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "Tahta kullanımı gruplar ile sınırlandığında belirtilen grupların üyesi olmayan kişiler kendi tahtalarını oluşturamaz. Bu kullanıcılar ancak kendileri ile paylaşılan tahtalar üzerinde çalışabilir.",
@@ -284,6 +287,7 @@
"Search for {searchQuery} in all boards" : "Tüm panolarda {searchQuery} için sonuçlar", "Search for {searchQuery} in all boards" : "Tüm panolarda {searchQuery} için sonuçlar",
"No results found" : "Herhangi bir sonuç bulunamadı", "No results found" : "Herhangi bir sonuç bulunamadı",
"{stack} in {board}" : "{stack} {board} panosunda", "{stack} in {board}" : "{stack} {board} panosunda",
"Click to expand description" : "Açıklamayı genişletmek için tıklayın",
"* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Oluşturulma: {created}\n* Son değiştirilme: {lastMod}\n* {nbAttachments} ek dosya\n* {nbComments} yorum", "* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* Oluşturulma: {created}\n* Son değiştirilme: {lastMod}\n* {nbAttachments} ek dosya\n* {nbComments} yorum",
"{nbCards} cards" : "{nbCards} kart", "{nbCards} cards" : "{nbCards} kart",
"No upcoming cards" : "Yaklaşan bir kart yok", "No upcoming cards" : "Yaklaşan bir kart yok",

View File

@@ -11,11 +11,32 @@ OC.L10N.register(
"{user} has shared the board {board} with {acl}" : "{user} поділився дошкою {board} з {acl}", "{user} has shared the board {board} with {acl}" : "{user} поділився дошкою {board} з {acl}",
"You have removed {acl} from the board {board}" : "Ви вилучили {acl} з дошки {board}", "You have removed {acl} from the board {board}" : "Ви вилучили {acl} з дошки {board}",
"{user} has removed {acl} from the board {board}" : "{user} вилучив {acl} з дошки {board}", "{user} has removed {acl} from the board {board}" : "{user} вилучив {acl} з дошки {board}",
"You have renamed the board {before} to {board}" : "Ви перейменували дошку з {before} у {board}", "You have renamed the board {before} to {board}" : "Ви перейменували дошку з {before} на {board}",
"{user} has renamed the board {before} to {board}" : "{user} змінив назву дошки {before} на {board}",
"You have archived the board {board}" : "Ви заархівували дошку {board}",
"{user} has archived the board {before}" : "{user} заархівував дошку {before}",
"You have unarchived the board {board}" : "Ви розархівували дошку {board}",
"{user} has unarchived the board {before}" : "{user} розархівував дошку {перед}",
"You have created a new list {stack} on board {board}" : "Ви створили новий список {stack} на борту {board}",
"{user} has created a new list {stack} on board {board}" : "{user} створив новий список {stack} на дошці {board}",
"You have renamed list {before} to {stack} on board {board}" : "Ви перейменували список {before} на {stack} на дошці {board}",
"{user} has renamed list {before} to {stack} on board {board}" : "{user} змінив назву списку {before} на {stack} на дошці {board}",
"You have deleted list {stack} on board {board}" : "Ви видалили список {stack} на дошці {board}",
"{user} has deleted list {stack} on board {board}" : "{user} видалив список {stack} на дошці {board}",
"You have created card {card} in list {stack} on board {board}" : "Ви створили картку {card} у списку {stack} на дошці {board}",
"{user} has created card {card} in list {stack} on board {board}" : "{user} створив картку {card} у списку {stack} на дошці {board}",
"You have deleted card {card} in list {stack} on board {board}" : "Ви видалили картку {card} у списку {stack} на дошці {board}",
"{user} has deleted card {card} in list {stack} on board {board}" : "{user} видалив картку {card} у списку {stack} на дошці {board}",
"You have renamed the card {before} to {card}" : "Ви перейменували картку {before} на {card}",
"{user} has renamed the card {before} to {card}" : "{user} змінив назву картки {before} на {card}",
"You have added a description to card {card} in list {stack} on board {board}" : "Ви додали опис картки {card} у списку {stack} на дошці {board}",
"{user} has added a description to card {card} in list {stack} on board {board}" : "{user} додав опис до картки {card} у списку {stack} на дошці {board}",
"You have updated the description of card {card} in list {stack} on board {board}" : "Ви оновили опис картки {card} у списку {stack} на дошці {board}",
"Deck" : "Колода", "Deck" : "Колода",
"Changes in the <strong>Deck app</strong>" : "Зміни у застосунку <strong>Колода</strong>", "Changes in the <strong>Deck app</strong>" : "Зміни у застосунку <strong>Колода</strong>",
"Load more" : "Більше", "Load more" : "Більше",
"Personal" : "Особисте", "Personal" : "Особисте",
"%s on %s" : "%s на %s",
"Finished" : "Завершено", "Finished" : "Завершено",
"To review" : "На перегляд", "To review" : "На перегляд",
"Action needed" : "Потребує дій", "Action needed" : "Потребує дій",
@@ -32,7 +53,7 @@ OC.L10N.register(
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Розмір вивантаженого файлу перевищує директиву MAX_FILE_SIZE вказану в HTML формі", "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Розмір вивантаженого файлу перевищує директиву MAX_FILE_SIZE вказану в HTML формі",
"The file was only partially uploaded" : "Файл завантажено лише частково", "The file was only partially uploaded" : "Файл завантажено лише частково",
"No file was uploaded" : "Не вивантажено жодного файлу", "No file was uploaded" : "Не вивантажено жодного файлу",
"Missing a temporary folder" : "Відсутня тека для тимчасових файлів", "Missing a temporary folder" : "Відсутній каталог тимчасових файлів",
"Could not write file to disk" : "Неможливо записати файл на диск", "Could not write file to disk" : "Неможливо записати файл на диск",
"A PHP extension stopped the file upload" : "Розширення PHP призупинило завантаження файлу", "A PHP extension stopped the file upload" : "Розширення PHP призупинило завантаження файлу",
"No file uploaded or file size exceeds maximum of %s" : "Немає завантажених файлів або розмір файлу перевищує максимум %s", "No file uploaded or file size exceeds maximum of %s" : "Немає завантажених файлів або розмір файлу перевищує максимум %s",
@@ -77,7 +98,7 @@ OC.L10N.register(
"Details" : "Деталі", "Details" : "Деталі",
"Loading board" : "Завантаження дошки", "Loading board" : "Завантаження дошки",
"Board not found" : "Дошку не знайдено", "Board not found" : "Дошку не знайдено",
"Sharing" : "Поділитись", "Sharing" : "Поділитися",
"Tags" : "Теги", "Tags" : "Теги",
"Deleted items" : "Вилучені елементи", "Deleted items" : "Вилучені елементи",
"Timeline" : "Дії", "Timeline" : "Дії",
@@ -149,6 +170,7 @@ OC.L10N.register(
"All boards" : "Усі дошки", "All boards" : "Усі дошки",
"Archived boards" : "Архівні дошки", "Archived boards" : "Архівні дошки",
"Shared with you" : "Вам надано доступ", "Shared with you" : "Вам надано доступ",
"Show boards in calendar/tasks" : "Показувати дошки в календарі та завданнях",
"Limit deck usage of groups" : "Обмежити доступ до колоди для груп", "Limit deck usage of groups" : "Обмежити доступ до колоди для груп",
"Board details" : "Деталі дошки", "Board details" : "Деталі дошки",
"Edit board" : "Редагувати дошку", "Edit board" : "Редагувати дошку",
@@ -158,14 +180,17 @@ OC.L10N.register(
"No notifications" : "Немає сповіщень", "No notifications" : "Немає сповіщень",
"Delete board" : "Вилучити дошку", "Delete board" : "Вилучити дошку",
"Board {0} deleted" : "Дошку {0} вилучено", "Board {0} deleted" : "Дошку {0} вилучено",
"No reminder" : "Відсутні нагадування",
"An error occurred" : "Виникла помилка", "An error occurred" : "Виникла помилка",
"Are you sure you want to delete the board {title}? This will delete all the data of this board including archived cards." : "Ви впевнені, що хочете видалити дошку {title}? Це призведе до видалення всіх даних цієї дошки, включаючи архівні картки.", "Are you sure you want to delete the board {title}? This will delete all the data of this board including archived cards." : "Ви впевнені, що хочете видалити дошку {title}? Це призведе до видалення всіх даних цієї дошки, включаючи архівні картки.",
"Delete the board?" : "Вилучити дошку?", "Delete the board?" : "Вилучити дошку?",
"Link to a board" : "Прив'язати до дошки", "Link to a board" : "Прив'язати до дошки",
"Link to a card" : "Прив'язати до картки", "Link to a card" : "Прив'язати до картки",
"Message from {author} in {conversationName}" : "Повідомлення від {author} у {conversationName}",
"Something went wrong" : "От халепа!", "Something went wrong" : "От халепа!",
"Maximum file size of {size} exceeded" : "Досягнуто максимальний розмір файлу {size}", "Maximum file size of {size} exceeded" : "Досягнуто максимальний розмір файлу {size}",
"Share" : "Поділитися", "Error creating the share" : "Помилка створення спільного доступу",
"Share" : "Спільний доступ",
"This week" : "Цього тижня" "This week" : "Цього тижня"
}, },
"nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);"); "nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);");

View File

@@ -9,11 +9,32 @@
"{user} has shared the board {board} with {acl}" : "{user} поділився дошкою {board} з {acl}", "{user} has shared the board {board} with {acl}" : "{user} поділився дошкою {board} з {acl}",
"You have removed {acl} from the board {board}" : "Ви вилучили {acl} з дошки {board}", "You have removed {acl} from the board {board}" : "Ви вилучили {acl} з дошки {board}",
"{user} has removed {acl} from the board {board}" : "{user} вилучив {acl} з дошки {board}", "{user} has removed {acl} from the board {board}" : "{user} вилучив {acl} з дошки {board}",
"You have renamed the board {before} to {board}" : "Ви перейменували дошку з {before} у {board}", "You have renamed the board {before} to {board}" : "Ви перейменували дошку з {before} на {board}",
"{user} has renamed the board {before} to {board}" : "{user} змінив назву дошки {before} на {board}",
"You have archived the board {board}" : "Ви заархівували дошку {board}",
"{user} has archived the board {before}" : "{user} заархівував дошку {before}",
"You have unarchived the board {board}" : "Ви розархівували дошку {board}",
"{user} has unarchived the board {before}" : "{user} розархівував дошку {перед}",
"You have created a new list {stack} on board {board}" : "Ви створили новий список {stack} на борту {board}",
"{user} has created a new list {stack} on board {board}" : "{user} створив новий список {stack} на дошці {board}",
"You have renamed list {before} to {stack} on board {board}" : "Ви перейменували список {before} на {stack} на дошці {board}",
"{user} has renamed list {before} to {stack} on board {board}" : "{user} змінив назву списку {before} на {stack} на дошці {board}",
"You have deleted list {stack} on board {board}" : "Ви видалили список {stack} на дошці {board}",
"{user} has deleted list {stack} on board {board}" : "{user} видалив список {stack} на дошці {board}",
"You have created card {card} in list {stack} on board {board}" : "Ви створили картку {card} у списку {stack} на дошці {board}",
"{user} has created card {card} in list {stack} on board {board}" : "{user} створив картку {card} у списку {stack} на дошці {board}",
"You have deleted card {card} in list {stack} on board {board}" : "Ви видалили картку {card} у списку {stack} на дошці {board}",
"{user} has deleted card {card} in list {stack} on board {board}" : "{user} видалив картку {card} у списку {stack} на дошці {board}",
"You have renamed the card {before} to {card}" : "Ви перейменували картку {before} на {card}",
"{user} has renamed the card {before} to {card}" : "{user} змінив назву картки {before} на {card}",
"You have added a description to card {card} in list {stack} on board {board}" : "Ви додали опис картки {card} у списку {stack} на дошці {board}",
"{user} has added a description to card {card} in list {stack} on board {board}" : "{user} додав опис до картки {card} у списку {stack} на дошці {board}",
"You have updated the description of card {card} in list {stack} on board {board}" : "Ви оновили опис картки {card} у списку {stack} на дошці {board}",
"Deck" : "Колода", "Deck" : "Колода",
"Changes in the <strong>Deck app</strong>" : "Зміни у застосунку <strong>Колода</strong>", "Changes in the <strong>Deck app</strong>" : "Зміни у застосунку <strong>Колода</strong>",
"Load more" : "Більше", "Load more" : "Більше",
"Personal" : "Особисте", "Personal" : "Особисте",
"%s on %s" : "%s на %s",
"Finished" : "Завершено", "Finished" : "Завершено",
"To review" : "На перегляд", "To review" : "На перегляд",
"Action needed" : "Потребує дій", "Action needed" : "Потребує дій",
@@ -30,7 +51,7 @@
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Розмір вивантаженого файлу перевищує директиву MAX_FILE_SIZE вказану в HTML формі", "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Розмір вивантаженого файлу перевищує директиву MAX_FILE_SIZE вказану в HTML формі",
"The file was only partially uploaded" : "Файл завантажено лише частково", "The file was only partially uploaded" : "Файл завантажено лише частково",
"No file was uploaded" : "Не вивантажено жодного файлу", "No file was uploaded" : "Не вивантажено жодного файлу",
"Missing a temporary folder" : "Відсутня тека для тимчасових файлів", "Missing a temporary folder" : "Відсутній каталог тимчасових файлів",
"Could not write file to disk" : "Неможливо записати файл на диск", "Could not write file to disk" : "Неможливо записати файл на диск",
"A PHP extension stopped the file upload" : "Розширення PHP призупинило завантаження файлу", "A PHP extension stopped the file upload" : "Розширення PHP призупинило завантаження файлу",
"No file uploaded or file size exceeds maximum of %s" : "Немає завантажених файлів або розмір файлу перевищує максимум %s", "No file uploaded or file size exceeds maximum of %s" : "Немає завантажених файлів або розмір файлу перевищує максимум %s",
@@ -75,7 +96,7 @@
"Details" : "Деталі", "Details" : "Деталі",
"Loading board" : "Завантаження дошки", "Loading board" : "Завантаження дошки",
"Board not found" : "Дошку не знайдено", "Board not found" : "Дошку не знайдено",
"Sharing" : "Поділитись", "Sharing" : "Поділитися",
"Tags" : "Теги", "Tags" : "Теги",
"Deleted items" : "Вилучені елементи", "Deleted items" : "Вилучені елементи",
"Timeline" : "Дії", "Timeline" : "Дії",
@@ -147,6 +168,7 @@
"All boards" : "Усі дошки", "All boards" : "Усі дошки",
"Archived boards" : "Архівні дошки", "Archived boards" : "Архівні дошки",
"Shared with you" : "Вам надано доступ", "Shared with you" : "Вам надано доступ",
"Show boards in calendar/tasks" : "Показувати дошки в календарі та завданнях",
"Limit deck usage of groups" : "Обмежити доступ до колоди для груп", "Limit deck usage of groups" : "Обмежити доступ до колоди для груп",
"Board details" : "Деталі дошки", "Board details" : "Деталі дошки",
"Edit board" : "Редагувати дошку", "Edit board" : "Редагувати дошку",
@@ -156,14 +178,17 @@
"No notifications" : "Немає сповіщень", "No notifications" : "Немає сповіщень",
"Delete board" : "Вилучити дошку", "Delete board" : "Вилучити дошку",
"Board {0} deleted" : "Дошку {0} вилучено", "Board {0} deleted" : "Дошку {0} вилучено",
"No reminder" : "Відсутні нагадування",
"An error occurred" : "Виникла помилка", "An error occurred" : "Виникла помилка",
"Are you sure you want to delete the board {title}? This will delete all the data of this board including archived cards." : "Ви впевнені, що хочете видалити дошку {title}? Це призведе до видалення всіх даних цієї дошки, включаючи архівні картки.", "Are you sure you want to delete the board {title}? This will delete all the data of this board including archived cards." : "Ви впевнені, що хочете видалити дошку {title}? Це призведе до видалення всіх даних цієї дошки, включаючи архівні картки.",
"Delete the board?" : "Вилучити дошку?", "Delete the board?" : "Вилучити дошку?",
"Link to a board" : "Прив'язати до дошки", "Link to a board" : "Прив'язати до дошки",
"Link to a card" : "Прив'язати до картки", "Link to a card" : "Прив'язати до картки",
"Message from {author} in {conversationName}" : "Повідомлення від {author} у {conversationName}",
"Something went wrong" : "От халепа!", "Something went wrong" : "От халепа!",
"Maximum file size of {size} exceeded" : "Досягнуто максимальний розмір файлу {size}", "Maximum file size of {size} exceeded" : "Досягнуто максимальний розмір файлу {size}",
"Share" : "Поділитися", "Error creating the share" : "Помилка створення спільного доступу",
"Share" : "Спільний доступ",
"This week" : "Цього тижня" "This week" : "Цього тижня"
},"pluralForm" :"nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);" },"pluralForm" :"nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);"
} }

View File

@@ -183,8 +183,10 @@ OC.L10N.register(
"Failed to transfer the board to {user}" : "未能將面板轉移給 {user}", "Failed to transfer the board to {user}" : "未能將面板轉移給 {user}",
"Add a new list" : "添加一張新清單", "Add a new list" : "添加一張新清單",
"Archive all cards" : "封存所有卡片", "Archive all cards" : "封存所有卡片",
"Unarchive all cards" : "解除封存所有卡片",
"Delete list" : "刪除清單", "Delete list" : "刪除清單",
"Archive all cards in this list" : "封存此清單內的所有卡片", "Archive all cards in this list" : "封存此清單內的所有卡片",
"Unarchive all cards in this list" : "解除封存所有此列表中的卡片",
"Add a new card" : "添加一張新卡片", "Add a new card" : "添加一張新卡片",
"Card name" : "卡片名稱", "Card name" : "卡片名稱",
"List deleted" : "清單已被刪除", "List deleted" : "清單已被刪除",
@@ -260,6 +262,7 @@ OC.L10N.register(
"Shared with you" : "收到的分享", "Shared with you" : "收到的分享",
"Deck settings" : "看板設定", "Deck settings" : "看板設定",
"Use bigger card view" : "使用較大的卡片視圖", "Use bigger card view" : "使用較大的卡片視圖",
"Show card ID badge" : "顯示卡片 ID 徽章",
"Show boards in calendar/tasks" : "在日曆/任務中顯示面板", "Show boards in calendar/tasks" : "在日曆/任務中顯示面板",
"Limit deck usage of groups" : "限制群組使用 Deck", "Limit deck usage of groups" : "限制群組使用 Deck",
"Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "限制 Deck 將阻止不屬於這些群組的用戶創建自己的面板。用戶仍然可以在與他們的面板上工作。", "Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "限制 Deck 將阻止不屬於這些群組的用戶創建自己的面板。用戶仍然可以在與他們的面板上工作。",
@@ -286,6 +289,7 @@ OC.L10N.register(
"Search for {searchQuery} in all boards" : "在所有面板中搜索 {searchQuery}", "Search for {searchQuery} in all boards" : "在所有面板中搜索 {searchQuery}",
"No results found" : "沒有結果", "No results found" : "沒有結果",
"{stack} in {board}" : "{board} 中的 {stack}", "{stack} in {board}" : "{board} 中的 {stack}",
"Click to expand description" : "點擊展開描述",
"* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* 創建於 {created}\n* 最後修改於 {lastMod}\n* {nbAttachments} 個附件\n* {nbComments} 則留言", "* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* 創建於 {created}\n* 最後修改於 {lastMod}\n* {nbAttachments} 個附件\n* {nbComments} 則留言",
"{nbCards} cards" : "{nbCards} 張卡片", "{nbCards} cards" : "{nbCards} 張卡片",
"No upcoming cards" : "沒有快將到期的卡片", "No upcoming cards" : "沒有快將到期的卡片",

View File

@@ -181,8 +181,10 @@
"Failed to transfer the board to {user}" : "未能將面板轉移給 {user}", "Failed to transfer the board to {user}" : "未能將面板轉移給 {user}",
"Add a new list" : "添加一張新清單", "Add a new list" : "添加一張新清單",
"Archive all cards" : "封存所有卡片", "Archive all cards" : "封存所有卡片",
"Unarchive all cards" : "解除封存所有卡片",
"Delete list" : "刪除清單", "Delete list" : "刪除清單",
"Archive all cards in this list" : "封存此清單內的所有卡片", "Archive all cards in this list" : "封存此清單內的所有卡片",
"Unarchive all cards in this list" : "解除封存所有此列表中的卡片",
"Add a new card" : "添加一張新卡片", "Add a new card" : "添加一張新卡片",
"Card name" : "卡片名稱", "Card name" : "卡片名稱",
"List deleted" : "清單已被刪除", "List deleted" : "清單已被刪除",
@@ -258,6 +260,7 @@
"Shared with you" : "收到的分享", "Shared with you" : "收到的分享",
"Deck settings" : "看板設定", "Deck settings" : "看板設定",
"Use bigger card view" : "使用較大的卡片視圖", "Use bigger card view" : "使用較大的卡片視圖",
"Show card ID badge" : "顯示卡片 ID 徽章",
"Show boards in calendar/tasks" : "在日曆/任務中顯示面板", "Show boards in calendar/tasks" : "在日曆/任務中顯示面板",
"Limit deck usage of groups" : "限制群組使用 Deck", "Limit deck usage of groups" : "限制群組使用 Deck",
"Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "限制 Deck 將阻止不屬於這些群組的用戶創建自己的面板。用戶仍然可以在與他們的面板上工作。", "Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "限制 Deck 將阻止不屬於這些群組的用戶創建自己的面板。用戶仍然可以在與他們的面板上工作。",
@@ -284,6 +287,7 @@
"Search for {searchQuery} in all boards" : "在所有面板中搜索 {searchQuery}", "Search for {searchQuery} in all boards" : "在所有面板中搜索 {searchQuery}",
"No results found" : "沒有結果", "No results found" : "沒有結果",
"{stack} in {board}" : "{board} 中的 {stack}", "{stack} in {board}" : "{board} 中的 {stack}",
"Click to expand description" : "點擊展開描述",
"* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* 創建於 {created}\n* 最後修改於 {lastMod}\n* {nbAttachments} 個附件\n* {nbComments} 則留言", "* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* 創建於 {created}\n* 最後修改於 {lastMod}\n* {nbAttachments} 個附件\n* {nbComments} 則留言",
"{nbCards} cards" : "{nbCards} 張卡片", "{nbCards} cards" : "{nbCards} 張卡片",
"No upcoming cards" : "沒有快將到期的卡片", "No upcoming cards" : "沒有快將到期的卡片",

View File

@@ -183,8 +183,10 @@ OC.L10N.register(
"Failed to transfer the board to {user}" : "轉移看板給 {user} 失敗", "Failed to transfer the board to {user}" : "轉移看板給 {user} 失敗",
"Add a new list" : "新增列表", "Add a new list" : "新增列表",
"Archive all cards" : "封存所有卡片", "Archive all cards" : "封存所有卡片",
"Unarchive all cards" : "解除封存所有卡片",
"Delete list" : "刪除列表", "Delete list" : "刪除列表",
"Archive all cards in this list" : "封存此列表中的所有卡片", "Archive all cards in this list" : "封存此列表中的所有卡片",
"Unarchive all cards in this list" : "解除封存所有此列表中的卡片",
"Add a new card" : "新增卡片", "Add a new card" : "新增卡片",
"Card name" : "卡片名稱", "Card name" : "卡片名稱",
"List deleted" : "列表已刪除", "List deleted" : "列表已刪除",
@@ -260,6 +262,7 @@ OC.L10N.register(
"Shared with you" : "與您分享", "Shared with you" : "與您分享",
"Deck settings" : "Deck 設定", "Deck settings" : "Deck 設定",
"Use bigger card view" : "使用較大的卡片檢視", "Use bigger card view" : "使用較大的卡片檢視",
"Show card ID badge" : "顯示卡片 ID 徽章",
"Show boards in calendar/tasks" : "在日曆/工作項目中顯示佈告欄", "Show boards in calendar/tasks" : "在日曆/工作項目中顯示佈告欄",
"Limit deck usage of groups" : "限制群組的 Deck 使用", "Limit deck usage of groups" : "限制群組的 Deck 使用",
"Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "限制 Deck 將會阻止不屬於這些群組的使用者建立自己的佈告欄。使用者仍然可以在與他們分享的佈告欄上工作。", "Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "限制 Deck 將會阻止不屬於這些群組的使用者建立自己的佈告欄。使用者仍然可以在與他們分享的佈告欄上工作。",
@@ -286,6 +289,7 @@ OC.L10N.register(
"Search for {searchQuery} in all boards" : "在所有佈告欄中搜尋 {searchQuery}", "Search for {searchQuery} in all boards" : "在所有佈告欄中搜尋 {searchQuery}",
"No results found" : "找不到結果", "No results found" : "找不到結果",
"{stack} in {board}" : "{stack} 於 {board}", "{stack} in {board}" : "{stack} 於 {board}",
"Click to expand description" : "點擊展開描述",
"* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* 建立於 {created}\n* 最後修改於 {lastMod}\n* {nbAttachments} 個附件\n* {nbComments} 則留言", "* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* 建立於 {created}\n* 最後修改於 {lastMod}\n* {nbAttachments} 個附件\n* {nbComments} 則留言",
"{nbCards} cards" : "{nbCards} 張卡片", "{nbCards} cards" : "{nbCards} 張卡片",
"No upcoming cards" : "無接下來的卡片", "No upcoming cards" : "無接下來的卡片",

View File

@@ -181,8 +181,10 @@
"Failed to transfer the board to {user}" : "轉移看板給 {user} 失敗", "Failed to transfer the board to {user}" : "轉移看板給 {user} 失敗",
"Add a new list" : "新增列表", "Add a new list" : "新增列表",
"Archive all cards" : "封存所有卡片", "Archive all cards" : "封存所有卡片",
"Unarchive all cards" : "解除封存所有卡片",
"Delete list" : "刪除列表", "Delete list" : "刪除列表",
"Archive all cards in this list" : "封存此列表中的所有卡片", "Archive all cards in this list" : "封存此列表中的所有卡片",
"Unarchive all cards in this list" : "解除封存所有此列表中的卡片",
"Add a new card" : "新增卡片", "Add a new card" : "新增卡片",
"Card name" : "卡片名稱", "Card name" : "卡片名稱",
"List deleted" : "列表已刪除", "List deleted" : "列表已刪除",
@@ -258,6 +260,7 @@
"Shared with you" : "與您分享", "Shared with you" : "與您分享",
"Deck settings" : "Deck 設定", "Deck settings" : "Deck 設定",
"Use bigger card view" : "使用較大的卡片檢視", "Use bigger card view" : "使用較大的卡片檢視",
"Show card ID badge" : "顯示卡片 ID 徽章",
"Show boards in calendar/tasks" : "在日曆/工作項目中顯示佈告欄", "Show boards in calendar/tasks" : "在日曆/工作項目中顯示佈告欄",
"Limit deck usage of groups" : "限制群組的 Deck 使用", "Limit deck usage of groups" : "限制群組的 Deck 使用",
"Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "限制 Deck 將會阻止不屬於這些群組的使用者建立自己的佈告欄。使用者仍然可以在與他們分享的佈告欄上工作。", "Limiting Deck will block users not part of those groups from creating their own boards. Users will still be able to work on boards that have been shared with them." : "限制 Deck 將會阻止不屬於這些群組的使用者建立自己的佈告欄。使用者仍然可以在與他們分享的佈告欄上工作。",
@@ -284,6 +287,7 @@
"Search for {searchQuery} in all boards" : "在所有佈告欄中搜尋 {searchQuery}", "Search for {searchQuery} in all boards" : "在所有佈告欄中搜尋 {searchQuery}",
"No results found" : "找不到結果", "No results found" : "找不到結果",
"{stack} in {board}" : "{stack} 於 {board}", "{stack} in {board}" : "{stack} 於 {board}",
"Click to expand description" : "點擊展開描述",
"* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* 建立於 {created}\n* 最後修改於 {lastMod}\n* {nbAttachments} 個附件\n* {nbComments} 則留言", "* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* 建立於 {created}\n* 最後修改於 {lastMod}\n* {nbAttachments} 個附件\n* {nbComments} 則留言",
"{nbCards} cards" : "{nbCards} 張卡片", "{nbCards} cards" : "{nbCards} 張卡片",
"No upcoming cards" : "無接下來的卡片", "No upcoming cards" : "無接下來的卡片",

View File

@@ -367,6 +367,14 @@ class ActivityManager {
case self::SUBJECT_CARD_USER_ASSIGN: case self::SUBJECT_CARD_USER_ASSIGN:
case self::SUBJECT_CARD_USER_UNASSIGN: case self::SUBJECT_CARD_USER_UNASSIGN:
$subjectParams = $this->findDetailsForCard($entity->getId(), $subject); $subjectParams = $this->findDetailsForCard($entity->getId(), $subject);
if (isset($additionalParams['after']) && $additionalParams['after'] instanceof \DateTimeInterface) {
$additionalParams['after'] = $additionalParams['after']->format('c');
}
if (isset($additionalParams['before']) && $additionalParams['before'] instanceof \DateTimeInterface) {
$additionalParams['before'] = $additionalParams['before']->format('c');
}
break; break;
case self::SUBJECT_ATTACHMENT_CREATE: case self::SUBJECT_ATTACHMENT_CREATE:
case self::SUBJECT_ATTACHMENT_UPDATE: case self::SUBJECT_ATTACHMENT_UPDATE:

View File

@@ -121,6 +121,7 @@ class DeckProvider implements IProvider {
'link' => $this->deckUrl('/board/' . $event->getObjectId()), 'link' => $this->deckUrl('/board/' . $event->getObjectId()),
]; ];
$params['board'] = $board; $params['board'] = $board;
$event->setLink($this->deckUrl('/board/' . $event->getObjectId()));
} }
if (isset($subjectParams['card']) && $event->getObjectType() === ActivityManager::DECK_OBJECT_CARD) { if (isset($subjectParams['card']) && $event->getObjectType() === ActivityManager::DECK_OBJECT_CARD) {
@@ -134,8 +135,8 @@ class DeckProvider implements IProvider {
]; ];
if (array_key_exists('board', $subjectParams)) { if (array_key_exists('board', $subjectParams)) {
$archivedParam = $subjectParams['card']['archived'] ? 'archived/' : '';
$card['link'] = $this->cardService->getRedirectUrlForCard($event->getObjectId()); $card['link'] = $this->cardService->getRedirectUrlForCard($event->getObjectId());
$event->setLink($card['link']);
} }
$params['card'] = $card; $params['card'] = $card;
} }
@@ -311,12 +312,19 @@ class DeckProvider implements IProvider {
$userLanguage = $this->config->getUserValue($event->getAuthor(), 'core', 'lang', $this->l10nFactory->findLanguage()); $userLanguage = $this->config->getUserValue($event->getAuthor(), 'core', 'lang', $this->l10nFactory->findLanguage());
$userLocale = $this->config->getUserValue($event->getAuthor(), 'core', 'locale', $this->l10nFactory->findLocale()); $userLocale = $this->config->getUserValue($event->getAuthor(), 'core', 'locale', $this->l10nFactory->findLocale());
$l10n = $this->l10nFactory->get('deck', $userLanguage, $userLocale); $l10n = $this->l10nFactory->get('deck', $userLanguage, $userLocale);
if (is_array($subjectParams['after'])) {
// Unluckily there was a time when we stored jsonSerialized date objects in the database
// Broken in 1.8.0 and fixed again in 1.8.1
$date = new \DateTime($subjectParams['after']['date']);
$date->setTimezone(new \DateTimeZone(\date_default_timezone_get()));
} else {
$date = new \DateTime($subjectParams['after']); $date = new \DateTime($subjectParams['after']);
$date->setTimezone(new \DateTimeZone(\date_default_timezone_get())); $date->setTimezone(new \DateTimeZone(\date_default_timezone_get()));
}
$params['after'] = [ $params['after'] = [
'type' => 'highlight', 'type' => 'highlight',
'id' => 'dt:' . $subjectParams['after'], 'id' => 'dt:' . $subjectParams['after'],
'name' => $l10n->l('datetime', $date) 'name' => $l10n->l('datetime', $date),
]; ];
} }
return $params; return $params;

View File

@@ -108,7 +108,7 @@ class Card extends RelationalEntity {
$this->addType('archived', 'boolean'); $this->addType('archived', 'boolean');
$this->addType('notified', 'boolean'); $this->addType('notified', 'boolean');
$this->addType('deletedAt', 'integer'); $this->addType('deletedAt', 'integer');
$this->addType('duedate', 'string'); $this->addType('duedate', 'datetime');
$this->addRelation('labels'); $this->addRelation('labels');
$this->addRelation('assignedUsers'); $this->addRelation('assignedUsers');
$this->addRelation('attachments'); $this->addRelation('attachments');
@@ -126,20 +126,6 @@ class Card extends RelationalEntity {
$this->databaseType = $type; $this->databaseType = $type;
} }
public function getDueDateTime(): ?DateTime {
return $this->duedate ? new DateTime($this->duedate) : null;
}
public function getDuedate($isoFormat = false): ?string {
$dt = $this->getDueDateTime();
$format = 'c';
if (!$isoFormat && $this->databaseType === 'mysql') {
$format = 'Y-m-d H:i:s';
}
return $dt ? $dt->format($format) : null;
}
public function getCalendarObject(): VCalendar { public function getCalendarObject(): VCalendar {
$calendar = new VCalendar(); $calendar = new VCalendar();
$event = $calendar->createComponent('VTODO'); $event = $calendar->createComponent('VTODO');
@@ -148,7 +134,7 @@ class Card extends RelationalEntity {
$creationDate = new DateTime(); $creationDate = new DateTime();
$creationDate->setTimestamp($this->createdAt); $creationDate->setTimestamp($this->createdAt);
$event->DTSTAMP = $creationDate; $event->DTSTAMP = $creationDate;
$event->DUE = new DateTime($this->getDuedate(true), new DateTimeZone('UTC')); $event->DUE = new DateTime($this->getDuedate()->format('c'), new DateTimeZone('UTC'));
} }
$event->add('RELATED-TO', 'deck-stack-' . $this->getStackId()); $event->add('RELATED-TO', 'deck-stack-' . $this->getStackId());

View File

@@ -72,6 +72,9 @@ class RelationalEntity extends Entity implements \JsonSerializable {
$propertyReflection = $reflection->getProperty($property); $propertyReflection = $reflection->getProperty($property);
if (!$propertyReflection->isPrivate() && !in_array($property, $this->_resolvedProperties, true)) { if (!$propertyReflection->isPrivate() && !in_array($property, $this->_resolvedProperties, true)) {
$json[$property] = $this->getter($property); $json[$property] = $this->getter($property);
if ($json[$property] instanceof \DateTimeInterface) {
$json[$property] = $json[$property]->format('c');
}
} }
} }
} }

View File

@@ -54,7 +54,7 @@ class CardDetails extends Card {
$today = new DateTime(); $today = new DateTime();
$today->setTime(0, 0); $today->setTime(0, 0);
$match_date = $this->card->getDueDateTime(); $match_date = $this->card->getDuedate();
if (!$match_date) { if (!$match_date) {
return Card::DUEDATE_FUTURE; return Card::DUEDATE_FUTURE;
} }

View File

@@ -129,7 +129,7 @@ class NotificationHelper {
->setSubject('card-overdue', [ ->setSubject('card-overdue', [
$card->getTitle(), $board->getTitle() $card->getTitle(), $board->getTitle()
]) ])
->setDateTime(new DateTime($card->getDuedate())); ->setDateTime($card->getDuedate());
$this->notificationManager->notify($notification); $this->notificationManager->notify($notification);
} }
} }

View File

@@ -22,7 +22,6 @@
namespace OCA\Deck\Reference; namespace OCA\Deck\Reference;
use OC\Collaboration\Reference\Reference;
use OCA\Deck\AppInfo\Application; use OCA\Deck\AppInfo\Application;
use OCA\Deck\Db\Assignment; use OCA\Deck\Db\Assignment;
use OCA\Deck\Db\Attachment; use OCA\Deck\Db\Attachment;
@@ -33,6 +32,7 @@ use OCA\Deck\Service\CardService;
use OCA\Deck\Service\StackService; use OCA\Deck\Service\StackService;
use OCP\Collaboration\Reference\IReference; use OCP\Collaboration\Reference\IReference;
use OCP\Collaboration\Reference\IReferenceProvider; use OCP\Collaboration\Reference\IReferenceProvider;
use OCP\Collaboration\Reference\Reference;
use OCP\IURLGenerator; use OCP\IURLGenerator;
class CardReferenceProvider implements IReferenceProvider { class CardReferenceProvider implements IReferenceProvider {
@@ -40,6 +40,7 @@ class CardReferenceProvider implements IReferenceProvider {
private IURLGenerator $urlGenerator; private IURLGenerator $urlGenerator;
private BoardService $boardService; private BoardService $boardService;
private StackService $stackService; private StackService $stackService;
private ?string $userId;
public function __construct(CardService $cardService, public function __construct(CardService $cardService,
BoardService $boardService, BoardService $boardService,
@@ -50,6 +51,7 @@ class CardReferenceProvider implements IReferenceProvider {
$this->urlGenerator = $urlGenerator; $this->urlGenerator = $urlGenerator;
$this->boardService = $boardService; $this->boardService = $boardService;
$this->stackService = $stackService; $this->stackService = $stackService;
$this->userId = $userId;
} }
/** /**

View File

@@ -35,6 +35,7 @@ use OCA\Deck\Event\CardUpdatedEvent;
use OCA\Deck\NoPermissionException; use OCA\Deck\NoPermissionException;
use OCA\Deck\NotFoundException; use OCA\Deck\NotFoundException;
use OCA\Deck\Notification\NotificationHelper; use OCA\Deck\Notification\NotificationHelper;
use OCA\Deck\Validators\AssignmentServiceValidator;
use OCP\AppFramework\Db\DoesNotExistException; use OCP\AppFramework\Db\DoesNotExistException;
use OCP\AppFramework\Db\Entity; use OCP\AppFramework\Db\Entity;
use OCP\AppFramework\Db\MultipleObjectsReturnedException; use OCP\AppFramework\Db\MultipleObjectsReturnedException;
@@ -76,6 +77,11 @@ class AssignmentService {
private $eventDispatcher; private $eventDispatcher;
/** @var string|null */ /** @var string|null */
private $currentUser; private $currentUser;
/**
* @var AssignmentServiceValidator
*/
private $assignmentServiceValidator;
public function __construct( public function __construct(
PermissionService $permissionService, PermissionService $permissionService,
@@ -86,8 +92,10 @@ class AssignmentService {
ActivityManager $activityManager, ActivityManager $activityManager,
ChangeHelper $changeHelper, ChangeHelper $changeHelper,
IEventDispatcher $eventDispatcher, IEventDispatcher $eventDispatcher,
AssignmentServiceValidator $assignmentServiceValidator,
$userId $userId
) { ) {
$this->assignmentServiceValidator = $assignmentServiceValidator;
$this->permissionService = $permissionService; $this->permissionService = $permissionService;
$this->cardMapper = $cardMapper; $this->cardMapper = $cardMapper;
$this->assignedUsersMapper = $assignedUsersMapper; $this->assignedUsersMapper = $assignedUsersMapper;
@@ -96,6 +104,8 @@ class AssignmentService {
$this->changeHelper = $changeHelper; $this->changeHelper = $changeHelper;
$this->activityManager = $activityManager; $this->activityManager = $activityManager;
$this->eventDispatcher = $eventDispatcher; $this->eventDispatcher = $eventDispatcher;
$this->assignmentServiceValidator->check(compact('userId'));
$this->currentUser = $userId; $this->currentUser = $userId;
} }
@@ -109,13 +119,7 @@ class AssignmentService {
* @throws DoesNotExistException * @throws DoesNotExistException
*/ */
public function assignUser($cardId, $userId, int $type = Assignment::TYPE_USER) { public function assignUser($cardId, $userId, int $type = Assignment::TYPE_USER) {
if (is_numeric($cardId) === false) { $this->assignmentServiceValidator->check(compact('cardId', 'userId'));
throw new BadRequestException('card id must be a number');
}
if ($userId === false || $userId === null) {
throw new BadRequestException('user id must be provided');
}
if ($type !== Assignment::TYPE_USER && $type !== Assignment::TYPE_GROUP) { if ($type !== Assignment::TYPE_USER && $type !== Assignment::TYPE_GROUP) {
throw new BadRequestException('Invalid type provided for assignemnt'); throw new BadRequestException('Invalid type provided for assignemnt');
@@ -168,16 +172,9 @@ class AssignmentService {
* @throws MultipleObjectsReturnedException * @throws MultipleObjectsReturnedException
*/ */
public function unassignUser($cardId, $userId, $type = 0) { public function unassignUser($cardId, $userId, $type = 0) {
$this->assignmentServiceValidator->check(compact('cardId', 'userId'));
$this->permissionService->checkPermission($this->cardMapper, $cardId, Acl::PERMISSION_EDIT); $this->permissionService->checkPermission($this->cardMapper, $cardId, Acl::PERMISSION_EDIT);
if (is_numeric($cardId) === false) {
throw new BadRequestException('card id must be a number');
}
if ($userId === false || $userId === null) {
throw new BadRequestException('user must be provided');
}
$assignments = $this->assignedUsersMapper->findAll($cardId); $assignments = $this->assignedUsersMapper->findAll($cardId);
foreach ($assignments as $assignment) { foreach ($assignments as $assignment) {
if ($assignment->getParticipant() === $userId && $assignment->getType() === $type) { if ($assignment->getParticipant() === $userId && $assignment->getType() === $type) {

View File

@@ -36,6 +36,7 @@ use OCA\Deck\NoPermissionException;
use OCA\Deck\NotFoundException; use OCA\Deck\NotFoundException;
use OCA\Deck\Cache\AttachmentCacheHelper; use OCA\Deck\Cache\AttachmentCacheHelper;
use OCA\Deck\StatusException; use OCA\Deck\StatusException;
use OCA\Deck\Validators\AttachmentServiceValidator;
use OCP\AppFramework\Db\IMapperException; use OCP\AppFramework\Db\IMapperException;
use OCP\AppFramework\Http\Response; use OCP\AppFramework\Http\Response;
use OCP\IL10N; use OCP\IL10N;
@@ -60,8 +61,11 @@ class AttachmentService {
/** @var ChangeHelper */ /** @var ChangeHelper */
private $changeHelper; private $changeHelper;
private IUserManager $userManager; private IUserManager $userManager;
/** @var AttachmentServiceValidator */
private AttachmentServiceValidator $attachmentServiceValidator;
public function __construct(AttachmentMapper $attachmentMapper, public function __construct(
AttachmentMapper $attachmentMapper,
CardMapper $cardMapper, CardMapper $cardMapper,
IUserManager $userManager, IUserManager $userManager,
ChangeHelper $changeHelper, ChangeHelper $changeHelper,
@@ -70,7 +74,9 @@ class AttachmentService {
AttachmentCacheHelper $attachmentCacheHelper, AttachmentCacheHelper $attachmentCacheHelper,
$userId, $userId,
IL10N $l10n, IL10N $l10n,
ActivityManager $activityManager) { ActivityManager $activityManager,
AttachmentServiceValidator $attachmentServiceValidator
) {
$this->attachmentMapper = $attachmentMapper; $this->attachmentMapper = $attachmentMapper;
$this->cardMapper = $cardMapper; $this->cardMapper = $cardMapper;
$this->permissionService = $permissionService; $this->permissionService = $permissionService;
@@ -81,6 +87,7 @@ class AttachmentService {
$this->activityManager = $activityManager; $this->activityManager = $activityManager;
$this->changeHelper = $changeHelper; $this->changeHelper = $changeHelper;
$this->userManager = $userManager; $this->userManager = $userManager;
$this->attachmentServiceValidator = $attachmentServiceValidator;
// Register shipped attachment services // Register shipped attachment services
// TODO: move this to a plugin based approach once we have different types of attachments // TODO: move this to a plugin based approach once we have different types of attachments
@@ -187,17 +194,7 @@ class AttachmentService {
* @throws BadRequestException * @throws BadRequestException
*/ */
public function create($cardId, $type, $data) { public function create($cardId, $type, $data) {
if (is_numeric($cardId) === false) { $this->attachmentServiceValidator->check(compact('cardId', 'type'));
throw new BadRequestException('card id must be a number');
}
if ($type === false || $type === null) {
throw new BadRequestException('type must be provided');
}
if ($data === false || $data === null) {
//throw new BadRequestException('data must be provided');
}
$this->permissionService->checkPermission($this->cardMapper, $cardId, Acl::PERMISSION_EDIT); $this->permissionService->checkPermission($this->cardMapper, $cardId, Acl::PERMISSION_EDIT);
@@ -283,6 +280,8 @@ class AttachmentService {
* @throws NoPermissionException * @throws NoPermissionException
*/ */
public function update($cardId, $attachmentId, $data, $type = 'deck_file') { public function update($cardId, $attachmentId, $data, $type = 'deck_file') {
$this->attachmentServiceValidator->check(compact('cardId', 'type', 'data'));
try { try {
$service = $this->getService($type); $service = $this->getService($type);
} catch (InvalidAttachmentType $e) { } catch (InvalidAttachmentType $e) {
@@ -304,9 +303,6 @@ class AttachmentService {
} }
} }
if ($data === false || $data === null) {
//throw new BadRequestException('data must be provided');
}
try { try {
$attachment = $this->attachmentMapper->find($attachmentId); $attachment = $this->attachmentMapper->find($attachmentId);
} catch (\Exception $e) { } catch (\Exception $e) {

View File

@@ -53,6 +53,7 @@ use OCA\Deck\Db\BoardMapper;
use OCA\Deck\Db\LabelMapper; use OCA\Deck\Db\LabelMapper;
use OCP\IUserManager; use OCP\IUserManager;
use OCA\Deck\BadRequestException; use OCA\Deck\BadRequestException;
use OCA\Deck\Validators\BoardServiceValidator;
use OCP\IURLGenerator; use OCP\IURLGenerator;
use OCP\Server; use OCP\Server;
@@ -76,6 +77,7 @@ class BoardService {
private ?array $boardsCache = null; private ?array $boardsCache = null;
private IURLGenerator $urlGenerator; private IURLGenerator $urlGenerator;
private IDBConnection $connection; private IDBConnection $connection;
private BoardServiceValidator $boardServiceValidator;
public function __construct( public function __construct(
BoardMapper $boardMapper, BoardMapper $boardMapper,
@@ -95,6 +97,7 @@ class BoardService {
ChangeHelper $changeHelper, ChangeHelper $changeHelper,
IURLGenerator $urlGenerator, IURLGenerator $urlGenerator,
IDBConnection $connection, IDBConnection $connection,
BoardServiceValidator $boardServiceValidator,
?string $userId ?string $userId
) { ) {
$this->boardMapper = $boardMapper; $this->boardMapper = $boardMapper;
@@ -115,6 +118,7 @@ class BoardService {
$this->urlGenerator = $urlGenerator; $this->urlGenerator = $urlGenerator;
$this->cardMapper = $cardMapper; $this->cardMapper = $cardMapper;
$this->connection = $connection; $this->connection = $connection;
$this->boardServiceValidator = $boardServiceValidator;
} }
/** /**
@@ -179,6 +183,7 @@ class BoardService {
* @throws BadRequestException * @throws BadRequestException
*/ */
public function find($boardId) { public function find($boardId) {
$this->boardServiceValidator->check(compact('boardId'));
if ($this->boardsCache && isset($this->boardsCache[$boardId])) { if ($this->boardsCache && isset($this->boardsCache[$boardId])) {
return $this->boardsCache[$boardId]; return $this->boardsCache[$boardId];
} }
@@ -233,9 +238,7 @@ class BoardService {
* @throws BadRequestException * @throws BadRequestException
*/ */
public function isArchived($mapper, $id) { public function isArchived($mapper, $id) {
if (is_numeric($id) === false) { $this->boardServiceValidator->check(compact('id'));
throw new BadRequestException('id must be a number');
}
try { try {
$boardId = $id; $boardId = $id;
@@ -262,13 +265,7 @@ class BoardService {
* @throws BadRequestException * @throws BadRequestException
*/ */
public function isDeleted($mapper, $id) { public function isDeleted($mapper, $id) {
if ($mapper === false || $mapper === null) { $this->boardServiceValidator->check(compact('mapper', 'id'));
throw new BadRequestException('mapper must be provided');
}
if (is_numeric($id) === false) {
throw new BadRequestException('id must be a number');
}
try { try {
$boardId = $id; $boardId = $id;
@@ -294,17 +291,7 @@ class BoardService {
* @throws BadRequestException * @throws BadRequestException
*/ */
public function create($title, $userId, $color) { public function create($title, $userId, $color) {
if ($title === false || $title === null) { $this->boardServiceValidator->check(compact('title', 'userId', 'color'));
throw new BadRequestException('title must be provided');
}
if ($userId === false || $userId === null) {
throw new BadRequestException('userId must be provided');
}
if ($color === false || $color === null) {
throw new BadRequestException('color must be provided');
}
if (!$this->permissionService->canCreate()) { if (!$this->permissionService->canCreate()) {
throw new NoPermissionException('Creating boards has been disabled for your account.'); throw new NoPermissionException('Creating boards has been disabled for your account.');
@@ -355,9 +342,7 @@ class BoardService {
* @throws BadRequestException * @throws BadRequestException
*/ */
public function delete($id) { public function delete($id) {
if (is_numeric($id) === false) { $this->boardServiceValidator->check(compact('id'));
throw new BadRequestException('board id must be a number');
}
$this->permissionService->checkPermission($this->boardMapper, $id, Acl::PERMISSION_MANAGE); $this->permissionService->checkPermission($this->boardMapper, $id, Acl::PERMISSION_MANAGE);
$board = $this->find($id); $board = $this->find($id);
@@ -380,9 +365,7 @@ class BoardService {
* @throws \OCP\AppFramework\Db\MultipleObjectsReturnedException * @throws \OCP\AppFramework\Db\MultipleObjectsReturnedException
*/ */
public function deleteUndo($id) { public function deleteUndo($id) {
if (is_numeric($id) === false) { $this->boardServiceValidator->check(compact('id'));
throw new BadRequestException('board id must be a number');
}
$this->permissionService->checkPermission($this->boardMapper, $id, Acl::PERMISSION_MANAGE); $this->permissionService->checkPermission($this->boardMapper, $id, Acl::PERMISSION_MANAGE);
$board = $this->find($id); $board = $this->find($id);
@@ -403,9 +386,7 @@ class BoardService {
* @throws BadRequestException * @throws BadRequestException
*/ */
public function deleteForce($id) { public function deleteForce($id) {
if (is_numeric($id) === false) { $this->boardServiceValidator->check(compact('id'));
throw new BadRequestException('id must be a number');
}
$this->permissionService->checkPermission($this->boardMapper, $id, Acl::PERMISSION_MANAGE); $this->permissionService->checkPermission($this->boardMapper, $id, Acl::PERMISSION_MANAGE);
$board = $this->find($id); $board = $this->find($id);
@@ -426,21 +407,7 @@ class BoardService {
* @throws BadRequestException * @throws BadRequestException
*/ */
public function update($id, $title, $color, $archived) { public function update($id, $title, $color, $archived) {
if (is_numeric($id) === false) { $this->boardServiceValidator->check(compact('id', 'title', 'color', 'archived'));
throw new BadRequestException('board id must be a number');
}
if ($title === false || $title === null) {
throw new BadRequestException('title must be provided');
}
if ($color === false || $color === null) {
throw new BadRequestException('color must be provided');
}
if (is_bool($archived) === false) {
throw new BadRequestException('archived must be a boolean');
}
$this->permissionService->checkPermission($this->boardMapper, $id, Acl::PERMISSION_MANAGE); $this->permissionService->checkPermission($this->boardMapper, $id, Acl::PERMISSION_MANAGE);
$board = $this->find($id); $board = $this->find($id);
@@ -490,29 +457,7 @@ class BoardService {
* @throws \OCA\Deck\NoPermissionException * @throws \OCA\Deck\NoPermissionException
*/ */
public function addAcl($boardId, $type, $participant, $edit, $share, $manage) { public function addAcl($boardId, $type, $participant, $edit, $share, $manage) {
if (is_numeric($boardId) === false) { $this->boardServiceValidator->check(compact('boardId', 'type', 'participant', 'edit', 'share', 'manage'));
throw new BadRequestException('board id must be a number');
}
if ($type === false || $type === null) {
throw new BadRequestException('type must be provided');
}
if ($participant === false || $participant === null) {
throw new BadRequestException('participant must be provided');
}
if ($edit === null) {
throw new BadRequestException('edit must be provided');
}
if ($share === null) {
throw new BadRequestException('share must be provided');
}
if ($manage === null) {
throw new BadRequestException('manage must be provided');
}
$this->permissionService->checkPermission($this->boardMapper, $boardId, Acl::PERMISSION_SHARE); $this->permissionService->checkPermission($this->boardMapper, $boardId, Acl::PERMISSION_SHARE);
[$edit, $share, $manage] = $this->applyPermissions($boardId, $edit, $share, $manage); [$edit, $share, $manage] = $this->applyPermissions($boardId, $edit, $share, $manage);
@@ -558,21 +503,7 @@ class BoardService {
* @throws BadRequestException * @throws BadRequestException
*/ */
public function updateAcl($id, $edit, $share, $manage) { public function updateAcl($id, $edit, $share, $manage) {
if (is_numeric($id) === false) { $this->boardServiceValidator->check(compact('id', 'edit', 'share', 'manage'));
throw new BadRequestException('id must be a number');
}
if ($edit === null) {
throw new BadRequestException('edit must be provided');
}
if ($share === null) {
throw new BadRequestException('share must be provided');
}
if ($manage === null) {
throw new BadRequestException('manage must be provided');
}
$this->permissionService->checkPermission($this->aclMapper, $id, Acl::PERMISSION_SHARE); $this->permissionService->checkPermission($this->aclMapper, $id, Acl::PERMISSION_SHARE);
@@ -636,9 +567,7 @@ class BoardService {
* @throws BadRequestException * @throws BadRequestException
*/ */
public function clone($id, $userId) { public function clone($id, $userId) {
if (is_numeric($id) === false) { $this->boardServiceValidator->check(compact('id', 'userId'));
throw new BadRequestException('board id must be a number');
}
$this->permissionService->checkPermission($this->boardMapper, $id, Acl::PERMISSION_READ); $this->permissionService->checkPermission($this->boardMapper, $id, Acl::PERMISSION_READ);

View File

@@ -43,6 +43,7 @@ use OCA\Deck\Db\BoardMapper;
use OCA\Deck\Db\LabelMapper; use OCA\Deck\Db\LabelMapper;
use OCA\Deck\StatusException; use OCA\Deck\StatusException;
use OCA\Deck\BadRequestException; use OCA\Deck\BadRequestException;
use OCA\Deck\Validators\CardServiceValidator;
use OCP\Comments\ICommentsManager; use OCP\Comments\ICommentsManager;
use OCP\EventDispatcher\IEventDispatcher; use OCP\EventDispatcher\IEventDispatcher;
use OCP\IRequest; use OCP\IRequest;
@@ -69,6 +70,7 @@ class CardService {
private IURLGenerator $urlGenerator; private IURLGenerator $urlGenerator;
private LoggerInterface $logger; private LoggerInterface $logger;
private IRequest $request; private IRequest $request;
private CardServiceValidator $cardServiceValidator;
public function __construct( public function __construct(
CardMapper $cardMapper, CardMapper $cardMapper,
@@ -88,6 +90,7 @@ class CardService {
IURLGenerator $urlGenerator, IURLGenerator $urlGenerator,
LoggerInterface $logger, LoggerInterface $logger,
IRequest $request, IRequest $request,
CardServiceValidator $cardServiceValidator,
?string $userId ?string $userId
) { ) {
$this->cardMapper = $cardMapper; $this->cardMapper = $cardMapper;
@@ -108,6 +111,7 @@ class CardService {
$this->urlGenerator = $urlGenerator; $this->urlGenerator = $urlGenerator;
$this->logger = $logger; $this->logger = $logger;
$this->request = $request; $this->request = $request;
$this->cardServiceValidator = $cardServiceValidator;
} }
public function enrich($card) { public function enrich($card) {
@@ -130,6 +134,7 @@ class CardService {
} }
public function fetchDeleted($boardId) { public function fetchDeleted($boardId) {
$this->cardServiceValidator->check(compact('boardId'));
$this->permissionService->checkPermission($this->boardMapper, $boardId, Acl::PERMISSION_READ); $this->permissionService->checkPermission($this->boardMapper, $boardId, Acl::PERMISSION_READ);
$cards = $this->cardMapper->findDeleted($boardId); $cards = $this->cardMapper->findDeleted($boardId);
foreach ($cards as $card) { foreach ($cards as $card) {
@@ -190,29 +195,7 @@ class CardService {
* @throws BadrequestException * @throws BadrequestException
*/ */
public function create($title, $stackId, $type, $order, $owner, $description = '', $duedate = null) { public function create($title, $stackId, $type, $order, $owner, $description = '', $duedate = null) {
if ($title === 'false' || $title === null) { $this->cardServiceValidator->check(compact('title', 'stackId', 'type', 'order', 'owner'));
throw new BadRequestException('title must be provided');
}
if (mb_strlen($title) > Card::TITLE_MAX_LENGTH) {
throw new BadRequestException('The title cannot exceed 255 characters');
}
if (is_numeric($stackId) === false) {
throw new BadRequestException('stack id must be a number');
}
if ($type === 'false' || $type === null) {
throw new BadRequestException('type must be provided');
}
if (is_numeric($order) === false) {
throw new BadRequestException('order must be a number');
}
if ($owner === false || $owner === null) {
throw new BadRequestException('owner must be provided');
}
$this->permissionService->checkPermission($this->stackMapper, $stackId, Acl::PERMISSION_EDIT); $this->permissionService->checkPermission($this->stackMapper, $stackId, Acl::PERMISSION_EDIT);
if ($this->boardService->isArchived($this->stackMapper, $stackId)) { if ($this->boardService->isArchived($this->stackMapper, $stackId)) {
@@ -282,29 +265,7 @@ class CardService {
* @throws BadRequestException * @throws BadRequestException
*/ */
public function update($id, $title, $stackId, $type, $owner, $description = '', $order = 0, $duedate = null, $deletedAt = null, $archived = null) { public function update($id, $title, $stackId, $type, $owner, $description = '', $order = 0, $duedate = null, $deletedAt = null, $archived = null) {
if (is_numeric($id) === false) { $this->cardServiceValidator->check(compact('id', 'title', 'stackId', 'type', 'owner', 'order'));
throw new BadRequestException('card id must be a number');
}
if ($title === false || $title === null) {
throw new BadRequestException('title must be provided');
}
if (mb_strlen($title) > Card::TITLE_MAX_LENGTH) {
throw new BadRequestException('The title cannot exceed 255 characters');
}
if (is_numeric($stackId) === false) {
throw new BadRequestException('stack id must be a number $$$');
}
if ($type === false || $type === null) {
throw new BadRequestException('type must be provided');
}
if ($owner === false || $owner === null) {
throw new BadRequestException('owner must be provided');
}
$this->permissionService->checkPermission($this->cardMapper, $id, Acl::PERMISSION_EDIT); $this->permissionService->checkPermission($this->cardMapper, $id, Acl::PERMISSION_EDIT);
$this->permissionService->checkPermission($this->stackMapper, $stackId, Acl::PERMISSION_EDIT); $this->permissionService->checkPermission($this->stackMapper, $stackId, Acl::PERMISSION_EDIT);
@@ -337,11 +298,11 @@ class CardService {
$card->setType($type); $card->setType($type);
$card->setOrder($order); $card->setOrder($order);
$card->setOwner($owner); $card->setOwner($owner);
$card->setDuedate($duedate); $card->setDuedate($duedate ? new \DateTime($duedate) : null);
$resetDuedateNotification = false; $resetDuedateNotification = false;
if ( if (
$card->getDuedate() === null || $card->getDuedate() === null ||
(new \DateTime($card->getDuedate())) != (new \DateTime($changes->getBefore()->getDuedate() ?? '')) ($card->getDuedate()) != ($changes->getBefore()->getDuedate())
) { ) {
$card->setNotified(false); $card->setNotified(false);
$resetDuedateNotification = true; $resetDuedateNotification = true;
@@ -387,17 +348,7 @@ class CardService {
* @throws BadRequestException * @throws BadRequestException
*/ */
public function rename($id, $title) { public function rename($id, $title) {
if (is_numeric($id) === false) { $this->cardServiceValidator->check(compact('id', 'title'));
throw new BadRequestException('id must be a number');
}
if ($title === false || $title === null) {
throw new BadRequestException('title must be provided');
}
if (mb_strlen($title) > Card::TITLE_MAX_LENGTH) {
throw new BadRequestException('The title cannot exceed 255 characters');
}
$this->permissionService->checkPermission($this->cardMapper, $id, Acl::PERMISSION_EDIT); $this->permissionService->checkPermission($this->cardMapper, $id, Acl::PERMISSION_EDIT);
if ($this->boardService->isArchived($this->cardMapper, $id)) { if ($this->boardService->isArchived($this->cardMapper, $id)) {
@@ -428,17 +379,8 @@ class CardService {
* @throws BadRequestException * @throws BadRequestException
*/ */
public function reorder($id, $stackId, $order) { public function reorder($id, $stackId, $order) {
if (is_numeric($id) === false) { $this->cardServiceValidator->check(compact('id', 'stackId', 'order'));
throw new BadRequestException('card id must be a number');
}
if (is_numeric($stackId) === false) {
throw new BadRequestException('stack id must be a number');
}
if (is_numeric($order) === false) {
throw new BadRequestException('order must be a number');
}
$this->permissionService->checkPermission($this->cardMapper, $id, Acl::PERMISSION_EDIT); $this->permissionService->checkPermission($this->cardMapper, $id, Acl::PERMISSION_EDIT);
$this->permissionService->checkPermission($this->stackMapper, $stackId, Acl::PERMISSION_EDIT); $this->permissionService->checkPermission($this->stackMapper, $stackId, Acl::PERMISSION_EDIT);
@@ -493,9 +435,8 @@ class CardService {
* @throws BadRequestException * @throws BadRequestException
*/ */
public function archive($id) { public function archive($id) {
if (is_numeric($id) === false) { $this->cardServiceValidator->check(compact('id'));
throw new BadRequestException('id must be a number');
}
$this->permissionService->checkPermission($this->cardMapper, $id, Acl::PERMISSION_EDIT); $this->permissionService->checkPermission($this->cardMapper, $id, Acl::PERMISSION_EDIT);
if ($this->boardService->isArchived($this->cardMapper, $id)) { if ($this->boardService->isArchived($this->cardMapper, $id)) {
@@ -523,9 +464,8 @@ class CardService {
* @throws BadRequestException * @throws BadRequestException
*/ */
public function unarchive($id) { public function unarchive($id) {
if (is_numeric($id) === false) { $this->cardServiceValidator->check(compact('id'));
throw new BadRequestException('id must be a number');
}
$this->permissionService->checkPermission($this->cardMapper, $id, Acl::PERMISSION_EDIT); $this->permissionService->checkPermission($this->cardMapper, $id, Acl::PERMISSION_EDIT);
if ($this->boardService->isArchived($this->cardMapper, $id)) { if ($this->boardService->isArchived($this->cardMapper, $id)) {
@@ -552,13 +492,8 @@ class CardService {
* @throws BadRequestException * @throws BadRequestException
*/ */
public function assignLabel($cardId, $labelId) { public function assignLabel($cardId, $labelId) {
if (is_numeric($cardId) === false) { $this->cardServiceValidator->check(compact('cardId', 'labelId'));
throw new BadRequestException('card id must be a number');
}
if (is_numeric($labelId) === false) {
throw new BadRequestException('label id must be a number');
}
$this->permissionService->checkPermission($this->cardMapper, $cardId, Acl::PERMISSION_EDIT); $this->permissionService->checkPermission($this->cardMapper, $cardId, Acl::PERMISSION_EDIT);
if ($this->boardService->isArchived($this->cardMapper, $cardId)) { if ($this->boardService->isArchived($this->cardMapper, $cardId)) {
@@ -586,13 +521,8 @@ class CardService {
* @throws BadRequestException * @throws BadRequestException
*/ */
public function removeLabel($cardId, $labelId) { public function removeLabel($cardId, $labelId) {
if (is_numeric($cardId) === false) { $this->cardServiceValidator->check(compact('cardId', 'labelId'));
throw new BadRequestException('card id must be a number');
}
if (is_numeric($labelId) === false) {
throw new BadRequestException('label id must be a number');
}
$this->permissionService->checkPermission($this->cardMapper, $cardId, Acl::PERMISSION_EDIT); $this->permissionService->checkPermission($this->cardMapper, $cardId, Acl::PERMISSION_EDIT);
if ($this->boardService->isArchived($this->cardMapper, $cardId)) { if ($this->boardService->isArchived($this->cardMapper, $cardId)) {

View File

@@ -41,6 +41,8 @@ use Throwable;
class CirclesService { class CirclesService {
private bool $circlesEnabled; private bool $circlesEnabled;
private $userCircleCache = [];
public function __construct(IAppManager $appManager) { public function __construct(IAppManager $appManager) {
$this->circlesEnabled = $appManager->isEnabledForUser('circles'); $this->circlesEnabled = $appManager->isEnabledForUser('circles');
} }
@@ -70,13 +72,24 @@ class CirclesService {
return false; return false;
} }
if (isset($this->userCircleCache[$circleId][$userId])) {
return $this->userCircleCache[$circleId][$userId];
}
try { try {
$circlesManager = Server::get(CirclesManager::class); $circlesManager = Server::get(CirclesManager::class);
$federatedUser = $circlesManager->getFederatedUser($userId, Member::TYPE_USER); $federatedUser = $circlesManager->getFederatedUser($userId, Member::TYPE_USER);
$circlesManager->startSession($federatedUser); $circlesManager->startSession($federatedUser);
$circle = $circlesManager->getCircle($circleId); $circle = $circlesManager->getCircle($circleId);
$member = $circle->getInitiator(); $member = $circle->getInitiator();
return $member !== null && $member->getLevel() >= Member::LEVEL_MEMBER; $isUserInCircle = $member !== null && $member->getLevel() >= Member::LEVEL_MEMBER;
if (!isset($this->userCircleCache[$circleId])) {
$this->userCircleCache[$circleId] = [];
}
$this->userCircleCache[$circleId][$userId] = $isUserInCircle;
return $isUserInCircle;
} catch (Throwable $e) { } catch (Throwable $e) {
} }
return false; return false;

View File

@@ -138,7 +138,7 @@ class FilesAppService implements IAttachmentService, ICustomAttachmentService {
public function extendData(Attachment $attachment) { public function extendData(Attachment $attachment) {
$userFolder = $this->rootFolder->getUserFolder($this->userId); $userFolder = $this->rootFolder->getUserFolder($this->userId);
$share = $this->shareProvider->getShareById($attachment->getId()); $share = $this->getShareForAttachment($attachment);
$files = $userFolder->getById($share->getNode()->getId()); $files = $userFolder->getById($share->getNode()->getId());
if (count($files) === 0) { if (count($files) === 0) {
return $attachment; return $attachment;
@@ -161,7 +161,7 @@ class FilesAppService implements IAttachmentService, ICustomAttachmentService {
// Problem: Folders // Problem: Folders
/** @psalm-suppress InvalidCatch */ /** @psalm-suppress InvalidCatch */
try { try {
$share = $this->shareProvider->getShareById($attachment->getId()); $share = $this->getShareForAttachment($attachment);
} catch (ShareNotFound $e) { } catch (ShareNotFound $e) {
throw new NotFoundException('File not found'); throw new NotFoundException('File not found');
} }
@@ -241,7 +241,7 @@ class FilesAppService implements IAttachmentService, ICustomAttachmentService {
} }
public function update(Attachment $attachment) { public function update(Attachment $attachment) {
$share = $this->shareProvider->getShareById($attachment->getId()); $share = $this->getShareForAttachment($attachment);
$target = $share->getNode(); $target = $share->getNode();
$file = $this->getUploadedFile(); $file = $this->getUploadedFile();
$fileName = $file['name']; $fileName = $file['name'];
@@ -258,8 +258,13 @@ class FilesAppService implements IAttachmentService, ICustomAttachmentService {
return $attachment; return $attachment;
} }
/**
* @throws NoPermissionException
* @throws NotFoundException
* @throws ShareNotFound
*/
public function delete(Attachment $attachment) { public function delete(Attachment $attachment) {
$share = $this->shareProvider->getShareById($attachment->getId()); $share = $this->getShareForAttachment($attachment);
$file = $share->getNode(); $file = $share->getNode();
$attachment->setData($file->getName()); $attachment->setData($file->getName());
@@ -282,4 +287,21 @@ class FilesAppService implements IAttachmentService, ICustomAttachmentService {
public function markAsDeleted(Attachment $attachment) { public function markAsDeleted(Attachment $attachment) {
throw new \Exception('Not implemented'); throw new \Exception('Not implemented');
} }
/**
* @throws NoPermissionException
*/
private function getShareForAttachment(Attachment $attachment): IShare {
try {
$share = $this->shareProvider->getShareById($attachment->getId());
} catch (ShareNotFound $e) {
throw new NoPermissionException('No permission to access the attachment from the card');
}
if ((int)$share->getSharedWith() !== (int)$attachment->getCardId()) {
throw new NoPermissionException('No permission to access the attachment from the card');
}
return $share;
}
} }

View File

@@ -29,6 +29,7 @@ use OCA\Deck\Db\Acl;
use OCA\Deck\Db\LabelMapper; use OCA\Deck\Db\LabelMapper;
use OCA\Deck\StatusException; use OCA\Deck\StatusException;
use OCA\Deck\BadRequestException; use OCA\Deck\BadRequestException;
use OCA\Deck\Validators\LabelServiceValidator;
class LabelService { class LabelService {
@@ -40,12 +41,21 @@ class LabelService {
private $boardService; private $boardService;
/** @var ChangeHelper */ /** @var ChangeHelper */
private $changeHelper; private $changeHelper;
/** @var LabelServiceValidator */
private LabelServiceValidator $labelServiceValidator;
public function __construct(LabelMapper $labelMapper, PermissionService $permissionService, BoardService $boardService, ChangeHelper $changeHelper) { public function __construct(
LabelMapper $labelMapper,
PermissionService $permissionService,
BoardService $boardService,
ChangeHelper $changeHelper,
LabelServiceValidator $labelServiceValidator
) {
$this->labelMapper = $labelMapper; $this->labelMapper = $labelMapper;
$this->permissionService = $permissionService; $this->permissionService = $permissionService;
$this->boardService = $boardService; $this->boardService = $boardService;
$this->changeHelper = $changeHelper; $this->changeHelper = $changeHelper;
$this->labelServiceValidator = $labelServiceValidator;
} }
/** /**
@@ -76,17 +86,7 @@ class LabelService {
* @throws BadRequestException * @throws BadRequestException
*/ */
public function create($title, $color, $boardId) { public function create($title, $color, $boardId) {
if ($title === false || $title === null) { $this->labelServiceValidator->check(compact('title', 'color', 'boardId'));
throw new BadRequestException('title must be provided');
}
if ($color === false || $color === null) {
throw new BadRequestException('color must be provided');
}
if (is_numeric($boardId) === false) {
throw new BadRequestException('board id must be a number');
}
$this->permissionService->checkPermission(null, $boardId, Acl::PERMISSION_MANAGE); $this->permissionService->checkPermission(null, $boardId, Acl::PERMISSION_MANAGE);
@@ -119,9 +119,7 @@ class LabelService {
* @throws BadRequestException * @throws BadRequestException
*/ */
public function delete($id) { public function delete($id) {
if (is_numeric($id) === false) { $this->labelServiceValidator->check(compact('id'));
throw new BadRequestException('label id must be a number');
}
$this->permissionService->checkPermission($this->labelMapper, $id, Acl::PERMISSION_MANAGE); $this->permissionService->checkPermission($this->labelMapper, $id, Acl::PERMISSION_MANAGE);
if ($this->boardService->isArchived($this->labelMapper, $id)) { if ($this->boardService->isArchived($this->labelMapper, $id)) {
@@ -144,17 +142,7 @@ class LabelService {
* @throws BadRequestException * @throws BadRequestException
*/ */
public function update($id, $title, $color) { public function update($id, $title, $color) {
if (is_numeric($id) === false) { $this->labelServiceValidator->check(compact('title', 'color', 'id'));
throw new BadRequestException('label id must be a number');
}
if ($title === false || $title === null || $title === "") {
throw new BadRequestException('title must be provided');
}
if ($color === false || $color === null) {
throw new BadRequestException('color must be provided');
}
$this->permissionService->checkPermission($this->labelMapper, $id, Acl::PERMISSION_MANAGE); $this->permissionService->checkPermission($this->labelMapper, $id, Acl::PERMISSION_MANAGE);

View File

@@ -39,6 +39,7 @@ use OCA\Deck\Db\StackMapper;
use OCA\Deck\Model\CardDetails; use OCA\Deck\Model\CardDetails;
use OCA\Deck\NoPermissionException; use OCA\Deck\NoPermissionException;
use OCA\Deck\StatusException; use OCA\Deck\StatusException;
use OCA\Deck\Validators\StackServiceValidator;
use Psr\Log\LoggerInterface; use Psr\Log\LoggerInterface;
class StackService { class StackService {
@@ -54,6 +55,7 @@ class StackService {
private ActivityManager $activityManager; private ActivityManager $activityManager;
private ChangeHelper $changeHelper; private ChangeHelper $changeHelper;
private LoggerInterface $logger; private LoggerInterface $logger;
private StackServiceValidator $stackServiceValidator;
public function __construct( public function __construct(
StackMapper $stackMapper, StackMapper $stackMapper,
@@ -67,7 +69,8 @@ class StackService {
AttachmentService $attachmentService, AttachmentService $attachmentService,
ActivityManager $activityManager, ActivityManager $activityManager,
ChangeHelper $changeHelper, ChangeHelper $changeHelper,
LoggerInterface $logger LoggerInterface $logger,
StackServiceValidator $stackServiceValidator
) { ) {
$this->stackMapper = $stackMapper; $this->stackMapper = $stackMapper;
$this->boardMapper = $boardMapper; $this->boardMapper = $boardMapper;
@@ -81,6 +84,7 @@ class StackService {
$this->activityManager = $activityManager; $this->activityManager = $activityManager;
$this->changeHelper = $changeHelper; $this->changeHelper = $changeHelper;
$this->logger = $logger; $this->logger = $logger;
$this->stackServiceValidator = $stackServiceValidator;
} }
private function enrichStackWithCards($stack, $since = -1) { private function enrichStackWithCards($stack, $since = -1) {
@@ -218,17 +222,7 @@ class StackService {
* @throws BadRequestException * @throws BadRequestException
*/ */
public function create($title, $boardId, $order) { public function create($title, $boardId, $order) {
if ($title === false || $title === null || mb_strlen($title) === 0) { $this->stackServiceValidator->check(compact('title', 'boardId', 'order'));
throw new BadRequestException('title must be provided');
}
if (is_numeric($order) === false) {
throw new BadRequestException('order must be a number');
}
if (is_numeric($boardId) === false) {
throw new BadRequestException('board id must be a number');
}
$this->permissionService->checkPermission(null, $boardId, Acl::PERMISSION_MANAGE); $this->permissionService->checkPermission(null, $boardId, Acl::PERMISSION_MANAGE);
if ($this->boardService->isArchived(null, $boardId)) { if ($this->boardService->isArchived(null, $boardId)) {
@@ -291,21 +285,7 @@ class StackService {
* @throws BadRequestException * @throws BadRequestException
*/ */
public function update($id, $title, $boardId, $order, $deletedAt) { public function update($id, $title, $boardId, $order, $deletedAt) {
if (is_numeric($id) === false) { $this->stackServiceValidator->check(compact('id', 'title', 'boardId', 'order'));
throw new BadRequestException('stack id must be a number');
}
if ($title === false || $title === null || mb_strlen($title) === 0) {
throw new BadRequestException('title must be provided');
}
if (is_numeric($boardId) === false) {
throw new BadRequestException('board id must be a number');
}
if (is_numeric($order) === false) {
throw new BadRequestException('order must be a number');
}
$this->permissionService->checkPermission($this->stackMapper, $id, Acl::PERMISSION_MANAGE); $this->permissionService->checkPermission($this->stackMapper, $id, Acl::PERMISSION_MANAGE);
$this->permissionService->checkPermission($this->boardMapper, $boardId, Acl::PERMISSION_MANAGE); $this->permissionService->checkPermission($this->boardMapper, $boardId, Acl::PERMISSION_MANAGE);
@@ -341,17 +321,12 @@ class StackService {
* @throws BadRequestException * @throws BadRequestException
*/ */
public function reorder($id, $order) { public function reorder($id, $order) {
if (is_numeric($id) === false) { $this->stackServiceValidator->check(compact('id', 'order'));
throw new BadRquestException('id must be a number');
}
if ($order === false || $order === null) {
throw new BadRequestException('order must be provided');
}
$this->permissionService->checkPermission($this->stackMapper, $id, Acl::PERMISSION_MANAGE); $this->permissionService->checkPermission($this->stackMapper, $id, Acl::PERMISSION_MANAGE);
$stackToSort = $this->stackMapper->find($id); $stackToSort = $this->stackMapper->find($id);
$stacks = $this->stackMapper->findAll($stackToSort->getBoardId()); $stacks = $this->stackMapper->findAll($stackToSort->getBoardId());
usort($stacks, static fn (Stack $stackA, Stack $stackB) => $stackA->getOrder() - $stackB->getOrder());
$result = []; $result = [];
$i = 0; $i = 0;
foreach ($stacks as $stack) { foreach ($stacks as $stack) {

View File

@@ -0,0 +1,37 @@
<?php
/**
* @copyright Copyright (c) 2016 Julius Härtl <jus@bitgrid.net>
*
* @author Julius Härtl <jus@bitgrid.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @author Luka Trovic <luka.trovic@nextcloud.com>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
declare(strict_types=1);
namespace OCA\Deck\Validators;
class AssignmentServiceValidator extends BaseValidator {
public function rules() {
return [
'cardId' => ['numeric'],
'userId' => ['not_empty', 'not_null', 'not_false', 'max:64'],
];
}
}

View File

@@ -0,0 +1,37 @@
<?php
/**
* @copyright Copyright (c) 2016 Julius Härtl <jus@bitgrid.net>
*
* @author Julius Härtl <jus@bitgrid.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @author Luka Trovic <luka.trovic@nextcloud.com>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
declare(strict_types=1);
namespace OCA\Deck\Validators;
class AttachmentServiceValidator extends BaseValidator {
public function rules() {
return [
'cardId' => ['numeric'],
'type' => ['not_empty', 'not_null', 'not_false'],
'data' => ['not_empty', 'not_null', 'not_false', 'max:255'],
];
}
}

View File

@@ -0,0 +1,182 @@
<?php
/**
* @copyright Copyright (c) 2016 Julius Härtl <jus@bitgrid.net>
*
* @author Julius Härtl <jus@bitgrid.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @author Luka Trovic <luka.trovic@nextcloud.com>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
declare(strict_types=1);
namespace OCA\Deck\Validators;
use Exception;
use OCA\Deck\BadRequestException;
abstract class BaseValidator {
/**
* @return array
*/
abstract public function rules();
/**
* Validate given entries
*
* @param array $data
* @return void
* @throws BadRequestException
*/
private function validate($data) {
$rules = $this->rules();
foreach ($data as $field => $value) {
$field_rule = $rules[$field];
if (is_array($field_rule)) {
foreach ($field_rule as $rule) {
// The format for specifying validation rules and parameters follows an
// easy {rule}:{parameters} formatting convention. For instance the
// rule "Max:3" states that the value may only be three letters.
if (strpos($rule, ':') !== false) {
[$rule, $parameter] = explode(':', $rule, 2);
if (!$this->{$rule}($value, $parameter)) {
throw new BadRequestException(
$this->getErrorMessage($rule, $field, $parameter));
}
} else {
if (!$this->{$rule}($value)) {
throw new BadRequestException(
$field . ' must be provided and must be '. str_replace("_", " ", $rule));
}
}
}
}
if (is_callable($field_rule) && !$field_rule($value)) {
throw new BadRequestException($field . ' must be provided');
}
}
}
/**
* @param array $data
* @return void
* @throws BadRequestException
*/
public function check(array $data) {
$this->validate($data);
}
/**
* @param $value
* @return bool
*/
private function numeric($value): bool {
return is_numeric($value);
}
/**
* @param $value
* @return bool
*/
private function bool($value): bool {
return is_bool($value);
}
/**
* @param $value
* @return bool
*/
private function not_false($value): bool {
return ($value !== false) && ($value !== 'false');
}
/**
* @param $value
* @return bool
*/
private function not_null($value): bool {
return !is_null($value);
}
/**
* @param $value
* @return bool
*/
private function not_empty($value): bool {
return !empty($value);
}
/**
* @throws Exception
*/
private function max($value, $limit): bool {
if (!$limit || !is_numeric($limit)) {
throw new Exception("Validation rule max requires at least 1 parameter. " . json_encode($limit));
}
return $this->getSize($value) <= $limit;
}
/**
* @throws Exception
*/
private function min($value, $limit): bool {
if (!$limit || !is_numeric($limit)) {
throw new Exception("Validation rule max requires at least 1 parameter.");
}
return $this->getSize($value) >= $limit;
}
/**
* Get the size of an attribute.
*
* @param mixed $value
* @return int
*/
protected function getSize($value): int {
// This method will determine if the attribute is a number or string and
// return the proper size accordingly. If it is a number, then number itself
// is the size.
if (is_int($value)) {
return $value;
} elseif (is_array($value)) {
return count($value);
}
return mb_strlen($value ?? '');
}
/**
* @param $rule
* @param $field
* @param $parameter
* @return string
*/
protected function getErrorMessage($rule, $field, $parameter = null): string {
if (in_array($rule, ['max', 'min'])) {
return $rule === 'max'
? $field . ' cannot be longer than '. $parameter . ' characters '
: $field . ' must be at least '. $parameter . ' characters long ';
}
return $field . ' must be provided and must be '. str_replace("_", " ", $rule);
}
}

View File

@@ -0,0 +1,47 @@
<?php
/**
* @copyright Copyright (c) 2016 Julius Härtl <jus@bitgrid.net>
*
* @author Julius Härtl <jus@bitgrid.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @author Luka Trovic <luka.trovic@nextcloud.com>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
declare(strict_types=1);
namespace OCA\Deck\Validators;
class BoardServiceValidator extends BaseValidator {
public function rules() {
return [
'id' => ['numeric'],
'boardId' => ['numeric'],
'type' => ['numeric'],
'mapper' => ['not_empty', 'not_null', 'not_false'],
'title' => ['not_empty', 'not_null', 'not_false', 'max:100'],
'userId' => ['not_empty', 'not_null', 'not_false', 'max:64'],
'color' => ['not_empty', 'not_null', 'not_false', 'max:6'],
'participant' => ['not_empty', 'not_null', 'not_false', 'max:64'],
'edit' => ['not_null'],
'share' => ['not_null'],
'manage' => ['not_null'],
'archived' => ['bool']
];
}
}

View File

@@ -0,0 +1,44 @@
<?php
/**
* @copyright Copyright (c) 2016 Julius Härtl <jus@bitgrid.net>
*
* @author Julius Härtl <jus@bitgrid.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @author Luka Trovic <luka.trovic@nextcloud.com>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
declare(strict_types=1);
namespace OCA\Deck\Validators;
class CardServiceValidator extends BaseValidator {
public function rules() {
return [
'id' => ['numeric'],
'title' => ['not_empty', 'not_null', 'not_false', 'max:255'],
'cardId' => ['numeric'],
'stackId' => ['numeric'],
'boardId' => ['numeric'],
'labelId' => ['numeric'],
'type' => ['not_empty', 'not_null', 'not_false', 'max:64'],
'order' => ['numeric'],
'owner' => ['not_empty', 'not_null', 'not_false', 'max:64'],
];
}
}

View File

@@ -0,0 +1,39 @@
<?php
/**
* @copyright Copyright (c) 2016 Julius Härtl <jus@bitgrid.net>
*
* @author Julius Härtl <jus@bitgrid.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @author Luka Trovic <luka.trovic@nextcloud.com>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
declare(strict_types=1);
namespace OCA\Deck\Validators;
class LabelServiceValidator extends BaseValidator {
public function rules() {
return [
'id' => ['numeric'],
'title' => ['not_empty', 'not_null', 'not_false', 'max:100'],
'boardId' => ['numeric', 'not_null'],
'color' => ['not_empty', 'not_null', 'not_false', 'max:6']
];
}
}

View File

@@ -0,0 +1,39 @@
<?php
/**
* @copyright Copyright (c) 2016 Julius Härtl <jus@bitgrid.net>
*
* @author Julius Härtl <jus@bitgrid.net>
* @author Maxence Lange <maxence@artificial-owl.com>
* @author Luka Trovic <luka.trovic@nextcloud.com>
*
* @license GNU AGPL version 3 or any later version
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
declare(strict_types=1);
namespace OCA\Deck\Validators;
class StackServiceValidator extends BaseValidator {
public function rules() {
return [
'id' => ['numeric'],
'title' => ['not_empty', 'not_null', 'not_false', 'max:100'],
'boardId' => ['numeric', 'not_null'],
'order' => ['numeric', 'not_null']
];
}
}

4
package-lock.json generated
View File

@@ -1,12 +1,12 @@
{ {
"name": "deck", "name": "deck",
"version": "1.8.0-beta.1", "version": "1.8.1",
"lockfileVersion": 2, "lockfileVersion": 2,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "deck", "name": "deck",
"version": "1.8.0-beta.1", "version": "1.8.0",
"license": "agpl", "license": "agpl",
"dependencies": { "dependencies": {
"@babel/polyfill": "^7.12.1", "@babel/polyfill": "^7.12.1",

View File

@@ -1,7 +1,7 @@
{ {
"name": "deck", "name": "deck",
"description": "", "description": "",
"version": "1.8.0-beta.1", "version": "1.8.2",
"authors": [ "authors": [
{ {
"name": "Julius Härtl", "name": "Julius Härtl",

View File

@@ -41,7 +41,7 @@
</NcModal> </NcModal>
</template> </template>
<script> <script>
import NcModal from '@nextcloud/vue/dist/Components/NcModal' import { NcModal } from '@nextcloud/vue'
import axios from '@nextcloud/axios' import axios from '@nextcloud/axios'
import { generateUrl } from '@nextcloud/router' import { generateUrl } from '@nextcloud/router'

View File

@@ -92,9 +92,7 @@
<script> <script>
import { generateUrl } from '@nextcloud/router' import { generateUrl } from '@nextcloud/router'
import NcModal from '@nextcloud/vue/dist/Components/NcModal.js' import { NcModal, NcMultiselect, NcEmptyContent } from '@nextcloud/vue'
import NcMultiselect from '@nextcloud/vue/dist/Components/NcMultiselect.js'
import NcEmptyContent from '@nextcloud/vue/dist/Components/NcEmptyContent.js'
import axios from '@nextcloud/axios' import axios from '@nextcloud/axios'
import { CardApi } from './services/CardApi.js' import { CardApi } from './services/CardApi.js'

View File

@@ -62,8 +62,7 @@
<script> <script>
import { generateUrl } from '@nextcloud/router' import { generateUrl } from '@nextcloud/router'
import NcModal from '@nextcloud/vue/dist/Components/NcModal' import { NcModal, NcMultiselect } from '@nextcloud/vue'
import NcMultiselect from '@nextcloud/vue/dist/Components/NcMultiselect'
import axios from '@nextcloud/axios' import axios from '@nextcloud/axios'
export default { export default {

View File

@@ -41,9 +41,9 @@
<span v-if="acl.type===7">{{ t('deck', '(Circle)') }}</span> <span v-if="acl.type===7">{{ t('deck', '(Circle)') }}</span>
</span> </span>
<ActionCheckbox v-if="!(isCurrentUser(acl.participant.uid) && acl.type === 0) && (canManage || (canEdit && canShare))" :checked="acl.permissionEdit" @change="clickEditAcl(acl)"> <NcActionCheckbox v-if="!(isCurrentUser(acl.participant.uid) && acl.type === 0) && (canManage || (canEdit && canShare))" :checked="acl.permissionEdit" @change="clickEditAcl(acl)">
{{ t('deck', 'Can edit') }} {{ t('deck', 'Can edit') }}
</ActionCheckbox> </NcActionCheckbox>
<NcActions v-if="!(isCurrentUser(acl.participant.uid) && acl.type === 0)" :force-menu="true"> <NcActions v-if="!(isCurrentUser(acl.participant.uid) && acl.type === 0)" :force-menu="true">
<ActionCheckbox v-if="canManage || canShare" :checked="acl.permissionShare" @change="clickShareAcl(acl)"> <ActionCheckbox v-if="canManage || canShare" :checked="acl.permissionShare" @change="clickShareAcl(acl)">
{{ t('deck', 'Can share') }} {{ t('deck', 'Can share') }}
@@ -73,7 +73,7 @@
</template> </template>
<script> <script>
import { NcAvatar, NcMultiselect, NcActions, NcActionButton, ActionCheckbox, NcRelatedResourcesPanel } from '@nextcloud/vue' import { NcAvatar, NcMultiselect, NcActions, NcActionButton, NcActionCheckbox, NcRelatedResourcesPanel } from '@nextcloud/vue'
import { CollectionList } from 'nextcloud-vue-collections' import { CollectionList } from 'nextcloud-vue-collections'
import { mapGetters, mapState } from 'vuex' import { mapGetters, mapState } from 'vuex'
import { getCurrentUser } from '@nextcloud/auth' import { getCurrentUser } from '@nextcloud/auth'
@@ -87,7 +87,7 @@ export default {
NcAvatar, NcAvatar,
NcActions, NcActions,
NcActionButton, NcActionButton,
ActionCheckbox, NcActionCheckbox,
NcMultiselect, NcMultiselect,
CollectionList, CollectionList,
NcRelatedResourcesPanel, NcRelatedResourcesPanel,

View File

@@ -76,15 +76,15 @@
</NcActionButton> </NcActionButton>
</NcActions> </NcActions>
<NcActions v-if="removable && !isReadOnly" :force-menu="true"> <NcActions v-if="removable && !isReadOnly" :force-menu="true">
<ActionLink v-if="attachment.extendedData.fileid" icon="icon-folder" :href="internalLink(attachment)"> <NcActionLink v-if="attachment.extendedData.fileid" icon="icon-folder" :href="internalLink(attachment)">
{{ t('deck', 'Show in Files') }} {{ t('deck', 'Show in Files') }}
</ActionLink> </NcActionLink>
<ActionLink v-if="attachment.extendedData.fileid" <NcActionLink v-if="attachment.extendedData.fileid"
icon="icon-download" icon="icon-download"
:href="downloadLink(attachment)" :href="downloadLink(attachment)"
download> download>
{{ t('deck', 'Download') }} {{ t('deck', 'Download') }}
</ActionLink> </NcActionLink>
<NcActionButton v-if="attachment.extendedData.fileid && !isReadOnly" icon="icon-delete" @click="unshareAttachment(attachment)"> <NcActionButton v-if="attachment.extendedData.fileid && !isReadOnly" icon="icon-delete" @click="unshareAttachment(attachment)">
{{ t('deck', 'Remove attachment') }} {{ t('deck', 'Remove attachment') }}
</NcActionButton> </NcActionButton>
@@ -103,7 +103,7 @@
<script> <script>
import axios from '@nextcloud/axios' import axios from '@nextcloud/axios'
import { NcActions, NcActionButton, ActionLink } from '@nextcloud/vue' import { NcActions, NcActionButton, NcActionLink } from '@nextcloud/vue'
import AttachmentDragAndDrop from '../AttachmentDragAndDrop.vue' import AttachmentDragAndDrop from '../AttachmentDragAndDrop.vue'
import relativeDate from '../../mixins/relativeDate.js' import relativeDate from '../../mixins/relativeDate.js'
import { formatFileSize } from '@nextcloud/files' import { formatFileSize } from '@nextcloud/files'
@@ -127,7 +127,7 @@ export default {
components: { components: {
NcActions, NcActions,
NcActionButton, NcActionButton,
ActionLink, NcActionLink,
AttachmentDragAndDrop, AttachmentDragAndDrop,
}, },
mixins: [relativeDate, attachmentUpload], mixins: [relativeDate, attachmentUpload],
@@ -173,7 +173,7 @@ export default {
} }
}, },
attachmentPreview() { attachmentPreview() {
return (attachment) => (attachment.extendedData.fileid ? generateUrl(`/core/preview?fileId=${attachment.extendedData.fileid}&x=64&y=64&a=true`) : null) return (attachment) => (attachment.extendedData.fileid ? generateUrl(`/core/preview?fileId=${attachment.extendedData.fileid}&x=64&y=64`) : null)
}, },
attachmentUrl() { attachmentUrl() {
return (attachment) => generateUrl(`/apps/deck/cards/${attachment.cardId}/attachment/${attachment.id}`) return (attachment) => generateUrl(`/apps/deck/cards/${attachment.cardId}/attachment/${attachment.id}`)

View File

@@ -273,7 +273,7 @@ export default {
} }
&::v-deep input { &::v-deep input {
min-height: auto; height: auto;
} }
&::v-deep a { &::v-deep a {

View File

@@ -36,7 +36,7 @@
<span>{{ checkListCheckedCount }}/{{ checkListCount }}</span> <span>{{ checkListCheckedCount }}/{{ checkListCount }}</span>
</div> </div>
<TextIcon v-else-if="card.description.trim() && checkListCount == 0" :size="16" decorative /> <TextIcon v-else-if="card.description && card.description.trim() && checkListCount == 0" :size="16" decorative />
<div v-if="card.attachmentCount > 0" class="icon-badge"> <div v-if="card.attachmentCount > 0" class="icon-badge">
<AttachmentIcon :size="16" /> <AttachmentIcon :size="16" />

View File

@@ -55,6 +55,7 @@
<input v-model="copiedCard.title" <input v-model="copiedCard.title"
v-focus v-focus
type="text" type="text"
autocomplete="off"
required required
pattern=".*\S+.*"> pattern=".*\S+.*">
<input type="submit" value="" class="icon-confirm"> <input type="submit" value="" class="icon-confirm">

View File

@@ -70,9 +70,9 @@ export default {
startCreateBoard(e) { startCreateBoard(e) {
this.editing = true this.editing = true
}, },
createBoard(e) { async createBoard(e) {
const title = e.currentTarget.childNodes[0].value const title = e.currentTarget.childNodes[0].value
this.$store.dispatch('createBoard', { await this.$store.dispatch('createBoard', {
title, title,
color: this.color.substring(1), color: this.color.substring(1),
}) })

View File

@@ -20,7 +20,7 @@
*/ */
import { registerWidget } from '@nextcloud/vue-richtext' import { registerWidget } from '@nextcloud/vue-richtext'
import Tooltip from '@nextcloud/vue/dist/Directives/Tooltip.js' import { Tooltip } from '@nextcloud/vue'
import Vue from 'vue' import Vue from 'vue'
import CardReferenceWidget from './views/CardReferenceWidget.vue' import CardReferenceWidget from './views/CardReferenceWidget.vue'
@@ -36,7 +36,6 @@ registerWidget('deck-card', (el, { richObjectType, richObject, accessible }) =>
// trick to change the wrapper element size, otherwise it always is 100% // trick to change the wrapper element size, otherwise it always is 100%
// which is not very nice with a simple card // which is not very nice with a simple card
el.parentNode.style['max-width'] = '400px' el.parentNode.style['max-width'] = '400px'
el.parentNode.style['min-width'] = '200px'
el.parentNode.style['margin-left'] = '0' el.parentNode.style['margin-left'] = '0'
el.parentNode.style['margin-right'] = '0' el.parentNode.style['margin-right'] = '0'

View File

@@ -384,11 +384,13 @@ export default new Vuex.Store({
const storedBoard = await apiClient.updateBoard(board) const storedBoard = await apiClient.updateBoard(board)
commit('addBoard', storedBoard) commit('addBoard', storedBoard)
}, },
createBoard({ commit }, boardData) { async createBoard({ commit }, boardData) {
apiClient.createBoard(boardData) try {
.then((board) => { const board = await apiClient.createBoard(boardData)
commit('addBoard', board) commit('addBoard', board)
}) } catch (err) {
return err
}
}, },
async cloneBoard({ commit }, boardData) { async cloneBoard({ commit }, boardData) {
try { try {

View File

@@ -62,9 +62,14 @@
<div class="line description-assignees"> <div class="line description-assignees">
<TextIcon v-if="card.description" :size="20" class="icon" /> <TextIcon v-if="card.description" :size="20" class="icon" />
<div v-if="card.description" <div v-if="card.description"
class="description" :class="{
:title="card.description"> 'description': true,
{{ card.description }} 'short-description': shortDescription,
}">
<RichText v-tooltip.top="{ content: shortDescription ? t('deck', 'Click to expand description') : undefined }"
:text="card.description"
:use-markdown="true"
@click.native="shortDescription = !shortDescription" />
</div> </div>
<div v-if="card.assignedUsers .length > 0" <div v-if="card.assignedUsers .length > 0"
class="spacer" /> class="spacer" />
@@ -83,6 +88,7 @@ import DeckIcon from '../components/icons/DeckIcon.vue'
import AvatarList from '../components/cards/AvatarList.vue' import AvatarList from '../components/cards/AvatarList.vue'
import labelStyle from '../mixins/labelStyle.js' import labelStyle from '../mixins/labelStyle.js'
import { RichText } from '@nextcloud/vue-richtext'
import moment from '@nextcloud/moment' import moment from '@nextcloud/moment'
import { generateUrl } from '@nextcloud/router' import { generateUrl } from '@nextcloud/router'
@@ -94,6 +100,7 @@ export default {
DeckIcon, DeckIcon,
CalendarBlankIcon, CalendarBlankIcon,
TextIcon, TextIcon,
RichText,
}, },
mixins: [labelStyle], mixins: [labelStyle],
@@ -115,6 +122,7 @@ export default {
data() { data() {
return { return {
shortDescription: true,
} }
}, },
@@ -171,11 +179,17 @@ export default {
.deck-card-reference { .deck-card-reference {
width: 100%; width: 100%;
// needed for the specific case of Text
.editor__content & {
width: calc(100% - 24px);
}
white-space: normal; white-space: normal;
padding: 12px; padding: 12px;
.link { .link {
text-decoration: underline; text-decoration: underline;
color: var(--color-main-text) !important;
padding: 0 !important;
} }
.line { .line {
@@ -201,13 +215,22 @@ export default {
.description-assignees { .description-assignees {
width: 100%; width: 100%;
display: flex; display: flex;
align-items: center; align-items: start;
.icon {
align-self: start;
margin-top: 8px;
}
.description { .description {
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
margin-right: 8px; margin-right: 8px;
padding-top: 6px;
max-height: 250px;
overflow: scroll;
&.short-description {
max-height: 25px;
overflow: hidden;
}
} }
.card-assignees { .card-assignees {

View File

@@ -61,13 +61,12 @@
<script> <script>
import PlusIcon from 'vue-material-design-icons/Plus.vue' import PlusIcon from 'vue-material-design-icons/Plus.vue'
import { NcDashboardWidget } from '@nextcloud/vue' import { NcButton, NcDashboardWidget } from '@nextcloud/vue'
import { mapGetters } from 'vuex' import { mapGetters } from 'vuex'
import labelStyle from './../mixins/labelStyle.js' import labelStyle from './../mixins/labelStyle.js'
import DueDate from '../components/cards/badges/DueDate.vue' import DueDate from '../components/cards/badges/DueDate.vue'
import { generateUrl } from '@nextcloud/router' import { generateUrl } from '@nextcloud/router'
import CardCreateDialog from '../CardCreateDialog.vue' import CardCreateDialog from '../CardCreateDialog.vue'
import NcButton from '@nextcloud/vue/dist/Components/NcButton.js'
export default { export default {
name: 'Dashboard', name: 'Dashboard',

View File

@@ -9,4 +9,5 @@ default:
- RequestContext - RequestContext
- BoardContext - BoardContext
- CommentContext - CommentContext
- AttachmentContext
- SearchContext - SearchContext

View File

@@ -0,0 +1,90 @@
<?php
use Behat\Behat\Context\Context;
use Behat\Behat\Hook\Scope\BeforeScenarioScope;
use PHPUnit\Framework\Assert;
require_once __DIR__ . '/../../vendor/autoload.php';
class AttachmentContext implements Context {
use RequestTrait;
/** @var BoardContext */
protected $boardContext;
/** @var ServerContext */
private $serverContext;
protected $lastAttachment = null;
protected array $rememberedAttachments = [];
/** @BeforeScenario */
public function gatherContexts(BeforeScenarioScope $scope) {
$environment = $scope->getEnvironment();
$this->boardContext = $environment->getContext('BoardContext');
$this->serverContext = $environment->getContext('ServerContext');
}
public function delete(int $cardId, int $attachmentId) {
$this->requestContext->sendPlainRequest('DELETE', '/index.php/apps/deck/cards/' . $cardId . '/attachment/file:' . $attachmentId);
$response = $this->requestContext->getResponseBodyFromJson();
}
/**
* @When deleting the attachment :attachmentReference for the card :cardReference
*/
public function deletingTheAttachmentForTheCard($attachmentReference, $cardReference) {
$cardId = $this->boardContext->getRememberedCard($cardReference)['id'] ?? null;
$attachmentId = $this->getRememberedAttachment($attachmentReference)['id'] ?? null;
Assert::assertNotNull($cardId, 'Card needs to be available');
Assert::assertNotNull($attachmentId, 'Attachment needs to be available');
$this->delete($cardId, $attachmentId);
}
/**
* @Given /^uploads an attachment to the last used card$/
*/
public function uploadsAnAttachmentToTheLastUsedCard() {
$cardId = $this->boardContext->getLastUsedCard()['id'] ?? null;
Assert::assertNotNull($cardId, 'Card data is not set');
$this->requestContext->sendPlainRequest('POST', '/index.php/apps/deck/cards/' . $cardId . '/attachment', [
'multipart' => [
[
'name' => 'file',
'contents' => 'Example content',
'filename' => 'test.txt',
],
[
'name' => 'type',
'contents' => 'file'
]
]
]);
}
/**
* @Given remember the last attachment as :arg1
*/
public function rememberTheLastAttachmentAs($arg1) {
$this->requestContext->theResponseShouldHaveStatusCode(200);
$this->lastAttachment = $this->requestContext->getResponseBodyFromJson();
$this->rememberedAttachments[$arg1] = $this->lastAttachment;
}
public function getRememberedAttachment($name) {
return $this->rememberedAttachments[$name] ?? null;
}
/**
* @When fetching the attachment :attachmentReference for the card :cardReference
*/
public function fetchingTheAttachmentForTheCard($attachmentReference, $cardReference) {
$cardId = $this->boardContext->getRememberedCard($cardReference)['id'] ?? null;
$attachmentId = $this->getRememberedAttachment($attachmentReference)['id'] ?? null;
Assert::assertNotNull($cardId, 'Card needs to be available');
Assert::assertNotNull($attachmentId, 'Attachment needs to be available');
$this->requestContext->sendPlainRequest('GET', '/index.php/apps/deck/cards/' . $cardId . '/attachment/file:' . $attachmentId);
}
}

View File

@@ -16,6 +16,7 @@ class BoardContext implements Context {
private $stack = null; private $stack = null;
/** @var array last card response */ /** @var array last card response */
private $card = null; private $card = null;
private array $storedCards = [];
/** @var ServerContext */ /** @var ServerContext */
private $serverContext; private $serverContext;
@@ -31,6 +32,15 @@ class BoardContext implements Context {
return $this->card; return $this->card;
} }
/**
* @Given /^creates a board with example content$/
*/
public function createExampleContent() {
$this->createsABoardNamedWithColor('Example board', 'ff0000');
$this->createAStackNamed('ToDo');
$this->createACardNamed('My example card');
}
/** /**
* @Given /^creates a board named "([^"]*)" with color "([^"]*)"$/ * @Given /^creates a board named "([^"]*)" with color "([^"]*)"$/
*/ */
@@ -232,4 +242,15 @@ class BoardContext implements Context {
$this->requestContext->sendJSONrequest('POST', '/index.php/apps/deck/cards/' . $this->card['id'] .'/label/' . $label['id']); $this->requestContext->sendJSONrequest('POST', '/index.php/apps/deck/cards/' . $this->card['id'] .'/label/' . $label['id']);
$this->requestContext->getResponse()->getBody()->seek(0); $this->requestContext->getResponse()->getBody()->seek(0);
} }
/**
* @When remember the last card as :arg1
*/
public function rememberTheLastCardAs($arg1) {
$this->storedCards[$arg1] = $this->getLastUsedCard();
}
public function getRememberedCard($arg1) {
return $this->storedCards[$arg1] ?? null;
}
} }

View File

@@ -134,7 +134,36 @@ class RequestContext implements Context {
} }
} }
public function sendPlainRequest(string $method, $uri = '', array $options = []) {
$client = new Client;
try {
$this->response = $client->request(
$method,
rtrim($this->serverContext->getBaseUrl(), '/') . '/' . ltrim($uri, '/'),
array_merge(
[
'cookies' => $this->serverContext->getCookieJar(),
'headers' => [
'requesttoken' => $this->serverContext->getReqestToken(),
'OCS-APIREQUEST' => 'true',
'Accept' => 'application/json'
]
],
$options,
)
);
} catch (ClientException $e) {
$this->response = $e->getResponse();
}
}
public function getResponse(): ResponseInterface { public function getResponse(): ResponseInterface {
return $this->response; return $this->response;
} }
public function getResponseBodyFromJson() {
$this->getResponse()->getBody()->seek(0);
return json_decode((string)$this->getResponse()->getBody(), true);
}
} }

View File

@@ -40,6 +40,7 @@ class ServerContext implements Context {
} }
public function getCookieJar(): CookieJar { public function getCookieJar(): CookieJar {
echo $this->currentUser;
return $this->cookieJar; return $this->cookieJar;
} }

View File

@@ -13,3 +13,22 @@ Feature: decks
|key|value| |key|value|
|title|MyBoard| |title|MyBoard|
|color|000000| |color|000000|
Scenario: Fail to create a board with invalid parameters
Given acting as user "user0"
When creates a board named "This is a very ong name that exceeds the maximum length of a deck board created which is longer than 100 characters" with color "ff0000"
Then the response should have a status code 400
When creates a board named "Example board" with color "invalid"
Then the response should have a status code 400
Scenario: Fail to create a list with invalid parameters
Given acting as user "user0"
And creates a board named "MyBoard" with color "000000"
When create a stack named "This is a very ong name that exceeds the maximum length of a deck board created which is longer than 100 characters"
Then the response should have a status code 400
Scenario: Fail to create a card with invalid parameters
Given acting as user "user0"
And creates a board named "MyBoard" with color "000000"
And create a stack named "ToDo"
When create a card named "This is a very ong name that exceeds the maximum length of a deck board created which is longer than 255 characters This is a very ong name that exceeds the maximum length of a deck board created which is longer than 255 characters This is a very ong name that exceeds the maximum length of a deck board created which is longer than 255 characters"

View File

@@ -135,3 +135,31 @@ Feature: File sharing
When Deleting last share When Deleting last share
And as "user2" the file "/Deck/user0-file2.txt" does not exist And as "user2" the file "/Deck/user0-file2.txt" does not exist
And as "user3" the file "/Deck/user0-file2.txt" does not exist And as "user3" the file "/Deck/user0-file2.txt" does not exist
Scenario: Remove a share through the deck API
Given acting as user "user0"
When creates a board with example content
And remember the last card as "user0-card"
And uploads an attachment to the last used card
And remember the last attachment as "user0-attachment"
Given acting as user "user1"
When creates a board with example content
And remember the last card as "user1-card"
And uploads an attachment to the last used card
And remember the last attachment as "user1-attachment"
Given acting as user "user0"
When fetching the attachment "user1-attachment" for the card "user0-card"
Then the response should have a status code 403
When deleting the attachment "user1-attachment" for the card "user0-card"
Then the response should have a status code 403
When fetching the attachment "user0-attachment" for the card "user0-card"
Then the response should have a status code 200
When deleting the attachment "user0-attachment" for the card "user0-card"
Then the response should have a status code 200
Given acting as user "user1"
When deleting the attachment "user1-attachment" for the card "user1-card"
Then the response should have a status code 200

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<files psalm-version="4.23.0@f1fe6ff483bf325c803df9f510d09a03fd796f88"> <files psalm-version="4.27.0@faf106e717c37b8c81721845dba9de3d8deed8ff">
<file src="lib/Activity/ActivityManager.php"> <file src="lib/Activity/ActivityManager.php">
<TypeDoesNotContainType occurrences="1"> <TypeDoesNotContainType occurrences="1">
<code>$message !== null</code> <code>$message !== null</code>
@@ -10,6 +10,11 @@
<code>(int)$subjectParams['comment']</code> <code>(int)$subjectParams['comment']</code>
</InvalidScalarArgument> </InvalidScalarArgument>
</file> </file>
<file src="lib/Activity/Filter.php">
<MethodSignatureMismatch occurrences="1">
<code>$types</code>
</MethodSignatureMismatch>
</file>
<file src="lib/Command/UserExport.php"> <file src="lib/Command/UserExport.php">
<ImplementedReturnTypeMismatch occurrences="1"> <ImplementedReturnTypeMismatch occurrences="1">
<code>void</code> <code>void</code>

View File

@@ -117,14 +117,6 @@ class CardTest extends TestCase {
], (new CardDetails($card))->jsonSerialize()); ], (new CardDetails($card))->jsonSerialize());
} }
public function testMysqlDateFallback() {
$date = new DateTime();
$card = new Card();
$card->setDuedate($date->format('c'));
$card->setDatabaseType('mysql');
$this->assertEquals($date->format('Y-m-d H:i:s'), $card->getDuedate(false));
}
public function testJsonSerializeAsignedUsers() { public function testJsonSerializeAsignedUsers() {
$card = $this->createCard(); $card = $this->createCard();
$card->setAssignedUsers([ 'user1' ]); $card->setAssignedUsers([ 'user1' ]);

View File

@@ -32,6 +32,7 @@ use OCA\Deck\Db\CardMapper;
use OCA\Deck\Db\ChangeHelper; use OCA\Deck\Db\ChangeHelper;
use OCA\Deck\NotFoundException; use OCA\Deck\NotFoundException;
use OCA\Deck\Notification\NotificationHelper; use OCA\Deck\Notification\NotificationHelper;
use OCA\Deck\Validators\AssignmentServiceValidator;
use OCP\Activity\IEvent; use OCP\Activity\IEvent;
use OCP\EventDispatcher\IEventDispatcher; use OCP\EventDispatcher\IEventDispatcher;
use PHPUnit\Framework\MockObject\MockObject; use PHPUnit\Framework\MockObject\MockObject;
@@ -76,6 +77,11 @@ class AssignmentServiceTest extends TestCase {
* @var AssignmentService * @var AssignmentService
*/ */
private $assignmentService; private $assignmentService;
/**
* @var AssignmentServiceValidator
*/
private $assignmentServiceValidator;
public function setUp(): void { public function setUp(): void {
parent::setUp(); parent::setUp();
@@ -87,6 +93,7 @@ class AssignmentServiceTest extends TestCase {
$this->activityManager = $this->createMock(ActivityManager::class); $this->activityManager = $this->createMock(ActivityManager::class);
$this->eventDispatcher = $this->createMock(IEventDispatcher::class); $this->eventDispatcher = $this->createMock(IEventDispatcher::class);
$this->changeHelper = $this->createMock(ChangeHelper::class); $this->changeHelper = $this->createMock(ChangeHelper::class);
$this->assignmentServiceValidator = $this->createMock(AssignmentServiceValidator::class);
$this->assignmentService = new AssignmentService( $this->assignmentService = new AssignmentService(
$this->permissionService, $this->permissionService,
$this->cardMapper, $this->cardMapper,
@@ -96,6 +103,7 @@ class AssignmentServiceTest extends TestCase {
$this->activityManager, $this->activityManager,
$this->changeHelper, $this->changeHelper,
$this->eventDispatcher, $this->eventDispatcher,
$this->assignmentServiceValidator,
'admin' 'admin'
); );
} }

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