Compare commits

..

1 Commits

Author SHA1 Message Date
Jakob RÃļhrl
8d58e6b584 add calendar link
Signed-off-by: Jakob RÃļhrl <jakob.roehrl@web.de>
2020-01-30 14:19:56 +01:00
634 changed files with 33940 additions and 102946 deletions

View File

@@ -1,29 +0,0 @@
{
"image": "ghcr.io/juliushaertl/nextcloud-dev-php80:latest",
"forwardPorts": [80],
"containerEnv": {
"NEXTCLOUD_AUTOINSTALL_APPS": "deck",
"XDEBUG_MODE": "debug"
},
"customizations": {
"vscode": {
"extensions": [
"felixfbecker.php-intellisense",
"octref.vetur"
],
"settings": {
"php.suggest.basic": false,
"git.alwaysSignOff": true
}
}
},
"workspaceMount": "source=${localWorkspaceFolder},target=/var/www/html/apps-extra/deck,type=bind",
"workspaceFolder": "/var/www/html/apps-extra/deck",
"overrideCommand": true,
"postAttachCommand": "bash ./.devcontainer/setup.sh",
"portsAttributes": {
"80": {
"label": "Webserver"
}
}
}

View File

@@ -1,9 +0,0 @@
#!/bin/bash
(
cd /tmp && /usr/local/bin/bootstrap.sh apache2ctl start
)
composer install --no-dev
npm ci
npm run dev

157
.drone.yml Normal file
View File

@@ -0,0 +1,157 @@
kind: pipeline
name: checkers
steps:
- name: compatibility
image: nextcloudci/php7.2:php7.2-13
environment:
APP_NAME: deck
CORE_BRANCH: master
DB: sqlite
commands:
# Pre-setup steps
- wget https://raw.githubusercontent.com/nextcloud/travis_ci/master/before_install.sh
- bash ./before_install.sh $APP_NAME $CORE_BRANCH $DB
- cd ../server
# Code checker
- ./occ app:check-code $APP_NAME -c strong-comparison
- ./occ app:check-code $APP_NAME -c deprecation
- cd apps/$APP_NAME/
- name: syntax-php7.2
image: nextcloudci/php7.2:php7.2-13
environment:
APP_NAME: deck
CORE_BRANCH: master
DB: sqlite
commands:
- composer install
- ./vendor/bin/parallel-lint --exclude ./vendor/ .
- name: syntax-php7.3
image: nextcloudci/php7.3:php7.3-2
environment:
APP_NAME: deck
CORE_BRANCH: master
DB: sqlite
commands:
- composer install
- ./vendor/bin/parallel-lint --exclude ./vendor/ .
- name: syntax-php7.4
image: nextcloudci/php7.4:2
environment:
APP_NAME: deck
CORE_BRANCH: master
DB: sqlite
commands:
- composer install
- ./vendor/bin/parallel-lint --exclude ./vendor/ .
trigger:
branch:
- master
- stable*
event:
- pull_request
- push
---
kind: pipeline
name: unit-php7.2
steps:
- name: php7.2
image: nextcloudci/php7.2:php7.2-13
environment:
APP_NAME: deck
CORE_BRANCH: master
DB: sqlite
commands:
# Pre-setup steps
- wget https://raw.githubusercontent.com/nextcloud/travis_ci/master/before_install.sh
- bash ./before_install.sh $APP_NAME $CORE_BRANCH $DB
- cd ../server/
- php occ app:enable deck
- cd apps/$APP_NAME
- composer install
- phpunit -c tests/phpunit.xml --coverage-clover build/php-unit.coverage.xml
- phpunit -c tests/phpunit.integration.xml --coverage-clover build/php-integration.coverage.xml
trigger:
branch:
- master
- stable*
event:
- pull_request
- push
---
kind: pipeline
name: unit-php7.3
steps:
- name: php7.3
image: nextcloudci/php7.3:php7.3-5
environment:
APP_NAME: deck
CORE_BRANCH: master
DB: sqlite
commands:
# Pre-setup steps
- wget https://raw.githubusercontent.com/nextcloud/travis_ci/master/before_install.sh
- bash ./before_install.sh $APP_NAME $CORE_BRANCH $DB
- cd ../server/
- php occ app:enable deck
- cd apps/$APP_NAME
- composer install
- phpunit -c tests/phpunit.xml --coverage-clover build/php-unit.coverage.xml
- phpunit -c tests/phpunit.integration.xml --coverage-clover build/php-integration.coverage.xml
trigger:
branch:
- master
- stable*
event:
- pull_request
- push
---
kind: pipeline
name: integration
steps:
- name: integration
image: nextcloudci/php7.2:php7.2-13
environment:
APP_NAME: deck
CORE_BRANCH: master
DB: sqlite
commands:
# Pre-setup steps
- wget https://raw.githubusercontent.com/nextcloud/travis_ci/master/before_install.sh
- bash ./before_install.sh $APP_NAME $CORE_BRANCH $DB
- cd ../server/
- php occ app:enable deck
- cd apps/$APP_NAME
- cd tests/integration
- ./run.sh || true
trigger:
branch:
- master
- stable*
event:
- pull_request
- push
---
kind: pipeline
name: frontend
steps:
- name: install
image: node:lts-alpine
commands:
- npm install
- name: eslint
image: node:lts-alpine
commands:
- npm run lint
- name: jsbuild
image: node:lts-alpine
commands:
- npm run build
trigger:
branch:
- master
- stable*
- vue
event:
- pull_request
- push

View File

@@ -3,10 +3,7 @@ root = true
[*]
charset = utf-8
end_of_line = lf
indent_size = tab
indent_style = tab
insert_final_newline = true
trim_trailing_whitespace = true
[*.{js,vue}]
indent_style = tab

View File

@@ -1,14 +1,8 @@
module.exports = {
root: true,
extends: [
'@nextcloud',
'nextcloud'
],
rules: {
'jsdoc/require-param-description': ['off'],
'jsdoc/require-param-type': ['off'],
'jsdoc/check-param-names': ['off'],
'jsdoc/no-undefined-types': ['off'],
'jsdoc/require-property-description': ['off'],
'import/no-named-as-default-member': ['off'],
},
'valid-jsdoc': ['warn'],
}
}

View File

@@ -4,29 +4,6 @@ about: Create a report to help us improve
---
<!--
Thanks for reporting issues back!
Guidelines for submitting issues:
* Please search the existing issues first, it's likely that your issue was already reported or even fixed.
* SECURITY: Report any potential security bug to us via our HackerOne page (https://hackerone.com/nextcloud) following our security policy (https://nextcloud.com/security/) instead of filing an issue in our bug tracker.
* The issues in other components should be reported in their respective repositories: You will find them in our GitHub Organization (https://github.com/nextcloud/)
* You can also use the Issue Template app to prefill most of the required information: https://apps.nextcloud.com/apps/issuetemplate
-->
<!--- Please keep this note for other contributors -->
### How to use GitHub
* Please use the 👍 [reaction](https://blog.github.com/2016-03-10-add-reactions-to-pull-requests-issues-and-comments/) to show that you are affected by the same issue.
* Please don't comment if you have no relevant information to add. It's just extra noise for everyone subscribed to this issue.
* Subscribe to receive notifications on status change and new comments.
**Describe the bug**
A clear and concise description of what the bug is.

View File

@@ -4,28 +4,6 @@ about: Suggest an idea for this project
---
<!--
Thanks for reporting issues back!
Guidelines for submitting issues:
* Please search the existing issues first, it's likely that your issue was already reported or even fixed.
* SECURITY: Report any potential security bug to us via our HackerOne page (https://hackerone.com/nextcloud) following our security policy (https://nextcloud.com/security/) instead of filing an issue in our bug tracker.
* The issues in other components should be reported in their respective repositories: You will find them in our GitHub Organization (https://github.com/nextcloud/)
* You can also use the Issue Template app to prefill most of the required information: https://apps.nextcloud.com/apps/issuetemplate
-->
<!--- Please keep this note for other contributors -->
### How to use GitHub
* Please use the 👍 [reaction](https://blog.github.com/2016-03-10-add-reactions-to-pull-requests-issues-and-comments/) to show that you are affected by the same issue.
* Please don't comment if you have no relevant information to add. It's just extra noise for everyone subscribed to this issue.
* Subscribe to receive notifications on status change and new comments.
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

View File

@@ -1,78 +0,0 @@
version: 2
updates:
- package-ecosystem: npm
directory: "/"
target-branch: "main"
schedule:
interval: weekly
day: saturday
time: "03:00"
timezone: Europe/Paris
open-pull-requests-limit: 10
reviewers:
- juliushaertl
- package-ecosystem: npm
target-branch: stable25
versioning-strategy: lockfile-only
directory: "/"
schedule:
interval: weekly
day: saturday
time: "03:00"
timezone: Europe/Paris
ignore:
- dependency-name: "*"
update-types: ["version-update:semver-major"]
open-pull-requests-limit: 30
labels:
- 3. to review
- dependencies
- package-ecosystem: npm
target-branch: stable24
versioning-strategy: lockfile-only
directory: "/"
schedule:
interval: weekly
day: saturday
time: "03:00"
timezone: Europe/Paris
ignore:
- dependency-name: "*"
update-types: ["version-update:semver-major"]
open-pull-requests-limit: 30
labels:
- 3. to review
- dependencies
- package-ecosystem: composer
directory: "/"
schedule:
interval: weekly
day: saturday
time: "03:00"
timezone: Europe/Paris
open-pull-requests-limit: 10
reviewers:
- juliushaertl
- package-ecosystem: composer
directory: "/tests/integration"
schedule:
interval: weekly
day: saturday
time: "03:00"
timezone: Europe/Paris
open-pull-requests-limit: 10
reviewers:
- juliushaertl
- package-ecosystem: github-actions
directory: "/"
schedule:
interval: weekly
day: saturday
time: "03:00"
timezone: Europe/Paris
open-pull-requests-limit: 10
reviewers:
- juliushaertl

View File

@@ -1,6 +1,6 @@
* Resolves: # <!-- related github issue -->
* Target version: main
* Target version: master
### Summary

25
.github/stale.yml vendored Normal file
View File

@@ -0,0 +1,25 @@
# Number of days of inactivity before an issue becomes stale
daysUntilStale: 60
# Number of days of inactivity before a stale issue is closed
daysUntilClose: 7
# Issues with these labels will never be considered stale
exemptLabels:
- "1. to develop"
- "2. developing"
- "3. to review"
- "discussion"
- "bounty"
- "bug"
- "enhancement"
# Limit the number of actions per hour, from 1-30. Default is 30
limitPerRun: 30
# Label to use when marking an issue as stale
staleLabel: stale
# Comment to post when marking an issue as stale. Set to `false` to disable
markComment: >
This issue has been automatically marked as stale because it has not had
recent activity. It will be closed if no further activity occurs. Thank you
for your contributions.

View File

@@ -1,43 +0,0 @@
name: Package build
on:
push:
branches:
- main
- master
- stable*
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [16.x]
steps:
- uses: actions/checkout@v3
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
- name: Set up npm7
run: npm i -g npm@7
- name: Setup PHP
uses: shivammathur/setup-php@2.25.1
with:
php-version: '7.4'
tools: composer
- name: install dependencies
run: |
wget https://github.com/ChristophWurst/krankerl/releases/download/v0.14.0/krankerl_0.14.0_amd64.deb
sudo dpkg -i krankerl_0.14.0_amd64.deb
- name: package
run: |
uname -a
RUST_BACKTRACE=1 krankerl --version
RUST_BACKTRACE=1 krankerl package
- uses: actions/upload-artifact@v3
with:
name: Deck app tarball
path: build/artifacts/deck.tar.gz

View File

@@ -1,166 +0,0 @@
# 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: Build and publish app release
on:
release:
types: [published]
env:
PHP_VERSION: 8.1
jobs:
build_and_publish:
runs-on: ubuntu-latest
# Only allowed to be run on nextcloud-releases repositories
if: ${{ github.repository_owner == 'nextcloud-releases' }}
steps:
- name: Check actor permission
uses: skjnldsv/check-actor-permission@e591dbfe838300c007028e1219ca82cc26e8d7c5 # v2.1
with:
require: write
- name: Set app env
run: |
# Split and keep last
echo "APP_NAME=${GITHUB_REPOSITORY##*/}" >> $GITHUB_ENV
echo "APP_VERSION=${GITHUB_REF##*/}" >> $GITHUB_ENV
- name: Checkout
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3
with:
path: ${{ env.APP_NAME }}
- name: Get appinfo data
id: appinfo
uses: skjnldsv/xpath-action@7e6a7c379d0e9abc8acaef43df403ab4fc4f770c # master
with:
filename: ${{ env.APP_NAME }}/appinfo/info.xml
expression: "//info//dependencies//nextcloud/@min-version"
- name: Read package.json node and npm engines version
uses: skjnldsv/read-package-engines-version-actions@0ce2ed60f6df073a62a77c0a4958dd0fc68e32e7 # v2.1
id: versions
# Continue if no package.json
continue-on-error: true
with:
path: ${{ env.APP_NAME }}
fallbackNode: "^16"
fallbackNpm: "^7"
- name: Set up node ${{ steps.versions.outputs.nodeVersion }}
# Skip if no package.json
if: ${{ steps.versions.outputs.nodeVersion }}
uses: actions/setup-node@8c91899e586c5b171469028077307d293428b516 # v3
with:
node-version: ${{ steps.versions.outputs.nodeVersion }}
- name: Set up npm ${{ steps.versions.outputs.npmVersion }}
# Skip if no package.json
if: ${{ steps.versions.outputs.npmVersion }}
run: npm i -g npm@"${{ steps.versions.outputs.npmVersion }}"
- name: Set up php ${{ env.PHP_VERSION }}
uses: shivammathur/setup-php@2.25.1 # v2
with:
php-version: ${{ env.PHP_VERSION }}
coverage: none
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Check composer.json
id: check_composer
uses: andstor/file-existence-action@20b4d2e596410855db8f9ca21e96fbe18e12930b # v2
with:
files: "${{ env.APP_NAME }}/composer.json"
- name: Install composer dependencies
if: steps.check_composer.outputs.files_exists == 'true'
run: |
cd ${{ env.APP_NAME }}
composer install --no-dev
- name: Build ${{ env.APP_NAME }}
# Skip if no package.json
if: ${{ steps.versions.outputs.nodeVersion }}
run: |
cd ${{ env.APP_NAME }}
npm ci
npm run build
- name: Check Krankerl config
id: krankerl
uses: andstor/file-existence-action@20b4d2e596410855db8f9ca21e96fbe18e12930b # v2
with:
files: ${{ env.APP_NAME }}/krankerl.toml
- name: Install Krankerl
if: steps.krankerl.outputs.files_exists == 'true'
run: |
wget https://github.com/ChristophWurst/krankerl/releases/download/v0.14.0/krankerl_0.14.0_amd64.deb
sudo dpkg -i krankerl_0.14.0_amd64.deb
- name: Package ${{ env.APP_NAME }} ${{ env.APP_VERSION }} with krankerl
if: steps.krankerl.outputs.files_exists == 'true'
run: |
cd ${{ env.APP_NAME }}
krankerl package
- name: Package ${{ env.APP_NAME }} ${{ env.APP_VERSION }} with makefile
if: steps.krankerl.outputs.files_exists != 'true'
run: |
cd ${{ env.APP_NAME }}
make appstore
- name: Checkout server ${{ fromJSON(steps.appinfo.outputs.result).nextcloud.min-version }}
continue-on-error: true
id: server-checkout
run: |
NCVERSION=${{ fromJSON(steps.appinfo.outputs.result).nextcloud.min-version }}
wget --quiet https://download.nextcloud.com/server/releases/latest-$NCVERSION.zip
unzip latest-$NCVERSION.zip
- name: Checkout server master fallback
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3
if: ${{ steps.server-checkout.outcome != 'success' }}
with:
repository: nextcloud/server
path: nextcloud
- name: Sign app
run: |
# Extracting release
cd ${{ env.APP_NAME }}/build/artifacts
tar -xvf ${{ env.APP_NAME }}.tar.gz
cd ../../../
# Setting up keys
echo "${{ secrets.APP_PRIVATE_KEY }}" > ${{ env.APP_NAME }}.key
wget --quiet "https://github.com/nextcloud/app-certificate-requests/raw/master/${{ env.APP_NAME }}/${{ env.APP_NAME }}.crt"
# Signing
php nextcloud/occ integrity:sign-app --privateKey=../${{ env.APP_NAME }}.key --certificate=../${{ env.APP_NAME }}.crt --path=../${{ env.APP_NAME }}/build/artifacts/${{ env.APP_NAME }}
# Rebuilding archive
cd ${{ env.APP_NAME }}/build/artifacts
tar -zcvf ${{ env.APP_NAME }}.tar.gz ${{ env.APP_NAME }}
- name: Attach tarball to github release
uses: svenstaro/upload-release-action@7319e4733ec7a184d739a6f412c40ffc339b69c7 # v2
id: attach_to_release
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: ${{ env.APP_NAME }}/build/artifacts/${{ env.APP_NAME }}.tar.gz
asset_name: ${{ env.APP_NAME }}-${{ env.APP_VERSION }}.tar.gz
tag: ${{ github.ref }}
overwrite: true
- name: Upload app to Nextcloud appstore
uses: nextcloud-releases/nextcloud-appstore-push-action@a011fe619bcf6e77ddebc96f9908e1af4071b9c1 # v1
with:
app_name: ${{ env.APP_NAME }}
appstore_token: ${{ secrets.APPSTORE_TOKEN }}
download_url: ${{ steps.attach_to_release.outputs.browser_download_url }}
app_private_key: ${{ secrets.APP_PRIVATE_KEY }}

View File

@@ -1,51 +0,0 @@
# 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: Rebase command
on:
issue_comment:
types: created
permissions:
contents: read
jobs:
rebase:
runs-on: ubuntu-latest
permissions:
contents: none
# On pull requests and if the comment starts with `/rebase`
if: github.event.issue.pull_request != '' && startsWith(github.event.comment.body, '/rebase')
steps:
- name: Add reaction on start
uses: peter-evans/create-or-update-comment@ca08ebd5dc95aa0cd97021e9708fcd6b87138c9b # v3.0.1
with:
token: ${{ secrets.COMMAND_BOT_PAT }}
repository: ${{ github.event.repository.full_name }}
comment-id: ${{ github.event.comment.id }}
reaction-type: "+1"
- name: Checkout the latest code
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3
with:
fetch-depth: 0
token: ${{ secrets.COMMAND_BOT_PAT }}
- name: Automatic Rebase
uses: cirrus-actions/rebase@6e572f08c244e2f04f9beb85a943eb618218714d # 1.7
env:
GITHUB_TOKEN: ${{ secrets.COMMAND_BOT_PAT }}
- name: Add reaction on failure
uses: peter-evans/create-or-update-comment@ca08ebd5dc95aa0cd97021e9708fcd6b87138c9b # v3.0.1
if: failure()
with:
token: ${{ secrets.COMMAND_BOT_PAT }}
repository: ${{ github.event.repository.full_name }}
comment-id: ${{ github.event.comment.id }}
reaction-type: "-1"

View File

@@ -1,124 +0,0 @@
name: Cypress
on:
pull_request:
push:
branches:
- main
- stable*
env:
APP_NAME: deck
CYPRESS_baseUrl: http://localhost:8081/index.php
jobs:
cypress:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
node-version: [14.x]
# containers: [1, 2, 3]
php-versions: [ '8.0' ]
databases: [ 'sqlite' ]
server-versions: [ 'stable27' ]
steps:
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
- name: Set up npm7
run: npm i -g npm@7
- name: Register text Git reference
run: |
text_app_ref="$(if [ "${{ matrix.server-versions }}" = "master" ]; then echo -n "main"; else echo -n "${{ matrix.server-versions }}"; fi)"
echo "text_app_ref=$text_app_ref" >> $GITHUB_ENV
- name: Checkout server
uses: actions/checkout@v3
with:
repository: nextcloud/server
ref: ${{ matrix.server-versions }}
- name: Checkout submodules
shell: bash
run: |
auth_header="$(git config --local --get http.https://github.com/.extraheader)"
git submodule sync --recursive
git -c "http.extraheader=$auth_header" -c protocol.version=2 submodule update --init --force --recursive --depth=1
- name: Checkout ${{ env.APP_NAME }}
uses: actions/checkout@v3
with:
path: apps/${{ env.APP_NAME }}
- name: Checkout text
uses: actions/checkout@v3
with:
repository: nextcloud/text
ref: ${{ env.text_app_ref }}
path: apps/text
- name: Set up php ${{ matrix.php-versions }}
uses: shivammathur/setup-php@2.25.1
with:
php-version: ${{ matrix.php-versions }}
extensions: mbstring, iconv, fileinfo, intl, sqlite, pdo_sqlite, zip, gd, apcu
ini-values:
apc.enable_cli=on
coverage: none
- name: Set up Nextcloud
env:
DB_PORT: 4444
PHP_CLI_SERVER_WORKERS: 10
run: |
mkdir data
php occ maintenance:install --verbose --database=${{ matrix.databases }} --database-name=nextcloud --database-host=127.0.0.1 --database-port=$DB_PORT --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass admin
php occ config:system:set memcache.local --value="\\OC\\Memcache\\APCu"
php occ config:system:set debug --value=true --type=boolean
php -f index.php
php -S 0.0.0.0:8081 &
export OC_PASS=1234561
php occ user:add --password-from-env user1
php occ user:add --password-from-env user2
php occ app:enable deck
php occ app:list
cd apps/deck
composer install --no-dev
npm ci
npm run build
cd ../../
curl -v http://localhost:8081/index.php/login
- name: Cypress run
uses: cypress-io/github-action@v5
with:
record: true
parallel: false
wait-on: '${{ env.CYPRESS_baseUrl }}'
working-directory: 'apps/${{ env.APP_NAME }}'
config: defaultCommandTimeout=10000,video=false
env:
CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }}
npm_package_name: ${{ env.APP_NAME }}
- name: Upload test failure screenshots
uses: actions/upload-artifact@v3
if: failure()
with:
name: Upload screenshots
path: apps/${{ env.APP_NAME }}/cypress/screenshots/
retention-days: 5
- name: Upload nextcloud logs
uses: actions/upload-artifact@v3
if: failure()
with:
name: Upload nextcloud log
path: data/nextcloud.log
retention-days: 5

View File

@@ -1,40 +0,0 @@
# 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: Dependabot
on:
pull_request_target:
branches:
- main
- master
- stable*
permissions:
contents: read
concurrency:
group: dependabot-approve-merge-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
jobs:
auto-approve-merge:
if: github.actor == 'dependabot[bot]'
runs-on: ubuntu-latest
permissions:
# for hmarr/auto-approve-action to approve PRs
pull-requests: write
steps:
# Github actions bot approve
- uses: hmarr/auto-approve-action@b40d6c9ed2fa10c9a2749eca7eb004418a705501 # v2
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
# Nextcloud bot approve and merge request
- uses: ahmadnassri/action-dependabot-auto-merge@45fc124d949b19b6b8bf6645b6c9d55f4f9ac61a # v2
with:
target: minor
github-token: ${{ secrets.DEPENDABOT_AUTOMERGE_TOKEN }}

View File

@@ -1,33 +0,0 @@
# 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: Pull request checks
on:
pull_request:
types: [opened, ready_for_review, reopened, synchronize]
permissions:
contents: read
concurrency:
group: fixup-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
jobs:
commit-message-check:
if: github.event.pull_request.draft == false
permissions:
pull-requests: write
name: Block fixup and squash commits
runs-on: ubuntu-latest
steps:
- name: Run check
uses: xt0rted/block-autosquash-commits-action@79880c36b4811fe549cfffe20233df88876024e7 # v2
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}

View File

@@ -1,161 +0,0 @@
name: Integration tests
on:
pull_request:
paths:
- '.github/workflows/integration.yml'
- 'appinfo/**'
- 'lib/**'
- 'templates/**'
- 'tests/**'
- 'composer.json'
- 'composer.lock'
push:
branches:
- main
- master
- stable*
env:
APP_NAME: deck
jobs:
integration:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
php-versions: ['8.1']
databases: ['sqlite', 'mysql', 'pgsql']
server-versions: ['stable27']
name: php${{ matrix.php-versions }}-${{ matrix.databases }}-${{ matrix.server-versions }}
services:
postgres:
image: postgres:14
ports:
- 4445:5432/tcp
env:
POSTGRES_USER: root
POSTGRES_PASSWORD: rootpassword
POSTGRES_DB: nextcloud
options: --health-cmd pg_isready --health-interval 5s --health-timeout 2s --health-retries 5
mysql:
image: mariadb:10.5
ports:
- 4444:3306/tcp
env:
MYSQL_ROOT_PASSWORD: rootpassword
options: --health-cmd="mysqladmin ping" --health-interval 5s --health-timeout 2s --health-retries 5
steps:
- name: Checkout server
uses: actions/checkout@v3
with:
repository: nextcloud/server
ref: ${{ matrix.server-versions }}
- name: Checkout submodules
shell: bash
run: |
auth_header="$(git config --local --get http.https://github.com/.extraheader)"
git submodule sync --recursive
git -c "http.extraheader=$auth_header" -c protocol.version=2 submodule update --init --force --recursive --depth=1
cd build/integration && composer require --dev phpunit/phpunit:~9
- name: Checkout app
uses: actions/checkout@v3
with:
path: apps/${{ env.APP_NAME }}
- name: Checkout activity
uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3
with:
repository: nextcloud/activity
ref: ${{ matrix.server-versions }}
path: apps/activity
- name: Set up php ${{ matrix.php-versions }}
uses: shivammathur/setup-php@2.25.1
with:
php-version: ${{ matrix.php-versions }}
extensions: mbstring, iconv, fileinfo, intl, sqlite, pdo_sqlite, mysql, pdo_mysql, pgsql, pdo_pgsql, apcu
ini-values:
apc.enable_cli=on
coverage: none
- name: Set up dependencies
working-directory: apps/${{ env.APP_NAME }}
run: composer i --no-dev
- name: Set up Nextcloud
run: |
if [ "${{ matrix.databases }}" = "mysql" ]; then
export DB_PORT=4444
elif [ "${{ matrix.databases }}" = "pgsql" ]; then
export DB_PORT=4445
fi
mkdir data
./occ maintenance:install --verbose --database=${{ matrix.databases }} --database-name=nextcloud --database-host=127.0.0.1 --database-port=$DB_PORT --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass admin
./occ config:system:set hashing_default_password --value=true --type=boolean
./occ config:system:set memcache.local --value="\\OC\\Memcache\\APCu"
./occ config:system:set memcache.distributed --value="\\OC\\Memcache\\APCu"
cat config/config.php
./occ user:list
./occ app:enable --force ${{ env.APP_NAME }}
./occ config:system:set query_log_file --value "$PWD/query.log"
php -S localhost:8080 &
- name: Run behat
working-directory: apps/${{ env.APP_NAME }}/tests/integration
run: ./run.sh
- name: Query count
if: ${{ matrix.databases == 'mysql' }}
uses: actions/github-script@v6
with:
github-token: ${{secrets.GITHUB_TOKEN}}
script: |
let myOutput = ''
let myError = ''
const options = {}
options.listeners = {
stdout: (data) => {
myOutput += data.toString()
},
stderr: (data) => {
myError += data.toString()
}
}
await exec.exec(`/bin/bash -c "cat query.log | wc -l"`, [], options)
msg = myOutput
const queryCount = parseInt(myOutput, 10)
myOutput = ''
await exec.exec('cat', ['apps/${{ env.APP_NAME }}/tests/integration/base-query-count.txt'], options)
const baseCount = parseInt(myOutput, 10)
const absoluteIncrease = queryCount - baseCount
const relativeIncrease = baseCount <= 0 ? 100 : (parseInt((absoluteIncrease / baseCount * 10000), 10) / 100)
if (absoluteIncrease >= 100 || relativeIncrease > 5) {
const comment = `đŸĸ Performance warning.\nIt looks like the query count of the integration tests increased with this PR.\nDatabase query count is now ` + queryCount + ' was ' + baseCount + ' (+' + relativeIncrease + '%)\nPlease check your code again. If you added a new test this can be expected and the base value in tests/integration/base-query-count.txt can be increased.'
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: comment
})
}
if (queryCount < 100) {
const comment = `🐈 Performance messuring seems broken. Failed to get query count.`
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: comment
})
}

View File

@@ -1,62 +0,0 @@
# 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
#
# Use lint-eslint together with lint-eslint-when-unrelated to make eslint a required check for GitHub actions
# https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/defining-the-mergeability-of-pull-requests/troubleshooting-required-status-checks#handling-skipped-but-required-checks
name: Lint
on:
pull_request:
paths:
- '.github/workflows/**'
- 'src/**'
- 'appinfo/info.xml'
- 'package.json'
- 'package-lock.json'
- 'tsconfig.json'
- '.eslintrc.*'
- '.eslintignore'
- '**.js'
- '**.ts'
- '**.vue'
permissions:
contents: read
concurrency:
group: lint-eslint-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
jobs:
lint:
runs-on: ubuntu-latest
name: eslint
steps:
- name: Checkout
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3
- name: Read package.json node and npm engines version
uses: skjnldsv/read-package-engines-version-actions@0ce2ed60f6df073a62a77c0a4958dd0fc68e32e7 # v2.1
id: versions
with:
fallbackNode: '^16'
fallbackNpm: '^7'
- name: Set up node ${{ steps.versions.outputs.nodeVersion }}
uses: actions/setup-node@8c91899e586c5b171469028077307d293428b516 # v3
with:
node-version: ${{ steps.versions.outputs.nodeVersion }}
- name: Set up npm ${{ steps.versions.outputs.npmVersion }}
run: npm i -g npm@"${{ steps.versions.outputs.npmVersion }}"
- name: Install dependencies
run: npm ci
- name: Lint
run: npm run lint

View File

@@ -1,39 +0,0 @@
# 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: Lint
on: pull_request
permissions:
contents: read
concurrency:
group: lint-php-cs-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
jobs:
lint:
runs-on: ubuntu-latest
name: php-cs
steps:
- name: Checkout
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3
- name: Set up php
uses: shivammathur/setup-php@2.25.1 # v2
with:
php-version: 8.1
coverage: none
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Install dependencies
run: composer i
- name: Lint
run: composer run cs:check || ( echo 'Please run `composer run cs:fix` to format your code' && exit 1 )

View File

@@ -1,59 +0,0 @@
# 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: Lint
on:
pull_request:
push:
branches:
- main
- master
- stable*
permissions:
contents: read
concurrency:
group: lint-php-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
jobs:
php-lint:
runs-on: ubuntu-latest
strategy:
matrix:
php-versions: [ "8.0", "8.1", "8.2" ]
name: php-lint
steps:
- name: Checkout
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3
- name: Set up php ${{ matrix.php-versions }}
uses: shivammathur/setup-php@2.25.1 # v2
with:
php-version: ${{ matrix.php-versions }}
coverage: none
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Lint
run: composer run lint
summary:
permissions:
contents: none
runs-on: ubuntu-latest
needs: php-lint
if: always()
name: php-lint-summary
steps:
- name: Summary status
run: if ${{ needs.php-lint.result != 'success' && needs.php-lint.result != 'skipped' }}; then exit 1; fi

View File

@@ -1,46 +0,0 @@
# 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: Lint
on: pull_request
permissions:
contents: read
concurrency:
group: lint-stylelint-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
jobs:
lint:
runs-on: ubuntu-latest
name: stylelint
steps:
- name: Checkout
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3
- name: Read package.json node and npm engines version
uses: skjnldsv/read-package-engines-version-actions@0ce2ed60f6df073a62a77c0a4958dd0fc68e32e7 # v2.1
id: versions
with:
fallbackNode: '^16'
fallbackNpm: '^7'
- name: Set up node ${{ steps.versions.outputs.nodeVersion }}
uses: actions/setup-node@8c91899e586c5b171469028077307d293428b516 # v3
with:
node-version: ${{ steps.versions.outputs.nodeVersion }}
- name: Set up npm ${{ steps.versions.outputs.npmVersion }}
run: npm i -g npm@"${{ steps.versions.outputs.npmVersion }}"
- name: Install dependencies
run: npm ci
- name: Lint
run: npm run stylelint

View File

@@ -1,4 +1,4 @@
name: Package nightly
name: Nightly build
on:
push:
@@ -14,18 +14,16 @@ jobs:
strategy:
matrix:
node-version: [14.x]
node-version: [12.x]
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v1
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node-version }}
- name: Set up npm7
run: npm i -g npm@7
- name: Setup PHP
uses: shivammathur/setup-php@2.25.1
uses: shivammathur/setup-php@v1
with:
php-version: '7.4'
tools: composer
@@ -44,14 +42,14 @@ jobs:
git config --local user.name "GitHub Action"
git tag -f nightly
- name: Push tag
uses: juliushaertl/github-push-action@main
uses: juliushaertl/github-push-action@master
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
tags: true
force: true
- name: Create Release
id: create_release
uses: juliushaertl/action-release@main
uses: juliushaertl/action-release@master
with:
token: ${{ secrets.GITHUB_TOKEN }}
tag: nightly

View File

@@ -9,26 +9,23 @@ jobs:
strategy:
matrix:
node-version: [14.x]
node-version: [12.x]
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v1
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node-version }}
- name: Set up npm7
run: npm i -g npm@7
- name: install dependencies
run: |
npm ci
- name: build
env:
RELATIVE_CI_KEY: ${{ secrets.RELATIVE_CI_KEY }}
RELATIVE_CI_SLUG: nextcloud/deck
run: |
mkdir -p js
npm run build --if-present -- --profile --json | tail -n +6 > js/webpack-stats.json
npx relative-ci-agent
npm run build --if-present
- name: eslint
run: |
npm run lint
env:
CI: true

View File

@@ -1,71 +0,0 @@
# 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: npm audit fix and compile
on:
workflow_dispatch:
schedule:
# At 2:30 on Sundays
- cron: '30 2 * * 0'
jobs:
build:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
branches: ["main", "master", "stable26", "stable25", "stable24"]
name: npm-audit-fix-${{ matrix.branches }}
steps:
- name: Checkout
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3
with:
ref: ${{ matrix.branches }}
- name: Read package.json node and npm engines version
uses: skjnldsv/read-package-engines-version-actions@0ce2ed60f6df073a62a77c0a4958dd0fc68e32e7 # v2.1
id: versions
with:
fallbackNode: '^16'
fallbackNpm: '^7'
- name: Set up node ${{ steps.versions.outputs.nodeVersion }}
uses: actions/setup-node@8c91899e586c5b171469028077307d293428b516 # v3
with:
node-version: ${{ steps.versions.outputs.nodeVersion }}
- name: Set up npm ${{ steps.versions.outputs.npmVersion }}
run: npm i -g npm@"${{ steps.versions.outputs.npmVersion }}"
- name: Fix npm audit
run: |
npm audit fix
- name: Run npm ci and npm run build
if: always()
run: |
npm ci
npm run build --if-present
- name: Create Pull Request
if: always()
uses: peter-evans/create-pull-request@284f54f989303d2699d373481a0cfa13ad5a6666 # v3
with:
token: ${{ secrets.COMMAND_BOT_PAT }}
commit-message: "chore(deps): fix npm audit"
committer: GitHub <noreply@github.com>
author: nextcloud-command <nextcloud-command@users.noreply.github.com>
signoff: true
branch: automated/noid/${{ matrix.branches }}-fix-npm-audit
title: "[${{ matrix.branches }}] Fix npm audit"
body: |
Auto-generated fix of npm audit
labels: |
dependencies
3. to review

View File

@@ -1,102 +0,0 @@
name: PHPUnit
on:
pull_request:
paths:
- '.github/workflows/phpunit.yml'
- 'appinfo/**'
- 'lib/**'
- 'templates/**'
- 'tests/**'
- 'composer.json'
- 'composer.lock'
push:
branches:
- master
- stable*
env:
APP_NAME: deck
jobs:
integration:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
php-versions: ['8.0', '8.1']
databases: ['sqlite', 'mysql', 'pgsql']
server-versions: ['stable27']
name: php${{ matrix.php-versions }}-${{ matrix.databases }}-${{ matrix.server-versions }}
services:
postgres:
image: postgres:14
ports:
- 4445:5432/tcp
env:
POSTGRES_USER: root
POSTGRES_PASSWORD: rootpassword
POSTGRES_DB: nextcloud
options: --health-cmd pg_isready --health-interval 5s --health-timeout 2s --health-retries 5
mysql:
image: mariadb:10.5
ports:
- 4444:3306/tcp
env:
MYSQL_ROOT_PASSWORD: rootpassword
options: --health-cmd="mysqladmin ping" --health-interval 5s --health-timeout 2s --health-retries 5
steps:
- name: Checkout server
uses: actions/checkout@v3
with:
repository: nextcloud/server
ref: ${{ matrix.server-versions }}
- name: Checkout submodules
shell: bash
run: |
auth_header="$(git config --local --get http.https://github.com/.extraheader)"
git submodule sync --recursive
git -c "http.extraheader=$auth_header" -c protocol.version=2 submodule update --init --force --recursive --depth=1
- name: Checkout app
uses: actions/checkout@v3
with:
path: apps/${{ env.APP_NAME }}
- name: Set up php ${{ matrix.php-versions }}
uses: shivammathur/setup-php@2.25.1
with:
php-version: ${{ matrix.php-versions }}
tools: phpunit
extensions: zip, gd, mbstring, iconv, fileinfo, intl, sqlite, pdo_sqlite, mysql, pdo_mysql, pgsql, pdo_pgsql
coverage: none
- name: Set up PHPUnit
working-directory: apps/${{ env.APP_NAME }}
run: composer i
- name: Set up Nextcloud
run: |
if [ "${{ matrix.databases }}" = "mysql" ]; then
export DB_PORT=4444
elif [ "${{ matrix.databases }}" = "pgsql" ]; then
export DB_PORT=4445
fi
mkdir data
./occ maintenance:install --verbose --database=${{ matrix.databases }} --database-name=nextcloud --database-host=127.0.0.1 --database-port=$DB_PORT --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass admin
./occ app:enable --force ${{ env.APP_NAME }}
php -S localhost:8080 &
- name: PHPUnit
working-directory: apps/${{ env.APP_NAME }}
run: ./vendor/phpunit/phpunit/phpunit -c tests/phpunit.xml
- name: PHPUnit integration
working-directory: apps/${{ env.APP_NAME }}
run: ./vendor/phpunit/phpunit/phpunit -c tests/phpunit.integration.xml

View File

@@ -1,41 +0,0 @@
# 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*
concurrency:
group: psalm-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
jobs:
static-analysis:
runs-on: ubuntu-latest
name: Nextcloud
steps:
- name: Checkout
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3
- name: Set up php
uses: shivammathur/setup-php@2.25.1 # v2
with:
php-version: 8.1
coverage: none
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Install dependencies
run: composer i
- name: Run coding standards check
run: composer run psalm

View File

@@ -1,68 +0,0 @@
# 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", "stable26", "stable25", "stable24"]
name: update-nextcloud-ocp-${{ matrix.branches }}
steps:
- uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3
with:
ref: ${{ matrix.branches }}
submodules: true
- name: Set up php8.1
uses: shivammathur/setup-php@2.25.1 # v2
with:
php-version: 8.1
extensions: ctype,curl,dom,fileinfo,gd,intl,json,mbstring,openssl,pdo_sqlite,posix,sqlite,xml,zip
coverage: none
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- 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 clean -f vendor-bin
git checkout 3rdparty vendor vendor-bin
continue-on-error: true
- name: Create Pull Request
uses: peter-evans/create-pull-request@284f54f989303d2699d373481a0cfa13ad5a6666 # v3
with:
token: ${{ secrets.COMMAND_BOT_PAT }}
commit-message: "chore(dev-deps): Bump nextcloud/ocp package"
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

6
.gitignore vendored
View File

@@ -3,11 +3,9 @@ js/
build/
css/style.css
css/vendor.css
cypress/videos/
tests/integration/vendor/
tests/integration/composer.lock
tests/.phpunit.result.cache
vendor/
.php_cs.cache
*.lock
\.idea/
settings.json

View File

@@ -1,28 +1,28 @@
/build/
/.git
/.github
/docs/
/tests
/babel.config.js
/.editorconfig
/.eslintrc.js
/.nextcloudignore
/webpack.*.js
/.codecov.yml
/composer.json
/composer.lock
/_config.yml
/.drone.yml
/.travis.yml
/.eslintignore
/.eslintrc.yml
/.gitignore
/issue_template.md
/krankerl.toml
/Makefile
/mkdocs.yml
/run-eslint.sh
/package.json
/package-lock.json
/node_modules/
/src/
build/
.git
.github
docs/
tests
babel.config.js
.editorconfig
.eslintrc.js
.nextcloudignore
webpack.*.js
.codecov.yml
composer.json
composer.lock
_config.yml
.drone.yml
.travis.yml
.eslintignore
.eslintrc.yml
.gitignore
issue_template.md
krankerl.toml
Makefile
mkdocs.yml
run-eslint.sh
package.json
package-lock.json
node_modules/
src/

View File

@@ -1,19 +0,0 @@
<?php
declare(strict_types=1);
require_once './vendor/autoload.php';
use Nextcloud\CodingStandard\Config;
$config = new Config();
$config
->getFinder()
// ->ignoreVCSIgnored(true)
->notPath('build')
->notPath('l10n')
->notPath('src')
->notPath('node_modules')
->notPath('vendor')
->in(__DIR__);
return $config;

32
.travis.yml Normal file
View File

@@ -0,0 +1,32 @@
language: php
services:
- mysql
php:
- 7.2
- 7.3
env:
- CORE_BRANCH=master DB=mysql
before_install:
- export PATH="$PWD/vendor/bin:$PATH"
- phpunit --version
- wget https://raw.githubusercontent.com/nextcloud/travis_ci/master/before_install.sh
- bash ./before_install.sh deck $CORE_BRANCH $DB
- cd ../server
- ./occ app:enable deck
before_script:
- cd apps/deck
script:
- composer install
- make test-unit
after_success:
- bash <(curl -s https://codecov.io/bash)
after_failure:
- cat ../../data/nextcloud.log
notifications:
email: false

View File

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

View File

@@ -1,559 +1,12 @@
# Changelog
All notable changes to this project will be documented in this file.
## 1.11.7
### Fixed
- fix: Load archived card if URL is opened directly #6323
## 1.11.6
### Fixed
- fix: Avoid optional before required parameter [#6094](https://github.com/nextcloud/deck/pull/6094)
- use deleted_users for users that do not exist [#6202](https://github.com/nextcloud/deck/pull/6202)
## 1.11.5
### Fixed
- don't reset update time when no update was written to db #6036
- fix: Avoid conflicts on deck attachments folder name #5709
- fix: permission check for cloning board #5856
- fix(CardMenu): introduce cardRichObject in CardMenu #5610
- Clarify config file not found exception message #5726
## 1.11.4
### Fixed
- fix(PermissionService#getPermissions): Catch exceptions from getBoard method @backportbot[bot] [#5547](https://github.com/nextcloud/deck/pull/5547)
- fix(activity): Fix permission checks when rendering activities in bacâ€Ļ @backportbot[bot] [#5544](https://github.com/nextcloud/deck/pull/5544)
## 1.11.3
### Fixed
- fix: allow null label colors in trello json importer @juliushaertl [#5438](https://github.com/nextcloud/deck/pull/5438)
- Fix deleted card/board issues @juliushaertl [#5442](https://github.com/nextcloud/deck/pull/5442)
### Other
- Fix small issues around delete/undo @juliushaertl [#5420](https://github.com/nextcloud/deck/pull/5420)
## 1.11.2
### Fixed
- fix: Use text content as result for comments [#5297](https://github.com/nextcloud/deck/pull/5297)
## 1.11.1
### Added
- feat: remember last board, list for new card dialog [#5049](https://github.com/nextcloud/deck/pull/5049)
- feat: update smart picker links [#5072](https://github.com/nextcloud/deck/pull/5072)
### Fixed
- fix: export doesn't handle lists with no cards [#5118](https://github.com/nextcloud/deck/pull/5118)
- fix: Check both card reference url patterns [#5263](https://github.com/nextcloud/deck/pull/5263)
- Issue triage fix collection @juliushaertl [#5286](https://github.com/nextcloud/deck/pull/5286)
- fix: open card in modal on main route [#5288](https://github.com/nextcloud/deck/pull/5288)
- fix: Avoid too large index on postgres as indexing just the last_editor column is enough [#5291](https://github.com/nextcloud/deck/pull/5291)
- fix: error msg on CreateNewCardCustomPicker & only show available boâ€Ļ [#5030](https://github.com/nextcloud/deck/pull/5030)
- Remove duplicate button [#5043](https://github.com/nextcloud/deck/pull/5043)
### Other
- fix cypress for new file picker @juliushaertl [#5027](https://github.com/nextcloud/deck/pull/5027)
- test: add cypress tests for create new deck card [#5026](https://github.com/nextcloud/deck/pull/5026)
- Update dependencies
## 1.11.0
### Added
- feat: Import of deck JSON data through occ [#5003](https://github.com/nextcloud/deck/pull/5003)
- feat: create new card from smart picker [#5000](https://github.com/nextcloud/deck/pull/5000)
- feat: update smart picker links [#5072](https://github.com/nextcloud/deck/pull/5072)
- feat: remember last board, list for new card dialog [#5049](https://github.com/nextcloud/deck/pull/5049)
### Fixed
- Fix(occ): set user id for permission sevice from board service [#4813](https://github.com/nextcloud/deck/pull/4813)
- fix: Allow dynamic autoloading for classes added during upgrade [#4804](https://github.com/nextcloud/deck/pull/4804)
- fix(notification): Prevent null in parameters [#4909](https://github.com/nextcloud/deck/pull/4909)
- fix: Split query to fetch board ids to avoid slow query join @juliushaertl [#4949](https://github.com/nextcloud/deck/pull/4949)
- fix: export doesn't handle lists with no cards [#5118](https://github.com/nextcloud/deck/pull/5118)
- fix: execute return int for export command [#4811](https://github.com/nextcloud/deck/pull/4811)
- fix: crash when leaving out system parameter [#4831](https://github.com/nextcloud/deck/pull/4831)
- test: add cypress tests for create new deck card [#5026](https://github.com/nextcloud/deck/pull/5026)
- feat: error msg on CreateNewCardCustomPicker & only show available boâ€Ļ [#5030](https://github.com/nextcloud/deck/pull/5030)
- Remove duplicate button [#5043](https://github.com/nextcloud/deck/pull/5043)
### Other
- Dependency updates
## 1.11.0-beta.1
### Added
- Import deck json files through occ @juliushaertl [#5003](https://github.com/nextcloud/deck/pull/5003)
- Create new card via smart picker [#5000](https://github.com/nextcloud/deck/pull/5000)
### Fixed
- Fix(occ): set user id for permission sevice from board service [#4813](https://github.com/nextcloud/deck/pull/4813)
- fix: Allow dynamic autoloading for classes added during upgrade [#4804](https://github.com/nextcloud/deck/pull/4804)
- fix(notification): Prevent null in parameters [#4909](https://github.com/nextcloud/deck/pull/4909)
- fix: Split query to fetch board ids to avoid slow query join @juliushaertl [#4949](https://github.com/nextcloud/deck/pull/4949)
- fix: execute return int for export command [#4811](https://github.com/nextcloud/deck/pull/4811)
- fix: crash when leaving out system parameter [#4831](https://github.com/nextcloud/deck/pull/4831)
## 1.10.0
### Added
- Compatibility with Nextcloud 27
### Fixed
- fix: Properly overwrite z-index of datepicker above modal @juliushaertl [#4664](https://github.com/nextcloud/deck/pull/4664)
- Use the color-primary-element* variables @szaimen [#4673](https://github.com/nextcloud/deck/pull/4673)
- fix(references): Mute NoPermissionException as it is expected to happen for references @juliushaertl [#4514](https://github.com/nextcloud/deck/pull/4514)
- fix(cards): Fix card sizing by limiting too wide style rules @juliushaertl [#4512](https://github.com/nextcloud/deck/pull/4512)
- fix: Adapt NcEmptyContent usages to new slots @juliushaertl [#4561](https://github.com/nextcloud/deck/pull/4561)
- Gracefully handle not found card for a share @mejo- [#4566](https://github.com/nextcloud/deck/pull/4566)
- Prevent tag itself being edit button if user lacks permissions @joshtrichards [#4574](https://github.com/nextcloud/deck/pull/4574)
- chore: Remove unused @nextcloud/vue-dashboard @juliushaertl [#4586](https://github.com/nextcloud/deck/pull/4586)
- Update Description.vue: Fixes the issue of hidden text by menu bar @pschopen [#4617](https://github.com/nextcloud/deck/pull/4617)
- allow user to toggle visibility of the calendar for a deck board @schiessle [#4622](https://github.com/nextcloud/deck/pull/4622)
- fix: Append datetime picker to body to avoid cut off @juliushaertl [#4643](https://github.com/nextcloud/deck/pull/4643)
- fix: Bring back overdue column by removing faulty condition @juliushaertl [#4660](https://github.com/nextcloud/deck/pull/4660)
- fix(sessions): Do not send close request without token @juliushaertl [#4510](https://github.com/nextcloud/deck/pull/4510)
- tests(integration): Add test for multiple board shares to the same user @juliushaertl [#4494](https://github.com/nextcloud/deck/pull/4494)
- fix(API): Fix board API details parameter to work as expected @nickvergessen [#4518](https://github.com/nextcloud/deck/pull/4518)
- Fix : Overlapping expiry dates on tags @Jerome-Herbinet [#4535](https://github.com/nextcloud/deck/pull/4535)
- Fix consistency of a "Create card" wording with its equivalent for Notes ("New card") @Jerome-Herbinet [#4534](https://github.com/nextcloud/deck/pull/4534)
- tests(integration): Add integration tests for due dates @juliushaertl [#4489](https://github.com/nextcloud/deck/pull/4489)
- Better display of card dates (creation and change dates) @Jerome-Herbinet [#4604](https://github.com/nextcloud/deck/pull/4604)
- Refactors lib\Activity\DeckProvider.php to improve code readability. @fsamapoor [#4648](https://github.com/nextcloud/deck/pull/4648)
- Converts 'strpos()' calls to improve code readability. @fsamapoor [#4657](https://github.com/nextcloud/deck/pull/4657)
- Dependency updates
### Other
- feat: Add devcontainer and update dev docs @juliushaertl [#4683](https://github.com/nextcloud/deck/pull/4683)
- chore(CI): Adjust testing matrix for Nextcloud 27 on stable27 @nickvergessen [#4691](https://github.com/nextcloud/deck/pull/4691)
## 1.9.0-beta.1
### Added
- Export Board @david-loe [#3065](https://github.com/nextcloud/deck/pull/3065)
- basic notify_push usage with session handling @alangecker [#3876](https://github.com/nextcloud/deck/pull/3876)
- feat(Description): Use text as editor if available @juliushaertl [#4399](https://github.com/nextcloud/deck/pull/4399)
- Improve reference provider and add reference widgets @julien-nc [#4422](https://github.com/nextcloud/deck/pull/4422)
- live updates 🎉 @alangecker [#4273](https://github.com/nextcloud/deck/pull/4273)
- Tag creation from card view @juliushaertl [#4344](https://github.com/nextcloud/deck/pull/4344)
### Fixed
- Fix component renaming so that acl works on shares again @small1 [#4315](https://github.com/nextcloud/deck/pull/4315)
- fix(Sidebar): Only close sidebar on v-click-outside for specific targets @juliushaertl [#4350](https://github.com/nextcloud/deck/pull/4350)
- add basic e2e tests for stack title @shoetten [#4206](https://github.com/nextcloud/deck/pull/4206)
- App metadata: add links to user and developer documentation @p-bo [#4356](https://github.com/nextcloud/deck/pull/4356)
- Update signature of Entity::markFieldUpdated @nickvergessen [#4398](https://github.com/nextcloud/deck/pull/4398)
- Remove updated nightly information @xf- [#4419](https://github.com/nextcloud/deck/pull/4419)
- perf: Register notifier and resource listener lazy @juliushaertl [#4439](https://github.com/nextcloud/deck/pull/4439)
- perf: Lazy load dashboard components @juliushaertl [#4440](https://github.com/nextcloud/deck/pull/4440)
- Optimise upcomming overview creation @Raudius [#3793](https://github.com/nextcloud/deck/pull/3793)
- Performance boost @juliushaertl [#4452](https://github.com/nextcloud/deck/pull/4452)
### Other
- Dependency updates
## 1.8.0-beta.1
### Enhancements
- Nextcloud 25 compatibility
- Performance improvements
- Use capped memory cache for board permissions @juliushaertl [#3980](https://github.com/nextcloud/deck/pull/3980)
- Improve CalDAV integration performance @juliushaertl [#3982](https://github.com/nextcloud/deck/pull/3982)
- Simpify query for getting shared files @juliushaertl [#3983](https://github.com/nextcloud/deck/pull/3983)
- Accessibility improvements
- Add a11y label for sidebar button @marcelklehr [#3986](https://github.com/nextcloud/deck/pull/3986)
- 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)
- Invert icons properly in dark mode @juliushaertl [#3939](https://github.com/nextcloud/deck/pull/3939)
- Bump dependencies
### Fixed
- 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)
- Align Duedate-delete icon properly - fixes nextcloud/deck#3791 @Ben-Ro [#3811](https://github.com/nextcloud/deck/pull/3811)
- Fix for issue #3637 @flummer [#3833](https://github.com/nextcloud/deck/pull/3833)
- Switch to 'markdown-it-task-checkbox' for rendering of task lists @q-wertz [#3898](https://github.com/nextcloud/deck/pull/3898)
- Make rename functions accessibly by keyboard navigation @juliushaertl [#3813](https://github.com/nextcloud/deck/pull/3813)
- Prevent opening card and applyLabelFilter on card drag end @eneiluj [#3916](https://github.com/nextcloud/deck/pull/3916)
- Inserted required property in the rename list field, to prevent the lâ€Ļ @mstolf [#3862](https://github.com/nextcloud/deck/pull/3862)
- Fix share provider for master changes @nickvergessen [#3942](https://github.com/nextcloud/deck/pull/3942)
- Fetch attachment folder for the correct user during cron job @juliushaertl [#3952](https://github.com/nextcloud/deck/pull/3952)
- Fix z-index for deck sidebar @Raudius [#3884](https://github.com/nextcloud/deck/pull/3884)
### Other
- Switch from OC::$server->get to OCP\Server::get @CarlSchwan [#3801](https://github.com/nextcloud/deck/pull/3801)
- Add performance section in README @eneiluj [#3830](https://github.com/nextcloud/deck/pull/3830)
- Fix static analysis by stubbing more circle methods @juliushaertl [#3900](https://github.com/nextcloud/deck/pull/3900)
- fix(docs): fix links to JSON schemas for Trello @wiktor2200 [#3872](https://github.com/nextcloud/deck/pull/3872)
- Move to OCP\Collaboration\Resources\LoadAdditionalScriptsEvent @juliushaertl [#3818](https://github.com/nextcloud/deck/pull/3818)
- Rename settings to deck settings @PVince81 [#3928](https://github.com/nextcloud/deck/pull/3928)
- SCSS cleanup @juliushaertl [#3803](https://github.com/nextcloud/deck/pull/3803)
- Hide deprecated projects in sidebar and card details by default @Pytal [#3984](https://github.com/nextcloud/deck/pull/3984)
## 1.7.0
### Added
- Transfer ownership @matchish @luka-nextcloud @juliushaertl [#2496](https://github.com/nextcloud/deck/pull/2496)
- Import from trello via CLI @vitormattos [#3182](https://github.com/nextcloud/deck/pull/3182)
- Add app config to toggle the default calendar setting as an admin @juliushaertl [#3528](https://github.com/nextcloud/deck/pull/3528)
- Show board name in browser title @luka-nextcloud [#3499](https://github.com/nextcloud/deck/pull/3499)
- Move DeleteCron to be time insensitive @juliushaertl [#3599](https://github.com/nextcloud/deck/pull/3599)
- 🚸 Shows error on board fetchData @vinicius73 [#3653](https://github.com/nextcloud/deck/pull/3653)
- Add support for PHP 8.1 @juliushaertl [#3601](https://github.com/nextcloud/deck/pull/3601)
- Nextcloud 24 compatibility
### Fixed
- CardApiController: Fix order of optional parameters @simonspa [#3512](https://github.com/nextcloud/deck/pull/3512)
- Exclude deleted boards in the selection for target @luka-nextcloud [#3502](https://github.com/nextcloud/deck/pull/3502)
- Fix CalDAV blocking and modernize circles API usage @juliushaertl [#3500](https://github.com/nextcloud/deck/pull/3500)
- Timestamps on created and modified at values @luka-nextcloud [#3532](https://github.com/nextcloud/deck/pull/3532)
- return the selector for collections @dartcafe [#3552](https://github.com/nextcloud/deck/pull/3552)
- Generate fixed link for activity emails @luka-nextcloud [#3611](https://github.com/nextcloud/deck/pull/3611)
- 🐛 Fix missing files sidebar @vinicius73 [#3635](https://github.com/nextcloud/deck/pull/3635)
- Handle description shortening more gracefully @juliushaertl [#3650](https://github.com/nextcloud/deck/pull/3650)
- Sort boards non case sensitive @Ben-Ro [#3560](https://github.com/nextcloud/deck/pull/3560)
- Remove unused argument from transfer ownership @juliushaertl [#3712](https://github.com/nextcloud/deck/pull/3712)
- Fix: Check all circle shares for permissions @bink [#3625](https://github.com/nextcloud/deck/pull/3625)
- Extend API changelog @juliushaertl [#3522](https://github.com/nextcloud/deck/pull/3522)
- Fix talk integration @nickvergessen [#3529](https://github.com/nextcloud/deck/pull/3529)
- Fix confusion between stackId and boardId in StackService @eneiluj [#3541](https://github.com/nextcloud/deck/pull/3541)
- Add horizontal scrollbar into the large table inside description @luka-nextcloud [#3531](https://github.com/nextcloud/deck/pull/3531)
- Make links in markdown note bolder @luka-nextcloud [#3530](https://github.com/nextcloud/deck/pull/3530)
- Update master php testing versions @nickvergessen [#3561](https://github.com/nextcloud/deck/pull/3561)
- Update master php enviroment @nickvergessen [#3582](https://github.com/nextcloud/deck/pull/3582)
- Make insert attachment buttom easy to click @luka-nextcloud [#3612](https://github.com/nextcloud/deck/pull/3612)
- Remove extra bullet @elitejake [#3613](https://github.com/nextcloud/deck/pull/3613)
- l10n: Delete space @Valdnet [#3666](https://github.com/nextcloud/deck/pull/3666)
- Update master php testing versions @nickvergessen [#3688](https://github.com/nextcloud/deck/pull/3688)
- Fix wording to represent the code behavior @q-wertz [#3685](https://github.com/nextcloud/deck/pull/3685)
- Fix cron jobs @nickvergessen [#3689](https://github.com/nextcloud/deck/pull/3689)
- Update master php testing versions @nickvergessen [#3695](https://github.com/nextcloud/deck/pull/3695)
- Optimise queries when preparing card related notifications @Raudius [#3690](https://github.com/nextcloud/deck/pull/3690)
- Properly check for the stack AND setting board permissions @juliushaertl [#3670](https://github.com/nextcloud/deck/pull/3670)
- Replace deprecated String.prototype.substr() @CommanderRoot [#3669](https://github.com/nextcloud/deck/pull/3669)
- Dependency updates
- Show cards after moving into another list [#3736](https://github.com/nextcloud/deck/pull/3736)
- Fix paramter replacements when creating deck cards from talk messages @nickvergessen [#3683](https://github.com/nextcloud/deck/pull/3683)
- Fix hidden attachment icon on archived cards [#3733](https://github.com/nextcloud/deck/pull/3733)
- Adapt the card modal to upstream changes [#3764](https://github.com/nextcloud/deck/pull/3764)
- Fix text selection in dark mode and modal view [#3765](https://github.com/nextcloud/deck/pull/3765)
- Add missing indices [#3754](https://github.com/nextcloud/deck/pull/3754)
## 1.6.0-beta1
### Added
- #3177 Use async import for vue component on collections entrypoint @juliushaertl
- #2791 Open description links in new tab @fm-sys
- #3344 Improve combined search @eneiluj
- #3362 Improve search performance @eneiluj
- #2710 Due date shortcuts in the datepicker @jakobroehrl
### Fixed
- #3161 Reduce duplicate queries when fetching user boards an permissions @juliushaertl
- #3151 Always log generic exceptions @juliushaertl
- #3217 Move circle checks to a unified service and improve member checks @juliushaertl
- #3225 Check for null value to avoid TypeError in the group manager @juliushaertl
- #3263 Defer obtaining the user session in the config service @juliushaertl
- #3294 Fix print style issues @weeman1337
- #3299 Return false instead of throwing when getting calendar setting @juliushaertl
- #3298 Delete file shares through attachments API @juliushaertl
- #3343 Fix search pagination cursor @eneiluj
- #3326 add autofocus on board edit @weeman1337
- #3323 Extend drag-and-drop zone in card sidebar @old-green-frog
- #3364 Fix optional parameter order @juliushaertl
- #3324 Fix menu button position in card modal @valerydmitrieva
- #3391 Use displayname instead of uid for mentions (reopened against master) @kffl
- #3316 Additional check for stacks @juliushaertl
- #3357 Revert "Fix search pagination cursor" @juliushaertl
- #3327 Do not show both bullets and checkboxes for checklists @Themanwhosmellslikesugar
- #3375 Show absolute dates when printing @weeman1337
- #3376 Print assignee names @weeman1337
- #3384 Keep exceptions http response generic @juliushaertl
## 1.4.0 - 2021-04-13
### Added
* [#2934](https://github.com/nextcloud/deck/pull/2934) Advanced search queries (see [documentation](https://deck.readthedocs.io/en/latest/User_documentation_en/#search) for more details)
* [#2933](https://github.com/nextcloud/deck/pull/2933) Move full text search to proper events
### Fixed
* [#2964](https://github.com/nextcloud/deck/pull/2964) Fix navigating to board details
* Dependency updates
## 1.3.0
### Added
* [#2638](https://github.com/nextcloud/deck/pull/2638) Sharing files to cards
* [#2683](https://github.com/nextcloud/deck/pull/2683) Handle clicks on calendar entries
* Nextcloud 21 compatiblity
### Fixed
* [#2622](https://github.com/nextcloud/deck/pull/2622) Fix gradient and stack header spacing for safari
* [#2626](https://github.com/nextcloud/deck/pull/2626) Adding a description icon to cards when they contain a description without any checkmarks @MonkeySon
* [#2659](https://github.com/nextcloud/deck/pull/2659) Matching color of description cursor with text color @JonFStr
* [#2676](https://github.com/nextcloud/deck/pull/2676) Only load filter view when shown
* [#2680](https://github.com/nextcloud/deck/pull/2680) Do not try to add change data if it doesn't exist
* [#2681](https://github.com/nextcloud/deck/pull/2681) Filter out deleted stacks from results
* [#2685](https://github.com/nextcloud/deck/pull/2685) Show all boards in move card dialog @jakobroehrl
* [#2687](https://github.com/nextcloud/deck/pull/2687) 3dots no opacity @jakobroehrl
* [#2688](https://github.com/nextcloud/deck/pull/2688) Title > boardname @jakobroehrl
* [#2689](https://github.com/nextcloud/deck/pull/2689) Modal > bigger view wording @jakobroehrl
## 1.3.0-beta2
### Fixed
* [#2700](https://github.com/nextcloud/deck/pull/2700) Attempt to copy file on dropping it to deck @juliushaertl
* [#2701](https://github.com/nextcloud/deck/pull/2701) Fix uploading files by drag and drop @juliushaertl
* [#2707](https://github.com/nextcloud/deck/pull/2707) L10n: Change to a capital letter @Valdnet
* [#2712](https://github.com/nextcloud/deck/pull/2712) Docs: Fix table in section "GET /api/v1.0/config" @das-g
* [#2716](https://github.com/nextcloud/deck/pull/2716) Remove repair step which is no longer needed as we cleanup properly @juliushaertl
* [#2723](https://github.com/nextcloud/deck/pull/2723) Pad random color with leading zeroes @PVince81
* [#2729](https://github.com/nextcloud/deck/pull/2729) Remove invalid activity parameters @nickvergessen
* [#2750](https://github.com/nextcloud/deck/pull/2750) Fix deck activity emails not being translated @nickvergessen
* [#2751](https://github.com/nextcloud/deck/pull/2751) Properly set author for activity events that are triggered by cron @juliushaertl
## 1.2.2 - 2020-11-24
### Fixed
* [#2584](https://github.com/nextcloud/deck/pull/2584) Fix updating checkbox state and avoid issues due to duplicate sidebar element
* [#2586](https://github.com/nextcloud/deck/pull/2586) Fix card details button
* [#2587](https://github.com/nextcloud/deck/pull/2587) Move modal top spacing to the header to avoid side-effect when scrolling
* [#2588](https://github.com/nextcloud/deck/pull/2588) Do not render images in editor
* [#2609](https://github.com/nextcloud/deck/pull/2609) Fix issue with depenendency causing newline comments to not show
* [#2611](https://github.com/nextcloud/deck/pull/2611) Fix paragraph styling in comments
## 1.2.1 - 2020-11-18
### Fixed
* [#2570](https://github.com/nextcloud/deck/pull/2570) [#2571](https://github.com/nextcloud/deck/pull/2571) Fix error when deleting users @ksteinb
* [#2573](https://github.com/nextcloud/deck/pull/2573) Fix issue where card description was changed on the wrong card when switching cards
## 1.2.0 - 2020-11-16
### Added
* [#2430](https://github.com/nextcloud/deck/pull/2430) Due date notification setting per board
* [#2230](https://github.com/nextcloud/deck/pull/2230) Implement scrolling per stack
* [#1396](https://github.com/nextcloud/deck/pull/1396) API: Expose canCreateBoards through capabilities
* [#2245](https://github.com/nextcloud/deck/pull/2245) API: ETag support for API endpoints
### Fixed
* [#2330](https://github.com/nextcloud/deck/pull/2330) Enhanced undo handling for deletions @jakobroehrl
* [#2336](https://github.com/nextcloud/deck/pull/2336) Run unit tests on github actions
* [#2358](https://github.com/nextcloud/deck/pull/2358) Properly check if FTSEvent has an argument set
* [#2359](https://github.com/nextcloud/deck/pull/2359) Also exclude deleted items from calendar boards
* [#2361](https://github.com/nextcloud/deck/pull/2361) Comments do not depend on the comments app @jakobroehrl
* [#2363](https://github.com/nextcloud/deck/pull/2363) Use uid instead of displayname for sharee results
* [#2367](https://github.com/nextcloud/deck/pull/2367) Properly handle multiple shares in a row and refactor sharee loading
* [#2404](https://github.com/nextcloud/deck/pull/2404) Update Controls.vue @Flamenco
* [#2433](https://github.com/nextcloud/deck/pull/2433) Fix scrollable titles with Dyslexia font
* [#2434](https://github.com/nextcloud/deck/pull/2434) Move most destructive actions in drop down menus to the bottom @Nienzu
* [#2435](https://github.com/nextcloud/deck/pull/2435) Do not open the dialog automatically upon card creation, only upon click
* [#2437](https://github.com/nextcloud/deck/pull/2437) Only remove card padding for editable cards
* [#2440](https://github.com/nextcloud/deck/pull/2440) Move navigation toggle handling to @nextcloud/vue native one
* [#2463](https://github.com/nextcloud/deck/pull/2463) Changed triple dots to ellipsis @rakekniven
* [#2500](https://github.com/nextcloud/deck/pull/2500) Move details and description to dedicated component
* [#2517](https://github.com/nextcloud/deck/pull/2517) Filter out duplicate cards in overview
* [#2502](https://github.com/nextcloud/deck/pull/2502) Assignment code refactoring
* [#2519](https://github.com/nextcloud/deck/pull/2519) Fix invisibility bug on modal component @wrox
* [#2520](https://github.com/nextcloud/deck/pull/2520) Add placeholder for the description input
* [#2521](https://github.com/nextcloud/deck/pull/2521) Add migration step to make table layout consistent
* [#2524](https://github.com/nextcloud/deck/pull/2524) Only try to extract first part of the explode result
* [#2531](https://github.com/nextcloud/deck/pull/2531) Add proper type to boolean parameter
* [#2532](https://github.com/nextcloud/deck/pull/2532) Fix handling of notifications if a board does no longer exist
* [#2536](https://github.com/nextcloud/deck/pull/2536) Only set flex layout on the active tab
* [#2538](https://github.com/nextcloud/deck/pull/2538) Do not reset filter when staying on the same board
* [#2539](https://github.com/nextcloud/deck/pull/2539) Apply proper checks for menu items
* [#2540](https://github.com/nextcloud/deck/pull/2540) Only build one main bundle
* [#2562](https://github.com/nextcloud/deck/pull/2562) Only try to extract first part of the explode result (Part 2)
## 1.1.0 - 2020-10-03
### Features
* [#2115](https://github.com/nextcloud/deck/pull/2115) Dashboard widget for Nextcloud 20
* [#1545](https://github.com/nextcloud/deck/pull/1545) Show cards in calendar/tasks app and make them available though CalDAV
* [#2200](https://github.com/nextcloud/deck/pull/2200) Unified search implementation for Nextcloud 20
* [#1934](https://github.com/nextcloud/deck/pull/1934) Upcoming cards overview @jakobroehrl
* [#2047](https://github.com/nextcloud/deck/pull/2047) Show card details in modal @jakobroehrl
* [#1853](https://github.com/nextcloud/deck/pull/1853) Archive all cards from stack @jakobroehrl
* [#1865](https://github.com/nextcloud/deck/pull/1865) Add stack button on empty board @jakobroehrl
* [#1926](https://github.com/nextcloud/deck/pull/1926) New filter: unassigned cards @jakobroehrl
### Bugfixes
* [#2035](https://github.com/nextcloud/deck/pull/2035) Attach files in description @jakobroehrl
* [#2123](https://github.com/nextcloud/deck/pull/2123) Fix control tooltip @jakobroehrl
* [#2144](https://github.com/nextcloud/deck/pull/2144) Fix nextcloud if install with dev dependencies @matchish
* [#2158](https://github.com/nextcloud/deck/pull/2158) Fix description in dark mode
* [#2188](https://github.com/nextcloud/deck/pull/2188) CardBadges: Count checkboxes started with "+ [ ]" @joreiff
* [#2206](https://github.com/nextcloud/deck/pull/2206) Fix read-only sidebar (fixes #2033)
* [#2208](https://github.com/nextcloud/deck/pull/2208) Fix design, dark mode and keyboard navigation of the board list
* [#2210](https://github.com/nextcloud/deck/pull/2210) Fix an incorrect/misleading message in lib/Service/BoardService.php @jordanbancino
* [#2243](https://github.com/nextcloud/deck/pull/2243) Various smaller styling fixes
* [#2244](https://github.com/nextcloud/deck/pull/2244) Toggle filter on clicking card labels
* [#2117](https://github.com/nextcloud/deck/pull/2117) Activity fixes
* [#2255](https://github.com/nextcloud/deck/pull/2255) Use unified search events to apply on board filtering
* [#2271](https://github.com/nextcloud/deck/pull/2271) Sort tags in filter @jakobroehrl
* [#2318](https://github.com/nextcloud/deck/pull/2318) Card title: prevent space and no text @jakobroehrl
* [#2319](https://github.com/nextcloud/deck/pull/2319) Move style loading to BeforeTemplateRenderedEvent
* [#2320](https://github.com/nextcloud/deck/pull/2320) Consistent naming @jakobroehrl
* [#2252](https://github.com/nextcloud/deck/pull/2252) Fix double slash in the deck activity links @baraksoa
* [#2270](https://github.com/nextcloud/deck/pull/2270) Fix empty content view to align with other widgets
* [#2275](https://github.com/nextcloud/deck/pull/2275) Wait for services to be registered before performing further setup that requires services
* [#2278](https://github.com/nextcloud/deck/pull/2278) Fix wrong SQL queries @Chartman123
* [#2279](https://github.com/nextcloud/deck/pull/2279) L10n:add translation to card placeholder @mjanssens
* [#2282](https://github.com/nextcloud/deck/pull/2282) Duedate picker localization
* [#2283](https://github.com/nextcloud/deck/pull/2283) Do not handle exceptions from page controller in the ExceptionMiddleware
* [#2298](https://github.com/nextcloud/deck/pull/2298) Use absolute URLs for the search @nickvergessen
## 1.0.5 - 2020-07-15
### Fixed
* [#2116](https://github.com/nextcloud/deck/pull/2116) Fix navigation layout issues @juliushaertl
* [#2118](https://github.com/nextcloud/deck/pull/2118) Use proper parameter when handling attachments @juliushaertl
## 1.0.4 - 2020-06-26
### Fixed
* [#2062](https://github.com/nextcloud/deck/pull/2062) Fix saving card description after toggling checkboxes @juliushaertl
* [#2065](https://github.com/nextcloud/deck/pull/2065) Adding CSS rule for Markdown Blockquotes @reox
* [#2059](https://github.com/nextcloud/deck/pull/2059) Fix fetching attachments on card change @juliushaertl
* [#2060](https://github.com/nextcloud/deck/pull/2060) Use mixing for relative date in card sidebar @juliushaertl
## 1.0.3 - 2020-06-19
### Fixed
* [#2019](https://github.com/nextcloud/deck/pull/2019) Remove old global css rule @juliushaertl
* [#2020](https://github.com/nextcloud/deck/pull/2020) Fix navigation issue with leftover nodes @juliushaertl
* [#2021](https://github.com/nextcloud/deck/pull/2021) Fix description issues @juliushaertl
* [#2022](https://github.com/nextcloud/deck/pull/2022) Fix replyto issues with the comments API @juliushaertl
* [#2027](https://github.com/nextcloud/deck/pull/2027) Allow to unassign current user from card @juliushaertl
* [#2029](https://github.com/nextcloud/deck/pull/2029) Fix wording : stack -> list @cloud2018
* [#2032](https://github.com/nextcloud/deck/pull/2032) Force order by id as second sorting key @juliushaertl
* [#2045](https://github.com/nextcloud/deck/pull/2045) Improve label styling @juliushaertl
* [#2010](https://github.com/nextcloud/deck/pull/2010) User documentation fixes @Nyco
* [#1998](https://github.com/nextcloud/deck/pull/1998) Add Checklist explaination to the doc @4rnoP
## 1.0.2 - 2020-06-03
### Fixed
* [#1774](https://github.com/nextcloud/deck/pull/1774) Remove deprecated global API calls
* [#1918](https://github.com/nextcloud/deck/pull/1918) Save compact mode on localstorage @jakobroehrl
* [#1919](https://github.com/nextcloud/deck/pull/1919) Show sidebar after card creation @jakobroehrl
* [#1924](https://github.com/nextcloud/deck/pull/1924) Boards ordered in main page @jakobroehrl
* [#1925](https://github.com/nextcloud/deck/pull/1925) Fix generated fronted urls
* [#1944](https://github.com/nextcloud/deck/pull/1944) Move navigation to @nextcloud/vue components
* [#1945](https://github.com/nextcloud/deck/pull/1945) Fix datetime picker
* [#1946](https://github.com/nextcloud/deck/pull/1946) Fix translations
* [#1976](https://github.com/nextcloud/deck/pull/1976) Delete boards that users own once they are deleted
* [#1977](https://github.com/nextcloud/deck/pull/1977) Redirect from previously used routes to the current ones
## 1.0.1 - 2020-05-15
### Fixed
* Removes debug filter output
* Labels are now sorted
* Stack title doesn't break up
* Fix move card modal
* Sort boards in navigation
* Fixes the attachment modal
* Handle deleted boards better
* User can only clone a board on canManage permissions
* Fix modal imports
* Show menu in compact mode
* Added a filter reset button
* Add hover effect to board list
* New filter icon
* Improve hovering response in board
* Enable linkify in description renderer @icewind1991
* Enhance board selector
* Fix issue if card description might be null
* Revert markdown styles from old frontend
* Do not scroll cards into view
* Fix reodering performance
## 1.0.0 - 2020-05-06
### Added
- Completly rewritten frontend
- Better maintainability
- Various small fixes
- Unified user interface with Nextcloud
- Separate comment and activity timelines
- Add ability to reply to comments #1537
- Filter cards on board #1507 @jakobroehrl
- Add cards to projects #1294 @jakobroehrl
- Move cards to other boards #1242 @jakobroehrl
- Clone boards with existing stacks and labels #1221 @jakobroehrl
- Upload multiple files at once and in parallel
A huge thangs goes to our awesome community that put enourmous effort into the frontend migration:
Special thanks for contributing huge parts of the Vue.js migration:
@jakobroehrl @weeman1337 @nicolad
Testers/reporters:
@cloud2018 @putt1ck @bpcurse
Android app team for helping to improve our REST API:
@desperateCoder @stefan-niedermann
## 0.8.0 - 2020-01-16
### Added
## Added
- Case insensitive search (@matchish)
### Fixed
## Fixed
- Fix reversed permissions for reordering stacks (@JLueke)
- Fix reversed visibility of 'add stack' field (@JLueke)
- Fix occ export command
@@ -563,7 +16,7 @@ Android app team for helping to improve our REST API:
## 0.7.0 - 2019-08-20
### Added
## Added
- Make deck compatible to Nextcloud 17
- Allow to set the description when creating cards though the REST API
@@ -636,7 +89,7 @@ Android app team for helping to improve our REST API:
- Fix comment activities on Nextcloud 15
- Fix issues with Edge
- API: Fix numeric types that were returned as strings
- API: Fix If-Modified-Since header parsing
- API: Fix If-Modified-Since header parsing
## 0.5.1 - 2018-12-05
@@ -763,7 +216,7 @@ Android app team for helping to improve our REST API:
### Fixed
- Various frontend fixes
- Fix sidebar drag issues
- Improvements for IE11
- Improvements for IE11
- Fix bug when draging a card to an empty stack
## 0.2.1 - 2017-07-04
@@ -837,7 +290,7 @@ Android app team for helping to improve our REST API:
### Fixed
- Various styling improvements
- Fix problems with MySQL and PostgreSQL
- Fix problems with MySQL and PostgreSQL
- Select first color by default when creating boards
- Fix error when changing board permissions
@@ -845,9 +298,9 @@ Android app team for helping to improve our REST API:
### Added
- Sharing boards with other users
- Create and manage boards
- Create and manage boards
- Sort cards on stacks by drag-and-drop
- Assign labels
- Markdown notes for each card
- Archive cards
- Archive cards

View File

@@ -30,16 +30,6 @@ build: clean-dist install-deps build-js
release: clean-dist install-deps-nodev build-js
lint: lint-js lint-php
lint-js:
npm run lint
npm run stylelint
lint-php:
composer run lint 1>/dev/null
composer run cs:check
build-js: install-deps-js
npm run build
@@ -60,7 +50,8 @@ ifeq (, $(shell which phpunit 2> /dev/null))
php $(build_tools_directory)/phpunit.phar -c tests/phpunit.xml --coverage-clover build/php-unit.coverage.xml
php $(build_tools_directory)/phpunit.phar -c tests/phpunit.integration.xml --coverage-clover build/php-integration.coverage.xml
else
phpunit -c tests/phpunit.integration.xml --testsuite=integration-database --coverage-clover build/php-integration.coverage.xml
phpunit -c tests/phpunit.xml --coverage-clover build/php-unit.coverage.xml
phpunit -c tests/phpunit.integration.xml --coverage-clover build/php-integration.coverage.xml
endif
test-integration:

109
README.md
View File

@@ -1,98 +1,57 @@
# Deck
[![Build Status](https://travis-ci.org/nextcloud/deck.svg?branch=main)](https://travis-ci.org/nextcloud/deck) [![CodeCov](https://codecov.io/github/nextcloud/deck/coverage.svg?branch=main)](https://codecov.io/github/nextcloud/deck) [![Codacy Badge](https://api.codacy.com/project/badge/Grade/e403f723f42a4abd93b2cfe36cbd7eee)](https://www.codacy.com/app/juliushaertl/deck?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=nextcloud/deck&amp;utm_campaign=Badge_Grade) [![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/nextcloud/deck/badges/quality-score.png?b=main)](https://scrutinizer-ci.com/g/nextcloud/deck/?branch=main) [![#nextcloud-deck](https://img.shields.io/badge/IRC-%23nextcloud--deck%20on%20freenode-blue.svg)](https://webchat.freenode.net/?channels=nextcloud-deck)
[![Build Status](https://travis-ci.org/nextcloud/deck.svg?branch=master)](https://travis-ci.org/nextcloud/deck) [![CodeCov](https://codecov.io/github/nextcloud/deck/coverage.svg?branch=master)](https://codecov.io/github/nextcloud/deck) [![Codacy Badge](https://api.codacy.com/project/badge/Grade/e403f723f42a4abd93b2cfe36cbd7eee)](https://www.codacy.com/app/juliushaertl/deck?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=nextcloud/deck&amp;utm_campaign=Badge_Grade) [![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/nextcloud/deck/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/nextcloud/deck/?branch=master) [![#nextcloud-deck](https://img.shields.io/badge/IRC-%23nextcloud--deck%20on%20freenode-blue.svg)](https://webchat.freenode.net/?channels=nextcloud-deck)
Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.
- Add your tasks to cards and put them in order
- Write down additional notes in markdown
- Assign labels for even better organization
- Share with your team, friends or family
- Integrates with the [Circles](https://github.com/nextcloud/circles) app!
- Attach files and embed them in your markdown description
- Discuss with your team using comments
- Keep track of changes in the activity stream
- Get your project organized
- :inbox_tray: Add your tasks to cards and put them in order
- :page_facing_up: Write down additional notes in markdown
- :bookmark: Assign labels for even better organization
- :busts_in_silhouette: Share with your team, friends or family
- :family: Integrates with the [Circles](https://github.com/nextcloud/circles) app!
- :paperclip: Attach files and embed them in your markdown description
- :speech_balloon: Discuss with your team using comments
- :zap: Keep track of changes in the activity stream
- :rocket: Get your project organized
![Deck - Manage cards on your board](http://download.bitgrid.net/nextcloud/deck/screenshots/1.0/Deck-2.png)
### Mobile apps
- [Nextcloud Deck app for Android](https://github.com/stefan-niedermann/nextcloud-deck) - It is available in [F-Droid](https://f-droid.org/de/packages/it.niedermann.nextcloud.deck/) and the [Google Play Store](https://play.google.com/store/apps/details?id=it.niedermann.nextcloud.deck.play)
- [deck NG for Android and iOS](https://github.com/meltzow/deck-ng) - It is available in [Google Play Store](https://play.google.com/store/apps/details?id=net.meltzow.deckng) and [Apple App Store](https://apps.apple.com/us/app/deck-ng/id6443334702)
### 3rd-Party Integrations
- [trello-to-deck](https://github.com/maxammann/trello-to-deck) - Migrates cards from Trello
- [mail2deck](https://github.com/newroco/mail2deck) - Provides an "email in" solution
- [A-deck](https://github.com/leoossa/A-deck) - Chrome Extension that allows to create new card in selected stack based on current tab
![Deck - Manage cards on your board](https://download.bitgrid.net/nextcloud/deck/screenshots/Deck.png)
## Installation/Update
The app can be installed through the app store within Nextcloud. You can also download the latest release from the [release page](https://github.com/nextcloud-releases/deck/releases).
This app is supposed to work on the two latest Nextcloud versions.
## Performance limitations
### Install latest release
Deck is not yet ready for intensive usage.
A lot of database queries are generated when the number of boards, cards and attachments is high.
For example, a user having access to 13 boards, with each board having on average 100 cards,
and each card having on average 5 attachments,
would generate 6500 database queries when doing the file related queries
which would increase the page loading time significantly.
You can download and install the latest release from the [Nextcloud app store](https://apps.nextcloud.com/apps/deck)
Improvements on Nextcloud server and Deck itself will improve the situation.
### Install from git
If you want to run the latest development version from git source, you need to clone the repo to your apps folder:
```
git clone https://github.com/nextcloud/deck.git
cd deck
make install-deps
make build
```
Please make sure you have installed the following dependencies: `make, which, tar, npm, curl, composer`
### Install the nightly builds
Instead of setting everything up manually, you can just [download the nightly build](https://github.com/nextcloud/deck/releases/tag/nightly) instead. These builds are updated every 24 hours, and are pre-configured with all the needed dependencies.
## Developing
There are multiple ways to develop on Deck. As you will need a Nextcloud server running, the individual options are described below.
### PHP
### General build instructions
Nothing to prepare, just dig into the code.
General build instructions for the app itself are the same for all options.
### JavaScript
To build you will need to have [Node.js](https://nodejs.org/en/) and [Composer](https://getcomposer.org/) installed.
- Install PHP dependencies: `composer install --no-dev`
- Install JS dependencies: `npm ci`
- Build JavaScript for the frontend
- Development build `npm run dev`
- Watch for changes `npm run watch`
- Production build `npm run build`
### Faster frontend developing with HMR
You can enable HMR (Hot module replacement) to avoid page reloads when working on the frontend:
1. â˜‘ī¸ Install and enable [`hmr_enabler` app](https://github.com/nextcloud/hmr_enabler)
2. 🏁 Run `npm run serve`
3. 🌍 Open the normal Nextcloud server URL (not the URL given by above command)
### GitHub Codespaces / VS Code devcontainer
- Open code spaces or the repository in VS Code to start the dev container
- The container will automatically install all dependencies and build the app
- Nextcloud will be installed from the master development branch and be available on a port exposed by the container
### Docker: Simple app development container
- Fork the app
- Clone the repository: `git clone https://github.com/nextcloud/deck.git`
- Go into deck directory: `cd deck`
- Build the app as described in the general build instructions
- Run Nextcloud development container and mount the apps source code into it
```
docker run --rm \
-p 8080:80 \
-v ~/path/to/app:/var/www/html/apps-extra/app \
ghcr.io/juliushaertl/nextcloud-dev-php80:latest
```
### Full Nextcloud development environment
You need to setup a [development environment](https://docs.nextcloud.com/server/latest/developer_manual//getting_started/devenv.html) of the current Nextcloud version. You can also alternatively install & run the [nextcloud docker container](https://github.com/juliushaertl/nextcloud-docker-dev).
After the finished installation, you can clone the deck project directly in the `/[nextcloud-docker-dev-dir]/workspace/server/apps/` folder.
Deck requires running a `make build-js` to install npm dependencies and build the JavaScript code using webpack. While developing you can also use `make watch` to rebuild everytime the code changes.
### Running tests
You can use the provided Makefile to run all tests by using:

View File

@@ -1,29 +0,0 @@
# Security Policy
## Supported Versions
| Version | Nextcloud version | Supported |
| ------- | ----------------- | ------------------ |
| 1.0.x | 18, 19 | :white_check_mark: |
| 0.8.x | 17 | :white_check_mark: |
| <0.7.x | - | :x: |
## Reporting a Vulnerability
Security is very important to us. If you have discovered a security issue with Nextcloud,
please read our responsible disclosure guidelines and contact us at [hackerone.com/nextcloud](https://hackerone.com/nextcloud).
Your report should include:
- Product version
- A vulnerability description
- Reproduction steps
A member of the security team will confirm the vulnerability, determine its impact, and develop a fix.
The fix will be applied to the main branch, tested, and packaged in the next security release.
The vulnerability will be publicly announced after the release. Finally, your name will be added
to the [hall of fame](https://hackerone.com/nextcloud/thanks) as a thank you from the entire Nextcloud community. Note our
[threat model](https://nextcloud.com/security/threat-model) to know what is expected behavior.
Please visit https://nextcloud.com/security/ for further information about security.

View File

@@ -3,8 +3,6 @@
* @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
*
@@ -23,17 +21,19 @@
*
*/
declare(strict_types=1);
use OCA\Deck\AppInfo\Application;
use OCP\AppFramework\QueryException;
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']
];
}
if ((@include_once __DIR__ . '/../vendor/autoload.php')=== false) {
throw new Exception('Cannot include autoload. Did you run install dependencies using composer?');
}
try {
/** @var Application $app */
$app = \OC::$server->query(Application::class);
$app->register();
} catch (QueryException $e) {
}
/** Load activity style global so it is availabile in the activity app as well */
\OC_Util::addStyle('deck', 'activity');

View File

@@ -23,6 +23,8 @@
namespace OCA\Deck\AppInfo;
use OCP\AppFramework\App;
/**
* Additional autoloader registration, e.g. registering composer autoloaders
*/

482
appinfo/database.xml Normal file
View File

@@ -0,0 +1,482 @@
<?xml version="1.0" encoding="UTF-8" ?>
<database>
<name>*dbname*</name>
<create>true</create>
<overwrite>false</overwrite>
<charset>utf8</charset>
<table>
<name>*dbprefix*deck_boards</name>
<declaration>
<field>
<name>id</name>
<type>integer</type>
<default>0</default>
<notnull>true</notnull>
<autoincrement>1</autoincrement>
<length>4</length>
</field>
<field>
<name>title</name>
<type>text</type>
<notnull>true</notnull>
<length>100</length>
</field>
<field>
<name>owner</name>
<type>text</type>
<notnull>true</notnull>
<length>64</length>
</field>
<field>
<name>color</name>
<type>text</type>
<length>6</length>
<notnull>false</notnull>
</field>
<field>
<name>archived</name>
<type>boolean</type>
<default>false</default>
</field>
<field>
<name>deleted_at</name>
<type>integer</type>
<default>0</default>
<length>8</length>
<notnull>false</notnull>
<unsigned>true</unsigned>
</field>
<field>
<name>last_modified</name>
<type>integer</type>
<default></default>
<notnull>false</notnull>
<unsigned>true</unsigned>
</field>
</declaration>
</table>
<table>
<name>*dbprefix*deck_stacks</name>
<declaration>
<field>
<name>id</name>
<type>integer</type>
<default>0</default>
<notnull>true</notnull>
<autoincrement>1</autoincrement>
<length>4</length>
</field>
<field>
<name>title</name>
<type>text</type>
<notnull>true</notnull>
<length>100</length>
</field>
<field>
<name>board_id</name>
<type>integer</type>
<length>8</length>
<notnull>true</notnull>
</field>
<field>
<name>order</name>
<type>integer</type>
<length>8</length>
<notnull>false</notnull>
</field>
<field>
<name>deleted_at</name>
<type>integer</type>
<default>0</default>
<length>8</length>
<notnull>false</notnull>
<unsigned>true</unsigned>
</field>
<field>
<name>last_modified</name>
<type>integer</type>
<default></default>
<notnull>false</notnull>
<unsigned>true</unsigned>
</field>
<index>
<name>deck_stacks_board_id_index</name>
<field>
<name>board_id</name>
</field>
</index>
<index>
<name>deck_stacks_order_index</name>
<field>
<name>order</name>
</field>
</index>
</declaration>
</table>
<table>
<name>*dbprefix*deck_cards</name>
<declaration>
<field>
<name>id</name>
<type>integer</type>
<default>0</default>
<notnull>true</notnull>
<autoincrement>1</autoincrement>
<length>4</length>
</field>
<field>
<name>title</name>
<type>text</type>
<length>100</length>
<notnull>true</notnull>
</field>
<field>
<name>description</name>
<type>clob</type>
<notnull>false</notnull>
</field>
<field>
<name>description_prev</name>
<type>clob</type>
<notnull>false</notnull>
</field>
<field>
<name>stack_id</name>
<type>integer</type>
<length>8</length>
<notnull>true</notnull>
</field>
<field>
<name>type</name>
<type>text</type>
<notnull>true</notnull>
<length>64</length>
<default>plain</default>
</field>
<field>
<name>last_modified</name>
<type>integer</type>
<default></default>
<notnull>false</notnull>
<unsigned>true</unsigned>
</field>
<field>
<name>last_editor</name>
<type>text</type>
<notnull>false</notnull>
<length>64</length>
</field>
<field>
<name>created_at</name>
<type>integer</type>
<default></default>
<notnull>false</notnull>
<unsigned>true</unsigned>
</field>
<field>
<name>owner</name>
<type>text</type>
<notnull>true</notnull>
<length>64</length>
</field>
<field>
<name>order</name>
<type>integer</type>
<length>8</length>
<notnull>false</notnull>
</field>
<field>
<name>archived</name>
<type>boolean</type>
<default>false</default>
</field>
<field>
<name>duedate</name>
<type>timestamp</type>
<default>0</default>
</field>
<field>
<name>notified</name>
<type>boolean</type>
<default>false</default>
</field>
<field>
<name>deleted_at</name>
<type>integer</type>
<default>0</default>
<length>8</length>
<notnull>false</notnull>
<unsigned>true</unsigned>
</field>
<index>
<name>deck_cards_stack_id_index</name>
<field>
<name>stack_id</name>
</field>
</index>
<index>
<name>deck_cards_order_index</name>
<field>
<name>order</name>
</field>
</index>
<index>
<name>deck_cards_archived_index</name>
<field>
<name>archived</name>
</field>
</index>
</declaration>
</table>
<table>
<name>*dbprefix*deck_attachment</name>
<declaration>
<field>
<name>id</name>
<type>integer</type>
<default>0</default>
<notnull>true</notnull>
<autoincrement>1</autoincrement>
<length>4</length>
</field>
<field>
<name>card_id</name>
<type>integer</type>
<length>8</length>
<notnull>true</notnull>
</field>
<field>
<name>type</name>
<type>text</type>
<notnull>true</notnull>
<length>64</length>
</field>
<field>
<name>data</name>
<type>text</type>
</field>
<field>
<name>last_modified</name>
<type>integer</type>
<default/>
<length>8</length>
<notnull>false</notnull>
<unsigned>true</unsigned>
</field>
<field>
<name>created_at</name>
<type>integer</type>
<default/>
<length>8</length>
<notnull>false</notnull>
<unsigned>true</unsigned>
</field>
<field>
<name>created_by</name>
<type>text</type>
<notnull>true</notnull>
<length>64</length>
</field>
<field>
<name>deleted_at</name>
<type>integer</type>
<default>0</default>
<length>8</length>
<notnull>false</notnull>
<unsigned>true</unsigned>
</field>
</declaration>
</table>
<table>
<name>*dbprefix*deck_labels</name>
<declaration>
<field>
<name>id</name>
<type>integer</type>
<default>0</default>
<notnull>true</notnull>
<autoincrement>1</autoincrement>
<length>4</length>
</field>
<field>
<name>title</name>
<type>text</type>
<notnull>false</notnull>
<length>100</length>
</field>
<field>
<name>color</name>
<type>text</type>
<length>6</length>
<notnull>false</notnull>
</field>
<field>
<name>board_id</name>
<type>integer</type>
<notnull>true</notnull>
<length>8</length>
</field>
<field>
<name>last_modified</name>
<type>integer</type>
<default></default>
<notnull>false</notnull>
<unsigned>true</unsigned>
</field>
<index>
<name>deck_labels_board_id_index</name>
<field>
<name>board_id</name>
</field>
</index>
</declaration>
</table>
<table>
<name>*dbprefix*deck_assigned_labels</name>
<declaration>
<field>
<name>id</name>
<type>integer</type>
<default>0</default>
<notnull>true</notnull>
<autoincrement>1</autoincrement>
<length>4</length>
</field>
<field>
<name>label_id</name>
<type>integer</type>
<default>0</default>
<notnull>true</notnull>
<length>4</length>
</field>
<field>
<name>card_id</name>
<type>integer</type>
<default>0</default>
<notnull>true</notnull>
<length>4</length>
</field>
<index>
<name>deck_assigned_labels_idx_i</name>
<field>
<name>label_id</name>
</field>
</index>
<index>
<name>deck_assigned_labels_idx_c</name>
<field>
<name>card_id</name>
</field>
</index>
</declaration>
</table>
<table>
<name>*dbprefix*deck_assigned_users</name>
<declaration>
<field>
<name>id</name>
<type>integer</type>
<default>0</default>
<notnull>true</notnull>
<autoincrement>1</autoincrement>
<length>4</length>
</field>
<field>
<name>participant</name>
<type>text</type>
<notnull>true</notnull>
<length>64</length>
</field>
<field>
<name>card_id</name>
<type>integer</type>
<default>0</default>
<notnull>true</notnull>
<length>4</length>
</field>
<index>
<name>deck_assigned_users_idx_p</name>
<field>
<name>participant</name>
</field>
</index>
<index>
<name>deck_assigned_users_idx_c</name>
<field>
<name>card_id</name>
</field>
</index>
</declaration>
</table>
<table>
<name>*dbprefix*deck_board_acl</name>
<declaration>
<field>
<name>id</name>
<type>integer</type>
<default>0</default>
<notnull>true</notnull>
<autoincrement>1</autoincrement>
<length>4</length>
</field>
<field>
<name>board_id</name>
<type>integer</type>
<notnull>true</notnull>
<length>8</length>
</field>
<field>
<name>type</name>
<type>integer</type>
<notnull>true</notnull>
<length>4</length>
</field>
<field>
<name>participant</name>
<type>text</type>
<notnull>true</notnull>
<length>64</length>
</field>
<field>
<name>permission_edit</name>
<type>boolean</type>
<default>false</default>
</field>
<field>
<name>permission_share</name>
<type>boolean</type>
<default>false</default>
</field>
<field>
<name>permission_manage</name>
<type>boolean</type>
<default>false</default>
</field>
<index>
<name>deck_board_acl_uq_i</name>
<unique>true</unique>
<field>
<name>board_id</name>
<sorting>ascending</sorting>
</field>
<field>
<name>type</name>
<sorting>ascending</sorting>
</field>
<field>
<name>participant</name>
<sorting>ascending</sorting>
</field>
</index>
<index>
<name>deck_board_acl_idx_i</name>
<field>
<name>board_id</name>
</field>
</index>
</declaration>
</table>
</database>

View File

@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<info xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://apps.nextcloud.com/schema/apps/info.xsd">
<?xml version="1.0"?>
<info xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://apps.nextcloud.com/schema/apps/info.xsd">
<id>deck</id>
<name>Deck</name>
<summary>Personal planning and team project organization</summary>
@@ -7,54 +8,48 @@
- đŸ“Ĩ Add your tasks to cards and put them in order
- 📄 Write down additional notes in Markdown
- 📄 Write down additional notes in markdown
- 🔖 Assign labels for even better organization
- đŸ‘Ĩ Share with your team, friends or family
- 📎 Attach files and embed them in your Markdown description
- 📎 Attach files and embed them in your markdown description
- đŸ’Ŧ Discuss with your team using comments
- ⚡ Keep track of changes in the activity stream
- 🚀 Get your project organized
</description>
<version>1.11.7</version>
<version>1.0.0-alpha1</version>
<licence>agpl</licence>
<author>Julius Härtl</author>
<documentation>
<user>https://deck.readthedocs.io/en/latest/User_documentation_en/</user>
<developer>https://deck.readthedocs.io/en/latest/API/</developer>
</documentation>
<namespace>Deck</namespace>
<types>
<dav/>
<dav />
</types>
<category>organization</category>
<category>office</category>
<website>https://github.com/nextcloud/deck</website>
<bugs>https://github.com/nextcloud/deck/issues</bugs>
<repository type="git">https://github.com/nextcloud/deck.git</repository>
<screenshot>https://download.bitgrid.net/nextcloud/deck/screenshots/1.0/Deck-1.png</screenshot>
<screenshot>https://download.bitgrid.net/nextcloud/deck/screenshots/1.0/Deck-2.png</screenshot>
<screenshot>https://download.bitgrid.net/nextcloud/deck/screenshots/0.5/deck-notifications.png</screenshot>
<screenshot>https://download.bitgrid.net/nextcloud/deck/screenshots/0.5/deck-comment2.png</screenshot>
<dependencies>
<php min-version="5.6"/>
<database min-version="9.4">pgsql</database>
<database>sqlite</database>
<database min-version="8.0">mysql</database>
<nextcloud min-version="27" max-version="27"/>
<database min-version="5.5">mysql</database>
<nextcloud min-version="17" max-version="19" />
</dependencies>
<background-jobs>
<job>OCA\Deck\Cron\DeleteCron</job>
<job>OCA\Deck\Cron\ScheduledNotifications</job>
<job>OCA\Deck\Cron\CardDescriptionActivity</job>
<job>OCA\Deck\Cron\SessionsCleanup</job>
</background-jobs>
<repair-steps>
<live-migration>
<step>OCA\Deck\Migration\DeletedCircleCleanup</step>
</live-migration>
<post-migration>
<step>OCA\Deck\Migration\UnknownUsers</step>
</post-migration>
</repair-steps>
<commands>
<command>OCA\Deck\Command\UserExport</command>
<command>OCA\Deck\Command\BoardImport</command>
<command>OCA\Deck\Command\TransferOwnership</command>
</commands>
<activity>
<settings>
@@ -69,20 +64,9 @@
<provider>OCA\Deck\Activity\DeckProvider</provider>
</providers>
</activity>
<fulltextsearch>
<provider min-version="16">OCA\Deck\Provider\DeckProvider</provider>
</fulltextsearch>
<navigations>
<navigation>
<name>Deck</name>
<route>deck.page.index</route>
<icon>deck.svg</icon>
<order>10</order>
</navigation>
</navigations>
<sabre>
<calendar-plugins>
<plugin>OCA\Deck\DAV\CalendarPlugin</plugin>
</calendar-plugins>
</sabre>
</info>

View File

@@ -25,7 +25,9 @@
return [
'routes' => [
['name' => 'page#index', 'url' => '/', 'verb' => 'GET'],
['name' => 'page#redirectToCard', 'url' => '/card/{cardId}', 'verb' => 'GET'],
['name' => 'Config#get', 'url' => '/config', 'verb' => 'GET'],
['name' => 'Config#setValue', 'url' => '/config/{key}', 'verb' => 'POST'],
// boards
['name' => 'board#index', 'url' => '/boards', 'verb' => 'GET'],
@@ -39,8 +41,6 @@ return [
['name' => 'board#updateAcl', 'url' => '/boards/{boardId}/acl/{aclId}', 'verb' => 'PUT'],
['name' => 'board#deleteAcl', 'url' => '/boards/{boardId}/acl/{aclId}', 'verb' => 'DELETE'],
['name' => 'board#clone', 'url' => '/boards/{boardId}/clone', 'verb' => 'POST'],
['name' => 'board#transferOwner', 'url' => '/boards/{boardId}/transferOwner', 'verb' => 'PUT'],
['name' => 'board#export', 'url' => '/boards/{boardId}/export', 'verb' => 'GET'],
// stacks
['name' => 'stack#index', 'url' => '/stacks/{boardId}', 'verb' => 'GET'],
@@ -64,9 +64,8 @@ return [
['name' => 'card#assignLabel', 'url' => '/cards/{cardId}/label/{labelId}', 'verb' => 'POST'],
['name' => 'card#removeLabel', 'url' => '/cards/{cardId}/label/{labelId}', 'verb' => 'DELETE'],
['name' => 'card#assignUser', 'url' => '/cards/{cardId}/assign', 'verb' => 'POST'],
['name' => 'card#unassignUser', 'url' => '/cards/{cardId}/unassign', 'verb' => 'PUT'],
['name' => 'card#unassignUser', 'url' => '/cards/{cardId}/assign/{userId}', 'verb' => 'DELETE'],
// attachments
['name' => 'attachment#getAll', 'url' => '/cards/{cardId}/attachments', 'verb' => 'GET'],
['name' => 'attachment#create', 'url' => '/cards/{cardId}/attachment', 'verb' => 'POST'],
['name' => 'attachment#display', 'url' => '/cards/{cardId}/attachment/{attachmentId}', 'verb' => 'GET'],
@@ -83,77 +82,46 @@ return [
['name' => 'label#delete', 'url' => '/labels/{labelId}', 'verb' => 'DELETE'],
// api
['name' => 'board_api#index', 'url' => '/api/v{apiVersion}/boards', 'verb' => 'GET'],
['name' => 'board_api#get', 'url' => '/api/v{apiVersion}/boards/{boardId}', 'verb' => 'GET'],
['name' => 'board_api#create', 'url' => '/api/v{apiVersion}/boards', 'verb' => 'POST'],
['name' => 'board_api#delete', 'url' => '/api/v{apiVersion}/boards/{boardId}', 'verb' => 'DELETE'],
['name' => 'board_api#update', 'url' => '/api/v{apiVersion}/boards/{boardId}', 'verb' => 'PUT'],
['name' => 'board_api#undo_delete', 'url' => '/api/v{apiVersion}/boards/{boardId}/undo_delete', 'verb' => 'POST'],
['name' => 'board_api#addAcl', 'url' => '/api/v{apiVersion}/boards/{boardId}/acl', 'verb' => 'POST'],
['name' => 'board_api#deleteAcl', 'url' => '/api/v{apiVersion}/boards/{boardId}/acl/{aclId}', 'verb' => 'DELETE'],
['name' => 'board_api#updateAcl', 'url' => '/api/v{apiVersion}/boards/{boardId}/acl/{aclId}', 'verb' => 'PUT'],
['name' => 'board_import_api#getAllowedSystems', 'url' => '/api/v{apiVersion}/boards/import/getSystems','verb' => 'GET'],
['name' => 'board_import_api#getConfigSchema', 'url' => '/api/v{apiVersion}/boards/import/config/schema/{name}','verb' => 'GET'],
['name' => 'board_import_api#import', 'url' => '/api/v{apiVersion}/boards/import','verb' => 'POST'],
['name' => 'board_api#index', 'url' => '/api/v1.0/boards', 'verb' => 'GET'],
['name' => 'board_api#get', 'url' => '/api/v1.0/boards/{boardId}', 'verb' => 'GET'],
['name' => 'board_api#create', 'url' => '/api/v1.0/boards', 'verb' => 'POST'],
['name' => 'board_api#delete', 'url' => '/api/v1.0/boards/{boardId}', 'verb' => 'DELETE'],
['name' => 'board_api#update', 'url' => '/api/v1.0/boards/{boardId}', 'verb' => 'PUT'],
['name' => 'board_api#undo_delete', 'url' => '/api/v1.0/boards/{boardId}/undo_delete', 'verb' => 'POST'],
['name' => 'board_api#addAcl', 'url' => '/api/v1.0/boards/{boardId}/acl', 'verb' => 'POST'],
['name' => 'board_api#deleteAcl', 'url' => '/api/v1.0/boards/{boardId}/acl/{aclId}', 'verb' => 'DELETE'],
['name' => 'board_api#updateAcl', 'url' => '/api/v1.0/boards/{boardId}/acl/{aclId}', 'verb' => 'PUT'],
['name' => 'stack_api#index', 'url' => '/api/v{apiVersion}/boards/{boardId}/stacks', 'verb' => 'GET'],
['name' => 'stack_api#getArchived', 'url' => '/api/v{apiVersion}/boards/{boardId}/stacks/archived', 'verb' => 'GET'],
['name' => 'stack_api#get', 'url' => '/api/v{apiVersion}/boards/{boardId}/stacks/{stackId}', 'verb' => 'GET'],
['name' => 'stack_api#create', 'url' => '/api/v{apiVersion}/boards/{boardId}/stacks', 'verb' => 'POST'],
['name' => 'stack_api#update', 'url' => '/api/v{apiVersion}/boards/{boardId}/stacks/{stackId}', 'verb' => 'PUT'],
['name' => 'stack_api#delete', 'url' => '/api/v{apiVersion}/boards/{boardId}/stacks/{stackId}', 'verb' => 'DELETE'],
['name' => 'stack_api#index', 'url' => '/api/v1.0/boards/{boardId}/stacks', 'verb' => 'GET'],
['name' => 'stack_api#getArchived', 'url' => '/api/v1.0/boards/{boardId}/stacks/archived', 'verb' => 'GET'],
['name' => 'stack_api#get', 'url' => '/api/v1.0/boards/{boardId}/stacks/{stackId}', 'verb' => 'GET'],
['name' => 'stack_api#create', 'url' => '/api/v1.0/boards/{boardId}/stacks', 'verb' => 'POST'],
['name' => 'stack_api#update', 'url' => '/api/v1.0/boards/{boardId}/stacks/{stackId}', 'verb' => 'PUT'],
['name' => 'stack_api#delete', 'url' => '/api/v1.0/boards/{boardId}/stacks/{stackId}', 'verb' => 'DELETE'],
['name' => 'card_api#get', 'url' => '/api/v{apiVersion}/boards/{boardId}/stacks/{stackId}/cards/{cardId}', 'verb' => 'GET'],
['name' => 'card_api#create', 'url' => '/api/v{apiVersion}/boards/{boardId}/stacks/{stackId}/cards', 'verb' => 'POST'],
['name' => 'card_api#update', 'url' => '/api/v{apiVersion}/boards/{boardId}/stacks/{stackId}/cards/{cardId}', 'verb' => 'PUT'],
['name' => 'card_api#assignLabel', 'url' => '/api/v{apiVersion}/boards/{boardId}/stacks/{stackId}/cards/{cardId}/assignLabel', 'verb' => 'PUT'],
['name' => 'card_api#removeLabel', 'url' => '/api/v{apiVersion}/boards/{boardId}/stacks/{stackId}/cards/{cardId}/removeLabel', 'verb' => 'PUT'],
['name' => 'card_api#assignUser', 'url' => '/api/v{apiVersion}/boards/{boardId}/stacks/{stackId}/cards/{cardId}/assignUser', 'verb' => 'PUT'],
['name' => 'card_api#unassignUser', 'url' => '/api/v{apiVersion}/boards/{boardId}/stacks/{stackId}/cards/{cardId}/unassignUser', 'verb' => 'PUT'],
['name' => 'card_api#reorder', 'url' => '/api/v{apiVersion}/boards/{boardId}/stacks/{stackId}/cards/{cardId}/reorder', 'verb' => 'PUT'],
['name' => 'card_api#delete', 'url' => '/api/v{apiVersion}/boards/{boardId}/stacks/{stackId}/cards/{cardId}', 'verb' => 'DELETE'],
['name' => 'card_api#get', 'url' => '/api/v1.0/boards/{boardId}/stacks/{stackId}/cards/{cardId}', 'verb' => 'GET'],
['name' => 'card_api#create', 'url' => '/api/v1.0/boards/{boardId}/stacks/{stackId}/cards', 'verb' => 'POST'],
['name' => 'card_api#update', 'url' => '/api/v1.0/boards/{boardId}/stacks/{stackId}/cards/{cardId}', 'verb' => 'PUT'],
['name' => 'card_api#assignLabel', 'url' => '/api/v1.0/boards/{boardId}/stacks/{stackId}/cards/{cardId}/assignLabel', 'verb' => 'PUT'],
['name' => 'card_api#removeLabel', 'url' => '/api/v1.0/boards/{boardId}/stacks/{stackId}/cards/{cardId}/removeLabel', 'verb' => 'PUT'],
['name' => 'card_api#assignUser', 'url' => '/api/v1.0/boards/{boardId}/stacks/{stackId}/cards/{cardId}/assignUser', 'verb' => 'PUT'],
['name' => 'card_api#unassignUser', 'url' => '/api/v1.0/boards/{boardId}/stacks/{stackId}/cards/{cardId}/unassignUser', 'verb' => 'PUT'],
['name' => 'card_api#reorder', 'url' => '/api/v1.0/boards/{boardId}/stacks/{stackId}/cards/{cardId}/reorder', 'verb' => 'PUT'],
['name' => 'card_api#delete', 'url' => '/api/v1.0/boards/{boardId}/stacks/{stackId}/cards/{cardId}', 'verb' => 'DELETE'],
['name' => 'card_api#findAllWithDue', 'url' => '/api/v{apiVersion}/dashboard/due', 'verb' => 'GET'],
['name' => 'label_api#get', 'url' => '/api/v1.0/boards/{boardId}/labels/{labelId}', 'verb' => 'GET'],
['name' => 'label_api#create', 'url' => '/api/v1.0/boards/{boardId}/labels', 'verb' => 'POST'],
['name' => 'label_api#update', 'url' => '/api/v1.0/boards/{boardId}/labels/{labelId}', 'verb' => 'PUT'],
['name' => 'label_api#delete', 'url' => '/api/v1.0/boards/{boardId}/labels/{labelId}', 'verb' => 'DELETE'],
['name' => 'label_api#get', 'url' => '/api/v{apiVersion}/boards/{boardId}/labels/{labelId}', 'verb' => 'GET'],
['name' => 'label_api#create', 'url' => '/api/v{apiVersion}/boards/{boardId}/labels', 'verb' => 'POST'],
['name' => 'label_api#update', 'url' => '/api/v{apiVersion}/boards/{boardId}/labels/{labelId}', 'verb' => 'PUT'],
['name' => 'label_api#delete', 'url' => '/api/v{apiVersion}/boards/{boardId}/labels/{labelId}', 'verb' => 'DELETE'],
['name' => 'attachment_api#getAll', 'url' => '/api/v1.0/boards/{boardId}/stacks/{stackId}/cards/{cardId}/attachments', 'verb' => 'GET'],
['name' => 'attachment_api#display', 'url' => '/api/v1.0/boards/{boardId}/stacks/{stackId}/cards/{cardId}/attachments/{attachmentId}', 'verb' => 'GET'],
['name' => 'attachment_api#create', 'url' => '/api/v1.0/boards/{boardId}/stacks/{stackId}/cards/{cardId}/attachments', 'verb' => 'POST'],
['name' => 'attachment_api#update', 'url' => '/api/v1.0/boards/{boardId}/stacks/{stackId}/cards/{cardId}/attachments/{attachmentId}', 'verb' => 'PUT'],
['name' => 'attachment_api#delete', 'url' => '/api/v1.0/boards/{boardId}/stacks/{stackId}/cards/{cardId}/attachments/{attachmentId}', 'verb' => 'DELETE'],
['name' => 'attachment_api#restore', 'url' => '/api/v1.0/boards/{boardId}/stacks/{stackId}/cards/{cardId}/attachments/{attachmentId}/restore', 'verb' => 'PUT'],
['name' => 'attachment_api#getAll', 'url' => '/api/v{apiVersion}/boards/{boardId}/stacks/{stackId}/cards/{cardId}/attachments', 'verb' => 'GET', 'requirements' => ['apiVersion' => '1.0']],
['name' => 'attachment_api#display', 'url' => '/api/v{apiVersion}/boards/{boardId}/stacks/{stackId}/cards/{cardId}/attachments/{attachmentId}', 'verb' => 'GET', 'requirements' => ['apiVersion' => '1.0']],
['name' => 'attachment_api#create', 'url' => '/api/v{apiVersion}/boards/{boardId}/stacks/{stackId}/cards/{cardId}/attachments', 'verb' => 'POST', 'requirements' => ['apiVersion' => '1.0']],
['name' => 'attachment_api#update', 'url' => '/api/v{apiVersion}/boards/{boardId}/stacks/{stackId}/cards/{cardId}/attachments/{attachmentId}', 'verb' => 'PUT', 'requirements' => ['apiVersion' => '1.0']],
['name' => 'attachment_api#delete', 'url' => '/api/v{apiVersion}/boards/{boardId}/stacks/{stackId}/cards/{cardId}/attachments/{attachmentId}', 'verb' => 'DELETE', 'requirements' => ['apiVersion' => '1.0']],
['name' => 'attachment_api#restore', 'url' => '/api/v{apiVersion}/boards/{boardId}/stacks/{stackId}/cards/{cardId}/attachments/{attachmentId}/restore', 'verb' => 'PUT', 'requirements' => ['apiVersion' => '1.0']],
['name' => 'attachment_api_v11#getAll', 'url' => '/api/v{apiVersion}/boards/{boardId}/stacks/{stackId}/cards/{cardId}/attachments', 'verb' => 'GET', 'requirements' => ['apiVersion' => '1.1']],
['name' => 'attachment_api_v11#display', 'url' => '/api/v{apiVersion}/boards/{boardId}/stacks/{stackId}/cards/{cardId}/attachments/{type}/{attachmentId}', 'verb' => 'GET', 'requirements' => ['apiVersion' => '1.1']],
['name' => 'attachment_api_v11#create', 'url' => '/api/v{apiVersion}/boards/{boardId}/stacks/{stackId}/cards/{cardId}/attachments', 'verb' => 'POST', 'requirements' => ['apiVersion' => '1.1']],
['name' => 'attachment_api_v11#update', 'url' => '/api/v{apiVersion}/boards/{boardId}/stacks/{stackId}/cards/{cardId}/attachments/{type}/{attachmentId}', 'verb' => 'PUT', 'requirements' => ['apiVersion' => '1.1']],
['name' => 'attachment_api_v11#delete', 'url' => '/api/v{apiVersion}/boards/{boardId}/stacks/{stackId}/cards/{cardId}/attachments/{type}/{attachmentId}', 'verb' => 'DELETE', 'requirements' => ['apiVersion' => '1.1']],
['name' => 'attachment_api_v11#restore', 'url' => '/api/v{apiVersion}/boards/{boardId}/stacks/{stackId}/cards/{cardId}/attachments/{type}/{attachmentId}/restore', 'verb' => 'PUT', 'requirements' => ['apiVersion' => '1.1']],
['name' => 'board_api#preflighted_cors', 'url' => '/api/v{apiVersion}/{path}','verb' => 'OPTIONS', 'requirements' => ['path' => '.+']],
],
'ocs' => [
['name' => 'Config#get', 'url' => '/api/v{apiVersion}/config', 'verb' => 'GET'],
['name' => 'Config#setValue', 'url' => '/api/v{apiVersion}/config/{key}', 'verb' => 'POST'],
['name' => 'comments_api#list', 'url' => '/api/v{apiVersion}/cards/{cardId}/comments', 'verb' => 'GET'],
['name' => 'comments_api#create', 'url' => '/api/v{apiVersion}/cards/{cardId}/comments', 'verb' => 'POST'],
['name' => 'comments_api#update', 'url' => '/api/v{apiVersion}/cards/{cardId}/comments/{commentId}', 'verb' => 'PUT'],
['name' => 'comments_api#delete', 'url' => '/api/v{apiVersion}/cards/{cardId}/comments/{commentId}', 'verb' => 'DELETE'],
['name' => 'overview_api#upcomingCards', 'url' => '/api/v{apiVersion}/overview/upcoming', 'verb' => 'GET'],
['name' => 'search#search', 'url' => '/api/v{apiVersion}/search', 'verb' => 'GET'],
// sessions
['name' => 'Session#create', 'url' => '/api/v{apiVersion}/session/create', 'verb' => 'PUT'],
['name' => 'Session#sync', 'url' => '/api/v{apiVersion}/session/sync', 'verb' => 'POST'],
['name' => 'Session#close', 'url' => '/api/v{apiVersion}/session/close', 'verb' => 'POST'],
['name' => 'board_api#preflighted_cors', 'url' => '/api/v1.0/{path}','verb' => 'OPTIONS', 'requirements' => ['path' => '.+']],
]
];

View File

@@ -1,3 +1,11 @@
const babelConfig = require('@nextcloud/babel-config')
module.exports = babelConfig
module.exports = {
plugins: ['@babel/plugin-syntax-dynamic-import'],
presets: [
[
'@babel/preset-env',
{
modules: false
}
]
]
}

View File

@@ -1,51 +1,20 @@
{
"name": "nextcloud/deck",
"type": "project",
"license": "AGPLv3",
"authors": [
{
"name": "Julius Härtl",
"email": "jus@bitgrid.net"
}
],
"require": {
"justinrainbow/json-schema": "^5.2"
},
"require-dev": {
"roave/security-advisories": "dev-master",
"phpunit/phpunit": "^9",
"nextcloud/coding-standard": "^1.1",
"psalm/phar": "^5.13",
"php-parallel-lint/php-parallel-lint": "^1.2",
"nextcloud/ocp": "dev-stable27"
},
"config": {
"optimize-autoloader": true,
"allow-plugins": {
"composer/package-versions-deprecated": true
},
"platform": {
"php": "8.0"
}
},
"scripts": {
"lint": "find . -name \\*.php -not -path './vendor/*' -print0 | xargs -0 -n1 php -l",
"cs:check": "php-cs-fixer fix --dry-run --diff",
"cs:fix": "php-cs-fixer fix",
"psalm": "psalm.phar",
"psalm:update-baseline": "psalm.phar --update-baseline",
"psalm:fix": "psalm.phar --alter --issues=InvalidReturnType,InvalidNullableReturnType,MismatchingDocblockParamType,MismatchingDocblockReturnType,MissingParamType,InvalidFalsableReturnType",
"test": [
"@test:unit",
"@test:integration"
],
"test:unit": "vendor/bin/phpunit -c tests/phpunit.xml",
"test:integration": "vendor/bin/phpunit -c tests/phpunit.integration.xml",
"test:api": "cd tests/integration && ./run.sh"
},
"autoload-dev": {
"psr-4": {
"OCP\\": "vendor/nextcloud/ocp/OCP"
}
}
"name": "nextcloud/deck",
"type": "project",
"license": "AGPLv3",
"authors": [
{
"name": "Julius Härtl",
"email": "jus@bitgrid.net"
}
],
"require": {
"cogpowered/finediff": "0.3.*"
},
"require-dev": {
"roave/security-advisories": "dev-master",
"christophwurst/nextcloud": "^17",
"jakub-onderka/php-parallel-lint": "^1.0.0",
"phpunit/phpunit": "^8"
}
}

2974
composer.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,7 +1,10 @@
.resource-type-deck img {
opacity: 0.4 !important;
.icon-deck {
background-image: url('../img/deck-dark.svg');
}
.resource-type-deck:hover img {
opacity: 0.7 !important;
.resource-type-deck img {
opacity: 0.4 !important;
}
.resource-type-deck:hover img {
opacity: 0.7 !important;
}

View File

@@ -1,9 +0,0 @@
.icon-deck {
background-image: url(../img/deck-dark.svg);
filter: var(--background-invert-if-dark);
}
.icon-deck-white, .icon-deck.icon-white {
background-image: url(../img/deck.svg);
filter: var(--background-invert-if-dark);
}

View File

@@ -1,7 +1,10 @@
<?php
/**
* @copyright Copyright (c) 2018 Ryan Fletcher <ryan.fletcher@codepassion.ca>
/*
* @copyright Copyright (c) 2016 Julius Härtl <jus@bitgrid.net>
*
* @author Julius Härtl <jus@bitgrid.net>
* @author Artem Anufrij <artem.anufrij@live.de>
* @author Marin Treselj <marin@pixelipo.com>
* @author Oskar Kurz <oskar.kurz@gmail.com>
* @author Ryan Fletcher <ryan.fletcher@codepassion.ca>
*
* @license GNU AGPL version 3 or any later version
@@ -20,7 +23,6 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
namespace OCA\Deck\Controller;
class AttachmentApiV11Controller extends AttachmentApiController {
}
@import 'icons';
@import 'print';

86
css/icons.scss Normal file
View File

@@ -0,0 +1,86 @@
/**
* Custom icons
*/
.icon-deck {
background-image: url('../img/deck-dark.svg');
}
.icon-help {
background-image: url('../../../settings/img/help.svg');
}
.icon-add-white {
background-image: url('../img/add-white.svg');
}
.icon-attach {
background-image: url('../img/attach.svg');
}
.icon-archive {
background-image: url('../img/archive.svg');
}
.icon-archive-white {
background-image: url('../img/archive-white.svg');
}
.icon-details {
background-image: url('../img/details.svg');
}
.icon-details-white {
background-image: url('../img/details-white.svg');
}
.icon-home {
background-image: var(--icon-home-000, url('../../../core/img/places/home.svg'));
}
.icon-description {
background-image: var(--icon-text-000, url('../img/description.svg'));
}
.icon-badge {
background-image: url('../img/calendar-dark.svg');
}
.icon-toggle-compact-collapsed {
background-image: url('../img/toggle-view-expand.svg');
}
.icon-toggle-compact-expanded {
background-image: url('../img/toggle-view-collapse.svg');
}
@if mixin-exists('icon-black-white') {
@include icon-black-white('deck', 'deck', 1);
@include icon-black-white('archive', 'deck', 1);
@include icon-black-white('circles', 'deck', 1);
@include icon-black-white('clone', 'deck', 1);
@include icon-black-white('attach', 'deck', 1);
.icon-toggle-compact-collapsed {
@include icon-color('toggle-view-expand', 'deck', $color-black);
}
.icon-toggle-compact-expanded {
@include icon-color('toggle-view-collapse', 'deck', $color-black);
}
.icon-activity {
@include icon-color('activity-dark', 'activity', $color-black);
}
}
.avatardiv.circles {
background: var(--color-primary);
}
.icon-circles {
opacity: 1;
background-size: 20px;
background-position: center center;
}
.icon-colorpicker {
background-image: url('../img/color_picker.svg');
}

View File

@@ -2,26 +2,21 @@
/* hide stuff */
#body-user {
#header,
.app-navigation,
.app-sidebar,
.board-header-controls,
.board-actions,
div#app-navigation,
div.board-header-controls,
#app-navigation-toggle,
#app-navigation-toggle-custom,
div#controls.ng-scope div.crumb:not(.title),
div#controls.ng-scope div.crumb a.bullet,
a.ng-binding + a,
div.card.create,
.stack__header .action-item,
button.card-options {
display: none !important;
}
#content {
margin: 0;
padding: 0;
}
#app-content {
margin: 0 !important;
}
@@ -64,6 +59,8 @@
white-space: nowrap;
}
span.due { }
div.card-assigned-users {
margin-right:10px;
}
@@ -78,12 +75,7 @@
@page {
size: A4 landscape;
margin: 2cm;
}
.board {
max-height: none !important;
overflow: visible !important;
}
}
div#innerBoard {
display:flex;

View File

@@ -1,16 +0,0 @@
const { defineConfig } = require('cypress')
module.exports = defineConfig({
projectId: '1s7wkc',
viewportWidth: 1280,
viewportHeight: 720,
e2e: {
// We've imported your old cypress plugins here.
// You may want to clean this up later by importing these.
setupNodeEvents(on, config) {
return require('./cypress/plugins/index.js')(on, config)
},
baseUrl: 'http://nextcloud.local/index.php',
specPattern: 'cypress/e2e/**/*.{js,jsx,ts,tsx}',
},
})

View File

@@ -1,5 +0,0 @@
module.exports = {
extends: [
'plugin:cypress/recommended',
],
}

View File

@@ -1,56 +0,0 @@
import { randUser } from '../utils/index.js'
const user = randUser()
const recipient = randUser()
describe('Board', function() {
before(function() {
cy.createUser(user)
cy.createUser(recipient)
})
beforeEach(function() {
cy.login(user)
cy.visit('/apps/deck')
})
it('Can create a board', function() {
const board = 'TestBoard'
cy.intercept({
method: 'POST',
url: '/index.php/apps/deck/boards',
}).as('createBoardRequest')
// Click "Add board"
cy.get('#app-navigation-vue .app-navigation__list .app-navigation-entry')
.eq(3).find('a').first().click({ force: true })
// Type the board title
cy.get('.board-create form input[type=text]')
.type(board, { force: true })
// Submit
cy.get('.board-create form input[type=submit]')
.first().click({ force: true })
cy.wait('@createBoardRequest').its('response.statusCode').should('equal', 200)
cy.get('.app-navigation__list .app-navigation-entry__children .app-navigation-entry')
.contains(board).should('be.visible')
})
it('Shows and hides the navigation', () => {
cy.get('#app-navigation-vue .app-navigation__list .app-navigation-entry')
.contains('Upcoming cards')
.should('be.visible')
cy.openLeftSidebar()
cy.get('#app-navigation-vue .app-navigation__list .app-navigation-entry')
.contains('Upcoming cards')
.should('not.be.visible')
cy.openLeftSidebar()
cy.get('#app-navigation-vue .app-navigation__list .app-navigation-entry')
.contains('Upcoming cards')
.should('be.visible')
})
})

View File

@@ -1,182 +0,0 @@
import { randUser } from '../utils/index.js'
import { sampleBoard } from '../utils/sampleBoard'
const user = randUser()
const boardData = sampleBoard()
const auth = {
user: user.userId,
password: user.password,
}
const useModal = (useModal) => {
return cy.request({
method: 'POST',
url: `${Cypress.env('baseUrl')}/ocs/v2.php/apps/deck/api/v1.0/config/cardDetailsInModal?format=json`,
auth,
body: { value: useModal },
}).then((response) => {
expect(response.status).to.eq(200)
})
}
describe('Card', function() {
let boardId
before(function() {
cy.createUser(user)
cy.login(user)
cy.createExampleBoard({
user,
board: boardData,
}).then((board) => {
boardId = board.id
})
})
beforeEach(function() {
cy.login(user)
})
it('Can add a card', function() {
cy.visit(`/apps/deck/#/board/${boardId}`)
const newCardTitle = 'Write some cypress tests'
cy.getNavigationEntry(boardData.title)
.first().click({ force: true })
cy.get('.board .stack').eq(0).within(() => {
cy.get('.card:contains("Hello world")').should('be.visible')
cy.get('.button-vue[aria-label*="Add card"]')
.first().click()
cy.get('.stack__card-add form input#new-stack-input-main')
.type(newCardTitle)
cy.get('.stack__card-add form input[type=submit]')
.first().click()
cy.get(`.card:contains("${newCardTitle}")`).should('be.visible')
})
})
it('Create card from overview', function() {
cy.visit(`/apps/deck/#/`)
const newCardTitle = 'Test create from overview'
cy.intercept({ method: 'POST', url: '**/apps/deck/cards' }).as('save')
cy.intercept({ method: 'GET', url: '**/apps/deck/boards/*' }).as('getBoard')
cy.get('.button-vue[aria-label*="Add card"]')
.first().click()
cy.get('.modal-mask.card-selector .card-title').should('be.visible').click().type(newCardTitle)
cy.get('.modal-mask.card-selector .multiselect-board').should('be.visible').click()
cy.get('.modal-mask.card-selector .multiselect-board li:contains("' + boardData.title + '")').should('be.visible').click()
cy.wait('@getBoard', { timeout: 7000 })
cy.get('.modal-mask.card-selector .multiselect-list').should('be.visible').click()
cy.get('.modal-mask.card-selector .multiselect-list li').eq(0).should('be.visible').click()
cy.get('.modal-mask.card-selector button.button-vue--vue-primary').should('be.visible').click()
cy.wait('@save', { timeout: 7000 })
cy.visit(`/apps/deck/#/board/${boardId}`)
cy.reload()
cy.get('.board .stack').eq(0).within(() => {
cy.get(`.card:contains("${newCardTitle}")`).should('be.visible')
})
})
describe('Modal', () => {
beforeEach(function() {
cy.login(user)
useModal(true).then(() => {
cy.visit(`/apps/deck/#/board/${boardId}`)
})
})
it('Can show card details modal', function() {
cy.getNavigationEntry(boardData.title)
.first().click({ force: true })
cy.get('.board .stack').eq(0).within(() => {
cy.get('.card:contains("Hello world")').should('be.visible').click()
})
cy.get('.modal__card').should('be.visible')
cy.get('.app-sidebar-header__maintitle').contains('Hello world')
})
it('Attachment from files app', () => {
cy.get('.card:contains("Hello world")').should('be.visible').click()
cy.get('.modal__card').should('be.visible')
cy.get('.app-sidebar-tabs__tab [data-id="attachments"]').click()
cy.get('button.icon-upload').should('be.visible')
cy.get('button.icon-folder').should('be.visible')
.click()
cy.get('.file-picker__main').should('be.visible')
cy.get('.file-picker__main [data-filename="welcome.txt"]').should('be.visible')
.click()
cy.get('.dialog__actions button.button-vue--vue-primary').click()
cy.get('.attachment-list .basename').contains('welcome.txt')
})
it('Shows the modal with the editor', () => {
cy.get('.card:contains("Hello world")').should('be.visible').click()
cy.intercept({ method: 'PUT', url: '**/apps/deck/cards/*' }).as('save')
cy.get('.modal__card').should('be.visible')
cy.get('.app-sidebar-header__maintitle').contains('Hello world')
cy.get('.modal__card .ProseMirror h1').contains('Hello world').should('be.visible')
cy.get('.modal__card .ProseMirror h1')
.click()
.type(' writing more text{enter}- List item{enter}with entries{enter}{enter}Paragraph')
cy.wait('@save', { timeout: 7000 })
cy.reload()
cy.get('.modal__card').should('be.visible')
cy.get('.modal__card .ProseMirror h1').contains('Hello world writing more text').should('be.visible')
cy.get('.modal__card .ProseMirror li').eq(0).contains('List item').should('be.visible')
cy.get('.modal__card .ProseMirror li').eq(1).contains('with entries').should('be.visible')
cy.get('.modal__card .ProseMirror p').contains('Paragraph').should('be.visible')
})
it('Smart picker', () => {
const newCardTitle = 'Test smart picker'
cy.intercept({ method: 'POST', url: '**/apps/deck/cards' }).as('save')
cy.intercept({ method: 'GET', url: '**/apps/deck/boards/*' }).as('getBoard')
cy.get('.card:contains("Hello world")').should('be.visible').click()
cy.get('.modal__card').should('be.visible')
cy.get('.modal__card .ProseMirror h1')
.click()
.type('{enter}/create')
cy.get('.suggestion-list__item.is-selected').should('be.visible').contains('Create a new deck card')
cy.get('.suggestion-list__item.is-selected .link-picker__item').click()
cy.get('.reference-picker-modal--content .reference-picker').should('be.visible')
cy.get('.reference-picker-modal--content .reference-picker').contains('Create a new card')
cy.get('.reference-picker-modal--content .reference-picker .card-title').should('be.visible').click().type(newCardTitle)
cy.get('.reference-picker-modal--content .reference-picker .multiselect-board').should('be.visible').contains(boardData.title)
cy.get('.reference-picker-modal--content .reference-picker .multiselect-list').should('be.visible').contains(boardData.stacks[0].title)
cy.get('.reference-picker-modal--content .reference-picker button.button-vue--vue-primary').should('be.visible').click()
cy.wait('@save', { timeout: 7000 })
cy.get('.modal__card .ProseMirror').contains('/index.php/apps/deck/card/').should('be.visible')
cy.visit(`/apps/deck/#/board/${boardId}`)
cy.reload()
cy.get('.board .stack').eq(0).within(() => {
cy.get(`.card:contains("${newCardTitle}")`).should('be.visible')
})
})
})
describe('Sidebar', () => {
beforeEach(function() {
cy.login(user)
useModal(false).then(() => {
cy.visit(`/apps/deck/#/board/${boardId}`)
})
})
it('Show the sidebar', () => {
cy.get('.card:contains("Hello world")').should('be.visible').click()
cy.get('#app-sidebar-vue')
.find('.ProseMirror h1').contains('Hello world writing more text').should('be.visible')
})
})
})

View File

@@ -1,29 +0,0 @@
import { randUser } from '../utils/index.js'
const user = randUser()
describe('Deck dashboard', function() {
before(function() {
cy.createUser(user)
})
beforeEach(function() {
cy.login(user)
cy.visit('/apps/deck')
})
it('Can show the right title on the dashboard', function() {
cy.get('.board-title h2')
.should('have.length', 1).first()
.should('have.text', 'Upcoming cards')
})
it('Can see the default "Personal Board" created for user by default', function() {
const defaultBoard = 'Personal'
cy.get('.app-navigation-entry-wrapper[icon=icon-deck]')
.find('ul.app-navigation-entry__children .app-navigation-entry:contains(' + defaultBoard + ')')
.first()
.contains(defaultBoard)
.should('be.visible')
})
})

View File

@@ -1,50 +0,0 @@
import { randUser } from '../utils/index.js'
import { sampleBoard } from '../utils/sampleBoard'
const user = randUser()
const recipient = randUser()
describe('Board', function() {
before(function() {
cy.createUser(user)
cy.createUser(recipient)
})
beforeEach(function() {
cy.login(user)
})
it('Share a board to a user', function() {
const board = sampleBoard('Read only board')
cy.createExampleBoard({ user, board }).then((board) => {
const boardId = board.id
cy.visit(`/apps/deck/#/board/${boardId}`)
cy.get('.board-title').contains(board.title)
cy.shareBoardWithUi(recipient.userId)
cy.login(recipient)
cy.visit(`/apps/deck/#/board/${boardId}`)
cy.get('.board-title').contains(board.title)
cy.get('.button-vue[aria-label*="Add card"]')
.should('not.exist')
})
})
it('Share a board to a user as writable', function() {
const board = sampleBoard('Editable board')
cy.createExampleBoard({ user, board }).then((board) => {
const boardId = board.id
cy.visit(`/apps/deck/#/board/${boardId}`)
cy.get('.board-title').contains(board.title)
cy.shareBoardWithUi(recipient.userId)
cy.get(`[data-cy="acl-participant:${recipient.userId}"]`).find('[data-cy="action:permission-edit"]').click()
cy.login(recipient)
cy.visit(`/apps/deck/#/board/${boardId}`)
cy.get('.board-title').contains(board.title)
cy.get('.button-vue[aria-label*="Add card"]')
.first().click()
})
})
})

View File

@@ -1,68 +0,0 @@
import { randUser } from '../utils/index.js'
const user = randUser()
const boardTitle = 'TestBoard'
const testBoardData = {
title: boardTitle,
stacks: [
{ title: 'Existing Stack1' },
{ title: 'Existing Stack2' },
],
}
describe('Stack', function() {
before(function() {
cy.createUser(user)
cy.login(user)
cy.createExampleBoard({
user,
board: testBoardData,
})
})
beforeEach(function() {
cy.login(user)
cy.visit('/apps/deck')
cy.openLeftSidebar()
cy.getNavigationEntry(boardTitle)
.click({ force: true })
})
it('Can create a stack', function() {
cy.get('#stack-add button').first().click()
cy.focused().type('List 1')
cy.get('#stack-add form input[type=submit]').first().click()
cy.contains('List 1').should('be.visible')
})
it('Can edit a stack title', function() {
cy.contains('Existing Stack1')
cy.get('[data-cy-stack="Existing Stack1"]').within(() => {
cy.contains('Existing Stack1').click()
cy.focused().type(' renamed')
cy.get('[data-cy="editStackTitleForm"] input[type="submit"]').click()
})
cy.contains('Existing Stack1 renamed').should('be.visible')
})
it('Can abort a stack title edit via esc', function() {
cy.contains('Existing Stack2').click()
cy.focused().type(' with a new title, maybe?')
cy.focused().type('{esc}')
cy.contains('Existing Stack2').should('be.visible')
cy.contains('Existing Stack2 with a new title, maybe?').should('not.exist')
})
it('Can abort a stack title edit via click outside', function() {
cy.contains('Existing Stack2').click()
cy.focused().type(' with a new title, maybe?')
cy.get('[data-cy-stack="Existing Stack2"]').click('bottom')
cy.contains('Existing Stack2').should('be.visible')
cy.contains('Existing Stack2 with a new title, maybe?').should('not.exist')
})
})

View File

@@ -1,5 +0,0 @@
{
"name": "Using fixtures to represent data",
"email": "hello@cypress.io",
"body": "Fixtures are a great way to mock data for responses to routes"
}

View File

@@ -1,22 +0,0 @@
/// <reference types="cypress" />
// ***********************************************************
// This example plugins/index.js can be used to load plugins
//
// You can change the location of this file or turn off loading
// the plugins file with the 'pluginsFile' configuration option.
//
// You can read more here:
// https://on.cypress.io/plugins-guide
// ***********************************************************
// This function is called when a project is opened or re-opened (e.g. due to
// the project's config changing)
/**
* @type {Cypress.PluginConfig}
*/
// eslint-disable-next-line no-unused-vars
module.exports = (on, config) => {
// `on` is used to hook into various events Cypress emits
// `config` is the resolved Cypress config
}

View File

@@ -1,117 +0,0 @@
/**
* @copyright Copyright (c) 2019 John MolakvoÃĻ <skjnldsv@protonmail.com>
*
* @author John MolakvoÃĻ <skjnldsv@protonmail.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/>.
*
*/
import { addCommands } from '@nextcloud/cypress'
addCommands()
const url = Cypress.config('baseUrl').replace(/\/index.php\/?$/g, '')
Cypress.env('baseUrl', url)
Cypress.Commands.add('openLeftSidebar', () => {
cy.get('.app-navigation button.app-navigation-toggle').click()
})
Cypress.Commands.add('deckCreateBoard', ({ user, password }, title) => {
cy.login(user, password)
cy.get('.app-navigation button.app-navigation-toggle').click()
cy.get('#app-navigation-vue .app-navigation__list .app-navigation-entry')
.eq(3)
.find('a')
.first()
.click({ force: true })
cy.get('.board-create form input[type=text]').type(title, { force: true })
cy.get('.board-create form input[type=submit]')
.first()
.click({ force: true })
})
Cypress.Commands.add('deckCreateList', ({ user, password }, title) => {
cy.login(user, password)
cy.get('.app-navigation button.app-navigation-toggle').click()
cy.get('#app-navigation-vue .app-navigation__list .app-navigation-entry')
.eq(3)
.find('a.app-navigation-entry-link')
.first()
.click({ force: true })
cy.get('#stack-add button').first().click()
cy.get('#stack-add form input#new-stack-input-main').type(title)
cy.get('#stack-add form input[type=submit]').first().click()
})
Cypress.Commands.add('createExampleBoard', ({ user, board }) => {
const auth = {
user: user.userId,
password: user.password,
}
cy.request({
method: 'POST',
url: `${Cypress.env('baseUrl')}/index.php/apps/deck/api/v1.0/boards`,
auth,
body: { title: board.title, color: board.color ?? 'ff0000' },
}).then((boardResponse) => {
expect(boardResponse.status).to.eq(200)
const boardData = boardResponse.body
for (const stackIndex in board.stacks) {
const stack = board.stacks[stackIndex]
cy.request({
method: 'POST',
url: `${Cypress.env('baseUrl')}/index.php/apps/deck/api/v1.0/boards/${boardData.id}/stacks`,
auth,
body: { title: stack.title, order: 0 },
}).then((stackResponse) => {
const stackData = stackResponse.body
for (const cardIndex in stack.cards) {
const card = stack.cards[cardIndex]
cy.request({
method: 'POST',
url: `${Cypress.env('baseUrl')}/index.php/apps/deck/api/v1.0/boards/${boardData.id}/stacks/${stackData.id}/cards`,
auth,
body: { title: card.title, description: card.description ?? '' },
})
}
})
}
cy.wrap(boardData)
})
})
Cypress.Commands.add('getNavigationEntry', (boardTitle) => {
return cy.get('.app-navigation-entry-wrapper[icon=icon-deck]')
.find('ul.app-navigation-entry__children .app-navigation-entry:contains(' + boardTitle + ')')
.find('a.app-navigation-entry-link')
})
Cypress.Commands.add('shareBoardWithUi', (userId) => {
cy.get('[aria-label="Open details"]').click()
cy.get('.app-sidebar').should('be.visible')
cy.get('.multiselect__input').type(`${userId}`)
cy.get('.multiselect__content .multiselect__element').first().contains(userId)
cy.get('.multiselect__input').type('{enter}')
cy.get('.shareWithList').contains(userId)
})

View File

@@ -1,12 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>Components App</title>
</head>
<body>
<div data-cy-root></div>
</body>
</html>

View File

@@ -1,27 +0,0 @@
// ***********************************************************
// This example support/component.js is processed and
// loaded automatically before your test files.
//
// This is a great place to put global configuration and
// behavior that modifies Cypress.
//
// You can change the location of this file or turn off
// automatically serving support files with the
// 'supportFile' configuration option.
//
// You can read more here:
// https://on.cypress.io/configuration
// ***********************************************************
// Import commands.js using ES2015 syntax:
import './commands'
// Alternatively you can use CommonJS syntax:
// require('./commands')
import { mount } from 'cypress/vue2'
Cypress.Commands.add('mount', mount)
// Example use:
// cy.mount(MyComponent)

View File

@@ -1,24 +0,0 @@
// ***********************************************************
// This example support/index.js is processed and
// loaded automatically before your test files.
//
// This is a great place to put global configuration and
// behavior that modifies Cypress.
//
// You can change the location of this file or turn off
// automatically serving support files with the
// 'supportFile' configuration option.
//
// You can read more here:
// https://on.cypress.io/configuration
// ***********************************************************
// Import commands.js using ES2015 syntax:
import './commands.js'
Cypress.on('uncaught:exception', (err) => {
return !err.message.includes('ResizeObserver loop limit exceeded')
})
// Alternatively you can use CommonJS syntax:
// require('./commands')

View File

@@ -1,4 +0,0 @@
import { User } from '@nextcloud/cypress'
export const randHash = () => Math.random().toString(36).replace(/[^a-z]+/g, '').slice(0, 10)
export const randUser = () => new User(randHash(), randHash())

View File

@@ -1,38 +0,0 @@
/*
* @copyright Copyright (c) 2022 Julius Härtl <jus@bitgrid.net>
*
* @author Julius Härtl <jus@bitgrid.net>
*
* @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/>.
*/
export const sampleBoard = (title = 'MyTestBoard') => {
return {
title: title,
color: '00ff00',
stacks: [
{
title: 'TestList',
cards: [
{
title: 'Hello world',
description: '# Hello world',
},
],
},
],
}
}

View File

@@ -1,34 +1,5 @@
# Nextcloud APIs
## Capabilities
The [Nextcloud Capabilities API](https://docs.nextcloud.com/server/latest/developer_manual/client_apis/OCS/ocs-api-overview.html#capabilities-api) provides the following information for the Deck app:
- `version` Current version of the Deck app running
- `canCreateBoards` Ability of the current user to create new boards for themselves
```
{
"ocs": {
"meta": {
"status": "ok",
"statuscode": 200,
"message": "OK"
},
"data": {
"capabilities": {
"deck": {
"version": "0.8.0",
"canCreateBoards": true
},
}
}
}
}
```
## Available sharees
When sharing a board to a user, group or circle, the possible sharees can be obtained though the files_sharing API.

View File

@@ -1,15 +1,14 @@
The REST API provides access for authenticated users to their data inside the Deck app. To get a better understanding of Decks data models and their relations, please have a look at the [data structure](structure.md) documentation.
The REST API provides access for authenticated users to their data inside the Deck app. To get a better understand of Decks data models and their relations, please have a look at the [data structure](structure.md) documentation.
# Prerequisites
# Prequisited
- All requests require a `OCS-APIRequest` HTTP header to be set to `true` and a `Content-Type` of `application/json`.
- The API is located at https://nextcloud.local/index.php/apps/deck/api/v1.0
- All request parameters are required, unless otherwise specified
## Naming
- Board is the project like grouping of tasks that can be shared to different users and groups
- Board is the the project like grouping of tasks that can be shared to different users and groups
- Stack is the grouping of cards which is rendered in vertical columns in the UI
@@ -21,7 +20,7 @@ The REST API provides access for authenticated users to their data inside the De
### 400 Bad request
In case the request is invalid, e.g. because a parameter is missing or an invalid value has been transmitted, a 400 error will be returned:
In case the request is invalid, e.g. because a parameter is missing, a 400 error will be returned:
```json
{
@@ -41,12 +40,6 @@ In any case a user doesn't have access to a requested entity, a 403 error will b
}
```
## Formats
### Date
Datetime values in request data need to be provided in ISO-8601. Example: 2020-01-20T09:52:43+00:00
## Headers
### If-Modified-Since
@@ -58,7 +51,7 @@ The supported date formats are:
* (obsolete) RFC 850: `Sunday, 03-Aug-19 10:34:12 GMT`
* (obsolete) ANSI C asctime(): `Sun Aug 3 10:34:12 2019`
It is highly recommended to only use the IMF-fixdate format. Note that according to [RFC2616](https://tools.ietf.org/html/rfc2616#section-3.3) all HTTP date/time stamps MUST be represented in Greenwich Mean Time (GMT), without exception.
It is highly recommended to only use the IMF-fixdate format.
Example curl request:
@@ -69,55 +62,6 @@ curl -u admin:admin -X GET \
-H "If-Modified-Since: Mon, 05 Nov 2018 09:28:00 GMT"
```
### ETag
An ETag header is returned in order to determine if further child elements have been updated for the following endpoints:
- Fetch all user board `GET /api/v1.0/boards`
- Fetch a single board `GET /api/v1.0/boards/{boardId}`
- Fetch all stacks of a board `GET /api/v1.0/boards/{boardId}/stacks`
- Fetch a single stacks of a board `GET /api/v1.0/boards/{boardId}/stacks/{stackId}`
- Fetch a single card of a board `GET /api/v1.0/boards/{boardId}/stacks/{stackId}/cards/{cardId}`
- Fetch attachments of a card `GET /api/v1.0/boards/{boardId}/stacks/{stackId}/cards/{cardId}/attachments`
If a `If-None-Match` header is provided and the requested element has not changed a `304` Not Modified response will be returned.
Changes of child elements will propagate to their parents and also cause an update of the ETag which will be useful for determining if a sync is necessary on any client integration side. As an example, if a label is added to a card, the ETag of all related entities (the card, stack and board) will change.
If available the ETag will also be part of JSON response objects as shown below for a card:
```json
{
"id": 81,
"ETag": "bdb10fa2d2aeda092a2b6b469454dc90",
"title": "Test card"
}
```
# Changelog
## API version 1.0
- Deck >=1.0.0: The maximum length of the card title has been extended from 100 to 255 characters
- Deck >=1.0.0: The API will now return a 400 Bad request response if the length limitation of a board, stack or card title is exceeded
## API version 1.1
This API version has become available with **Deck 1.3.0**.
- The maximum length of the card title has been extended from 100 to 255 characters
- The API will now return a 400 Bad request response if the length limitation of a board, stack or card title is exceeded
- The attachments API endpoints will return other attachment types than deck_file
- Prior to Deck version v1.3.0 (API v1.0), attachments were stored within deck. For this type of attachments `deck_file` was used as the default type of attachments
- Starting with Deck version 1.3.0 (API v1.1) files are stored within the users regular Nextcloud files and the type `file` has been introduced for that
## API version 1.2 (unreleased)
- Endpoints for the new import functionality have been added:
- [GET /boards/import/getSystems - Import a board](#get-boardsimportgetsystems-import-a-board)
- [GET /boards/import/config/system/{schema} - Import a board](#get-boardsimportconfigsystemschema-import-a-board)
- [POST /boards/import - Import a board](#post-boardsimport-import-a-board)
# Endpoints
## Boards
@@ -132,7 +76,7 @@ The board list endpoint supports setting an `If-Modified-Since` header to limit
| Parameter | Type | Description |
| --------- | ------- | ---------------------------- |
| details | Bool | **Optional** Enhance boards with details about labels, stacks and users |
| options | Bool | **Optional** Enhance boards with details about labels, stacks and users |
#### Response
@@ -162,12 +106,7 @@ Returns an array of board items
"users": [],
"shared": 0,
"deletedAt": 0,
"id": 10,
"lastModified": 1586269585,
"settings": {
"notify-due": "off",
"calendar": true
}
"id": 10
}
]
```
@@ -178,7 +117,7 @@ Returns an array of board items
| Parameter | Type | Description |
| --------- | ------ | ---------------------------------------------------- |
| title | String | The title of the new board, maximum length is limited to 100 characters |
| title | String | The title of the new board |
| color | String | The hexadecimal color of the new board (e.g. FF0000) |
```json
@@ -241,15 +180,10 @@ Returns an array of board items
},
"users": [],
"deletedAt": 0,
"id": 10,
"lastModified": 1586269585
"id": 10
}
```
##### 403 Forbidden
A 403 response might be returned if the users ability to create new boards has been disabled by the administrator. For checking this before, see the `canCreateBoards` value in the [Nextcloud capabilties](./API-Nextcloud.md).
### GET /boards/{boardId} - Get board details
#### Request parameters
@@ -327,9 +261,9 @@ A 403 response might be returned if the users ability to create new boards has b
| Parameter | Type | Description |
| --------- | ------ | ---------------------------------------------------- |
| title | String | The title of the board, maximum length is limited to 100 characters |
| color | String | The hexadecimal color of the board (e.g. FF0000) |
| archived | Bool | Whether or not this board should be archived. |
| title | String | The title of the new board |
| color | String | The hexadecimal color of the new board (e.g. FF0000) |
| archived | Bool | The hexadecimal color of the new board (e.g. FF0000) |
```json
{
@@ -503,7 +437,7 @@ The board list endpoint supports setting an `If-Modified-Since` header to limit
| Parameter | Type | Description |
| --------- | ------- | ---------------------------------------------------- |
| title | String | The title of the new stack, maximum length is limited to 100 characters |
| title | String | The title of the new stack |
| order | Integer | Order for sorting the stacks |
#### Request parameters
@@ -529,7 +463,7 @@ The board list endpoint supports setting an `If-Modified-Since` header to limit
| Parameter | Type | Description |
| --------- | ------- | ---------------------------------------------------- |
| title | String | The title of the stack, maximum length is limited to 100 characters |
| title | String | The title of the new stack |
| order | Integer | Order for sorting the stacks |
#### Response
@@ -578,11 +512,9 @@ The board list endpoint supports setting an `If-Modified-Since` header to limit
| Parameter | Type | Description |
| --------- | ------- | ---------------------------------------------------- |
| title | String | The title of the card, maximum length is limited to 255 characters |
| title | String | The title of the new stack |
| type | String | Type of the card (for later use) use 'plain' for now |
| order | Integer | Order for sorting the stacks |
| description | String | _(optional)_ The markdown description of the card |
| duedate | timestamp | _(optional)_ The duedate of the card or null |
#### Response
@@ -601,7 +533,7 @@ The board list endpoint supports setting an `If-Modified-Since` header to limit
"owner":"admin",
"order":999,
"archived":false,
"duedate": "2019-12-24T19:29:30+00:00",
"duedate":null,
"deletedAt":0,
"commentsUnread":0,
"id":10,
@@ -625,11 +557,11 @@ The board list endpoint supports setting an `If-Modified-Since` header to limit
| Parameter | Type | Description |
|-------------|-----------|------------------------------------------------------|
| title | String | The title of the card, maximum length is limited to 255 characters |
| title | String | The card title |
| description | String | The markdown description of the card |
| type | String | Type of the card (for later use) use 'plain' for now |
| order | Integer | Order for sorting the stacks |
| duedate | timestamp | The ISO-8601 formatted duedate of the card or null |
| duedate | timestamp | The duedate of the card or null |
```
@@ -638,7 +570,7 @@ The board list endpoint supports setting an `If-Modified-Since` header to limit
"description": "A card description",
"type": "plain",
"order": 999,
"duedate": "2019-12-24T19:29:30+00:00",
"duedate": null,
}
```
@@ -746,7 +678,7 @@ The request can fail with a bad request response for the following reasons:
- The user is not part of the board
### PUT /boards/{boardId}/stacks/{stackId}/cards/{cardId}/unassignUser - Unassign a user from a card
### PUT /boards/{boardId}/stacks/{stackId}/cards/{cardId}/unassignUser - Assign a user to a card
#### Request parameters
@@ -760,7 +692,7 @@ The request can fail with a bad request response for the following reasons:
| Parameter | Type | Description |
| --------- | ------- | --------------------------------------- |
| userId | String | The user id to unassign from the card |
| userId | String | The user id to assign to the card |
#### Response
@@ -944,8 +876,7 @@ The request can fail with a bad request response for the following reasons:
| type | String | The type of the attachement |
| file | Binary | File data to add as an attachment |
- Prior to Deck version v1.3.0 (API v1.0), attachments were stored within deck. For this type of attachments `deck_file` was used as the default type of attachments
- Starting with Deck version 1.3.0 (API v1.1) files are stored within the users regular Nextcloud files and the type `file` has been introduced for that
For now only `deck_file` is supported as an attachment type.
#### Response
@@ -977,7 +908,6 @@ For now only `deck_file` is supported as an attachment type.
### DELETE /boards/{boardId}/stacks/{stackId}/cards/{cardId}/attachments/{attachmentId} - Delete an attachment
#### Request parameters
| Parameter | Type | Description |
@@ -1006,498 +936,3 @@ For now only `deck_file` is supported as an attachment type.
##### 200 Success
### GET /boards/import/getSystems - Import a board
#### Request parameters
| Parameter | Type | Description |
| ------------ | ------- | --------------------------------------------- |
| system | Integer | The system name. Example: trello |
#### Response
Make a request to see the json schema of system
```json
{
}
```
### GET /boards/import/config/system/{schema} - Import a board
#### Request parameters
#### Response
```json
[
"trello"
]
```
### POST /boards/import - Import a board
#### Request parameters
| Parameter | Type | Description |
| ------------ | ------- | --------------------------------------------- |
| system | string | The allowed name of system to import from |
| config | Object | The config object (JSON) |
| data | Object | The data object to import (JSON) |
#### Response
##### 200 Success
# OCS API
The following endpoints are available through the Nextcloud OCS endpoint, which is available at `/ocs/v2.php/apps/deck/api/v1.0/`.
This has the benefit that both the web UI as well as external integrations can use the same API.
## Config
Deck stores user and app configuration values globally and per board. The GET endpoint allows to fetch the current global configuration while board settings will be exposed through the board element on the regular API endpoints.
### GET /api/v1.0/config - Fetch app configuration values
#### Response
| Config key | Description |
| --- | --- |
| calendar | Determines if the calendar/tasks integration through the CalDAV backend is enabled for the user (boolean) |
| cardDetailsInModal | Determines if the bigger view is used (boolean) |
| cardIdBadge | Determines if the ID badges are displayed on cards (boolean) |
| groupLimit | Determines if creating new boards is limited to certain groups of the instance. The resulting output is an array of group objects with the id and the displayname (Admin only)|
```
{
"ocs": {
"meta": {
"status": "ok",
"statuscode": 200,
"message": "OK"
},
"data": {
"calendar": true,
"cardDetailsInModal": true,
"cardIdBadge": true,
"groupLimit": [
{
"id": "admin",
"displayname": "admin"
}
]
}
}
}
```
### POST /api/v1.0/config/{id}/{key} - Set a config value
#### Request parameters
| Parameter | Type | Description |
| --------- | ------- | --------------------------------------- |
| id | Integer | The id of the board |
| key | String | The config key to set, prefixed with `board:{boardId}:` for board specific settings |
| value | String | The value that should be stored for the config key |
##### Board configuration
| Key | Value |
| --- | ----- |
| notify-due | `off`, `assigned` or `all` |
| calendar | Boolean |
| cardDetailsInModal | Boolean |
| cardIdBadge | Boolean |
#### Example request
```
curl -X POST 'https://admin:admin@nextcloud.local/ocs/v2.php/apps/deck/api/v1.0/config/calendar' -H 'Accept: application/json' -H "Content-Type: application/json" -H 'OCS-APIRequest: true' --data-raw '{"value":false}'
{
"ocs": {
"meta": {
"status": "ok",
"statuscode": 200,
"message": "OK"
},
"data": false
}
}
```
## Comments
### GET /cards/{cardId}/comments - List comments
#### Request parameters
string $cardId, int $limit = 20, int $offset = 0
| Parameter | Type | Description |
| --------- | ------- | --------------------------------------- |
| cardId | Integer | The id of the card |
| limit | Integer | The maximum number of comments that should be returned, defaults to 20 |
| offset | Integer | The start offset used for pagination, defaults to 0 |
```
curl 'https://admin:admin@nextcloud/ocs/v2.php/apps/deck/api/v1.0/cards/12/comments' \
-H 'Accept: application/json' -H 'OCS-APIRequest: true'
```
#### Response
A list of comments will be provided under the `ocs.data` key. If no or no more comments are available the list will be empty.
##### 200 Success
```
{
"ocs": {
"meta": {
"status": "ok",
"statuscode": 200,
"message": "OK"
},
"data": [
{
"id": 175,
"objectId": 12,
"message": "This is a comment with a mention to @alice",
"actorId": "admin",
"actorType": "users",
"actorDisplayName": "Administrator",
"creationDateTime": "2020-03-10T10:23:07+00:00",
"mentions": [
{
"mentionId": "alice",
"mentionType": "user",
"mentionDisplayName": "alice"
}
]
}
]
}
}
```
In case a comment is marked as a reply to another comment object, the parent comment will be added as `replyTo` entry to the response. Only the next parent node is added, nested replies are not exposed directly.
```json
[
{
"id": 175,
"objectId": 12,
"message": "This is a comment with a mention to @alice",
"actorId": "admin",
"actorType": "users",
"actorDisplayName": "Administrator",
"creationDateTime": "2020-03-10T10:23:07+00:00",
"mentions": [
{
"mentionId": "alice",
"mentionType": "user",
"mentionDisplayName": "alice"
}
],
"replyTo": {
"id": 175,
"objectId": 12,
"message": "This is a comment with a mention to @alice",
"actorId": "admin",
"actorType": "users",
"actorDisplayName": "Administrator",
"creationDateTime": "2020-03-10T10:23:07+00:00",
"mentions": [
{
"mentionId": "alice",
"mentionType": "user",
"mentionDisplayName": "alice"
}
]
}
}
]
```
### POST /cards/{cardId}/comments - Create a new comment
#### Request parameters
| Parameter | Type | Description |
| --------- | ------- | --------------------------------------- |
| cardId | Integer | The id of the card |
| message | String | The message of the comment, maximum length is limited to 1000 characters |
| parentId | Integer | _(optional)_ The start offset used for pagination, defaults to null |
Mentions will be parsed by the server. The server will return a list of mentions in the response to this request as shown below.
```
curl -X POST 'https://admin:admin@nextcloud/ocs/v2.php/apps/deck/api/v1.0/cards/12/comments' \
-H 'Accept: application/json' -H 'OCS-APIRequest: true'
-H 'Content-Type: application/json;charset=utf-8'
--data '{"message":"My message to @bob","parentId":null}'
```
#### Response
A list of comments will be provided under the `ocs.data` key. If no or no more comments are available the list will be empty.
##### 200 Success
```
{
"ocs": {
"meta": {
"status": "ok",
"statuscode": 200,
"message": "OK"
},
"data": {
"id": "177",
"objectId": "13",
"message": "My message to @bob",
"actorId": "admin",
"actorType": "users",
"actorDisplayName": "Administrator",
"creationDateTime": "2020-03-10T10:30:17+00:00",
"mentions": [
{
"mentionId": "bob",
"mentionType": "user",
"mentionDisplayName": "bob"
}
]
}
}
}
```
##### 400 Bad request
A bad request response is returned if invalid input values are provided. The response message will contain details about which part was not valid.
##### 404 Not found
A not found response might be returned if:
- The card for the given cardId could not be found
- The parent comment could not be found
### PUT /cards/{cardId}/comments/{commentId} - Update a comment
#### Request parameters
| Parameter | Type | Description |
| --------- | ------- | --------------------------------------- |
| cardId | Integer | The id of the card |
| commentId | Integer | The id of the comment |
| message | String | The message of the comment, maximum length is limited to 1000 characters |
Mentions will be parsed by the server. The server will return a list of mentions in the response to this request as shown below.
Updating comments is limited to the current user being the same as the comment author specified in the `actorId` of the comment.
```
curl -X POST 'https://admin:admin@nextcloud/ocs/v2.php/apps/deck/api/v1.0/cards/12/comments' \
-H 'Accept: application/json' -H 'OCS-APIRequest: true'
-H 'Content-Type: application/json;charset=utf-8'
--data '{"message":"My message"}'
```
#### Response
A list of comments will be provided under the `ocs.data` key. If no or no more comments are available the list will be empty.
##### 200 Success
```
{
"ocs": {
"meta": {
"status": "ok",
"statuscode": 200,
"message": "OK"
},
"data": {
"id": "177",
"objectId": "13",
"message": "My message",
"actorId": "admin",
"actorType": "users",
"actorDisplayName": "Administrator",
"creationDateTime": "2020-03-10T10:30:17+00:00",
"mentions": []
}
}
}
```
##### 400 Bad request
A bad request response is returned if invalid input values are provided. The response message will contain details about which part was not valid.
##### 404 Not found
A not found response might be returned if:
- The card for the given cardId could not be found
- The comment could not be found
### DELETE /cards/{cardId}/comments/{commentId} - Delete a comment
#### Request parameters
| Parameter | Type | Description |
| --------- | ------- | --------------------------------------- |
| cardId | Integer | The id of the card |
| commentId | Integer | The id of the comment |
Deleting comments is limited to the current user being the same as the comment author specified in the `actorId` of the comment.
```
curl -X DELETE 'https://admin:admin@nextcloud/ocs/v2.php/apps/deck/api/v1.0/cards/12/comments' \
-H 'Accept: application/json' -H 'OCS-APIRequest: true'
-H 'Content-Type: application/json;charset=utf-8'
```
#### Response
A list of comments will be provided under the `ocs.data` key. If no or no more comments are available the list will be empty.
##### 200 Success
```
{
"ocs": {
"meta": {
"status": "ok",
"statuscode": 200,
"message": "OK"
},
"data": []
}
}
```
##### 400 Bad request
A bad request response is returned if invalid input values are provided. The response message will contain details about which part was not valid.
##### 404 Not found
A not found response might be returned if:
- The card for the given cardId could not be found
- The comment could not be found
## Sessions
### PUT /session/create - creates a new session
#### Request parameters
| Parameter | Type | Description |
| --------- | ------- | ---------------------------------------------------- |
| boardId | Integer | The id of the opened board |
```
curl -X PUT 'https://admin:admin@nextcloud/ocs/v2.php/apps/deck/api/v1.0/session/create' \
-H 'Accept: application/json' -H 'OCS-APIRequest: true' \
-H 'Content-Type: application/json;charset=utf-8' \
--data '{"boardId":1}'
```
#### Response
##### 200 Success
```json
{
"ocs": {
"meta": {
"status": "ok",
"statuscode": 200,
"message": "OK"
},
"data": {
"token": "+zcJHf4rC6dobVSbuNa3delkCSfTW8OvYWTyLFvSpIv80FjtgLIj0ARlxspsazNQ"
}
}
}
```
### POST /session/sync - notifies the server, that the session is still open
#### Request body
| Parameter | Type | Description |
| --------- | ------- | ---------------------------------------------------- |
| boardId | Integer | The id of the opened board |
| token | String | The session token from the /sessions/create response |
```
curl -X POST 'https://admin:admin@nextcloud/ocs/v2.php/apps/deck/api/v1.0/session/create' \
-H 'Accept: application/json' -H 'OCS-APIRequest: true' \
-H 'Content-Type: application/json;charset=utf-8' \
--data '{"boardId":1, "token":"X3DyyoFslArF0t0NBZXzZXzcy8feoX/OEytSNXZtPg9TpUgO5wrkJ38IW3T/FfpV"}'
```
#### Response
##### 200 Success
```json
{
"ocs": {
"meta": {
"status": "ok",
"statuscode": 200,
"message": "OK"
},
"data": []
}
}
```
##### 404 Not Found
the provided token is invalid or expired
### POST /session/close - closes the session
#### Request body
| Parameter | Type | Description |
| --------- | ------- | ---------------------------------------------------- |
| boardId | Integer | The id of the opened board |
| token | String | The session token from the /sessions/create response |
```
curl -X POST 'https://admin:admin@nextcloud/ocs/v2.php/apps/deck/api/v1.0/session/close' \
-H 'Accept: application/json' -H 'OCS-APIRequest: true' \
-H 'Content-Type: application/json;charset=utf-8' \
--data '{"boardId":1, "token":"X3DyyoFslArF0t0NBZXzZXzcy8feoX/OEytSNXZtPg9TpUgO5wrkJ38IW3T/FfpV"}'
```
#### Response
##### 200 Success
```json
{
"ocs": {
"meta": {
"status": "ok",
"statuscode": 200,
"message": "OK"
},
"data": []
}
}
```

View File

@@ -1,6 +1,6 @@
## What is Markdown
The [wikipedia markdown entry](https://en.wikipedia.org/wiki/Markdown) introduced markdown as :
The [wikipedia markdown entry](https://en.wikipedia.org/wiki/Markdown) introduced markdown as :
> Markdown is a lightweight markup language with plain text formatting syntax. It is designed so that it can be converted to HTML and many other formats using a tool by the same name. Markdown is often used to format readme files, for writing messages in online discussion forums, and to create rich text using a plain text editor. As the initial description of Markdown contained ambiguities and unanswered questions, many implementations and extensions of Markdown appeared over the years to answer these issues.
@@ -14,18 +14,14 @@ That same link offers also a comprehensive list of what is supported, and what i
[CommonMark Markdown Reference](http://commonmark.org/help/)
## Note about checklists
It is possible to create checklists in Deck by writing it in Markdown, using the following syntax:
```md
- [ ] This is a not checked item
- [x] This is a checked item
```
Then, the items can be checked and unchecked by clicking on the rendered checkbox.
Also, a summary of the completed items will be visible at the bottom of the card element.
## Known Issues
As per [issue #127](https://github.com/nextcloud/deck/issues/127) Due to a known limitation of the current script to support markdown, Links that contain the `")"` character will not display well, or will break.
As per [issue #127](https://github.com/nextcloud/deck/issues/127) Due to a known limitation of the current script to support markdown, Links that contain the `")"` character will not display well, or will break.
The recommended solution is to use `"<"` and `">"` to wrap those links. It should assure their integrity.
If you come by another case of broken link, or broken display of links, please report it by opening a new issue.

View File

@@ -1,6 +1,6 @@
## Introduction
### What about Deck ?
You may know Kanban website like Trello? Deck is about the same thing but secured and respectful of your privacy!
You may know Kanban website like Trello ? Deck is about the same thing but secured and respectful of your privacy !
Integrated in Nextcloud, you can easily manage your projects while having your data secured.
### Use cases
@@ -14,9 +14,6 @@ Overall, Deck is easy to use. You can create boards, add users, share the Deck,
3. [Handle cards options](#3-handle-cards-options)
4. [Archive old tasks](#4-archive-old-tasks)
5. [Manage your board](#5-manage-your-board)
6. [Import boards](#6-import-boards)
7. [Search](#7-search)
8. [New owner for the deck entities](#8-new-owner-for-the-deck-entities)
### 1. Create my first board
In this example, we're going to create a board and share it with an other nextcloud user.
@@ -39,7 +36,6 @@ And all the magic of this software consists on moving your cards from a stack to
### 3. Handle cards options
Once you have created your cards, you can modify them or add options by clicking on them. So, what are the options? Well, there are several of them:
- Tag Management
- Assign a card to a user (s¡he will receive a notification)
- Render date, or deadline
@@ -61,7 +57,6 @@ Once finished or obsolete, a task could be archived. The tasks is not deleted, i
### 5. Manage your board
You can manage the settings of your Deck once you are inside it, by clicking on the small wheel at the top right.
Once in this menu, you have access to several things:
- Sharing
- Tags
- Deleted objects
@@ -72,109 +67,3 @@ The **sharing tab** allows you to add users or even groups to your boards.
**Deleted objects** allows you to return previously deleted stacks or cards.
The **Timeline** allows you to see everything that happened in your boards. Everything!
### 6. Import boards
Importing can be done using the API or the `occ` `deck:import` command.
Comments with more than 1000 characters are placed as attached files to the card.
It is possible to import from the following sources:
#### Trello JSON
Steps:
* Create the data file
* Access Trello
* go to the board you want to export
* Follow the steps in [Trello documentation](https://help.trello.com/article/747-exporting-data-from-trello-1) and export as JSON
* Create the configuration file
* Execute the import informing the import file path, data file and source as `Trello JSON`
Create the configuration file respecting the [JSON Schema](https://github.com/nextcloud/deck/blob/main/lib/Service/Importer/fixtures/config-trelloJson-schema.json) for import `Trello JSON`
Example configuration file:
```json
{
"owner": "admin",
"color": "0800fd",
"uidRelation": {
"johndoe": "johndoe"
}
}
```
**Limitations**:
Importing from a JSON file imports up to 1000 actions. To find out how many actions the board to be imported has, identify how many actions the JSON has.
#### Trello API
Import using API is recommended for boards with more than 1000 actions.
Trello makes it possible to attach links to a card. Deck does not have this feature. Attachments and attachment links are added in a markdown table at the end of the description for every imported card that has attachments in Trello.
* Get the API Key and API Token [here](https://developer.atlassian.com/cloud/trello/guides/rest-api/api-introduction/#authentication-and-authorization)
* Get the ID of the board you want to import by making a request to:
https://api.trello.com/1/members/me/boards?key={yourKey}&token={yourToken}&fields=id,name
This ID you will use in the configuration file in the `board` property
* Create the configuration file
Create the configuration file respecting the [JSON Schema](https://github.com/nextcloud/deck/blob/main/lib/Service/Importer/fixtures/config-trelloApi-schema.json) for import `Trello JSON`
Example configuration file:
```json
{
"owner": "admin",
"color": "0800fd",
"api": {
"key": "0cc175b9c0f1b6a831c399e269772661",
"token": "92eb5ffee6ae2fec3ad71c777531578f4a8a08f09d37b73795649038408b5f33"
},
"board": "8277e0910d750195b4487976",
"uidRelation": {
"johndoe": "johndoe"
}
}
```
### 7. Search
Deck provides a global search either through the unified search in the Nextcloud header or with the inline search next to the board controls.
This search allows advanced filtering of cards across all board of the logged in user.
For example the search `project tag:ToDo assigned:alice assigned:bob` will return all cards where the card title or description contains project **and** the tag ToDo is set **and** the user alice is assigned **and** the user bob is assigned.
#### Supported search filters
| Filter | Operators | Query |
| ----------- | ----------------- | ------------------------------------------------------------ |
| title | `:` | text token used for a case-insentitive search on the cards title |
| description | `:` | text token used for a case-insentitive search on the cards description |
| list | `:` | text token used for a case-insentitive search on the cards list name |
| tag | `:` | text token used for a case-insentitive search on the assigned tags |
| date | `:` | 'overdue', 'today', 'week', 'month', 'none' |
| | `>` `<` `>=` `<=` | Compare the card due date to the passed date (see [supported date formats](https://www.php.net/manual/de/datetime.formats.php)) Card due dates are always considered UTC for comparison |
| assigned | `:` | id or displayname of a user or group for a search on the assigned users or groups |
Other text tokens will be used to perform a case-insensitive search on the card title and description
In addition, quotes can be used to pass a query with spaces, e.g. `"Exact match with spaces"` or `title:"My card"`.
### 8. New owner for the deck entities
You can transfer ownership of boards, cards, etc to a new user, using `occ` command `deck:transfer-ownership`
```bash
php occ deck:transfer-ownership previousOwner newOwner
```
The transfer will preserve card details linked to the old owner, which can also be remapped by using the `--remap` option on the occ command.
```bash
php occ deck:transfer-ownership --remap previousOwner newOwner
```
Individual boards can be transferred by adding the id of the board to the command:
```bash
php occ deck:transfer-ownership previousOwner newOwner 123
```

View File

@@ -1,98 +0,0 @@
## Export
Deck currently supports exporting all boards a user owns in a single JSON file. The format is based on the database schema that deck uses. It can be used to re-import boards on the same or other instances.
The export currently has some kown limitations in terms of specific data not included:
- Activity information
- File attachments to deck cards
- Comments
-
```
occ deck:export > my-file.json
```
## Import boards
Importing can be done using the API or the `occ` `deck:import` command.
It is possible to import from the following sources:
### Deck JSON
A json file that has been obtained from the above described `occ deck:export [userid]` command can be imported.
```
occ deck:import my-file.json
```
In case you are importing from a different instance you may use an additional config file to provide custom user id mapping in case users have different identifiers.
```
{
"owner": "admin",
"uidRelation": {
"johndoe": "test-user-1"
}
}
```
#### Trello JSON
Limitations:
* Comments with more than 1000 characters are placed as attached files to the card.
Steps:
* Create the data file
* Access Trello
* go to the board you want to export
* Follow the steps in [Trello documentation](https://help.trello.com/article/747-exporting-data-from-trello-1) and export as JSON
* Create the configuration file
* Execute the import informing the import file path, data file and source as `Trello JSON`
Create the configuration file respecting the [JSON Schema](https://github.com/nextcloud/deck/blob/main/lib/Service/Importer/fixtures/config-trelloJson-schema.json) for import `Trello JSON`
Example configuration file:
```json
{
"owner": "admin",
"color": "0800fd",
"uidRelation": {
"johndoe": "johndoe"
}
}
```
**Limitations**:
Importing from a JSON file imports up to 1000 actions. To find out how many actions the board to be imported has, identify how many actions the JSON has.
#### Trello API
Import using API is recommended for boards with more than 1000 actions.
Trello makes it possible to attach links to a card. Deck does not have this feature. Attachments and attachment links are added in a markdown table at the end of the description for every imported card that has attachments in Trello.
* Get the API Key and API Token [here](https://developer.atlassian.com/cloud/trello/guides/rest-api/api-introduction/#authentication-and-authorization)
* Get the ID of the board you want to import by making a request to:
https://api.trello.com/1/members/me/boards?key={yourKey}&token={yourToken}&fields=id,name
This ID you will use in the configuration file in the `board` property
* Create the configuration file
Create the configuration file respecting the [JSON Schema](https://github.com/nextcloud/deck/blob/main/lib/Service/Importer/fixtures/config-trelloApi-schema.json) for import `Trello JSON`
Example configuration file:
```json
{
"owner": "admin",
"color": "0800fd",
"api": {
"key": "0cc175b9c0f1b6a831c399e269772661",
"token": "92eb5ffee6ae2fec3ad71c777531578f4a8a08f09d37b73795649038408b5f33"
},
"board": "8277e0910d750195b4487976",
"uidRelation": {
"johndoe": "johndoe"
}
}
```

View File

@@ -1,3 +1,3 @@
.subnav ul {
padding-left: 20px;
padding-left: 20px;
}

View File

@@ -1,32 +0,0 @@
## Implement import
* Create a new importer class extending `ABoardImportService`
* Create a listener for event `BoardImportGetAllowedEvent` to enable your importer.
> You can read more about listeners on [Nextcloud](https://docs.nextcloud.com/server/latest/developer_manual/basics/events.html?highlight=event#writing-a-listener) doc.
Example:
```php
class YourCustomImporterListener {
public function handle(Event $event): void {
if (!($event instanceof BoardImportGetAllowedEvent)) {
return;
}
$event->getService()->addAllowedImportSystem([
'name' => YourCustomImporterService::$name,
'class' => YourCustomImporterService::class,
'internalName' => 'YourCustomImporter'
]);
}
}
```
* Register your listener on your `Application` class like this:
```php
$dispatcher = $this->getContainer()->query(IEventDispatcher::class);
$dispatcher->registerEventListener(
BoardImportGetAllowedEvent::class,
YourCustomImporterListener::class
);
```
* Use the `lib/Service/Importer/Systems/TrelloJsonService.php` class as inspiration

View File

@@ -1,7 +0,0 @@
## Import class diagram
Importing boards to the Deck implements the class diagram below.
> **NOTE**: When making any changes to the structure of the classes or implementing import from other sources, edit the `BoardImport.yuml` file
![Screenshot](resources/BoardImport.svg)

View File

@@ -1,214 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.40.1 (20161225.0304)
-->
<!-- Title: G Pages: 1 -->
<svg width="417pt" height="830pt"
viewBox="0.00 0.00 417.01 830.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 826)">
<title>G</title>
<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-826 413.012,-826 413.012,4 -4,4"/>
<!-- A0 -->
<g id="node1" class="node">
<title>A0</title>
<polygon fill="#fff8dc" stroke="#000000" points="165.909,-822 70.091,-822 70.091,-766 171.909,-766 171.909,-816 165.909,-822"/>
<polyline fill="none" stroke="#000000" points="165.909,-822 165.909,-816 "/>
<polyline fill="none" stroke="#000000" points="171.909,-816 165.909,-816 "/>
<text text-anchor="middle" x="121" y="-809" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">Classes used on</text>
<text text-anchor="middle" x="121" y="-797" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">board import.</text>
<text text-anchor="middle" x="121" y="-785" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">Methods just to</text>
<text text-anchor="middle" x="121" y="-773" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">illustrate.</text>
</g>
<!-- A1 -->
<g id="node2" class="node">
<title>A1</title>
<polygon fill="none" stroke="#000000" points="108.7773,-680 23.2227,-680 23.2227,-644 108.7773,-644 108.7773,-680"/>
<text text-anchor="middle" x="66" y="-659" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">ApiController</text>
</g>
<!-- A2 -->
<g id="node3" class="node">
<title>A2</title>
<polygon fill="none" stroke="#000000" points="0,-514 0,-546 132,-546 132,-514 0,-514"/>
<text text-anchor="start" x="9.607" y="-527" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">BoardImportApiController</text>
<polygon fill="none" stroke="#000000" points="0,-458 0,-514 132,-514 132,-458 0,-458"/>
<text text-anchor="start" x="45.8645" y="-495" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">+import()</text>
<text text-anchor="start" x="16.1335" y="-483" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">+getAllowedSystems()</text>
<text text-anchor="start" x="20.0185" y="-471" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">+getConfigSchema()</text>
</g>
<!-- A1&#45;&gt;A2 -->
<g id="edge1" class="edge">
<title>A1&#45;&gt;A2</title>
<path fill="none" stroke="#000000" d="M66,-633.6693C66,-609.4424 66,-574.1663 66,-546.2238"/>
<polygon fill="#000000" stroke="#000000" points="66,-643.957 61.5001,-633.9569 66,-638.957 66.0001,-633.957 66.0001,-633.957 66.0001,-633.957 66,-638.957 70.5001,-633.957 66,-643.957 66,-643.957"/>
</g>
<!-- A3 -->
<g id="node4" class="node">
<title>A3</title>
<polygon fill="none" stroke="#000000" points="92,-364 92,-396 200,-396 200,-364 92,-364"/>
<text text-anchor="start" x="101.828" y="-377" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">BoardImportService</text>
<polygon fill="none" stroke="#000000" points="92,-284 92,-364 200,-364 200,-284 92,-284"/>
<text text-anchor="start" x="125.8645" y="-345" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">+import()</text>
<text text-anchor="start" x="118.9105" y="-333" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">+bootstrap()</text>
<text text-anchor="start" x="105.857" y="-321" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">+validateSystem()</text>
<text text-anchor="start" x="108.218" y="-309" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">#validateConfig()</text>
<text text-anchor="start" x="112.107" y="-297" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">#validateData()</text>
</g>
<!-- A2&#45;&gt;A3 -->
<g id="edge2" class="edge">
<title>A2&#45;&gt;A3</title>
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M87.8604,-457.7328C95.8577,-441.5382 105.0823,-422.8583 113.7939,-405.2174"/>
<polygon fill="#000000" stroke="#000000" points="118.2935,-396.1057 117.9004,-407.0646 116.0795,-400.5889 113.8656,-405.072 113.8656,-405.072 113.8656,-405.072 116.0795,-400.5889 109.8308,-403.0795 118.2935,-396.1057 118.2935,-396.1057"/>
<text text-anchor="middle" x="88.3076" y="-434.7378" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">uses</text>
</g>
<!-- A7 -->
<g id="node8" class="node">
<title>A7</title>
<polygon fill="none" stroke="#000000" points="37,-196 37,-228 129,-228 129,-196 37,-196"/>
<text text-anchor="start" x="46.612" y="-209" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">TrelloApiService</text>
<polygon fill="none" stroke="#000000" points="37,-164 37,-196 129,-196 129,-164 37,-164"/>
<text text-anchor="start" x="53.9655" y="-177" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">+name:string</text>
</g>
<!-- A3&#45;&gt;A7 -->
<g id="edge6" class="edge">
<title>A3&#45;&gt;A7</title>
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M114.8609,-283.9135C107.8316,-268.5143 100.7854,-252.0928 95.0404,-237.6613"/>
<polygon fill="#000000" stroke="#000000" points="91.2872,-228.0253 99.1098,-235.7102 93.1019,-232.6844 94.9167,-237.3434 94.9167,-237.3434 94.9167,-237.3434 93.1019,-232.6844 90.7235,-238.9767 91.2872,-228.0253 91.2872,-228.0253"/>
<text text-anchor="middle" x="99.6759" y="-267.8975" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">uses</text>
</g>
<!-- A9 -->
<g id="node10" class="node">
<title>A9</title>
<polygon fill="none" stroke="#000000" points="148,-202 148,-234 273,-234 273,-202 148,-202"/>
<text text-anchor="start" x="170.7765" y="-215" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">TrelloJsonService</text>
<polygon fill="none" stroke="#000000" points="148,-158 148,-202 273,-202 273,-158 148,-158"/>
<text text-anchor="start" x="181.4655" y="-183" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">+name:string</text>
<text text-anchor="start" x="157.981" y="-171" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">#needValidateData:true</text>
</g>
<!-- A3&#45;&gt;A9 -->
<g id="edge9" class="edge">
<title>A3&#45;&gt;A9</title>
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M164.3261,-283.9135C170.0039,-270.5688 176.3462,-256.4563 182.4816,-243.5365"/>
<polygon fill="#000000" stroke="#000000" points="186.9002,-234.3677 186.6126,-245.3298 184.7295,-238.872 182.5588,-243.3762 182.5588,-243.3762 182.5588,-243.3762 184.7295,-238.872 178.505,-241.4226 186.9002,-234.3677 186.9002,-234.3677"/>
<text text-anchor="middle" x="163.6874" y="-260.9237" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">uses</text>
</g>
<!-- A10 -->
<g id="node11" class="node">
<title>A10</title>
<polygon fill="#fff8dc" stroke="#000000" points="317.7872,-362 218.2128,-362 218.2128,-318 323.7872,-318 323.7872,-356 317.7872,-362"/>
<polyline fill="none" stroke="#000000" points="317.7872,-362 317.7872,-356 "/>
<polyline fill="none" stroke="#000000" points="323.7872,-356 317.7872,-356 "/>
<text text-anchor="middle" x="271" y="-349" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">validateSystem is</text>
<text text-anchor="middle" x="271" y="-337" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">public because is</text>
<text text-anchor="middle" x="271" y="-325" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">used on Api.</text>
</g>
<!-- A3&#45;&gt;A10 -->
<g id="edge11" class="edge">
<title>A3&#45;&gt;A10</title>
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M200.1992,-340C206.1915,-340 212.1837,-340 218.176,-340"/>
</g>
<!-- A4 -->
<g id="node5" class="node">
<title>A4</title>
<polygon fill="none" stroke="#000000" points="264.1131,-812 189.8869,-812 189.8869,-776 264.1131,-776 264.1131,-812"/>
<text text-anchor="middle" x="227" y="-791" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">Command</text>
</g>
<!-- A5 -->
<g id="node6" class="node">
<title>A5</title>
<polygon fill="none" stroke="#000000" points="148,-684 148,-716 307,-716 307,-684 148,-684"/>
<text text-anchor="start" x="199.9955" y="-697" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">BoardImport</text>
<polygon fill="none" stroke="#000000" points="148,-652 148,-684 307,-684 307,-652 148,-652"/>
<text text-anchor="start" x="157.907" y="-665" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">+boardImportCommandService</text>
<polygon fill="none" stroke="#000000" points="148,-608 148,-652 307,-652 307,-608 148,-608"/>
<text text-anchor="start" x="200.8305" y="-633" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">#configure()</text>
<text text-anchor="start" x="177.76" y="-621" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">#execute(input,output)</text>
</g>
<!-- A4&#45;&gt;A5 -->
<g id="edge3" class="edge">
<title>A4&#45;&gt;A5</title>
<path fill="none" stroke="#000000" d="M227,-765.6356C227,-751.1554 227,-733.0451 227,-716.0324"/>
<polygon fill="#000000" stroke="#000000" points="227,-775.9227 222.5001,-765.9227 227,-770.9227 227.0001,-765.9227 227.0001,-765.9227 227.0001,-765.9227 227,-770.9227 231.5001,-765.9228 227,-775.9227 227,-775.9227"/>
</g>
<!-- A6 -->
<g id="node7" class="node">
<title>A6</title>
<polygon fill="none" stroke="#000000" points="150,-526 150,-558 304,-558 304,-526 150,-526"/>
<text text-anchor="start" x="159.7715" y="-539" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">BoardImportCommandService</text>
<polygon fill="none" stroke="#000000" points="150,-446 150,-526 304,-526 304,-446 150,-446"/>
<text text-anchor="start" x="199.9105" y="-507" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">+bootstrap()</text>
<text text-anchor="start" x="206.8645" y="-495" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">+import()</text>
<text text-anchor="start" x="186.857" y="-483" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">+validateSystem()</text>
<text text-anchor="start" x="189.218" y="-471" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">#validateConfig()</text>
<text text-anchor="start" x="193.107" y="-459" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">#validateData()</text>
</g>
<!-- A5&#45;&gt;A6 -->
<g id="edge4" class="edge">
<title>A5&#45;&gt;A6</title>
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M227,-607.8313C227,-595.0442 227,-581.2707 227,-568.0248"/>
<polygon fill="#000000" stroke="#000000" points="227,-558.0234 231.5001,-568.0234 227,-563.0234 227.0001,-568.0234 227.0001,-568.0234 227.0001,-568.0234 227,-563.0234 222.5001,-568.0235 227,-558.0234 227,-558.0234"/>
<text text-anchor="middle" x="218.5476" y="-586.7051" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">uses</text>
</g>
<!-- A6&#45;&gt;A3 -->
<g id="edge5" class="edge">
<title>A6&#45;&gt;A3</title>
<path fill="none" stroke="#000000" d="M198.8975,-445.7949C192.3634,-432.7268 185.3528,-418.7057 178.6417,-405.2834"/>
<polygon fill="#000000" stroke="#000000" points="174.0529,-396.1057 182.55,-403.0375 176.289,-400.5779 178.5251,-405.05 178.5251,-405.05 178.5251,-405.05 176.289,-400.5779 174.5001,-407.0625 174.0529,-396.1057 174.0529,-396.1057"/>
</g>
<!-- A7&#45;&gt;A3 -->
<g id="edge7" class="edge">
<title>A7&#45;&gt;A3</title>
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M102.735,-228.0253C109.5347,-241.763 117.1224,-258.3431 124.0627,-274.4849"/>
<polygon fill="#000000" stroke="#000000" points="128.0634,-283.9135 120.0148,-276.4657 126.1104,-279.3107 124.1573,-274.7079 124.1573,-274.7079 124.1573,-274.7079 126.1104,-279.3107 128.2998,-272.9502 128.0634,-283.9135 128.0634,-283.9135"/>
<text text-anchor="middle" x="118.307" y="-237.5757" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">uses</text>
</g>
<!-- A8 -->
<g id="node9" class="node">
<title>A8</title>
<polygon fill="none" stroke="#000000" points="80,-64 80,-108 213,-108 213,-64 80,-64"/>
<text text-anchor="start" x="117.04" y="-89" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">&lt;&lt;abstract&gt;&gt;</text>
<text text-anchor="start" x="98.9935" y="-77" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">ABoardImportService</text>
<polygon fill="none" stroke="#000000" points="80,-32 80,-64 213,-64 213,-32 80,-32"/>
<text text-anchor="start" x="92.036" y="-45" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">#needValidateData:false</text>
<polygon fill="none" stroke="#000000" points="80,0 80,-32 213,-32 213,0 80,0"/>
<text text-anchor="start" x="89.677" y="-13" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">+needValidateData():bool</text>
</g>
<!-- A7&#45;&gt;A8 -->
<g id="edge8" class="edge">
<title>A7&#45;&gt;A8</title>
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M97.2957,-163.778C103.3956,-150.029 110.7371,-133.4813 117.8485,-117.4527"/>
<polygon fill="none" stroke="#000000" points="121.1416,-118.6605 121.9978,-108.1003 114.743,-115.8216 121.1416,-118.6605"/>
<text text-anchor="middle" x="96.9205" y="-140.7815" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">implements</text>
</g>
<!-- A9&#45;&gt;A3 -->
<g id="edge10" class="edge">
<title>A9&#45;&gt;A3</title>
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M198.9952,-234.3677C194.0646,-246.7117 188.0483,-260.7568 181.8434,-274.4849"/>
<polygon fill="#000000" stroke="#000000" points="177.5286,-283.9135 177.598,-272.9478 179.6093,-279.367 181.6899,-274.8204 181.6899,-274.8204 181.6899,-274.8204 179.6093,-279.367 185.7818,-276.693 177.5286,-283.9135 177.5286,-283.9135"/>
<text text-anchor="middle" x="200.0654" y="-251.3391" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">uses</text>
</g>
<!-- A9&#45;&gt;A8 -->
<g id="edge13" class="edge">
<title>A9&#45;&gt;A8</title>
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M192.8492,-157.9466C187.2535,-145.5313 180.8796,-131.389 174.6742,-117.6209"/>
<polygon fill="none" stroke="#000000" points="177.7167,-115.8534 170.4168,-108.1747 171.3349,-118.7297 177.7167,-115.8534"/>
<text text-anchor="middle" x="177.6953" y="-141.8944" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">implements</text>
</g>
<!-- A11 -->
<g id="node12" class="node">
<title>A11</title>
<polygon fill="#fff8dc" stroke="#000000" points="403.024,-224 290.976,-224 290.976,-168 409.024,-168 409.024,-218 403.024,-224"/>
<polyline fill="none" stroke="#000000" points="403.024,-224 403.024,-218 "/>
<polyline fill="none" stroke="#000000" points="409.024,-218 403.024,-218 "/>
<text text-anchor="middle" x="350" y="-211" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">To create an import</text>
<text text-anchor="middle" x="350" y="-199" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">to another system,</text>
<text text-anchor="middle" x="350" y="-187" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">create another class</text>
<text text-anchor="middle" x="350" y="-175" font-family="Helvetica,sans-Serif" font-size="10.00" fill="#000000">similar to this.</text>
</g>
<!-- A9&#45;&gt;A11 -->
<g id="edge12" class="edge">
<title>A9&#45;&gt;A11</title>
<path fill="none" stroke="#000000" stroke-dasharray="5,2" d="M272.6172,-196C278.6627,-196 284.7083,-196 290.7538,-196"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 16 KiB

View File

@@ -1,24 +0,0 @@
// Created using [yUML](https://github.com/jaime-olivares/vscode-yuml)
// {type:class}
// {direction:topDown}
// {generate:true}
[note: Classes used on board import. Methods just to illustrate. {bg:cornsilk}]
[ApiController]<-[BoardImportApiController|+import();+getAllowedSystems();+getConfigSchema()]
[BoardImportApiController]uses-.->[BoardImportService|+import();+bootstrap();+validateSystem();#validateConfig();#validateData();]
[Command]<-[BoardImport|+boardImportCommandService|#configure();#execute(input,output)]
[BoardImport]uses-.->[BoardImportCommandService|+bootstrap();+import();+validateSystem();#validateConfig();#validateData()]
[BoardImportCommandService]->[BoardImportService]
[BoardImportService]uses-.->[TrelloApiService|+name:string]
[TrelloApiService]uses-.->[BoardImportService]
[TrelloApiService]implements-.-^[<<abstract>> ABoardImportService|#needValidateData:false|+needValidateData():bool]
[BoardImportService]uses-.->[TrelloJsonService|+name:string;#needValidateData:true]
[TrelloJsonService]uses-.->[BoardImportService]
[BoardImportService]-[note: validateSystem is public because is used on Api. {bg:cornsilk}]
[TrelloJsonService]-[note: To create an import to another system, create another class similar to this. {bg:cornsilk}]
[TrelloJsonService]implements-.-^[<<abstract>> ABoardImportService]

View File

@@ -1,4 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns="http://www.w3.org/2000/svg" height="32" width="32" version="1.0" viewbox="0 0 32 32">
<path d="m16 1-10 18h11l-1 12 10-18h-11z"/>
</svg>

Before

Width:  |  Height:  |  Size: 205 B

View File

@@ -1,4 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns="http://www.w3.org/2000/svg" height="32" width="32" version="1.0" viewBox="0 0 32 32">
<path d="m16 1-10 18h11l-1 12 10-18h-11z" fill="#FFF"/>
</svg>

Before

Width:  |  Height:  |  Size: 217 B

1
img/archive-white.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)" fill="#fff"><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="0"/></g></svg>

After

Width:  |  Height:  |  Size: 488 B

View File

@@ -1,3 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" style="height: 240px; width: 240px;" viewBox="0 0 24 24">
<path fill="currentColor" d="M12,15H10V13H12V15M18,15H14V13H18V15M8,11H6V9H8V11M18,11H10V9H18V11M20,20H4A2,2 0 0,1 2,18V6A2,2 0 0,1 4,4H20A2,2 0 0,1 22,6V18A2,2 0 0,1 20,20M4,6V18H20V6H4Z" />
</svg>

Before

Width:  |  Height:  |  Size: 298 B

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 58 58" width="512" height="512"><g fill="#000"><path d="M54.319 37.839C54.762 35.918 55 33.96 55 32c0-9.095-4.631-17.377-12.389-22.153a1 1 0 1 0-1.049 1.703C48.724 15.96 53 23.604 53 32c0 1.726-.2 3.451-.573 5.147A6.992 6.992 0 0 0 51 37c-3.86 0-7 3.141-7 7s3.14 7 7 7 7-3.141 7-7a7.006 7.006 0 0 0-3.681-6.161zM38.171 54.182A23.867 23.867 0 0 1 29 56a24.047 24.047 0 0 1-17.017-7.092A6.974 6.974 0 0 0 14 44c0-3.859-3.14-7-7-7s-7 3.141-7 7 3.14 7 7 7a6.952 6.952 0 0 0 3.381-.875C15.26 55.136 21.994 58 29 58c3.435 0 6.778-.663 9.936-1.971.51-.211.753-.796.542-1.307a1.001 1.001 0 0 0-1.307-.54zM4 31.213a1 1 0 0 0 1.068-.927c.712-10.089 7.586-18.52 17.22-21.314C23.142 11.874 25.825 14 29 14c3.86 0 7-3.141 7-7s-3.14-7-7-7c-3.851 0-6.985 3.127-6.999 6.975C11.42 9.922 3.851 19.12 3.073 30.146A.999.999 0 0 0 4 31.213z"/></g></svg>

Before

Width:  |  Height:  |  Size: 885 B

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 58 58" width="512" height="512"><g fill="#fff"><path d="M54.319 37.839C54.762 35.918 55 33.96 55 32c0-9.095-4.631-17.377-12.389-22.153a1 1 0 1 0-1.049 1.703C48.724 15.96 53 23.604 53 32c0 1.726-.2 3.451-.573 5.147A6.992 6.992 0 0 0 51 37c-3.86 0-7 3.141-7 7s3.14 7 7 7 7-3.141 7-7a7.006 7.006 0 0 0-3.681-6.161zM38.171 54.182A23.867 23.867 0 0 1 29 56a24.047 24.047 0 0 1-17.017-7.092A6.974 6.974 0 0 0 14 44c0-3.859-3.14-7-7-7s-7 3.141-7 7 3.14 7 7 7a6.952 6.952 0 0 0 3.381-.875C15.26 55.136 21.994 58 29 58c3.435 0 6.778-.663 9.936-1.971.51-.211.753-.796.542-1.307a1.001 1.001 0 0 0-1.307-.54zM4 31.213a1 1 0 0 0 1.068-.927c.712-10.089 7.586-18.52 17.22-21.314C23.142 11.874 25.825 14 29 14c3.86 0 7-3.141 7-7s-3.14-7-7-7c-3.851 0-6.985 3.127-6.999 6.975C11.42 9.922 3.851 19.12 3.073 30.146A.999.999 0 0 0 4 31.213z"/></g></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 58 58" width="512" height="512"><g fill="#000"><path d="M54.319 37.839C54.762 35.918 55 33.96 55 32c0-9.095-4.631-17.377-12.389-22.153a1 1 0 1 0-1.049 1.703C48.724 15.96 53 23.604 53 32c0 1.726-.2 3.451-.573 5.147A6.992 6.992 0 0 0 51 37c-3.86 0-7 3.141-7 7s3.14 7 7 7 7-3.141 7-7a7.006 7.006 0 0 0-3.681-6.161zM38.171 54.182A23.867 23.867 0 0 1 29 56a24.047 24.047 0 0 1-17.017-7.092A6.974 6.974 0 0 0 14 44c0-3.859-3.14-7-7-7s-7 3.141-7 7 3.14 7 7 7a6.952 6.952 0 0 0 3.381-.875C15.26 55.136 21.994 58 29 58c3.435 0 6.778-.663 9.936-1.971.51-.211.753-.796.542-1.307a1.001 1.001 0 0 0-1.307-.54zM4 31.213a1 1 0 0 0 1.068-.927c.712-10.089 7.586-18.52 17.22-21.314C23.142 11.874 25.825 14 29 14c3.86 0 7-3.141 7-7s-3.14-7-7-7c-3.851 0-6.985 3.127-6.999 6.975C11.42 9.922 3.851 19.12 3.073 30.146A.999.999 0 0 0 4 31.213z"/></g></svg>

Before

Width:  |  Height:  |  Size: 885 B

After

Width:  |  Height:  |  Size: 885 B

1
img/clone.svg Normal file
View File

@@ -0,0 +1 @@
<svg width="16" height="16" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M11.8 13.8H2.2V4.2h9.6m1.2 0c0-.67-.53-1.2-1.2-1.2H2.2C1.53 3 1 3.53 1 4.2v9.6c0 .67.53 1.2 1.2 1.2h9.6c.67 0 1.2-.53 1.2-1.2"/><path d="m4.2 1c-0.67 0-1.2 0.54-1.2 1.2h10.8v10.8c0.67 0 1.2-0.53 1.2-1.2v-9.6c0-0.67-0.53-1.2-1.2-1.2z"/></svg>

After

Width:  |  Height:  |  Size: 327 B

View File

@@ -1 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M14,17L4,17v2h10v-2zM20,9L4,9v2h16L20,9zM4,15h16v-2L4,13v2zM4,5v2h16L20,5L4,5z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" version="1.1" height="16"><path fill="#000" d="m2.5 1c-0.28 0-0.5 0.22-0.5 0.5v13c0 0.28 0.22 0.5 0.5 0.5h11c0.28 0 0.5-0.22 0.5-0.5v-10.5l-3-3h-8.5zm1.5 2h6v1h-6v-1zm0 3h5v1h-5v-1zm0 3h8v1h-8v-1zm0 3h4v1h-4v-1z"/></svg>

Before

Width:  |  Height:  |  Size: 180 B

After

Width:  |  Height:  |  Size: 292 B

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 4.233 4.233"><g paint-order="stroke fill markers"><path d="M.52.465h3.283L2.631 1.918h-.99zM1.642 1.918h.992v1.866l-.996-.455z"/></g></svg>

Before

Width:  |  Height:  |  Size: 216 B

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 4.233 4.233" height="16" width="16"><path d="M.52.465h3.283L2.631 1.918h-.99zm1.122 1.453h.992v1.866l-.996-.455z" paint-order="stroke fill markers"/><ellipse ry=".691" rx=".674" cy="3.461" cx="3.45" fill="#000"/></svg>

Before

Width:  |  Height:  |  Size: 272 B

View File

@@ -1,4 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1.1" viewBox="0 0 16 16">
<path d="m8 2c-0.5523 0-1 0.4477-1 1 0 0.0472 0.021 0.0873 0.0273 0.1328-1.7366 0.4362-3.0273 1.9953-3.0273 3.8672v2l-1 1v1h10v-1l-1-1v-2c0-1.8719-1.291-3.431-3.0273-3.8672 0.0063-0.0455 0.0273-0.0856 0.0273-0.1328 0-0.5523-0.4477-1-1-1zm-2 10c0 1.1046 0.8954 2 2 2s2-0.8954 2-2z" fill="#000"/>
</svg>

Before

Width:  |  Height:  |  Size: 456 B

View File

@@ -2,7 +2,6 @@ OC.L10N.register(
"deck",
{
"Personal" : "Persoonlik",
"Later" : "Later",
"copy" : "kopie",
"Done" : "Gereed",
"The file was uploaded" : "Die lÃĒer is opgelaai",
@@ -13,38 +12,20 @@ OC.L10N.register(
"Missing a temporary folder" : "Ontbrekende tydelike gids",
"A PHP extension stopped the file upload" : "’n PHP-uitbreiding het die oplaai gestaak",
"Cancel" : "Kanselleer",
"File already exists" : "LÃĒer bestaan reeds",
"Open" : "Open",
"Completed" : "Voltooid",
"Open details" : "Open besonderhede",
"Details" : "Besonderhede",
"Tags" : "Etikette",
"No participants found" : "Geen deelnemers gevind",
"Can edit" : "Kan redigeer",
"Can share" : "Kan deel",
"Owner" : "Eienaar",
"Delete" : "Skrap",
"Edit" : "Wysig",
"Download" : "Laai af",
"Details" : "Besonderhede",
"Due date" : "Sperdatum",
"Description" : "Beskrywing",
"Comments" : "Kommentare",
"Modified" : "Gewysig",
"Created" : "Geskep",
"Save" : "Stoor",
"Reply" : "Antwoord",
"Update" : "Werk by",
"Created:" : "Geskep:",
"Description" : "Beskrywing",
"Select Date" : "Kies Datum",
"seconds ago" : "sekondes gelede",
"Keyboard shortcuts" : "Sneltoetse",
"Keyboard shortcut" : "Snelsleutel",
"Search" : "Soek",
"Shared with you" : "Met u gedeel",
"No notifications" : "Geen kennisgewings",
"An error occurred" : "'n Fout het voorgekom",
"Today" : "Vandag",
"Tomorrow" : "Môre",
"Close" : "Sluit",
"Share" : "Deel"
"Settings" : "Instellings",
"An error occurred" : "'n Fout het voorgekom"
},
"nplurals=2; plural=(n != 1);");

View File

@@ -1,6 +1,5 @@
{ "translations": {
"Personal" : "Persoonlik",
"Later" : "Later",
"copy" : "kopie",
"Done" : "Gereed",
"The file was uploaded" : "Die lÃĒer is opgelaai",
@@ -11,38 +10,20 @@
"Missing a temporary folder" : "Ontbrekende tydelike gids",
"A PHP extension stopped the file upload" : "’n PHP-uitbreiding het die oplaai gestaak",
"Cancel" : "Kanselleer",
"File already exists" : "LÃĒer bestaan reeds",
"Open" : "Open",
"Completed" : "Voltooid",
"Open details" : "Open besonderhede",
"Details" : "Besonderhede",
"Tags" : "Etikette",
"No participants found" : "Geen deelnemers gevind",
"Can edit" : "Kan redigeer",
"Can share" : "Kan deel",
"Owner" : "Eienaar",
"Delete" : "Skrap",
"Edit" : "Wysig",
"Download" : "Laai af",
"Details" : "Besonderhede",
"Due date" : "Sperdatum",
"Description" : "Beskrywing",
"Comments" : "Kommentare",
"Modified" : "Gewysig",
"Created" : "Geskep",
"Save" : "Stoor",
"Reply" : "Antwoord",
"Update" : "Werk by",
"Created:" : "Geskep:",
"Description" : "Beskrywing",
"Select Date" : "Kies Datum",
"seconds ago" : "sekondes gelede",
"Keyboard shortcuts" : "Sneltoetse",
"Keyboard shortcut" : "Snelsleutel",
"Search" : "Soek",
"Shared with you" : "Met u gedeel",
"No notifications" : "Geen kennisgewings",
"An error occurred" : "'n Fout het voorgekom",
"Today" : "Vandag",
"Tomorrow" : "Môre",
"Close" : "Sluit",
"Share" : "Deel"
"Settings" : "Instellings",
"An error occurred" : "'n Fout het voorgekom"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

View File

@@ -1,25 +0,0 @@
OC.L10N.register(
"deck",
{
"Done" : "Feito",
"The file was uploaded" : "O fichero estiÃŗ puyato",
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "O fichero puyato sobrexe a directiva upload_max_filesize en php.ini",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "O fichero cargau supera a directiva MAX_FILE_SIZE que s'espezificÃŗ en o formulario HTML",
"The file was only partially uploaded" : "O fichero nomÃĄs s'ha cargau parzialmÊn",
"No file was uploaded" : "No s'ha cargau garra fichero",
"Missing a temporary folder" : "Falta una carpeta temporal",
"Could not write file to disk" : "No se podiÃŗ escribir o fichero en o disco",
"A PHP extension stopped the file upload" : "Una estensiÃŗn de PHP aturÃŗ a carga de fichers",
"Cancel" : "Canzelar",
"Details" : "Detalles",
"Tags" : "Etiquetas",
"Activity" : "Actividat",
"Delete" : "Borrar",
"Download" : "Escargar",
"Modified" : "Modificau",
"Search" : "Buscar",
"Today" : "Hue",
"Close" : "Zarrar",
"Share" : "Compartir"
},
"nplurals=2; plural=(n != 1);");

View File

@@ -1,23 +0,0 @@
{ "translations": {
"Done" : "Feito",
"The file was uploaded" : "O fichero estiÃŗ puyato",
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "O fichero puyato sobrexe a directiva upload_max_filesize en php.ini",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "O fichero cargau supera a directiva MAX_FILE_SIZE que s'espezificÃŗ en o formulario HTML",
"The file was only partially uploaded" : "O fichero nomÃĄs s'ha cargau parzialmÊn",
"No file was uploaded" : "No s'ha cargau garra fichero",
"Missing a temporary folder" : "Falta una carpeta temporal",
"Could not write file to disk" : "No se podiÃŗ escribir o fichero en o disco",
"A PHP extension stopped the file upload" : "Una estensiÃŗn de PHP aturÃŗ a carga de fichers",
"Cancel" : "Canzelar",
"Details" : "Detalles",
"Tags" : "Etiquetas",
"Activity" : "Actividat",
"Delete" : "Borrar",
"Download" : "Escargar",
"Modified" : "Modificau",
"Search" : "Buscar",
"Today" : "Hue",
"Close" : "Zarrar",
"Share" : "Compartir"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

View File

@@ -1,390 +1,30 @@
OC.L10N.register(
"deck",
{
"You have created a new board {board}" : "Ų„Ų‚Ø¯ Ų‚Ų…ØĒ Ø¨Ø§Ų†Ø´Ø§ØĄ Ų„ŲˆØ­ ØŦØ¯ŲŠØ¯ {board}",
"{user} has created a new board {board}" : "{user} Ų‚Ø§Ų… Ø¨Ø§Ų†Ø´Ø§ØĄ Ų„ŲˆØ­ {board}",
"You have deleted the board {board}" : "Ų‚Ų…ØĒ Ø¨Ų…ØŗØ­ Ø§Ų„Ų„ŲˆØ­ {board}",
"{user} has deleted the board {board}" : "{user} Ų…ŲŽØŗØ­Ų’ Ø§Ų„Ų„ŲˆØ­ {board}",
"You have restored the board {board}" : "Ų„Ų‚Ø¯ Ø§ØŗØĒؚدØĒ Ø§Ų„Ų„ŲˆØ­ {board}",
"{user} has restored the board {board}" : "{user} Ų‚Ø§Ų… Ø¨Ø§ØŗØĒØąØŦاؚ Ø§Ų„Ų„ŲˆØ­ {board}",
"You have shared the board {board} with {acl}" : "Ų‚Ų…ØĒ Ø¨Ų…Ø´Ø§ØąŲƒØŠ Ø§Ų„Ų„ŲˆØ­ {board} Ų…Øš {acl}",
"{user} has shared the board {board} with {acl}" : "{user} Ų‚Ø§Ų… Ø¨Ų…Ø´Ø§ØąŲƒØŠ Ø§Ų„Ų„ŲˆØ­ {board} Ų…Øš {acl}",
"You have removed {acl} from the board {board}" : "Ų‚Ų…ØĒ بØĨØ˛Ø§Ų„ØŠ {acl} Ų…Ų† Ø§Ų„Ų„ŲˆØ­ {board}",
"{user} has removed {acl} from the board {board}" : "{user} Ų‚Ø§Ų… Ø¨Ø§Ø˛Ø§Ų„ØŠ {acl} Ų…Ų† Ø§Ų„Ų„ŲˆØ­ {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} Ų‚Ø§Ų… Ø¨Ø§Ų„ØēØ§ØĄ Ø§ØąØ´ŲØŠ Ø§Ų„Ų„ŲˆØ­ {before}",
"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}",
"{user} has updated the description of the card {card} in list {stack} on board {board}" : "{user} Ų‚Ø§Ų… بØĒØ­Ø¯ŲŠØĢ Ø§Ų„ŲˆØĩ؁ ØĨŲ„Ų‰ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ {card} ؁؊ Ø§Ų„Ų‚Ø§ØĻŲ…ØŠ {stack} ØšŲ„Ų‰ Ø§Ų„Ų„ŲˆØ­ {board}",
"You have archived card {card} in list {stack} on board {board}" : "Ų„Ų‚Ø¯ Ų‚Ų…ØĒ Ø¨ØŖØąØ´ŲØŠ Ø¨ØˇØ§Ų‚ØŠ {card} ؁؊ Ø§Ų„Ų‚Ø§ØĻŲ…ØŠ {stack} ØšŲ„Ų‰ Ø§Ų„Ų„ŲˆØ­ {board}",
"{user} has archived card {card} in list {stack} on board {board}" : "{user} Ų‚Ø§Ų… Ø¨ØŖØąØ´ŲØŠ Ø¨ØˇØ§Ų‚ØŠ {card} ؁؊ Ø§Ų„Ų‚Ø§ØĻŲ…ØŠ {stack} ØšŲ„Ų‰ Ø§Ų„Ų„ŲˆØ­ {board}",
"You have unarchived card {card} in list {stack} on board {board}" : "Ų„Ø¯ŲŠŲƒ Ø¨ØˇØ§Ų‚ØŠ ØēŲŠØą Ų…Ø¤ØąØ´ŲØŠ {card} ؁؊ Ø§Ų„Ų‚Ø§ØĻŲ…ØŠ {stack} ØšŲ„Ų‰ Ø§Ų„Ų„ŲˆØ­ {board}",
"{user} has unarchived card {card} in list {stack} on board {board}" : "{user} Ų„Ø¯ŲŠŲ‡ Ø¨ØˇØ§Ų‚ØŠ ØēŲŠØą Ų…Ø¤ØąØ´ŲØŠ {card} ؁؊ Ø§Ų„Ų‚Ø§ØĻŲ…ØŠ {stack} ØšŲ„Ų‰ Ø§Ų„Ų„ŲˆØ­ {board}",
"You have marked the card {card} as done in list {stack} on board {board}" : "Ų„Ų‚Ø¯ Ų‚ŲŲ…ØĒ بØĒŲ…ŲŠŲŠØ˛ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ {card} باؚØĒØ¨Ø§ØąŲ‡Ø§ \"Ų…Ų†ØĒŲ‡ŲŠØŠ\" ؁؊ Ø§Ų„Ų‚Ø§ØĻŲ…ØŠ {stack} ØšŲ„Ų‰ Ø§Ų„Ų„ŲˆØ­ {board}",
"{user} has marked card {card} as done in list {stack} on board {board}" : "Ų‚Ø§Ų… Ø§Ų„Ų…ØŗØĒØŽØ¯ŲŲ… {user} بØĒŲ…ŲŠŲŠØ˛ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ {card} باؚØĒØ¨Ø§ØąŲ‡Ø§ \"Ų…Ų†ØĒŲ‡ŲŠØŠ\" ؁؊ Ø§Ų„Ų‚Ø§ØĻŲ…ØŠ {stack} ØšŲ„Ų‰ Ø§Ų„Ų„ŲˆØ­ {board}",
"You have marked the card {card} as undone in list {stack} on board {board}" : "Ų„Ų‚Ø¯ Ų‚ŲŲ…ØĒ بØĒŲ…ŲŠŲŠØ˛ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ {card} باؚØĒØ¨Ø§ØąŲ‡Ø§ \"ØēŲŠØą Ų…Ų†ØĒŲ‡ŲŠØŠ\" ؁؊ Ø§Ų„Ų‚Ø§ØĻŲ…ØŠ {stack} ØšŲ„Ų‰ Ø§Ų„Ų„ŲˆØ­ØŠ {board}",
"{user} has marked the card {card} as undone in list {stack} on board {board}" : "Ų‚Ø§Ų… Ø§Ų„Ų…ØŗØĒØŽØ¯ŲŲ… {user} بØĒŲ…ŲŠŲŠØ˛ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ {card} باؚØĒØ¨Ø§ØąŲ‡Ø§ \"ØēŲŠØą Ų…Ų†ØĒŲ‡ŲŠØŠ\" ؁؊ Ø§Ų„Ų‚Ø§ØĻŲ…ØŠ {stack} ØšŲ„Ų‰ Ø§Ų„Ų„ŲˆØ­ØŠ {board}",
"You have removed the due date of card {card}" : "Ų‚Ų…ØĒ بØĨØ˛Ø§Ų„ØŠ Ø§Ų„ØĒØ§ØąŲŠØŽ Ø§Ų„Ų…Ø­Ø¯Ø¯ Ų…Ų† Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ {card}",
"{user} has removed the due date of card {card}" : "{user} Ų‚Ø§Ų… بØĨØ˛Ø§Ų„ØŠ Ø§Ų„ØĒØ§ØąŲŠØŽ Ø§Ų„Ų…Ø­Ø¯Ø¯ Ų…Ų† Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ {card}",
"You have set the due date of card {card} to {after}" : "Ų‚Ų…ØĒ بØĒØšŲŠŲŠŲ† Ø§Ų„ØĒØ§ØąŲŠØŽ Ø§Ų„Ų…Ø­Ø¯Ø¯ Ų„Ų„Ø¨ØˇØ§Ų‚ØŠ {card} ØĨŲ„Ų‰ {after}",
"{user} has set the due date of card {card} to {after}" : "{user} Ų‚Ø§Ų… بØĒØšŲŠŲŠŲ† Ø§Ų„ØĒØ§ØąŲŠØŽ Ø§Ų„Ų…Ø­Ø¯Ø¯ Ų„Ų„Ø¨ØˇØ§Ų‚ØŠ {card} ØĨŲ„Ų‰ {after}",
"You have updated the due date of card {card} to {after}" : "Ų‚Ų…ØĒ بØĒØ­Ø¯ŲŠØĢ Ø§Ų„ØĒØ§ØąŲŠØŽ Ø§Ų„Ų…Ø­Ø¯Ø¯ Ų„Ų„Ø¨ØˇØ§Ų‚ØŠ {card} ØĨŲ„Ų‰ {after}",
"{user} has updated the due date of card {card} to {after}" : "{user} Ų‚Ø§Ų… بØĒØ­Ø¯ŲŠØĢ Ø§Ų„ØĒØ§ØąŲŠØŽ Ø§Ų„Ų…Ø­Ø¯Ø¯ Ų„Ų„Ø¨ØˇØ§Ų‚ØŠ {card} ØĨŲ„Ų‰ {after}",
"You have added the tag {label} to card {card} in list {stack} on board {board}" : "Ų‚Ų…ØĒ بØĨØļØ§ŲØŠ ŲˆØŗŲ… {label} ØĨŲ„Ų‰ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ {card} ؁؊ Ø§Ų„Ų‚Ø§ØĻŲ…ØŠ {stack} ØšŲ„Ų‰ Ø§Ų„Ų„ŲˆØ­ {board}",
"{user} has added the tag {label} to card {card} in list {stack} on board {board}" : "{user} Ų‚Ø§Ų… بØĨØļØ§ŲØŠ ŲˆØŗŲ… {label} ØĨŲ„Ų‰ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ {card} ؁؊ Ø§Ų„Ų‚Ø§ØĻŲ…ØŠ {stack} ØšŲ„Ų‰ Ø§Ų„Ų„ŲˆØ­ {board}",
"You have removed the tag {label} from card {card} in list {stack} on board {board}" : "Ų‚Ų…ØĒ بØĨØ˛Ø§Ų„ØŠ ŲˆØŗŲ… {label} Ų…Ų† Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ {card} ؁؊ Ø§Ų„Ų‚Ø§ØĻŲ…ØŠ {stack} ØšŲ„Ų‰ Ø§Ų„Ų„ŲˆØ­ {board}",
"{user} has removed the tag {label} from card {card} in list {stack} on board {board}" : "{user} Ų‚Ø§Ų… بØĨØ˛Ø§Ų„ØŠ ŲˆØŗŲ… {label} Ų…Ų† Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ {card} ؁؊ Ø§Ų„Ų‚Ø§ØĻŲ…ØŠ {stack} ØšŲ„Ų‰ Ø§Ų„Ų„ŲˆØ­ {board}",
"You have assigned {assigneduser} to card {card} on board {board}" : "Ų‚Ų…ØĒ بØĒŲƒŲ„ŲŠŲ {assigneduser} ؁؊ Ø¨ØˇØ§Ų‚ØŠ {card} ØšŲ„Ų‰ Ø§Ų„Ų„ŲˆØ­ {board}",
"{user} has assigned {assigneduser} to card {card} on board {board}" : "{user} Ų‚Ø§Ų… بØĒŲƒŲ„ŲŠŲ {assigneduser} ؁؊ Ø¨ØˇØ§Ų‚ØŠ {card} ØšŲ„Ų‰ Ø§Ų„Ų„ŲˆØ­ {board}",
"You have unassigned {assigneduser} from card {card} on board {board}" : "Ų„Ų‚Ø¯ ØĨŲ„Øē؊ØĒ ØĒŲƒŲ„ŲŠŲ {assigneduser} Ų…Ų† Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ {card} ØšŲ„Ų‰ Ø§Ų„Ų„ŲˆØ­ {board}",
"{user} has unassigned {assigneduser} from card {card} on board {board}" : "{user} Ø§Ų„ØēŲ‰ ØĒŲƒŲ„ŲŠŲ {assigneduser} Ų…Ų† Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ {card} ØšŲ„Ų‰ Ø§Ų„Ų„ŲˆØ­ {board}",
"You have moved the card {card} from list {stackBefore} to {stack}" : " Ų‚Ų…ØĒ Ø¨Ų†Ų‚Ų„ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ {card} Ų…Ų† Ø§Ų„Ų‚Ø§ØĻŲ…ØŠ {stackBefore} ØĨŲ„Ų‰ {stack}",
"{user} has moved the card {card} from list {stackBefore} to {stack}" : "{user} Ų‚Ø§Ų… Ø¨Ų†Ų‚Ų„ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ {card} Ų…Ų† Ø§Ų„Ų‚Ø§ØĻŲ…ØŠ {stackBefore} ØĨŲ„Ų‰ {stack}",
"You have added the attachment {attachment} to card {card}" : "Ų‚Ų…ØĒ بØĨØļØ§ŲØŠ Ø§Ų„Ų…ØąŲŲ‚ {attachment} ØĨŲ„Ų‰ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ {card}",
"{user} has added the attachment {attachment} to card {card}" : "{user} Ų‚Ø§Ų… بØĨØļØ§ŲØŠ Ø§Ų„Ų…ØąŲŲ‚ {attachment} ØĨŲ„Ų‰ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ {card}",
"You have updated the attachment {attachment} on card {card}" : "Ų‚Ų…ØĒ بØĒØ­Ø¯ŲŠØĢ Ø§Ų„Ų…ØąŲŲ‚ {attachment} ØšŲ„Ų‰ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ {card}",
"{user} has updated the attachment {attachment} on card {card}" : "{user} Ų‚Ø§Ų… بØĒØ­Ø¯ŲŠØĢ Ø§Ų„Ų…ØąŲŲ‚ {attachment} ØšŲ„Ų‰ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ {card}",
"You have deleted the attachment {attachment} from card {card}" : "Ų‚Ų…ØĒ Ø¨Ø­Ø°Ų Ø§Ų„Ų…ØąŲŲ‚ {attachment} Ų…Ų† Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ {card}",
"{user} has deleted the attachment {attachment} from card {card}" : "{user} Ų‚Ø§Ų… Ø¨Ø­Ø°Ų Ø§Ų„Ų…ØąŲŲ‚ {attachment} Ų…Ų† Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ {card}",
"You have restored the attachment {attachment} to card {card}" : "Ų‚Ų…ØĒ Ø¨Ø§ØŗØĒØąØŦاؚ Ø§Ų„Ų…ØąŲŲ‚ {attachment} ØĨŲ„Ų‰ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ {card}",
"{user} has restored the attachment {attachment} to card {card}" : "{user} Ų‚Ø§Ų… Ø¨Ø§ØŗØĒØąØŦاؚ Ø§Ų„Ų…ØąŲŲ‚ {attachment} ØĨŲ„Ų‰ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ {card}",
"You have commented on card {card}" : "Ų„Ų‚Ø¯ ØšŲ„Ų‚ØĒ ØšŲ„Ų‰ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ {Ø¨ØˇØ§Ų‚ØŠ}",
"{user} has commented on card {card}" : "{Ų…ØŗØĒØŽØ¯Ų…} ØšŲ„Ų‚ ØšŲ„Ų‰ Ø¨ØˇØ§Ų‚ØŠ {Ø¨ØˇØ§Ų‚ØŠ}",
"Deck" : "Deck",
"Changes in the <strong>Deck app</strong>" : "ØĒØēŲŠŲŠØąØ§ØĒ ؁؊ <strong>ØĒØˇØ¨ŲŠŲ‚ Deck</strong> ",
"A <strong>board, list or card</strong> was changed" : "ØĒŲ…Ų‘ ØĒØēŲŠŲŠØą <strong>Ų„ŲˆØ­ØŠ board ØŖŲˆ Ų‚Ø§ØĻŲ…ØŠ list ØŖŲˆ Ø¨ØˇØ§Ų‚ØŠ card </strong>.",
"A <strong>comment</strong> was created on a card" : "<strong>ØĒØšŲ„ŲŠŲ‚</strong> ØĒŲ… ØĨŲ†Ø´Ø§Ø¤Ų‡ ØšŲ„Ų‰ Ø¨ØˇØ§Ų‚ØŠ",
"A <strong>card description</strong> has been changed" : "ØĒŲ…Ų‘ ØĒØēŲŠŲŠØą <strong>؈Øĩ؁ Ø¨ØˇØ§Ų‚ØŠ</strong>.",
"Cards due today" : "Ø§Ų„Ø¨ØˇØ§Ų‚Ø§ØĒ Ø§Ų„Ų…ØŗØĒØ­Ų‚ØŠ Ø§Ų„ŲŠŲˆŲ…",
"Cards due tomorrow" : "Ø§Ų„Ø¨ØˇØ§Ų‚Ø§ØĒ Ø§Ų„Ų…ØŗØĒØ­Ų‚ØŠ ØēØ¯Ø§Ų‹",
"Upcoming cards" : "Ø§Ų„Ø¨ØˇØ§Ų‚Ø§ØĒ Ø§Ų„Ų‚Ø§Ø¯Ų…ØŠ",
"Load more" : "Ø­Ų…Ų‘Ų„ ØŖŲƒØĢØą",
"Personal" : "Ø´ØŽØĩ؊",
"The card \"%s\" on \"%s\" has been assigned to you by %s." : "Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ \"%s\" ØšŲ„Ų‰ \"%s\" ŲƒŲŲ„ŲØĒ Ø¨Ų‡Ø§ Ų…Ų† Ų‚Ø¨Ų„ %s.",
"{user} has assigned the card {deck-card} on {deck-board} to you." : "{user} Ų‚Ø§Ų… بØĒŲƒŲ„ŲŠŲ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ {deck-board} ØšŲ„Ų‰ {deck-board} Ų„Ųƒ",
"The card \"%s\" on \"%s\" has reached its due date." : "؈ØĩŲ„ØĒ Ø¨ØˇØ§Ų‚ØŠ \"%s\" ØšŲ„Ų‰ %s\" Ø§Ų„Ų…ŲˆØšØ¯ Ø§Ų„Ų…Ø­Ø¯Ø¯ ",
"The card {deck-card} on {deck-board} has reached its due date." : "ØĒØŦØ§ŲˆØ˛ØĒ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ {deck-card} ØšŲ„Ų‰ {deck-board} Ø§Ų„ØĒØ§ØąŲŠØŽ Ø§Ų„Ų…Ø­Ø¯Ø¯.",
"%s has mentioned you in a comment on \"%s\"." : "%s ØŖØ´Ø§Øą ØĨŲ„ŲŠŲƒ ؁؊ ØĒØšŲ„ŲŠŲ‚ ØšŲ„Ų‰ \"%s\".",
"{user} has mentioned you in a comment on {deck-card}." : "{user} ØŖØ´Ø§Øą ØĨŲ„ŲŠŲƒ ؁؊ ØĒØšŲ„ŲŠŲ‚ ØšŲ„Ų‰ {deck-card}",
"The board \"%s\" has been shared with you by %s." : "ØĒŲ…ØĒ Ų…Ø´Ø§ØąŲƒØŠ Ø§Ų„Ų„ŲˆØ­ \"%s\" Ų…ØšŲƒ Ų…Ų† Ų‚Ø¨Ų„ %s.",
"{user} has shared {deck-board} with you." : "{user} Ų‚Ø§Ų… Ø¨Ų…Ø´Ø§ØąŲƒØŠ {deck-board} Ų…ØšŲƒ.",
"Deck board" : "ØąŲŲ‚ØšØŠ Ø§Ų„Ų„ŲˆØ­Ø§ØĒ Deck board",
"Owned by %1$s" : "ŲŠŲ…Ų„ŲƒŲ‡Ø§ %1$s",
"Deck boards, cards and comments" : "ØąŲŲ‚ØšØŠ Ø§Ų„Ų„ŲˆØ­Ø§ØĒ ؈ Ø§Ų„Ø¨ØˇØ§Ų‚Ø§ØĒ ؈ Ø§Ų„Ų…Ų„Ø§Ø­Ø¸Ø§ØĒ",
"From %1$s, in %2$s/%3$s, owned by %4$s" : " Ų…Ų† %1$s، ؁؊ %2$s/%3$s، ŲŠŲ…Ų„ŲƒŲ‡Ø§ %4$s",
"Create a new deck card" : "ØĨŲ†Ø´Ø§ØĄ Ø¨ØˇØ§Ų‚ØŠ deck card ØŦØ¯ŲŠØ¯ØŠ",
"Card comments" : "ØĒØšŲ„ŲŠŲ‚Ø§ØĒ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ ",
"%s on %s" : "%s ØšŲ„Ų‰ %s",
"Deck boards and cards" : "ØąŲŲ‚ŲŽØš Ø§Ų„Ų„ŲˆØ­Ø§ØĒ ؈ Ø§Ų„Ø¨ØˇØ§Ų‚Ø§ØĒ",
"No data was provided to create an attachment." : "Ų„Ø§ Ø¨ŲŠØ§Ų†Ø§ØĒ ØĒŲ… ØĒŲ‚Ø¯ŲŠŲ…Ų‡Ø§ Ų„Ø§Ų†Ø´Ø§ØĄ Ų…ØąŲŲ‚",
"Finished" : "Ø§ŲƒØĒŲ…Ų„",
"To review" : "Ų„ØĨؚاد؊ Ø§Ų„Ų…ØąØ§ØŦؚ؊",
"Action needed" : "ŲŠØ­ØĒاØŦ ØĨŲ„Ų‰ ØĨØŦØąØ§ØĄ",
"Later" : "Ų„Ø§Ø­Ų‚Ø§",
"copy" : "Ų†ØŗØŽ",
"To do" : "Ų„ŲØšŲ„Ų‡",
"Doing" : "ØĒØ­ØĒ Ø§Ų„ØšŲ…Ų„",
"Done" : "ØŖŲŲ†ØŦØ˛",
"Example Task 3" : "Ų…ØĢØ§Ų„ Ø§Ų„Ų…Ų‡Ų…ØŠ 3",
"Example Task 2" : "Ų…ØĢØ§Ų„ Ø§Ų„Ų…Ų‡Ų…ØŠ 2",
"Example Task 1" : "Ų…ØĢØ§Ų„ Ø§Ų„Ų…Ų‡Ų…ØŠ 1",
"The file was uploaded" : "ØĒŲ… ØąŲØš Ø§Ų„Ų…Ų„Ų",
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Ø­ØŦŲ… Ø§Ų„Ų…Ų„Ų Ø§Ų„Ų…ØąŲŲˆØš Ų‚Ø¯ ØĒØŦØ§ŲˆØ˛ upload_max_filesize Ø§Ų„Ų…ŲˆØŦŲˆØ¯ØŠ ؁؊ ؅؄؁ php.ini ",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Ø­ØŦŲ… Ø§Ų„Ų…Ų„Ų Ø§Ų„Ø°ŲŠ ØĒØąŲŠØ¯ ØąŲØšŲ‡ ØŖØšŲ„Ų‰ Ų…Ų† Ø§Ų„Ø­Ø¯ Ø§Ų„Ų…ØŗŲ…ŲˆØ­ Ø¨Ų‡ ؁؊ ŲˆØ§ØŦŲ‡ØŠ Ø§Ų„ HTML.",
"The file was only partially uploaded" : "Ø§Ų„Ų…Ų„Ų Ų‚Ø¯ ØąŲŲØš ØŦØ˛ØĄØ§ Ų…Ų†Ų‡ ŲŲ‚Øˇ",
"Finished" : "Ų…ŲƒØĒŲ…Ų„ØŠ",
"copy" : "ØŖŲ†ØŗØŽ",
"Done" : "ØĒŲ…",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Ø­ØŦŲ… Ø§Ų„Ų…Ų„Ų Ø§Ų„Ø°ŲŠ ØĒØąŲŠØ¯ ØĒØąŲŲŠØšŲ‡ ØŖØšŲ„Ų‰ Ų…Ų…Ø§ MAX_FILE_SIZE ŲŠØŗŲ…Ø­ Ø¨Ų‡ ؁؊ ŲˆØ§ØŦŲ‡ØŠ Ø§Ų„ HTML.",
"No file was uploaded" : "Ų„Ų… ؊ØĒŲ… ØąŲØš ØŖŲŠ ؅؄؁",
"Missing a temporary folder" : "Ø§Ų„Ų…ØŦŲ„Ø¯ Ø§Ų„Ų…Ø¤Ų‚ØĒ ØēŲŠØą Ų…ŲˆØŦŲˆØ¯",
"Could not write file to disk" : "Ų„Ų… ŲŠØŗØĒØˇØš ؃ØĒاب؊ ؅؄؁ Ų„Ų„Ų‚ØąØĩ",
"A PHP extension stopped the file upload" : "ØĨØļØ§ŲØŠ Ø§Ų„Ø¨ŲŠ اچ Ø¨ŲŠ PHP ØŖŲˆŲ‚ŲØĒ ØąŲØš Ø§Ų„Ų…Ų„Ų",
"No file uploaded or file size exceeds maximum of %s" : "Ų„Ų… ؊ØĒŲ… ØĒØ­Ų…ŲŠŲ„ ØŖŲŠ ؅؄؁ ØŖŲˆ ØŖŲ† ؊ØĒØŦØ§ŲˆØ˛ Ø­ØŦŲ… Ø§Ų„Ų…Ų„Ų Ø§Ų„Ø­Ø¯ Ø§Ų„ØŖŲ‚ØĩŲ‰ %s",
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : " Ų‡Ø°Ų‡ Ø§Ų„Ų…Ų„Ø§Ø­Ø¸Ø§ØĒ ŲŲŠŲ‡Ø§ ØŖŲƒØĢØą Ų…Ų† %s Ø­ØąŲØ§Ų‹.\n ØĒŲ…Ų‘ØĒ ØĨØļØ§ŲØĒŲ‡Ø§ ŲƒŲ…ŲØąŲŲ‚ ØĨŲ„Ų‰ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ Ø§Ų„ØĒ؊ Ø§ØŗŲ…Ų‡Ø§%s.\n Ø§Ų„Ų…ŲˆØŦŲˆØ¯ØŠ ØšŲ„Ų‰ Ø§Ų„ØąØ§Ø¨Øˇ %s.",
"Card not found" : "Ų„Ų… ؊ØĒŲ… Ø§Ų„ØšØĢŲˆØą ØšŲ„Ų‰ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ ",
"Path is already shared with this card" : "ØĒŲ… Ų…Ø´Ø§ØąŲƒØŠ Ø§Ų„Ų…ØŗØ§Øą Ø¨Ø§Ų„ŲØšŲ„ Ų…Øš Ų‡Ø°Ų‡ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ ",
"Invalid date, date format must be YYYY-MM-DD" : "ØĒØ§ØąŲŠØŽ ØēŲŠØą ØĩØ­ŲŠØ­, ؊ØŦب ØŖŲ† ŲŠŲƒŲˆŲ† ØĒŲ†ØŗŲŠŲ‚ Ø§Ų„ØĒØ§ØąŲŠØŽ YYYY-MM-DD",
"Personal planning and team project organization" : "Ø§Ų„ØĒØŽØˇŲŠØˇ Ø§Ų„Ø´ØŽØĩ؊ ؈ ØĒŲ†Ø¸ŲŠŲ… Ų…Ø´ØąŲˆØš Ø§Ų„ŲØąŲŠŲ‚",
"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 Ų‡Ųˆ ØŖØ¯Ø§ØŠ Ų„ØĒŲ†Ø¸ŲŠŲ… Ø§Ų„Ų…Ų‡Ø§Ų… Ø§Ų„Ø´ØŽØĩŲŠØŠ ؈ Ø§Ų„ØŦŲ…Ø§ØšŲŠØŠ ؁؊ Ų†ŲƒØŗØĒ ŲƒŲ„Ø§ŲˆØ¯ ØšŲ„Ų‰ Ų†Ų…Øˇ \"ØŽØˇŲˆØˇ Ø§Ų„ØĒØĩŲ†ŲŠØš ØŖŲˆ Ø§Ų„ØĒØŦŲ…ŲŠØš ؁؊ Ø§Ų„Ų…ØĩØ§Ų†Øš\" ؈ Ø§Ų„Ų…ØšØąŲˆŲ Ø¨Ų€ kanban.\n\n\n- đŸ“Ĩ ØŖŲƒØĒب Ų…Ų‡Ų…ØĒ؃ Ø§Ųˆ Ų…Ų‡Ų…ØŠ ŲØąŲŠŲ‚Ųƒ ØšŲ„Ų‰ Ø¨ØˇØ§Ų‚ØŠ ؈ ØļØš Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ ؁؊ Ø§Ų„ØąŲ‘ŲŲ‚ØšØŠ ØšŲ„Ų‰ ŲƒØ¯ØŗØŠ Ø§Ų„Ø¨ØˇØ§Ų‚Ø§ØĒ Ų…Ų† ذاØĒ Ø§Ų„ØĒØĩŲ†ŲŠŲ ØŖŲˆ Ø§Ų„Ų…ØąØ­Ų„ØŠ Ų…Ų† Ø§Ų„ØĨŲ†ØŦØ§Ø˛\n- 📄 Ø¯ŲˆŲ‘Ų† Ų…Ų„Ø§Ø­Ø¸Ø§ØĒ؃ Ø§Ų„ØĨØļØ§ŲŲŠØŠ ØšŲ„Ų‰ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ بØĩ؊ØēØŠ Ų…Ø§ØąŲƒØ¯Ø§ŲˆŲ† markdown\n- 🔖 ؈ ŲŠŲ…ŲƒŲ†Ųƒ ØŖŲŠØļØ§Ų‹ ØĨØŗŲ†Ø§Ø¯ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ ØŖŲŠ Ø§Ų„Ų…Ų‡Ų…ØŠ ØĨŲ„Ų‰ Ø´ØŽØĩ ØŖŲˆ ØŖØ´ØŽØ§Øĩ ؁؊ ŲØąŲŠŲ‚Ųƒ\n- đŸ‘Ĩ Ø´Ø§ØąŲƒ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ Ų…Øš Ų…Ų† ØĒØąØēب Ų…Ų† ØŖØšØļØ§ØĄ ŲØąŲŠŲ‚Ųƒ ØŖŲˆ ؚاØĻŲ„ØĒ؃ ØŖŲˆ ØŖØĩØ¯Ų‚Ø§ØĻ؃\n- 📎 ØĨØąŲØ§Ų‚ Ų…Ų„ŲØ§ØĒ ؈ ØĒØļŲ…ŲŠŲ†Ų‡Ø§ بØĩ؊ØēØŠ Ų…Ø§ØąŲƒØ¯Ø§ŲˆŲ† ؁؊ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ\n- đŸ’ŦŲ†Ø§Ų‚Ø´ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ Ų…Øš Ø˛Ų…Ų„Ø§ØĻ؃ ؁؊ ØŽØ§Ų†ØŠ Ø§Ų„Ų…Ų„Ø§Ø­Ø¸Ø§ØĒ\n- ⚡ ØĒابؚ Ų…Ø§ ŲŠŲØŗØĒØŦد Ų…Ų† ØšŲ…Ų„ŲŠØ§ØĒ ؈ ØĒØˇŲˆŲ‘ØąØ§ØĒ ØšŲ„Ų‰ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ ØŖŲˆ Ø§Ų„Ų…Ų‡Ų…ØŠ\n- 🚀 Ø­Ø§ŲØ¸ ØšŲ„Ų‰ Ų…Ø´ØąŲˆØšŲƒ Ų…ŲŲ†ØŗŲ‘Ų‚Ø§Ų‹ Ø¨Ø§ØŗØĒŲ…ØąØ§Øą.",
"Add board" : "ØĨØļØ§ŲØŠ Ų„ŲˆØ­",
"Select the board to link to a project" : "ØĒØ­Ø¯ŲŠØ¯ Ø§Ų„Ų„ŲˆØ­ Ų„ØąØ¨ØˇŲ‡ Ø¨Ų…Ø´ØąŲˆØš",
"Search by board title" : "بحØĢ Ø¨ŲˆØ§ØŗØˇØŠ ØšŲ†ŲˆØ§Ų† Ø§Ų„Ų„ŲˆØ­",
"Select board" : "حدد Ų„ŲˆØ­",
"Move card to another board" : "Ø­ØąŲƒ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ Ø§Ų„Ų‰ Ų„ŲˆØ­ Ø§ØŽØą",
"Select a board" : "حدد Ų„ŲˆØ­",
"No lists available" : "Ų„Ø§ ؊؈ØŦد Ų‚Ø§ØĻŲ…ØŠ Ų…ØĒØ§Ø­Ų‡ ",
"Select a list" : "ا؎ØĒØą Ų‚Ø§ØĻŲ…ØŠ ",
"Move card" : "Ø­ØąŲƒ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ",
"Cancel" : "ØĨŲ„ØēØ§ØĄ",
"Select a card" : "حدد Ø¨ØˇØ§Ų‚ØŠ",
"Select the card to link to a project" : "حدد Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ Ų„ØąØ¨ØˇŲ‡Ø§ Ø¨Ų…Ø´ØąŲˆØš",
"Link to card" : "Ø§ØąØ¨Øˇ Ø¨ØˇØ§Ų‚ØŠ",
"File already exists" : "Ø§Ų„Ų…Ų„Ų Ų…ŲˆØŦŲˆØ¯ Ų…ØŗØ¨Ų‚Ø§Ų‹",
"A file with the name {filename} already exists." : "؅؄؁ Ø¨Ø§ØŗŲ… {Ø§ØŗŲ… Ø§Ų„Ų…Ų„Ų} Ų…ŲˆØŦŲˆØ¯ Ų…ØŗØ¨Ų‚Ų‹Ø§ ",
"Do you want to overwrite it?" : "Ų‡Ų„ ØĒØąŲŠØ¯ ØĒØŦØ§ŲˆØ˛Ų‡ØŸ",
"Overwrite file" : "ØĒØŦØ§ŲˆØ˛ ؅؄؁",
"Keep existing file" : "Ø§Ø¨Ų‚ŲŠ Ø§Ų„Ų…Ų„Ų Ø§Ų„Ų…ŲˆØŦŲˆØ¯",
"This board is read only" : "Ų‡Ø°Ø§ Ø§Ų„Ų„ŲˆØ­ Ø¨ŲˆØļØš Ø§Ų„Ų‚ØąØ§ØĄØŠ ŲŲ‚Øˇ",
"Drop your files to upload" : "Ø§ŲŲ„ØĒ Ø§Ų„Ų…Ų„ŲØ§ØĒ Ų„ØąŲØšŲ‡Ø§",
"Add card" : "ØĨØļØ§ŲØŠ Ø¨ØˇØ§Ų‚ØŠ",
"Archived cards" : "Ø§Ų„Ø¨ØˇØ§Ų‚Ø§ØĒ Ø§Ų„Ų…Ø¤ØąØ´ŲØŠ",
"Add list" : "ØĨØļØ§ŲØŠ Ų‚Ø§ØĻŲ…ØŠ",
"List name" : "Ų‚Ø§Ų…ØŠ Ø§ØŗŲ…Ø§ØĄ",
"Active filters" : "ŲŲ„Ø§ØĒØą Ų†Ø´ØˇØŠ",
"Apply filter" : "ØĒØˇØ¨ŲŠŲ‚ Ø§Ų„ØĒØĩŲŲŠØŠ",
"Filter by tag" : "ØĒØĩŲŲŠØŠ Ø¨ŲˆØ§ØŗØˇØŠ Ø§Ų„ŲˆØŗŲ…",
"Filter by assigned user" : "ØĒØĩŲŲŠØŠ Ø¨ŲˆØ§ØŗØˇØŠ Ø§Ų„Ų…ØŗØĒØŽØ¯Ų… Ø§Ų„Ų…ŲˆŲƒŲ„ Ø§Ų„ŲŠŲ‡",
"Unassigned" : "ØēŲŠØą Ų…ØšŲŠŲŠŲ† ",
"Filter by status" : "؁؄ØĒØąØŠ Ø¨Ø­ØŗØ¨ Ø§Ų„Ø­Ø§Ų„ØŠ",
"Open and completed" : "؅؁ØĒŲˆØ­ØŠ ؈ Ų…Ų†ØŦØ˛ØŠ",
"Open" : "ØĨ؁ØĒØ­",
"Completed" : "Ų…ŲŲƒØĒŲ…Ų„",
"Filter by due date" : "ØĒØĩŲŲŠØŠ Ø¨ŲˆØ§ØŗØˇØŠ ØĒØ§ØąŲŠØŽ Ø§Ų„ØĨŲ†ØŦØ§Ø˛",
"Overdue" : "ØĒØŖØŽØą",
"Next 24 hours" : "Ø§Ų„ 24 ØŗØ§ØšØŠ Ø§Ų„Ų‚Ø§Ø¯Ų…ØŠ",
"Next 7 days" : "Ø§Ų„ 7 ØŖŲŠØ§Ų… Ø§Ų„Ų‚Ø§Ø¯Ų…ØŠ",
"Next 30 days" : "Ø§Ų„ 30 ŲŠŲˆŲ… Ø§Ų„Ų‚Ø§Ø¯Ų…ØŠ",
"No due date" : "Ų„Ø§ ØĒØ§ØąŲŠØŽ ØĨŲ†ØŦØ§Ø˛",
"Clear filter" : "Ø§Ø˛Ų„ Ø§Ų„ØĒØĩŲŲŠØŠ",
"View Modes" : "؈ØļØšŲŠØ§ØĒ Ø§Ų„ØšØąØļ",
"Toggle View Modes" : "Ø§Ų„ØĒØ¨Ø¯ŲŠŲ„ Ø¨ŲŠŲ† ؈ØļØšŲŠØ§ØĒ Ø§Ų„ØšØąØļ",
"Hide archived cards" : "ØĨØŽŲØ§ØĄ Ø§Ų„Ø¨ØˇØ§Ų‚Ø§ØĒ Ø§Ų„Ų…Ø¤ØąØ´ŲØŠ ",
"Show archived cards" : "Ø§Ø¸Ų‡Øą Ø§Ų„Ø¨ØˇØ§Ų‚Ø§ØĒ Ø§Ų„Ų…Ø¤ØąØ´ŲØŠ",
"Toggle compact mode" : "ØĒØ¨Ø¯ŲŠŲ„ Ø§Ų„Ų†Ų…Øˇ Ø§Ų„Ų…ØļØēŲˆØˇ",
"Hide card cover images" : "ØĨØŽŲŲ ØĩŲˆØą ØēŲ„Ø§Ų Ø§Ų„Ø¨ØˇØ§Ų‚Ø§ØĒ",
"Show card cover images" : "ØŖØ¸Ų‡ŲØą ØĩŲˆØą ØēŲ„Ø§Ų Ø§Ų„Ø¨ØˇØ§Ų‚Ø§ØĒ",
"Open details" : "Ø§ŲØĒØ­ Ø§Ų„ØĒŲØ§ØĩŲŠŲ„",
"Details" : "Ø§Ų„ØĒŲØ§ØĩŲŠŲ„",
"Currently present people" : "ØŖØ´ØŽØ§Øĩ Ų…ØšØąŲˆØļŲˆŲ† Ø­Ø§Ų„ŲŠŲ‘Ø§Ų‹",
"Loading board" : "ØŦØ§ØąŲ ØĒØ­Ų…ŲŠŲ„ Ø§Ų„Ų„ŲˆØ­..",
"Board not found" : "Ø§Ų„Ų„ŲˆØ­ ØēŲŠØą Ų…ŲˆØŦŲˆØ¯",
"Create a new list to add cards to this board" : "ØĨŲ†Ø´Ø§ØĄ Ų‚Ø§ØĻŲ…ØŠ ØŦØ¯ŲŠØ¯ØŠ Ų„ØĨØļØ§ŲØŠ Ø§Ų„Ø¨ØˇØ§Ų‚Ø§ØĒ ØšŲ„Ų‰ Ų‡Ø°Ø§ Ø§Ų„Ų„ŲˆØ­",
"Sharing" : "Ø§Ų„Ų…Ø´Ø§ØąŲƒØŠ",
"Tags" : "Ø§Ų„ŲˆØŗŲˆŲ…",
"Deleted items" : "Ø§Ų„ØšŲ†Ø§ØĩØą Ø§Ų„Ų…Ų…ØŗŲˆØ­ØŠ",
"Activity" : "Ø§Ų„Ų†Ø´Ø§Øˇ",
"Deleted lists" : "Ø§Ų„Ų‚ŲˆØ§ØĻŲ… Ø§Ų„Ų…Ø­Ø°ŲˆŲØŠ",
"Timeline" : "Ø§Ų„ØŽŲŠØˇ Ø§Ų„Ø˛Ų…Ų†ŲŠ",
"Undo" : "ØĒØąØ§ØŦØš",
"Deleted cards" : "Ø§Ų„Ø¨ØˇØ§Ų‚Ø§ØĒ Ø§Ų„Ų…Ø­Ø°ŲˆŲØŠ",
"Share board with a user, group or team â€Ļ" : "Ų…Ø´Ø§ØąŲƒØŠ Ø§Ų„Ų„ŲˆØ­ØŠ Ų…Øš Ų…ØŗØĒØŽØ¯ŲŲ… Ø§Ųˆ Ų…ØŦŲ…ŲˆØšØŠ ØŖŲˆ ŲØąŲŠŲ‚ ...",
"Searching for users, groups and teams â€Ļ" : "Ø§Ų„Ø¨Ø­ØĢ ØšŲ† Ų…ØŗØĒØŽØ¯ŲŲ…ŲŠŲ†ØŒ ØŖŲˆ Ų…ØŦŲ…ŲˆØšØ§ØĒ، ØŖŲˆ ŲŲØąŲŽŲ‚",
"No participants found" : "Ų„Ų… ؊ØĒŲ… Ø§Ų„ØšØĢŲˆØą ØšŲ„Ų‰ Ų…Ø´Ø§ØąŲƒŲŠŲ†",
"Board owner" : "Ų…Ų†Ø´ØĻ Ø§Ų„Ų„ŲˆØ­",
"(Group)" : "(Ų…ØŦŲ…ŲˆØšØŠ)",
"(Team)" : "(Ø§Ų„ŲØąŲŠŲ‚)",
"Can edit" : "ŲŠŲ…ŲƒŲ† ØĒØšØ¯ŲŠŲ„Ų‡",
"Can share" : "ŲŠŲ…ŲƒŲ† Ų…Ø´Ø§ØąŲƒØĒŲ‡",
"Can manage" : "ŲŠŲ…ŲƒŲ† ØĨØ¯Ø§ØąØĒŲ‡",
"Owner" : "Ø§Ų„Ų…Ø§Ų„Ųƒ",
"Can edit" : "ŲŠŲ…ŲƒŲ†Ų‡ Ø§Ų„ØĒØēŲŠŲŠØą",
"Can share" : "Can share",
"Delete" : "Ø­Ø°Ų ",
"Failed to create share with {displayName}" : "ŲØ´Ų„ ؁؊ ØĨŲ†Ø´Ø§ØĄ Ø§Ų„Ų…Ø´Ø§ØąŲƒØŠ Ų…Øš {displayName}",
"Are you sure you want to transfer the board {title} to {user}?" : "Ų‡Ų„ ØŖŲ†ØĒ Ų…ØĒØŖŲƒØ¯ ØŖŲ†Ųƒ ØĒØąŲŠØ¯ Ų†Ų‚Ų„ Ø§Ų„Ų„ŲˆØ­ØŠ {title} ØĨŲ„Ų‰ {user} ؟",
"Transfer the board." : "Ų†Ų‚Ų„ Ø§Ų„Ų„ŲˆØ­ØŠ.",
"Transfer" : "Ų†Ų‚Ų„",
"The board has been transferred to {user}" : "ØĒŲ…Ų‘ Ų†Ų‚Ų„ Ø§Ų„Ų„ŲˆØ­ØŠ ØĨŲ„Ų‰ {user}",
"Failed to transfer the board to {user}" : "ØĒØšØ°Ų‘Øą Ų†Ų‚Ų„ Ø§Ų„Ų„ŲˆØ­ØŠ ØĨŲ„Ų‰ {user}",
"Edit list title" : "ØšØ¯Ų‘Ų„ Ø§ØŗŲ… Ø§Ų„Ų‚Ø§ØĻŲ…ØŠ",
"Archive all cards" : "ØŖØąØ´ŲØŠ ØŦŲ…ŲŠØš Ø§Ų„Ø¨ØˇØ§Ų‚Ø§ØĒ ",
"Unarchive all cards" : "ØĒØąØ§ØŦØš ØšŲ† ØŖØąØ´ŲØŠ ŲƒŲ„ Ø§Ų„Ø¨ØˇØ§Ų‚Ø§ØĒ",
"Delete list" : "Ø­Ø°Ų Ø§Ų„Ų‚Ø§ØĻŲ…ØŠ",
"Archive all cards in this list" : "ØŖØąØ´ŲØŠ ØŦŲ…ŲŠØš Ø§Ų„Ø¨ØˇØ§Ų‚Ø§ØĒ ؁؊ Ø§Ų„Ų‚Ø§ØĻŲ…ØŠ ",
"Unarchive all cards in this list" : "ØĒØąØ§ØŦØš ØšŲ† ØŖØąØ´ŲØŠ ŲƒŲ„ Ø§Ų„Ø¨ØˇØ§Ų‚Ø§ØĒ ؁؊ Ų‡Ø°Ų‡ Ø§Ų„Ų‚Ø§ØĻŲ…ØŠ",
"Add a new card" : "ØĨØļØ§ŲØŠ Ø¨ØˇØ§Ų‚ØŠ ØŦØ¯ŲŠØ¯ØŠ",
"Card name" : "Ø§ØŗŲ… Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ ",
"List deleted" : "Ø§Ų„Ų‚Ø§ØĻŲ…ØŠ Ø­ŲŒØ°ŲØĒ ",
"Edit" : "ØĒØšØ¯ŲŠŲ„",
"Add a new tag" : "ØĨØļØ§ŲØŠ ŲˆØŗŲ… ØŦØ¯ŲŠØ¯",
"title and color value must be provided" : "Ø§Ų„ØšŲ†ŲˆØ§Ų† ؈ Ų‚ŲŠŲ…ØŠ Ø§Ų„Ų„ŲˆŲ† ؊ØŦب ØĒŲ‚Ø¯ŲŠŲ…Ų‡Ø§ ",
"Board name" : "Ø§ØŗŲ… Ø§Ų„Ų„ŲˆØ­",
"Members" : "Ø§Ų„Ø§ØšØļØ§ØĄ",
"Assign to users/groups/team" : "ØĨØŗŲ†Ø§Ø¯ ØĨŲ„Ų‰ Ų…ØŗØĒØŽØ¯ŲŲ…ŲŠŲ†/Ų…ØŦŲ…ŲˆØšØ§ØĒ/ŲŲØąŲŽŲ‚",
"Assign a user to this cardâ€Ļ" : "Ø§Ų†ØŗØ¨ Ų…ØŗØĒØŽØ¯Ų… Ø§Ų„Ų‰ Ų‡Ø°Ų‡ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ..",
"Select a user to assign to this cardâ€Ļ" : "Ø­Ø¯Ų‘ŲØ¯ Ų…ØŗØĒØŽØ¯ŲŲ…Ø§Ų‹ Ų„ŲŠØĒŲ… ØĨØŗŲ†Ø§Ø¯ Ų‡Ø°Ų‡ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ Ų„Ų‡...",
"Upload new files" : "ØąŲØš Ų…Ų„ŲØ§ØĒ ØŦØ¯ŲŠØ¯ØŠ",
"Share from Files" : "Ų…Ø´Ø§ØąŲƒØŠ Ų…Ų† Ø§Ų„Ų…Ų„ŲØ§ØĒ",
"Pending share" : "Ų…Ø´Ø§ØąŲƒØŠ Ų…ŲØšŲ„Ų‘Ų‚ØŠ",
"Add this attachment" : "ØĨØļØ§ŲØŠ Ų‡Ø°Ø§ Ø§Ų„Ų…ØąŲŲ‚",
"Show in Files" : "ØšØąØļ ؁؊ Ø§Ų„Ų…Ų„ŲØ§ØĒ ",
"Download" : "ØĒŲ†Ø˛ŲŠŲ„",
"Remove attachment" : "Ø­Ø°Ų Ø§Ų„Ų…ŲØąŲŲ‚",
"Delete Attachment" : "Ų…ØŗØ­ Ø§Ų„Ų…ØąŲŲ‚",
"Restore Attachment" : "ØĨØŗØĒؚاد؊ Ø§Ų„Ų…ØąŲŲ‚",
"File to share" : "؅؄؁ Ų„Ų„Ų…Ø´Ø§ØąŲƒØŠ",
"Invalid path selected" : "ØĒŲ… ØĒØ­Ø¯ŲŠØ¯ Ų…ØŗØ§Øą ØēŲŠØą ØĩØ­ŲŠØ­",
"Open in sidebar view" : "؁ØĒØ­ ؁؊ Ø§Ų„Ø´ØąŲŠØˇ Ø§Ų„ØŦØ§Ų†Ø¨ŲŠ ",
"Open in bigger view" : "؁ØĒØ­ ؁؊ Ų†Ø§ŲØ°ØŠ ØŖŲƒØ¨Øą ",
"Description" : "Ø§Ų„ŲˆØĩ؁",
"Attachments" : "Ø§Ų„Ų…ØąŲŲ‚Ø§ØĒ",
"Comments" : "ØĒØšŲ„ŲŠŲ‚Ø§ØĒ",
"Modified" : "ØšŲØ¯Ų„",
"Created" : "ØŖŲŲ†Ø´ØĻ",
"The title cannot be empty." : "Ų„Ø§ ŲŠŲ…ŲƒŲ† ØĒØąŲƒ Ø§Ų„ØšŲ†ŲˆØ§Ų† ŲØ§ØąØēŲ‹Ø§.",
"No comments yet. Begin the discussion!" : "Ų„Ø§ ؊؈ØŦد ØĒØšŲ„ŲŠŲ‚Ø§ØĒ بؚد, Ø§Ø¨Ø¯ØŖ Ø§Ų„Ų†Ų‚Ø§Ø´ Ø§Ų„ØĸŲ†!",
"Failed to load comments" : "ŲØ´Ų„ ؁؊ ØĒØ­Ų…ŲŠŲ„ Ø§Ų„ØĒØšŲ„ŲŠŲ‚Ø§ØĒ ",
"Modified" : "ØĸØŽØą ØĒØšØ¯ŲŠŲ„",
"Upload attachment" : "ØąŲØš Ø§Ų„Ų…ØąŲŲ‚Ø§ØĒ",
"Save" : "Ø­ŲØ¸",
"The comment cannot be empty." : "Ø§Ų„ØĒØšŲ„ŲŠŲ‚ Ų„Ø§ŲŠŲ…ŲƒŲ† Ø§Ų† ŲŠŲƒŲˆŲ† ŲØ§ØąØēا.",
"The comment cannot be longer than 1000 characters." : "Ø§Ų„ØĒØšŲ„ŲŠŲ‚ Ų„Ø§ ŲŠŲ…ŲƒŲ† Ø§Ų† ŲŠŲƒŲˆŲ† Ø§ØˇŲˆŲ„ Ų…Ų† 1000 Ø­ØąŲ.",
"In reply to" : "ŲŠŲ‚ŲˆŲ… Ø¨Ø§Ų„ØąØ¯ ØšŲ„Ų‰",
"Cancel reply" : "ØĨŲ„ØēØ§ØĄ Ø§Ų„ØąØ¯",
"Reply" : "ØąØ¯",
"Update" : "ØĒØ­Ø¯ŲŠØĢ",
"Created:" : "ØĒØ§ØąŲŠØŽ Ø§Ų„ØĨŲ†Ø´Ø§ØĄ :",
"Description" : "Ø§Ų„ŲˆØĩ؁",
"(Unsaved)" : "(ØēŲŠØą Ų…Ø­ŲŲˆØ¸)",
"(Savingâ€Ļ)" : "(ŲŠŲØ­ŲØ¸..)",
"Formatting help" : "Ų…ØŗØ§ØšØ¯ØŠ Ø§Ų„ØĒŲ†ØŗŲŠŲ‚",
"Edit description" : "ØĒØšØ¯ŲŠŲ„ Ø§Ų„ŲˆØĩ؁",
"View description" : "ØĨØ¸Ų‡Ø§Øą Ø§Ų„ŲˆØĩ؁",
"Add Attachment" : "ØŖØļ؁ Ų…Ų„Ø­Ų‚",
"Write a description â€Ļ" : "؃ØĒاب؊ ؈Øĩ؁...",
"Choose attachment" : "ا؎ØĒŲŠØ§Øą Ų…ØąŲŲ‚",
"Assign a due date to this cardâ€Ļ" : "ØĒØšŲŠŲŠŲ† ØĒØ§ØąŲŠØŽ Ø§ØŗØĒØ­Ų‚Ø§Ų‚ Ų„Ų‡Ø°Ų‡ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ...",
"Set a due date" : "ØĒØšŲŠŲŠŲ† ØĒØ§ØąŲŠØŽ Ø§Ų„Ø§Ų†ØŦØ§Ø˛",
"Add due date" : "ØŖØļؐ؁ ØĒØ§ØąŲŠØŽ Ø§Ų„Ø§ØŗØĒØ­Ų‚Ø§Ų‚",
"Choose a date" : "ØĨØŽØĒŲŽØą ØĒØ§ØąŲŠØŽØ§Ų‹",
"Remove due date" : "Ø§Ø˛Ø§Ų„ØŠ ØĒØ§ØąŲŠØŽ Ø§Ų„Ø§Ų†ØŦØ§Ø˛",
"Mark as done" : "ØĒŲ…ŲŠŲŠØ˛ ŲƒŲ…ŲŲ†ØŦŲŽØ˛",
"Due at:" : "ØĒØ§ØąŲŠØŽ Ø§Ų„Ø§ØŗØĒØ­Ų‚Ø§Ų‚:",
"Not done" : "ØēŲŠØą Ų…ŲŲ†ØŦŲŽØ˛ØŠ",
"Unarchive card" : "ØĨŲ„ØēØ§ØĄ ØŖØąØ´ŲØŠ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ ",
"Archive card" : "ØŖØąØ´ŲØŠ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ",
"Select Date" : "ا؎ØĒØą Ø§Ų„ØĒØ§ØąŲŠØŽ ",
"Set due date for later today" : "ØšŲŠŲ‘ŲŲ† ØĸØŽŲØąŲŽ Ų‡Ø°Ø§ Ø§Ų„ŲŠŲˆŲ… ŲƒŲ…ŲˆØšØ¯Ų Ų„Ø§ØŗØĒØ­Ų‚Ø§Ų‚ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ",
"Set due date for tomorrow" : "ØšŲŠŲ‘ŲŲ† ŲŠŲˆŲ… Ø§Ų„Øēد ŲƒŲ…ŲˆØšØ¯Ų Ų„Ø§ØŗØĒØ­Ų‚Ø§Ų‚ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ",
"Set due date for this weekend" : "ØšŲŠŲ‘ŲŲ† Ų†Ų‡Ø§ŲŠØŠ Ų‡Ø°Ø§ Ø§Ų„ØŖØŗØ¨ŲˆØš ŲƒŲ…ŲˆØšØ¯Ų Ų„Ø§ØŗØĒØ­Ų‚Ø§Ų‚ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ",
"Set due date for next week" : "ØšŲŠŲ‘ŲŲ† Ø§Ų„ØŖØŗØ¨ŲˆØš Ø§Ų„Ų…ŲŲ‚Ø¨Ų„ ŲƒŲ…ŲˆØšØ¯Ų Ų„Ø§ØŗØĒØ­Ų‚Ø§Ų‚ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ",
"Assign a tag to this cardâ€Ļ" : "Ø§Ų†ØŗØ¨ ŲˆØŗŲ… Ø§Ų„Ų‰ Ų‡Ø°Ų‡ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ..",
"Select or create a tagâ€Ļ" : "ØĨØŽØĒŲŽØą ØŖŲˆ ØŖŲ†Ø´ŲØĻŲ’ ŲˆØŗŲ…Ø§Ų‹ ...",
"Create a new tag:" : "ØĨŲ†Ø´Ø§ØĄ ØŗŲŲ…ŲŽØŠŲ tag ØŦØ¯ŲŠØ¯ØŠ:",
"(group)" : "(Ų…ØŦŲ…ŲˆØšØŠ)",
"Next week – {timeLocale}" : "Ø§Ų„ØŖØŗØ¨ŲˆØš Ø§Ų„Ų‚Ø§Ø¯Ų… – {timeLocale}",
"Todo items" : "Ų‚Ø§ØĻŲ…ØŠ Ø§Ų„Ų…Ų‡Ø§Ų…",
"{count} comments, {unread} unread" : "{ؚدد} Ø§Ų„ØĒØšŲ„ŲŠŲ‚Ø§ØĒ، {ØēŲŠØą Ų…Ų‚ØąŲˆØĄØŠ} ØēŲŠØą Ų…Ų‚ØąŲˆØĄØŠ",
"Edit card title" : "ØĒØšØ¯ŲŠŲ„ Ø§ØŗŲ… Ø§Ų„Ų‚Ø§ØĻŲ…ØŠ",
"Card details" : "ØĒŲØ§ØĩŲŠŲ„ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ",
"Assign to me" : "ŲŠŲ†ØŗØ¨ Ų„ŲŠ",
"Unassign myself" : "ØĨŲ„ØēØ§ØĄ ØĒØšŲŠŲŠŲ†ŲŠ ",
"Mark as not done" : "ØĒŲ…ŲŠŲŠØ˛ ŲƒŲ€ \"ØēŲŠØą Ų…Ų†ØĒŲ‡Ų\"",
"Delete card" : "Ø­Ø°Ų Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ",
"Card deleted" : "Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ Ø­ŲŒØ°ŲØĒ ",
"seconds ago" : "ØĢŲˆØ§Ų†Ų Ų…ØļØĒ",
"Keyboard shortcuts" : "ØĨØŽØĒØĩØ§ØąØ§ØĒ Ų„ŲˆØ­ØŠ Ø§Ų„Ų…ŲØ§ØĒŲŠØ­",
"Boost your productivity using Deck with keyboard shortcuts." : "ØļØ§ØšŲŲ ØĨŲ†ØĒاØŦ؊ØĒ؃ Ø¨Ø§ØŗØĒØšŲ…Ø§Ų„ \"ØąŲØ˛ŲŽŲ… Ø§Ų„Ø¨ØˇØ§Ų‚Ø§ØĒ\" Deck، ؈ ا؎ØĒØĩØ§ØąØ§ØĒ Ų„ŲˆØ­ØŠ Ø§Ų„Ų…ŲØ§ØĒŲŠØ­ ",
"Board actions" : "ØĨØŦØąØ§ØĄØ§ØĒ Ø§Ų„Ų„ŲˆØ­ØŠ",
"Keyboard shortcut" : "ØĨØŽØĒØĩØ§Øą Ų„ŲˆØ­ØŠ Ø§Ų„Ų…ŲØ§ØĒŲŠØ­",
"Action" : "Ø§Ų„ØĨØŦØąØ§ØĄ",
"Shift" : "Ø§Ų„ØšØ§Ų„ŲŠ shift",
"Scroll" : "ØĒØ­ØąŲŠŲƒ",
"Scroll sideways" : "ØĒØ­ØąŲŠŲƒ Ų„Ų„ØŦŲ†Ø¨",
"Navigate between cards" : "Ø§Ų„ØĒŲ†Ų‚Ų‘ŲŲ„ Ø¨ŲŠŲ† Ø§Ų„Ø¨ØˇØ§Ų‚Ø§ØĒ",
"Esc" : "ØŽØąŲˆØŦ",
"Close card details" : "ØŖØē؄ؐ؂ ØĒŲØ§ØĩŲŠŲ„ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ",
"Ctrl" : "ØĒØ­ŲƒŲ… Ctrl",
"Search" : "بحØĢ",
"Show card filters" : "ØŖØ¸Ų‡ŲØą ŲŲ„Ø§ØĒØą Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ",
"Clear card filters" : "ØĨŲ…Ø­Ų ŲŲ„Ø§ØĒØą Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ",
"Show help dialog" : "ØŖØ¸Ų‡ŲØą Ų†Ø§ŲØ°ØŠ Ø­ŲˆØ§Øą Ø§Ų„Ų…ØŗØ§ØšØ¯ØŠ",
"Card actions" : "ØĨØŦØąØ§ØĄØ§ØĒ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ",
"The following actions can be triggered on the currently highlighted card" : "Ø§Ų„ØĨØŦØąØ§ØĄØ§ØĒ Ø§Ų„ØĒØ§Ų„ŲŠØŠ ŲŠŲ…ŲƒŲ† ØĒŲ†ŲŲŠØ°Ų‡Ø§ ØšŲ„Ų‰ Ø§Ų„Ø¨ØˇØ§Ų‚Ø§ØĒ Ø§Ų„Ų…ŲØšŲ„Ų‘Ų…ØŠ Ø­Ø§Ų„ŲŠØ§Ų‹",
"Enter" : "ØĨØ¯ØŽØ§Ų„",
"Space" : "Ø§Ų„Ų…Ø¯Ų‰",
"Open card details" : "ØĨ؁ØĒŲŽØ­ ØĒŲØ§ØĩŲŠŲ„ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ",
"Edit the card title" : "ØšØ¯Ų‘ŲŲ„ ØšŲ†ŲˆØ§Ų† Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ",
"Assign yourself to the current card" : "ØŖØŗŲ†ŲØ¯ Ų‡Ø°Ų‡ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ ØĨŲ„Ų‰ Ų†ŲØŗŲŲƒ",
"Archive/unarchive the current card" : "ØŖØąØ´ŲŲ ØŖŲˆ ØŖŲ„Øēؐ ØĒØąØ´ŲŠŲ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ Ø§Ų„Ø­Ø§Ų„ŲŠØŠ",
"Mark card as completed/not completed" : "ØšŲ„Ų‘ŲŲ… Ø¨ØˇØ§Ų‚ØŠ ŲƒŲ€\"Ų…Ų†ØŦØ˛ØŠ\" ØŖŲˆ \"ØēŲŠØą Ų…Ų†ØŦØ˛ØŠ\"",
"Open card menu" : "ØĨ؁ØĒŲŽØ­ Ų‚Ø§ØĻŲ…ØŠ Ø§Ų„Ø¨ØˇØ§Ų‚Ø§ØĒ",
"All boards" : "ØŦŲ…ŲŠØš Ø§Ų„Ø§Ų„ŲˆØ§Ø­",
"Archived boards" : "Ø§Ų„Ø§Ų„ŲˆØ§Ø­ Ø§Ų„Ų…Ø¤ØąØ´ŲØŠ",
"Shared with you" : "ØĒŲ… Ų…Ø´Ø§ØąŲƒØĒŲ‡Ø§ Ų…ØšŲƒ",
"Deck settings" : "ØĨؚداداØĒ ØąŲØ˛ŲŽŲ…Ų Ø§Ų„Ø¨ØˇØ§Ų‚Ø§ØĒ",
"Use bigger card view" : "Ø§ØŗØĒØŽØ¯Ø§Ų… Ø¨ØˇØ§Ų‚ØŠ ØšØąØļ ØŖŲƒØ¨Øą ",
"Show card ID badge" : "ØŖØšØąØļ Ø´Ø§ØąØŠ ØąŲ‚Ų… Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ",
"Show boards in calendar/tasks" : "ØĨØ¸Ų‡Ø§Øą Ø§Ų„Ų„ŲˆØ­ ؁؊ Ø§Ų„ØĒŲ‚ŲˆŲŠŲ…/Ø§Ų„Ų…Ų‡Ø§Ų…",
"Limit board creation to some groups" : "Ų‚ŲŽØĩŲ’ØąŲ Ø­ŲŽŲ‚Ų‘Ų ØĨŲ†Ø´Ø§ØĄ Ø§Ų„ØŖŲ„ŲˆØ§Ø­ ØšŲ„Ų‰ بؚØļ Ø§Ų„Ų…ØŦŲ…ŲˆØšØ§ØĒ ",
"Users outside of those groups will not be able to create their own boards, but will still be able to work on boards that have been shared with them." : "Ø§Ų„Ų…ØŗØĒØŽØ¯ŲŲ…ŲˆŲ† Ų…Ų† ØŽØ§ØąØŦ ØĒŲ„Ųƒ Ø§Ų„Ų…ØŦŲ…ŲˆØšØ§ØĒ Ų„Ų† ŲŠŲ…ŲƒŲ†ŲƒŲ… ØĨŲ†Ø´Ø§ØĄ Ų„ŲˆØ­Ø§ØĒŲ‡Ų… Ø§Ų„ØŽØ§ØĩØŠØ› Ų„ŲƒŲ† ŲŠŲ…ŲƒŲ†Ų‡Ų… Ø§Ų„ØšŲ…Ų„ ØšŲ„Ų‰ Ø§Ų„Ų„ŲˆØ­Ø§ØĒ Ø§Ų„ØĒ؊ ØĒØĒŲ…Ų‘ Ų…Ø´Ø§ØąŲƒØĒŲ‡Ø§ Ų…ØšŲ‡Ų….",
"Board details" : "ØĒŲØ§ØĩŲŠŲ„ Ų„ŲˆØ­",
"Edit board" : "ØĒØšØ¯ŲŠŲ„ Ø§Ų„Ų„ŲˆØ­",
"Clone board" : "Ø§ØŗØĒŲ†ØŗØŽ Ø§Ų„Ų„ŲˆØ­",
"Unarchive board" : "ØĨŲ„ØēØ§ØĄ ØŖØąØ´ŲØŠ Ø§Ų„Ų„ŲˆØ­",
"Archive board" : "ØŖØąØ´ŲØŠ Ø§Ų„Ų„ŲˆØ­ ",
"Export board" : "ØĒØĩØ¯ŲŠØą Ø§Ų„Ų„ŲˆØ­ØŠ",
"Turn on due date reminders" : "ØĒŲØšŲŠŲ„ Ø§Ų„ØĒØ°ŲƒŲŠØąØ§ØĒ Ų„Ų„Ų…ŲˆØšØ¯ Ø§Ų„Ų…Ø­Ø¯Ø¯ ",
"Turn off due date reminders" : "ØĨŲŠŲ‚Ø§Ų ØĒØ´ØēŲŠŲ„ Ø§Ų„ØĒØ°ŲƒŲŠØąØ§ØĒ Ų„Ų„Ų…ŲˆØšØ¯ Ø§Ų„Ų…Ø­Ø¯Ø¯Ø¯",
"Due date reminders" : "ØĒØ°ŲƒŲŠØąØ§ØĒ Ø§Ų„Ų…ŲˆØšØ¯ Ø§Ų„Ų…Ø­Ø¯Ø¯ ",
"All cards" : "ØŦŲ…ŲŠØš Ø§Ų„Ø¨ØˇØ§Ų‚Ø§ØĒ ",
"Assigned cards" : "Ø§Ų„Ø¨ØˇØ§Ų‚Ø§ØĒ Ø§Ų„Ų…ØŽØĩØĩØŠ",
"No notifications" : "Ų„Ø§ ØĒ؈ØŦد ØĨØ´ØšØ§ØąØ§ØĒ",
"Delete board" : "Ų…ØŗØ­ Ø§Ų„Ų„ŲˆØ­",
"Board {0} deleted" : "Ø§Ų„Ų„ŲˆØ­ {0} ØĒŲ… Ų…ØŗØ­Ų‡",
"Only assigned cards" : "Ø§Ų„Ø¨ØˇØ§Ų‚Ø§ØĒ Ø§Ų„Ų…ØŽØĩØĩØŠ ŲŲ‚Øˇ",
"No reminder" : "Ų„Ø§ ؊؈ØŦد ØĒØ°ŲƒŲŠØą ",
"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}؟ Ų‡Ø°Ø§ ØŗŲŠØ¤Ø¯ŲŠ ØĨŲ„Ų‰ Ø­Ø°Ų ŲƒŲ„ Ø¨ŲŠØ§Ų†Ø§ØĒ Ų‡Ø°Ų‡ Ø§Ų„Ų„ŲˆØ­ØŠ Ø¨Ų…Ø§ ؁؊ Ø°Ų„Ųƒ Ø§Ų„Ø¨ØˇØ§Ų‚Ø§ØĒ Ø§Ų„Ų…Ø¤ØąØ´ŲØŠ.",
"Delete the board?" : "Ų…ØŗØ­ Ø§Ų„Ų„ŲˆØ­ØŸ",
"Loading filtered view" : "ØŦØ§ØąŲ ØĒØ­Ų…ŲŠŲ„ Ø§Ų„ØĒØĩŲŲŠØŠ ",
"Today" : "Ø§Ų„ŲŠŲˆŲ…",
"Tomorrow" : "Øēدا",
"No due" : "ØēŲŠØą Ų…Ø­Ø¯Ø¯",
"Search for {searchQuery} in all boards" : "Ø§Ų„Ø¨Ø­ØĢ ØšŲ† {searchQuery} ؁؊ ØŦŲ…ŲŠØš Ø§Ų„Ų„ŲˆØ­",
"No results found" : "Ų„Ø§ ؊ØĒŲ… Ø§Ų„ØšØĢŲˆØą ØšŲ„Ų‰ ØŖŲŠ Ų†ØĒاØĻØŦ ",
"This weekend – {timeLocale}" : "Ų†Ų‡Ø§ŲŠØŠ Ų‡Ø°Ø§ Ø§Ų„ØŖØŗØ¨ŲˆØš – {timeLocale}",
"Deck board {name}\n* Last modified on {lastMod}" : "Ø§ØŗŲ… Ø§Ų„Ų„ŲˆØ­ØŠ {name} \n* ØĸØŽØą ØĒØšØ¯ŲŠŲ„ Ų„Ų‡Ø§ ؁؊ {lastMod}",
"{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} Ų…ŲŲ„Ø§Ø­Ø¸Ø§ØĒ",
"{nbCards} cards" : "{nbCards} Ø¨ØˇØ§Ų‚Ø§ØĒ",
"Click to expand comment" : "ØĨØļØēØˇ Ų„Ų„ØĒŲˆØŗØš ؁؊ Ø§Ų„Ų…Ų„Ø§Ø­Ø¸Ø§ØĒ",
"Create a new card" : "ØŖŲ†Ø´Ų‰ Ø¨ØˇØ§Ų‚ØŠ ØŦØ¯ŲŠØ¯ØŠ ",
"Card title" : "ØšŲ†ŲˆØ§Ų† Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ ",
"Create card" : "ØŖŲ†Ø´Ų‰ Ø¨ØˇØ§Ų‚ØŠ ",
"Creating the new card â€Ļ" : "ØŖŲ†Ø´Ų‰ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ Ø§Ų„ØŦØ¯ŲŠØ¯ØŠ ",
"Card \"{card}\" was added to \"{board}\"" : "\"{Ø¨ØˇØ§Ų‚ØŠ}\" ØĒŲ…ØĒ ØĨØļØ§ŲØĒŲ‡Ø§ ؁؊ \"{Ø§Ų„Ų„ŲˆØ­}\"",
"Open card" : "؁ØĒØ­ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ ",
"Close" : "ØĨØēŲ„Ø§Ų‚",
"No upcoming cards" : "Ų„Ø§ ؊؈ØŦد Ø¨ØˇØ§Ų‚Ø§ØĒ Ų‚Ø§Ø¯Ų…ØŠ ",
"upcoming cards today" : "Ø§Ų„Ø¨ØˇØ§Ų‚Ø§ØĒ Ø§Ų„Ų‚Ø§Ø¯Ų…ØŠ Ø§Ų„ŲŠŲˆŲ…ŲŽ",
"upcoming cards tomorrow" : "Ø§Ų„Ø¨ØˇØ§Ų‚Ø§ØĒ Ø§Ų„Ų‚Ø§Ø¯Ų…ØŠ ØēØ¯Ø§Ų‹",
"upcoming cards" : "Ø§Ų„Ø¨ØˇØ§Ų‚Ø§ØĒ Ø§Ų„Ų‚Ø§Ø¯Ų…ØŠ",
"New card" : "Ø¨ØˇØ§Ų‚ØŠ ØŦØ¯ŲŠØ¯ØŠ",
"Due on {date}" : "Ų…ØˇŲ„ŲˆØ¨ ؁؊ {date}",
"Tomorrow – {timeLocale}" : "ØēØ¯Ø§Ų‹ – {timeLocale}",
"Later today – {timeLocale}" : "؁؊ ŲˆŲ‚ØĒ Ų„Ø§Ø­Ų‚Ų Ø§Ų„ŲŠŲˆŲ… – {timeLocale}",
"Link to a board" : "ØąØ¨Øˇ Ø¨Ų„ŲˆØ­",
"Link to a card" : "ØąØ¨Øˇ Ø¨Ø¨ØˇØ§Ų‚ØŠ",
"Create a card" : "ØŖŲ†Ø´Ų‰ Ø¨ØˇØ§Ų‚ØŠ ",
"Message from {author} in {conversationName}" : "ØąØŗØ§Ų„ØŠ Ų…Ų† {author} ؁؊ {conversationName}",
"Something went wrong" : "حدØĢ ØŽØˇØŖ Ų…Ø§",
"Failed to upload {name}" : "ŲØ´Ų„ ؁؊ ØąŲØš {Ø§ØŗŲ…}",
"Maximum file size of {size} exceeded" : " ØĒØŦØ§ŲˆØ˛ Ø§Ų„Ų…Ų„Ų Ø§Ų„Ø­Ø¯ Ø§Ų„Ø§Ų‚ØĩŲ‰ {size} Ø¨Ø§Ų„Ø­ØŦŲ… Ø§Ų„Ų…ØŗŲ…ŲˆØ­ ",
"Error creating the share" : "ØŽØˇØŖ ؁؊ ØĨŲ†Ø´Ø§ØĄ Ø§Ų„Ų…Ø´Ø§ØąŲƒØŠ",
"Share with a Deck card" : "Ų…Ø´Ø§ØąŲƒØŠ Ų…Øš Ø¨ØˇØ§Ų‚ØŠ Deck",
"Share {file} with a Deck card" : "Ų…Ø´Ø§ØąŲƒØŠ Ø§Ų„Ų…Ų„Ų {file} Ų…Øš Ø¨ØˇØ§Ų‚ØŠ Deck",
"Share" : "Ų…Ø´Ø§ØąŲƒØŠ ",
"A <strong>card description</strong> inside the Deck app has been changed" : "<strong>؈Øĩ؁ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ</strong>Ø¯Ø§ØŽŲ„ ØĒØˇØ¨ŲŠŲ‚ Deck Ų‚Ø¯ ØĒØēŲŠØąØĒ.",
"Timeline" : "Ø§Ų„ØŦØ¯ŲˆŲ„ Ø§Ų„Ø˛Ų…Ų†ŲŠ",
"Share board with a user, group or circle â€Ļ" : "Ų…Ø´Ø§ØąŲƒØŠ Ø§Ų„Ų„ŲˆØ­ Ų…Øš Ų…ØŗØĒØŽØ¯Ų…ØŒŲ…ØŦŲ…ŲˆØšØŠ ØŖŲˆ داØĻØąØŠ ..",
"Searching for users, groups and circles â€Ļ" : "ابحØĢ ØšŲ† ØŖØšØļØ§ØĄØŒ Ų…ØŦŲ…ŲˆØšØ§ØĒ ØŖŲˆ Ø­Ų„Ų‚Ø§ØĒ ...",
"(Circle)" : "(داØĻØąØŠ)",
"Assign to users/groups/circles" : "Ø§Ų†ØŗØ¨ Ø§Ų„Ų‰ Ø§Ų„Ų…ØŗØĒØŽØ¯Ų…ŲŠŲ†ØŒØ§Ų„Ų…ØŦŲ…ŲˆØšØ§ØĒØŒØ§Ų„Ø¯ŲˆØ§ØĻØą",
"Next week" : "Ø§Ų„Ø§ØŗØ¨ŲˆØš Ø§Ų„Ų‚Ø§Ø¯Ų…",
"Next month" : "Ø§Ų„Ø´Ų‡Øą Ø§Ų„Ų‚Ø§Ø¯Ų…",
"List is empty" : "Ø§Ų„Ų‚Ø§ØĻŲ…ØŠ ŲØ§ØąØēØŠ",
"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 ØĨŲ„Ų‰ Ų…Ų†Øš Ø§Ų„Ų…ØŗØĒØŽØ¯Ų…ŲŠŲ† Ø§Ų„Ø°ŲŠŲ† Ų„ŲŠØŗŲˆØ§ ØŦØ˛ØĄŲ‹Ø§ Ų…Ų† ØĒŲ„Ųƒ Ø§Ų„Ų…ØŦŲ…ŲˆØšØ§ØĒ Ų…Ų† ØĨŲ†Ø´Ø§ØĄ Ų„ŲˆØ­Ø§ØĒŲ‡Ų… Ø§Ų„ØŽØ§ØĩØŠ. ØŗŲŠØ¸Ų„ Ø§Ų„Ų…ØŗØĒØŽØ¯Ų…ŲˆŲ† Ų‚Ø§Ø¯ØąŲŠŲ† ØšŲ„Ų‰ Ø§Ų„ØšŲ…Ų„ ØšŲ„Ų‰ Ø§Ų„Ų„ŲˆØ­Ø§ØĒ Ø§Ų„ØĒ؊ ØĒŲ…ØĒ Ų…Ø´Ø§ØąŲƒØĒŲ‡Ø§ Ų…ØšŲ‡Ų….",
"Filter by completed" : "؁؄ØĒØąØŠ Ø¨Ø­ØŗØ¨ Ø§Ų„ØĨŲ†ØŦØ§Ø˛"
"Settings" : "Ø§Ų„ØĨؚداداØĒ",
"An error occurred" : "ØˇØąØŖ Ų‡Ų†Ø§Ųƒ ØŽØˇØŖ"
},
"nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;");

View File

@@ -1,388 +1,28 @@
{ "translations": {
"You have created a new board {board}" : "Ų„Ų‚Ø¯ Ų‚Ų…ØĒ Ø¨Ø§Ų†Ø´Ø§ØĄ Ų„ŲˆØ­ ØŦØ¯ŲŠØ¯ {board}",
"{user} has created a new board {board}" : "{user} Ų‚Ø§Ų… Ø¨Ø§Ų†Ø´Ø§ØĄ Ų„ŲˆØ­ {board}",
"You have deleted the board {board}" : "Ų‚Ų…ØĒ Ø¨Ų…ØŗØ­ Ø§Ų„Ų„ŲˆØ­ {board}",
"{user} has deleted the board {board}" : "{user} Ų…ŲŽØŗØ­Ų’ Ø§Ų„Ų„ŲˆØ­ {board}",
"You have restored the board {board}" : "Ų„Ų‚Ø¯ Ø§ØŗØĒؚدØĒ Ø§Ų„Ų„ŲˆØ­ {board}",
"{user} has restored the board {board}" : "{user} Ų‚Ø§Ų… Ø¨Ø§ØŗØĒØąØŦاؚ Ø§Ų„Ų„ŲˆØ­ {board}",
"You have shared the board {board} with {acl}" : "Ų‚Ų…ØĒ Ø¨Ų…Ø´Ø§ØąŲƒØŠ Ø§Ų„Ų„ŲˆØ­ {board} Ų…Øš {acl}",
"{user} has shared the board {board} with {acl}" : "{user} Ų‚Ø§Ų… Ø¨Ų…Ø´Ø§ØąŲƒØŠ Ø§Ų„Ų„ŲˆØ­ {board} Ų…Øš {acl}",
"You have removed {acl} from the board {board}" : "Ų‚Ų…ØĒ بØĨØ˛Ø§Ų„ØŠ {acl} Ų…Ų† Ø§Ų„Ų„ŲˆØ­ {board}",
"{user} has removed {acl} from the board {board}" : "{user} Ų‚Ø§Ų… Ø¨Ø§Ø˛Ø§Ų„ØŠ {acl} Ų…Ų† Ø§Ų„Ų„ŲˆØ­ {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} Ų‚Ø§Ų… Ø¨Ø§Ų„ØēØ§ØĄ Ø§ØąØ´ŲØŠ Ø§Ų„Ų„ŲˆØ­ {before}",
"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}",
"{user} has updated the description of the card {card} in list {stack} on board {board}" : "{user} Ų‚Ø§Ų… بØĒØ­Ø¯ŲŠØĢ Ø§Ų„ŲˆØĩ؁ ØĨŲ„Ų‰ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ {card} ؁؊ Ø§Ų„Ų‚Ø§ØĻŲ…ØŠ {stack} ØšŲ„Ų‰ Ø§Ų„Ų„ŲˆØ­ {board}",
"You have archived card {card} in list {stack} on board {board}" : "Ų„Ų‚Ø¯ Ų‚Ų…ØĒ Ø¨ØŖØąØ´ŲØŠ Ø¨ØˇØ§Ų‚ØŠ {card} ؁؊ Ø§Ų„Ų‚Ø§ØĻŲ…ØŠ {stack} ØšŲ„Ų‰ Ø§Ų„Ų„ŲˆØ­ {board}",
"{user} has archived card {card} in list {stack} on board {board}" : "{user} Ų‚Ø§Ų… Ø¨ØŖØąØ´ŲØŠ Ø¨ØˇØ§Ų‚ØŠ {card} ؁؊ Ø§Ų„Ų‚Ø§ØĻŲ…ØŠ {stack} ØšŲ„Ų‰ Ø§Ų„Ų„ŲˆØ­ {board}",
"You have unarchived card {card} in list {stack} on board {board}" : "Ų„Ø¯ŲŠŲƒ Ø¨ØˇØ§Ų‚ØŠ ØēŲŠØą Ų…Ø¤ØąØ´ŲØŠ {card} ؁؊ Ø§Ų„Ų‚Ø§ØĻŲ…ØŠ {stack} ØšŲ„Ų‰ Ø§Ų„Ų„ŲˆØ­ {board}",
"{user} has unarchived card {card} in list {stack} on board {board}" : "{user} Ų„Ø¯ŲŠŲ‡ Ø¨ØˇØ§Ų‚ØŠ ØēŲŠØą Ų…Ø¤ØąØ´ŲØŠ {card} ؁؊ Ø§Ų„Ų‚Ø§ØĻŲ…ØŠ {stack} ØšŲ„Ų‰ Ø§Ų„Ų„ŲˆØ­ {board}",
"You have marked the card {card} as done in list {stack} on board {board}" : "Ų„Ų‚Ø¯ Ų‚ŲŲ…ØĒ بØĒŲ…ŲŠŲŠØ˛ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ {card} باؚØĒØ¨Ø§ØąŲ‡Ø§ \"Ų…Ų†ØĒŲ‡ŲŠØŠ\" ؁؊ Ø§Ų„Ų‚Ø§ØĻŲ…ØŠ {stack} ØšŲ„Ų‰ Ø§Ų„Ų„ŲˆØ­ {board}",
"{user} has marked card {card} as done in list {stack} on board {board}" : "Ų‚Ø§Ų… Ø§Ų„Ų…ØŗØĒØŽØ¯ŲŲ… {user} بØĒŲ…ŲŠŲŠØ˛ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ {card} باؚØĒØ¨Ø§ØąŲ‡Ø§ \"Ų…Ų†ØĒŲ‡ŲŠØŠ\" ؁؊ Ø§Ų„Ų‚Ø§ØĻŲ…ØŠ {stack} ØšŲ„Ų‰ Ø§Ų„Ų„ŲˆØ­ {board}",
"You have marked the card {card} as undone in list {stack} on board {board}" : "Ų„Ų‚Ø¯ Ų‚ŲŲ…ØĒ بØĒŲ…ŲŠŲŠØ˛ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ {card} باؚØĒØ¨Ø§ØąŲ‡Ø§ \"ØēŲŠØą Ų…Ų†ØĒŲ‡ŲŠØŠ\" ؁؊ Ø§Ų„Ų‚Ø§ØĻŲ…ØŠ {stack} ØšŲ„Ų‰ Ø§Ų„Ų„ŲˆØ­ØŠ {board}",
"{user} has marked the card {card} as undone in list {stack} on board {board}" : "Ų‚Ø§Ų… Ø§Ų„Ų…ØŗØĒØŽØ¯ŲŲ… {user} بØĒŲ…ŲŠŲŠØ˛ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ {card} باؚØĒØ¨Ø§ØąŲ‡Ø§ \"ØēŲŠØą Ų…Ų†ØĒŲ‡ŲŠØŠ\" ؁؊ Ø§Ų„Ų‚Ø§ØĻŲ…ØŠ {stack} ØšŲ„Ų‰ Ø§Ų„Ų„ŲˆØ­ØŠ {board}",
"You have removed the due date of card {card}" : "Ų‚Ų…ØĒ بØĨØ˛Ø§Ų„ØŠ Ø§Ų„ØĒØ§ØąŲŠØŽ Ø§Ų„Ų…Ø­Ø¯Ø¯ Ų…Ų† Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ {card}",
"{user} has removed the due date of card {card}" : "{user} Ų‚Ø§Ų… بØĨØ˛Ø§Ų„ØŠ Ø§Ų„ØĒØ§ØąŲŠØŽ Ø§Ų„Ų…Ø­Ø¯Ø¯ Ų…Ų† Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ {card}",
"You have set the due date of card {card} to {after}" : "Ų‚Ų…ØĒ بØĒØšŲŠŲŠŲ† Ø§Ų„ØĒØ§ØąŲŠØŽ Ø§Ų„Ų…Ø­Ø¯Ø¯ Ų„Ų„Ø¨ØˇØ§Ų‚ØŠ {card} ØĨŲ„Ų‰ {after}",
"{user} has set the due date of card {card} to {after}" : "{user} Ų‚Ø§Ų… بØĒØšŲŠŲŠŲ† Ø§Ų„ØĒØ§ØąŲŠØŽ Ø§Ų„Ų…Ø­Ø¯Ø¯ Ų„Ų„Ø¨ØˇØ§Ų‚ØŠ {card} ØĨŲ„Ų‰ {after}",
"You have updated the due date of card {card} to {after}" : "Ų‚Ų…ØĒ بØĒØ­Ø¯ŲŠØĢ Ø§Ų„ØĒØ§ØąŲŠØŽ Ø§Ų„Ų…Ø­Ø¯Ø¯ Ų„Ų„Ø¨ØˇØ§Ų‚ØŠ {card} ØĨŲ„Ų‰ {after}",
"{user} has updated the due date of card {card} to {after}" : "{user} Ų‚Ø§Ų… بØĒØ­Ø¯ŲŠØĢ Ø§Ų„ØĒØ§ØąŲŠØŽ Ø§Ų„Ų…Ø­Ø¯Ø¯ Ų„Ų„Ø¨ØˇØ§Ų‚ØŠ {card} ØĨŲ„Ų‰ {after}",
"You have added the tag {label} to card {card} in list {stack} on board {board}" : "Ų‚Ų…ØĒ بØĨØļØ§ŲØŠ ŲˆØŗŲ… {label} ØĨŲ„Ų‰ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ {card} ؁؊ Ø§Ų„Ų‚Ø§ØĻŲ…ØŠ {stack} ØšŲ„Ų‰ Ø§Ų„Ų„ŲˆØ­ {board}",
"{user} has added the tag {label} to card {card} in list {stack} on board {board}" : "{user} Ų‚Ø§Ų… بØĨØļØ§ŲØŠ ŲˆØŗŲ… {label} ØĨŲ„Ų‰ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ {card} ؁؊ Ø§Ų„Ų‚Ø§ØĻŲ…ØŠ {stack} ØšŲ„Ų‰ Ø§Ų„Ų„ŲˆØ­ {board}",
"You have removed the tag {label} from card {card} in list {stack} on board {board}" : "Ų‚Ų…ØĒ بØĨØ˛Ø§Ų„ØŠ ŲˆØŗŲ… {label} Ų…Ų† Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ {card} ؁؊ Ø§Ų„Ų‚Ø§ØĻŲ…ØŠ {stack} ØšŲ„Ų‰ Ø§Ų„Ų„ŲˆØ­ {board}",
"{user} has removed the tag {label} from card {card} in list {stack} on board {board}" : "{user} Ų‚Ø§Ų… بØĨØ˛Ø§Ų„ØŠ ŲˆØŗŲ… {label} Ų…Ų† Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ {card} ؁؊ Ø§Ų„Ų‚Ø§ØĻŲ…ØŠ {stack} ØšŲ„Ų‰ Ø§Ų„Ų„ŲˆØ­ {board}",
"You have assigned {assigneduser} to card {card} on board {board}" : "Ų‚Ų…ØĒ بØĒŲƒŲ„ŲŠŲ {assigneduser} ؁؊ Ø¨ØˇØ§Ų‚ØŠ {card} ØšŲ„Ų‰ Ø§Ų„Ų„ŲˆØ­ {board}",
"{user} has assigned {assigneduser} to card {card} on board {board}" : "{user} Ų‚Ø§Ų… بØĒŲƒŲ„ŲŠŲ {assigneduser} ؁؊ Ø¨ØˇØ§Ų‚ØŠ {card} ØšŲ„Ų‰ Ø§Ų„Ų„ŲˆØ­ {board}",
"You have unassigned {assigneduser} from card {card} on board {board}" : "Ų„Ų‚Ø¯ ØĨŲ„Øē؊ØĒ ØĒŲƒŲ„ŲŠŲ {assigneduser} Ų…Ų† Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ {card} ØšŲ„Ų‰ Ø§Ų„Ų„ŲˆØ­ {board}",
"{user} has unassigned {assigneduser} from card {card} on board {board}" : "{user} Ø§Ų„ØēŲ‰ ØĒŲƒŲ„ŲŠŲ {assigneduser} Ų…Ų† Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ {card} ØšŲ„Ų‰ Ø§Ų„Ų„ŲˆØ­ {board}",
"You have moved the card {card} from list {stackBefore} to {stack}" : " Ų‚Ų…ØĒ Ø¨Ų†Ų‚Ų„ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ {card} Ų…Ų† Ø§Ų„Ų‚Ø§ØĻŲ…ØŠ {stackBefore} ØĨŲ„Ų‰ {stack}",
"{user} has moved the card {card} from list {stackBefore} to {stack}" : "{user} Ų‚Ø§Ų… Ø¨Ų†Ų‚Ų„ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ {card} Ų…Ų† Ø§Ų„Ų‚Ø§ØĻŲ…ØŠ {stackBefore} ØĨŲ„Ų‰ {stack}",
"You have added the attachment {attachment} to card {card}" : "Ų‚Ų…ØĒ بØĨØļØ§ŲØŠ Ø§Ų„Ų…ØąŲŲ‚ {attachment} ØĨŲ„Ų‰ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ {card}",
"{user} has added the attachment {attachment} to card {card}" : "{user} Ų‚Ø§Ų… بØĨØļØ§ŲØŠ Ø§Ų„Ų…ØąŲŲ‚ {attachment} ØĨŲ„Ų‰ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ {card}",
"You have updated the attachment {attachment} on card {card}" : "Ų‚Ų…ØĒ بØĒØ­Ø¯ŲŠØĢ Ø§Ų„Ų…ØąŲŲ‚ {attachment} ØšŲ„Ų‰ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ {card}",
"{user} has updated the attachment {attachment} on card {card}" : "{user} Ų‚Ø§Ų… بØĒØ­Ø¯ŲŠØĢ Ø§Ų„Ų…ØąŲŲ‚ {attachment} ØšŲ„Ų‰ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ {card}",
"You have deleted the attachment {attachment} from card {card}" : "Ų‚Ų…ØĒ Ø¨Ø­Ø°Ų Ø§Ų„Ų…ØąŲŲ‚ {attachment} Ų…Ų† Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ {card}",
"{user} has deleted the attachment {attachment} from card {card}" : "{user} Ų‚Ø§Ų… Ø¨Ø­Ø°Ų Ø§Ų„Ų…ØąŲŲ‚ {attachment} Ų…Ų† Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ {card}",
"You have restored the attachment {attachment} to card {card}" : "Ų‚Ų…ØĒ Ø¨Ø§ØŗØĒØąØŦاؚ Ø§Ų„Ų…ØąŲŲ‚ {attachment} ØĨŲ„Ų‰ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ {card}",
"{user} has restored the attachment {attachment} to card {card}" : "{user} Ų‚Ø§Ų… Ø¨Ø§ØŗØĒØąØŦاؚ Ø§Ų„Ų…ØąŲŲ‚ {attachment} ØĨŲ„Ų‰ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ {card}",
"You have commented on card {card}" : "Ų„Ų‚Ø¯ ØšŲ„Ų‚ØĒ ØšŲ„Ų‰ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ {Ø¨ØˇØ§Ų‚ØŠ}",
"{user} has commented on card {card}" : "{Ų…ØŗØĒØŽØ¯Ų…} ØšŲ„Ų‚ ØšŲ„Ų‰ Ø¨ØˇØ§Ų‚ØŠ {Ø¨ØˇØ§Ų‚ØŠ}",
"Deck" : "Deck",
"Changes in the <strong>Deck app</strong>" : "ØĒØēŲŠŲŠØąØ§ØĒ ؁؊ <strong>ØĒØˇØ¨ŲŠŲ‚ Deck</strong> ",
"A <strong>board, list or card</strong> was changed" : "ØĒŲ…Ų‘ ØĒØēŲŠŲŠØą <strong>Ų„ŲˆØ­ØŠ board ØŖŲˆ Ų‚Ø§ØĻŲ…ØŠ list ØŖŲˆ Ø¨ØˇØ§Ų‚ØŠ card </strong>.",
"A <strong>comment</strong> was created on a card" : "<strong>ØĒØšŲ„ŲŠŲ‚</strong> ØĒŲ… ØĨŲ†Ø´Ø§Ø¤Ų‡ ØšŲ„Ų‰ Ø¨ØˇØ§Ų‚ØŠ",
"A <strong>card description</strong> has been changed" : "ØĒŲ…Ų‘ ØĒØēŲŠŲŠØą <strong>؈Øĩ؁ Ø¨ØˇØ§Ų‚ØŠ</strong>.",
"Cards due today" : "Ø§Ų„Ø¨ØˇØ§Ų‚Ø§ØĒ Ø§Ų„Ų…ØŗØĒØ­Ų‚ØŠ Ø§Ų„ŲŠŲˆŲ…",
"Cards due tomorrow" : "Ø§Ų„Ø¨ØˇØ§Ų‚Ø§ØĒ Ø§Ų„Ų…ØŗØĒØ­Ų‚ØŠ ØēØ¯Ø§Ų‹",
"Upcoming cards" : "Ø§Ų„Ø¨ØˇØ§Ų‚Ø§ØĒ Ø§Ų„Ų‚Ø§Ø¯Ų…ØŠ",
"Load more" : "Ø­Ų…Ų‘Ų„ ØŖŲƒØĢØą",
"Personal" : "Ø´ØŽØĩ؊",
"The card \"%s\" on \"%s\" has been assigned to you by %s." : "Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ \"%s\" ØšŲ„Ų‰ \"%s\" ŲƒŲŲ„ŲØĒ Ø¨Ų‡Ø§ Ų…Ų† Ų‚Ø¨Ų„ %s.",
"{user} has assigned the card {deck-card} on {deck-board} to you." : "{user} Ų‚Ø§Ų… بØĒŲƒŲ„ŲŠŲ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ {deck-board} ØšŲ„Ų‰ {deck-board} Ų„Ųƒ",
"The card \"%s\" on \"%s\" has reached its due date." : "؈ØĩŲ„ØĒ Ø¨ØˇØ§Ų‚ØŠ \"%s\" ØšŲ„Ų‰ %s\" Ø§Ų„Ų…ŲˆØšØ¯ Ø§Ų„Ų…Ø­Ø¯Ø¯ ",
"The card {deck-card} on {deck-board} has reached its due date." : "ØĒØŦØ§ŲˆØ˛ØĒ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ {deck-card} ØšŲ„Ų‰ {deck-board} Ø§Ų„ØĒØ§ØąŲŠØŽ Ø§Ų„Ų…Ø­Ø¯Ø¯.",
"%s has mentioned you in a comment on \"%s\"." : "%s ØŖØ´Ø§Øą ØĨŲ„ŲŠŲƒ ؁؊ ØĒØšŲ„ŲŠŲ‚ ØšŲ„Ų‰ \"%s\".",
"{user} has mentioned you in a comment on {deck-card}." : "{user} ØŖØ´Ø§Øą ØĨŲ„ŲŠŲƒ ؁؊ ØĒØšŲ„ŲŠŲ‚ ØšŲ„Ų‰ {deck-card}",
"The board \"%s\" has been shared with you by %s." : "ØĒŲ…ØĒ Ų…Ø´Ø§ØąŲƒØŠ Ø§Ų„Ų„ŲˆØ­ \"%s\" Ų…ØšŲƒ Ų…Ų† Ų‚Ø¨Ų„ %s.",
"{user} has shared {deck-board} with you." : "{user} Ų‚Ø§Ų… Ø¨Ų…Ø´Ø§ØąŲƒØŠ {deck-board} Ų…ØšŲƒ.",
"Deck board" : "ØąŲŲ‚ØšØŠ Ø§Ų„Ų„ŲˆØ­Ø§ØĒ Deck board",
"Owned by %1$s" : "ŲŠŲ…Ų„ŲƒŲ‡Ø§ %1$s",
"Deck boards, cards and comments" : "ØąŲŲ‚ØšØŠ Ø§Ų„Ų„ŲˆØ­Ø§ØĒ ؈ Ø§Ų„Ø¨ØˇØ§Ų‚Ø§ØĒ ؈ Ø§Ų„Ų…Ų„Ø§Ø­Ø¸Ø§ØĒ",
"From %1$s, in %2$s/%3$s, owned by %4$s" : " Ų…Ų† %1$s، ؁؊ %2$s/%3$s، ŲŠŲ…Ų„ŲƒŲ‡Ø§ %4$s",
"Create a new deck card" : "ØĨŲ†Ø´Ø§ØĄ Ø¨ØˇØ§Ų‚ØŠ deck card ØŦØ¯ŲŠØ¯ØŠ",
"Card comments" : "ØĒØšŲ„ŲŠŲ‚Ø§ØĒ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ ",
"%s on %s" : "%s ØšŲ„Ų‰ %s",
"Deck boards and cards" : "ØąŲŲ‚ŲŽØš Ø§Ų„Ų„ŲˆØ­Ø§ØĒ ؈ Ø§Ų„Ø¨ØˇØ§Ų‚Ø§ØĒ",
"No data was provided to create an attachment." : "Ų„Ø§ Ø¨ŲŠØ§Ų†Ø§ØĒ ØĒŲ… ØĒŲ‚Ø¯ŲŠŲ…Ų‡Ø§ Ų„Ø§Ų†Ø´Ø§ØĄ Ų…ØąŲŲ‚",
"Finished" : "Ø§ŲƒØĒŲ…Ų„",
"To review" : "Ų„ØĨؚاد؊ Ø§Ų„Ų…ØąØ§ØŦؚ؊",
"Action needed" : "ŲŠØ­ØĒاØŦ ØĨŲ„Ų‰ ØĨØŦØąØ§ØĄ",
"Later" : "Ų„Ø§Ø­Ų‚Ø§",
"copy" : "Ų†ØŗØŽ",
"To do" : "Ų„ŲØšŲ„Ų‡",
"Doing" : "ØĒØ­ØĒ Ø§Ų„ØšŲ…Ų„",
"Done" : "ØŖŲŲ†ØŦØ˛",
"Example Task 3" : "Ų…ØĢØ§Ų„ Ø§Ų„Ų…Ų‡Ų…ØŠ 3",
"Example Task 2" : "Ų…ØĢØ§Ų„ Ø§Ų„Ų…Ų‡Ų…ØŠ 2",
"Example Task 1" : "Ų…ØĢØ§Ų„ Ø§Ų„Ų…Ų‡Ų…ØŠ 1",
"The file was uploaded" : "ØĒŲ… ØąŲØš Ø§Ų„Ų…Ų„Ų",
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Ø­ØŦŲ… Ø§Ų„Ų…Ų„Ų Ø§Ų„Ų…ØąŲŲˆØš Ų‚Ø¯ ØĒØŦØ§ŲˆØ˛ upload_max_filesize Ø§Ų„Ų…ŲˆØŦŲˆØ¯ØŠ ؁؊ ؅؄؁ php.ini ",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Ø­ØŦŲ… Ø§Ų„Ų…Ų„Ų Ø§Ų„Ø°ŲŠ ØĒØąŲŠØ¯ ØąŲØšŲ‡ ØŖØšŲ„Ų‰ Ų…Ų† Ø§Ų„Ø­Ø¯ Ø§Ų„Ų…ØŗŲ…ŲˆØ­ Ø¨Ų‡ ؁؊ ŲˆØ§ØŦŲ‡ØŠ Ø§Ų„ HTML.",
"The file was only partially uploaded" : "Ø§Ų„Ų…Ų„Ų Ų‚Ø¯ ØąŲŲØš ØŦØ˛ØĄØ§ Ų…Ų†Ų‡ ŲŲ‚Øˇ",
"Finished" : "Ų…ŲƒØĒŲ…Ų„ØŠ",
"copy" : "ØŖŲ†ØŗØŽ",
"Done" : "ØĒŲ…",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Ø­ØŦŲ… Ø§Ų„Ų…Ų„Ų Ø§Ų„Ø°ŲŠ ØĒØąŲŠØ¯ ØĒØąŲŲŠØšŲ‡ ØŖØšŲ„Ų‰ Ų…Ų…Ø§ MAX_FILE_SIZE ŲŠØŗŲ…Ø­ Ø¨Ų‡ ؁؊ ŲˆØ§ØŦŲ‡ØŠ Ø§Ų„ HTML.",
"No file was uploaded" : "Ų„Ų… ؊ØĒŲ… ØąŲØš ØŖŲŠ ؅؄؁",
"Missing a temporary folder" : "Ø§Ų„Ų…ØŦŲ„Ø¯ Ø§Ų„Ų…Ø¤Ų‚ØĒ ØēŲŠØą Ų…ŲˆØŦŲˆØ¯",
"Could not write file to disk" : "Ų„Ų… ŲŠØŗØĒØˇØš ؃ØĒاب؊ ؅؄؁ Ų„Ų„Ų‚ØąØĩ",
"A PHP extension stopped the file upload" : "ØĨØļØ§ŲØŠ Ø§Ų„Ø¨ŲŠ اچ Ø¨ŲŠ PHP ØŖŲˆŲ‚ŲØĒ ØąŲØš Ø§Ų„Ų…Ų„Ų",
"No file uploaded or file size exceeds maximum of %s" : "Ų„Ų… ؊ØĒŲ… ØĒØ­Ų…ŲŠŲ„ ØŖŲŠ ؅؄؁ ØŖŲˆ ØŖŲ† ؊ØĒØŦØ§ŲˆØ˛ Ø­ØŦŲ… Ø§Ų„Ų…Ų„Ų Ø§Ų„Ø­Ø¯ Ø§Ų„ØŖŲ‚ØĩŲ‰ %s",
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : " Ų‡Ø°Ų‡ Ø§Ų„Ų…Ų„Ø§Ø­Ø¸Ø§ØĒ ŲŲŠŲ‡Ø§ ØŖŲƒØĢØą Ų…Ų† %s Ø­ØąŲØ§Ų‹.\n ØĒŲ…Ų‘ØĒ ØĨØļØ§ŲØĒŲ‡Ø§ ŲƒŲ…ŲØąŲŲ‚ ØĨŲ„Ų‰ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ Ø§Ų„ØĒ؊ Ø§ØŗŲ…Ų‡Ø§%s.\n Ø§Ų„Ų…ŲˆØŦŲˆØ¯ØŠ ØšŲ„Ų‰ Ø§Ų„ØąØ§Ø¨Øˇ %s.",
"Card not found" : "Ų„Ų… ؊ØĒŲ… Ø§Ų„ØšØĢŲˆØą ØšŲ„Ų‰ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ ",
"Path is already shared with this card" : "ØĒŲ… Ų…Ø´Ø§ØąŲƒØŠ Ø§Ų„Ų…ØŗØ§Øą Ø¨Ø§Ų„ŲØšŲ„ Ų…Øš Ų‡Ø°Ų‡ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ ",
"Invalid date, date format must be YYYY-MM-DD" : "ØĒØ§ØąŲŠØŽ ØēŲŠØą ØĩØ­ŲŠØ­, ؊ØŦب ØŖŲ† ŲŠŲƒŲˆŲ† ØĒŲ†ØŗŲŠŲ‚ Ø§Ų„ØĒØ§ØąŲŠØŽ YYYY-MM-DD",
"Personal planning and team project organization" : "Ø§Ų„ØĒØŽØˇŲŠØˇ Ø§Ų„Ø´ØŽØĩ؊ ؈ ØĒŲ†Ø¸ŲŠŲ… Ų…Ø´ØąŲˆØš Ø§Ų„ŲØąŲŠŲ‚",
"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 Ų‡Ųˆ ØŖØ¯Ø§ØŠ Ų„ØĒŲ†Ø¸ŲŠŲ… Ø§Ų„Ų…Ų‡Ø§Ų… Ø§Ų„Ø´ØŽØĩŲŠØŠ ؈ Ø§Ų„ØŦŲ…Ø§ØšŲŠØŠ ؁؊ Ų†ŲƒØŗØĒ ŲƒŲ„Ø§ŲˆØ¯ ØšŲ„Ų‰ Ų†Ų…Øˇ \"ØŽØˇŲˆØˇ Ø§Ų„ØĒØĩŲ†ŲŠØš ØŖŲˆ Ø§Ų„ØĒØŦŲ…ŲŠØš ؁؊ Ø§Ų„Ų…ØĩØ§Ų†Øš\" ؈ Ø§Ų„Ų…ØšØąŲˆŲ Ø¨Ų€ kanban.\n\n\n- đŸ“Ĩ ØŖŲƒØĒب Ų…Ų‡Ų…ØĒ؃ Ø§Ųˆ Ų…Ų‡Ų…ØŠ ŲØąŲŠŲ‚Ųƒ ØšŲ„Ų‰ Ø¨ØˇØ§Ų‚ØŠ ؈ ØļØš Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ ؁؊ Ø§Ų„ØąŲ‘ŲŲ‚ØšØŠ ØšŲ„Ų‰ ŲƒØ¯ØŗØŠ Ø§Ų„Ø¨ØˇØ§Ų‚Ø§ØĒ Ų…Ų† ذاØĒ Ø§Ų„ØĒØĩŲ†ŲŠŲ ØŖŲˆ Ø§Ų„Ų…ØąØ­Ų„ØŠ Ų…Ų† Ø§Ų„ØĨŲ†ØŦØ§Ø˛\n- 📄 Ø¯ŲˆŲ‘Ų† Ų…Ų„Ø§Ø­Ø¸Ø§ØĒ؃ Ø§Ų„ØĨØļØ§ŲŲŠØŠ ØšŲ„Ų‰ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ بØĩ؊ØēØŠ Ų…Ø§ØąŲƒØ¯Ø§ŲˆŲ† markdown\n- 🔖 ؈ ŲŠŲ…ŲƒŲ†Ųƒ ØŖŲŠØļØ§Ų‹ ØĨØŗŲ†Ø§Ø¯ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ ØŖŲŠ Ø§Ų„Ų…Ų‡Ų…ØŠ ØĨŲ„Ų‰ Ø´ØŽØĩ ØŖŲˆ ØŖØ´ØŽØ§Øĩ ؁؊ ŲØąŲŠŲ‚Ųƒ\n- đŸ‘Ĩ Ø´Ø§ØąŲƒ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ Ų…Øš Ų…Ų† ØĒØąØēب Ų…Ų† ØŖØšØļØ§ØĄ ŲØąŲŠŲ‚Ųƒ ØŖŲˆ ؚاØĻŲ„ØĒ؃ ØŖŲˆ ØŖØĩØ¯Ų‚Ø§ØĻ؃\n- 📎 ØĨØąŲØ§Ų‚ Ų…Ų„ŲØ§ØĒ ؈ ØĒØļŲ…ŲŠŲ†Ų‡Ø§ بØĩ؊ØēØŠ Ų…Ø§ØąŲƒØ¯Ø§ŲˆŲ† ؁؊ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ\n- đŸ’ŦŲ†Ø§Ų‚Ø´ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ Ų…Øš Ø˛Ų…Ų„Ø§ØĻ؃ ؁؊ ØŽØ§Ų†ØŠ Ø§Ų„Ų…Ų„Ø§Ø­Ø¸Ø§ØĒ\n- ⚡ ØĒابؚ Ų…Ø§ ŲŠŲØŗØĒØŦد Ų…Ų† ØšŲ…Ų„ŲŠØ§ØĒ ؈ ØĒØˇŲˆŲ‘ØąØ§ØĒ ØšŲ„Ų‰ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ ØŖŲˆ Ø§Ų„Ų…Ų‡Ų…ØŠ\n- 🚀 Ø­Ø§ŲØ¸ ØšŲ„Ų‰ Ų…Ø´ØąŲˆØšŲƒ Ų…ŲŲ†ØŗŲ‘Ų‚Ø§Ų‹ Ø¨Ø§ØŗØĒŲ…ØąØ§Øą.",
"Add board" : "ØĨØļØ§ŲØŠ Ų„ŲˆØ­",
"Select the board to link to a project" : "ØĒØ­Ø¯ŲŠØ¯ Ø§Ų„Ų„ŲˆØ­ Ų„ØąØ¨ØˇŲ‡ Ø¨Ų…Ø´ØąŲˆØš",
"Search by board title" : "بحØĢ Ø¨ŲˆØ§ØŗØˇØŠ ØšŲ†ŲˆØ§Ų† Ø§Ų„Ų„ŲˆØ­",
"Select board" : "حدد Ų„ŲˆØ­",
"Move card to another board" : "Ø­ØąŲƒ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ Ø§Ų„Ų‰ Ų„ŲˆØ­ Ø§ØŽØą",
"Select a board" : "حدد Ų„ŲˆØ­",
"No lists available" : "Ų„Ø§ ؊؈ØŦد Ų‚Ø§ØĻŲ…ØŠ Ų…ØĒØ§Ø­Ų‡ ",
"Select a list" : "ا؎ØĒØą Ų‚Ø§ØĻŲ…ØŠ ",
"Move card" : "Ø­ØąŲƒ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ",
"Cancel" : "ØĨŲ„ØēØ§ØĄ",
"Select a card" : "حدد Ø¨ØˇØ§Ų‚ØŠ",
"Select the card to link to a project" : "حدد Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ Ų„ØąØ¨ØˇŲ‡Ø§ Ø¨Ų…Ø´ØąŲˆØš",
"Link to card" : "Ø§ØąØ¨Øˇ Ø¨ØˇØ§Ų‚ØŠ",
"File already exists" : "Ø§Ų„Ų…Ų„Ų Ų…ŲˆØŦŲˆØ¯ Ų…ØŗØ¨Ų‚Ø§Ų‹",
"A file with the name {filename} already exists." : "؅؄؁ Ø¨Ø§ØŗŲ… {Ø§ØŗŲ… Ø§Ų„Ų…Ų„Ų} Ų…ŲˆØŦŲˆØ¯ Ų…ØŗØ¨Ų‚Ų‹Ø§ ",
"Do you want to overwrite it?" : "Ų‡Ų„ ØĒØąŲŠØ¯ ØĒØŦØ§ŲˆØ˛Ų‡ØŸ",
"Overwrite file" : "ØĒØŦØ§ŲˆØ˛ ؅؄؁",
"Keep existing file" : "Ø§Ø¨Ų‚ŲŠ Ø§Ų„Ų…Ų„Ų Ø§Ų„Ų…ŲˆØŦŲˆØ¯",
"This board is read only" : "Ų‡Ø°Ø§ Ø§Ų„Ų„ŲˆØ­ Ø¨ŲˆØļØš Ø§Ų„Ų‚ØąØ§ØĄØŠ ŲŲ‚Øˇ",
"Drop your files to upload" : "Ø§ŲŲ„ØĒ Ø§Ų„Ų…Ų„ŲØ§ØĒ Ų„ØąŲØšŲ‡Ø§",
"Add card" : "ØĨØļØ§ŲØŠ Ø¨ØˇØ§Ų‚ØŠ",
"Archived cards" : "Ø§Ų„Ø¨ØˇØ§Ų‚Ø§ØĒ Ø§Ų„Ų…Ø¤ØąØ´ŲØŠ",
"Add list" : "ØĨØļØ§ŲØŠ Ų‚Ø§ØĻŲ…ØŠ",
"List name" : "Ų‚Ø§Ų…ØŠ Ø§ØŗŲ…Ø§ØĄ",
"Active filters" : "ŲŲ„Ø§ØĒØą Ų†Ø´ØˇØŠ",
"Apply filter" : "ØĒØˇØ¨ŲŠŲ‚ Ø§Ų„ØĒØĩŲŲŠØŠ",
"Filter by tag" : "ØĒØĩŲŲŠØŠ Ø¨ŲˆØ§ØŗØˇØŠ Ø§Ų„ŲˆØŗŲ…",
"Filter by assigned user" : "ØĒØĩŲŲŠØŠ Ø¨ŲˆØ§ØŗØˇØŠ Ø§Ų„Ų…ØŗØĒØŽØ¯Ų… Ø§Ų„Ų…ŲˆŲƒŲ„ Ø§Ų„ŲŠŲ‡",
"Unassigned" : "ØēŲŠØą Ų…ØšŲŠŲŠŲ† ",
"Filter by status" : "؁؄ØĒØąØŠ Ø¨Ø­ØŗØ¨ Ø§Ų„Ø­Ø§Ų„ØŠ",
"Open and completed" : "؅؁ØĒŲˆØ­ØŠ ؈ Ų…Ų†ØŦØ˛ØŠ",
"Open" : "ØĨ؁ØĒØ­",
"Completed" : "Ų…ŲŲƒØĒŲ…Ų„",
"Filter by due date" : "ØĒØĩŲŲŠØŠ Ø¨ŲˆØ§ØŗØˇØŠ ØĒØ§ØąŲŠØŽ Ø§Ų„ØĨŲ†ØŦØ§Ø˛",
"Overdue" : "ØĒØŖØŽØą",
"Next 24 hours" : "Ø§Ų„ 24 ØŗØ§ØšØŠ Ø§Ų„Ų‚Ø§Ø¯Ų…ØŠ",
"Next 7 days" : "Ø§Ų„ 7 ØŖŲŠØ§Ų… Ø§Ų„Ų‚Ø§Ø¯Ų…ØŠ",
"Next 30 days" : "Ø§Ų„ 30 ŲŠŲˆŲ… Ø§Ų„Ų‚Ø§Ø¯Ų…ØŠ",
"No due date" : "Ų„Ø§ ØĒØ§ØąŲŠØŽ ØĨŲ†ØŦØ§Ø˛",
"Clear filter" : "Ø§Ø˛Ų„ Ø§Ų„ØĒØĩŲŲŠØŠ",
"View Modes" : "؈ØļØšŲŠØ§ØĒ Ø§Ų„ØšØąØļ",
"Toggle View Modes" : "Ø§Ų„ØĒØ¨Ø¯ŲŠŲ„ Ø¨ŲŠŲ† ؈ØļØšŲŠØ§ØĒ Ø§Ų„ØšØąØļ",
"Hide archived cards" : "ØĨØŽŲØ§ØĄ Ø§Ų„Ø¨ØˇØ§Ų‚Ø§ØĒ Ø§Ų„Ų…Ø¤ØąØ´ŲØŠ ",
"Show archived cards" : "Ø§Ø¸Ų‡Øą Ø§Ų„Ø¨ØˇØ§Ų‚Ø§ØĒ Ø§Ų„Ų…Ø¤ØąØ´ŲØŠ",
"Toggle compact mode" : "ØĒØ¨Ø¯ŲŠŲ„ Ø§Ų„Ų†Ų…Øˇ Ø§Ų„Ų…ØļØēŲˆØˇ",
"Hide card cover images" : "ØĨØŽŲŲ ØĩŲˆØą ØēŲ„Ø§Ų Ø§Ų„Ø¨ØˇØ§Ų‚Ø§ØĒ",
"Show card cover images" : "ØŖØ¸Ų‡ŲØą ØĩŲˆØą ØēŲ„Ø§Ų Ø§Ų„Ø¨ØˇØ§Ų‚Ø§ØĒ",
"Open details" : "Ø§ŲØĒØ­ Ø§Ų„ØĒŲØ§ØĩŲŠŲ„",
"Details" : "Ø§Ų„ØĒŲØ§ØĩŲŠŲ„",
"Currently present people" : "ØŖØ´ØŽØ§Øĩ Ų…ØšØąŲˆØļŲˆŲ† Ø­Ø§Ų„ŲŠŲ‘Ø§Ų‹",
"Loading board" : "ØŦØ§ØąŲ ØĒØ­Ų…ŲŠŲ„ Ø§Ų„Ų„ŲˆØ­..",
"Board not found" : "Ø§Ų„Ų„ŲˆØ­ ØēŲŠØą Ų…ŲˆØŦŲˆØ¯",
"Create a new list to add cards to this board" : "ØĨŲ†Ø´Ø§ØĄ Ų‚Ø§ØĻŲ…ØŠ ØŦØ¯ŲŠØ¯ØŠ Ų„ØĨØļØ§ŲØŠ Ø§Ų„Ø¨ØˇØ§Ų‚Ø§ØĒ ØšŲ„Ų‰ Ų‡Ø°Ø§ Ø§Ų„Ų„ŲˆØ­",
"Sharing" : "Ø§Ų„Ų…Ø´Ø§ØąŲƒØŠ",
"Tags" : "Ø§Ų„ŲˆØŗŲˆŲ…",
"Deleted items" : "Ø§Ų„ØšŲ†Ø§ØĩØą Ø§Ų„Ų…Ų…ØŗŲˆØ­ØŠ",
"Activity" : "Ø§Ų„Ų†Ø´Ø§Øˇ",
"Deleted lists" : "Ø§Ų„Ų‚ŲˆØ§ØĻŲ… Ø§Ų„Ų…Ø­Ø°ŲˆŲØŠ",
"Timeline" : "Ø§Ų„ØŽŲŠØˇ Ø§Ų„Ø˛Ų…Ų†ŲŠ",
"Undo" : "ØĒØąØ§ØŦØš",
"Deleted cards" : "Ø§Ų„Ø¨ØˇØ§Ų‚Ø§ØĒ Ø§Ų„Ų…Ø­Ø°ŲˆŲØŠ",
"Share board with a user, group or team â€Ļ" : "Ų…Ø´Ø§ØąŲƒØŠ Ø§Ų„Ų„ŲˆØ­ØŠ Ų…Øš Ų…ØŗØĒØŽØ¯ŲŲ… Ø§Ųˆ Ų…ØŦŲ…ŲˆØšØŠ ØŖŲˆ ŲØąŲŠŲ‚ ...",
"Searching for users, groups and teams â€Ļ" : "Ø§Ų„Ø¨Ø­ØĢ ØšŲ† Ų…ØŗØĒØŽØ¯ŲŲ…ŲŠŲ†ØŒ ØŖŲˆ Ų…ØŦŲ…ŲˆØšØ§ØĒ، ØŖŲˆ ŲŲØąŲŽŲ‚",
"No participants found" : "Ų„Ų… ؊ØĒŲ… Ø§Ų„ØšØĢŲˆØą ØšŲ„Ų‰ Ų…Ø´Ø§ØąŲƒŲŠŲ†",
"Board owner" : "Ų…Ų†Ø´ØĻ Ø§Ų„Ų„ŲˆØ­",
"(Group)" : "(Ų…ØŦŲ…ŲˆØšØŠ)",
"(Team)" : "(Ø§Ų„ŲØąŲŠŲ‚)",
"Can edit" : "ŲŠŲ…ŲƒŲ† ØĒØšØ¯ŲŠŲ„Ų‡",
"Can share" : "ŲŠŲ…ŲƒŲ† Ų…Ø´Ø§ØąŲƒØĒŲ‡",
"Can manage" : "ŲŠŲ…ŲƒŲ† ØĨØ¯Ø§ØąØĒŲ‡",
"Owner" : "Ø§Ų„Ų…Ø§Ų„Ųƒ",
"Can edit" : "ŲŠŲ…ŲƒŲ†Ų‡ Ø§Ų„ØĒØēŲŠŲŠØą",
"Can share" : "Can share",
"Delete" : "Ø­Ø°Ų ",
"Failed to create share with {displayName}" : "ŲØ´Ų„ ؁؊ ØĨŲ†Ø´Ø§ØĄ Ø§Ų„Ų…Ø´Ø§ØąŲƒØŠ Ų…Øš {displayName}",
"Are you sure you want to transfer the board {title} to {user}?" : "Ų‡Ų„ ØŖŲ†ØĒ Ų…ØĒØŖŲƒØ¯ ØŖŲ†Ųƒ ØĒØąŲŠØ¯ Ų†Ų‚Ų„ Ø§Ų„Ų„ŲˆØ­ØŠ {title} ØĨŲ„Ų‰ {user} ؟",
"Transfer the board." : "Ų†Ų‚Ų„ Ø§Ų„Ų„ŲˆØ­ØŠ.",
"Transfer" : "Ų†Ų‚Ų„",
"The board has been transferred to {user}" : "ØĒŲ…Ų‘ Ų†Ų‚Ų„ Ø§Ų„Ų„ŲˆØ­ØŠ ØĨŲ„Ų‰ {user}",
"Failed to transfer the board to {user}" : "ØĒØšØ°Ų‘Øą Ų†Ų‚Ų„ Ø§Ų„Ų„ŲˆØ­ØŠ ØĨŲ„Ų‰ {user}",
"Edit list title" : "ØšØ¯Ų‘Ų„ Ø§ØŗŲ… Ø§Ų„Ų‚Ø§ØĻŲ…ØŠ",
"Archive all cards" : "ØŖØąØ´ŲØŠ ØŦŲ…ŲŠØš Ø§Ų„Ø¨ØˇØ§Ų‚Ø§ØĒ ",
"Unarchive all cards" : "ØĒØąØ§ØŦØš ØšŲ† ØŖØąØ´ŲØŠ ŲƒŲ„ Ø§Ų„Ø¨ØˇØ§Ų‚Ø§ØĒ",
"Delete list" : "Ø­Ø°Ų Ø§Ų„Ų‚Ø§ØĻŲ…ØŠ",
"Archive all cards in this list" : "ØŖØąØ´ŲØŠ ØŦŲ…ŲŠØš Ø§Ų„Ø¨ØˇØ§Ų‚Ø§ØĒ ؁؊ Ø§Ų„Ų‚Ø§ØĻŲ…ØŠ ",
"Unarchive all cards in this list" : "ØĒØąØ§ØŦØš ØšŲ† ØŖØąØ´ŲØŠ ŲƒŲ„ Ø§Ų„Ø¨ØˇØ§Ų‚Ø§ØĒ ؁؊ Ų‡Ø°Ų‡ Ø§Ų„Ų‚Ø§ØĻŲ…ØŠ",
"Add a new card" : "ØĨØļØ§ŲØŠ Ø¨ØˇØ§Ų‚ØŠ ØŦØ¯ŲŠØ¯ØŠ",
"Card name" : "Ø§ØŗŲ… Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ ",
"List deleted" : "Ø§Ų„Ų‚Ø§ØĻŲ…ØŠ Ø­ŲŒØ°ŲØĒ ",
"Edit" : "ØĒØšØ¯ŲŠŲ„",
"Add a new tag" : "ØĨØļØ§ŲØŠ ŲˆØŗŲ… ØŦØ¯ŲŠØ¯",
"title and color value must be provided" : "Ø§Ų„ØšŲ†ŲˆØ§Ų† ؈ Ų‚ŲŠŲ…ØŠ Ø§Ų„Ų„ŲˆŲ† ؊ØŦب ØĒŲ‚Ø¯ŲŠŲ…Ų‡Ø§ ",
"Board name" : "Ø§ØŗŲ… Ø§Ų„Ų„ŲˆØ­",
"Members" : "Ø§Ų„Ø§ØšØļØ§ØĄ",
"Assign to users/groups/team" : "ØĨØŗŲ†Ø§Ø¯ ØĨŲ„Ų‰ Ų…ØŗØĒØŽØ¯ŲŲ…ŲŠŲ†/Ų…ØŦŲ…ŲˆØšØ§ØĒ/ŲŲØąŲŽŲ‚",
"Assign a user to this cardâ€Ļ" : "Ø§Ų†ØŗØ¨ Ų…ØŗØĒØŽØ¯Ų… Ø§Ų„Ų‰ Ų‡Ø°Ų‡ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ..",
"Select a user to assign to this cardâ€Ļ" : "Ø­Ø¯Ų‘ŲØ¯ Ų…ØŗØĒØŽØ¯ŲŲ…Ø§Ų‹ Ų„ŲŠØĒŲ… ØĨØŗŲ†Ø§Ø¯ Ų‡Ø°Ų‡ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ Ų„Ų‡...",
"Upload new files" : "ØąŲØš Ų…Ų„ŲØ§ØĒ ØŦØ¯ŲŠØ¯ØŠ",
"Share from Files" : "Ų…Ø´Ø§ØąŲƒØŠ Ų…Ų† Ø§Ų„Ų…Ų„ŲØ§ØĒ",
"Pending share" : "Ų…Ø´Ø§ØąŲƒØŠ Ų…ŲØšŲ„Ų‘Ų‚ØŠ",
"Add this attachment" : "ØĨØļØ§ŲØŠ Ų‡Ø°Ø§ Ø§Ų„Ų…ØąŲŲ‚",
"Show in Files" : "ØšØąØļ ؁؊ Ø§Ų„Ų…Ų„ŲØ§ØĒ ",
"Download" : "ØĒŲ†Ø˛ŲŠŲ„",
"Remove attachment" : "Ø­Ø°Ų Ø§Ų„Ų…ŲØąŲŲ‚",
"Delete Attachment" : "Ų…ØŗØ­ Ø§Ų„Ų…ØąŲŲ‚",
"Restore Attachment" : "ØĨØŗØĒؚاد؊ Ø§Ų„Ų…ØąŲŲ‚",
"File to share" : "؅؄؁ Ų„Ų„Ų…Ø´Ø§ØąŲƒØŠ",
"Invalid path selected" : "ØĒŲ… ØĒØ­Ø¯ŲŠØ¯ Ų…ØŗØ§Øą ØēŲŠØą ØĩØ­ŲŠØ­",
"Open in sidebar view" : "؁ØĒØ­ ؁؊ Ø§Ų„Ø´ØąŲŠØˇ Ø§Ų„ØŦØ§Ų†Ø¨ŲŠ ",
"Open in bigger view" : "؁ØĒØ­ ؁؊ Ų†Ø§ŲØ°ØŠ ØŖŲƒØ¨Øą ",
"Description" : "Ø§Ų„ŲˆØĩ؁",
"Attachments" : "Ø§Ų„Ų…ØąŲŲ‚Ø§ØĒ",
"Comments" : "ØĒØšŲ„ŲŠŲ‚Ø§ØĒ",
"Modified" : "ØšŲØ¯Ų„",
"Created" : "ØŖŲŲ†Ø´ØĻ",
"The title cannot be empty." : "Ų„Ø§ ŲŠŲ…ŲƒŲ† ØĒØąŲƒ Ø§Ų„ØšŲ†ŲˆØ§Ų† ŲØ§ØąØēŲ‹Ø§.",
"No comments yet. Begin the discussion!" : "Ų„Ø§ ؊؈ØŦد ØĒØšŲ„ŲŠŲ‚Ø§ØĒ بؚد, Ø§Ø¨Ø¯ØŖ Ø§Ų„Ų†Ų‚Ø§Ø´ Ø§Ų„ØĸŲ†!",
"Failed to load comments" : "ŲØ´Ų„ ؁؊ ØĒØ­Ų…ŲŠŲ„ Ø§Ų„ØĒØšŲ„ŲŠŲ‚Ø§ØĒ ",
"Modified" : "ØĸØŽØą ØĒØšØ¯ŲŠŲ„",
"Upload attachment" : "ØąŲØš Ø§Ų„Ų…ØąŲŲ‚Ø§ØĒ",
"Save" : "Ø­ŲØ¸",
"The comment cannot be empty." : "Ø§Ų„ØĒØšŲ„ŲŠŲ‚ Ų„Ø§ŲŠŲ…ŲƒŲ† Ø§Ų† ŲŠŲƒŲˆŲ† ŲØ§ØąØēا.",
"The comment cannot be longer than 1000 characters." : "Ø§Ų„ØĒØšŲ„ŲŠŲ‚ Ų„Ø§ ŲŠŲ…ŲƒŲ† Ø§Ų† ŲŠŲƒŲˆŲ† Ø§ØˇŲˆŲ„ Ų…Ų† 1000 Ø­ØąŲ.",
"In reply to" : "ŲŠŲ‚ŲˆŲ… Ø¨Ø§Ų„ØąØ¯ ØšŲ„Ų‰",
"Cancel reply" : "ØĨŲ„ØēØ§ØĄ Ø§Ų„ØąØ¯",
"Reply" : "ØąØ¯",
"Update" : "ØĒØ­Ø¯ŲŠØĢ",
"Created:" : "ØĒØ§ØąŲŠØŽ Ø§Ų„ØĨŲ†Ø´Ø§ØĄ :",
"Description" : "Ø§Ų„ŲˆØĩ؁",
"(Unsaved)" : "(ØēŲŠØą Ų…Ø­ŲŲˆØ¸)",
"(Savingâ€Ļ)" : "(ŲŠŲØ­ŲØ¸..)",
"Formatting help" : "Ų…ØŗØ§ØšØ¯ØŠ Ø§Ų„ØĒŲ†ØŗŲŠŲ‚",
"Edit description" : "ØĒØšØ¯ŲŠŲ„ Ø§Ų„ŲˆØĩ؁",
"View description" : "ØĨØ¸Ų‡Ø§Øą Ø§Ų„ŲˆØĩ؁",
"Add Attachment" : "ØŖØļ؁ Ų…Ų„Ø­Ų‚",
"Write a description â€Ļ" : "؃ØĒاب؊ ؈Øĩ؁...",
"Choose attachment" : "ا؎ØĒŲŠØ§Øą Ų…ØąŲŲ‚",
"Assign a due date to this cardâ€Ļ" : "ØĒØšŲŠŲŠŲ† ØĒØ§ØąŲŠØŽ Ø§ØŗØĒØ­Ų‚Ø§Ų‚ Ų„Ų‡Ø°Ų‡ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ...",
"Set a due date" : "ØĒØšŲŠŲŠŲ† ØĒØ§ØąŲŠØŽ Ø§Ų„Ø§Ų†ØŦØ§Ø˛",
"Add due date" : "ØŖØļؐ؁ ØĒØ§ØąŲŠØŽ Ø§Ų„Ø§ØŗØĒØ­Ų‚Ø§Ų‚",
"Choose a date" : "ØĨØŽØĒŲŽØą ØĒØ§ØąŲŠØŽØ§Ų‹",
"Remove due date" : "Ø§Ø˛Ø§Ų„ØŠ ØĒØ§ØąŲŠØŽ Ø§Ų„Ø§Ų†ØŦØ§Ø˛",
"Mark as done" : "ØĒŲ…ŲŠŲŠØ˛ ŲƒŲ…ŲŲ†ØŦŲŽØ˛",
"Due at:" : "ØĒØ§ØąŲŠØŽ Ø§Ų„Ø§ØŗØĒØ­Ų‚Ø§Ų‚:",
"Not done" : "ØēŲŠØą Ų…ŲŲ†ØŦŲŽØ˛ØŠ",
"Unarchive card" : "ØĨŲ„ØēØ§ØĄ ØŖØąØ´ŲØŠ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ ",
"Archive card" : "ØŖØąØ´ŲØŠ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ",
"Select Date" : "ا؎ØĒØą Ø§Ų„ØĒØ§ØąŲŠØŽ ",
"Set due date for later today" : "ØšŲŠŲ‘ŲŲ† ØĸØŽŲØąŲŽ Ų‡Ø°Ø§ Ø§Ų„ŲŠŲˆŲ… ŲƒŲ…ŲˆØšØ¯Ų Ų„Ø§ØŗØĒØ­Ų‚Ø§Ų‚ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ",
"Set due date for tomorrow" : "ØšŲŠŲ‘ŲŲ† ŲŠŲˆŲ… Ø§Ų„Øēد ŲƒŲ…ŲˆØšØ¯Ų Ų„Ø§ØŗØĒØ­Ų‚Ø§Ų‚ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ",
"Set due date for this weekend" : "ØšŲŠŲ‘ŲŲ† Ų†Ų‡Ø§ŲŠØŠ Ų‡Ø°Ø§ Ø§Ų„ØŖØŗØ¨ŲˆØš ŲƒŲ…ŲˆØšØ¯Ų Ų„Ø§ØŗØĒØ­Ų‚Ø§Ų‚ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ",
"Set due date for next week" : "ØšŲŠŲ‘ŲŲ† Ø§Ų„ØŖØŗØ¨ŲˆØš Ø§Ų„Ų…ŲŲ‚Ø¨Ų„ ŲƒŲ…ŲˆØšØ¯Ų Ų„Ø§ØŗØĒØ­Ų‚Ø§Ų‚ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ",
"Assign a tag to this cardâ€Ļ" : "Ø§Ų†ØŗØ¨ ŲˆØŗŲ… Ø§Ų„Ų‰ Ų‡Ø°Ų‡ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ..",
"Select or create a tagâ€Ļ" : "ØĨØŽØĒŲŽØą ØŖŲˆ ØŖŲ†Ø´ŲØĻŲ’ ŲˆØŗŲ…Ø§Ų‹ ...",
"Create a new tag:" : "ØĨŲ†Ø´Ø§ØĄ ØŗŲŲ…ŲŽØŠŲ tag ØŦØ¯ŲŠØ¯ØŠ:",
"(group)" : "(Ų…ØŦŲ…ŲˆØšØŠ)",
"Next week – {timeLocale}" : "Ø§Ų„ØŖØŗØ¨ŲˆØš Ø§Ų„Ų‚Ø§Ø¯Ų… – {timeLocale}",
"Todo items" : "Ų‚Ø§ØĻŲ…ØŠ Ø§Ų„Ų…Ų‡Ø§Ų…",
"{count} comments, {unread} unread" : "{ؚدد} Ø§Ų„ØĒØšŲ„ŲŠŲ‚Ø§ØĒ، {ØēŲŠØą Ų…Ų‚ØąŲˆØĄØŠ} ØēŲŠØą Ų…Ų‚ØąŲˆØĄØŠ",
"Edit card title" : "ØĒØšØ¯ŲŠŲ„ Ø§ØŗŲ… Ø§Ų„Ų‚Ø§ØĻŲ…ØŠ",
"Card details" : "ØĒŲØ§ØĩŲŠŲ„ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ",
"Assign to me" : "ŲŠŲ†ØŗØ¨ Ų„ŲŠ",
"Unassign myself" : "ØĨŲ„ØēØ§ØĄ ØĒØšŲŠŲŠŲ†ŲŠ ",
"Mark as not done" : "ØĒŲ…ŲŠŲŠØ˛ ŲƒŲ€ \"ØēŲŠØą Ų…Ų†ØĒŲ‡Ų\"",
"Delete card" : "Ø­Ø°Ų Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ",
"Card deleted" : "Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ Ø­ŲŒØ°ŲØĒ ",
"seconds ago" : "ØĢŲˆØ§Ų†Ų Ų…ØļØĒ",
"Keyboard shortcuts" : "ØĨØŽØĒØĩØ§ØąØ§ØĒ Ų„ŲˆØ­ØŠ Ø§Ų„Ų…ŲØ§ØĒŲŠØ­",
"Boost your productivity using Deck with keyboard shortcuts." : "ØļØ§ØšŲŲ ØĨŲ†ØĒاØŦ؊ØĒ؃ Ø¨Ø§ØŗØĒØšŲ…Ø§Ų„ \"ØąŲØ˛ŲŽŲ… Ø§Ų„Ø¨ØˇØ§Ų‚Ø§ØĒ\" Deck، ؈ ا؎ØĒØĩØ§ØąØ§ØĒ Ų„ŲˆØ­ØŠ Ø§Ų„Ų…ŲØ§ØĒŲŠØ­ ",
"Board actions" : "ØĨØŦØąØ§ØĄØ§ØĒ Ø§Ų„Ų„ŲˆØ­ØŠ",
"Keyboard shortcut" : "ØĨØŽØĒØĩØ§Øą Ų„ŲˆØ­ØŠ Ø§Ų„Ų…ŲØ§ØĒŲŠØ­",
"Action" : "Ø§Ų„ØĨØŦØąØ§ØĄ",
"Shift" : "Ø§Ų„ØšØ§Ų„ŲŠ shift",
"Scroll" : "ØĒØ­ØąŲŠŲƒ",
"Scroll sideways" : "ØĒØ­ØąŲŠŲƒ Ų„Ų„ØŦŲ†Ø¨",
"Navigate between cards" : "Ø§Ų„ØĒŲ†Ų‚Ų‘ŲŲ„ Ø¨ŲŠŲ† Ø§Ų„Ø¨ØˇØ§Ų‚Ø§ØĒ",
"Esc" : "ØŽØąŲˆØŦ",
"Close card details" : "ØŖØē؄ؐ؂ ØĒŲØ§ØĩŲŠŲ„ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ",
"Ctrl" : "ØĒØ­ŲƒŲ… Ctrl",
"Search" : "بحØĢ",
"Show card filters" : "ØŖØ¸Ų‡ŲØą ŲŲ„Ø§ØĒØą Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ",
"Clear card filters" : "ØĨŲ…Ø­Ų ŲŲ„Ø§ØĒØą Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ",
"Show help dialog" : "ØŖØ¸Ų‡ŲØą Ų†Ø§ŲØ°ØŠ Ø­ŲˆØ§Øą Ø§Ų„Ų…ØŗØ§ØšØ¯ØŠ",
"Card actions" : "ØĨØŦØąØ§ØĄØ§ØĒ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ",
"The following actions can be triggered on the currently highlighted card" : "Ø§Ų„ØĨØŦØąØ§ØĄØ§ØĒ Ø§Ų„ØĒØ§Ų„ŲŠØŠ ŲŠŲ…ŲƒŲ† ØĒŲ†ŲŲŠØ°Ų‡Ø§ ØšŲ„Ų‰ Ø§Ų„Ø¨ØˇØ§Ų‚Ø§ØĒ Ø§Ų„Ų…ŲØšŲ„Ų‘Ų…ØŠ Ø­Ø§Ų„ŲŠØ§Ų‹",
"Enter" : "ØĨØ¯ØŽØ§Ų„",
"Space" : "Ø§Ų„Ų…Ø¯Ų‰",
"Open card details" : "ØĨ؁ØĒŲŽØ­ ØĒŲØ§ØĩŲŠŲ„ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ",
"Edit the card title" : "ØšØ¯Ų‘ŲŲ„ ØšŲ†ŲˆØ§Ų† Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ",
"Assign yourself to the current card" : "ØŖØŗŲ†ŲØ¯ Ų‡Ø°Ų‡ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ ØĨŲ„Ų‰ Ų†ŲØŗŲŲƒ",
"Archive/unarchive the current card" : "ØŖØąØ´ŲŲ ØŖŲˆ ØŖŲ„Øēؐ ØĒØąØ´ŲŠŲ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ Ø§Ų„Ø­Ø§Ų„ŲŠØŠ",
"Mark card as completed/not completed" : "ØšŲ„Ų‘ŲŲ… Ø¨ØˇØ§Ų‚ØŠ ŲƒŲ€\"Ų…Ų†ØŦØ˛ØŠ\" ØŖŲˆ \"ØēŲŠØą Ų…Ų†ØŦØ˛ØŠ\"",
"Open card menu" : "ØĨ؁ØĒŲŽØ­ Ų‚Ø§ØĻŲ…ØŠ Ø§Ų„Ø¨ØˇØ§Ų‚Ø§ØĒ",
"All boards" : "ØŦŲ…ŲŠØš Ø§Ų„Ø§Ų„ŲˆØ§Ø­",
"Archived boards" : "Ø§Ų„Ø§Ų„ŲˆØ§Ø­ Ø§Ų„Ų…Ø¤ØąØ´ŲØŠ",
"Shared with you" : "ØĒŲ… Ų…Ø´Ø§ØąŲƒØĒŲ‡Ø§ Ų…ØšŲƒ",
"Deck settings" : "ØĨؚداداØĒ ØąŲØ˛ŲŽŲ…Ų Ø§Ų„Ø¨ØˇØ§Ų‚Ø§ØĒ",
"Use bigger card view" : "Ø§ØŗØĒØŽØ¯Ø§Ų… Ø¨ØˇØ§Ų‚ØŠ ØšØąØļ ØŖŲƒØ¨Øą ",
"Show card ID badge" : "ØŖØšØąØļ Ø´Ø§ØąØŠ ØąŲ‚Ų… Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ",
"Show boards in calendar/tasks" : "ØĨØ¸Ų‡Ø§Øą Ø§Ų„Ų„ŲˆØ­ ؁؊ Ø§Ų„ØĒŲ‚ŲˆŲŠŲ…/Ø§Ų„Ų…Ų‡Ø§Ų…",
"Limit board creation to some groups" : "Ų‚ŲŽØĩŲ’ØąŲ Ø­ŲŽŲ‚Ų‘Ų ØĨŲ†Ø´Ø§ØĄ Ø§Ų„ØŖŲ„ŲˆØ§Ø­ ØšŲ„Ų‰ بؚØļ Ø§Ų„Ų…ØŦŲ…ŲˆØšØ§ØĒ ",
"Users outside of those groups will not be able to create their own boards, but will still be able to work on boards that have been shared with them." : "Ø§Ų„Ų…ØŗØĒØŽØ¯ŲŲ…ŲˆŲ† Ų…Ų† ØŽØ§ØąØŦ ØĒŲ„Ųƒ Ø§Ų„Ų…ØŦŲ…ŲˆØšØ§ØĒ Ų„Ų† ŲŠŲ…ŲƒŲ†ŲƒŲ… ØĨŲ†Ø´Ø§ØĄ Ų„ŲˆØ­Ø§ØĒŲ‡Ų… Ø§Ų„ØŽØ§ØĩØŠØ› Ų„ŲƒŲ† ŲŠŲ…ŲƒŲ†Ų‡Ų… Ø§Ų„ØšŲ…Ų„ ØšŲ„Ų‰ Ø§Ų„Ų„ŲˆØ­Ø§ØĒ Ø§Ų„ØĒ؊ ØĒØĒŲ…Ų‘ Ų…Ø´Ø§ØąŲƒØĒŲ‡Ø§ Ų…ØšŲ‡Ų….",
"Board details" : "ØĒŲØ§ØĩŲŠŲ„ Ų„ŲˆØ­",
"Edit board" : "ØĒØšØ¯ŲŠŲ„ Ø§Ų„Ų„ŲˆØ­",
"Clone board" : "Ø§ØŗØĒŲ†ØŗØŽ Ø§Ų„Ų„ŲˆØ­",
"Unarchive board" : "ØĨŲ„ØēØ§ØĄ ØŖØąØ´ŲØŠ Ø§Ų„Ų„ŲˆØ­",
"Archive board" : "ØŖØąØ´ŲØŠ Ø§Ų„Ų„ŲˆØ­ ",
"Export board" : "ØĒØĩØ¯ŲŠØą Ø§Ų„Ų„ŲˆØ­ØŠ",
"Turn on due date reminders" : "ØĒŲØšŲŠŲ„ Ø§Ų„ØĒØ°ŲƒŲŠØąØ§ØĒ Ų„Ų„Ų…ŲˆØšØ¯ Ø§Ų„Ų…Ø­Ø¯Ø¯ ",
"Turn off due date reminders" : "ØĨŲŠŲ‚Ø§Ų ØĒØ´ØēŲŠŲ„ Ø§Ų„ØĒØ°ŲƒŲŠØąØ§ØĒ Ų„Ų„Ų…ŲˆØšØ¯ Ø§Ų„Ų…Ø­Ø¯Ø¯Ø¯",
"Due date reminders" : "ØĒØ°ŲƒŲŠØąØ§ØĒ Ø§Ų„Ų…ŲˆØšØ¯ Ø§Ų„Ų…Ø­Ø¯Ø¯ ",
"All cards" : "ØŦŲ…ŲŠØš Ø§Ų„Ø¨ØˇØ§Ų‚Ø§ØĒ ",
"Assigned cards" : "Ø§Ų„Ø¨ØˇØ§Ų‚Ø§ØĒ Ø§Ų„Ų…ØŽØĩØĩØŠ",
"No notifications" : "Ų„Ø§ ØĒ؈ØŦد ØĨØ´ØšØ§ØąØ§ØĒ",
"Delete board" : "Ų…ØŗØ­ Ø§Ų„Ų„ŲˆØ­",
"Board {0} deleted" : "Ø§Ų„Ų„ŲˆØ­ {0} ØĒŲ… Ų…ØŗØ­Ų‡",
"Only assigned cards" : "Ø§Ų„Ø¨ØˇØ§Ų‚Ø§ØĒ Ø§Ų„Ų…ØŽØĩØĩØŠ ŲŲ‚Øˇ",
"No reminder" : "Ų„Ø§ ؊؈ØŦد ØĒØ°ŲƒŲŠØą ",
"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}؟ Ų‡Ø°Ø§ ØŗŲŠØ¤Ø¯ŲŠ ØĨŲ„Ų‰ Ø­Ø°Ų ŲƒŲ„ Ø¨ŲŠØ§Ų†Ø§ØĒ Ų‡Ø°Ų‡ Ø§Ų„Ų„ŲˆØ­ØŠ Ø¨Ų…Ø§ ؁؊ Ø°Ų„Ųƒ Ø§Ų„Ø¨ØˇØ§Ų‚Ø§ØĒ Ø§Ų„Ų…Ø¤ØąØ´ŲØŠ.",
"Delete the board?" : "Ų…ØŗØ­ Ø§Ų„Ų„ŲˆØ­ØŸ",
"Loading filtered view" : "ØŦØ§ØąŲ ØĒØ­Ų…ŲŠŲ„ Ø§Ų„ØĒØĩŲŲŠØŠ ",
"Today" : "Ø§Ų„ŲŠŲˆŲ…",
"Tomorrow" : "Øēدا",
"No due" : "ØēŲŠØą Ų…Ø­Ø¯Ø¯",
"Search for {searchQuery} in all boards" : "Ø§Ų„Ø¨Ø­ØĢ ØšŲ† {searchQuery} ؁؊ ØŦŲ…ŲŠØš Ø§Ų„Ų„ŲˆØ­",
"No results found" : "Ų„Ø§ ؊ØĒŲ… Ø§Ų„ØšØĢŲˆØą ØšŲ„Ų‰ ØŖŲŠ Ų†ØĒاØĻØŦ ",
"This weekend – {timeLocale}" : "Ų†Ų‡Ø§ŲŠØŠ Ų‡Ø°Ø§ Ø§Ų„ØŖØŗØ¨ŲˆØš – {timeLocale}",
"Deck board {name}\n* Last modified on {lastMod}" : "Ø§ØŗŲ… Ø§Ų„Ų„ŲˆØ­ØŠ {name} \n* ØĸØŽØą ØĒØšØ¯ŲŠŲ„ Ų„Ų‡Ø§ ؁؊ {lastMod}",
"{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} Ų…ŲŲ„Ø§Ø­Ø¸Ø§ØĒ",
"{nbCards} cards" : "{nbCards} Ø¨ØˇØ§Ų‚Ø§ØĒ",
"Click to expand comment" : "ØĨØļØēØˇ Ų„Ų„ØĒŲˆØŗØš ؁؊ Ø§Ų„Ų…Ų„Ø§Ø­Ø¸Ø§ØĒ",
"Create a new card" : "ØŖŲ†Ø´Ų‰ Ø¨ØˇØ§Ų‚ØŠ ØŦØ¯ŲŠØ¯ØŠ ",
"Card title" : "ØšŲ†ŲˆØ§Ų† Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ ",
"Create card" : "ØŖŲ†Ø´Ų‰ Ø¨ØˇØ§Ų‚ØŠ ",
"Creating the new card â€Ļ" : "ØŖŲ†Ø´Ų‰ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ Ø§Ų„ØŦØ¯ŲŠØ¯ØŠ ",
"Card \"{card}\" was added to \"{board}\"" : "\"{Ø¨ØˇØ§Ų‚ØŠ}\" ØĒŲ…ØĒ ØĨØļØ§ŲØĒŲ‡Ø§ ؁؊ \"{Ø§Ų„Ų„ŲˆØ­}\"",
"Open card" : "؁ØĒØ­ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ ",
"Close" : "ØĨØēŲ„Ø§Ų‚",
"No upcoming cards" : "Ų„Ø§ ؊؈ØŦد Ø¨ØˇØ§Ų‚Ø§ØĒ Ų‚Ø§Ø¯Ų…ØŠ ",
"upcoming cards today" : "Ø§Ų„Ø¨ØˇØ§Ų‚Ø§ØĒ Ø§Ų„Ų‚Ø§Ø¯Ų…ØŠ Ø§Ų„ŲŠŲˆŲ…ŲŽ",
"upcoming cards tomorrow" : "Ø§Ų„Ø¨ØˇØ§Ų‚Ø§ØĒ Ø§Ų„Ų‚Ø§Ø¯Ų…ØŠ ØēØ¯Ø§Ų‹",
"upcoming cards" : "Ø§Ų„Ø¨ØˇØ§Ų‚Ø§ØĒ Ø§Ų„Ų‚Ø§Ø¯Ų…ØŠ",
"New card" : "Ø¨ØˇØ§Ų‚ØŠ ØŦØ¯ŲŠØ¯ØŠ",
"Due on {date}" : "Ų…ØˇŲ„ŲˆØ¨ ؁؊ {date}",
"Tomorrow – {timeLocale}" : "ØēØ¯Ø§Ų‹ – {timeLocale}",
"Later today – {timeLocale}" : "؁؊ ŲˆŲ‚ØĒ Ų„Ø§Ø­Ų‚Ų Ø§Ų„ŲŠŲˆŲ… – {timeLocale}",
"Link to a board" : "ØąØ¨Øˇ Ø¨Ų„ŲˆØ­",
"Link to a card" : "ØąØ¨Øˇ Ø¨Ø¨ØˇØ§Ų‚ØŠ",
"Create a card" : "ØŖŲ†Ø´Ų‰ Ø¨ØˇØ§Ų‚ØŠ ",
"Message from {author} in {conversationName}" : "ØąØŗØ§Ų„ØŠ Ų…Ų† {author} ؁؊ {conversationName}",
"Something went wrong" : "حدØĢ ØŽØˇØŖ Ų…Ø§",
"Failed to upload {name}" : "ŲØ´Ų„ ؁؊ ØąŲØš {Ø§ØŗŲ…}",
"Maximum file size of {size} exceeded" : " ØĒØŦØ§ŲˆØ˛ Ø§Ų„Ų…Ų„Ų Ø§Ų„Ø­Ø¯ Ø§Ų„Ø§Ų‚ØĩŲ‰ {size} Ø¨Ø§Ų„Ø­ØŦŲ… Ø§Ų„Ų…ØŗŲ…ŲˆØ­ ",
"Error creating the share" : "ØŽØˇØŖ ؁؊ ØĨŲ†Ø´Ø§ØĄ Ø§Ų„Ų…Ø´Ø§ØąŲƒØŠ",
"Share with a Deck card" : "Ų…Ø´Ø§ØąŲƒØŠ Ų…Øš Ø¨ØˇØ§Ų‚ØŠ Deck",
"Share {file} with a Deck card" : "Ų…Ø´Ø§ØąŲƒØŠ Ø§Ų„Ų…Ų„Ų {file} Ų…Øš Ø¨ØˇØ§Ų‚ØŠ Deck",
"Share" : "Ų…Ø´Ø§ØąŲƒØŠ ",
"A <strong>card description</strong> inside the Deck app has been changed" : "<strong>؈Øĩ؁ Ø§Ų„Ø¨ØˇØ§Ų‚ØŠ</strong>Ø¯Ø§ØŽŲ„ ØĒØˇØ¨ŲŠŲ‚ Deck Ų‚Ø¯ ØĒØēŲŠØąØĒ.",
"Timeline" : "Ø§Ų„ØŦØ¯ŲˆŲ„ Ø§Ų„Ø˛Ų…Ų†ŲŠ",
"Share board with a user, group or circle â€Ļ" : "Ų…Ø´Ø§ØąŲƒØŠ Ø§Ų„Ų„ŲˆØ­ Ų…Øš Ų…ØŗØĒØŽØ¯Ų…ØŒŲ…ØŦŲ…ŲˆØšØŠ ØŖŲˆ داØĻØąØŠ ..",
"Searching for users, groups and circles â€Ļ" : "ابحØĢ ØšŲ† ØŖØšØļØ§ØĄØŒ Ų…ØŦŲ…ŲˆØšØ§ØĒ ØŖŲˆ Ø­Ų„Ų‚Ø§ØĒ ...",
"(Circle)" : "(داØĻØąØŠ)",
"Assign to users/groups/circles" : "Ø§Ų†ØŗØ¨ Ø§Ų„Ų‰ Ø§Ų„Ų…ØŗØĒØŽØ¯Ų…ŲŠŲ†ØŒØ§Ų„Ų…ØŦŲ…ŲˆØšØ§ØĒØŒØ§Ų„Ø¯ŲˆØ§ØĻØą",
"Next week" : "Ø§Ų„Ø§ØŗØ¨ŲˆØš Ø§Ų„Ų‚Ø§Ø¯Ų…",
"Next month" : "Ø§Ų„Ø´Ų‡Øą Ø§Ų„Ų‚Ø§Ø¯Ų…",
"List is empty" : "Ø§Ų„Ų‚Ø§ØĻŲ…ØŠ ŲØ§ØąØēØŠ",
"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 ØĨŲ„Ų‰ Ų…Ų†Øš Ø§Ų„Ų…ØŗØĒØŽØ¯Ų…ŲŠŲ† Ø§Ų„Ø°ŲŠŲ† Ų„ŲŠØŗŲˆØ§ ØŦØ˛ØĄŲ‹Ø§ Ų…Ų† ØĒŲ„Ųƒ Ø§Ų„Ų…ØŦŲ…ŲˆØšØ§ØĒ Ų…Ų† ØĨŲ†Ø´Ø§ØĄ Ų„ŲˆØ­Ø§ØĒŲ‡Ų… Ø§Ų„ØŽØ§ØĩØŠ. ØŗŲŠØ¸Ų„ Ø§Ų„Ų…ØŗØĒØŽØ¯Ų…ŲˆŲ† Ų‚Ø§Ø¯ØąŲŠŲ† ØšŲ„Ų‰ Ø§Ų„ØšŲ…Ų„ ØšŲ„Ų‰ Ø§Ų„Ų„ŲˆØ­Ø§ØĒ Ø§Ų„ØĒ؊ ØĒŲ…ØĒ Ų…Ø´Ø§ØąŲƒØĒŲ‡Ø§ Ų…ØšŲ‡Ų….",
"Filter by completed" : "؁؄ØĒØąØŠ Ø¨Ø­ØŗØ¨ Ø§Ų„ØĨŲ†ØŦØ§Ø˛"
"Settings" : "Ø§Ų„ØĨؚداداØĒ",
"An error occurred" : "ØˇØąØŖ Ų‡Ų†Ø§Ųƒ ØŽØˇØŖ"
},"pluralForm" :"nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;"
}

View File

@@ -1,115 +1,36 @@
OC.L10N.register(
"deck",
{
"Deck" : "Tarxeteru",
"Upcoming cards" : "Tarxetes prÃŗximes",
"Load more" : "Cargar mÃĄs",
"Deck" : "Deck",
"Personal" : "Personal",
"Deck board" : "Mesa de tarxetes",
"%s on %s" : "%s n %s",
"Action needed" : "AiciÃŗn necesaria",
"copy" : "copia",
"To do" : "Xera pendiente",
"Finished" : "FinÃŗ",
"Action needed" : "Precísase aiciÃŗn",
"Later" : "MÃĄs sero",
"Done" : "Fecho",
"Example Task 3" : "Xera d'exemplu 3",
"Example Task 2" : "Xera d'exemplu 2",
"Example Task 1" : "Xera d'exemplu 1",
"The file was uploaded" : "XubiÃŗse'l ficheru",
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "El ficheru xubíu supera la direutiva ÂĢupload_max_filesizeÂģ del ficheru php.ini",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "El ficheru xubíu supera la direutiva ÂĢMAX_FILE_SIZEÂģ que s'especificÃŗ nel formulariu HTML",
"No file was uploaded" : "Nun se xubiÃŗ nengÃēn ficheru",
"Missing a temporary folder" : "Falta una carpeta temporal",
"Could not write file to disk" : "Nun se pudo escribir el ficheru nel discu",
"A PHP extension stopped the file upload" : "Una estensiÃŗn PHP parÃŗ la xuba de ficheros",
"No file uploaded or file size exceeds maximum of %s" : "Nun se xubiÃŗ nengÃēn ficheru o'l tamaÃąu del ficheru supera'l mÃĄximu de %s",
"Invalid date, date format must be YYYY-MM-DD" : "La data ye invÃĄlida, el so formatu ha ser AAAA-MM-DD",
"Move card" : "Mover la tarxeta",
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "El ficheru xubíu perpasa la direutiva de xuba upload_max_filesize en php.ini",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "El ficheru xubíu perpasa la direutiva \"MAX_FILE_SIZE\" especificada nel formulariu HTML",
"No file was uploaded" : "Nun se xubieron fichjeros",
"Missing a temporary folder" : "Falta un direutoriu temporal",
"Could not write file to disk" : "Nun pudo escribise nel discu'l ficheru",
"A PHP extension stopped the file upload" : "Una estensiÃŗn de PHP parÃŗ la xuba de ficheros",
"Cancel" : "Encaboxar",
"File already exists" : "El ficheru yÃĄ esiste",
"Drop your files to upload" : "Suelta los ficheros pa xubilos",
"Add card" : "Amestar una tarxeta",
"Archived cards" : "Tarxetes archivaes",
"Add list" : "Amestar una llista",
"List name" : "Nome de la llista",
"Open" : "Abrir",
"Completed" : "CompletÃĄu",
"Next 24 hours" : "Les prÃŗximes 24 hores",
"Next 7 days" : "Los prÃŗximos 7 díes",
"Next 30 days" : "Los prÃŗximos 30 díes",
"Open details" : "Abrir los detalles",
"Details" : "Detalles",
"Sharing" : "ComparticiÃąon",
"Show archived cards" : "Amosar tarxetes archivaes",
"Sharing" : "Compartiendo",
"Tags" : "Etiquetes",
"Deleted items" : "Elementos desaniciaos",
"Activity" : "ActividÃĄ",
"Deleted lists" : "Llistes desaniciaes",
"Undo" : "Desfacer",
"Deleted cards" : "Tarxetes desaniciaes",
"(Group)" : "(Grupu)",
"(Team)" : "(Equipu)",
"Can edit" : "Pue editar",
"Owner" : "Propietariu",
"Can edit" : "Can edit",
"Can share" : "Can share",
"Delete" : "Desaniciar",
"Transfer" : "Tresferir",
"Edit list title" : "Editar el títulu de la llista",
"Archive all cards" : "Archivar toles carpetes",
"Unarchive all cards" : "Desarchivar toles tarxetes",
"Delete list" : "Desaniciar la llista",
"Archive all cards in this list" : "Archivar toles tarxetes d'esta llista",
"Unarchive all cards in this list" : "Desarchivar toles tarxetes d'esta llista",
"Add a new card" : "Amestar una tarxeta nueva",
"Card name" : "Nome de la tarxeta",
"List deleted" : "DesaniciÃŗse la llista",
"Edit" : "Editar",
"Add a new tag" : "Amestar una etiqueta nueva",
"Members" : "Miembros",
"Show in Files" : "Amosar en Ficheros",
"Download" : "Baxar",
"Invalid path selected" : "SeleicionÃŗse un camín invÃĄlidu",
"Comments" : "Comentarios",
"Modified" : "ModificÃŗse",
"The title cannot be empty." : "El títulu nun pue tar baleru",
"No comments yet. Begin the discussion!" : "Nun hai nengÃēn comentariu. ÂĄComienza'l discutiniu!",
"Failed to load comments" : "Nun se puen cargar los comentarios",
"Save" : "Guardar",
"The comment cannot be empty." : "El comentariu nun pue tar baleru.",
"In reply to" : "En rempuesta a",
"Reply" : "Responder",
"Update" : "Anovar",
"Created:" : "CreÃŗse'l",
"Details" : "Detalles",
"Description" : "DescripciÃŗn",
"(Unsaved)" : "(ensin guardar)",
"(Savingâ€Ļ)" : "(Guardandoâ€Ļ)",
"Formatting help" : "Ayuda del formatu",
"Edit description" : "Editar la descripciÃŗn",
"View description" : "Ver la descripciÃŗn",
"Mark as done" : "Marcar como fecha",
"Archive card" : "Archivar la tarxeta",
"(group)" : "(grupu)",
"Next week – {timeLocale}" : "La prÃŗxima selmana – {timeLocale}",
"Delete card" : "Desaniciar la tarxeta",
"seconds ago" : "hai segundos",
"Keyboard shortcuts" : "Atayos del teclÃĄu",
"Keyboard shortcut" : "Atayos del teclÃĄu",
"Action" : "AiciÃŗn",
"Ctrl" : "Ctrl",
"Search" : "Guetar",
"Shared with you" : "CompartiÃŗse contigo",
"All cards" : "Toles tarxetes",
"No notifications" : "Nun hai nengÃēn avisu",
"No reminder" : "Nun hai nengÃēn recordatoriu",
"An error occurred" : "ProdÃēxose un error",
"Today" : "GÃŧei",
"Tomorrow" : "MaÃąana",
"No results found" : "Nun s'atopÃŗ nengÃēn resultÃĄu",
"This weekend – {timeLocale}" : "Esta fin de selmana – {timeLocale}",
"Close" : "Zarrar",
"Tomorrow – {timeLocale}" : "MaÃąana – {timeLocale}",
"Message from {author} in {conversationName}" : "Mensaxe de {author} en {conversationName}",
"Error creating the share" : "Hebo un error al crear la comparticiÃŗn",
"Share" : "Compartir",
"Timeline" : "Llinia de tiempu",
"Next week" : "La selmana que vien",
"Next month" : "Mes siguiente"
"Attachments" : "Axuntos",
"Comments" : "Comentarios",
"Modified" : "ModificÃŗse'l",
"Created" : "CreÃŗse",
"Save" : "Guardar",
"Update" : "Anovar",
"Settings" : "Settings"
},
"nplurals=2; plural=(n != 1);");

View File

@@ -1,113 +1,34 @@
{ "translations": {
"Deck" : "Tarxeteru",
"Upcoming cards" : "Tarxetes prÃŗximes",
"Load more" : "Cargar mÃĄs",
"Deck" : "Deck",
"Personal" : "Personal",
"Deck board" : "Mesa de tarxetes",
"%s on %s" : "%s n %s",
"Action needed" : "AiciÃŗn necesaria",
"copy" : "copia",
"To do" : "Xera pendiente",
"Finished" : "FinÃŗ",
"Action needed" : "Precísase aiciÃŗn",
"Later" : "MÃĄs sero",
"Done" : "Fecho",
"Example Task 3" : "Xera d'exemplu 3",
"Example Task 2" : "Xera d'exemplu 2",
"Example Task 1" : "Xera d'exemplu 1",
"The file was uploaded" : "XubiÃŗse'l ficheru",
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "El ficheru xubíu supera la direutiva ÂĢupload_max_filesizeÂģ del ficheru php.ini",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "El ficheru xubíu supera la direutiva ÂĢMAX_FILE_SIZEÂģ que s'especificÃŗ nel formulariu HTML",
"No file was uploaded" : "Nun se xubiÃŗ nengÃēn ficheru",
"Missing a temporary folder" : "Falta una carpeta temporal",
"Could not write file to disk" : "Nun se pudo escribir el ficheru nel discu",
"A PHP extension stopped the file upload" : "Una estensiÃŗn PHP parÃŗ la xuba de ficheros",
"No file uploaded or file size exceeds maximum of %s" : "Nun se xubiÃŗ nengÃēn ficheru o'l tamaÃąu del ficheru supera'l mÃĄximu de %s",
"Invalid date, date format must be YYYY-MM-DD" : "La data ye invÃĄlida, el so formatu ha ser AAAA-MM-DD",
"Move card" : "Mover la tarxeta",
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "El ficheru xubíu perpasa la direutiva de xuba upload_max_filesize en php.ini",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "El ficheru xubíu perpasa la direutiva \"MAX_FILE_SIZE\" especificada nel formulariu HTML",
"No file was uploaded" : "Nun se xubieron fichjeros",
"Missing a temporary folder" : "Falta un direutoriu temporal",
"Could not write file to disk" : "Nun pudo escribise nel discu'l ficheru",
"A PHP extension stopped the file upload" : "Una estensiÃŗn de PHP parÃŗ la xuba de ficheros",
"Cancel" : "Encaboxar",
"File already exists" : "El ficheru yÃĄ esiste",
"Drop your files to upload" : "Suelta los ficheros pa xubilos",
"Add card" : "Amestar una tarxeta",
"Archived cards" : "Tarxetes archivaes",
"Add list" : "Amestar una llista",
"List name" : "Nome de la llista",
"Open" : "Abrir",
"Completed" : "CompletÃĄu",
"Next 24 hours" : "Les prÃŗximes 24 hores",
"Next 7 days" : "Los prÃŗximos 7 díes",
"Next 30 days" : "Los prÃŗximos 30 díes",
"Open details" : "Abrir los detalles",
"Details" : "Detalles",
"Sharing" : "ComparticiÃąon",
"Show archived cards" : "Amosar tarxetes archivaes",
"Sharing" : "Compartiendo",
"Tags" : "Etiquetes",
"Deleted items" : "Elementos desaniciaos",
"Activity" : "ActividÃĄ",
"Deleted lists" : "Llistes desaniciaes",
"Undo" : "Desfacer",
"Deleted cards" : "Tarxetes desaniciaes",
"(Group)" : "(Grupu)",
"(Team)" : "(Equipu)",
"Can edit" : "Pue editar",
"Owner" : "Propietariu",
"Can edit" : "Can edit",
"Can share" : "Can share",
"Delete" : "Desaniciar",
"Transfer" : "Tresferir",
"Edit list title" : "Editar el títulu de la llista",
"Archive all cards" : "Archivar toles carpetes",
"Unarchive all cards" : "Desarchivar toles tarxetes",
"Delete list" : "Desaniciar la llista",
"Archive all cards in this list" : "Archivar toles tarxetes d'esta llista",
"Unarchive all cards in this list" : "Desarchivar toles tarxetes d'esta llista",
"Add a new card" : "Amestar una tarxeta nueva",
"Card name" : "Nome de la tarxeta",
"List deleted" : "DesaniciÃŗse la llista",
"Edit" : "Editar",
"Add a new tag" : "Amestar una etiqueta nueva",
"Members" : "Miembros",
"Show in Files" : "Amosar en Ficheros",
"Download" : "Baxar",
"Invalid path selected" : "SeleicionÃŗse un camín invÃĄlidu",
"Comments" : "Comentarios",
"Modified" : "ModificÃŗse",
"The title cannot be empty." : "El títulu nun pue tar baleru",
"No comments yet. Begin the discussion!" : "Nun hai nengÃēn comentariu. ÂĄComienza'l discutiniu!",
"Failed to load comments" : "Nun se puen cargar los comentarios",
"Save" : "Guardar",
"The comment cannot be empty." : "El comentariu nun pue tar baleru.",
"In reply to" : "En rempuesta a",
"Reply" : "Responder",
"Update" : "Anovar",
"Created:" : "CreÃŗse'l",
"Details" : "Detalles",
"Description" : "DescripciÃŗn",
"(Unsaved)" : "(ensin guardar)",
"(Savingâ€Ļ)" : "(Guardandoâ€Ļ)",
"Formatting help" : "Ayuda del formatu",
"Edit description" : "Editar la descripciÃŗn",
"View description" : "Ver la descripciÃŗn",
"Mark as done" : "Marcar como fecha",
"Archive card" : "Archivar la tarxeta",
"(group)" : "(grupu)",
"Next week – {timeLocale}" : "La prÃŗxima selmana – {timeLocale}",
"Delete card" : "Desaniciar la tarxeta",
"seconds ago" : "hai segundos",
"Keyboard shortcuts" : "Atayos del teclÃĄu",
"Keyboard shortcut" : "Atayos del teclÃĄu",
"Action" : "AiciÃŗn",
"Ctrl" : "Ctrl",
"Search" : "Guetar",
"Shared with you" : "CompartiÃŗse contigo",
"All cards" : "Toles tarxetes",
"No notifications" : "Nun hai nengÃēn avisu",
"No reminder" : "Nun hai nengÃēn recordatoriu",
"An error occurred" : "ProdÃēxose un error",
"Today" : "GÃŧei",
"Tomorrow" : "MaÃąana",
"No results found" : "Nun s'atopÃŗ nengÃēn resultÃĄu",
"This weekend – {timeLocale}" : "Esta fin de selmana – {timeLocale}",
"Close" : "Zarrar",
"Tomorrow – {timeLocale}" : "MaÃąana – {timeLocale}",
"Message from {author} in {conversationName}" : "Mensaxe de {author} en {conversationName}",
"Error creating the share" : "Hebo un error al crear la comparticiÃŗn",
"Share" : "Compartir",
"Timeline" : "Llinia de tiempu",
"Next week" : "La selmana que vien",
"Next month" : "Mes siguiente"
"Attachments" : "Axuntos",
"Comments" : "Comentarios",
"Modified" : "ModificÃŗse'l",
"Created" : "CreÃŗse",
"Save" : "Guardar",
"Update" : "Anovar",
"Settings" : "Settings"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

View File

@@ -2,42 +2,20 @@ OC.L10N.register(
"deck",
{
"Personal" : "Şəxsi",
"Finished" : "Bitdi",
"Done" : "Done",
"The file was uploaded" : "Fayl yÃŧkləndi",
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "YÃŧklənmiş fayl php.ini-də upload_max_filesize direktivini aÅŸÄąr",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "YÃŧklənilən faylÄąn həcmi HTML formasinda olan MAX_FILE_SIZE direktivində təyin dilmiş həcmi aÅŸÄąr.",
"The file was only partially uploaded" : "Fayl yalnÄąz qismən yÃŧklənib",
"No file was uploaded" : "Heç bir fayl yÃŧklənilmədi",
"Missing a temporary folder" : "MÃŧvəqqəti qovluq çatÄąÅŸmÄąr",
"Could not write file to disk" : "FaylÄą diskə yazmaq mÃŧmkÃŧn olmadÄą",
"A PHP extension stopped the file upload" : "PHP uzantÄąsÄą faylÄąn yÃŧklənməsini dayandÄąrdÄą",
"Cancel" : "DayandÄąr",
"Completed" : "Bitmişdir",
"Details" : "Detallar",
"Sharing" : "PaylaÅŸÄąlÄąr",
"Tags" : "Işarələr",
"Activity" : "Fəallıq",
"Can edit" : "Can edit",
"Can share" : "Can share",
"Owner" : "Owner",
"Delete" : "Sil",
"Edit" : "Dəyişiklik et",
"Download" : "YÃŧklə",
"Comments" : "Şərhlər",
"Description" : "AÃ§Äąqlanma",
"Modified" : "Dəyişdirildi",
"Save" : "Saxla",
"Reply" : "Cavab",
"Update" : "Yenilənmə",
"Created:" : "YaradÄąldÄą:",
"Description" : "AÃ§Äąqlanma",
"(group)" : "(qrup)",
"seconds ago" : "saniyələr Ãļncə",
"Search" : "AxtarÄąÅŸ",
"Shared with you" : "Shared with you",
"Today" : "Bu gÃŧn",
"Tomorrow" : "Sabah",
"Close" : "Bağla",
"Share" : "Paylaş"
"Settings" : "QuraşdÄąrmalar"
},
"nplurals=2; plural=(n != 1);");

View File

@@ -1,41 +1,19 @@
{ "translations": {
"Personal" : "Şəxsi",
"Finished" : "Bitdi",
"Done" : "Done",
"The file was uploaded" : "Fayl yÃŧkləndi",
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "YÃŧklənmiş fayl php.ini-də upload_max_filesize direktivini aÅŸÄąr",
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "YÃŧklənilən faylÄąn həcmi HTML formasinda olan MAX_FILE_SIZE direktivində təyin dilmiş həcmi aÅŸÄąr.",
"The file was only partially uploaded" : "Fayl yalnÄąz qismən yÃŧklənib",
"No file was uploaded" : "Heç bir fayl yÃŧklənilmədi",
"Missing a temporary folder" : "MÃŧvəqqəti qovluq çatÄąÅŸmÄąr",
"Could not write file to disk" : "FaylÄą diskə yazmaq mÃŧmkÃŧn olmadÄą",
"A PHP extension stopped the file upload" : "PHP uzantÄąsÄą faylÄąn yÃŧklənməsini dayandÄąrdÄą",
"Cancel" : "DayandÄąr",
"Completed" : "Bitmişdir",
"Details" : "Detallar",
"Sharing" : "PaylaÅŸÄąlÄąr",
"Tags" : "Işarələr",
"Activity" : "Fəallıq",
"Can edit" : "Can edit",
"Can share" : "Can share",
"Owner" : "Owner",
"Delete" : "Sil",
"Edit" : "Dəyişiklik et",
"Download" : "YÃŧklə",
"Comments" : "Şərhlər",
"Description" : "AÃ§Äąqlanma",
"Modified" : "Dəyişdirildi",
"Save" : "Saxla",
"Reply" : "Cavab",
"Update" : "Yenilənmə",
"Created:" : "YaradÄąldÄą:",
"Description" : "AÃ§Äąqlanma",
"(group)" : "(qrup)",
"seconds ago" : "saniyələr Ãļncə",
"Search" : "AxtarÄąÅŸ",
"Shared with you" : "Shared with you",
"Today" : "Bu gÃŧn",
"Tomorrow" : "Sabah",
"Close" : "Bağla",
"Share" : "Paylaş"
"Settings" : "QuraşdÄąrmalar"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

View File

@@ -1,331 +1,36 @@
OC.L10N.register(
"deck",
{
"You have created a new board {board}" : "ĐĄŅŠĐˇĐ´Đ°Đ´ĐžŅ…Ņ‚Đĩ ĐŊОвО Ņ‚Đ°ĐąĐģĐž {board}",
"{user} has created a new board {board}" : "{user} ŅŅŠĐˇĐ´Đ°Đ´Đĩ ĐŊОвО Ņ‚Đ°ĐąĐģĐž {board}",
"You have deleted the board {board}" : "Đ˜ĐˇŅ‚Ņ€Đ¸Ņ…Ņ‚Đĩ Ņ‚Đ°ĐąĐģĐžŅ‚Đž {board}",
"{user} has deleted the board {board}" : "{user} Đ¸ĐˇŅ‚Ņ€Đ¸ Ņ‚Đ°ĐąĐģĐžŅ‚Đž {board}",
"You have restored the board {board}" : "Đ’ŅŠĐˇŅŅ‚Đ°ĐŊĐžĐ˛Đ¸Ņ…Ņ‚Đĩ Ņ‚Đ°ĐąĐģĐžŅ‚Đž {board}",
"{user} has restored the board {board}" : "{user} Đ˛ŅŠĐˇŅŅ‚Đ°ĐŊОви Ņ‚Đ°ĐąĐģĐžŅ‚Đž {board}",
"You have shared the board {board} with {acl}" : "ĐĄĐŋОдĐĩĐģĐ¸Ņ…Ņ‚Đĩ Ņ‚Đ°ĐąĐģĐžŅ‚Đž {board} ҁ {acl}",
"{user} has shared the board {board} with {acl}" : "{user} ҁĐŋОдĐĩĐģи Ņ‚Đ°ĐąĐģĐžŅ‚Đž {board} ҁ {acl}",
"You have removed {acl} from the board {board}" : "ĐŸŅ€ĐĩĐŧĐ°Ņ…ĐŊĐ°Ņ…Ņ‚Đĩ {acl} ĐžŅ‚ Ņ‚Đ°ĐąĐģĐžŅ‚Đž {board}",
"{user} has removed {acl} from the board {board}" : "{user} ĐŋŅ€ĐĩĐŧĐ°Ņ…ĐŊа {acl} ĐžŅ‚ Ņ‚Đ°ĐąĐģĐžŅ‚Đž {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} Đ°Ņ€Ņ…Đ¸Đ˛Đ¸Ņ€Đ° Ņ‚Đ°ĐąĐģĐžŅ‚Đž {board}",
"You have unarchived the board {board}" : "Đ Đ°ĐˇĐ°Ņ€Ņ…Đ¸Đ˛Đ¸Ņ€Đ°Đģи ҁ҂Đĩ Ņ‚Đ°ĐąĐģĐžŅ‚Đž {board}",
"{user} has unarchived the board {before}" : "{user} Đĩ Ņ€Đ°ĐˇĐ°Ņ€Ņ…Đ¸Đ˛Đ¸Ņ€Đ°Đģ Ņ‚Đ°ĐąĐģĐžŅ‚Đž {before}",
"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}",
"{user} has updated the description of the card {card} in list {stack} on board {board}" : " {user} аĐēŅ‚ŅƒĐ°ĐģĐ¸ĐˇĐ¸Ņ€Đ° ĐžĐŋĐ¸ŅĐ°ĐŊиĐĩŅ‚Đž ĐēҊĐŧ ĐēĐ°Ņ€Ņ‚Đ° {card} в ҁĐŋĐ¸ŅŅŠĐē {stack} ĐŊа Ņ‚Đ°ĐąĐģĐžŅ‚Đž {board}",
"You have archived card {card} in list {stack} on board {board}" : "ĐŅ€Ņ…Đ¸Đ˛Đ¸Ņ€Đ°Đģи ҁ҂Đĩ ĐēĐ°Ņ€Ņ‚Đ° {card} в ҁĐŋĐ¸ŅŅŠĐē {stack} ĐŊа ĐąĐžŅ€Đ´Đ° {board}",
"{user} has archived card {card} in list {stack} on board {board}" : "{user} Đ°Ņ€Ņ…Đ¸Đ˛Đ¸Ņ€Đ° ĐēĐ°Ņ€Ņ‚Đ° {card} в ҁĐŋĐ¸ŅŅŠĐē {stack} ĐŊа ĐąĐžŅ€Đ´Đ° {board}",
"You have unarchived card {card} in list {stack} on board {board}" : "Đ Đ°ĐˇĐ°Ņ€Ņ…Đ¸Đ˛Đ¸Ņ€Đ°Đģи ҁ҂Đĩ ĐēĐ°Ņ€Ņ‚Đ° {card} в ҁĐŋĐ¸ŅŅŠĐē {stack} ĐŊа ĐąĐžŅ€Đ´Đ° {board}",
"{user} has unarchived card {card} in list {stack} on board {board}" : "{user} Ņ€Đ°ĐˇĐ°Ņ€Ņ…Đ¸Đ˛Đ¸Ņ€Đ° ĐēĐ°Ņ€Ņ‚Đ° {card} в ҁĐŋĐ¸ŅŅŠĐē {stack} ĐŊа ĐąĐžŅ€Đ´Đ° {board}",
"You have removed the due date of card {card}" : "ĐŸŅ€ĐĩĐŧĐ°Ņ…ĐŊĐ°Ņ…Ņ‚Đĩ Đ´Đ°Ņ‚Đ°Ņ‚Đ° ĐŊа ĐŋадĐĩĐļа ĐŊа ĐēĐ°Ņ€Ņ‚Đ°Ņ‚Đ° {card}",
"{user} has removed the due date of card {card}" : "{user} ĐŋŅ€ĐĩĐŧĐ°Ņ…ĐŊа Đ´Đ°Ņ‚Đ°Ņ‚Đ° ĐŊа ĐŋадĐĩĐļа ĐŊа ĐēĐ°Ņ€Ņ‚Đ°Ņ‚Đ° {card}",
"You have set the due date of card {card} to {after}" : "ЗадаĐģи ҁ҂Đĩ Đ´Đ°Ņ‚Đ°Ņ‚Đ° ĐŊа ĐŋадĐĩĐļа ĐŊа ĐēĐ°Ņ€Ņ‚Đ°Ņ‚Đ° {card} ĐŊа {after}",
"{user} has set the due date of card {card} to {after}" : "{user} СададĐĩ Đ´Đ°Ņ‚Đ° ĐŊа ĐŋадĐĩĐļа ĐŊа ĐēĐ°Ņ€Ņ‚Đ°Ņ‚Đ° {card} ĐŊа {after}",
"You have updated the due date of card {card} to {after}" : "АĐēŅ‚ŅƒĐ°ĐģĐ¸ĐˇĐ¸Ņ€Đ°Đģи ҁ҂Đĩ Đ´Đ°Ņ‚Đ°Ņ‚Đ° ĐŊа ĐŋадĐĩĐļа ĐŊа ĐēĐ°Ņ€Ņ‚Đ°Ņ‚Đ° {card} ĐŊа {after}",
"{user} has updated the due date of card {card} to {after}" : "{user} аĐēŅ‚ŅƒĐ°ĐģĐ¸ĐˇĐ¸Ņ€Đ° Đ´Đ°Ņ‚Đ°Ņ‚Đ° ĐŊа ĐŋадĐĩĐļа ĐŊа ĐēĐ°Ņ€Ņ‚Đ°Ņ‚Đ° {card} ĐŊа {after}",
"You have added the tag {label} to card {card} in list {stack} on board {board}" : "Đ”ĐžĐąĐ°Đ˛Đ¸Ņ…Ņ‚Đĩ ĐĩŅ‚Đ¸ĐēĐĩŅ‚ {label} ĐēҊĐŧ ĐēĐ°Ņ€Ņ‚Đ° {card} в ҁĐŋĐ¸ŅŅŠĐē {stack} ĐŊа Ņ‚Đ°ĐąĐģĐžŅ‚Đž {board}",
"{user} has added the tag {label} to card {card} in list {stack} on board {board}" : "{user} дОйави ĐĩŅ‚Đ¸ĐēĐĩŅ‚ {label} ĐēҊĐŧ ĐēĐ°Ņ€Ņ‚Đ° {card} в ҁĐŋĐ¸ŅŅŠĐē {stack} ĐŊĐ°Ņ‚Đ°ĐąĐģĐžŅ‚Đž {board}",
"You have removed the tag {label} from card {card} in list {stack} on board {board}" : "ĐŸŅ€ĐĩĐŧĐ°Ņ…ĐŊĐ°Ņ…Ņ‚Đĩ ĐĩŅ‚Đ¸ĐēĐĩŅ‚ {label} ĐēҊĐŧ ĐēĐ°Ņ€Ņ‚Đ° {card} в ҁĐŋĐ¸ŅŅŠĐē {stack} ĐŊа Ņ‚Đ°ĐąĐģĐžŅ‚Đž {board}",
"{user} has removed the tag {label} from card {card} in list {stack} on board {board}" : "{user} ĐŋŅ€ĐĩĐŧĐ°Ņ…ĐŊа ĐĩŅ‚Đ¸ĐēĐĩŅ‚ {label} ĐēҊĐŧ ĐēĐ°Ņ€Ņ‚Đ° {card} в ҁĐŋĐ¸ŅŅŠĐē {stack} ĐŊа Ņ‚Đ°ĐąĐģĐžŅ‚Đž {board}",
"You have assigned {assigneduser} to card {card} on board {board}" : "ĐŸŅ€Đ¸ŅĐ˛ĐžĐ¸Đģи ҁ҂Đĩ {assigneduser} ĐŊа ĐēĐ°Ņ€Ņ‚Đ° {card} ĐŊа ĐąĐžŅ€Đ´Đ° {board}",
"{user} has assigned {assigneduser} to card {card} on board {board}" : "{user} ĐŋŅ€Đ¸ŅĐ˛ĐžĐ¸ {assigneduser} ĐŊа ĐēĐ°Ņ€Ņ‚Đ° {card} ĐŊа ĐąĐžŅ€Đ´Đ° {board}",
"You have unassigned {assigneduser} from card {card} on board {board}" : "ИĐŧĐ°Ņ‚Đĩ ĐŊĐĩĐžĐŋŅ€ĐĩĐ´ĐĩĐģĐĩĐŊ {assigneduser} ĐŊа ĐēĐ°Ņ€Ņ‚Đ° {card} ĐŊа ĐąĐžŅ€Đ´Đ° {board}",
"{user} has unassigned {assigneduser} from card {card} on board {board}" : "{user} иĐŧа ĐŊĐĩĐžĐŋŅ€ĐĩĐ´ĐĩĐģĐĩĐŊ {assigneduser} ĐŊа ĐēĐ°Ņ€Ņ‚Đ° {card} ĐŊа ĐąĐžŅ€Đ´Đ° {board}",
"You have moved the card {card} from list {stackBefore} to {stack}" : "ĐŸŅ€ĐĩĐŧĐĩŅŅ‚Đ¸Ņ…Ņ‚Đĩ ĐēĐ°Ņ€Ņ‚Đ°Ņ‚Đ° {card} ĐžŅ‚ ҁĐŋĐ¸ŅŅŠĐē {stackBefore} в {stack}",
"{user} has moved the card {card} from list {stackBefore} to {stack}" : "{user} ĐŋŅ€ĐĩĐŧĐĩŅŅ‚Đ¸ ĐēĐ°Ņ€Ņ‚Đ°Ņ‚Đ° {card} ĐžŅ‚ ҁĐŋĐ¸ŅŅŠĐē {stackBefore} в {stack}",
"You have added the attachment {attachment} to card {card}" : "Đ”ĐžĐąĐ°Đ˛Đ¸Ņ…Ņ‚Đĩ ĐŋŅ€Đ¸ĐēĐ°Ņ‡ĐĩĐŊĐ¸Ņ Ņ„Đ°ĐšĐģ {attachment} ĐēҊĐŧ ĐēĐ°Ņ€Ņ‚Đ° {card}",
"{user} has added the attachment {attachment} to card {card}" : "{user} дОйави ĐŋŅ€Đ¸ĐēĐ°Ņ‡ĐĩĐŊĐ¸Ņ Ņ„Đ°ĐšĐģ {attachment} ĐēҊĐŧ ĐēĐ°Ņ€Ņ‚Đ° {card}",
"You have updated the attachment {attachment} on card {card}" : " АĐēŅ‚ŅƒĐ°ĐģĐ¸ĐˇĐ¸Ņ€Đ°Đģи ҁ҂Đĩ ĐŋŅ€Đ¸ĐēĐ°Ņ‡ĐĩĐŊĐ¸Ņ Ņ„Đ°ĐšĐģ {attachment} ĐēҊĐŧ ĐēĐ°Ņ€Ņ‚Đ° {card}",
"{user} has updated the attachment {attachment} on card {card}" : "{user} аĐēŅ‚ŅƒĐ°ĐģĐ¸ĐˇĐ¸Ņ€Đ° ĐŋŅ€Đ¸ĐēĐ°Ņ‡ĐĩĐŊĐ¸Ņ Ņ„Đ°ĐšĐģ {attachment} ĐēҊĐŧ ĐēĐ°Ņ€Ņ‚Đ° {card}",
"You have deleted the attachment {attachment} from card {card}" : "Đ˜ĐˇŅ‚Ņ€Đ¸Ņ…Ņ‚Đĩ ĐŋŅ€Đ¸ĐēĐ°Ņ‡ĐĩĐŊĐ¸Ņ Ņ„Đ°ĐšĐģ {attachment} ĐžŅ‚ ĐēĐ°Ņ€Ņ‚Đ° {card}",
"{user} has deleted the attachment {attachment} from card {card}" : "{user} Đ¸ĐˇŅ‚Ņ€Đ¸ ĐŋŅ€Đ¸ĐēĐ°Ņ‡ĐĩĐŊĐ¸Ņ Ņ„Đ°ĐšĐģ {attachment} ĐēҊĐŧ ĐēĐ°Ņ€Ņ‚Đ° {card}",
"You have restored the attachment {attachment} to card {card}" : "Đ’ŅŠĐˇŅŅ‚Đ°ĐŊОвиĐģи ҁ҂Đĩ ĐŋŅ€Đ¸ĐēĐ°Ņ‡ĐĩĐŊĐ¸Ņ Ņ„Đ°ĐšĐģ {attachment} ĐēҊĐŧ ĐēĐ°Ņ€Ņ‚Đ° {card}",
"{user} has restored the attachment {attachment} to card {card}" : "{user} Đ˛ŅŠĐˇŅŅ‚Đ°ĐŊОви ĐŋŅ€Đ¸ĐēĐ°Ņ‡ĐĩĐŊĐ¸Ņ Ņ„Đ°ĐšĐģ {attachment} ĐēҊĐŧ ĐēĐ°Ņ€Ņ‚Đ° {card}",
"You have commented on card {card}" : "КоĐŧĐĩĐŊŅ‚Đ¸Ņ€Đ°Đģи ҁ҂Đĩ ĐēĐ°Ņ€Ņ‚Đ° {card}",
"{user} has commented on card {card}" : "{user} ĐēĐžĐŧĐĩĐŊŅ‚Đ¸Ņ€Đ° ĐēĐ°Ņ€Ņ‚Đ° {card}",
"Deck" : "ĐĐ°ĐąĐžŅ€",
"Changes in the <strong>Deck app</strong>" : "ĐŸŅ€ĐžĐŧĐĩĐŊи в <strong>ĐŋŅ€Đ¸ĐģĐžĐļĐĩĐŊиĐĩŅ‚Đž Deck</strong>",
"A <strong>comment</strong> was created on a card" : "На ĐēĐ°Ņ€Ņ‚Đ°Ņ‚Đ° Đĩ ŅŅŠĐˇĐ´Đ°Đ´ĐĩĐŊ <strong>ĐēĐžĐŧĐĩĐŊŅ‚Đ°Ņ€</strong>",
"Upcoming cards" : "ĐŸŅ€ĐĩĐ´ŅŅ‚ĐžŅŅ‰Đ¸ ĐēĐ°Ņ€Ņ‚Đ¸",
"Load more" : "Đ—Đ°Ņ€ĐĩĐļдаĐŊĐĩ ĐŊа ĐžŅ‰Đĩ",
"Personal" : "Đ›Đ¸Ņ‡ĐŊи",
"The card \"%s\" on \"%s\" has been assigned to you by %s." : "ĐšĐ°Ņ€Ņ‚Đ°Ņ‚Đ° \"%s\" ĐŊа \"%s\" Ви Đĩ йиĐģа Đ˛ŅŠĐˇĐģĐžĐļĐĩĐŊа ĐžŅ‚ %s.",
"{user} has assigned the card {deck-card} on {deck-board} to you." : "{user} Đĩ Đ˛ŅŠĐˇĐģĐžĐļиĐģ ĐēĐ°Ņ€Ņ‚Đ°Ņ‚Đ° {deck-card} ĐŊа {deck-board} ĐŊа Đ’Đ°Ņ.",
"The card \"%s\" on \"%s\" has reached its due date." : "ĐšĐ°Ņ€Ņ‚Đ°Ņ‚Đ° \"%s\" on \"%s\" Đĩ Đ´ĐžŅŅ‚Đ¸ĐŗĐŊаĐģа Đ´Đ°Ņ‚Đ°Ņ‚Đ° ĐŊа ĐŋадĐĩĐļа ŅĐ¸.",
"The card {deck-card} on {deck-board} has reached its due date." : "ĐšĐ°Ņ€Ņ‚Đ°Ņ‚Đ° {deck-card} ĐŊа {deck-board} Đĩ Đ´ĐžŅŅ‚Đ¸ĐŗĐŊаĐģа Đ´Đ°Ņ‚Đ°Ņ‚Đ° ĐŊа ĐŋадĐĩĐļа ŅĐ¸.",
"%s has mentioned you in a comment on \"%s\"." : "%s Ņ‚Đĩ ҁĐŋĐžĐŧĐĩĐŊа в ĐēĐžĐŧĐĩĐŊŅ‚Đ°Ņ€ Са “%s”",
"{user} has mentioned you in a comment on {deck-card}." : "{user} Ņ‚Đĩ ҁĐŋĐžĐŧĐĩĐŊа в ĐēĐžĐŧĐĩĐŊŅ‚Đ°Ņ€ Са {deck-card}.",
"The board \"%s\" has been shared with you by %s." : "ĐĸайĐģĐžŅ‚Đž \"%s\" Đĩ ҁĐŋОдĐĩĐģĐĩĐŊĐž ҁ Đ˛Đ°Ņ ĐžŅ‚%s.",
"{user} has shared {deck-board} with you." : "{user} ҁĐŋОдĐĩĐģи {deck-board} ҁ Đ’Đ°Ņ.",
"Deck board" : "Deck Ņ‚Đ°ĐąĐģĐž",
"Owned by %1$s" : "ĐŸŅ€Đ¸Ņ‚ĐĩĐļаваĐŊ ĐžŅ‚ %1$s",
"Deck boards, cards and comments" : "ĐĸайĐģа, ĐēĐ°Ņ€Ņ‚Đ¸ и ĐēĐžĐŧĐĩĐŊŅ‚Đ°Ņ€Đ¸",
"From %1$s, in %2$s/%3$s, owned by %4$s" : "ĐžŅ‚ %1$s, в %2$s/%3$s, ĐŋŅ€Đ¸Ņ‚ĐĩĐļаĐŊиĐĩ ĐŊа %4$s",
"Card comments" : "КоĐŧĐĩĐŊŅ‚Đ°Ņ€Đ¸ ĐŊа ĐēĐ°Ņ€Ņ‚Đ¸",
"%s on %s" : "%s ĐŊа %s",
"Deck boards and cards" : "ĐĸайĐģа и ĐēĐ°Ņ€Ņ‚Đ¸",
"No data was provided to create an attachment." : "НĐĩ ĐąŅŅ…Đ° ĐŋŅ€ĐĩĐ´ĐžŅŅ‚Đ°Đ˛ĐĩĐŊи даĐŊĐŊи Са ŅŅŠĐˇĐ´Đ°Đ˛Đ°ĐŊĐĩ ĐŊа ĐŋŅ€Đ¸ĐēĐ°Ņ‡ĐĩĐŊ Ņ„Đ°ĐšĐģ.",
"Finished" : "Đ“ĐžŅ‚ĐžĐ˛Đž",
"To review" : "За ĐŋŅ€ĐĩĐŗĐģĐĩĐ´",
"Action needed" : "НĐĩĐžĐąŅ…ĐžĐ´Đ¸ĐŧĐž Đĩ Đ´ĐĩĐšŅŅ‚Đ˛Đ¸Đĩ",
"Later" : "По-ĐēҊҁĐŊĐž",
"copy" : "КоĐŋĐ¸Ņ€Đ°ĐŊĐĩ",
"To do" : "Đ—Đ°Đ´Đ°Ņ‡Đ¸",
"Doing" : "Đ—Đ°Đ´Đ°Ņ‡Đ¸ в ĐŋŅ€ĐžŅ†Đĩҁ ĐŊа иСĐŋҊĐģĐŊĐĩĐŊиĐĩ",
"Done" : "Đ—Đ°Đ˛ŅŠŅ€ŅˆĐĩĐŊĐž",
"Example Task 3" : "ĐŸŅ€Đ¸ĐŧĐĩŅ€ĐŊа ĐˇĐ°Đ´Đ°Ņ‡Đ° 3",
"Example Task 2" : "ĐŸŅ€Đ¸ĐŧĐĩŅ€ĐŊа ĐˇĐ°Đ´Đ°Ņ‡Đ° 2",
"Example Task 1" : "ĐŸŅ€Đ¸ĐŧĐĩŅ€ĐŊа ĐˇĐ°Đ´Đ°Ņ‡Đ° 1",
"Done" : "Đ“ĐžŅ‚ĐžĐ˛Đž",
"The file was uploaded" : "ФаКĐģŅŠŅ‚ Đĩ ĐēĐ°Ņ‡ĐĩĐŊ",
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "РаСĐŧĐĩŅ€ŅŠŅ‚ ĐŊа ĐēĐ°Ņ‡ĐĩĐŊĐ¸ŅŅ‚ Ņ„Đ°ĐšĐģ ĐŊĐ°Đ´Đ˛Đ¸ŅˆĐ°Đ˛Đ° ĐŧаĐēŅĐ¸ĐŧаĐģĐŊĐ¸Ņ Ņ€Đ°ĐˇĐŧĐĩŅ€ ĐžĐŋŅ€ĐĩĐ´ĐĩĐģĐĩĐŊ ĐžŅ‚ upload_max_filesize в php.ini:",
"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" : "ФаКĐģŅŠŅ‚ Đĩ ĐēĐ°Ņ‡ĐĩĐŊ Ņ‡Đ°ŅŅ‚Đ¸Ņ‡ĐŊĐž",
"No file was uploaded" : "ĐĐ¸Ņ‚Đž ĐĩдиĐŊ Ņ„Đ°ĐšĐģ ĐŊĐĩ Đĩ ĐēĐ°Ņ‡ĐĩĐŊ",
"Missing a temporary folder" : "ЛиĐŋŅĐ˛Đ° Đ˛Ņ€ĐĩĐŧĐĩĐŊĐŊа ĐŋаĐŋĐēа",
"Could not write file to disk" : " ФаКĐģŅŠŅ‚ ĐŊĐĩ ĐŧĐžĐļа да ĐąŅŠĐ´Đĩ СаĐŋĐ¸ŅĐ°ĐŊ ĐŊа Đ´Đ¸ŅĐē",
"A PHP extension stopped the file upload" : "PHP Ņ€Đ°ĐˇŅˆĐ¸Ņ€ĐĩĐŊиĐĩ ҁĐŋŅ€Ņ ĐēĐ°Ņ‡Đ˛Đ°ĐŊĐĩŅ‚Đž ĐŊа Ņ„Đ°ĐšĐģа",
"No file uploaded or file size exceeds maximum of %s" : "ĐŅĐŧа ĐēĐ°Ņ‡ĐĩĐŊ Ņ„Đ°ĐšĐģ иĐģи Ņ€Đ°ĐˇĐŧĐĩŅ€ŅŠŅ‚ ĐŊа Ņ„Đ°ĐšĐģа ĐŊĐ°Đ´Đ˛Đ¸ŅˆĐ°Đ˛Đ° ĐŧаĐēŅĐ¸Đŧ҃Đŧа ĐžŅ‚ %s",
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : "ĐĸОСи ĐēĐžĐŧĐĩĐŊŅ‚Đ°Ņ€ иĐŧа ĐŋОвĐĩ҇Đĩ ĐžŅ‚ %s СĐŊаĐēа.\nДобавĐĩĐŊĐž ĐēĐ°Ņ‚Đž ĐŋŅ€Đ¸ĐēĐ°Ņ‡ĐĩĐŊ Ņ„Đ°ĐšĐģ ĐēҊĐŧ ĐēĐ°Ņ€Ņ‚Đ°Ņ‚Đ° ҁ иĐŧĐĩ %s.\nĐ”ĐžŅŅ‚ŅŠĐŋĐŊĐž ĐŊа URL: %s.",
"Card not found" : "ĐšĐ°Ņ‚Ņ€Ņ‚Đ°Ņ‚Đ° ĐŊĐĩ Đĩ ĐŊаĐŧĐĩŅ€ĐĩĐŊа",
"Path is already shared with this card" : "ĐŸŅŠŅ‚ŅŅ‚ вĐĩ҇Đĩ Đĩ ҁĐŋОдĐĩĐģĐĩĐŊ ҁ Ņ‚Đ°ĐˇĐ¸ ĐēĐ°Ņ€Ņ‚Đ°",
"Invalid date, date format must be YYYY-MM-DD" : "НĐĩваĐģидĐŊа Đ´Đ°Ņ‚Đ°, Ņ„ĐžŅ€ĐŧĐ°Ņ‚ŅŠŅ‚ Đĩ Ņ€Đ°ĐˇĐģĐ¸Ņ‡ĐĩĐŊ ĐžŅ‚ ГГГГ-ММ-ДД",
"Personal planning and team project organization" : "Đ›Đ¸Ņ‡ĐŊĐž ĐŋĐģаĐŊĐ¸Ņ€Đ°ĐŊĐĩ и ĐžŅ€ĐŗĐ°ĐŊĐ¸ĐˇĐ°Ņ†Đ¸Ņ ĐŊа ĐĩĐēиĐŋĐŊи ĐŋŅ€ĐžĐĩĐēŅ‚Đ¸",
"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 Đĩ иĐŊŅŅ‚Ņ€ŅƒĐŧĐĩĐŊŅ‚ Са ĐžŅ€ĐŗĐ°ĐŊĐ¸ĐˇĐ°Ņ†Đ¸Ņ в ŅŅ‚Đ¸Đģ kanban, ĐŊĐ°ŅĐžŅ‡ĐĩĐŊ ĐēҊĐŧ ĐģĐ¸Ņ‡ĐŊĐž ĐŋĐģаĐŊĐ¸Ņ€Đ°ĐŊĐĩ и ĐžŅ€ĐŗĐ°ĐŊĐ¸ĐˇĐ°Ņ†Đ¸Ņ ĐŊа ĐŋŅ€ĐžĐĩĐēŅ‚Đ¸ Са ĐĩĐēиĐŋи, иĐŊŅ‚ĐĩĐŗŅ€Đ¸Ņ€Đ°ĐŊи ҁ Nextcloud.\n\n\n- đŸ“Ĩ ДобавĐĩŅ‚Đĩ ĐˇĐ°Đ´Đ°Ņ‡Đ¸Ņ‚Đĩ ŅĐ¸ ĐēҊĐŧ ĐēĐ°Ņ€Ņ‚Đ¸ и ĐŗĐ¸ ĐŋĐžĐ´Ņ€ĐĩĐ´ĐĩŅ‚Đĩ\n- 📄 ЗаĐŋĐ¸ŅˆĐĩŅ‚Đĩ Đ´ĐžĐŋҊĐģĐŊĐ¸Ņ‚ĐĩĐģĐŊи ĐąĐĩĐģĐĩĐļĐēи в markdown Ņ„ĐžŅ€ĐŧĐ°Ņ‚\n- ĐŸŅ€Đ¸ŅĐ˛ĐžŅĐ˛Đ°ĐŊĐĩ ĐŊа ĐĩŅ‚Đ¸ĐēĐĩŅ‚Đ¸ Са ĐžŅ‰Đĩ ĐŋĐž-Đ´ĐžĐąŅ€Đ° ĐžŅ€ĐŗĐ°ĐŊĐ¸ĐˇĐ°Ņ†Đ¸Ņ\n- đŸ‘Ĩ ĐĄĐŋОдĐĩĐģĐĩŅ‚Đĩ ҁ Đ˛Đ°ŅˆĐ¸Ņ ĐĩĐēиĐŋ, ĐŋŅ€Đ¸ŅŅ‚ĐĩĐģи иĐģи ҁĐĩĐŧĐĩĐšŅŅ‚Đ˛Đž\n- đŸ“ŽĐŸŅ€Đ¸ĐēĐ°Ņ‡ĐĩŅ‚Đĩ Ņ„Đ°ĐšĐģОвĐĩ и ĐŗĐ¸ Đ˛ĐŗŅ€Đ°Đ´ĐĩŅ‚Đĩ Đ˛ŅŠĐ˛ Đ˛Đ°ŅˆĐĩŅ‚Đž ĐžĐŋĐ¸ŅĐ°ĐŊиĐĩ Са ĐŧĐ°Ņ€ĐēĐ¸Ņ€Đ°ĐŊĐĩ\n- đŸ’ŦĐžĐąŅŅŠĐ´ĐĩŅ‚Đĩ ҁ Đ˛Đ°ŅˆĐ¸Ņ ĐĩĐēиĐŋ, ĐēĐ°Ņ‚Đž иСĐŋĐžĐģĐˇĐ˛Đ°Ņ‚Đĩ ĐēĐžĐŧĐĩĐŊŅ‚Đ°Ņ€Đ¸\n- ⚡ ĐŸŅ€ĐžŅĐģĐĩĐ´ŅĐ˛Đ°ĐšŅ‚Đĩ ĐŋŅ€ĐžĐŧĐĩĐŊĐ¸Ņ‚Đĩ в ĐŋĐžŅ‚ĐžĐēа ĐžŅ‚ Đ´ĐĩĐšĐŊĐžŅŅ‚Đ¸\n- 🚀 ĐžŅ€ĐŗĐ°ĐŊĐ¸ĐˇĐ¸Ņ€Đ°ĐšŅ‚Đĩ ĐŋŅ€ĐžĐĩĐēŅ‚Đ° ŅĐ¸",
"Add board" : "Добави Ņ‚Đ°ĐąĐģĐž",
"Select the board to link to a project" : "ИСйĐĩŅ€ĐĩŅ‚Đĩ Ņ‚Đ°ĐąĐģĐžŅ‚Đž, ĐēĐžĐĩŅ‚Đž да ŅĐ˛ŅŠŅ€ĐļĐĩŅ‚Đĩ ĐēҊĐŧ ĐŋŅ€ĐžĐĩĐēŅ‚",
"Search by board title" : "ĐĸŅŠŅ€ŅĐĩĐŊĐĩ ĐŋĐž ĐˇĐ°ĐŗĐģавиĐĩ ĐŊа Ņ‚Đ°ĐąĐģĐžŅ‚Đž",
"Select board" : "Đ˜ĐˇĐąĐžŅ€ ĐŊа Ņ‚Đ°ĐąĐģĐž",
"Move card to another board" : "ĐŸŅ€ĐĩĐŧĐĩŅŅ‚Đ˛Đ°ĐŊĐĩ ĐŊа ĐēĐ°Ņ€Ņ‚Đ°Ņ‚Đ° ĐŊа Đ´Ņ€ŅƒĐŗĐž Ņ‚Đ°ĐąĐģĐž",
"Select a board" : "Đ˜ĐˇĐąĐžŅ€ ĐŊа Ņ‚Đ°ĐąĐģĐž",
"No lists available" : "ĐŅĐŧа ĐŊаĐģĐ¸Ņ‡ĐŊа ҁĐŋĐ¸ŅŅŠŅ†Đ¸.",
"Select a list" : "Đ˜ĐˇĐąĐžŅ€ ĐŊа ҁĐŋĐ¸ŅŅŠĐē",
"Move card" : "ĐŸŅ€ĐĩĐŧĐĩŅŅ‚Đ˛Đ°ĐŊĐĩ ĐŊа ĐēĐ°Ņ€Ņ‚Đ°",
"Cancel" : "ĐžŅ‚ĐēаС",
"Select a card" : "Đ˜ĐˇĐąĐžŅ€ ĐŊа ĐēĐ°Ņ€Ņ‚Đ°",
"Select the card to link to a project" : "ИСйĐĩŅ€ĐĩŅ‚Đĩ ĐēĐ°Ņ€Ņ‚Đ°Ņ‚Đ°, ĐēĐžŅŅ‚Đž да ŅĐ˛ŅŠŅ€ĐļĐĩŅ‚Đĩ ĐēҊĐŧ ĐŋŅ€ĐžĐĩĐēŅ‚",
"Link to card" : "Đ’Ņ€ŅŠĐˇĐēа ĐēҊĐŧ ĐēĐ°Ņ€Ņ‚Đ°",
"File already exists" : "ФаКĐģŅŠŅ‚ вĐĩ҇Đĩ ŅŅŠŅ‰ĐĩŅŅ‚Đ˛ŅƒĐ˛Đ°",
"A file with the name {filename} already exists." : "ВĐĩ҇Đĩ ŅŅŠŅ‰ĐĩŅŅ‚Đ˛ŅƒĐ˛Đ° Ņ„Đ°ĐšĐģ ҁ иĐŧĐĩŅ‚Đž {filename}.",
"Do you want to overwrite it?" : "Đ˜ŅĐēĐ°Ņ‚Đĩ Đģи да ĐŗĐž ĐŋŅ€ĐĩСаĐŋĐ¸ŅˆĐĩŅ‚Đĩ?",
"Overwrite file" : "ĐŸŅ€ĐĩСаĐŋĐ¸ŅˆĐ¸ Ņ„Đ°ĐšĐģа",
"Keep existing file" : "ЗаĐŋаСваĐŊĐĩ ĐŊа ŅŅŠŅ‰ĐĩŅŅ‚Đ˛ŅƒĐ˛Đ°Ņ‰ Ņ„Đ°ĐšĐģ",
"This board is read only" : "ĐĸайĐģĐžŅ‚Đž Đĩ ŅĐ°ĐŧĐž Са ҇ĐĩŅ‚ĐĩĐŊĐĩ",
"Drop your files to upload" : "ĐŸŅƒŅĐŊĐĩŅ‚Đĩ Đ˛Đ°ŅˆĐ¸Ņ‚Đĩ Ņ„Đ°ĐšĐģОвĐĩ, Са да ĐŗĐ¸ ĐēĐ°Ņ‡Đ¸Ņ‚Đĩ",
"Add card" : "Добави ĐēĐ°Ņ€Ņ‚Đ°",
"Archived cards" : "ĐŅ€Ņ…Đ¸Đ˛Đ¸Ņ€Đ°ĐŊи ĐēĐ°Ņ€Ņ‚Đ¸",
"Add list" : "Добави ҁĐŋĐ¸ŅŅŠĐē",
"List name" : "ИĐŧĐĩ ĐŊа ҁĐŋĐ¸ŅŅŠĐē",
"Active filters" : "АĐēŅ‚Đ¸ĐļĐŊи Ņ„Đ¸ĐģŅ‚Ņ€Đ¸",
"Apply filter" : "ĐŸŅ€Đ¸ĐģĐžĐļи Ņ„Đ¸ĐģŅ‚ŅŠŅ€",
"Filter by tag" : "ФиĐģŅ‚Ņ€Đ¸Ņ€Đ°Đš ĐŋĐž ĐŧĐ°Ņ€ĐēĐĩŅ€",
"Filter by assigned user" : "ФиĐģŅ‚Ņ€Đ¸Ņ€Đ°ĐŊĐĩ ĐŋĐž ĐŊаСĐŊĐ°Ņ‡ĐĩĐŊ ĐŋĐžŅ‚Ņ€ĐĩĐąĐ¸Ņ‚ĐĩĐģ",
"Unassigned" : "НĐĩĐŋŅ€Đ¸ŅĐ˛ĐžĐĩĐŊ",
"Open" : "ĐžŅ‚Đ˛ĐžŅ€Đ¸",
"Completed" : "Đ—Đ°Đ˛ŅŠŅ€ŅˆĐĩĐŊ",
"Filter by due date" : "ФиĐģŅ‚Ņ€Đ¸Ņ€Đ°ĐŊĐĩ ĐŋĐž ĐēŅ€Đ°ĐšĐŊа Đ´Đ°Ņ‚Đ°",
"Overdue" : "ĐŸŅ€ĐžŅŅ€ĐžŅ‡ĐĩĐŊ",
"Next 24 hours" : "ĐĄĐģĐĩĐ´Đ˛Đ°Ņ‰Đ¸Ņ‚Đĩ 24 Ņ‡Đ°ŅĐ°",
"Next 7 days" : "ĐĄĐģĐĩĐ´Đ˛Đ°Ņ‰Đ¸Ņ‚Đĩ 7 Đ´ĐŊи",
"Next 30 days" : "ĐĄĐģĐĩĐ´Đ˛Đ°Ņ‰Đ¸Ņ‚Đĩ 30 Đ´ĐŊи",
"No due date" : "ĐŅĐŧа ĐēŅ€Đ°ĐšĐŊа Đ´Đ°Ņ‚Đ°",
"Clear filter" : "Đ˜ĐˇŅ‡ŅŅ‚Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа Ņ„Đ¸ĐģŅ‚ŅŠŅ€",
"Hide archived cards" : "ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа Đ°Ņ€Ņ…Đ¸Đ˛Đ¸Ņ€Đ°ĐŊи ĐēĐ°Ņ€Ņ‚Đ¸",
"Show archived cards" : "ПоĐēаСваĐŊĐĩ ĐŊа Đ°Ņ€Ņ…Đ¸Đ˛Đ¸Ņ€Đ°ĐŊи ĐēĐ°Ņ€Ņ‚Đ¸",
"Toggle compact mode" : "ĐŸŅ€ĐĩвĐēĐģŅŽŅ‡Đ˛Đ°ĐŊĐĩ ĐŊа ĐēĐžĐŧĐŋаĐēŅ‚ĐĩĐŊ Ņ€ĐĩĐļиĐŧ",
"Open details" : "ĐžŅ‚Đ˛Đ°Ņ€ŅĐŊĐĩ ĐŊа ĐŋĐžĐ´Ņ€ĐžĐąĐŊĐžŅŅ‚Đ¸",
"Details" : "ĐŸĐžĐ´Ņ€ĐžĐąĐŊĐžŅŅ‚Đ¸",
"Currently present people" : "ĐĨĐžŅ€Đ° ĐŋŅ€Đ¸ŅŅŠŅŅ‚Đ˛Đ°Ņ‰Đ¸ в ĐŧĐžĐŧĐĩĐŊŅ‚Đ°",
"Loading board" : "Đ—Đ°Ņ€ĐĩĐļдаĐŊĐĩ ĐŊа Ņ‚Đ°ĐąĐģĐž",
"Board not found" : "ĐĸайĐģĐžŅ‚Đž ĐŊĐĩ Đĩ ĐŊаĐŧĐĩŅ€ĐĩĐŊĐž",
"Create a new list to add cards to this board" : "ĐĄŅŠĐˇĐ´Đ°ĐšŅ‚Đĩ ĐŊОв ҁĐŋĐ¸ŅŅŠĐē, Са да Đ´ĐžĐąĐ°Đ˛Đ¸Ņ‚Đĩ ĐēĐ°Ņ€Ņ‚Đ¸ ĐēҊĐŧ Ņ‚ĐžĐ˛Đ° Ņ‚Đ°ĐąĐģĐž",
"Sharing" : "ĐĄĐŋОдĐĩĐģŅĐŊĐĩ",
"Tags" : "Đ•Ņ‚Đ¸ĐēĐĩŅ‚Đ¸",
"Deleted items" : "Đ˜ĐˇŅ‚Ņ€Đ¸Ņ‚Đ¸ ĐĩĐģĐĩĐŧĐĩĐŊŅ‚Đ¸",
"Activity" : "АĐēŅ‚Đ¸Đ˛ĐŊĐžŅŅ‚",
"Deleted lists" : "Đ˜ĐˇŅ‚Ņ€Đ¸Ņ‚Đ¸ ҁĐŋĐ¸ŅŅŠŅ†Đ¸",
"Undo" : "ĐžŅ‚ĐŧŅĐŊа",
"Deleted cards" : "Đ˜ĐˇŅ‚Ņ€Đ¸Ņ‚Đ¸ ĐēĐ°Ņ€Ņ‚Đ¸",
"No participants found" : "ĐŅĐŧа ĐŊаĐŧĐĩŅ€ĐĩĐŊи ŅƒŅ‡Đ°ŅŅ‚ĐŊĐ¸Ņ†Đ¸",
"Board owner" : "ĐĄĐžĐąŅŅ‚Đ˛ĐĩĐŊиĐē ĐŊа Ņ‚Đ°ĐąĐģĐž",
"(Group)" : "(Đ“Ņ€ŅƒĐŋа)",
"Can edit" : "МоĐļĐĩ да Ņ€ĐĩдаĐēŅ‚Đ¸Ņ€Đ°",
"Can share" : "МоĐļĐĩ да ҁĐŋОдĐĩĐģŅ",
"Can manage" : "МоĐļĐĩ да ҃ĐŋŅ€Đ°Đ˛ĐģŅĐ˛Đ°",
"Owner" : "ĐĄĐžĐąŅŅ‚Đ˛ĐĩĐŊиĐē",
"Delete" : "Đ˜ĐˇŅ‚Ņ€Đ¸Đ˛Đ°ĐŊĐĩ",
"Failed to create share with {displayName}" : "ĐĄŅŠĐˇĐ´Đ°Đ˛Đ°ĐŊĐĩŅ‚Đž ĐŊа ҁĐŋОдĐĩĐģŅĐŊĐĩ ҁ {displayName} ĐŊĐĩ ĐąĐĩ ҃ҁĐŋĐĩ҈ĐŊĐž",
"Are you sure you want to transfer the board {title} to {user}?" : "ĐĄĐ¸ĐŗŅƒŅ€ĐŊи Đģи ҁ҂Đĩ ҇Đĩ Đ¸ŅĐēĐ°Ņ‚Đĩ да ĐŋŅ€ĐĩŅ…Đ˛ŅŠŅ€ĐģĐ¸Ņ‚Đĩ Ņ‚Đ°ĐąĐģĐžŅ‚Đž {title} ĐŊа {user}?",
"Transfer the board." : "ĐŸŅ€ĐĩŅ…Đ˛ŅŠŅ€ĐģĐĩŅ‚Đĩ Ņ‚Đ°ĐąĐģĐžŅ‚Đž.",
"Transfer" : "ĐŸŅ€ĐĩŅ…Đ˛ŅŠŅ€ĐģŅĐŊĐĩ",
"The board has been transferred to {user}" : "ĐĸайĐģĐžŅ‚Đž ĐąĐĩ҈Đĩ ĐŋŅ€ĐĩŅ…Đ˛ŅŠŅ€ĐģĐĩĐŊĐž ĐŊа {user}",
"Failed to transfer the board to {user}" : "НĐĩ҃ҁĐŋĐĩ҈ĐŊĐž ĐŋŅ€ĐĩŅ…Đ˛ŅŠŅ€ĐģŅĐŊĐĩ ĐŊа Ņ‚Đ°ĐąĐģĐžŅ‚Đž ĐŊа {user}",
"Edit list title" : "Đ ĐĩдаĐēŅ‚Đ¸Ņ€Đ°ĐŊĐĩ ĐŊа ĐˇĐ°ĐŗĐģавиĐĩŅ‚Đž ĐŊа ҁĐŋĐ¸ŅŅŠĐēа",
"Archive all cards" : "ĐŅ€Ņ…Đ¸Đ˛Đ¸Ņ€Đ° Đ˛ŅĐ¸Ņ‡Đēи ĐēĐ°Ņ€Ņ‚Đ¸",
"Unarchive all cards" : "Đ Đ°ĐˇĐ°Ņ€Ņ…Đ¸Đ˛Đ¸Ņ€Đ°ĐŊĐĩ ĐŊа Đ˛ŅĐ¸Ņ‡Đēи ĐēĐ°Ņ€Ņ‚Đ¸",
"Delete list" : "Đ˜ĐˇŅ‚Ņ€Đ¸Đ˛Đ° ҁĐŋĐ¸ŅŅŠĐē",
"Archive all cards in this list" : "ĐŅ€Ņ…Đ¸Đ˛Đ¸Ņ€Đ° Đ˛ŅĐ¸Ņ‡Đēи ĐēĐ°Ņ€Ņ‚Đ¸ в Ņ‚ĐžĐˇĐ¸ ҁĐŋĐ¸ŅŅŠĐē",
"Unarchive all cards in this list" : "Đ Đ°ĐˇĐ°Ņ€Ņ…Đ¸Đ˛Đ¸Ņ€Đ°ĐŊĐĩ Đ˛ŅĐ¸Ņ‡Đēи ĐēĐ°Ņ€Ņ‚Đ¸ в Ņ‚ĐžĐˇĐ¸ ҁĐŋĐ¸ŅŅŠĐē",
"Add a new card" : "Добави ĐŊОва ĐēĐ°Ņ€Ņ‚Đ°",
"Card name" : "ИĐŧĐĩ ĐŊа ĐēĐ°Ņ€Ņ‚Đ°",
"List deleted" : "ĐĄĐŋĐ¸ŅŅŠĐēŅŠŅ‚ Đĩ Đ¸ĐˇŅ‚Ņ€Đ¸Ņ‚",
"Edit" : "Đ ĐĩдаĐēŅ†Đ¸Ņ",
"Add a new tag" : "Đ”ĐžĐąĐ°Đ˛ŅĐŊĐĩ ĐŊа ĐŊОв ĐĩŅ‚Đ¸ĐēĐĩŅ‚",
"title and color value must be provided" : "Ņ‚Ņ€ŅĐąĐ˛Đ° да ҁĐĩ ĐŋŅ€ĐĩĐ´ĐžŅŅ‚Đ°Đ˛ŅŅ‚ ĐˇĐ°ĐŗĐģавиĐĩ и ŅŅ‚ĐžĐšĐŊĐžŅŅ‚ ĐŊа Ņ†Đ˛ĐĩŅ‚Đ°",
"Board name" : "ИĐŧĐĩ ĐŊа Ņ‚Đ°ĐąĐģĐž",
"Members" : "ЧĐģĐĩĐŊОвĐĩ",
"Assign a user to this cardâ€Ļ" : "Đ—Đ°Ņ‡Đ¸ŅĐģŅĐ˛Đ°ĐŊĐĩ ĐŊа ĐŋĐžŅ‚Ņ€ĐĩĐąĐ¸Ņ‚ĐĩĐģ ĐŊа Ņ‚Đ°ĐˇĐ¸ ĐēĐ°Ņ€Ņ‚Đ° ...",
"Upload new files" : "ĐšĐ°Ņ‡Đ¸ ĐŊОви Ņ„Đ°ĐšĐģОвĐĩ",
"Share from Files" : "ĐĄĐŋОдĐĩĐģŅĐŊĐĩ ĐžŅ‚ ФаКĐģОвĐĩ",
"Pending share" : "ЧаĐēĐ°Ņ‰Đž ҁĐŋОдĐĩĐģŅĐŊĐĩ",
"Add this attachment" : "ДобавĐĩŅ‚Đĩ Ņ‚ĐžĐˇĐ¸ ĐŋŅ€Đ¸ĐēĐ°Ņ‡ĐĩĐŊ Ņ„Đ°ĐšĐģ",
"Show in Files" : "ПоĐēаСваĐŊĐĩ Đ˛ŅŠĐ˛ Ņ„Đ°ĐšĐģОвĐĩ",
"Download" : "Đ˜ĐˇŅ‚ĐĩĐŗĐģŅĐŊĐĩ",
"Remove attachment" : "ĐŸŅ€ĐĩĐŧĐ°Ņ…Đ˛Đ°ĐŊĐĩ ĐŊа ĐŋŅ€Đ¸ĐēĐ°Ņ‡ĐĩĐŊ Ņ„Đ°ĐšĐģ",
"Delete Attachment" : "Đ˜ĐˇŅ‚Ņ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐŋŅ€Đ¸ĐēĐ°Ņ‡ĐĩĐŊ Ņ„Đ°ĐšĐģ",
"Restore Attachment" : "Đ’ŅŠĐˇŅŅ‚Đ°ĐŊĐžĐ˛ŅĐ˛Đ°ĐŊĐĩ ĐŊа ĐŋŅ€Đ¸ĐēĐ°Ņ‡ĐĩĐŊ Ņ„Đ°ĐšĐģ",
"File to share" : "ФаКĐģ Са ҁĐŋОдĐĩĐģŅĐŊĐĩ",
"Invalid path selected" : "Đ˜ĐˇĐąŅ€Đ°ĐŊ Đĩ ĐŊĐĩваĐģидĐĩĐŊ ĐŋŅŠŅ‚ ",
"Open in sidebar view" : "ĐžŅ‚Đ˛Đ°Ņ€ŅĐŊĐĩ в Đ¸ĐˇĐŗĐģĐĩда ĐŊа ŅŅ‚Ņ€Đ°ĐŊĐ¸Ņ‡ĐŊĐ°Ņ‚Đ° ĐģĐĩĐŊŅ‚Đ°",
"Open in bigger view" : "ĐžŅ‚Đ˛Đ°Ņ€Ņ ҁĐĩ в ĐŋĐž-ĐŗĐžĐģŅĐŧ Đ¸ĐˇĐŗĐģĐĩĐ´",
"Due date" : "ĐšŅ€Đ°ĐšĐŊа Đ´Đ°Ņ‚Đ°",
"Remove due date" : "ĐŸŅ€ĐĩĐŧĐ°Ņ…ĐŊи ĐēŅ€Đ°ĐšĐŊĐ°Ņ‚Đ° Đ´Đ°Ņ‚Đ°",
"Description" : "ОĐŋĐ¸ŅĐ°ĐŊиĐĩ",
"Attachments" : "ĐŸŅ€Đ¸ĐēĐ°Ņ‡ĐĩĐŊи Ņ„Đ°ĐšĐģОвĐĩ",
"Comments" : "КоĐŧĐĩĐŊŅ‚Đ°Ņ€Đ¸",
"Modified" : "ĐŸŅ€ĐžĐŧŅĐŊа",
"Created" : "ĐĄŅŠĐˇĐ´Đ°Đ´ĐĩĐŊ",
"The title cannot be empty." : "Đ—Đ°ĐŗĐģавиĐĩŅ‚Đž ĐŊĐĩ ĐŧĐžĐļĐĩ да ĐąŅŠĐ´Đĩ ĐŋŅ€Đ°ĐˇĐŊĐž.",
"No comments yet. Begin the discussion!" : "Đ’ŅĐĩ ĐžŅ‰Đĩ ĐŊŅĐŧа ĐēĐžĐŧĐĩĐŊŅ‚Đ°Ņ€Đ¸. ЗаĐŋĐžŅ‡ĐŊĐĩŅ‚Đĩ Đ´Đ¸ŅĐēŅƒŅĐ¸ŅŅ‚Đ°!",
"Failed to load comments" : "НĐĩ҃ҁĐŋĐĩ҈ĐŊĐž ĐˇĐ°Ņ€ĐĩĐļдаĐŊĐĩ ĐŊа ĐēĐžĐŧĐĩĐŊŅ‚Đ°Ņ€Đ¸",
"Upload attachment" : "ĐšĐ°Ņ‡Đ˛Đ°ĐŊĐĩ",
"Save" : "ЗаĐŋаСваĐŊĐĩ",
"The comment cannot be empty." : "КоĐŧĐĩĐŊŅ‚Đ°Ņ€ŅŠŅ‚ ĐŊĐĩ ĐŧĐžĐļĐĩ да ĐąŅŠĐ´Đĩ ĐŋŅ€Đ°ĐˇĐĩĐŊ.",
"The comment cannot be longer than 1000 characters." : "КоĐŧĐĩĐŊŅ‚Đ°Ņ€ŅŠŅ‚ ĐŊĐĩ ĐŧĐžĐļĐĩ да ĐąŅŠĐ´Đĩ ĐŋĐž-Đ´ŅŠĐģŅŠĐŗ ĐžŅ‚ 1000 СĐŊаĐēа.",
"In reply to" : "В ĐžŅ‚ĐŗĐžĐ˛ĐžŅ€ ĐŊа",
"Cancel reply" : "ĐžŅ‚ĐēаС ĐŊа ĐžŅ‚ĐŗĐžĐ˛ĐžŅ€",
"Reply" : "ĐžŅ‚ĐŗĐžĐ˛ĐžŅ€Đ¸",
"Update" : "ОбĐŊĐžĐ˛ŅĐ˛Đ°ĐŊĐĩ",
"Created:" : "ĐĄŅŠĐˇĐ´Đ°Đ´ĐĩĐŊĐž:",
"Description" : "ОĐŋĐ¸ŅĐ°ĐŊиĐĩ",
"(Unsaved)" : " (НĐĩСаĐŋĐ¸ŅĐ°ĐŊ)",
"(Savingâ€Ļ)" : "(ЗаĐŋĐ¸ŅĐ˛Đ°ĐŊĐĩ...)",
"Formatting help" : "ПоĐŧĐžŅ‰ Са Ņ„ĐžŅ€ĐŧĐ°Ņ‚Đ¸Ņ€Đ°ĐŊĐĩ",
"Edit description" : "Đ ĐĩдаĐēŅ‚Đ¸Ņ€Đ°ĐŊĐĩ ĐŊа ĐžĐŋĐ¸ŅĐ°ĐŊиĐĩŅ‚Đž",
"View description" : "ĐŸŅ€ĐĩĐŗĐģĐĩĐ´ ĐŊа ĐžĐŋĐ¸ŅĐ°ĐŊиĐĩŅ‚Đž",
"Add Attachment" : "Đ”ĐžĐąĐ°Đ˛ŅĐŊĐĩ ĐŊа ĐŋŅ€Đ¸ĐēĐ°Ņ‡ĐĩĐŊ Ņ„Đ°ĐšĐģ",
"Write a description â€Ļ" : "НаĐŋĐ¸ŅˆĐĩŅ‚Đĩ ĐžĐŋĐ¸ŅĐ°ĐŊиĐĩ ...",
"Choose attachment" : "Đ˜ĐˇĐąĐžŅ€ ĐŊа ĐŋŅ€Đ¸ĐēĐ°Ņ‡ĐĩĐŊ Ņ„Đ°ĐšĐģ",
"Set a due date" : "ЗадаваĐŊĐĩ ĐŊа ĐēŅ€Đ°ĐšĐŊа Đ´Đ°Ņ‚Đ°",
"Remove due date" : "ĐŸŅ€ĐĩĐŧĐ°Ņ…ĐŊи ĐēŅ€Đ°ĐšĐŊĐ°Ņ‚Đ° Đ´Đ°Ņ‚Đ°",
"Mark as done" : "ĐœĐ°Ņ€ĐēĐ¸Ņ€Đ°Đš ĐēĐ°Ņ‚Đž ĐŗĐžŅ‚ĐžĐ˛Đž",
"Unarchive card" : "Đ Đ°ĐˇĐ°Ņ€Ņ…Đ¸Đ˛Đ¸Ņ€Đ°ĐŊĐĩ ĐŊа ĐēĐ°Ņ€Ņ‚Đ°",
"Archive card" : "ĐŅ€Ņ…Đ¸Đ˛Đ¸Ņ€Đ°ĐŊĐĩ ĐŊа ĐēĐ°Ņ€Ņ‚Đ°",
"Select Date" : "ИСйĐĩŅ€ĐĩŅ‚Đĩ Đ´Đ°Ņ‚Đ°",
"Assign a tag to this cardâ€Ļ" : "ĐŸŅ€Đ¸ŅĐ˛ĐžŅĐ˛Đ°ĐŊĐĩ ĐŊа ĐĩŅ‚Đ¸ĐēĐĩŅ‚ ĐŊа Ņ‚Đ°ĐˇĐ¸ ĐēĐ°Ņ€Ņ‚Đ° ...",
"(group)" : "(ĐŗŅ€ŅƒĐŋа)",
"Todo items" : "ЕĐģĐĩĐŧĐĩĐŊŅ‚Đ¸ ĐŊа ĐˇĐ°Đ´Đ°Ņ‡Đ° Са иСĐŋҊĐģĐŊĐĩĐŊиĐĩ",
"{count} comments, {unread} unread" : "{count} ĐēĐžĐŧĐĩĐŊŅ‚Đ°Ņ€Đ¸, {unread} ĐŊĐĩĐŋŅ€ĐžŅ‡ĐĩŅ‚ĐĩĐŊи",
"Edit card title" : "Đ ĐĩдаĐēŅ‚Đ¸Ņ€Đ°ĐŊĐĩ ĐŊа ĐˇĐ°ĐŗĐģавиĐĩŅ‚Đž ĐŊа ĐēĐ°Ņ€Ņ‚Đ°",
"Card details" : "ĐŸĐžĐ´Ņ€ĐžĐąĐŊĐžŅŅ‚Đ¸ Са ĐēĐ°Ņ€Ņ‚Đ°Ņ‚Đ°",
"Assign to me" : "Đ—Đ°Ņ‡Đ¸ŅĐģŅĐ˛Đ°ĐŊĐĩ ĐēҊĐŧ ĐŧĐĩĐŊ",
"Unassign myself" : "ĐžŅ‚ĐŧŅĐŊа ĐŊа ĐˇĐ°Ņ‡Đ¸ŅĐģŅĐ˛Đ°ĐŊĐĩŅ‚Đž ĐēҊĐŧ ĐŧĐĩĐŊ",
"Delete card" : "Đ˜ĐˇŅ‚Ņ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐēĐ°Ņ€Ņ‚Đ°",
"Card deleted" : "ĐšĐ°Ņ€Ņ‚Đ°Ņ‚Đ° Đĩ Đ¸ĐˇŅ‚Ņ€Đ¸Ņ‚Đ°",
"seconds ago" : "ĐŋŅ€Đĩди ҁĐĩĐē҃ĐŊди",
"Keyboard shortcuts" : "Đ‘ŅŠŅ€ĐˇĐ¸ ĐēĐģĐ°Đ˛Đ¸ŅˆĐ¸",
"Keyboard shortcut" : "КĐģĐ°Đ˛Đ¸ŅˆĐŊи ĐēĐžĐŧйиĐŊĐ°Ņ†Đ¸Đ¸",
"Action" : "ДĐĩĐšŅŅ‚Đ˛Đ¸Đĩ",
"Shift" : "Shift /ĐąŅƒŅ‚ĐžĐŊ/",
"Ctrl" : "Ctrl /ĐąŅƒŅ‚ĐžĐŊ/",
"Search" : "ĐĸŅŠŅ€ŅĐĩĐŊĐĩ",
"Enter" : "Đ’ŅŠĐ˛ĐĩĐļдаĐŊĐĩ",
"Space" : "ĐŸŅ€ĐžŅŅ‚Ņ€Đ°ĐŊŅŅ‚Đ˛Đž",
"All boards" : "Đ’ŅĐ¸Ņ‡Đēи Ņ‚Đ°ĐąĐģа",
"Archived boards" : "ĐŅ€Ņ…Đ¸Đ˛Đ¸Ņ€Đ°ĐŊи Ņ‚Đ°ĐąĐģа",
"Shared with you" : "ĐĄĐŋОдĐĩĐģĐĩĐŊи ҁ Đ˛Đ°Ņ",
"Deck settings" : "ĐĐ°ŅŅ‚Ņ€ĐžĐšĐēи ĐŊа ĐŋĐģĐ°Ņ‚Ņ„ĐžŅ€ĐŧĐ°Ņ‚Đ°",
"Use bigger card view" : "ИСĐŋĐžĐģСва ĐŋĐž-ĐŗĐžĐģŅĐŧ Đ¸ĐˇĐŗĐģĐĩĐ´ ĐŊа ĐēĐ°Ņ€Ņ‚Đ°Ņ‚Đ°",
"Show card ID badge" : "ПоĐēаСваĐŊĐĩ ĐŊа ОйОСĐŊĐ°Ņ‡ĐĩĐŊиĐĩ Са ŅĐ°ĐŧĐžĐģĐ¸Ņ‡ĐŊĐžŅŅ‚ ĐŊа ĐēĐ°Ņ€Ņ‚Đ°Ņ‚Đ°",
"Show boards in calendar/tasks" : "ПоĐēаСваĐŊĐĩ ĐŊа Ņ‚Đ°ĐąĐģĐ°Ņ‚Đ° в ĐēаĐģĐĩĐŊĐ´Đ°Ņ€ / ĐˇĐ°Đ´Đ°Ņ‡Đ¸",
"Board details" : "ĐŸĐžĐ´Ņ€ĐžĐąĐŊĐžŅŅ‚Đ¸ Са Ņ‚Đ°ĐąĐģĐž",
"Edit board" : "Đ ĐĩдаĐēŅ‚Đ¸Ņ€Đ°ĐŊĐĩ ĐŊа Ņ‚Đ°ĐąĐģĐž",
"Clone board" : " КĐģĐžĐŊĐ¸Ņ€Đ°ĐŊĐĩ ĐŊа Ņ‚Đ°ĐąĐģĐž",
"Unarchive board" : "Đ Đ°ĐˇĐ°Ņ€Ņ…Đ¸Đ˛Đ¸Ņ€Đ°ĐŊĐĩ ĐŊĐ°Ņ‚Đ°ĐąĐģĐž",
"Archive board" : "ĐŅ€Ņ…Đ¸Đ˛Đ¸Ņ€Đ°ĐŊĐĩ ĐŊа Ņ‚Đ°ĐąĐģĐž",
"Export board" : "ЕĐēҁĐŋĐžŅ€Ņ‚Đ¸Ņ€Đ°ĐŊĐĩ ĐŊа Ņ‚Đ°ĐąĐģĐž",
"Turn on due date reminders" : "ВĐēĐģŅŽŅ‡Đ˛Đ° ĐŊаĐŋĐžĐŧĐŊŅĐŊĐ¸ŅŅ‚Đ° Са ĐēŅ€Đ°ĐĩĐŊ ŅŅ€ĐžĐē",
"Turn off due date reminders" : "ИСĐēĐģŅŽŅ‡Đ˛Đ° ĐŊаĐŋĐžĐŧĐŊŅĐŊĐ¸ŅŅ‚Đ° Са ĐēŅ€Đ°ĐĩĐŊ ŅŅ€ĐžĐē",
"Due date reminders" : " НаĐŋĐžĐŧĐŊŅĐŊĐ¸Ņ Са ĐēŅ€Đ°ĐĩĐŊ ŅŅ€ĐžĐē",
"All cards" : "Đ’ŅĐ¸Ņ‡Đēи ĐēĐ°Ņ€Ņ‚Đ¸",
"Assigned cards" : "Đ—Đ°Ņ‡Đ¸ŅĐģĐĩĐŊи ĐēĐ°Ņ€Ņ‚Đ¸",
"No notifications" : "ĐŅĐŧа иСвĐĩŅŅ‚Đ¸Ņ",
"Delete board" : "Đ˜ĐˇŅ‚Ņ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа Ņ‚Đ°ĐąĐģĐž",
"Board {0} deleted" : "ĐĸайĐģĐž {0} Đ¸ĐˇŅ‚Ņ€Đ¸Ņ‚Đž",
"Only assigned cards" : "ХаĐŧĐž ĐˇĐ°Ņ‡Đ¸ŅĐģĐĩĐŊĐ¸Ņ‚Đĩ ĐēĐ°Ņ€Ņ‚Đ¸",
"No reminder" : "ĐŅĐŧа ĐŊаĐŋĐžĐŧĐŊŅĐŊĐĩ",
"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}? ĐĸОва ҉Đĩ Đ¸ĐˇŅ‚Ņ€Đ¸Đĩ Đ˛ŅĐ¸Ņ‡Đēи даĐŊĐŊи ĐŊа Ņ‚ĐžĐ˛Đ° Ņ‚Đ°ĐąĐģĐž, вĐēĐģŅŽŅ‡Đ¸Ņ‚ĐĩĐģĐŊĐž Đ°Ņ€Ņ…Đ¸Đ˛Đ¸Ņ€Đ°ĐŊĐ¸Ņ‚Đĩ ĐēĐ°Ņ€Ņ‚Đ¸.",
"Delete the board?" : "Đ˜ĐˇŅ‚Ņ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа Ņ‚Đ°ĐąĐģĐžŅ‚Đž?",
"Loading filtered view" : "Đ—Đ°Ņ€ĐĩĐļдаĐŊĐĩ ĐŊа Ņ„Đ¸ĐģŅ‚Ņ€Đ¸Ņ€Đ°ĐŊ Đ¸ĐˇĐŗĐģĐĩĐ´",
"Today" : "ДĐŊĐĩҁ",
"Tomorrow" : "ĐŖŅ‚Ņ€Đĩ",
"No due" : "НĐĩ ҁĐĩ Đ´ŅŠĐģĐļи",
"Search for {searchQuery} in all boards" : "ĐĸŅŠŅ€ŅĐĩĐŊĐĩ ĐŊа {searchQuery} Đ˛ŅŠĐ˛ Đ˛ŅĐ¸Ņ‡Đēи Ņ‚Đ°ĐąĐģа",
"No results found" : "ĐŅĐŧа ĐŊаĐŧĐĩŅ€ĐĩĐŊи Ņ€ĐĩĐˇŅƒĐģŅ‚Đ°Ņ‚Đ¸",
"Deck board {name}\n* Last modified on {lastMod}" : "ĐĸайĐģĐž {name}\n* ĐŸĐžŅĐģĐĩĐ´ĐŊа ĐŋŅ€ĐžĐŧŅĐŊа ĐŊа {lastMod}",
"{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} ĐēĐžĐŧĐĩĐŊŅ‚Đ°Ņ€Đ°",
"{nbCards} cards" : "{nbCards} ĐēĐ°Ņ€Ņ‚Đ¸",
"Click to expand comment" : "КĐģиĐēваĐŊĐĩ Са Ņ€Đ°ĐˇŅˆĐ¸Ņ€ŅĐ˛Đ°ĐŊĐĩ ĐŊа ĐēĐžĐŧĐĩĐŊŅ‚Đ°Ņ€Đ°",
"Create a new card" : "ĐĄŅŠĐˇĐ´Đ°Đ˛Đ°ĐŊĐĩ ĐŊа ĐŊОва ĐēĐ°Ņ€Ņ‚Đ°",
"Card title" : "Đ—Đ°ĐŗĐģавиĐĩ ĐŊа ĐēĐ°Ņ€Ņ‚Đ°",
"Create card" : "ĐĄŅŠĐˇĐ´Đ°Đ˛Đ°ĐŊĐĩ ĐŊа ĐēĐ°Ņ€Ņ‚Đ°",
"Creating the new card â€Ļ" : "ĐĄŅŠĐˇĐ´Đ°Đ˛Đ°ĐŊĐĩ ĐŊа ĐŊĐžĐ˛Đ°Ņ‚Đ° ĐēĐ°Ņ€Ņ‚Đ° ...",
"Card \"{card}\" was added to \"{board}\"" : "ĐšĐ°Ņ€Ņ‚Đ° \"{card}\" ĐąĐĩ҈Đĩ дОйавĐĩĐŊа ĐēҊĐŧ \"{board}\"",
"Open card" : "ĐžŅ‚Đ˛Đ°Ņ€ŅĐŊĐĩ ĐŊа ĐēĐ°Ņ€Ņ‚Đ°",
"Close" : "Đ—Đ°Ņ‚Đ˛Đ°Ņ€ŅĐŊĐĩ",
"No upcoming cards" : "ĐŅĐŧа ĐŋŅ€ĐĩĐ´ŅŅ‚ĐžŅŅ‰Đ¸ ĐēĐ°Ņ€Ņ‚Đ¸",
"upcoming cards" : "ĐŋŅ€ĐĩĐ´ŅŅ‚ĐžŅŅ‰Đ¸ ĐēĐ°Ņ€Ņ‚Đ¸",
"New card" : "Нова ĐēĐ°Ņ€Ņ‚Đ°",
"Due on {date}" : "ĐšŅ€Đ°ĐĩĐŊ ŅŅ€ĐžĐē Đ´Đž {date}",
"Link to a board" : "ЛиĐŊĐē ĐēҊĐŧ Ņ‚Đ°ĐąĐģĐž",
"Link to a card" : "ЛиĐŊĐē ĐēҊĐŧ ĐēĐ°Ņ€Ņ‚Đ°",
"Create a card" : "ĐĄŅŠĐˇĐ´Đ°Đ˛Đ°ĐŊĐĩ ĐŊа ĐēĐ°Ņ€Ņ‚Đ°",
"Message from {author} in {conversationName}" : "ĐĄŅŠĐžĐąŅ‰ĐĩĐŊиĐĩ ĐžŅ‚ {author} в {conversationName}",
"Something went wrong" : "НĐĩŅ‰Đž ҁĐĩ ĐžĐąŅŠŅ€Đēа",
"Failed to upload {name}" : " НĐĩ҃ҁĐŋĐĩ҈ĐŊĐž ĐēĐ°Ņ‡Đ˛Đ°ĐŊĐĩ ĐŊа {name}",
"Maximum file size of {size} exceeded" : "МаĐēŅĐ¸ĐŧаĐģĐŊĐ¸ŅŅ‚ Ņ€Đ°ĐˇĐŧĐĩŅ€ ĐŊа Ņ„Đ°ĐšĐģа ĐžŅ‚ {size} Đĩ ĐŊĐ°Đ´Đ˛Đ¸ŅˆĐĩĐŊ",
"Error creating the share" : "Đ“Ņ€Đĩ҈Đēа ĐŋŅ€Đ¸ ŅŅŠĐˇĐ´Đ°Đ˛Đ°ĐŊĐĩ ĐŊа ҁĐŋОдĐĩĐģŅĐŊĐĩ",
"Share with a Deck card" : "ĐĄĐŋОдĐĩĐģŅĐŊĐĩ ҁ Deck ĐēĐ°Ņ€Ņ‚Đ°",
"Share {file} with a Deck card" : "ĐĄĐŋОдĐĩĐģŅĐŊĐĩ {file} ҁ Deck ĐēĐ°Ņ€Ņ‚Đ°",
"Share" : "ĐĄĐŋОдĐĩĐģŅĐŊĐĩ",
"A <strong>card description</strong> inside the Deck app has been changed" : "<strong>ОĐŋĐ¸ŅĐ°ĐŊиĐĩŅ‚Đž ĐŊа ĐēĐ°Ņ€Ņ‚Đ°Ņ‚Đ°</strong> в ĐŋŅ€Đ¸ĐģĐžĐļĐĩĐŊиĐĩŅ‚Đž Deck/ĐŊĐ°ĐąĐžŅ€/ Đĩ ĐŋŅ€ĐžĐŧĐĩĐŊĐĩĐŊĐž",
"Timeline" : "Đ’Ņ€ĐĩĐŧĐĩва ĐģиĐŊĐ¸Ņ",
"Share board with a user, group or circle â€Ļ" : "ĐĄĐŋОдĐĩĐģŅĐŊĐĩ ĐŊа Ņ‚Đ°ĐąĐģĐžŅ‚Đž ҁ ĐŋĐžŅ‚Ņ€ĐĩĐąĐ¸Ņ‚ĐĩĐģ, ĐŗŅ€ŅƒĐŋа иĐģи ĐēŅ€ŅŠĐŗ ...",
"Searching for users, groups and circles â€Ļ" : "ĐĸŅŠŅ€ŅĐĩĐŊĐĩ Са ĐŋĐžŅ‚Ņ€ĐĩĐąĐ¸Ņ‚ĐĩĐģи, ĐŗŅ€ŅƒĐŋи и ĐēŅ€ŅŠĐŗĐžĐ˛Đĩ ...",
"(Circle)" : "(ĐšŅ€ŅŠĐŗ)",
"Assign to users/groups/circles" : "Đ—Đ°Ņ‡Đ¸ŅĐģŅĐ˛Đ°ĐŊĐĩ ĐēҊĐŧ ĐŋĐžŅ‚Ņ€ĐĩĐąĐ¸Ņ‚ĐĩĐģи/ĐŗŅ€ŅƒĐŋи/ĐēŅ€ŅŠĐŗĐžĐ˛Đĩ",
"Next week" : "ĐĄĐģĐĩĐ´Đ˛Đ°Ņ‰Đ° ҁĐĩĐ´ĐŧĐ¸Ņ†Đ°",
"Next month" : "ĐĄĐģĐĩĐ´Đ˛Đ°Ņ‰Đ¸Ņ ĐŧĐĩҁĐĩ҆",
"List is empty" : "ĐĄĐŋĐ¸ŅŅŠĐēŅŠŅ‚ Đĩ ĐŋŅ€Đ°ĐˇĐĩĐŊ",
"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/ĐŊĐ°ĐąĐžŅ€/ ҉Đĩ ĐąĐģĐžĐēĐ¸Ņ€Đ° ĐŋĐžŅ‚Ņ€ĐĩĐąĐ¸Ņ‚ĐĩĐģĐ¸Ņ‚Đĩ, ĐēĐžĐ¸Ņ‚Đž ĐŊĐĩ ŅĐ° Ņ‡Đ°ŅŅ‚ ĐžŅ‚ Ņ‚ĐĩСи ĐŗŅ€ŅƒĐŋи, да ŅŅŠĐˇĐ´Đ°Đ˛Đ°Ņ‚ ŅĐ˛ĐžĐ¸ ŅĐžĐąŅŅ‚Đ˛ĐĩĐŊи Ņ‚Đ°ĐąĐģа. ĐŸĐžŅ‚Ņ€ĐĩĐąĐ¸Ņ‚ĐĩĐģĐ¸Ņ‚Đĩ Đ˛ŅĐĩ ĐžŅ‰Đĩ ҉Đĩ ĐŧĐžĐŗĐ°Ņ‚ да Ņ€Đ°ĐąĐžŅ‚ŅŅ‚ ĐŊа Ņ‚Đ°ĐąĐģĐ°Ņ‚Đ°, ĐēĐžĐ¸Ņ‚Đž ŅĐ° ҁĐŋОдĐĩĐģĐĩĐŊи ҁ Ņ‚ŅŅ…."
"Settings" : "ĐĐ°ŅŅ‚Ņ€ĐžĐšĐēи",
"An error occurred" : "Đ’ŅŠĐˇĐŊиĐēĐŊа ĐŗŅ€Đĩ҈Đēа"
},
"nplurals=2; plural=(n != 1);");

View File

@@ -1,329 +1,34 @@
{ "translations": {
"You have created a new board {board}" : "ĐĄŅŠĐˇĐ´Đ°Đ´ĐžŅ…Ņ‚Đĩ ĐŊОвО Ņ‚Đ°ĐąĐģĐž {board}",
"{user} has created a new board {board}" : "{user} ŅŅŠĐˇĐ´Đ°Đ´Đĩ ĐŊОвО Ņ‚Đ°ĐąĐģĐž {board}",
"You have deleted the board {board}" : "Đ˜ĐˇŅ‚Ņ€Đ¸Ņ…Ņ‚Đĩ Ņ‚Đ°ĐąĐģĐžŅ‚Đž {board}",
"{user} has deleted the board {board}" : "{user} Đ¸ĐˇŅ‚Ņ€Đ¸ Ņ‚Đ°ĐąĐģĐžŅ‚Đž {board}",
"You have restored the board {board}" : "Đ’ŅŠĐˇŅŅ‚Đ°ĐŊĐžĐ˛Đ¸Ņ…Ņ‚Đĩ Ņ‚Đ°ĐąĐģĐžŅ‚Đž {board}",
"{user} has restored the board {board}" : "{user} Đ˛ŅŠĐˇŅŅ‚Đ°ĐŊОви Ņ‚Đ°ĐąĐģĐžŅ‚Đž {board}",
"You have shared the board {board} with {acl}" : "ĐĄĐŋОдĐĩĐģĐ¸Ņ…Ņ‚Đĩ Ņ‚Đ°ĐąĐģĐžŅ‚Đž {board} ҁ {acl}",
"{user} has shared the board {board} with {acl}" : "{user} ҁĐŋОдĐĩĐģи Ņ‚Đ°ĐąĐģĐžŅ‚Đž {board} ҁ {acl}",
"You have removed {acl} from the board {board}" : "ĐŸŅ€ĐĩĐŧĐ°Ņ…ĐŊĐ°Ņ…Ņ‚Đĩ {acl} ĐžŅ‚ Ņ‚Đ°ĐąĐģĐžŅ‚Đž {board}",
"{user} has removed {acl} from the board {board}" : "{user} ĐŋŅ€ĐĩĐŧĐ°Ņ…ĐŊа {acl} ĐžŅ‚ Ņ‚Đ°ĐąĐģĐžŅ‚Đž {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} Đ°Ņ€Ņ…Đ¸Đ˛Đ¸Ņ€Đ° Ņ‚Đ°ĐąĐģĐžŅ‚Đž {board}",
"You have unarchived the board {board}" : "Đ Đ°ĐˇĐ°Ņ€Ņ…Đ¸Đ˛Đ¸Ņ€Đ°Đģи ҁ҂Đĩ Ņ‚Đ°ĐąĐģĐžŅ‚Đž {board}",
"{user} has unarchived the board {before}" : "{user} Đĩ Ņ€Đ°ĐˇĐ°Ņ€Ņ…Đ¸Đ˛Đ¸Ņ€Đ°Đģ Ņ‚Đ°ĐąĐģĐžŅ‚Đž {before}",
"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}",
"{user} has updated the description of the card {card} in list {stack} on board {board}" : " {user} аĐēŅ‚ŅƒĐ°ĐģĐ¸ĐˇĐ¸Ņ€Đ° ĐžĐŋĐ¸ŅĐ°ĐŊиĐĩŅ‚Đž ĐēҊĐŧ ĐēĐ°Ņ€Ņ‚Đ° {card} в ҁĐŋĐ¸ŅŅŠĐē {stack} ĐŊа Ņ‚Đ°ĐąĐģĐžŅ‚Đž {board}",
"You have archived card {card} in list {stack} on board {board}" : "ĐŅ€Ņ…Đ¸Đ˛Đ¸Ņ€Đ°Đģи ҁ҂Đĩ ĐēĐ°Ņ€Ņ‚Đ° {card} в ҁĐŋĐ¸ŅŅŠĐē {stack} ĐŊа ĐąĐžŅ€Đ´Đ° {board}",
"{user} has archived card {card} in list {stack} on board {board}" : "{user} Đ°Ņ€Ņ…Đ¸Đ˛Đ¸Ņ€Đ° ĐēĐ°Ņ€Ņ‚Đ° {card} в ҁĐŋĐ¸ŅŅŠĐē {stack} ĐŊа ĐąĐžŅ€Đ´Đ° {board}",
"You have unarchived card {card} in list {stack} on board {board}" : "Đ Đ°ĐˇĐ°Ņ€Ņ…Đ¸Đ˛Đ¸Ņ€Đ°Đģи ҁ҂Đĩ ĐēĐ°Ņ€Ņ‚Đ° {card} в ҁĐŋĐ¸ŅŅŠĐē {stack} ĐŊа ĐąĐžŅ€Đ´Đ° {board}",
"{user} has unarchived card {card} in list {stack} on board {board}" : "{user} Ņ€Đ°ĐˇĐ°Ņ€Ņ…Đ¸Đ˛Đ¸Ņ€Đ° ĐēĐ°Ņ€Ņ‚Đ° {card} в ҁĐŋĐ¸ŅŅŠĐē {stack} ĐŊа ĐąĐžŅ€Đ´Đ° {board}",
"You have removed the due date of card {card}" : "ĐŸŅ€ĐĩĐŧĐ°Ņ…ĐŊĐ°Ņ…Ņ‚Đĩ Đ´Đ°Ņ‚Đ°Ņ‚Đ° ĐŊа ĐŋадĐĩĐļа ĐŊа ĐēĐ°Ņ€Ņ‚Đ°Ņ‚Đ° {card}",
"{user} has removed the due date of card {card}" : "{user} ĐŋŅ€ĐĩĐŧĐ°Ņ…ĐŊа Đ´Đ°Ņ‚Đ°Ņ‚Đ° ĐŊа ĐŋадĐĩĐļа ĐŊа ĐēĐ°Ņ€Ņ‚Đ°Ņ‚Đ° {card}",
"You have set the due date of card {card} to {after}" : "ЗадаĐģи ҁ҂Đĩ Đ´Đ°Ņ‚Đ°Ņ‚Đ° ĐŊа ĐŋадĐĩĐļа ĐŊа ĐēĐ°Ņ€Ņ‚Đ°Ņ‚Đ° {card} ĐŊа {after}",
"{user} has set the due date of card {card} to {after}" : "{user} СададĐĩ Đ´Đ°Ņ‚Đ° ĐŊа ĐŋадĐĩĐļа ĐŊа ĐēĐ°Ņ€Ņ‚Đ°Ņ‚Đ° {card} ĐŊа {after}",
"You have updated the due date of card {card} to {after}" : "АĐēŅ‚ŅƒĐ°ĐģĐ¸ĐˇĐ¸Ņ€Đ°Đģи ҁ҂Đĩ Đ´Đ°Ņ‚Đ°Ņ‚Đ° ĐŊа ĐŋадĐĩĐļа ĐŊа ĐēĐ°Ņ€Ņ‚Đ°Ņ‚Đ° {card} ĐŊа {after}",
"{user} has updated the due date of card {card} to {after}" : "{user} аĐēŅ‚ŅƒĐ°ĐģĐ¸ĐˇĐ¸Ņ€Đ° Đ´Đ°Ņ‚Đ°Ņ‚Đ° ĐŊа ĐŋадĐĩĐļа ĐŊа ĐēĐ°Ņ€Ņ‚Đ°Ņ‚Đ° {card} ĐŊа {after}",
"You have added the tag {label} to card {card} in list {stack} on board {board}" : "Đ”ĐžĐąĐ°Đ˛Đ¸Ņ…Ņ‚Đĩ ĐĩŅ‚Đ¸ĐēĐĩŅ‚ {label} ĐēҊĐŧ ĐēĐ°Ņ€Ņ‚Đ° {card} в ҁĐŋĐ¸ŅŅŠĐē {stack} ĐŊа Ņ‚Đ°ĐąĐģĐžŅ‚Đž {board}",
"{user} has added the tag {label} to card {card} in list {stack} on board {board}" : "{user} дОйави ĐĩŅ‚Đ¸ĐēĐĩŅ‚ {label} ĐēҊĐŧ ĐēĐ°Ņ€Ņ‚Đ° {card} в ҁĐŋĐ¸ŅŅŠĐē {stack} ĐŊĐ°Ņ‚Đ°ĐąĐģĐžŅ‚Đž {board}",
"You have removed the tag {label} from card {card} in list {stack} on board {board}" : "ĐŸŅ€ĐĩĐŧĐ°Ņ…ĐŊĐ°Ņ…Ņ‚Đĩ ĐĩŅ‚Đ¸ĐēĐĩŅ‚ {label} ĐēҊĐŧ ĐēĐ°Ņ€Ņ‚Đ° {card} в ҁĐŋĐ¸ŅŅŠĐē {stack} ĐŊа Ņ‚Đ°ĐąĐģĐžŅ‚Đž {board}",
"{user} has removed the tag {label} from card {card} in list {stack} on board {board}" : "{user} ĐŋŅ€ĐĩĐŧĐ°Ņ…ĐŊа ĐĩŅ‚Đ¸ĐēĐĩŅ‚ {label} ĐēҊĐŧ ĐēĐ°Ņ€Ņ‚Đ° {card} в ҁĐŋĐ¸ŅŅŠĐē {stack} ĐŊа Ņ‚Đ°ĐąĐģĐžŅ‚Đž {board}",
"You have assigned {assigneduser} to card {card} on board {board}" : "ĐŸŅ€Đ¸ŅĐ˛ĐžĐ¸Đģи ҁ҂Đĩ {assigneduser} ĐŊа ĐēĐ°Ņ€Ņ‚Đ° {card} ĐŊа ĐąĐžŅ€Đ´Đ° {board}",
"{user} has assigned {assigneduser} to card {card} on board {board}" : "{user} ĐŋŅ€Đ¸ŅĐ˛ĐžĐ¸ {assigneduser} ĐŊа ĐēĐ°Ņ€Ņ‚Đ° {card} ĐŊа ĐąĐžŅ€Đ´Đ° {board}",
"You have unassigned {assigneduser} from card {card} on board {board}" : "ИĐŧĐ°Ņ‚Đĩ ĐŊĐĩĐžĐŋŅ€ĐĩĐ´ĐĩĐģĐĩĐŊ {assigneduser} ĐŊа ĐēĐ°Ņ€Ņ‚Đ° {card} ĐŊа ĐąĐžŅ€Đ´Đ° {board}",
"{user} has unassigned {assigneduser} from card {card} on board {board}" : "{user} иĐŧа ĐŊĐĩĐžĐŋŅ€ĐĩĐ´ĐĩĐģĐĩĐŊ {assigneduser} ĐŊа ĐēĐ°Ņ€Ņ‚Đ° {card} ĐŊа ĐąĐžŅ€Đ´Đ° {board}",
"You have moved the card {card} from list {stackBefore} to {stack}" : "ĐŸŅ€ĐĩĐŧĐĩŅŅ‚Đ¸Ņ…Ņ‚Đĩ ĐēĐ°Ņ€Ņ‚Đ°Ņ‚Đ° {card} ĐžŅ‚ ҁĐŋĐ¸ŅŅŠĐē {stackBefore} в {stack}",
"{user} has moved the card {card} from list {stackBefore} to {stack}" : "{user} ĐŋŅ€ĐĩĐŧĐĩŅŅ‚Đ¸ ĐēĐ°Ņ€Ņ‚Đ°Ņ‚Đ° {card} ĐžŅ‚ ҁĐŋĐ¸ŅŅŠĐē {stackBefore} в {stack}",
"You have added the attachment {attachment} to card {card}" : "Đ”ĐžĐąĐ°Đ˛Đ¸Ņ…Ņ‚Đĩ ĐŋŅ€Đ¸ĐēĐ°Ņ‡ĐĩĐŊĐ¸Ņ Ņ„Đ°ĐšĐģ {attachment} ĐēҊĐŧ ĐēĐ°Ņ€Ņ‚Đ° {card}",
"{user} has added the attachment {attachment} to card {card}" : "{user} дОйави ĐŋŅ€Đ¸ĐēĐ°Ņ‡ĐĩĐŊĐ¸Ņ Ņ„Đ°ĐšĐģ {attachment} ĐēҊĐŧ ĐēĐ°Ņ€Ņ‚Đ° {card}",
"You have updated the attachment {attachment} on card {card}" : " АĐēŅ‚ŅƒĐ°ĐģĐ¸ĐˇĐ¸Ņ€Đ°Đģи ҁ҂Đĩ ĐŋŅ€Đ¸ĐēĐ°Ņ‡ĐĩĐŊĐ¸Ņ Ņ„Đ°ĐšĐģ {attachment} ĐēҊĐŧ ĐēĐ°Ņ€Ņ‚Đ° {card}",
"{user} has updated the attachment {attachment} on card {card}" : "{user} аĐēŅ‚ŅƒĐ°ĐģĐ¸ĐˇĐ¸Ņ€Đ° ĐŋŅ€Đ¸ĐēĐ°Ņ‡ĐĩĐŊĐ¸Ņ Ņ„Đ°ĐšĐģ {attachment} ĐēҊĐŧ ĐēĐ°Ņ€Ņ‚Đ° {card}",
"You have deleted the attachment {attachment} from card {card}" : "Đ˜ĐˇŅ‚Ņ€Đ¸Ņ…Ņ‚Đĩ ĐŋŅ€Đ¸ĐēĐ°Ņ‡ĐĩĐŊĐ¸Ņ Ņ„Đ°ĐšĐģ {attachment} ĐžŅ‚ ĐēĐ°Ņ€Ņ‚Đ° {card}",
"{user} has deleted the attachment {attachment} from card {card}" : "{user} Đ¸ĐˇŅ‚Ņ€Đ¸ ĐŋŅ€Đ¸ĐēĐ°Ņ‡ĐĩĐŊĐ¸Ņ Ņ„Đ°ĐšĐģ {attachment} ĐēҊĐŧ ĐēĐ°Ņ€Ņ‚Đ° {card}",
"You have restored the attachment {attachment} to card {card}" : "Đ’ŅŠĐˇŅŅ‚Đ°ĐŊОвиĐģи ҁ҂Đĩ ĐŋŅ€Đ¸ĐēĐ°Ņ‡ĐĩĐŊĐ¸Ņ Ņ„Đ°ĐšĐģ {attachment} ĐēҊĐŧ ĐēĐ°Ņ€Ņ‚Đ° {card}",
"{user} has restored the attachment {attachment} to card {card}" : "{user} Đ˛ŅŠĐˇŅŅ‚Đ°ĐŊОви ĐŋŅ€Đ¸ĐēĐ°Ņ‡ĐĩĐŊĐ¸Ņ Ņ„Đ°ĐšĐģ {attachment} ĐēҊĐŧ ĐēĐ°Ņ€Ņ‚Đ° {card}",
"You have commented on card {card}" : "КоĐŧĐĩĐŊŅ‚Đ¸Ņ€Đ°Đģи ҁ҂Đĩ ĐēĐ°Ņ€Ņ‚Đ° {card}",
"{user} has commented on card {card}" : "{user} ĐēĐžĐŧĐĩĐŊŅ‚Đ¸Ņ€Đ° ĐēĐ°Ņ€Ņ‚Đ° {card}",
"Deck" : "ĐĐ°ĐąĐžŅ€",
"Changes in the <strong>Deck app</strong>" : "ĐŸŅ€ĐžĐŧĐĩĐŊи в <strong>ĐŋŅ€Đ¸ĐģĐžĐļĐĩĐŊиĐĩŅ‚Đž Deck</strong>",
"A <strong>comment</strong> was created on a card" : "На ĐēĐ°Ņ€Ņ‚Đ°Ņ‚Đ° Đĩ ŅŅŠĐˇĐ´Đ°Đ´ĐĩĐŊ <strong>ĐēĐžĐŧĐĩĐŊŅ‚Đ°Ņ€</strong>",
"Upcoming cards" : "ĐŸŅ€ĐĩĐ´ŅŅ‚ĐžŅŅ‰Đ¸ ĐēĐ°Ņ€Ņ‚Đ¸",
"Load more" : "Đ—Đ°Ņ€ĐĩĐļдаĐŊĐĩ ĐŊа ĐžŅ‰Đĩ",
"Personal" : "Đ›Đ¸Ņ‡ĐŊи",
"The card \"%s\" on \"%s\" has been assigned to you by %s." : "ĐšĐ°Ņ€Ņ‚Đ°Ņ‚Đ° \"%s\" ĐŊа \"%s\" Ви Đĩ йиĐģа Đ˛ŅŠĐˇĐģĐžĐļĐĩĐŊа ĐžŅ‚ %s.",
"{user} has assigned the card {deck-card} on {deck-board} to you." : "{user} Đĩ Đ˛ŅŠĐˇĐģĐžĐļиĐģ ĐēĐ°Ņ€Ņ‚Đ°Ņ‚Đ° {deck-card} ĐŊа {deck-board} ĐŊа Đ’Đ°Ņ.",
"The card \"%s\" on \"%s\" has reached its due date." : "ĐšĐ°Ņ€Ņ‚Đ°Ņ‚Đ° \"%s\" on \"%s\" Đĩ Đ´ĐžŅŅ‚Đ¸ĐŗĐŊаĐģа Đ´Đ°Ņ‚Đ°Ņ‚Đ° ĐŊа ĐŋадĐĩĐļа ŅĐ¸.",
"The card {deck-card} on {deck-board} has reached its due date." : "ĐšĐ°Ņ€Ņ‚Đ°Ņ‚Đ° {deck-card} ĐŊа {deck-board} Đĩ Đ´ĐžŅŅ‚Đ¸ĐŗĐŊаĐģа Đ´Đ°Ņ‚Đ°Ņ‚Đ° ĐŊа ĐŋадĐĩĐļа ŅĐ¸.",
"%s has mentioned you in a comment on \"%s\"." : "%s Ņ‚Đĩ ҁĐŋĐžĐŧĐĩĐŊа в ĐēĐžĐŧĐĩĐŊŅ‚Đ°Ņ€ Са “%s”",
"{user} has mentioned you in a comment on {deck-card}." : "{user} Ņ‚Đĩ ҁĐŋĐžĐŧĐĩĐŊа в ĐēĐžĐŧĐĩĐŊŅ‚Đ°Ņ€ Са {deck-card}.",
"The board \"%s\" has been shared with you by %s." : "ĐĸайĐģĐžŅ‚Đž \"%s\" Đĩ ҁĐŋОдĐĩĐģĐĩĐŊĐž ҁ Đ˛Đ°Ņ ĐžŅ‚%s.",
"{user} has shared {deck-board} with you." : "{user} ҁĐŋОдĐĩĐģи {deck-board} ҁ Đ’Đ°Ņ.",
"Deck board" : "Deck Ņ‚Đ°ĐąĐģĐž",
"Owned by %1$s" : "ĐŸŅ€Đ¸Ņ‚ĐĩĐļаваĐŊ ĐžŅ‚ %1$s",
"Deck boards, cards and comments" : "ĐĸайĐģа, ĐēĐ°Ņ€Ņ‚Đ¸ и ĐēĐžĐŧĐĩĐŊŅ‚Đ°Ņ€Đ¸",
"From %1$s, in %2$s/%3$s, owned by %4$s" : "ĐžŅ‚ %1$s, в %2$s/%3$s, ĐŋŅ€Đ¸Ņ‚ĐĩĐļаĐŊиĐĩ ĐŊа %4$s",
"Card comments" : "КоĐŧĐĩĐŊŅ‚Đ°Ņ€Đ¸ ĐŊа ĐēĐ°Ņ€Ņ‚Đ¸",
"%s on %s" : "%s ĐŊа %s",
"Deck boards and cards" : "ĐĸайĐģа и ĐēĐ°Ņ€Ņ‚Đ¸",
"No data was provided to create an attachment." : "НĐĩ ĐąŅŅ…Đ° ĐŋŅ€ĐĩĐ´ĐžŅŅ‚Đ°Đ˛ĐĩĐŊи даĐŊĐŊи Са ŅŅŠĐˇĐ´Đ°Đ˛Đ°ĐŊĐĩ ĐŊа ĐŋŅ€Đ¸ĐēĐ°Ņ‡ĐĩĐŊ Ņ„Đ°ĐšĐģ.",
"Finished" : "Đ“ĐžŅ‚ĐžĐ˛Đž",
"To review" : "За ĐŋŅ€ĐĩĐŗĐģĐĩĐ´",
"Action needed" : "НĐĩĐžĐąŅ…ĐžĐ´Đ¸ĐŧĐž Đĩ Đ´ĐĩĐšŅŅ‚Đ˛Đ¸Đĩ",
"Later" : "По-ĐēҊҁĐŊĐž",
"copy" : "КоĐŋĐ¸Ņ€Đ°ĐŊĐĩ",
"To do" : "Đ—Đ°Đ´Đ°Ņ‡Đ¸",
"Doing" : "Đ—Đ°Đ´Đ°Ņ‡Đ¸ в ĐŋŅ€ĐžŅ†Đĩҁ ĐŊа иСĐŋҊĐģĐŊĐĩĐŊиĐĩ",
"Done" : "Đ—Đ°Đ˛ŅŠŅ€ŅˆĐĩĐŊĐž",
"Example Task 3" : "ĐŸŅ€Đ¸ĐŧĐĩŅ€ĐŊа ĐˇĐ°Đ´Đ°Ņ‡Đ° 3",
"Example Task 2" : "ĐŸŅ€Đ¸ĐŧĐĩŅ€ĐŊа ĐˇĐ°Đ´Đ°Ņ‡Đ° 2",
"Example Task 1" : "ĐŸŅ€Đ¸ĐŧĐĩŅ€ĐŊа ĐˇĐ°Đ´Đ°Ņ‡Đ° 1",
"Done" : "Đ“ĐžŅ‚ĐžĐ˛Đž",
"The file was uploaded" : "ФаКĐģŅŠŅ‚ Đĩ ĐēĐ°Ņ‡ĐĩĐŊ",
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "РаСĐŧĐĩŅ€ŅŠŅ‚ ĐŊа ĐēĐ°Ņ‡ĐĩĐŊĐ¸ŅŅ‚ Ņ„Đ°ĐšĐģ ĐŊĐ°Đ´Đ˛Đ¸ŅˆĐ°Đ˛Đ° ĐŧаĐēŅĐ¸ĐŧаĐģĐŊĐ¸Ņ Ņ€Đ°ĐˇĐŧĐĩŅ€ ĐžĐŋŅ€ĐĩĐ´ĐĩĐģĐĩĐŊ ĐžŅ‚ upload_max_filesize в php.ini:",
"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" : "ФаКĐģŅŠŅ‚ Đĩ ĐēĐ°Ņ‡ĐĩĐŊ Ņ‡Đ°ŅŅ‚Đ¸Ņ‡ĐŊĐž",
"No file was uploaded" : "ĐĐ¸Ņ‚Đž ĐĩдиĐŊ Ņ„Đ°ĐšĐģ ĐŊĐĩ Đĩ ĐēĐ°Ņ‡ĐĩĐŊ",
"Missing a temporary folder" : "ЛиĐŋŅĐ˛Đ° Đ˛Ņ€ĐĩĐŧĐĩĐŊĐŊа ĐŋаĐŋĐēа",
"Could not write file to disk" : " ФаКĐģŅŠŅ‚ ĐŊĐĩ ĐŧĐžĐļа да ĐąŅŠĐ´Đĩ СаĐŋĐ¸ŅĐ°ĐŊ ĐŊа Đ´Đ¸ŅĐē",
"A PHP extension stopped the file upload" : "PHP Ņ€Đ°ĐˇŅˆĐ¸Ņ€ĐĩĐŊиĐĩ ҁĐŋŅ€Ņ ĐēĐ°Ņ‡Đ˛Đ°ĐŊĐĩŅ‚Đž ĐŊа Ņ„Đ°ĐšĐģа",
"No file uploaded or file size exceeds maximum of %s" : "ĐŅĐŧа ĐēĐ°Ņ‡ĐĩĐŊ Ņ„Đ°ĐšĐģ иĐģи Ņ€Đ°ĐˇĐŧĐĩŅ€ŅŠŅ‚ ĐŊа Ņ„Đ°ĐšĐģа ĐŊĐ°Đ´Đ˛Đ¸ŅˆĐ°Đ˛Đ° ĐŧаĐēŅĐ¸Đŧ҃Đŧа ĐžŅ‚ %s",
"This comment has more than %s characters.\nAdded as an attachment to the card with name %s.\nAccessible on URL: %s." : "ĐĸОСи ĐēĐžĐŧĐĩĐŊŅ‚Đ°Ņ€ иĐŧа ĐŋОвĐĩ҇Đĩ ĐžŅ‚ %s СĐŊаĐēа.\nДобавĐĩĐŊĐž ĐēĐ°Ņ‚Đž ĐŋŅ€Đ¸ĐēĐ°Ņ‡ĐĩĐŊ Ņ„Đ°ĐšĐģ ĐēҊĐŧ ĐēĐ°Ņ€Ņ‚Đ°Ņ‚Đ° ҁ иĐŧĐĩ %s.\nĐ”ĐžŅŅ‚ŅŠĐŋĐŊĐž ĐŊа URL: %s.",
"Card not found" : "ĐšĐ°Ņ‚Ņ€Ņ‚Đ°Ņ‚Đ° ĐŊĐĩ Đĩ ĐŊаĐŧĐĩŅ€ĐĩĐŊа",
"Path is already shared with this card" : "ĐŸŅŠŅ‚ŅŅ‚ вĐĩ҇Đĩ Đĩ ҁĐŋОдĐĩĐģĐĩĐŊ ҁ Ņ‚Đ°ĐˇĐ¸ ĐēĐ°Ņ€Ņ‚Đ°",
"Invalid date, date format must be YYYY-MM-DD" : "НĐĩваĐģидĐŊа Đ´Đ°Ņ‚Đ°, Ņ„ĐžŅ€ĐŧĐ°Ņ‚ŅŠŅ‚ Đĩ Ņ€Đ°ĐˇĐģĐ¸Ņ‡ĐĩĐŊ ĐžŅ‚ ГГГГ-ММ-ДД",
"Personal planning and team project organization" : "Đ›Đ¸Ņ‡ĐŊĐž ĐŋĐģаĐŊĐ¸Ņ€Đ°ĐŊĐĩ и ĐžŅ€ĐŗĐ°ĐŊĐ¸ĐˇĐ°Ņ†Đ¸Ņ ĐŊа ĐĩĐēиĐŋĐŊи ĐŋŅ€ĐžĐĩĐēŅ‚Đ¸",
"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 Đĩ иĐŊŅŅ‚Ņ€ŅƒĐŧĐĩĐŊŅ‚ Са ĐžŅ€ĐŗĐ°ĐŊĐ¸ĐˇĐ°Ņ†Đ¸Ņ в ŅŅ‚Đ¸Đģ kanban, ĐŊĐ°ŅĐžŅ‡ĐĩĐŊ ĐēҊĐŧ ĐģĐ¸Ņ‡ĐŊĐž ĐŋĐģаĐŊĐ¸Ņ€Đ°ĐŊĐĩ и ĐžŅ€ĐŗĐ°ĐŊĐ¸ĐˇĐ°Ņ†Đ¸Ņ ĐŊа ĐŋŅ€ĐžĐĩĐēŅ‚Đ¸ Са ĐĩĐēиĐŋи, иĐŊŅ‚ĐĩĐŗŅ€Đ¸Ņ€Đ°ĐŊи ҁ Nextcloud.\n\n\n- đŸ“Ĩ ДобавĐĩŅ‚Đĩ ĐˇĐ°Đ´Đ°Ņ‡Đ¸Ņ‚Đĩ ŅĐ¸ ĐēҊĐŧ ĐēĐ°Ņ€Ņ‚Đ¸ и ĐŗĐ¸ ĐŋĐžĐ´Ņ€ĐĩĐ´ĐĩŅ‚Đĩ\n- 📄 ЗаĐŋĐ¸ŅˆĐĩŅ‚Đĩ Đ´ĐžĐŋҊĐģĐŊĐ¸Ņ‚ĐĩĐģĐŊи ĐąĐĩĐģĐĩĐļĐēи в markdown Ņ„ĐžŅ€ĐŧĐ°Ņ‚\n- ĐŸŅ€Đ¸ŅĐ˛ĐžŅĐ˛Đ°ĐŊĐĩ ĐŊа ĐĩŅ‚Đ¸ĐēĐĩŅ‚Đ¸ Са ĐžŅ‰Đĩ ĐŋĐž-Đ´ĐžĐąŅ€Đ° ĐžŅ€ĐŗĐ°ĐŊĐ¸ĐˇĐ°Ņ†Đ¸Ņ\n- đŸ‘Ĩ ĐĄĐŋОдĐĩĐģĐĩŅ‚Đĩ ҁ Đ˛Đ°ŅˆĐ¸Ņ ĐĩĐēиĐŋ, ĐŋŅ€Đ¸ŅŅ‚ĐĩĐģи иĐģи ҁĐĩĐŧĐĩĐšŅŅ‚Đ˛Đž\n- đŸ“ŽĐŸŅ€Đ¸ĐēĐ°Ņ‡ĐĩŅ‚Đĩ Ņ„Đ°ĐšĐģОвĐĩ и ĐŗĐ¸ Đ˛ĐŗŅ€Đ°Đ´ĐĩŅ‚Đĩ Đ˛ŅŠĐ˛ Đ˛Đ°ŅˆĐĩŅ‚Đž ĐžĐŋĐ¸ŅĐ°ĐŊиĐĩ Са ĐŧĐ°Ņ€ĐēĐ¸Ņ€Đ°ĐŊĐĩ\n- đŸ’ŦĐžĐąŅŅŠĐ´ĐĩŅ‚Đĩ ҁ Đ˛Đ°ŅˆĐ¸Ņ ĐĩĐēиĐŋ, ĐēĐ°Ņ‚Đž иСĐŋĐžĐģĐˇĐ˛Đ°Ņ‚Đĩ ĐēĐžĐŧĐĩĐŊŅ‚Đ°Ņ€Đ¸\n- ⚡ ĐŸŅ€ĐžŅĐģĐĩĐ´ŅĐ˛Đ°ĐšŅ‚Đĩ ĐŋŅ€ĐžĐŧĐĩĐŊĐ¸Ņ‚Đĩ в ĐŋĐžŅ‚ĐžĐēа ĐžŅ‚ Đ´ĐĩĐšĐŊĐžŅŅ‚Đ¸\n- 🚀 ĐžŅ€ĐŗĐ°ĐŊĐ¸ĐˇĐ¸Ņ€Đ°ĐšŅ‚Đĩ ĐŋŅ€ĐžĐĩĐēŅ‚Đ° ŅĐ¸",
"Add board" : "Добави Ņ‚Đ°ĐąĐģĐž",
"Select the board to link to a project" : "ИСйĐĩŅ€ĐĩŅ‚Đĩ Ņ‚Đ°ĐąĐģĐžŅ‚Đž, ĐēĐžĐĩŅ‚Đž да ŅĐ˛ŅŠŅ€ĐļĐĩŅ‚Đĩ ĐēҊĐŧ ĐŋŅ€ĐžĐĩĐēŅ‚",
"Search by board title" : "ĐĸŅŠŅ€ŅĐĩĐŊĐĩ ĐŋĐž ĐˇĐ°ĐŗĐģавиĐĩ ĐŊа Ņ‚Đ°ĐąĐģĐžŅ‚Đž",
"Select board" : "Đ˜ĐˇĐąĐžŅ€ ĐŊа Ņ‚Đ°ĐąĐģĐž",
"Move card to another board" : "ĐŸŅ€ĐĩĐŧĐĩŅŅ‚Đ˛Đ°ĐŊĐĩ ĐŊа ĐēĐ°Ņ€Ņ‚Đ°Ņ‚Đ° ĐŊа Đ´Ņ€ŅƒĐŗĐž Ņ‚Đ°ĐąĐģĐž",
"Select a board" : "Đ˜ĐˇĐąĐžŅ€ ĐŊа Ņ‚Đ°ĐąĐģĐž",
"No lists available" : "ĐŅĐŧа ĐŊаĐģĐ¸Ņ‡ĐŊа ҁĐŋĐ¸ŅŅŠŅ†Đ¸.",
"Select a list" : "Đ˜ĐˇĐąĐžŅ€ ĐŊа ҁĐŋĐ¸ŅŅŠĐē",
"Move card" : "ĐŸŅ€ĐĩĐŧĐĩŅŅ‚Đ˛Đ°ĐŊĐĩ ĐŊа ĐēĐ°Ņ€Ņ‚Đ°",
"Cancel" : "ĐžŅ‚ĐēаС",
"Select a card" : "Đ˜ĐˇĐąĐžŅ€ ĐŊа ĐēĐ°Ņ€Ņ‚Đ°",
"Select the card to link to a project" : "ИСйĐĩŅ€ĐĩŅ‚Đĩ ĐēĐ°Ņ€Ņ‚Đ°Ņ‚Đ°, ĐēĐžŅŅ‚Đž да ŅĐ˛ŅŠŅ€ĐļĐĩŅ‚Đĩ ĐēҊĐŧ ĐŋŅ€ĐžĐĩĐēŅ‚",
"Link to card" : "Đ’Ņ€ŅŠĐˇĐēа ĐēҊĐŧ ĐēĐ°Ņ€Ņ‚Đ°",
"File already exists" : "ФаКĐģŅŠŅ‚ вĐĩ҇Đĩ ŅŅŠŅ‰ĐĩŅŅ‚Đ˛ŅƒĐ˛Đ°",
"A file with the name {filename} already exists." : "ВĐĩ҇Đĩ ŅŅŠŅ‰ĐĩŅŅ‚Đ˛ŅƒĐ˛Đ° Ņ„Đ°ĐšĐģ ҁ иĐŧĐĩŅ‚Đž {filename}.",
"Do you want to overwrite it?" : "Đ˜ŅĐēĐ°Ņ‚Đĩ Đģи да ĐŗĐž ĐŋŅ€ĐĩСаĐŋĐ¸ŅˆĐĩŅ‚Đĩ?",
"Overwrite file" : "ĐŸŅ€ĐĩСаĐŋĐ¸ŅˆĐ¸ Ņ„Đ°ĐšĐģа",
"Keep existing file" : "ЗаĐŋаСваĐŊĐĩ ĐŊа ŅŅŠŅ‰ĐĩŅŅ‚Đ˛ŅƒĐ˛Đ°Ņ‰ Ņ„Đ°ĐšĐģ",
"This board is read only" : "ĐĸайĐģĐžŅ‚Đž Đĩ ŅĐ°ĐŧĐž Са ҇ĐĩŅ‚ĐĩĐŊĐĩ",
"Drop your files to upload" : "ĐŸŅƒŅĐŊĐĩŅ‚Đĩ Đ˛Đ°ŅˆĐ¸Ņ‚Đĩ Ņ„Đ°ĐšĐģОвĐĩ, Са да ĐŗĐ¸ ĐēĐ°Ņ‡Đ¸Ņ‚Đĩ",
"Add card" : "Добави ĐēĐ°Ņ€Ņ‚Đ°",
"Archived cards" : "ĐŅ€Ņ…Đ¸Đ˛Đ¸Ņ€Đ°ĐŊи ĐēĐ°Ņ€Ņ‚Đ¸",
"Add list" : "Добави ҁĐŋĐ¸ŅŅŠĐē",
"List name" : "ИĐŧĐĩ ĐŊа ҁĐŋĐ¸ŅŅŠĐē",
"Active filters" : "АĐēŅ‚Đ¸ĐļĐŊи Ņ„Đ¸ĐģŅ‚Ņ€Đ¸",
"Apply filter" : "ĐŸŅ€Đ¸ĐģĐžĐļи Ņ„Đ¸ĐģŅ‚ŅŠŅ€",
"Filter by tag" : "ФиĐģŅ‚Ņ€Đ¸Ņ€Đ°Đš ĐŋĐž ĐŧĐ°Ņ€ĐēĐĩŅ€",
"Filter by assigned user" : "ФиĐģŅ‚Ņ€Đ¸Ņ€Đ°ĐŊĐĩ ĐŋĐž ĐŊаСĐŊĐ°Ņ‡ĐĩĐŊ ĐŋĐžŅ‚Ņ€ĐĩĐąĐ¸Ņ‚ĐĩĐģ",
"Unassigned" : "НĐĩĐŋŅ€Đ¸ŅĐ˛ĐžĐĩĐŊ",
"Open" : "ĐžŅ‚Đ˛ĐžŅ€Đ¸",
"Completed" : "Đ—Đ°Đ˛ŅŠŅ€ŅˆĐĩĐŊ",
"Filter by due date" : "ФиĐģŅ‚Ņ€Đ¸Ņ€Đ°ĐŊĐĩ ĐŋĐž ĐēŅ€Đ°ĐšĐŊа Đ´Đ°Ņ‚Đ°",
"Overdue" : "ĐŸŅ€ĐžŅŅ€ĐžŅ‡ĐĩĐŊ",
"Next 24 hours" : "ĐĄĐģĐĩĐ´Đ˛Đ°Ņ‰Đ¸Ņ‚Đĩ 24 Ņ‡Đ°ŅĐ°",
"Next 7 days" : "ĐĄĐģĐĩĐ´Đ˛Đ°Ņ‰Đ¸Ņ‚Đĩ 7 Đ´ĐŊи",
"Next 30 days" : "ĐĄĐģĐĩĐ´Đ˛Đ°Ņ‰Đ¸Ņ‚Đĩ 30 Đ´ĐŊи",
"No due date" : "ĐŅĐŧа ĐēŅ€Đ°ĐšĐŊа Đ´Đ°Ņ‚Đ°",
"Clear filter" : "Đ˜ĐˇŅ‡ŅŅ‚Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа Ņ„Đ¸ĐģŅ‚ŅŠŅ€",
"Hide archived cards" : "ĐĄĐēŅ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа Đ°Ņ€Ņ…Đ¸Đ˛Đ¸Ņ€Đ°ĐŊи ĐēĐ°Ņ€Ņ‚Đ¸",
"Show archived cards" : "ПоĐēаСваĐŊĐĩ ĐŊа Đ°Ņ€Ņ…Đ¸Đ˛Đ¸Ņ€Đ°ĐŊи ĐēĐ°Ņ€Ņ‚Đ¸",
"Toggle compact mode" : "ĐŸŅ€ĐĩвĐēĐģŅŽŅ‡Đ˛Đ°ĐŊĐĩ ĐŊа ĐēĐžĐŧĐŋаĐēŅ‚ĐĩĐŊ Ņ€ĐĩĐļиĐŧ",
"Open details" : "ĐžŅ‚Đ˛Đ°Ņ€ŅĐŊĐĩ ĐŊа ĐŋĐžĐ´Ņ€ĐžĐąĐŊĐžŅŅ‚Đ¸",
"Details" : "ĐŸĐžĐ´Ņ€ĐžĐąĐŊĐžŅŅ‚Đ¸",
"Currently present people" : "ĐĨĐžŅ€Đ° ĐŋŅ€Đ¸ŅŅŠŅŅ‚Đ˛Đ°Ņ‰Đ¸ в ĐŧĐžĐŧĐĩĐŊŅ‚Đ°",
"Loading board" : "Đ—Đ°Ņ€ĐĩĐļдаĐŊĐĩ ĐŊа Ņ‚Đ°ĐąĐģĐž",
"Board not found" : "ĐĸайĐģĐžŅ‚Đž ĐŊĐĩ Đĩ ĐŊаĐŧĐĩŅ€ĐĩĐŊĐž",
"Create a new list to add cards to this board" : "ĐĄŅŠĐˇĐ´Đ°ĐšŅ‚Đĩ ĐŊОв ҁĐŋĐ¸ŅŅŠĐē, Са да Đ´ĐžĐąĐ°Đ˛Đ¸Ņ‚Đĩ ĐēĐ°Ņ€Ņ‚Đ¸ ĐēҊĐŧ Ņ‚ĐžĐ˛Đ° Ņ‚Đ°ĐąĐģĐž",
"Sharing" : "ĐĄĐŋОдĐĩĐģŅĐŊĐĩ",
"Tags" : "Đ•Ņ‚Đ¸ĐēĐĩŅ‚Đ¸",
"Deleted items" : "Đ˜ĐˇŅ‚Ņ€Đ¸Ņ‚Đ¸ ĐĩĐģĐĩĐŧĐĩĐŊŅ‚Đ¸",
"Activity" : "АĐēŅ‚Đ¸Đ˛ĐŊĐžŅŅ‚",
"Deleted lists" : "Đ˜ĐˇŅ‚Ņ€Đ¸Ņ‚Đ¸ ҁĐŋĐ¸ŅŅŠŅ†Đ¸",
"Undo" : "ĐžŅ‚ĐŧŅĐŊа",
"Deleted cards" : "Đ˜ĐˇŅ‚Ņ€Đ¸Ņ‚Đ¸ ĐēĐ°Ņ€Ņ‚Đ¸",
"No participants found" : "ĐŅĐŧа ĐŊаĐŧĐĩŅ€ĐĩĐŊи ŅƒŅ‡Đ°ŅŅ‚ĐŊĐ¸Ņ†Đ¸",
"Board owner" : "ĐĄĐžĐąŅŅ‚Đ˛ĐĩĐŊиĐē ĐŊа Ņ‚Đ°ĐąĐģĐž",
"(Group)" : "(Đ“Ņ€ŅƒĐŋа)",
"Can edit" : "МоĐļĐĩ да Ņ€ĐĩдаĐēŅ‚Đ¸Ņ€Đ°",
"Can share" : "МоĐļĐĩ да ҁĐŋОдĐĩĐģŅ",
"Can manage" : "МоĐļĐĩ да ҃ĐŋŅ€Đ°Đ˛ĐģŅĐ˛Đ°",
"Owner" : "ĐĄĐžĐąŅŅ‚Đ˛ĐĩĐŊиĐē",
"Delete" : "Đ˜ĐˇŅ‚Ņ€Đ¸Đ˛Đ°ĐŊĐĩ",
"Failed to create share with {displayName}" : "ĐĄŅŠĐˇĐ´Đ°Đ˛Đ°ĐŊĐĩŅ‚Đž ĐŊа ҁĐŋОдĐĩĐģŅĐŊĐĩ ҁ {displayName} ĐŊĐĩ ĐąĐĩ ҃ҁĐŋĐĩ҈ĐŊĐž",
"Are you sure you want to transfer the board {title} to {user}?" : "ĐĄĐ¸ĐŗŅƒŅ€ĐŊи Đģи ҁ҂Đĩ ҇Đĩ Đ¸ŅĐēĐ°Ņ‚Đĩ да ĐŋŅ€ĐĩŅ…Đ˛ŅŠŅ€ĐģĐ¸Ņ‚Đĩ Ņ‚Đ°ĐąĐģĐžŅ‚Đž {title} ĐŊа {user}?",
"Transfer the board." : "ĐŸŅ€ĐĩŅ…Đ˛ŅŠŅ€ĐģĐĩŅ‚Đĩ Ņ‚Đ°ĐąĐģĐžŅ‚Đž.",
"Transfer" : "ĐŸŅ€ĐĩŅ…Đ˛ŅŠŅ€ĐģŅĐŊĐĩ",
"The board has been transferred to {user}" : "ĐĸайĐģĐžŅ‚Đž ĐąĐĩ҈Đĩ ĐŋŅ€ĐĩŅ…Đ˛ŅŠŅ€ĐģĐĩĐŊĐž ĐŊа {user}",
"Failed to transfer the board to {user}" : "НĐĩ҃ҁĐŋĐĩ҈ĐŊĐž ĐŋŅ€ĐĩŅ…Đ˛ŅŠŅ€ĐģŅĐŊĐĩ ĐŊа Ņ‚Đ°ĐąĐģĐžŅ‚Đž ĐŊа {user}",
"Edit list title" : "Đ ĐĩдаĐēŅ‚Đ¸Ņ€Đ°ĐŊĐĩ ĐŊа ĐˇĐ°ĐŗĐģавиĐĩŅ‚Đž ĐŊа ҁĐŋĐ¸ŅŅŠĐēа",
"Archive all cards" : "ĐŅ€Ņ…Đ¸Đ˛Đ¸Ņ€Đ° Đ˛ŅĐ¸Ņ‡Đēи ĐēĐ°Ņ€Ņ‚Đ¸",
"Unarchive all cards" : "Đ Đ°ĐˇĐ°Ņ€Ņ…Đ¸Đ˛Đ¸Ņ€Đ°ĐŊĐĩ ĐŊа Đ˛ŅĐ¸Ņ‡Đēи ĐēĐ°Ņ€Ņ‚Đ¸",
"Delete list" : "Đ˜ĐˇŅ‚Ņ€Đ¸Đ˛Đ° ҁĐŋĐ¸ŅŅŠĐē",
"Archive all cards in this list" : "ĐŅ€Ņ…Đ¸Đ˛Đ¸Ņ€Đ° Đ˛ŅĐ¸Ņ‡Đēи ĐēĐ°Ņ€Ņ‚Đ¸ в Ņ‚ĐžĐˇĐ¸ ҁĐŋĐ¸ŅŅŠĐē",
"Unarchive all cards in this list" : "Đ Đ°ĐˇĐ°Ņ€Ņ…Đ¸Đ˛Đ¸Ņ€Đ°ĐŊĐĩ Đ˛ŅĐ¸Ņ‡Đēи ĐēĐ°Ņ€Ņ‚Đ¸ в Ņ‚ĐžĐˇĐ¸ ҁĐŋĐ¸ŅŅŠĐē",
"Add a new card" : "Добави ĐŊОва ĐēĐ°Ņ€Ņ‚Đ°",
"Card name" : "ИĐŧĐĩ ĐŊа ĐēĐ°Ņ€Ņ‚Đ°",
"List deleted" : "ĐĄĐŋĐ¸ŅŅŠĐēŅŠŅ‚ Đĩ Đ¸ĐˇŅ‚Ņ€Đ¸Ņ‚",
"Edit" : "Đ ĐĩдаĐēŅ†Đ¸Ņ",
"Add a new tag" : "Đ”ĐžĐąĐ°Đ˛ŅĐŊĐĩ ĐŊа ĐŊОв ĐĩŅ‚Đ¸ĐēĐĩŅ‚",
"title and color value must be provided" : "Ņ‚Ņ€ŅĐąĐ˛Đ° да ҁĐĩ ĐŋŅ€ĐĩĐ´ĐžŅŅ‚Đ°Đ˛ŅŅ‚ ĐˇĐ°ĐŗĐģавиĐĩ и ŅŅ‚ĐžĐšĐŊĐžŅŅ‚ ĐŊа Ņ†Đ˛ĐĩŅ‚Đ°",
"Board name" : "ИĐŧĐĩ ĐŊа Ņ‚Đ°ĐąĐģĐž",
"Members" : "ЧĐģĐĩĐŊОвĐĩ",
"Assign a user to this cardâ€Ļ" : "Đ—Đ°Ņ‡Đ¸ŅĐģŅĐ˛Đ°ĐŊĐĩ ĐŊа ĐŋĐžŅ‚Ņ€ĐĩĐąĐ¸Ņ‚ĐĩĐģ ĐŊа Ņ‚Đ°ĐˇĐ¸ ĐēĐ°Ņ€Ņ‚Đ° ...",
"Upload new files" : "ĐšĐ°Ņ‡Đ¸ ĐŊОви Ņ„Đ°ĐšĐģОвĐĩ",
"Share from Files" : "ĐĄĐŋОдĐĩĐģŅĐŊĐĩ ĐžŅ‚ ФаКĐģОвĐĩ",
"Pending share" : "ЧаĐēĐ°Ņ‰Đž ҁĐŋОдĐĩĐģŅĐŊĐĩ",
"Add this attachment" : "ДобавĐĩŅ‚Đĩ Ņ‚ĐžĐˇĐ¸ ĐŋŅ€Đ¸ĐēĐ°Ņ‡ĐĩĐŊ Ņ„Đ°ĐšĐģ",
"Show in Files" : "ПоĐēаСваĐŊĐĩ Đ˛ŅŠĐ˛ Ņ„Đ°ĐšĐģОвĐĩ",
"Download" : "Đ˜ĐˇŅ‚ĐĩĐŗĐģŅĐŊĐĩ",
"Remove attachment" : "ĐŸŅ€ĐĩĐŧĐ°Ņ…Đ˛Đ°ĐŊĐĩ ĐŊа ĐŋŅ€Đ¸ĐēĐ°Ņ‡ĐĩĐŊ Ņ„Đ°ĐšĐģ",
"Delete Attachment" : "Đ˜ĐˇŅ‚Ņ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐŋŅ€Đ¸ĐēĐ°Ņ‡ĐĩĐŊ Ņ„Đ°ĐšĐģ",
"Restore Attachment" : "Đ’ŅŠĐˇŅŅ‚Đ°ĐŊĐžĐ˛ŅĐ˛Đ°ĐŊĐĩ ĐŊа ĐŋŅ€Đ¸ĐēĐ°Ņ‡ĐĩĐŊ Ņ„Đ°ĐšĐģ",
"File to share" : "ФаКĐģ Са ҁĐŋОдĐĩĐģŅĐŊĐĩ",
"Invalid path selected" : "Đ˜ĐˇĐąŅ€Đ°ĐŊ Đĩ ĐŊĐĩваĐģидĐĩĐŊ ĐŋŅŠŅ‚ ",
"Open in sidebar view" : "ĐžŅ‚Đ˛Đ°Ņ€ŅĐŊĐĩ в Đ¸ĐˇĐŗĐģĐĩда ĐŊа ŅŅ‚Ņ€Đ°ĐŊĐ¸Ņ‡ĐŊĐ°Ņ‚Đ° ĐģĐĩĐŊŅ‚Đ°",
"Open in bigger view" : "ĐžŅ‚Đ˛Đ°Ņ€Ņ ҁĐĩ в ĐŋĐž-ĐŗĐžĐģŅĐŧ Đ¸ĐˇĐŗĐģĐĩĐ´",
"Due date" : "ĐšŅ€Đ°ĐšĐŊа Đ´Đ°Ņ‚Đ°",
"Remove due date" : "ĐŸŅ€ĐĩĐŧĐ°Ņ…ĐŊи ĐēŅ€Đ°ĐšĐŊĐ°Ņ‚Đ° Đ´Đ°Ņ‚Đ°",
"Description" : "ОĐŋĐ¸ŅĐ°ĐŊиĐĩ",
"Attachments" : "ĐŸŅ€Đ¸ĐēĐ°Ņ‡ĐĩĐŊи Ņ„Đ°ĐšĐģОвĐĩ",
"Comments" : "КоĐŧĐĩĐŊŅ‚Đ°Ņ€Đ¸",
"Modified" : "ĐŸŅ€ĐžĐŧŅĐŊа",
"Created" : "ĐĄŅŠĐˇĐ´Đ°Đ´ĐĩĐŊ",
"The title cannot be empty." : "Đ—Đ°ĐŗĐģавиĐĩŅ‚Đž ĐŊĐĩ ĐŧĐžĐļĐĩ да ĐąŅŠĐ´Đĩ ĐŋŅ€Đ°ĐˇĐŊĐž.",
"No comments yet. Begin the discussion!" : "Đ’ŅĐĩ ĐžŅ‰Đĩ ĐŊŅĐŧа ĐēĐžĐŧĐĩĐŊŅ‚Đ°Ņ€Đ¸. ЗаĐŋĐžŅ‡ĐŊĐĩŅ‚Đĩ Đ´Đ¸ŅĐēŅƒŅĐ¸ŅŅ‚Đ°!",
"Failed to load comments" : "НĐĩ҃ҁĐŋĐĩ҈ĐŊĐž ĐˇĐ°Ņ€ĐĩĐļдаĐŊĐĩ ĐŊа ĐēĐžĐŧĐĩĐŊŅ‚Đ°Ņ€Đ¸",
"Upload attachment" : "ĐšĐ°Ņ‡Đ˛Đ°ĐŊĐĩ",
"Save" : "ЗаĐŋаСваĐŊĐĩ",
"The comment cannot be empty." : "КоĐŧĐĩĐŊŅ‚Đ°Ņ€ŅŠŅ‚ ĐŊĐĩ ĐŧĐžĐļĐĩ да ĐąŅŠĐ´Đĩ ĐŋŅ€Đ°ĐˇĐĩĐŊ.",
"The comment cannot be longer than 1000 characters." : "КоĐŧĐĩĐŊŅ‚Đ°Ņ€ŅŠŅ‚ ĐŊĐĩ ĐŧĐžĐļĐĩ да ĐąŅŠĐ´Đĩ ĐŋĐž-Đ´ŅŠĐģŅŠĐŗ ĐžŅ‚ 1000 СĐŊаĐēа.",
"In reply to" : "В ĐžŅ‚ĐŗĐžĐ˛ĐžŅ€ ĐŊа",
"Cancel reply" : "ĐžŅ‚ĐēаС ĐŊа ĐžŅ‚ĐŗĐžĐ˛ĐžŅ€",
"Reply" : "ĐžŅ‚ĐŗĐžĐ˛ĐžŅ€Đ¸",
"Update" : "ОбĐŊĐžĐ˛ŅĐ˛Đ°ĐŊĐĩ",
"Created:" : "ĐĄŅŠĐˇĐ´Đ°Đ´ĐĩĐŊĐž:",
"Description" : "ОĐŋĐ¸ŅĐ°ĐŊиĐĩ",
"(Unsaved)" : " (НĐĩСаĐŋĐ¸ŅĐ°ĐŊ)",
"(Savingâ€Ļ)" : "(ЗаĐŋĐ¸ŅĐ˛Đ°ĐŊĐĩ...)",
"Formatting help" : "ПоĐŧĐžŅ‰ Са Ņ„ĐžŅ€ĐŧĐ°Ņ‚Đ¸Ņ€Đ°ĐŊĐĩ",
"Edit description" : "Đ ĐĩдаĐēŅ‚Đ¸Ņ€Đ°ĐŊĐĩ ĐŊа ĐžĐŋĐ¸ŅĐ°ĐŊиĐĩŅ‚Đž",
"View description" : "ĐŸŅ€ĐĩĐŗĐģĐĩĐ´ ĐŊа ĐžĐŋĐ¸ŅĐ°ĐŊиĐĩŅ‚Đž",
"Add Attachment" : "Đ”ĐžĐąĐ°Đ˛ŅĐŊĐĩ ĐŊа ĐŋŅ€Đ¸ĐēĐ°Ņ‡ĐĩĐŊ Ņ„Đ°ĐšĐģ",
"Write a description â€Ļ" : "НаĐŋĐ¸ŅˆĐĩŅ‚Đĩ ĐžĐŋĐ¸ŅĐ°ĐŊиĐĩ ...",
"Choose attachment" : "Đ˜ĐˇĐąĐžŅ€ ĐŊа ĐŋŅ€Đ¸ĐēĐ°Ņ‡ĐĩĐŊ Ņ„Đ°ĐšĐģ",
"Set a due date" : "ЗадаваĐŊĐĩ ĐŊа ĐēŅ€Đ°ĐšĐŊа Đ´Đ°Ņ‚Đ°",
"Remove due date" : "ĐŸŅ€ĐĩĐŧĐ°Ņ…ĐŊи ĐēŅ€Đ°ĐšĐŊĐ°Ņ‚Đ° Đ´Đ°Ņ‚Đ°",
"Mark as done" : "ĐœĐ°Ņ€ĐēĐ¸Ņ€Đ°Đš ĐēĐ°Ņ‚Đž ĐŗĐžŅ‚ĐžĐ˛Đž",
"Unarchive card" : "Đ Đ°ĐˇĐ°Ņ€Ņ…Đ¸Đ˛Đ¸Ņ€Đ°ĐŊĐĩ ĐŊа ĐēĐ°Ņ€Ņ‚Đ°",
"Archive card" : "ĐŅ€Ņ…Đ¸Đ˛Đ¸Ņ€Đ°ĐŊĐĩ ĐŊа ĐēĐ°Ņ€Ņ‚Đ°",
"Select Date" : "ИСйĐĩŅ€ĐĩŅ‚Đĩ Đ´Đ°Ņ‚Đ°",
"Assign a tag to this cardâ€Ļ" : "ĐŸŅ€Đ¸ŅĐ˛ĐžŅĐ˛Đ°ĐŊĐĩ ĐŊа ĐĩŅ‚Đ¸ĐēĐĩŅ‚ ĐŊа Ņ‚Đ°ĐˇĐ¸ ĐēĐ°Ņ€Ņ‚Đ° ...",
"(group)" : "(ĐŗŅ€ŅƒĐŋа)",
"Todo items" : "ЕĐģĐĩĐŧĐĩĐŊŅ‚Đ¸ ĐŊа ĐˇĐ°Đ´Đ°Ņ‡Đ° Са иСĐŋҊĐģĐŊĐĩĐŊиĐĩ",
"{count} comments, {unread} unread" : "{count} ĐēĐžĐŧĐĩĐŊŅ‚Đ°Ņ€Đ¸, {unread} ĐŊĐĩĐŋŅ€ĐžŅ‡ĐĩŅ‚ĐĩĐŊи",
"Edit card title" : "Đ ĐĩдаĐēŅ‚Đ¸Ņ€Đ°ĐŊĐĩ ĐŊа ĐˇĐ°ĐŗĐģавиĐĩŅ‚Đž ĐŊа ĐēĐ°Ņ€Ņ‚Đ°",
"Card details" : "ĐŸĐžĐ´Ņ€ĐžĐąĐŊĐžŅŅ‚Đ¸ Са ĐēĐ°Ņ€Ņ‚Đ°Ņ‚Đ°",
"Assign to me" : "Đ—Đ°Ņ‡Đ¸ŅĐģŅĐ˛Đ°ĐŊĐĩ ĐēҊĐŧ ĐŧĐĩĐŊ",
"Unassign myself" : "ĐžŅ‚ĐŧŅĐŊа ĐŊа ĐˇĐ°Ņ‡Đ¸ŅĐģŅĐ˛Đ°ĐŊĐĩŅ‚Đž ĐēҊĐŧ ĐŧĐĩĐŊ",
"Delete card" : "Đ˜ĐˇŅ‚Ņ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа ĐēĐ°Ņ€Ņ‚Đ°",
"Card deleted" : "ĐšĐ°Ņ€Ņ‚Đ°Ņ‚Đ° Đĩ Đ¸ĐˇŅ‚Ņ€Đ¸Ņ‚Đ°",
"seconds ago" : "ĐŋŅ€Đĩди ҁĐĩĐē҃ĐŊди",
"Keyboard shortcuts" : "Đ‘ŅŠŅ€ĐˇĐ¸ ĐēĐģĐ°Đ˛Đ¸ŅˆĐ¸",
"Keyboard shortcut" : "КĐģĐ°Đ˛Đ¸ŅˆĐŊи ĐēĐžĐŧйиĐŊĐ°Ņ†Đ¸Đ¸",
"Action" : "ДĐĩĐšŅŅ‚Đ˛Đ¸Đĩ",
"Shift" : "Shift /ĐąŅƒŅ‚ĐžĐŊ/",
"Ctrl" : "Ctrl /ĐąŅƒŅ‚ĐžĐŊ/",
"Search" : "ĐĸŅŠŅ€ŅĐĩĐŊĐĩ",
"Enter" : "Đ’ŅŠĐ˛ĐĩĐļдаĐŊĐĩ",
"Space" : "ĐŸŅ€ĐžŅŅ‚Ņ€Đ°ĐŊŅŅ‚Đ˛Đž",
"All boards" : "Đ’ŅĐ¸Ņ‡Đēи Ņ‚Đ°ĐąĐģа",
"Archived boards" : "ĐŅ€Ņ…Đ¸Đ˛Đ¸Ņ€Đ°ĐŊи Ņ‚Đ°ĐąĐģа",
"Shared with you" : "ĐĄĐŋОдĐĩĐģĐĩĐŊи ҁ Đ˛Đ°Ņ",
"Deck settings" : "ĐĐ°ŅŅ‚Ņ€ĐžĐšĐēи ĐŊа ĐŋĐģĐ°Ņ‚Ņ„ĐžŅ€ĐŧĐ°Ņ‚Đ°",
"Use bigger card view" : "ИСĐŋĐžĐģСва ĐŋĐž-ĐŗĐžĐģŅĐŧ Đ¸ĐˇĐŗĐģĐĩĐ´ ĐŊа ĐēĐ°Ņ€Ņ‚Đ°Ņ‚Đ°",
"Show card ID badge" : "ПоĐēаСваĐŊĐĩ ĐŊа ОйОСĐŊĐ°Ņ‡ĐĩĐŊиĐĩ Са ŅĐ°ĐŧĐžĐģĐ¸Ņ‡ĐŊĐžŅŅ‚ ĐŊа ĐēĐ°Ņ€Ņ‚Đ°Ņ‚Đ°",
"Show boards in calendar/tasks" : "ПоĐēаСваĐŊĐĩ ĐŊа Ņ‚Đ°ĐąĐģĐ°Ņ‚Đ° в ĐēаĐģĐĩĐŊĐ´Đ°Ņ€ / ĐˇĐ°Đ´Đ°Ņ‡Đ¸",
"Board details" : "ĐŸĐžĐ´Ņ€ĐžĐąĐŊĐžŅŅ‚Đ¸ Са Ņ‚Đ°ĐąĐģĐž",
"Edit board" : "Đ ĐĩдаĐēŅ‚Đ¸Ņ€Đ°ĐŊĐĩ ĐŊа Ņ‚Đ°ĐąĐģĐž",
"Clone board" : " КĐģĐžĐŊĐ¸Ņ€Đ°ĐŊĐĩ ĐŊа Ņ‚Đ°ĐąĐģĐž",
"Unarchive board" : "Đ Đ°ĐˇĐ°Ņ€Ņ…Đ¸Đ˛Đ¸Ņ€Đ°ĐŊĐĩ ĐŊĐ°Ņ‚Đ°ĐąĐģĐž",
"Archive board" : "ĐŅ€Ņ…Đ¸Đ˛Đ¸Ņ€Đ°ĐŊĐĩ ĐŊа Ņ‚Đ°ĐąĐģĐž",
"Export board" : "ЕĐēҁĐŋĐžŅ€Ņ‚Đ¸Ņ€Đ°ĐŊĐĩ ĐŊа Ņ‚Đ°ĐąĐģĐž",
"Turn on due date reminders" : "ВĐēĐģŅŽŅ‡Đ˛Đ° ĐŊаĐŋĐžĐŧĐŊŅĐŊĐ¸ŅŅ‚Đ° Са ĐēŅ€Đ°ĐĩĐŊ ŅŅ€ĐžĐē",
"Turn off due date reminders" : "ИСĐēĐģŅŽŅ‡Đ˛Đ° ĐŊаĐŋĐžĐŧĐŊŅĐŊĐ¸ŅŅ‚Đ° Са ĐēŅ€Đ°ĐĩĐŊ ŅŅ€ĐžĐē",
"Due date reminders" : " НаĐŋĐžĐŧĐŊŅĐŊĐ¸Ņ Са ĐēŅ€Đ°ĐĩĐŊ ŅŅ€ĐžĐē",
"All cards" : "Đ’ŅĐ¸Ņ‡Đēи ĐēĐ°Ņ€Ņ‚Đ¸",
"Assigned cards" : "Đ—Đ°Ņ‡Đ¸ŅĐģĐĩĐŊи ĐēĐ°Ņ€Ņ‚Đ¸",
"No notifications" : "ĐŅĐŧа иСвĐĩŅŅ‚Đ¸Ņ",
"Delete board" : "Đ˜ĐˇŅ‚Ņ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа Ņ‚Đ°ĐąĐģĐž",
"Board {0} deleted" : "ĐĸайĐģĐž {0} Đ¸ĐˇŅ‚Ņ€Đ¸Ņ‚Đž",
"Only assigned cards" : "ХаĐŧĐž ĐˇĐ°Ņ‡Đ¸ŅĐģĐĩĐŊĐ¸Ņ‚Đĩ ĐēĐ°Ņ€Ņ‚Đ¸",
"No reminder" : "ĐŅĐŧа ĐŊаĐŋĐžĐŧĐŊŅĐŊĐĩ",
"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}? ĐĸОва ҉Đĩ Đ¸ĐˇŅ‚Ņ€Đ¸Đĩ Đ˛ŅĐ¸Ņ‡Đēи даĐŊĐŊи ĐŊа Ņ‚ĐžĐ˛Đ° Ņ‚Đ°ĐąĐģĐž, вĐēĐģŅŽŅ‡Đ¸Ņ‚ĐĩĐģĐŊĐž Đ°Ņ€Ņ…Đ¸Đ˛Đ¸Ņ€Đ°ĐŊĐ¸Ņ‚Đĩ ĐēĐ°Ņ€Ņ‚Đ¸.",
"Delete the board?" : "Đ˜ĐˇŅ‚Ņ€Đ¸Đ˛Đ°ĐŊĐĩ ĐŊа Ņ‚Đ°ĐąĐģĐžŅ‚Đž?",
"Loading filtered view" : "Đ—Đ°Ņ€ĐĩĐļдаĐŊĐĩ ĐŊа Ņ„Đ¸ĐģŅ‚Ņ€Đ¸Ņ€Đ°ĐŊ Đ¸ĐˇĐŗĐģĐĩĐ´",
"Today" : "ДĐŊĐĩҁ",
"Tomorrow" : "ĐŖŅ‚Ņ€Đĩ",
"No due" : "НĐĩ ҁĐĩ Đ´ŅŠĐģĐļи",
"Search for {searchQuery} in all boards" : "ĐĸŅŠŅ€ŅĐĩĐŊĐĩ ĐŊа {searchQuery} Đ˛ŅŠĐ˛ Đ˛ŅĐ¸Ņ‡Đēи Ņ‚Đ°ĐąĐģа",
"No results found" : "ĐŅĐŧа ĐŊаĐŧĐĩŅ€ĐĩĐŊи Ņ€ĐĩĐˇŅƒĐģŅ‚Đ°Ņ‚Đ¸",
"Deck board {name}\n* Last modified on {lastMod}" : "ĐĸайĐģĐž {name}\n* ĐŸĐžŅĐģĐĩĐ´ĐŊа ĐŋŅ€ĐžĐŧŅĐŊа ĐŊа {lastMod}",
"{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} ĐēĐžĐŧĐĩĐŊŅ‚Đ°Ņ€Đ°",
"{nbCards} cards" : "{nbCards} ĐēĐ°Ņ€Ņ‚Đ¸",
"Click to expand comment" : "КĐģиĐēваĐŊĐĩ Са Ņ€Đ°ĐˇŅˆĐ¸Ņ€ŅĐ˛Đ°ĐŊĐĩ ĐŊа ĐēĐžĐŧĐĩĐŊŅ‚Đ°Ņ€Đ°",
"Create a new card" : "ĐĄŅŠĐˇĐ´Đ°Đ˛Đ°ĐŊĐĩ ĐŊа ĐŊОва ĐēĐ°Ņ€Ņ‚Đ°",
"Card title" : "Đ—Đ°ĐŗĐģавиĐĩ ĐŊа ĐēĐ°Ņ€Ņ‚Đ°",
"Create card" : "ĐĄŅŠĐˇĐ´Đ°Đ˛Đ°ĐŊĐĩ ĐŊа ĐēĐ°Ņ€Ņ‚Đ°",
"Creating the new card â€Ļ" : "ĐĄŅŠĐˇĐ´Đ°Đ˛Đ°ĐŊĐĩ ĐŊа ĐŊĐžĐ˛Đ°Ņ‚Đ° ĐēĐ°Ņ€Ņ‚Đ° ...",
"Card \"{card}\" was added to \"{board}\"" : "ĐšĐ°Ņ€Ņ‚Đ° \"{card}\" ĐąĐĩ҈Đĩ дОйавĐĩĐŊа ĐēҊĐŧ \"{board}\"",
"Open card" : "ĐžŅ‚Đ˛Đ°Ņ€ŅĐŊĐĩ ĐŊа ĐēĐ°Ņ€Ņ‚Đ°",
"Close" : "Đ—Đ°Ņ‚Đ˛Đ°Ņ€ŅĐŊĐĩ",
"No upcoming cards" : "ĐŅĐŧа ĐŋŅ€ĐĩĐ´ŅŅ‚ĐžŅŅ‰Đ¸ ĐēĐ°Ņ€Ņ‚Đ¸",
"upcoming cards" : "ĐŋŅ€ĐĩĐ´ŅŅ‚ĐžŅŅ‰Đ¸ ĐēĐ°Ņ€Ņ‚Đ¸",
"New card" : "Нова ĐēĐ°Ņ€Ņ‚Đ°",
"Due on {date}" : "ĐšŅ€Đ°ĐĩĐŊ ŅŅ€ĐžĐē Đ´Đž {date}",
"Link to a board" : "ЛиĐŊĐē ĐēҊĐŧ Ņ‚Đ°ĐąĐģĐž",
"Link to a card" : "ЛиĐŊĐē ĐēҊĐŧ ĐēĐ°Ņ€Ņ‚Đ°",
"Create a card" : "ĐĄŅŠĐˇĐ´Đ°Đ˛Đ°ĐŊĐĩ ĐŊа ĐēĐ°Ņ€Ņ‚Đ°",
"Message from {author} in {conversationName}" : "ĐĄŅŠĐžĐąŅ‰ĐĩĐŊиĐĩ ĐžŅ‚ {author} в {conversationName}",
"Something went wrong" : "НĐĩŅ‰Đž ҁĐĩ ĐžĐąŅŠŅ€Đēа",
"Failed to upload {name}" : " НĐĩ҃ҁĐŋĐĩ҈ĐŊĐž ĐēĐ°Ņ‡Đ˛Đ°ĐŊĐĩ ĐŊа {name}",
"Maximum file size of {size} exceeded" : "МаĐēŅĐ¸ĐŧаĐģĐŊĐ¸ŅŅ‚ Ņ€Đ°ĐˇĐŧĐĩŅ€ ĐŊа Ņ„Đ°ĐšĐģа ĐžŅ‚ {size} Đĩ ĐŊĐ°Đ´Đ˛Đ¸ŅˆĐĩĐŊ",
"Error creating the share" : "Đ“Ņ€Đĩ҈Đēа ĐŋŅ€Đ¸ ŅŅŠĐˇĐ´Đ°Đ˛Đ°ĐŊĐĩ ĐŊа ҁĐŋОдĐĩĐģŅĐŊĐĩ",
"Share with a Deck card" : "ĐĄĐŋОдĐĩĐģŅĐŊĐĩ ҁ Deck ĐēĐ°Ņ€Ņ‚Đ°",
"Share {file} with a Deck card" : "ĐĄĐŋОдĐĩĐģŅĐŊĐĩ {file} ҁ Deck ĐēĐ°Ņ€Ņ‚Đ°",
"Share" : "ĐĄĐŋОдĐĩĐģŅĐŊĐĩ",
"A <strong>card description</strong> inside the Deck app has been changed" : "<strong>ОĐŋĐ¸ŅĐ°ĐŊиĐĩŅ‚Đž ĐŊа ĐēĐ°Ņ€Ņ‚Đ°Ņ‚Đ°</strong> в ĐŋŅ€Đ¸ĐģĐžĐļĐĩĐŊиĐĩŅ‚Đž Deck/ĐŊĐ°ĐąĐžŅ€/ Đĩ ĐŋŅ€ĐžĐŧĐĩĐŊĐĩĐŊĐž",
"Timeline" : "Đ’Ņ€ĐĩĐŧĐĩва ĐģиĐŊĐ¸Ņ",
"Share board with a user, group or circle â€Ļ" : "ĐĄĐŋОдĐĩĐģŅĐŊĐĩ ĐŊа Ņ‚Đ°ĐąĐģĐžŅ‚Đž ҁ ĐŋĐžŅ‚Ņ€ĐĩĐąĐ¸Ņ‚ĐĩĐģ, ĐŗŅ€ŅƒĐŋа иĐģи ĐēŅ€ŅŠĐŗ ...",
"Searching for users, groups and circles â€Ļ" : "ĐĸŅŠŅ€ŅĐĩĐŊĐĩ Са ĐŋĐžŅ‚Ņ€ĐĩĐąĐ¸Ņ‚ĐĩĐģи, ĐŗŅ€ŅƒĐŋи и ĐēŅ€ŅŠĐŗĐžĐ˛Đĩ ...",
"(Circle)" : "(ĐšŅ€ŅŠĐŗ)",
"Assign to users/groups/circles" : "Đ—Đ°Ņ‡Đ¸ŅĐģŅĐ˛Đ°ĐŊĐĩ ĐēҊĐŧ ĐŋĐžŅ‚Ņ€ĐĩĐąĐ¸Ņ‚ĐĩĐģи/ĐŗŅ€ŅƒĐŋи/ĐēŅ€ŅŠĐŗĐžĐ˛Đĩ",
"Next week" : "ĐĄĐģĐĩĐ´Đ˛Đ°Ņ‰Đ° ҁĐĩĐ´ĐŧĐ¸Ņ†Đ°",
"Next month" : "ĐĄĐģĐĩĐ´Đ˛Đ°Ņ‰Đ¸Ņ ĐŧĐĩҁĐĩ҆",
"List is empty" : "ĐĄĐŋĐ¸ŅŅŠĐēŅŠŅ‚ Đĩ ĐŋŅ€Đ°ĐˇĐĩĐŊ",
"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/ĐŊĐ°ĐąĐžŅ€/ ҉Đĩ ĐąĐģĐžĐēĐ¸Ņ€Đ° ĐŋĐžŅ‚Ņ€ĐĩĐąĐ¸Ņ‚ĐĩĐģĐ¸Ņ‚Đĩ, ĐēĐžĐ¸Ņ‚Đž ĐŊĐĩ ŅĐ° Ņ‡Đ°ŅŅ‚ ĐžŅ‚ Ņ‚ĐĩСи ĐŗŅ€ŅƒĐŋи, да ŅŅŠĐˇĐ´Đ°Đ˛Đ°Ņ‚ ŅĐ˛ĐžĐ¸ ŅĐžĐąŅŅ‚Đ˛ĐĩĐŊи Ņ‚Đ°ĐąĐģа. ĐŸĐžŅ‚Ņ€ĐĩĐąĐ¸Ņ‚ĐĩĐģĐ¸Ņ‚Đĩ Đ˛ŅĐĩ ĐžŅ‰Đĩ ҉Đĩ ĐŧĐžĐŗĐ°Ņ‚ да Ņ€Đ°ĐąĐžŅ‚ŅŅ‚ ĐŊа Ņ‚Đ°ĐąĐģĐ°Ņ‚Đ°, ĐēĐžĐ¸Ņ‚Đž ŅĐ° ҁĐŋОдĐĩĐģĐĩĐŊи ҁ Ņ‚ŅŅ…."
"Settings" : "ĐĐ°ŅŅ‚Ņ€ĐžĐšĐēи",
"An error occurred" : "Đ’ŅŠĐˇĐŊиĐēĐŊа ĐŗŅ€Đĩ҈Đēа"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

View File

@@ -7,31 +7,15 @@ OC.L10N.register(
"No file was uploaded" : "āϕ⧋āύ āĻĢāĻžāχāϞ āφāĻĒāϞ⧋āĻĄ āĻ•āϰāĻž āĻšā§Ÿ āύāĻŋ",
"Missing a temporary folder" : "āĻ…āĻ¸ā§āĻĨāĻžā§Ÿā§€ āĻĢā§‹āĻ˛ā§āĻĄāĻžāϰāϟāĻŋ āĻšāĻžāϰāĻžāύ⧋ āĻ—āĻŋā§Ÿā§‡āϛ⧇",
"Cancel" : "āĻŦāĻžāϤāĻŋāϰ",
"Completed" : "āϏ⧁āϏāĻŽā§āĻĒāĻ¨ā§āύ",
"Details" : "āĻŦāĻŋāϏāϤāĻžāϰāĻŋāϤ",
"Sharing" : "āĻ­āĻžāĻ—āĻžāĻ­āĻžāĻ—āĻŋāϰāϤ",
"Tags" : "āĻŸā§āϝāĻžāĻ—",
"Activity" : "āϏāĻ•ā§āϰāĻŋ⧟āϤāĻž",
"Can edit" : "Can edit",
"Can share" : "Can share",
"Owner" : "Owner",
"Delete" : "āĻŽā§āϛ⧇",
"Edit" : "āϏāĻŽā§āĻĒāĻžāĻĻāύāĻž",
"Download" : "āĻĄāĻžāωāύāϞ⧋āĻĄ",
"Description" : "āĻŦāĻŋāĻŦāϰāĻŖ",
"Modified" : "āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāĻŋāϤ",
"Save" : "āϏāĻ‚āϰāĻ•ā§āώāĻŖ",
"Reply" : "āϜāĻŦāĻžāĻŦ",
"Update" : "āĻĒāϰāĻŋāĻŦāĻ°ā§āϧāύ",
"Created:" : "āϤ⧈āϰ⧀āϰ āύāĻŋāĻ°ā§āϘāĻ¨ā§āϟāσ",
"Description" : "āĻŦāĻŋāĻŦāϰāĻŖ",
"(group)" : "(āĻ—ā§‹āĻˇā§āĻ āĻŋ)",
"seconds ago" : "āϏ⧇āϕ⧇āĻ¨ā§āĻĄ āĻĒā§‚āĻ°ā§āĻŦ⧇",
"Keyboard shortcuts" : "āϕ⧀-āĻŦā§‹āĻ°ā§āĻĄ āĻļāĻ°ā§āϟāĻ•āĻžāϟ",
"Search" : "Search",
"Shared with you" : "Shared with you",
"Today" : "āφāϜ",
"Tomorrow" : "āφāĻ—āĻžāĻŽā§€āĻ•āĻžāϞ",
"Close" : "āĻŦāĻ¨ā§āϧ",
"Share" : "āĻ­āĻžāĻ—āĻžāĻ­āĻžāĻ—āĻŋ āĻ•āϰ"
"Settings" : "āϏ⧇āϟāĻŋāĻ‚āϏ"
},
"nplurals=2; plural=(n != 1);");

View File

@@ -5,31 +5,15 @@
"No file was uploaded" : "āϕ⧋āύ āĻĢāĻžāχāϞ āφāĻĒāϞ⧋āĻĄ āĻ•āϰāĻž āĻšā§Ÿ āύāĻŋ",
"Missing a temporary folder" : "āĻ…āĻ¸ā§āĻĨāĻžā§Ÿā§€ āĻĢā§‹āĻ˛ā§āĻĄāĻžāϰāϟāĻŋ āĻšāĻžāϰāĻžāύ⧋ āĻ—āĻŋā§Ÿā§‡āϛ⧇",
"Cancel" : "āĻŦāĻžāϤāĻŋāϰ",
"Completed" : "āϏ⧁āϏāĻŽā§āĻĒāĻ¨ā§āύ",
"Details" : "āĻŦāĻŋāϏāϤāĻžāϰāĻŋāϤ",
"Sharing" : "āĻ­āĻžāĻ—āĻžāĻ­āĻžāĻ—āĻŋāϰāϤ",
"Tags" : "āĻŸā§āϝāĻžāĻ—",
"Activity" : "āϏāĻ•ā§āϰāĻŋ⧟āϤāĻž",
"Can edit" : "Can edit",
"Can share" : "Can share",
"Owner" : "Owner",
"Delete" : "āĻŽā§āϛ⧇",
"Edit" : "āϏāĻŽā§āĻĒāĻžāĻĻāύāĻž",
"Download" : "āĻĄāĻžāωāύāϞ⧋āĻĄ",
"Description" : "āĻŦāĻŋāĻŦāϰāĻŖ",
"Modified" : "āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāĻŋāϤ",
"Save" : "āϏāĻ‚āϰāĻ•ā§āώāĻŖ",
"Reply" : "āϜāĻŦāĻžāĻŦ",
"Update" : "āĻĒāϰāĻŋāĻŦāĻ°ā§āϧāύ",
"Created:" : "āϤ⧈āϰ⧀āϰ āύāĻŋāĻ°ā§āϘāĻ¨ā§āϟāσ",
"Description" : "āĻŦāĻŋāĻŦāϰāĻŖ",
"(group)" : "(āĻ—ā§‹āĻˇā§āĻ āĻŋ)",
"seconds ago" : "āϏ⧇āϕ⧇āĻ¨ā§āĻĄ āĻĒā§‚āĻ°ā§āĻŦ⧇",
"Keyboard shortcuts" : "āϕ⧀-āĻŦā§‹āĻ°ā§āĻĄ āĻļāĻ°ā§āϟāĻ•āĻžāϟ",
"Search" : "Search",
"Shared with you" : "Shared with you",
"Today" : "āφāϜ",
"Tomorrow" : "āφāĻ—āĻžāĻŽā§€āĻ•āĻžāϞ",
"Close" : "āĻŦāĻ¨ā§āϧ",
"Share" : "āĻ­āĻžāĻ—āĻžāĻ­āĻžāĻ—āĻŋ āĻ•āϰ"
"Settings" : "āϏ⧇āϟāĻŋāĻ‚āϏ"
},"pluralForm" :"nplurals=2; plural=(n != 1);"
}

View File

@@ -1,50 +0,0 @@
OC.L10N.register(
"deck",
{
"Personal" : "Personel",
"Finished" : "Achuet",
"copy" : "eil",
"Done" : "Graet",
"The file was uploaded" : "Kaset eo bet ar restr",
"No file was uploaded" : "N'eus restr ebet a zo bet kaset",
"Invalid date, date format must be YYYY-MM-DD" : "Deizat fall, stumm an deizat a zo ret bezhaÃą BBBB-MM-DD",
"Cancel" : "Arrest",
"Drop your files to upload" : "Laoskit ho restroÚ evit pellkas",
"Open" : "DigeriÃą",
"Completed" : "Achuet",
"Details" : "MunudoÚ",
"Sharing" : "Rannan",
"Tags" : "KlavioÚ",
"Activity" : "Obererezh",
"Can edit" : "Posuple eo embann",
"Can share" : "Galout a ra rannaÃą",
"Owner" : "Perc'henner",
"Delete" : "Dilemel",
"Transfer" : "Treuzkas",
"Edit" : "CheÃąch",
"Upload new files" : "Pelkas ur restr nevez",
"Share from Files" : "RannaÃą diouzh RestroÚ",
"Download" : "PellgargaÃą",
"File to share" : "Restr da rannaÃą",
"Invalid path selected" : "An hent dibabet n'eus ket anezhaÃą",
"Comments" : "DisplegadennoÚ",
"Modified" : "CheÃąchet",
"Created" : "Krouet",
"Save" : "EnrollaÃą",
"Reply" : "Respont",
"Update" : "Adnevesaat",
"Created:" : "Krouet :",
"Description" : "Diskrivadur",
"(group)" : "(strollad)",
"seconds ago" : "eilenn zo",
"Search" : "Klask",
"Shared with you" : "Rannet ganeoc'h",
"No notifications" : "Kemennadenn ebet",
"Today" : "Hiziv",
"Tomorrow" : "Warc'hoaz",
"Close" : "SeriÃą",
"Share" : "Rannan",
"Next week" : "Sizhun a zeu",
"Next month" : "Miz a zeu"
},
"nplurals=5; plural=((n%10 == 1) && (n%100 != 11) && (n%100 !=71) && (n%100 !=91) ? 0 :(n%10 == 2) && (n%100 != 12) && (n%100 !=72) && (n%100 !=92) ? 1 :(n%10 ==3 || n%10==4 || n%10==9) && (n%100 < 10 || n% 100 > 19) && (n%100 < 70 || n%100 > 79) && (n%100 < 90 || n%100 > 99) ? 2 :(n != 0 && n % 1000000 == 0) ? 3 : 4);");

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