Compare commits
4 Commits
automated/
...
newFilterI
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
24579b857e | ||
|
|
61c321e570 | ||
|
|
f5ab491540 | ||
|
|
9c38e30f38 |
@@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
(
|
||||
cd /tmp && /usr/local/bin/bootstrap.sh apache2ctl start
|
||||
)
|
||||
|
||||
composer install --no-dev
|
||||
npm ci
|
||||
npm run dev
|
||||
132
.drone.yml
Normal file
@@ -0,0 +1,132 @@
|
||||
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
|
||||
@@ -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
|
||||
|
||||
12
.eslintrc.js
@@ -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': ['off'],
|
||||
}
|
||||
}
|
||||
|
||||
23
.github/ISSUE_TEMPLATE/Bug_report.md
vendored
@@ -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.
|
||||
|
||||
|
||||
22
.github/ISSUE_TEMPLATE/Feature_request.md
vendored
@@ -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 [...]
|
||||
|
||||
|
||||
84
.github/dependabot.yml
vendored
@@ -1,84 +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
|
||||
- luka-nextcloud
|
||||
|
||||
- package-ecosystem: npm
|
||||
target-branch: stable28
|
||||
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: stable27
|
||||
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
|
||||
- luka-nextcloud
|
||||
|
||||
- package-ecosystem: composer
|
||||
directory: "/tests/integration"
|
||||
schedule:
|
||||
interval: weekly
|
||||
day: saturday
|
||||
time: "03:00"
|
||||
timezone: Europe/Paris
|
||||
open-pull-requests-limit: 10
|
||||
reviewers:
|
||||
- juliushaertl
|
||||
- luka-nextcloud
|
||||
|
||||
- package-ecosystem: github-actions
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: weekly
|
||||
day: saturday
|
||||
time: "03:00"
|
||||
timezone: Europe/Paris
|
||||
open-pull-requests-limit: 10
|
||||
reviewers:
|
||||
- juliushaertl
|
||||
- luka-nextcloud
|
||||
2
.github/pull_request_template.md
vendored
@@ -1,6 +1,6 @@
|
||||
|
||||
* Resolves: # <!-- related github issue -->
|
||||
* Target version: main
|
||||
* Target version: master
|
||||
|
||||
### Summary
|
||||
|
||||
|
||||
25
.github/stale.yml
vendored
Normal 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.
|
||||
43
.github/workflows/appbuild.yml
vendored
@@ -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@v4.1.1
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v4.0.2
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
- name: Set up npm7
|
||||
run: npm i -g npm@7
|
||||
- name: Setup PHP
|
||||
uses: shivammathur/setup-php@2.30.0
|
||||
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@v4
|
||||
with:
|
||||
name: Deck app tarball
|
||||
path: build/artifacts/deck.tar.gz
|
||||
169
.github/workflows/appstore-build-publish.yml
vendored
@@ -1,169 +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.2
|
||||
|
||||
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@69e92a3c4711150929bca9fcf34448c5bf5526e7 # v3.0
|
||||
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@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
|
||||
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@8205673bab74a63eb9b8093402fd9e0e018663a1 # v2.2
|
||||
id: versions
|
||||
# Continue if no package.json
|
||||
continue-on-error: true
|
||||
with:
|
||||
path: ${{ env.APP_NAME }}
|
||||
fallbackNode: '^20'
|
||||
fallbackNpm: '^9'
|
||||
|
||||
- name: Set up node ${{ steps.versions.outputs.nodeVersion }}
|
||||
# Skip if no package.json
|
||||
if: ${{ steps.versions.outputs.nodeVersion }}
|
||||
uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # 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@a4e22b60bbb9c1021113f2860347b0759f66fe5d # 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@076e0072799f4942c8bc574a82233e1e4d13e9d6 # 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 }}
|
||||
env:
|
||||
CYPRESS_INSTALL_BINARY: 0
|
||||
run: |
|
||||
cd ${{ env.APP_NAME }}
|
||||
npm ci
|
||||
npm run build
|
||||
|
||||
- name: Check Krankerl config
|
||||
id: krankerl
|
||||
uses: andstor/file-existence-action@076e0072799f4942c8bc574a82233e1e4d13e9d6 # 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@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
|
||||
if: ${{ steps.server-checkout.outcome != 'success' }}
|
||||
with:
|
||||
submodules: true
|
||||
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@04733e069f2d7f7f0b4aebc4fbdbce8613b03ccd # 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 }}
|
||||
51
.github/workflows/command-rebase.yml
vendored
@@ -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@71345be0265236311c031f5c7866368bd1eff043 # v4.0.0
|
||||
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@v4.1.1 # v3.5.2
|
||||
with:
|
||||
fetch-depth: 0
|
||||
token: ${{ secrets.COMMAND_BOT_PAT }}
|
||||
|
||||
- name: Automatic Rebase
|
||||
uses: cirrus-actions/rebase@b87d48154a87a85666003575337e27b8cd65f691 # 1.8
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.COMMAND_BOT_PAT }}
|
||||
|
||||
- name: Add reaction on failure
|
||||
uses: peter-evans/create-or-update-comment@71345be0265236311c031f5c7866368bd1eff043 # v4.0.0
|
||||
if: failure()
|
||||
with:
|
||||
token: ${{ secrets.COMMAND_BOT_PAT }}
|
||||
repository: ${{ github.event.repository.full_name }}
|
||||
comment-id: ${{ github.event.comment.id }}
|
||||
reaction-type: "-1"
|
||||
122
.github/workflows/cypress.yml
vendored
@@ -1,122 +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: [20.x]
|
||||
# containers: [1, 2, 3]
|
||||
php-versions: [ '8.0' ]
|
||||
databases: [ 'sqlite' ]
|
||||
server-versions: [ 'stable29' ]
|
||||
|
||||
steps:
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v4.0.2
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
|
||||
- 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@v4.1.1
|
||||
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@v4.1.1
|
||||
with:
|
||||
path: apps/${{ env.APP_NAME }}
|
||||
|
||||
- name: Checkout text
|
||||
uses: actions/checkout@v4.1.1
|
||||
with:
|
||||
repository: nextcloud/text
|
||||
ref: ${{ env.text_app_ref }}
|
||||
path: apps/text
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@2.30.0
|
||||
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@v6
|
||||
with:
|
||||
record: false
|
||||
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@v4
|
||||
if: failure()
|
||||
with:
|
||||
name: Upload screenshots
|
||||
path: apps/${{ env.APP_NAME }}/cypress/screenshots/
|
||||
retention-days: 5
|
||||
|
||||
- name: Upload nextcloud logs
|
||||
uses: actions/upload-artifact@v4
|
||||
if: failure()
|
||||
with:
|
||||
name: Upload nextcloud log
|
||||
path: data/nextcloud.log
|
||||
retention-days: 5
|
||||
40
.github/workflows/dependabot-approve-merge.yml
vendored
@@ -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 }}
|
||||
33
.github/workflows/fixup.yml
vendored
@@ -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: Block fixup and squash commits
|
||||
|
||||
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: skjnldsv/block-fixup-merge-action@42d26e1b536ce61e5cf467d65fb76caf4aa85acf # v1
|
||||
with:
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
161
.github/workflows/integration.yml
vendored
@@ -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: ['stable29']
|
||||
|
||||
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@v4.1.1
|
||||
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@v4.1.1
|
||||
with:
|
||||
path: apps/${{ env.APP_NAME }}
|
||||
|
||||
- name: Checkout activity
|
||||
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
|
||||
with:
|
||||
repository: nextcloud/activity
|
||||
ref: ${{ matrix.server-versions }}
|
||||
path: apps/activity
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@2.30.0
|
||||
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@v7
|
||||
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
|
||||
})
|
||||
}
|
||||
95
.github/workflows/lint-eslint.yml
vendored
@@ -1,95 +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 eslint
|
||||
|
||||
on: pull_request
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: lint-eslint-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
changes:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
outputs:
|
||||
src: ${{ steps.changes.outputs.src}}
|
||||
|
||||
steps:
|
||||
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
|
||||
id: changes
|
||||
continue-on-error: true
|
||||
with:
|
||||
filters: |
|
||||
src:
|
||||
- '.github/workflows/**'
|
||||
- 'src/**'
|
||||
- 'appinfo/info.xml'
|
||||
- 'package.json'
|
||||
- 'package-lock.json'
|
||||
- 'tsconfig.json'
|
||||
- '.eslintrc.*'
|
||||
- '.eslintignore'
|
||||
- '**.js'
|
||||
- '**.ts'
|
||||
- '**.vue'
|
||||
|
||||
lint:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
needs: changes
|
||||
if: needs.changes.outputs.src != 'false'
|
||||
|
||||
name: NPM lint
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
|
||||
|
||||
- name: Read package.json node and npm engines version
|
||||
uses: skjnldsv/read-package-engines-version-actions@8205673bab74a63eb9b8093402fd9e0e018663a1 # v2.2
|
||||
id: versions
|
||||
with:
|
||||
fallbackNode: '^20'
|
||||
fallbackNpm: '^9'
|
||||
|
||||
- name: Set up node ${{ steps.versions.outputs.nodeVersion }}
|
||||
uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # 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
|
||||
env:
|
||||
CYPRESS_INSTALL_BINARY: 0
|
||||
PUPPETEER_SKIP_DOWNLOAD: true
|
||||
run: npm ci
|
||||
|
||||
- name: Lint
|
||||
run: npm run lint
|
||||
|
||||
summary:
|
||||
permissions:
|
||||
contents: none
|
||||
runs-on: ubuntu-latest
|
||||
needs: [changes, lint]
|
||||
|
||||
if: always()
|
||||
|
||||
# This is the summary, we just avoid to rename it so that branch protection rules still match
|
||||
name: eslint
|
||||
|
||||
steps:
|
||||
- name: Summary status
|
||||
run: if ${{ needs.changes.outputs.src != 'false' && needs.lint.result != 'success' }}; then exit 1; fi
|
||||
40
.github/workflows/lint-php-cs.yml
vendored
@@ -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: Lint php-cs
|
||||
|
||||
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@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
|
||||
|
||||
- name: Set up php8.2
|
||||
uses: shivammathur/setup-php@a4e22b60bbb9c1021113f2860347b0759f66fe5d # v2
|
||||
with:
|
||||
php-version: 8.2
|
||||
coverage: none
|
||||
ini-file: development
|
||||
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 )
|
||||
54
.github/workflows/lint-php.yml
vendored
@@ -1,54 +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 php
|
||||
|
||||
on: pull_request
|
||||
|
||||
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', '8.3' ]
|
||||
|
||||
name: php-lint
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@a4e22b60bbb9c1021113f2860347b0759f66fe5d # v2
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
coverage: none
|
||||
ini-file: development
|
||||
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
|
||||
48
.github/workflows/lint-stylelint.yml
vendored
@@ -1,48 +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 stylelint
|
||||
|
||||
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@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
|
||||
|
||||
- name: Read package.json node and npm engines version
|
||||
uses: skjnldsv/read-package-engines-version-actions@8205673bab74a63eb9b8093402fd9e0e018663a1 # v2.2
|
||||
id: versions
|
||||
with:
|
||||
fallbackNode: '^20'
|
||||
fallbackNpm: '^9'
|
||||
|
||||
- name: Set up node ${{ steps.versions.outputs.nodeVersion }}
|
||||
uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # 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
|
||||
env:
|
||||
CYPRESS_INSTALL_BINARY: 0
|
||||
run: npm ci
|
||||
|
||||
- name: Lint
|
||||
run: npm run stylelint
|
||||
83
.github/workflows/lint.yml
vendored
Normal file
@@ -0,0 +1,83 @@
|
||||
name: Lint
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- stable*
|
||||
|
||||
jobs:
|
||||
php:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
php-versions: ['7.2', '7.3', '7.4']
|
||||
|
||||
name: php${{ matrix.php-versions }} lint
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Set up php${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@v1
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
coverage: none
|
||||
- name: Lint
|
||||
run: composer run lint
|
||||
|
||||
php-cs-fixer:
|
||||
name: php-cs check
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@master
|
||||
- name: Set up php
|
||||
uses: shivammathur/setup-php@master
|
||||
with:
|
||||
php-version: 7.4
|
||||
coverage: none
|
||||
- name: Install dependencies
|
||||
run: composer i
|
||||
- name: Run coding standards check
|
||||
run: composer run cs:check
|
||||
|
||||
node:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
node-version: [12.x]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Use node ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
- name: ESLint
|
||||
run: npm run lint
|
||||
|
||||
stylelint:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
node-versions: [12.x]
|
||||
|
||||
name: stylelint node${{ matrix.node-versions }}
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
|
||||
- name: Set up node ${{ matrix.node-versions }}
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-versions: ${{ matrix.node-versions }}
|
||||
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
|
||||
- name: Lint
|
||||
run: npm run stylelint
|
||||
62
.github/workflows/nightly.yml
vendored
Normal file
@@ -0,0 +1,62 @@
|
||||
name: Nightly build
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- nightly
|
||||
schedule:
|
||||
- cron: '0 1 * * *' # run at 2 AM UTC
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
node-version: [12.x]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: ${{ matrix.node-version }}
|
||||
- name: Setup PHP
|
||||
uses: shivammathur/setup-php@v1
|
||||
with:
|
||||
php-version: '7.4'
|
||||
tools: composer
|
||||
- name: install dependencies
|
||||
run: |
|
||||
wget https://github.com/ChristophWurst/krankerl/releases/download/v0.12.2/krankerl_0.12.2_amd64.deb
|
||||
sudo dpkg -i krankerl_0.12.2_amd64.deb
|
||||
- name: package
|
||||
run: |
|
||||
uname -a
|
||||
RUST_BACKTRACE=1 krankerl --version
|
||||
RUST_BACKTRACE=1 krankerl package
|
||||
- name: Set git config
|
||||
run: |
|
||||
git config --local user.email "action@github.com"
|
||||
git config --local user.name "GitHub Action"
|
||||
git tag -f nightly
|
||||
- name: Push tag
|
||||
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@master
|
||||
with:
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
tag: nightly
|
||||
files: ./build/artifacts/deck.tar.gz
|
||||
name: Nightly build
|
||||
body: |
|
||||
Nightly release of deck
|
||||
draft: false
|
||||
prerelease: true
|
||||
overwrite: true
|
||||
16
.github/workflows/nodejs.yml
vendored
@@ -9,26 +9,18 @@ jobs:
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
node-version: [14.x]
|
||||
node-version: [12.x]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4.1.1
|
||||
- uses: actions/checkout@v1
|
||||
- name: Use Node.js ${{ matrix.node-version }}
|
||||
uses: actions/setup-node@v4.0.2
|
||||
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
|
||||
|
||||
|
||||
73
.github/workflows/npm-audit-fix.yml
vendored
@@ -1,73 +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', 'stable28', 'stable27', 'stable26']
|
||||
|
||||
name: npm-audit-fix-${{ matrix.branches }}
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
|
||||
with:
|
||||
ref: ${{ matrix.branches }}
|
||||
|
||||
- name: Read package.json node and npm engines version
|
||||
uses: skjnldsv/read-package-engines-version-actions@8205673bab74a63eb9b8093402fd9e0e018663a1 # v2.2
|
||||
id: versions
|
||||
with:
|
||||
fallbackNode: '^20'
|
||||
fallbackNpm: '^9'
|
||||
|
||||
- name: Set up node ${{ steps.versions.outputs.nodeVersion }}
|
||||
uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # 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()
|
||||
env:
|
||||
CYPRESS_INSTALL_BINARY: 0
|
||||
run: |
|
||||
npm ci
|
||||
npm run build --if-present
|
||||
|
||||
- name: Create Pull Request
|
||||
if: always()
|
||||
uses: peter-evans/create-pull-request@70a41aba780001da0a30141984ae2a0c95d8704e # v5
|
||||
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
|
||||
185
.github/workflows/phpunit-mysql.yml
vendored
@@ -1,185 +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: PHPUnit MySQL
|
||||
|
||||
on: pull_request
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: phpunit-mysql-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
matrix:
|
||||
runs-on: ubuntu-latest-low
|
||||
outputs:
|
||||
matrix: ${{ steps.versions.outputs.sparse-matrix }}
|
||||
steps:
|
||||
- name: Checkout app
|
||||
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
|
||||
|
||||
- name: Get version matrix
|
||||
id: versions
|
||||
uses: icewind1991/nextcloud-version-matrix@58becf3b4bb6dc6cef677b15e2fd8e7d48c0908f # v1.3.1
|
||||
with:
|
||||
matrix: '{"mysql-versions": ["8.1"]}'
|
||||
|
||||
changes:
|
||||
runs-on: ubuntu-latest-low
|
||||
|
||||
outputs:
|
||||
src: ${{ steps.changes.outputs.src}}
|
||||
|
||||
steps:
|
||||
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
|
||||
id: changes
|
||||
continue-on-error: true
|
||||
with:
|
||||
filters: |
|
||||
src:
|
||||
- '.github/workflows/**'
|
||||
- 'appinfo/**'
|
||||
- 'lib/**'
|
||||
- 'templates/**'
|
||||
- 'tests/**'
|
||||
- 'vendor/**'
|
||||
- 'vendor-bin/**'
|
||||
- '.php-cs-fixer.dist.php'
|
||||
- 'composer.json'
|
||||
- 'composer.lock'
|
||||
|
||||
phpunit-mysql:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
needs: [changes, matrix]
|
||||
if: needs.changes.outputs.src != 'false'
|
||||
|
||||
strategy:
|
||||
matrix: ${{ fromJson(needs.matrix.outputs.matrix) }}
|
||||
|
||||
name: MySQL ${{ matrix.mysql-versions }} PHP ${{ matrix.php-versions }} Nextcloud ${{ matrix.server-versions }}
|
||||
|
||||
services:
|
||||
mysql:
|
||||
image: ghcr.io/nextcloud/continuous-integration-mysql-${{ matrix.mysql-versions }}:latest
|
||||
ports:
|
||||
- 4444:3306/tcp
|
||||
env:
|
||||
MYSQL_ROOT_PASSWORD: rootpassword
|
||||
options: --health-cmd="mysqladmin ping" --health-interval 5s --health-timeout 2s --health-retries 10
|
||||
|
||||
steps:
|
||||
- name: Set app env
|
||||
run: |
|
||||
# Split and keep last
|
||||
echo "APP_NAME=${GITHUB_REPOSITORY##*/}" >> $GITHUB_ENV
|
||||
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
|
||||
with:
|
||||
submodules: true
|
||||
repository: nextcloud/server
|
||||
ref: ${{ matrix.server-versions }}
|
||||
|
||||
- name: Checkout app
|
||||
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
|
||||
with:
|
||||
path: apps/${{ env.APP_NAME }}
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@a4e22b60bbb9c1021113f2860347b0759f66fe5d # v2
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
|
||||
extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, mysql, pdo_mysql
|
||||
coverage: none
|
||||
ini-file: development
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Enable ONLY_FULL_GROUP_BY MySQL option
|
||||
run: |
|
||||
echo "SET GLOBAL sql_mode=(SELECT CONCAT(@@sql_mode,',ONLY_FULL_GROUP_BY'));" | mysql -h 127.0.0.1 -P 4444 -u root -prootpassword
|
||||
echo "SELECT @@sql_mode;" | mysql -h 127.0.0.1 -P 4444 -u root -prootpassword
|
||||
|
||||
- name: Check composer file existence
|
||||
id: check_composer
|
||||
uses: andstor/file-existence-action@076e0072799f4942c8bc574a82233e1e4d13e9d6 # v3.0.0
|
||||
with:
|
||||
files: apps/${{ env.APP_NAME }}/composer.json
|
||||
|
||||
- name: Set up dependencies
|
||||
# Only run if phpunit config file exists
|
||||
if: steps.check_composer.outputs.files_exists == 'true'
|
||||
working-directory: apps/${{ env.APP_NAME }}
|
||||
run: composer i
|
||||
|
||||
- name: Set up Nextcloud
|
||||
env:
|
||||
DB_PORT: 4444
|
||||
run: |
|
||||
mkdir data
|
||||
./occ maintenance:install --verbose --database=mysql --database-name=nextcloud --database-host=127.0.0.1 --database-port=$DB_PORT --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass admin
|
||||
./occ app:enable --force ${{ env.APP_NAME }}
|
||||
|
||||
- name: Check PHPUnit script is defined
|
||||
id: check_phpunit
|
||||
continue-on-error: true
|
||||
working-directory: apps/${{ env.APP_NAME }}
|
||||
run: |
|
||||
composer run --list | grep "^ test:unit " | wc -l | grep 1
|
||||
|
||||
- name: PHPUnit
|
||||
# Only run if phpunit config file exists
|
||||
if: steps.check_phpunit.outcome == 'success'
|
||||
working-directory: apps/${{ env.APP_NAME }}
|
||||
run: composer run test:unit
|
||||
|
||||
- name: Check PHPUnit integration script is defined
|
||||
id: check_integration
|
||||
continue-on-error: true
|
||||
working-directory: apps/${{ env.APP_NAME }}
|
||||
run: |
|
||||
composer run --list | grep "^ test:integration " | wc -l | grep 1
|
||||
|
||||
- name: Run Nextcloud
|
||||
# Only run if phpunit integration config file exists
|
||||
if: steps.check_integration.outcome == 'success'
|
||||
run: php -S localhost:8080 &
|
||||
|
||||
- name: PHPUnit integration
|
||||
# Only run if phpunit integration config file exists
|
||||
if: steps.check_integration.outcome == 'success'
|
||||
working-directory: apps/${{ env.APP_NAME }}
|
||||
run: composer run test:integration
|
||||
|
||||
- name: Print logs
|
||||
if: always()
|
||||
run: |
|
||||
cat data/nextcloud.log
|
||||
|
||||
- name: Skipped
|
||||
# Fail the action when neither unit nor integration tests ran
|
||||
if: steps.check_phpunit.outcome == 'failure' && steps.check_integration.outcome == 'failure'
|
||||
run: |
|
||||
echo 'Neither PHPUnit nor PHPUnit integration tests are specified in composer.json scripts'
|
||||
exit 1
|
||||
|
||||
summary:
|
||||
permissions:
|
||||
contents: none
|
||||
runs-on: ubuntu-latest-low
|
||||
needs: [changes, phpunit-mysql]
|
||||
|
||||
if: always()
|
||||
|
||||
name: phpunit-mysql-summary
|
||||
|
||||
steps:
|
||||
- name: Summary status
|
||||
run: if ${{ needs.changes.outputs.src != 'false' && needs.phpunit-mysql.result != 'success' }}; then exit 1; fi
|
||||
168
.github/workflows/phpunit-pgsql.yml
vendored
@@ -1,168 +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: PHPUnit pgsql
|
||||
|
||||
on: pull_request
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: phpunit-pgsql-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
changes:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
outputs:
|
||||
src: ${{ steps.changes.outputs.src}}
|
||||
|
||||
steps:
|
||||
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
|
||||
id: changes
|
||||
continue-on-error: true
|
||||
with:
|
||||
filters: |
|
||||
src:
|
||||
- '.github/workflows/**'
|
||||
- 'appinfo/**'
|
||||
- 'lib/**'
|
||||
- 'templates/**'
|
||||
- 'tests/**'
|
||||
- 'vendor/**'
|
||||
- 'vendor-bin/**'
|
||||
- '.php-cs-fixer.dist.php'
|
||||
- 'composer.json'
|
||||
- 'composer.lock'
|
||||
|
||||
phpunit-pgsql:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
needs: changes
|
||||
if: needs.changes.outputs.src != 'false'
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
php-versions: ['8.2']
|
||||
server-versions: ['stable29']
|
||||
|
||||
services:
|
||||
postgres:
|
||||
image: ghcr.io/nextcloud/continuous-integration-postgres-14:latest
|
||||
ports:
|
||||
- 4444:5432/tcp
|
||||
env:
|
||||
POSTGRES_USER: root
|
||||
POSTGRES_PASSWORD: rootpassword
|
||||
POSTGRES_DB: nextcloud
|
||||
options: --health-cmd pg_isready --health-interval 5s --health-timeout 2s --health-retries 5
|
||||
|
||||
steps:
|
||||
- name: Set app env
|
||||
run: |
|
||||
# Split and keep last
|
||||
echo "APP_NAME=${GITHUB_REPOSITORY##*/}" >> $GITHUB_ENV
|
||||
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
|
||||
with:
|
||||
submodules: true
|
||||
repository: nextcloud/server
|
||||
ref: ${{ matrix.server-versions }}
|
||||
|
||||
- name: Checkout app
|
||||
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
|
||||
with:
|
||||
path: apps/${{ env.APP_NAME }}
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@a4e22b60bbb9c1021113f2860347b0759f66fe5d # v2
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
|
||||
extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, pgsql, pdo_pgsql
|
||||
coverage: none
|
||||
ini-file: development
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Check composer file existence
|
||||
id: check_composer
|
||||
uses: andstor/file-existence-action@076e0072799f4942c8bc574a82233e1e4d13e9d6 # v2
|
||||
with:
|
||||
files: apps/${{ env.APP_NAME }}/composer.json
|
||||
|
||||
- name: Set up dependencies
|
||||
# Only run if phpunit config file exists
|
||||
if: steps.check_composer.outputs.files_exists == 'true'
|
||||
working-directory: apps/${{ env.APP_NAME }}
|
||||
run: composer i
|
||||
|
||||
- name: Set up Nextcloud
|
||||
env:
|
||||
DB_PORT: 4444
|
||||
run: |
|
||||
mkdir data
|
||||
./occ maintenance:install --verbose --database=pgsql --database-name=nextcloud --database-host=127.0.0.1 --database-port=$DB_PORT --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass admin
|
||||
./occ app:enable --force ${{ env.APP_NAME }}
|
||||
|
||||
- name: Check PHPUnit script is defined
|
||||
id: check_phpunit
|
||||
continue-on-error: true
|
||||
working-directory: apps/${{ env.APP_NAME }}
|
||||
run: |
|
||||
composer run --list | grep "^ test:unit " | wc -l | grep 1
|
||||
|
||||
- name: PHPUnit
|
||||
# Only run if phpunit config file exists
|
||||
if: steps.check_phpunit.outcome == 'success'
|
||||
working-directory: apps/${{ env.APP_NAME }}
|
||||
run: composer run test:unit
|
||||
|
||||
- name: Check PHPUnit integration script is defined
|
||||
id: check_integration
|
||||
continue-on-error: true
|
||||
working-directory: apps/${{ env.APP_NAME }}
|
||||
run: |
|
||||
composer run --list | grep "^ test:integration " | wc -l | grep 1
|
||||
|
||||
- name: Run Nextcloud
|
||||
# Only run if phpunit integration config file exists
|
||||
if: steps.check_integration.outcome == 'success'
|
||||
run: php -S localhost:8080 &
|
||||
|
||||
- name: PHPUnit integration
|
||||
# Only run if phpunit integration config file exists
|
||||
if: steps.check_integration.outcome == 'success'
|
||||
working-directory: apps/${{ env.APP_NAME }}
|
||||
run: composer run test:integration
|
||||
|
||||
- name: Print logs
|
||||
if: always()
|
||||
run: |
|
||||
cat data/nextcloud.log
|
||||
|
||||
- name: Skipped
|
||||
# Fail the action when neither unit nor integration tests ran
|
||||
if: steps.check_phpunit.outcome == 'failure' && steps.check_integration.outcome == 'failure'
|
||||
run: |
|
||||
echo 'Neither PHPUnit nor PHPUnit integration tests are specified in composer.json scripts'
|
||||
exit 1
|
||||
|
||||
summary:
|
||||
permissions:
|
||||
contents: none
|
||||
runs-on: ubuntu-latest
|
||||
needs: [changes, phpunit-pgsql]
|
||||
|
||||
if: always()
|
||||
|
||||
name: phpunit-pgsql-summary
|
||||
|
||||
steps:
|
||||
- name: Summary status
|
||||
run: if ${{ needs.changes.outputs.src != 'false' && needs.phpunit-pgsql.result != 'success' }}; then exit 1; fi
|
||||
157
.github/workflows/phpunit-sqlite.yml
vendored
@@ -1,157 +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: PHPUnit sqlite
|
||||
|
||||
on: pull_request
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: phpunit-sqlite-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
changes:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
outputs:
|
||||
src: ${{ steps.changes.outputs.src}}
|
||||
|
||||
steps:
|
||||
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2
|
||||
id: changes
|
||||
continue-on-error: true
|
||||
with:
|
||||
filters: |
|
||||
src:
|
||||
- '.github/workflows/**'
|
||||
- 'appinfo/**'
|
||||
- 'lib/**'
|
||||
- 'templates/**'
|
||||
- 'tests/**'
|
||||
- 'vendor/**'
|
||||
- 'vendor-bin/**'
|
||||
- '.php-cs-fixer.dist.php'
|
||||
- 'composer.json'
|
||||
- 'composer.lock'
|
||||
|
||||
phpunit-sqlite:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
needs: changes
|
||||
if: needs.changes.outputs.src != 'false'
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
php-versions: ['8.2']
|
||||
server-versions: ['stable29']
|
||||
|
||||
steps:
|
||||
- name: Set app env
|
||||
run: |
|
||||
# Split and keep last
|
||||
echo "APP_NAME=${GITHUB_REPOSITORY##*/}" >> $GITHUB_ENV
|
||||
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
|
||||
with:
|
||||
submodules: true
|
||||
repository: nextcloud/server
|
||||
ref: ${{ matrix.server-versions }}
|
||||
|
||||
- name: Checkout app
|
||||
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
|
||||
with:
|
||||
path: apps/${{ env.APP_NAME }}
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@a4e22b60bbb9c1021113f2860347b0759f66fe5d # v2
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
|
||||
extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite
|
||||
coverage: none
|
||||
ini-file: development
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Check composer file existence
|
||||
id: check_composer
|
||||
uses: andstor/file-existence-action@076e0072799f4942c8bc574a82233e1e4d13e9d6 # v2
|
||||
with:
|
||||
files: apps/${{ env.APP_NAME }}/composer.json
|
||||
|
||||
- name: Set up dependencies
|
||||
# Only run if phpunit config file exists
|
||||
if: steps.check_composer.outputs.files_exists == 'true'
|
||||
working-directory: apps/${{ env.APP_NAME }}
|
||||
run: composer i
|
||||
|
||||
- name: Set up Nextcloud
|
||||
env:
|
||||
DB_PORT: 4444
|
||||
run: |
|
||||
mkdir data
|
||||
./occ maintenance:install --verbose --database=sqlite --database-name=nextcloud --database-host=127.0.0.1 --database-port=$DB_PORT --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass admin
|
||||
./occ app:enable --force ${{ env.APP_NAME }}
|
||||
|
||||
- name: Check PHPUnit script is defined
|
||||
id: check_phpunit
|
||||
continue-on-error: true
|
||||
working-directory: apps/${{ env.APP_NAME }}
|
||||
run: |
|
||||
composer run --list | grep "^ test:unit " | wc -l | grep 1
|
||||
|
||||
- name: PHPUnit
|
||||
# Only run if phpunit config file exists
|
||||
if: steps.check_phpunit.outcome == 'success'
|
||||
working-directory: apps/${{ env.APP_NAME }}
|
||||
run: composer run test:unit
|
||||
|
||||
- name: Check PHPUnit integration script is defined
|
||||
id: check_integration
|
||||
continue-on-error: true
|
||||
working-directory: apps/${{ env.APP_NAME }}
|
||||
run: |
|
||||
composer run --list | grep "^ test:integration " | wc -l | grep 1
|
||||
|
||||
- name: Run Nextcloud
|
||||
# Only run if phpunit integration config file exists
|
||||
if: steps.check_integration.outcome == 'success'
|
||||
run: php -S localhost:8080 &
|
||||
|
||||
- name: PHPUnit integration
|
||||
# Only run if phpunit integration config file exists
|
||||
if: steps.check_integration.outcome == 'success'
|
||||
working-directory: apps/${{ env.APP_NAME }}
|
||||
run: composer run test:integration
|
||||
|
||||
- name: Print logs
|
||||
if: always()
|
||||
run: |
|
||||
cat data/nextcloud.log
|
||||
|
||||
- name: Skipped
|
||||
# Fail the action when neither unit nor integration tests ran
|
||||
if: steps.check_phpunit.outcome == 'failure' && steps.check_integration.outcome == 'failure'
|
||||
run: |
|
||||
echo 'Neither PHPUnit nor PHPUnit integration tests are specified in composer.json scripts'
|
||||
exit 1
|
||||
|
||||
summary:
|
||||
permissions:
|
||||
contents: none
|
||||
runs-on: ubuntu-latest
|
||||
needs: [changes, phpunit-sqlite]
|
||||
|
||||
if: always()
|
||||
|
||||
name: phpunit-sqlite-summary
|
||||
|
||||
steps:
|
||||
- name: Summary status
|
||||
run: if ${{ needs.changes.outputs.src != 'false' && needs.phpunit-sqlite.result != 'success' }}; then exit 1; fi
|
||||
34
.github/workflows/pr-feedback.yml
vendored
@@ -1,34 +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: 'Ask for feedback on PRs'
|
||||
on:
|
||||
schedule:
|
||||
- cron: '30 1 * * *'
|
||||
|
||||
jobs:
|
||||
pr-feedback:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: The get-github-handles-from-website action
|
||||
uses: marcelklehr/get-github-handles-from-website-action@a739600f6b91da4957f51db0792697afbb2f143c # v1.0.0
|
||||
id: scrape
|
||||
with:
|
||||
website: 'https://nextcloud.com/team/'
|
||||
- uses: marcelklehr/pr-feedback-action@601109aa729eb4c8d6d0ece7567b9d4901db4aef
|
||||
with:
|
||||
feedback-message: |
|
||||
Hello there,
|
||||
Thank you so much for taking the time and effort to create a pull request to our Nextcloud project.
|
||||
|
||||
We hope that the review process is going smooth and is helpful for you. We want to ensure your pull request is reviewed to your satisfaction. If you have a moment, our community management team would very much appreciate your feedback on your experience with this PR review process.
|
||||
|
||||
Your feedback is valuable to us as we continuously strive to improve our community developer experience. Please take a moment to complete our short survey by clicking on the following link: https://cloud.nextcloud.com/apps/forms/s/i9Ago4EQRZ7TWxjfmeEpPkf6
|
||||
|
||||
Thank you for contributing to Nextcloud and we hope to hear from you soon!
|
||||
days-before-feedback: 14
|
||||
start-date: "2023-07-10"
|
||||
exempt-authors: "${{ steps.scrape.outputs.users }},nextcloud-command,nextcloud-android-bot,skjnldsv,datenangebot"
|
||||
exempt-bots: true
|
||||
36
.github/workflows/psalm.yml
vendored
@@ -1,36 +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
|
||||
|
||||
concurrency:
|
||||
group: psalm-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
static-analysis:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
name: static-psalm-analysis
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
|
||||
|
||||
- name: Set up php8.2
|
||||
uses: shivammathur/setup-php@a4e22b60bbb9c1021113f2860347b0759f66fe5d # v2
|
||||
with:
|
||||
php-version: 8.2
|
||||
coverage: none
|
||||
ini-file: development
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Install dependencies
|
||||
run: composer i
|
||||
|
||||
- name: Run coding standards check
|
||||
run: composer run psalm
|
||||
@@ -1,49 +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: Auto approve nextcloud/ocp
|
||||
|
||||
on:
|
||||
pull_request_target:
|
||||
branches:
|
||||
- main
|
||||
- master
|
||||
- stable*
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: update-nextcloud-ocp-approve-merge-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
auto-approve-merge:
|
||||
if: github.actor == 'nextcloud-command'
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
# for hmarr/auto-approve-action to approve PRs
|
||||
pull-requests: write
|
||||
# for alexwilson/enable-github-automerge-action to approve PRs
|
||||
contents: write
|
||||
|
||||
steps:
|
||||
- uses: mdecoleman/pr-branch-name@bab4c71506bcd299fb350af63bb8e53f2940a599 # v2.0.0
|
||||
id: branchname
|
||||
with:
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
# GitHub actions bot approve
|
||||
- uses: hmarr/auto-approve-action@b40d6c9ed2fa10c9a2749eca7eb004418a705501 # v2
|
||||
if: startsWith(steps.branchname.outputs.branch, 'automated/noid/') && endsWith(steps.branchname.outputs.branch, 'update-nextcloud-ocp')
|
||||
with:
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
# Enable GitHub auto merge
|
||||
- name: Auto merge
|
||||
uses: alexwilson/enable-github-automerge-action@d8d24b8699d9749aca9279609909abca856457c8 # main
|
||||
if: startsWith(steps.branchname.outputs.branch, 'automated/noid/') && endsWith(steps.branchname.outputs.branch, 'update-nextcloud-ocp')
|
||||
with:
|
||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
116
.github/workflows/update-nextcloud-ocp.yml
vendored
@@ -1,116 +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: ['main', 'master', 'stable28', 'stable27', 'stable26']
|
||||
|
||||
name: update-nextcloud-ocp-${{ matrix.branches }}
|
||||
|
||||
steps:
|
||||
- id: checkout
|
||||
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
|
||||
with:
|
||||
ref: ${{ matrix.branches }}
|
||||
submodules: true
|
||||
continue-on-error: true
|
||||
|
||||
- name: Set up php8.2
|
||||
if: steps.checkout.outcome == 'success'
|
||||
uses: shivammathur/setup-php@a4e22b60bbb9c1021113f2860347b0759f66fe5d # v2
|
||||
with:
|
||||
php-version: 8.2
|
||||
# https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation
|
||||
extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite
|
||||
coverage: none
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Read codeowners
|
||||
if: steps.checkout.outcome == 'success'
|
||||
id: codeowners
|
||||
run: |
|
||||
grep '/appinfo/info.xml' .github/CODEOWNERS | cut -f 2- -d ' ' | xargs | awk '{ print "codeowners="$0 }' >> $GITHUB_OUTPUT
|
||||
continue-on-error: true
|
||||
|
||||
- name: Composer install
|
||||
if: steps.checkout.outcome == 'success'
|
||||
run: composer install
|
||||
|
||||
- name: Composer update nextcloud/ocp
|
||||
id: update_branch
|
||||
if: ${{ steps.checkout.outcome == 'success' && matrix.branches != 'main' }}
|
||||
run: composer require --dev nextcloud/ocp:dev-${{ matrix.branches }}
|
||||
|
||||
- name: Raise on issue on failure
|
||||
uses: dacbd/create-issue-action@cdb57ab6ff8862aa09fee2be6ba77a59581921c2 # v2.0.0
|
||||
if: ${{ steps.checkout.outcome == 'success' && failure() && steps.update_branch.conclusion == 'failure' }}
|
||||
with:
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
title: Failed to update nextcloud/ocp package on branch ${{ matrix.branches }}
|
||||
body: Please check the output of the GitHub action and manually resolve the issues<br>${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}<br>${{ steps.codeowners.outputs.codeowners }}
|
||||
|
||||
- name: Composer update nextcloud/ocp
|
||||
id: update_main
|
||||
if: ${{ steps.checkout.outcome == 'success' && matrix.branches == 'main' }}
|
||||
run: composer require --dev nextcloud/ocp:dev-master
|
||||
|
||||
- name: Raise on issue on failure
|
||||
uses: dacbd/create-issue-action@cdb57ab6ff8862aa09fee2be6ba77a59581921c2 # v2.0.0
|
||||
if: ${{ steps.checkout.outcome == 'success' && failure() && steps.update_main.conclusion == 'failure' }}
|
||||
with:
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
title: Failed to update nextcloud/ocp package on branch ${{ matrix.branches }}
|
||||
body: Please check the output of the GitHub action and manually resolve the issues<br>${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}<br>${{ steps.codeowners.outputs.codeowners }}
|
||||
|
||||
- name: Reset checkout 3rdparty
|
||||
if: steps.checkout.outcome == 'success'
|
||||
run: |
|
||||
git clean -f 3rdparty
|
||||
git checkout 3rdparty
|
||||
continue-on-error: true
|
||||
|
||||
- name: Reset checkout vendor
|
||||
if: steps.checkout.outcome == 'success'
|
||||
run: |
|
||||
git clean -f vendor
|
||||
git checkout vendor
|
||||
continue-on-error: true
|
||||
|
||||
- name: Reset checkout vendor-bin
|
||||
if: steps.checkout.outcome == 'success'
|
||||
run: |
|
||||
git clean -f vendor-bin
|
||||
git checkout vendor-bin
|
||||
continue-on-error: true
|
||||
|
||||
- name: Create Pull Request
|
||||
if: steps.checkout.outcome == 'success'
|
||||
uses: peter-evans/create-pull-request@70a41aba780001da0a30141984ae2a0c95d8704e # 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
|
||||
3
.gitignore
vendored
@@ -3,11 +3,10 @@ js/
|
||||
build/
|
||||
css/style.css
|
||||
css/vendor.css
|
||||
cypress/videos/
|
||||
tests/integration/vendor/
|
||||
tests/integration/composer.lock
|
||||
tests/.phpunit.result.cache
|
||||
vendor/
|
||||
*.lock
|
||||
.php_cs.cache
|
||||
\.idea/
|
||||
settings.json
|
||||
|
||||
@@ -13,7 +13,6 @@ $config
|
||||
->notPath('build')
|
||||
->notPath('l10n')
|
||||
->notPath('src')
|
||||
->notPath('node_modules')
|
||||
->notPath('vendor')
|
||||
->in(__DIR__);
|
||||
return $config;
|
||||
32
.travis.yml
Normal 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
|
||||
@@ -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
|
||||
|
||||
638
CHANGELOG.md
@@ -1,629 +1,9 @@
|
||||
# Changelog
|
||||
All notable changes to this project will be documented in this file.
|
||||
|
||||
## 1.13.6
|
||||
### Fixed
|
||||
* [stable29] Clear selected stack when selected board changed by @backportbot in https://github.com/nextcloud/deck/pull/6913
|
||||
* [stable29] fix: only delete assignments on unshared board by @grnd-alt in https://github.com/nextcloud/deck/pull/6936
|
||||
* [stable29] fix: Limit label actions to labels of the cards board by @backportbot in https://github.com/nextcloud/deck/pull/6952
|
||||
|
||||
### Maintenance
|
||||
* Chore(deps): Bump @nextcloud/vue from 8.23.1 to 8.24.0 by @dependabot in https://github.com/nextcloud/deck/pull/6880
|
||||
* Chore(deps): Bump dompurify from 3.2.4 to 3.2.5 by @dependabot in https://github.com/nextcloud/deck/pull/6878
|
||||
* Chore(deps): Bump @babel/runtime from 7.26.10 to 7.27.0 by @dependabot in https://github.com/nextcloud/deck/pull/6864
|
||||
* Chore(deps-dev): Bump @nextcloud/webpack-vue-config from 6.2.0 to 6.3.0 by @dependabot in https://github.com/nextcloud/deck/pull/6905
|
||||
* [stable29] Update nextcloud/ocp dependency by @nextcloud-command in https://github.com/nextcloud/deck/pull/6886
|
||||
* Chore(deps): Bump @nextcloud/vue from 8.24.0 to 8.25.1 by @dependabot in https://github.com/nextcloud/deck/pull/6927
|
||||
* Chore(deps): Bump @nextcloud/vue from 8.25.1 to 8.26.0 by @dependabot in https://github.com/nextcloud/deck/pull/6941
|
||||
* [stable29] Fix npm audit by @nextcloud-command in https://github.com/nextcloud/deck/pull/6949
|
||||
|
||||
## 1.13.5
|
||||
### Fixed
|
||||
* [stable29] fix: design review issues by @backportbot in https://github.com/nextcloud/deck/pull/6857
|
||||
|
||||
### Maintenance
|
||||
* chore(deps-dev): bump @nextcloud/cypress from 1.0.0-beta.13 to 1.0.0-beta.14 by @dependabot in https://github.com/nextcloud/deck/pull/6783
|
||||
* chore(deps-dev): bump @nextcloud/eslint-config from 8.4.1 to 8.4.2 by @dependabot in https://github.com/nextcloud/deck/pull/6782
|
||||
* [stable29] Update nextcloud/ocp dependency by @nextcloud-command in https://github.com/nextcloud/deck/pull/6790
|
||||
* chore(deps): bump @nextcloud/vue from 8.22.0 to 8.23.1 by @dependabot in https://github.com/nextcloud/deck/pull/6753
|
||||
* chore(deps): bump @nextcloud/event-bus from 3.3.1 to 3.3.2 by @dependabot in https://github.com/nextcloud/deck/pull/6810
|
||||
* [stable29] Update nextcloud/ocp dependency by @nextcloud-command in https://github.com/nextcloud/deck/pull/6824
|
||||
* Chore(deps): Bump @babel/runtime from 7.26.9 to 7.26.10 by @dependabot in https://github.com/nextcloud/deck/pull/6834
|
||||
* [stable29] Update nextcloud/ocp dependency by @nextcloud-command in https://github.com/nextcloud/deck/pull/6852
|
||||
|
||||
## 1.13.4
|
||||
### Fixed
|
||||
- fix: skip exporting a deleted card #6721
|
||||
- fix: Properly show attachment extension #6672
|
||||
- fix: two close buttons on card modal #6660
|
||||
- Update TrelloJsonService.php #6645
|
||||
- fix: close modal after deleting card #6620
|
||||
- fix: Use new query builder #6614
|
||||
- fix(sharing): list accounts with matches in email #6525
|
||||
- Fix npm audit #6568
|
||||
- Fix npm audit #6491
|
||||
|
||||
### Maintenance
|
||||
- Update nextcloud/ocp dependency #6768
|
||||
- Update nextcloud/ocp dependency #6737
|
||||
- Update nextcloud/ocp dependency #6717
|
||||
- Update nextcloud/ocp dependency #6699
|
||||
- Update nextcloud/ocp dependency #6655
|
||||
- Update nextcloud/ocp dependency #6586
|
||||
|
||||
## 1.13.3
|
||||
### Fixed
|
||||
- fix: board bubble preview widget #6476
|
||||
|
||||
### Maintenance
|
||||
- Fix npm audit #6448
|
||||
- Fix npm audit #6410
|
||||
- Update nextcloud/ocp dependency #6384
|
||||
- Update nextcloud/ocp dependency #6349
|
||||
|
||||
## 1.13.2
|
||||
### Fixed
|
||||
- fix: Load archived card if URL is opened directly #6325
|
||||
- copy labels when moving cards between boards #6288
|
||||
- Translation call fix #6262
|
||||
- use deleted_users for users that do not exist #6204
|
||||
- fix: losing focus while editing title field #6161
|
||||
- fix: remove redundant log #6116
|
||||
- Fix: incorrect height of editing windows and edit bar #6093
|
||||
- Update nextcloud/ocp dependency #6301
|
||||
- Only check path for being accessible when the storage is a object home #6064
|
||||
|
||||
### Maintenance
|
||||
- Fix npm audit #6306
|
||||
- Fix npm audit #6254
|
||||
- Fix npm audit #6226
|
||||
- Fix npm audit #6177
|
||||
- Update nextcloud/ocp dependency #6197
|
||||
- Update nextcloud/ocp dependency #6130
|
||||
- Update nextcloud/ocp dependency #6109
|
||||
- Update nextcloud/ocp dependency #6060
|
||||
|
||||
### Other
|
||||
- Completed card button wording change #6182
|
||||
|
||||
## 1.13.1
|
||||
### Fixed
|
||||
- fix: Adjust dependencies to fix filepicker #6038
|
||||
- Fix npm audit #6028
|
||||
- Fix npm audit #6001
|
||||
- fix: Avoid optional before required parameter #5820
|
||||
- fix: permission check for cloning board #5853
|
||||
|
||||
## 1.13.0
|
||||
|
||||
### Added
|
||||
|
||||
- feat: Rename to teams @juliushaertl [#5611](https://github.com/nextcloud/deck/pull/5611)
|
||||
- feat: Implement a team resource provider @juliushaertl [#5625](https://github.com/nextcloud/deck/pull/5625)
|
||||
- Interactive board widget @juliushaertl [#5630](https://github.com/nextcloud/deck/pull/5630)
|
||||
- introduce done and open filters @grnd-alt [#5488](https://github.com/nextcloud/deck/pull/5488)
|
||||
|
||||
### Fixed
|
||||
|
||||
- fixed sorting for upcoming cards @elzody [#5493](https://github.com/nextcloud/deck/pull/5493)
|
||||
- fix(PermissionService#getPermissions): Catch exceptions from getBoard method @marcelklehr [#5542](https://github.com/nextcloud/deck/pull/5542)
|
||||
- fix(activity): Fix permission checks when rendering activities in bacâĻ @nickvergessen [#5533](https://github.com/nextcloud/deck/pull/5533)
|
||||
- fix: Safeguard sync requests to hopefully not spam then server @juliushaertl [#5590](https://github.com/nextcloud/deck/pull/5590)
|
||||
- fix: card move dialog auto close @luka-nextcloud [#5537](https://github.com/nextcloud/deck/pull/5537)
|
||||
- fix: Avoid conflicts on deck attachments folder name @juliushaertl [#5703](https://github.com/nextcloud/deck/pull/5703)
|
||||
- fix: Adapt NcAppSidebar props to new version @backportbot[bot] [#5768](https://github.com/nextcloud/deck/pull/5768)
|
||||
- Fix tags' display when they are numerous @backportbot[bot] [#5727](https://github.com/nextcloud/deck/pull/5727)
|
||||
- Clarify config file not found exception message @backportbot[bot] [#5724](https://github.com/nextcloud/deck/pull/5724)
|
||||
|
||||
### Other
|
||||
|
||||
- chore(CI): Adjust testing matrix for Nextcloud 29 on stable29 @nickvergessen [#5711](https://github.com/nextcloud/deck/pull/5711)
|
||||
|
||||
## 1.13.0-beta.1
|
||||
|
||||
### Added
|
||||
|
||||
- feat: Rename to teams @juliushaertl [#5611](https://github.com/nextcloud/deck/pull/5611)
|
||||
- feat: Implement a team resource provider @juliushaertl [#5625](https://github.com/nextcloud/deck/pull/5625)
|
||||
- Interactive board widget @juliushaertl [#5630](https://github.com/nextcloud/deck/pull/5630)
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fix deleted card/board issues @juliushaertl [#5423](https://github.com/nextcloud/deck/pull/5423)
|
||||
- Fixing #5451 @mintsoft [#5455](https://github.com/nextcloud/deck/pull/5455)
|
||||
- fix: Add debounce to update due date @juliushaertl [#5458](https://github.com/nextcloud/deck/pull/5458)
|
||||
- fix(done): Mark card as undone when updating card @stefan-niedermann [#5491](https://github.com/nextcloud/deck/pull/5491)
|
||||
- fixed sorting for upcoming cards @elzody [#5493](https://github.com/nextcloud/deck/pull/5493)
|
||||
- fix(PermissionService#getPermissions): Catch exceptions from getBoard method @marcelklehr [#5542](https://github.com/nextcloud/deck/pull/5542)
|
||||
- fix(activity): Fix permission checks when rendering activities in bacâĻ @nickvergessen [#5533](https://github.com/nextcloud/deck/pull/5533)
|
||||
- fix: Safeguard sync requests to hopefully not spam then server @juliushaertl [#5590](https://github.com/nextcloud/deck/pull/5590)
|
||||
- fix: card move dialog auto close @luka-nextcloud [#5537](https://github.com/nextcloud/deck/pull/5537)
|
||||
- also filter by storage when getting shares in folder @icewind1991 [#5452](https://github.com/nextcloud/deck/pull/5452)
|
||||
|
||||
### Other
|
||||
|
||||
- fix(i18n): Improved wording @rakekniven [#5496](https://github.com/nextcloud/deck/pull/5496)
|
||||
|
||||
## 1.12.0-beta.3
|
||||
|
||||
### Added
|
||||
|
||||
- feat: Move to contenteditable for inline title editing @juliushaertl [#5282](https://github.com/nextcloud/deck/pull/5282)
|
||||
|
||||
### Fixed
|
||||
|
||||
- fix: Properly get done state for dav @juliushaertl [#5287](https://github.com/nextcloud/deck/pull/5287)
|
||||
- Fix upcoming cards and label input @juliushaertl [#5290](https://github.com/nextcloud/deck/pull/5290)
|
||||
|
||||
## 1.12.0-beta.2
|
||||
|
||||
### Added
|
||||
|
||||
- Card layout polishing @juliushaertl [#5264](https://github.com/nextcloud/deck/pull/5264)
|
||||
|
||||
### Fixed
|
||||
|
||||
- fix: Properly handle adding new tags through multiselect @juliushaertl [#5285](https://github.com/nextcloud/deck/pull/5285)
|
||||
- fix: Avoid throwing errors if no token provided on close @juliushaertl [#5284](https://github.com/nextcloud/deck/pull/5284)
|
||||
- fix: Expose card actions in the card menu (fix #3180) [#5280](https://github.com/nextcloud/deck/pull/5280)
|
||||
- fix: Use full card menu everywhere (fix #3993) [#5280](https://github.com/nextcloud/deck/pull/5280)
|
||||
- fix: Detect end of the activity responses (fix #3395) [#5280](https://github.com/nextcloud/deck/pull/5280)
|
||||
- fix: Add title with absolute date time to activity (fix #4508, fix #2122) [#5280](https://github.com/nextcloud/deck/pull/5280)
|
||||
- fix: Disable dragging archived cards (fix #3271) [#5280](https://github.com/nextcloud/deck/pull/5280)
|
||||
- fix: Hide unavailable card menu entries for archived card view [#5280](https://github.com/nextcloud/deck/pull/5280)
|
||||
- fix: Use localCompare to sort labels (fix #2736) [#5280](https://github.com/nextcloud/deck/pull/5280)
|
||||
- fix: More fitting click target for title editing [#5280](https://github.com/nextcloud/deck/pull/5280)
|
||||
- fix: Always load proper dashboard js (fixes a log error) [#5280](https://github.com/nextcloud/deck/pull/5280)
|
||||
- fix: Set fixed height for card modal (fix #4296) [#5280](https://github.com/nextcloud/deck/pull/5280)
|
||||
- fix: Make sure to always update card description when navigating away (fix #5254 #2705) [#5280](https://github.com/nextcloud/deck/pull/5280)
|
||||
- perf: Already pass board list as initial state @juliushaertl [#5281](https://github.com/nextcloud/deck/pull/5281)
|
||||
|
||||
### Dependencies
|
||||
|
||||
- Fix npm audit @nextcloud-command [#5277](https://github.com/nextcloud/deck/pull/5277)
|
||||
- Update nextcloud/ocp dependency @nextcloud-command [#5275](https://github.com/nextcloud/deck/pull/5275)
|
||||
- Chore(deps): Bump @nextcloud/dialogs from 4.2.1 to 4.2.2 @dependabot[bot] [#5266](https://github.com/nextcloud/deck/pull/5266)
|
||||
- Chore(deps-dev): Bump cypress from 13.4.0 to 13.5.0 @dependabot[bot] [#5267](https://github.com/nextcloud/deck/pull/5267)
|
||||
- Chore(deps): Bump shivammathur/setup-php from 2.27.0 to 2.27.1 @dependabot[bot] [#5268](https://github.com/nextcloud/deck/pull/5268)
|
||||
|
||||
|
||||
## 1.12.0-beta.1
|
||||
|
||||
### Added
|
||||
|
||||
- Added ability to mark a card as done @TehThanos [#4137](https://github.com/nextcloud/deck/pull/4137)
|
||||
- Card Cover Images @jszeibert [#5035](https://github.com/nextcloud/deck/pull/5035)
|
||||
- Upcoming/Today/Tomorrow dashboard widgets @BKapelari [#2658](https://github.com/nextcloud/deck/pull/2658)
|
||||
- Enabled advanced fields option on tag color picker @faab007nl [#4362](https://github.com/nextcloud/deck/pull/4362)
|
||||
- Remember last board, list for new card dialog @luka-nextcloud [#5046](https://github.com/nextcloud/deck/pull/5046)
|
||||
- Add support for bidirectional text @jamazi [#5258](https://github.com/nextcloud/deck/pull/5258)
|
||||
|
||||
### Fixed
|
||||
|
||||
- Deck card comment notification label improvement @Jerome-Herbinet [#4748](https://github.com/nextcloud/deck/pull/4748)
|
||||
- update smart picker links @luka-nextcloud [#5047](https://github.com/nextcloud/deck/pull/5047)
|
||||
- feat: Enhance dark mode @juliushaertl [#5045](https://github.com/nextcloud/deck/pull/5045)
|
||||
- fix: export doesn't handle lists with no cards @magikmw [#5096](https://github.com/nextcloud/deck/pull/5096)
|
||||
- add attributes aria-label= and title= to Filters & View Modes buttons @privatemaker [#5133](https://github.com/nextcloud/deck/pull/5133)
|
||||
- fix: Check both card reference url patterns @juliushaertl [#5262](https://github.com/nextcloud/deck/pull/5262)
|
||||
- fix: Avoid too large index on postgres as indexing just the last_editor column is enough @juliushaertl [#5260](https://github.com/nextcloud/deck/pull/5260)
|
||||
- feat: error msg on CreateNewCardCustomPicker & only show available boâĻ @luka-nextcloud [#5029](https://github.com/nextcloud/deck/pull/5029)
|
||||
- test: add cypress tests for create new deck card @luka-nextcloud [#5025](https://github.com/nextcloud/deck/pull/5025)
|
||||
- Remove duplicate button @solracsf [#4850](https://github.com/nextcloud/deck/pull/4850)
|
||||
- [stable27] fix cypress for new file picker [#5088](https://github.com/nextcloud/deck/pull/5088)
|
||||
- Replace "Timeline" wording with "Activity" in order to be consistent with equivalent contexts throughout Nextcloud @Jerome-Herbinet [#5164](https://github.com/nextcloud/deck/pull/5164)
|
||||
- Board creation limitation : More understandable wordings @Jerome-Herbinet [#5168](https://github.com/nextcloud/deck/pull/5168)
|
||||
- ci(cypress): Fix file picker selector @juliushaertl [#5212](https://github.com/nextcloud/deck/pull/5212)
|
||||
- Switch to native date picker @juliushaertl [#4668](https://github.com/nextcloud/deck/pull/4668)
|
||||
- fixes minor spelling error @FundreasFrohsinn [#5216](https://github.com/nextcloud/deck/pull/5216)
|
||||
- feat(card): tooltip for comment timestamp @fitrahfm [#5253](https://github.com/nextcloud/deck/pull/5253)
|
||||
|
||||
## 1.10.0-beta.1
|
||||
|
||||
### Added
|
||||
|
||||
- Compatibility with Nextcloud 27
|
||||
|
||||
### Fixed
|
||||
|
||||
- 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)
|
||||
|
||||
|
||||
## 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
|
||||
## Added
|
||||
|
||||
- Completly rewritten frontend
|
||||
- Better maintainability
|
||||
@@ -650,10 +30,10 @@ Android app team for helping to improve our REST API:
|
||||
|
||||
## 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
|
||||
@@ -663,7 +43,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
|
||||
|
||||
@@ -736,7 +116,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
|
||||
@@ -863,7 +243,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
|
||||
@@ -937,7 +317,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
|
||||
|
||||
@@ -945,9 +325,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
|
||||
|
||||
|
||||
13
Makefile
@@ -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:
|
||||
|
||||
116
README.md
@@ -1,99 +1,81 @@
|
||||
# Deck
|
||||
|
||||
[](https://travis-ci.org/nextcloud/deck) [](https://codecov.io/github/nextcloud/deck) [](https://www.codacy.com/app/juliushaertl/deck?utm_source=github.com&utm_medium=referral&utm_content=nextcloud/deck&utm_campaign=Badge_Grade) [](https://scrutinizer-ci.com/g/nextcloud/deck/?branch=main) [](https://webchat.freenode.net/?channels=nextcloud-deck)
|
||||
[](https://travis-ci.org/nextcloud/deck) [](https://codecov.io/github/nextcloud/deck) [](https://www.codacy.com/app/juliushaertl/deck?utm_source=github.com&utm_medium=referral&utm_content=nextcloud/deck&utm_campaign=Badge_Grade) [](https://scrutinizer-ci.com/g/nextcloud/deck/?branch=master) [](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
|
||||
|
||||
### 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)
|
||||
- The [Nextcloud Deck app for Android](https://github.com/stefan-niedermann/nextcloud-deck) is available in the [Google Play Store](https://play.google.com/store/apps/details?id=it.niedermann.nextcloud.deck.play)
|
||||
|
||||
### 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
|
||||
- [QOwnNotes](https://github.com/pbek/QOwnNotes) - Quickly creates cards and links to them in Markdown notes
|
||||

|
||||
|
||||
## 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.
|
||||
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.
|
||||
|
||||
- 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`
|
||||
#### Hot reloading
|
||||
|
||||
### 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
|
||||
Enable debug mode in your config.php `'debug' => true,`
|
||||
|
||||
Without SSL:
|
||||
```
|
||||
docker run --rm \
|
||||
-p 8080:80 \
|
||||
-v ~/path/to/app:/var/www/html/apps-extra/app \
|
||||
ghcr.io/juliushaertl/nextcloud-dev-php80:latest
|
||||
npx webpack-dev-server --config webpack.hot.js \
|
||||
--public localhost:3000 \
|
||||
--output-public-path 'http://localhost:3000/js/'
|
||||
```
|
||||
|
||||
### Full Nextcloud development environment
|
||||
With SSL:
|
||||
```
|
||||
npx webpack-dev-server --config webpack.dev.js --https \
|
||||
--cert ~/repos/nextcloud/nc-dev/data/ssl/nextcloud.local.crt \
|
||||
--key ~/repos/nextcloud/nc-dev/data/ssl/nextcloud.local.key \
|
||||
--public nextcloud.local:3000 \
|
||||
--output-public-path 'https://nextcloud.local:3000/js/'
|
||||
```
|
||||
|
||||
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.
|
||||
|
||||
### Running tests
|
||||
You can use the provided Makefile to run all tests by using:
|
||||
|
||||
@@ -4,9 +4,8 @@
|
||||
|
||||
| Version | Nextcloud version | Supported |
|
||||
| ------- | ----------------- | ------------------ |
|
||||
| 1.0.x | 18, 19 | :white_check_mark: |
|
||||
| 0.8.x | 17 | :white_check_mark: |
|
||||
| <0.7.x | - | :x: |
|
||||
| 0.8.x | 18, 19 | :white_check_mark: |
|
||||
| 0.7.x | 17 | :x: |
|
||||
|
||||
|
||||
## Reporting a Vulnerability
|
||||
@@ -20,7 +19,7 @@ Your report should include:
|
||||
- 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 fix will be applied to the master 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.
|
||||
|
||||
@@ -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,15 +21,19 @@
|
||||
*
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
use OCA\Deck\AppInfo\Application;
|
||||
use OCP\AppFramework\QueryException;
|
||||
|
||||
namespace OCA\Deck\Validators;
|
||||
|
||||
class AssignmentServiceValidator extends BaseValidator {
|
||||
public function rules() {
|
||||
return [
|
||||
'cardId' => ['numeric'],
|
||||
'userId' => ['not_empty', 'not_null', 'not_false', 'max:64'],
|
||||
];
|
||||
}
|
||||
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');
|
||||
@@ -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,25 +8,21 @@
|
||||
|
||||
|
||||
- đĨ 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.13.6</version>
|
||||
<version>1.0.0</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>
|
||||
@@ -35,32 +32,30 @@
|
||||
<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>
|
||||
<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="29" max-version="29"/>
|
||||
<database min-version="5.5">mysql</database>
|
||||
<nextcloud min-version="18" max-version="20" />
|
||||
</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>
|
||||
<setting>OCA\Deck\Activity\SettingChanges</setting>
|
||||
<setting>OCA\Deck\Activity\SettingDescription</setting>
|
||||
<setting>OCA\Deck\Activity\Setting</setting>
|
||||
<setting>OCA\Deck\Activity\SettingComment</setting>
|
||||
<setting>OCA\Deck\Activity\DescriptionSetting</setting>
|
||||
</settings>
|
||||
<filters>
|
||||
<filter>OCA\Deck\Activity\Filter</filter>
|
||||
@@ -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>
|
||||
|
||||
@@ -25,12 +25,9 @@
|
||||
return [
|
||||
'routes' => [
|
||||
['name' => 'page#index', 'url' => '/', 'verb' => 'GET'],
|
||||
['name' => 'page#indexList', 'url' => '/board', 'verb' => 'GET'],
|
||||
['name' => 'page#indexBoard', 'url' => '/board/{boardId}', 'verb' => 'GET'],
|
||||
['name' => 'page#indexBoardDetails', 'url' => '/board/{boardId}/details', 'verb' => 'GET'],
|
||||
['name' => 'page#indexCard', 'url' => '/board/{boardId}/card/{cardId}', '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'],
|
||||
@@ -44,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'],
|
||||
@@ -66,14 +61,11 @@ return [
|
||||
['name' => 'card#reorder', 'url' => '/cards/{cardId}/reorder', 'verb' => 'PUT'],
|
||||
['name' => 'card#archive', 'url' => '/cards/{cardId}/archive', 'verb' => 'PUT'],
|
||||
['name' => 'card#unarchive', 'url' => '/cards/{cardId}/unarchive', 'verb' => 'PUT'],
|
||||
['name' => 'card#done', 'url' => '/cards/{cardId}/done', 'verb' => 'PUT'],
|
||||
['name' => 'card#undone', 'url' => '/cards/{cardId}/undone', 'verb' => 'PUT'],
|
||||
['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'],
|
||||
|
||||
// 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'],
|
||||
@@ -90,77 +82,54 @@ 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' => '.+']],
|
||||
['name' => 'board_api#preflighted_cors', 'url' => '/api/v1.0/{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' => 'comments_api#list', 'url' => '/api/v1.0/cards/{cardId}/comments', 'verb' => 'GET'],
|
||||
['name' => 'comments_api#create', 'url' => '/api/v1.0/cards/{cardId}/comments', 'verb' => 'POST'],
|
||||
['name' => 'comments_api#update', 'url' => '/api/v1.0/cards/{cardId}/comments/{commentId}', 'verb' => 'PUT'],
|
||||
['name' => 'comments_api#delete', 'url' => '/api/v1.0/cards/{cardId}/comments/{commentId}', 'verb' => 'DELETE'],
|
||||
]
|
||||
];
|
||||
|
||||
@@ -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
|
||||
}
|
||||
]
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,50 +1,30 @@
|
||||
{
|
||||
"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",
|
||||
"nextcloud/ocp": "dev-stable29",
|
||||
"psalm/phar": "^5.13"
|
||||
},
|
||||
"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",
|
||||
"nextcloud/coding-standard": "^0.3.0"
|
||||
},
|
||||
"config": {
|
||||
"optimize-autoloader": true,
|
||||
"classmap-authoritative": true
|
||||
},
|
||||
"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"
|
||||
}
|
||||
}
|
||||
|
||||
2916
composer.lock
generated
@@ -1,3 +1,7 @@
|
||||
.icon-deck {
|
||||
background-image: url('../img/deck-dark.svg');
|
||||
}
|
||||
|
||||
.resource-type-deck img {
|
||||
opacity: 0.4 !important;
|
||||
}
|
||||
|
||||
19
css/deck.css
@@ -1,19 +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);
|
||||
}
|
||||
|
||||
input[type=submit].icon-confirm {
|
||||
border-color: var(--color-border-maxcontrast) !important;
|
||||
border-left: none;
|
||||
}
|
||||
|
||||
input[type=text]:focus+input[type=submit].icon-confirm,
|
||||
input[type=text]:hover+input[type=submit].icon-confirm {
|
||||
border-color: var(--color-main-text) !important;
|
||||
}
|
||||
@@ -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';
|
||||
91
css/icons.scss
Normal file
@@ -0,0 +1,91 @@
|
||||
/**
|
||||
* 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('filter', 'deck', 1);
|
||||
@include icon-black-white('filter_set', 'deck', 1);
|
||||
@include icon-black-white('attach', 'deck', 1);
|
||||
@include icon-black-white('reply', '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');
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -80,11 +75,6 @@
|
||||
margin: 2cm;
|
||||
}
|
||||
|
||||
.board {
|
||||
max-height: none !important;
|
||||
overflow: visible !important;
|
||||
}
|
||||
|
||||
div#innerBoard {
|
||||
display:flex;
|
||||
flex-wrap: wrap;
|
||||
|
||||
@@ -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}',
|
||||
},
|
||||
})
|
||||
@@ -1,5 +0,0 @@
|
||||
module.exports = {
|
||||
extends: [
|
||||
'plugin:cypress/recommended',
|
||||
],
|
||||
}
|
||||
@@ -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')
|
||||
})
|
||||
})
|
||||
@@ -1,298 +0,0 @@
|
||||
import { randUser } from '../utils/index.js'
|
||||
import { sampleBoard } from '../utils/sampleBoard'
|
||||
import moment from '@nextcloud/moment'
|
||||
|
||||
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('.vs__dropdown-menu [data-cy="board-select-title"]: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('.vs__dropdown-menu span[title="TestList"]').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__mainname').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('#tab-button-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"]', { timeout: 30000 }).should('be.visible')
|
||||
.click()
|
||||
cy.get('.dialog__actions button.button-vue--vue-primary').click()
|
||||
cy.get('.attachment-list .basename').contains('welcome.txt')
|
||||
})
|
||||
|
||||
it.only('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__mainname').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')
|
||||
})
|
||||
|
||||
it('Set a due date', function() {
|
||||
const newCardTitle = 'Card with a due date'
|
||||
|
||||
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')
|
||||
|
||||
cy.get('.card:contains("Card with a due date")').should('be.visible').click()
|
||||
|
||||
cy.get('#app-sidebar-vue [data-cy-due-date-actions]').should('be.visible').click()
|
||||
|
||||
// Set a due date through shortcut
|
||||
cy.get('[data-cy-due-date-shortcut="tomorrow"] button').should('be.visible').click()
|
||||
|
||||
const tomorrow = moment().add(1, 'days').hour(8).minutes(0).seconds(0)
|
||||
cy.get('#card-duedate-picker').should('have.value', tomorrow.format('YYYY-MM-DDTHH:mm'))
|
||||
|
||||
const now = moment().hour(11).minutes(0).seconds(0).toDate()
|
||||
cy.clock(now)
|
||||
cy.log(now)
|
||||
cy.tick(60_000)
|
||||
|
||||
cy.get(`.card:contains("${newCardTitle}")`).find('[data-due-state="Now"]').should('be.visible').should('contain', '21 hours')
|
||||
|
||||
|
||||
// Remove the due date again
|
||||
cy.get('#app-sidebar-vue [data-cy-due-date-actions]').should('be.visible').click()
|
||||
// tick needed to show the popover menu
|
||||
cy.tick(1_000)
|
||||
cy.get('[data-cy-due-date-remove] button').should('be.visible').click()
|
||||
|
||||
cy.get(`.card:contains("${newCardTitle}")`).find('[data-due-state]').should('not.exist')
|
||||
})
|
||||
|
||||
it('Add a label', function() {
|
||||
const newCardTitle = 'Card with labels'
|
||||
|
||||
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').click()
|
||||
|
||||
cy.get('#app-sidebar-vue [data-test="tag-selector"]').should('be.visible').click()
|
||||
cy.get('.vs__dropdown-menu .tag:contains("Action needed")').should('be.visible').click()
|
||||
cy.get('.vs__selected .tag:contains("Action needed")').should('be.visible')
|
||||
cy.get('.vs__dropdown-menu .tag:contains("Later")').should('be.visible').click()
|
||||
|
||||
cy.get('.vs__selected .tag:contains("Action needed")').should('be.visible')
|
||||
cy.get('.vs__selected .tag:contains("Action needed")')
|
||||
.parent().find('button').click()
|
||||
|
||||
cy.get(`.card:contains("${newCardTitle}")`).find('.labels li:contains("Later")')
|
||||
.should('be.visible')
|
||||
cy.get(`.card:contains("${newCardTitle}")`).find('.labels li:contains("Action needed")')
|
||||
.should('not.exist')
|
||||
})
|
||||
|
||||
})
|
||||
|
||||
describe('Card actions', () => {
|
||||
beforeEach(function() {
|
||||
cy.login(user)
|
||||
useModal(false).then(() => {
|
||||
cy.visit(`/apps/deck/#/board/${boardId}`)
|
||||
})
|
||||
})
|
||||
|
||||
it('Custom card actions', () => {
|
||||
const myAction = {
|
||||
label: 'Test action',
|
||||
icon: 'icon-user',
|
||||
callback(card) {
|
||||
console.log('Called callback', card)
|
||||
},
|
||||
}
|
||||
cy.spy(myAction, 'callback').as('myAction.callback')
|
||||
|
||||
cy.window().then(win => {
|
||||
win.OCA.Deck.registerCardAction(myAction)
|
||||
})
|
||||
|
||||
cy.get('.card:contains("Hello world")').should('be.visible').click()
|
||||
cy.get('#app-sidebar-vue')
|
||||
.find('.ProseMirror h1').contains('Hello world').should('be.visible')
|
||||
|
||||
cy.get('.app-sidebar-header .action-item__menutoggle').click()
|
||||
cy.get('.v-popper__popper button:contains("Test action")').click()
|
||||
|
||||
cy.get('@myAction.callback')
|
||||
.should('be.called')
|
||||
.its('firstCall.args.0')
|
||||
.as('args')
|
||||
|
||||
cy.url().then(url => {
|
||||
const cardId = url.split('/').pop()
|
||||
cy.get('@args').should('have.property', 'name', 'Hello world')
|
||||
cy.get('@args').should('have.property', 'stackname', 'TestList')
|
||||
cy.get('@args').should('have.property', 'boardname', 'MyTestBoard')
|
||||
cy.get('@args').its('link').then((url) => {
|
||||
expect(url.split('/').pop() === cardId).to.be.true
|
||||
cy.visit(url)
|
||||
cy.get('#app-sidebar-vue')
|
||||
.find('.ProseMirror h1').contains('Hello world').should('be.visible')
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
@@ -1,57 +0,0 @@
|
||||
import { randUser } from '../utils/index.js'
|
||||
import { sampleBoard } from '../utils/sampleBoard'
|
||||
const user = randUser()
|
||||
|
||||
describe('Deck dashboard', function() {
|
||||
before(function() {
|
||||
cy.createUser(user)
|
||||
})
|
||||
|
||||
beforeEach(function() {
|
||||
cy.login(user)
|
||||
})
|
||||
|
||||
it('Can show the right title on the dashboard', function() {
|
||||
cy.visit('/apps/deck')
|
||||
cy.get('.board-title h2')
|
||||
.should('have.length', 1).first()
|
||||
.should($el => expect($el.text().trim()).to.equal('Upcoming cards'))
|
||||
})
|
||||
|
||||
it('Can see the default "Personal Board" created for user by default', function() {
|
||||
cy.visit('/apps/deck')
|
||||
|
||||
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')
|
||||
})
|
||||
|
||||
it('Shows a card with due date on the overview', function() {
|
||||
cy.createExampleBoard({
|
||||
user,
|
||||
board: sampleBoard(),
|
||||
}).then((board) => {
|
||||
cy.visit(`/apps/deck/#/board/${board.id}`)
|
||||
|
||||
cy.intercept({ method: 'PUT', url: '**/apps/deck/cards/**' }).as('updateCard')
|
||||
|
||||
const newCardTitle = 'Hello world'
|
||||
cy.get(`.card:contains("${newCardTitle}")`).should('be.visible').click()
|
||||
cy.get('#app-sidebar-vue [data-cy-due-date-actions]').should('be.visible').click()
|
||||
cy.get('[data-cy-due-date-shortcut="tomorrow"] button').should('be.visible').click()
|
||||
|
||||
cy.wait('@updateCard')
|
||||
|
||||
cy.get('button[title="Close sidebar"]').click()
|
||||
cy.get('.app-navigation-entry:contains("Upcoming cards") a').click()
|
||||
|
||||
cy.get(`.card:contains("${newCardTitle}")`).should('be.visible')
|
||||
cy.get('.dashboard-column:contains("Tomorrow")').should('be.visible')
|
||||
cy.get('.dashboard-column:contains("Tomorrow") .card:contains("Hello world")').should('be.visible')
|
||||
})
|
||||
})
|
||||
})
|
||||
@@ -1,74 +0,0 @@
|
||||
import { randUser } from '../utils/index.js'
|
||||
import { sampleBoard } from '../utils/sampleBoard'
|
||||
const user = randUser()
|
||||
const recipient = randUser()
|
||||
const domain = Math.random().toString(36).replace(/[^a-z]+/g, '').slice(0, 10)
|
||||
|
||||
describe('Board', function() {
|
||||
before(function() {
|
||||
cy.createUser(user)
|
||||
cy.createUser(recipient)
|
||||
cy.login(recipient)
|
||||
cy.setUserEmail(recipient, `${recipient.userId}@${domain}.com`)
|
||||
})
|
||||
|
||||
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 by email', function() {
|
||||
const board = sampleBoard('Shared by email')
|
||||
cy.createExampleBoard({ user, board }).then((board) => {
|
||||
const boardId = board.id
|
||||
cy.visit(`/apps/deck/#/board/${boardId}`)
|
||||
cy.get('.board-title').contains(board.title)
|
||||
|
||||
// domain is only in the email address - not in user ids.
|
||||
cy.shareBoardWithUi(domain, 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.intercept({ method: 'PUT', url: '**/apps/deck/boards/*/acl/*' }).as('setAcl')
|
||||
cy.get(`[data-cy="acl-participant:${recipient.userId}"]`).find('[data-cy="action:permission-edit"]').click()
|
||||
cy.wait('@setAcl')
|
||||
|
||||
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()
|
||||
})
|
||||
})
|
||||
})
|
||||
@@ -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')
|
||||
})
|
||||
})
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
@@ -1,137 +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'
|
||||
import axios from '@nextcloud/axios'
|
||||
|
||||
addCommands()
|
||||
|
||||
const url = Cypress.config('baseUrl').replace(/\/index.php\/?$/g, '')
|
||||
Cypress.env('baseUrl', url)
|
||||
|
||||
// prepare main cypress window so we can use axios there
|
||||
// and it will successfully fetch csrf tokens when needed.
|
||||
window.OC = {
|
||||
config: { modRewriteWorking: false },
|
||||
}
|
||||
// Prevent @nextcloud/router from reading window.location
|
||||
window._oc_webroot = 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', (query, userId=query) => {
|
||||
cy.intercept({ method: 'GET', url: `**/ocs/v2.php/apps/files_sharing/api/v1/sharees?search=${query}*` }).as('fetchRecipients')
|
||||
cy.get('[aria-label="Open details"]').click()
|
||||
cy.get('.app-sidebar').should('be.visible')
|
||||
cy.get('.select input').type(`${query}`)
|
||||
cy.wait('@fetchRecipients', { timeout: 7000 })
|
||||
|
||||
cy.get('.vs__dropdown-menu .option').first().contains(query)
|
||||
cy.get('.select input').type('{enter}')
|
||||
|
||||
cy.get('.shareWithList').contains(userId)
|
||||
})
|
||||
|
||||
Cypress.Commands.add('setUserEmail', (user, value) => {
|
||||
Cypress.log()
|
||||
return axios.put(
|
||||
`${url}/ocs/v2.php/cloud/users/${user.userId}`,
|
||||
{ key: 'email', value },
|
||||
)
|
||||
})
|
||||
@@ -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>
|
||||
@@ -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)
|
||||
@@ -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') && !err.message.includes('ResizeObserver loop completed with undelivered notifications')
|
||||
})
|
||||
|
||||
// Alternatively you can use CommonJS syntax:
|
||||
// require('./commands')
|
||||
@@ -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())
|
||||
@@ -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',
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
}
|
||||
}
|
||||
@@ -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.
|
||||
|
||||
393
docs/API.md
@@ -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,12 @@ 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**.
|
||||
## 1.0.0 (unreleased)
|
||||
|
||||
- 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)
|
||||
- The `done` property was added to cards
|
||||
|
||||
# Endpoints
|
||||
|
||||
@@ -133,7 +83,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
|
||||
|
||||
@@ -163,12 +113,7 @@ Returns an array of board items
|
||||
"users": [],
|
||||
"shared": 0,
|
||||
"deletedAt": 0,
|
||||
"id": 10,
|
||||
"lastModified": 1586269585,
|
||||
"settings": {
|
||||
"notify-due": "off",
|
||||
"calendar": true
|
||||
}
|
||||
"id": 10
|
||||
}
|
||||
]
|
||||
```
|
||||
@@ -242,15 +187,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
|
||||
@@ -330,7 +270,7 @@ A 403 response might be returned if the users ability to create new boards has b
|
||||
| --------- | ------ | ---------------------------------------------------- |
|
||||
| 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. |
|
||||
| archived | Bool | The hexadecimal color of the board (e.g. FF0000) |
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -588,7 +528,7 @@ The board list endpoint supports setting an `If-Modified-Since` header to limit
|
||||
#### Response
|
||||
|
||||
```json
|
||||
{
|
||||
{
|
||||
"title":"Test",
|
||||
"description":null,
|
||||
"stackId":6,
|
||||
@@ -602,8 +542,7 @@ The board list endpoint supports setting an `If-Modified-Since` header to limit
|
||||
"owner":"admin",
|
||||
"order":999,
|
||||
"archived":false,
|
||||
"done":null,
|
||||
"duedate": "2019-12-24T19:29:30+00:00",
|
||||
"duedate":null,
|
||||
"deletedAt":0,
|
||||
"commentsUnread":0,
|
||||
"id":10,
|
||||
@@ -625,28 +564,22 @@ The board list endpoint supports setting an `If-Modified-Since` header to limit
|
||||
|
||||
#### Request data
|
||||
|
||||
| Parameter | Type | Description |
|
||||
|-------------|-----------------|-----------------------------------------------------------------------------------------------------|
|
||||
| title | String | The title of the card, maximum length is limited to 255 characters |
|
||||
| description | String | The markdown description of the card |
|
||||
| type | String | Type of the card (for later use) use 'plain' for now |
|
||||
| owner | String | The user that owns the card |
|
||||
| order | Integer | Order for sorting the stacks |
|
||||
| duedate | timestamp | The ISO-8601 formatted duedate of the card or null |
|
||||
| archived | bool | Whether the card is archived or not |
|
||||
| done | timestamp\|null | The ISO-8601 formatted date when the card is marked as done (optional, null indicates undone state) |
|
||||
| Parameter | Type | Description |
|
||||
|-------------|-----------|------------------------------------------------------|
|
||||
| title | String | The title of the card, maximum length is limited to 255 characters |
|
||||
| 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 duedate of the card or null |
|
||||
|
||||
|
||||
```
|
||||
{
|
||||
{
|
||||
"title": "Test card",
|
||||
"description": "A card description",
|
||||
"type": "plain",
|
||||
"owner": "admin",
|
||||
"order": 999,
|
||||
"duedate": "2019-12-24T19:29:30+00:00",
|
||||
"archived": false,
|
||||
"done": null,
|
||||
"duedate": null,
|
||||
}
|
||||
```
|
||||
|
||||
@@ -754,7 +687,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
|
||||
|
||||
@@ -768,7 +701,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
|
||||
|
||||
@@ -952,8 +885,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
|
||||
|
||||
@@ -985,7 +917,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 |
|
||||
@@ -1014,131 +945,11 @@ 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/`.
|
||||
The following endpoints are available tough 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
|
||||
@@ -1174,8 +985,8 @@ A list of comments will be provided under the `ocs.data` key. If no or no more c
|
||||
},
|
||||
"data": [
|
||||
{
|
||||
"id": 175,
|
||||
"objectId": 12,
|
||||
"id": "175",
|
||||
"objectId": "12",
|
||||
"message": "This is a comment with a mention to @alice",
|
||||
"actorId": "admin",
|
||||
"actorType": "users",
|
||||
@@ -1194,45 +1005,6 @@ A list of comments will be provided under the `ocs.data` key. If no or no more c
|
||||
}
|
||||
```
|
||||
|
||||
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
|
||||
|
||||
@@ -1242,7 +1014,7 @@ In case a comment is marked as a reply to another comment object, the parent com
|
||||
| --------- | ------- | --------------------------------------- |
|
||||
| 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 |
|
||||
| parentId | Integer | 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.
|
||||
|
||||
@@ -1298,7 +1070,7 @@ A not found response might be returned if:
|
||||
- The parent comment could not be found
|
||||
|
||||
|
||||
### PUT /cards/{cardId}/comments/{commentId} - Update a comment
|
||||
### PUT /cards/{cardId}/comments/{commentId} - Update a new comment
|
||||
|
||||
#### Request parameters
|
||||
|
||||
@@ -1402,110 +1174,3 @@ A bad request response is returned if invalid input values are provided. The res
|
||||
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": []
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
@@ -12,12 +12,8 @@ Overall, Deck is easy to use. You can create boards, add users, share the Deck,
|
||||
1. [Create my first board](#1-create-my-first-board)
|
||||
2. [Create stacks and cards](#2-create-stacks-and-cards)
|
||||
3. [Handle cards options](#3-handle-cards-options)
|
||||
4. [Mark task as done](#4-mark-as-done)
|
||||
5. [Archive old tasks](#5-archive-old-tasks)
|
||||
6. [Manage your board](#6-manage-your-board)
|
||||
7. [Import boards](#7-import-boards)
|
||||
8. [Search](#8-search)
|
||||
9. [New owner for the deck entities](#9-new-owner-for-the-deck-entities)
|
||||
4. [Archive old tasks](#4-archive-old-tasks)
|
||||
5. [Manage your board](#5-manage-your-board)
|
||||
|
||||
### 1. Create my first board
|
||||
In this example, we're going to create a board and share it with an other nextcloud user.
|
||||
@@ -26,7 +22,7 @@ In this example, we're going to create a board and share it with an other nextcl
|
||||
|
||||
|
||||
### 2. Create stacks and cards
|
||||
Stacks are simply columns with list of cards. It can represent a category of tasks or any step in your projects for example.
|
||||
Stacks are simply columns with list of cards. It can represent a category of tasks or an y step in your projects for example.
|
||||
**Check this out :**
|
||||
|
||||

|
||||
@@ -40,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
|
||||
@@ -54,21 +49,14 @@ And even :
|
||||
|
||||

|
||||
|
||||
### 4. Mark as done
|
||||
Once a task has been completed, you can mark it as done. This will prevent it from becoming overdue and hide it from the upcoming cards.
|
||||
You can mark it as not done at any time.
|
||||
### 4. Archive old tasks
|
||||
Once finished or obsolete, a task could be archived. The tasks is not deleted, it's just archived, and you can retrieve it later
|
||||
|
||||

|
||||

|
||||
|
||||
### 5. Archive old tasks
|
||||
Once obsolete, a task could be archived. The task is not deleted, it's just archived, and you can retrieve it later
|
||||
|
||||

|
||||
|
||||
### 6. Manage your board
|
||||
### 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
|
||||
@@ -79,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!
|
||||
|
||||
### 7. 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"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 8. 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"`.
|
||||
|
||||
### 9. 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
|
||||
```
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
```
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||

|
||||
@@ -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->A2 -->
|
||||
<g id="edge1" class="edge">
|
||||
<title>A1->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->A3 -->
|
||||
<g id="edge2" class="edge">
|
||||
<title>A2->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->A7 -->
|
||||
<g id="edge6" class="edge">
|
||||
<title>A3->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->A9 -->
|
||||
<g id="edge9" class="edge">
|
||||
<title>A3->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->A10 -->
|
||||
<g id="edge11" class="edge">
|
||||
<title>A3->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->A5 -->
|
||||
<g id="edge3" class="edge">
|
||||
<title>A4->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->A6 -->
|
||||
<g id="edge4" class="edge">
|
||||
<title>A5->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->A3 -->
|
||||
<g id="edge5" class="edge">
|
||||
<title>A6->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->A3 -->
|
||||
<g id="edge7" class="edge">
|
||||
<title>A7->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"><<abstract>></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->A8 -->
|
||||
<g id="edge8" class="edge">
|
||||
<title>A7->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->A3 -->
|
||||
<g id="edge10" class="edge">
|
||||
<title>A9->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->A8 -->
|
||||
<g id="edge13" class="edge">
|
||||
<title>A9->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->A11 -->
|
||||
<g id="edge12" class="edge">
|
||||
<title>A9->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 |
@@ -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]
|
||||
|
Before Width: | Height: | Size: 88 KiB |
@@ -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 |
@@ -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
@@ -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 |
@@ -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 |
@@ -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 |
@@ -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
@@ -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 |
@@ -1,8 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16" version="1.1" viewBox="0 0 16 16">
|
||||
<g fill="currentColor">
|
||||
<rect ry="1" height="8" width="14" y="7" x="1"/>
|
||||
<rect ry=".5" height="1" width="12" y="5" x="2"/>
|
||||
<rect ry=".5" height="1" width="10" y="3" x="3"/>
|
||||
<rect ry=".5" height="1" width="8" y="1" x="4"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 372 B |
@@ -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 |
@@ -1 +1 @@
|
||||
<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>
|
||||
<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-rule="evenodd"/></svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 272 B After Width: | Height: | Size: 280 B |
@@ -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 |
1
img/reply.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" height="16" width="16"><path d="M15 15s-.4-7.8-7-10V1L1 8l7 7v-4c5.1 0 7 4 7 4z"/></svg>
|
||||
|
After Width: | Height: | Size: 128 B |
35
l10n/af.js
@@ -1,6 +1,9 @@
|
||||
OC.L10N.register(
|
||||
"deck",
|
||||
{
|
||||
"Personal" : "Persoonlik",
|
||||
"copy" : "kopie",
|
||||
"Done" : "Gereed",
|
||||
"The file was uploaded" : "Die lÃĒer is opgelaai",
|
||||
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Die opgelaaide lÃĒer oorskry die upload_max_filesize riglyn in php.ini",
|
||||
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Die opgelaaide lÃĒer oorskry die MAX_FILE_SIZE riglyn wat in die HTML vorm gespesifiseer is",
|
||||
@@ -8,47 +11,25 @@ OC.L10N.register(
|
||||
"No file was uploaded" : "Geen lÃĒer is opgelaai",
|
||||
"Missing a temporary folder" : "Ontbrekende tydelike gids",
|
||||
"A PHP extension stopped the file upload" : "ân PHP-uitbreiding het die oplaai gestaak",
|
||||
"Later" : "Later",
|
||||
"copy" : "kopie",
|
||||
"To Do" : "Moet doen",
|
||||
"Done" : "Gereed",
|
||||
"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",
|
||||
"Due date" : "Sperdatum",
|
||||
"Description" : "Beskrywing",
|
||||
"Comments" : "Kommentare",
|
||||
"Modified" : "Gewysig",
|
||||
"Created" : "Geskep",
|
||||
"Comments" : "Kommentare",
|
||||
"Save" : "Stoor",
|
||||
"Created:" : "Geskep:",
|
||||
"Reply" : "Antwoord",
|
||||
"Update" : "Werk by",
|
||||
"Description" : "Beskrywing",
|
||||
"Select Date" : "Kies Datum",
|
||||
"seconds ago" : "sekondes gelede",
|
||||
"Keyboard shortcuts" : "Sneltoetse",
|
||||
"Keyboard shortcut" : "Snelsleutel",
|
||||
"Search" : "Soek",
|
||||
"Shared with you" : "Met u gedeel",
|
||||
"An error occurred" : "'n Fout het voorgekom",
|
||||
"No notifications" : "Geen kennisgewings",
|
||||
"Advanced options" : "Gevorderde opsies",
|
||||
"Export" : "Voer uit",
|
||||
"Today" : "Vandag",
|
||||
"Tomorrow" : "Môre",
|
||||
"Close" : "Sluit",
|
||||
"Due date" : "Sperdatum",
|
||||
"Settings" : "Instellings",
|
||||
"Share" : "Deel",
|
||||
"Personal" : "Persoonlik"
|
||||
"An error occurred" : "'n Fout het voorgekom"
|
||||
},
|
||||
"nplurals=2; plural=(n != 1);");
|
||||
|
||||
35
l10n/af.json
@@ -1,4 +1,7 @@
|
||||
{ "translations": {
|
||||
"Personal" : "Persoonlik",
|
||||
"copy" : "kopie",
|
||||
"Done" : "Gereed",
|
||||
"The file was uploaded" : "Die lÃĒer is opgelaai",
|
||||
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Die opgelaaide lÃĒer oorskry die upload_max_filesize riglyn in php.ini",
|
||||
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Die opgelaaide lÃĒer oorskry die MAX_FILE_SIZE riglyn wat in die HTML vorm gespesifiseer is",
|
||||
@@ -6,47 +9,25 @@
|
||||
"No file was uploaded" : "Geen lÃĒer is opgelaai",
|
||||
"Missing a temporary folder" : "Ontbrekende tydelike gids",
|
||||
"A PHP extension stopped the file upload" : "ân PHP-uitbreiding het die oplaai gestaak",
|
||||
"Later" : "Later",
|
||||
"copy" : "kopie",
|
||||
"To Do" : "Moet doen",
|
||||
"Done" : "Gereed",
|
||||
"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",
|
||||
"Due date" : "Sperdatum",
|
||||
"Description" : "Beskrywing",
|
||||
"Comments" : "Kommentare",
|
||||
"Modified" : "Gewysig",
|
||||
"Created" : "Geskep",
|
||||
"Comments" : "Kommentare",
|
||||
"Save" : "Stoor",
|
||||
"Created:" : "Geskep:",
|
||||
"Reply" : "Antwoord",
|
||||
"Update" : "Werk by",
|
||||
"Description" : "Beskrywing",
|
||||
"Select Date" : "Kies Datum",
|
||||
"seconds ago" : "sekondes gelede",
|
||||
"Keyboard shortcuts" : "Sneltoetse",
|
||||
"Keyboard shortcut" : "Snelsleutel",
|
||||
"Search" : "Soek",
|
||||
"Shared with you" : "Met u gedeel",
|
||||
"An error occurred" : "'n Fout het voorgekom",
|
||||
"No notifications" : "Geen kennisgewings",
|
||||
"Advanced options" : "Gevorderde opsies",
|
||||
"Export" : "Voer uit",
|
||||
"Today" : "Vandag",
|
||||
"Tomorrow" : "Môre",
|
||||
"Close" : "Sluit",
|
||||
"Due date" : "Sperdatum",
|
||||
"Settings" : "Instellings",
|
||||
"Share" : "Deel",
|
||||
"Personal" : "Persoonlik"
|
||||
"An error occurred" : "'n Fout het voorgekom"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
}
|
||||
402
l10n/ar.js
@@ -1,407 +1,37 @@
|
||||
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>ŲŲØØŠ ØŖŲ ŲØ§ØĻŲ
ØŠ ØŖŲ Ø¨ØˇØ§ŲØŠ </strong>.",
|
||||
"A <strong>comment</strong> was created on a card" : "<strong>ØĒØšŲŲŲ</strong> ØĒŲ
ØĨŲØ´Ø§Ø¤Ų ØšŲŲ Ø¨ØˇØ§ŲØŠ",
|
||||
"A <strong>card description</strong> has been changed" : "ØĒŲ
Ų ØĒØēŲŲØą <strong>ŲØĩŲ Ø¨ØˇØ§ŲØŠ</strong>.",
|
||||
"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" : "اŲŲ
ŲŲ ŲØ¯ ØąŲŲØš ØŦØ˛ØĄØ§ Ų
ŲŲ ŲŲØˇ",
|
||||
"Personal" : "Ø´ØŽØĩŲ",
|
||||
"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",
|
||||
"Cards due today" : "Ø§ŲØ¨ØˇØ§ŲاØĒ اŲŲ
ØŗØĒØŲØŠ اŲŲŲŲ
",
|
||||
"Cards due tomorrow" : "Ø§ŲØ¨ØˇØ§ŲاØĒ اŲŲ
ØŗØĒØŲØŠ ØēداŲ",
|
||||
"Upcoming cards" : "Ø§ŲØ¨ØˇØ§ŲاØĒ اŲŲØ§Ø¯Ų
ØŠ",
|
||||
"Load more" : "ØŲ
ŲŲ ØŖŲØĢØą",
|
||||
"Welcome to Nextcloud Deck!" : "ØŖŲŲØ§ بŲŲ
ŲŲ ØĒØˇØ¨ŲŲ \"اŲŲØ¯ØŗØ§ØĒ\" Deck Ų
Ų ŲŲØŗØĒ ŲŲØ§Ųد! ",
|
||||
"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" : "ŲŲØØŠ Ø§ŲØ¨ØˇØ§ŲاØĒ",
|
||||
"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" : "ØĨŲØ´Ø§ØĄ ŲØ¯ØŗØŠ ØŦØ¯ŲØ¯ØŠ ŲŲØ¨ØˇØ§ŲاØĒ",
|
||||
"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" : "ŲØŗØŽ",
|
||||
"Read more inside" : "ØĨŲØąØĨ اŲŲ
Ø˛ŲØ¯ Ø¨Ø§ŲØ¯Ø§ØŽŲ",
|
||||
"Custom lists - click to rename!" : "ŲŲØ§ØĻŲ
Ų
ØŽØĩØĩØŠ - ØŖŲŲŲØą ŲØĒØēŲŲØą Ø§ŲØĒØŗŲ
ŲØŠ!",
|
||||
"To Do" : "Ų
ŲŲŲØ§Ų
ŲŲ",
|
||||
"In Progress" : "ŲŲØ¯ Ø§ŲØĒØŦŲŲØ˛",
|
||||
"Done" : "ØŖŲŲØŦØ˛",
|
||||
"1. Open to learn more about boards and cards" : "1. ØĨŲØĒŲØ ŲØĒØšØąŲŲ Ø§ŲŲ
Ø˛ŲØ¯ ØšŲ Ø§ŲŲŲØØ§ØĒ ŲØ§ŲØ¨ØˇØ§ŲØ§ØĒ",
|
||||
"2. Drag cards left and right, up and down" : "2. ØŗØØ¨ Ø§ŲØ¨ØˇØ§ŲاØĒ ŲŲ
ŲŲØ§Ų ŲŲØŗØ§ØąØ§ŲØ ŲØŖØšŲŲ ŲØŖØŗŲŲ",
|
||||
"3. Apply rich formatting and link content" : "3. ØĒØˇØ¨ŲŲ Ø§ŲØĒŲØŗŲŲ Ų ØąØ¨Øˇ اŲŲ
ØØĒŲŲ",
|
||||
"4. Share, comment and collaborate!" : "4. Ų
Ø´Ø§ØąŲØ§ØĒØ Ų Ų
ŲØ§ØØ¸Ø§ØĒØ ŲØĒØšØ§ŲŲ!",
|
||||
"Create your first card!" : "ØŖŲØ´ŲØĻ Ø¨ØˇØ§ŲØĒŲ Ø§ŲØŖŲŲŲ!",
|
||||
"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- đ Ų ŲŲ
ŲŲŲ ØŖŲØļØ§Ų ŲØļØš ŲŲØ§ØĩŲ labels ØšŲŲ Ø§ŲØ¨ØˇØ§ŲØŠ ŲØĒØĩŲŲŲŲØ§ بشŲŲ ØŖŲØļŲ\n- đĨ Ø´Ø§ØąŲ Ø§ŲØ¨ØˇØ§ŲØŠ Ų
Øš Ų
Ų ØĒØąØēب Ų
Ų ØŖØšØļØ§ØĄ ŲØąŲŲŲ ØŖŲ ØšØ§ØĻŲØĒŲ ØŖŲ ØŖØĩØ¯ŲØ§ØĻŲ\n- đ ØĨØąŲØ§Ų Ų
ŲŲØ§ØĒ Ų ØĒØļŲ
ŲŲŲØ§ بØĩŲØēØŠ Ų
Ø§ØąŲØ¯Ø§ŲŲ ŲŲ Ø§ŲØ¨ØˇØ§ŲØŠ\n- đŦŲØ§ŲØ´ Ø§ŲØ¨ØˇØ§ŲØŠ Ų
Øš Ø˛Ų
ŲØ§ØĻŲ ŲŲ ØŽØ§ŲØŠ Ø§ŲŲ
ŲØ§ØØ¸Ø§ØĒ\n- ⥠ØĒابؚ Ų
ا ŲŲØŗØĒØŦد Ų
Ų ØšŲ
ŲŲØ§ØĒ Ų ØĒØˇŲبਧØĒ ØšŲŲ Ø§ŲØ¨ØˇØ§ŲØŠ ØŖŲ Ø§ŲŲ
ŲŲ
ØŠ\n- đ ØØ§Ųظ ØšŲŲ Ų
Ø´ØąŲØšŲ Ų
ŲŲØŗŲŲØ§Ų Ø¨Ø§ØŗØĒŲ
ØąØ§Øą.",
|
||||
"Add board" : "ØĨØļØ§ŲØŠ ŲŲØ",
|
||||
"Card details" : "ØĒŲØ§ØĩŲŲ Ø§ŲØ¨ØˇØ§ŲØŠ",
|
||||
"Select the board to link to a project" : "ØĒØØ¯Ųد اŲŲŲØ ŲØąØ¨ØˇŲ Ø¨Ų
Ø´ØąŲØš",
|
||||
"Search by board title" : "Ø¨ØØĢ Ø¨ŲØ§ØŗØˇØŠ ØšŲŲØ§Ų اŲŲŲØ",
|
||||
"Select board" : "ØØ¯Ø¯ ŲŲØ",
|
||||
"Move/copy card" : "ŲØŗØŽ ØŖŲ ŲŲŲ Ø¨ØˇØ§ŲØŠ",
|
||||
"Select a board" : "ØØ¯Ø¯ ŲŲØ",
|
||||
"No lists available" : "ŲØ§ ŲŲØŦد ŲØ§ØĻŲ
ØŠ Ų
ØĒاØŲ ",
|
||||
"Select a list" : "ا؎ØĒØą ŲØ§ØĻŲ
ØŠ ",
|
||||
"Move card" : "ØØąŲ Ø§ŲØ¨ØˇØ§ŲØŠ",
|
||||
"Copy card" : "ŲØŗØŽ Ø¨ØˇØ§ŲØŠ",
|
||||
"Select the card to link to a project" : "ØØ¯Ø¯ Ø§ŲØ¨ØˇØ§ŲØŠ ŲØąØ¨ØˇŲØ§ بŲ
Ø´ØąŲØš",
|
||||
"Link to card" : "Ø§ØąØ¨Øˇ Ø¨ØˇØ§ŲØŠ",
|
||||
"Select a card" : "ØØ¯Ø¯ Ø¨ØˇØ§ŲØŠ",
|
||||
"Cancel" : "ØĨŲØēØ§ØĄ",
|
||||
"This board is read only" : "ŲØ°Ø§ اŲŲŲØ Ø¨ŲØļØš اŲŲØąØ§ØĄØŠ ŲŲØˇ",
|
||||
"Drop your files to upload" : "اŲŲØĒ Ø§ŲŲ
ŲŲØ§ØĒ ŲØąŲØšŲØ§",
|
||||
"File already exists" : "اŲŲ
ŲŲ Ų
ŲØŦŲØ¯ Ų
ØŗØ¨ŲØ§Ų",
|
||||
"A file with the name {filename} already exists." : "Ų
ŲŲ Ø¨Ø§ØŗŲ
{Ø§ØŗŲ
اŲŲ
ŲŲ} Ų
ŲØŦŲØ¯ Ų
ØŗØ¨ŲŲØ§ ",
|
||||
"Do you want to overwrite it?" : "ŲŲ ØĒØąŲØ¯ ØĒØŦØ§ŲØ˛ŲØ",
|
||||
"Overwrite file" : "ØĒØŦØ§ŲØ˛ Ų
ŲŲ",
|
||||
"Keep existing file" : "ابŲŲ Ø§ŲŲ
ŲŲ Ø§ŲŲ
ŲØŦŲØ¯",
|
||||
"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" : "Ø§ŲØ¨ØˇØ§ŲاØĒ اŲŲ
ØØ°ŲŲØŠ",
|
||||
"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}",
|
||||
"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" : "ØØ°Ų ",
|
||||
"List deleted" : "اŲŲØ§ØĻŲ
ØŠ ØŲØ°ŲØĒ ",
|
||||
"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" : "Ø§ØŗŲ
Ø§ŲØ¨ØˇØ§ŲØŠ ",
|
||||
"title and color value must be provided" : "Ø§ŲØšŲŲØ§Ų Ų ŲŲŲ
ØŠ اŲŲŲŲ ŲØŦب ØĒŲØ¯ŲŲ
ŲØ§ ",
|
||||
"Edit" : "ØĒؚدŲŲ",
|
||||
"Add a new tag" : "ØĨØļØ§ŲØŠ ŲØŗŲ
ØŦØ¯ŲØ¯",
|
||||
"Board name" : "Ø§ØŗŲ
اŲŲŲØ",
|
||||
"Members" : "Ø§ŲØ§ØšØļØ§ØĄ",
|
||||
"Assign to users/groups/team" : "ØĨØŗŲØ§Ø¯ ØĨŲŲ Ų
ØŗØĒ؎دŲ
ŲŲ/Ų
ØŦŲ
ب𨧨Ē/ŲØąŲ",
|
||||
"Assign a user to this cardâĻ" : "Ø§ŲØŗØ¨ Ų
ØŗØĒ؎دŲ
اŲŲ ŲØ°Ų Ø§ŲØ¨ØˇØ§ŲØŠ..",
|
||||
"Select a user to assign to this cardâĻ" : "ØØ¯ŲŲØ¯ Ų
ØŗØĒ؎دŲŲ
Ø§Ų ŲŲØĒŲ
ØĨØŗŲØ§Ø¯ ŲØ°Ų Ø§ŲØ¨ØˇØ§ŲØŠ ŲŲ...",
|
||||
"File to share" : "Ų
ŲŲ ŲŲŲ
Ø´Ø§ØąŲØŠ",
|
||||
"Invalid path selected" : "ØĒŲ
ØĒØØ¯Ųد Ų
ØŗØ§Øą ØēŲØą ØĩØŲØ",
|
||||
"Upload new files" : "ØąŲØš Ų
ŲŲØ§ØĒ ØŦØ¯ŲØ¯ØŠ",
|
||||
"Share from Files" : "Ų
Ø´Ø§ØąŲØŠ Ų
Ų Ø§ŲŲ
ŲŲØ§ØĒ",
|
||||
"Pending share" : "Ų
Ø´Ø§ØąŲØŠ Ų
ŲØšŲŲŲØŠ",
|
||||
"Add this attachment" : "ØĨØļØ§ŲØŠ ŲØ°Ø§ اŲŲ
ØąŲŲ",
|
||||
"Show in Files" : "ØšØąØļ ŲŲ Ø§ŲŲ
ŲŲØ§ØĒ ",
|
||||
"Download" : "ØĒŲØ˛ŲŲ",
|
||||
"Remove attachment" : "ØØ°Ų اŲŲ
ŲØąŲŲ",
|
||||
"Delete Attachment" : "Ų
ØŗØ Ø§ŲŲ
ØąŲŲ",
|
||||
"Restore Attachment" : "ØĨØŗØĒؚاد؊ اŲŲ
ØąŲŲ",
|
||||
"Modified" : "ØšŲØ¯Ų",
|
||||
"Created" : "ØŖŲŲØ´ØĻ",
|
||||
"The title cannot be empty." : "ŲØ§ ŲŲ
ŲŲ ØĒØąŲ Ø§ŲØšŲŲØ§Ų ŲØ§ØąØēŲØ§.",
|
||||
"Open in sidebar view" : "ŲØĒØ ŲŲ Ø§ŲØ´ØąŲØˇ Ø§ŲØŦØ§ŲØ¨Ų ",
|
||||
"Open in bigger view" : "ŲØĒØ ŲŲ ŲØ§Ųذ؊ ØŖŲØ¨Øą ",
|
||||
"Description" : "اŲŲØĩŲ",
|
||||
"Attachments" : "اŲŲ
ØąŲŲØ§ØĒ",
|
||||
"Comments" : "ØĒØšŲŲŲØ§ØĒ",
|
||||
"Failed to load comments" : "ŲØ´Ų ŲŲ ØĒØŲ
ŲŲ Ø§ŲØĒØšŲŲŲØ§ØĒ ",
|
||||
"No comments yet. Begin the discussion!" : "ŲØ§ ŲŲØŦد ØĒØšŲŲŲØ§ØĒ بؚد, Ø§Ø¨Ø¯ØŖ اŲŲŲØ§Ø´ Ø§ŲØĸŲ!",
|
||||
"The comment cannot be empty." : "Ø§ŲØĒØšŲŲŲ ŲØ§ŲŲ
ŲŲ Ø§Ų ŲŲŲŲ ŲØ§ØąØēا.",
|
||||
"The comment cannot be longer than 1000 characters." : "Ø§ŲØĒØšŲŲŲ ŲØ§ ŲŲ
ŲŲ Ø§Ų ŲŲŲŲ Ø§ØˇŲŲ Ų
Ų 1000 ØØąŲ.",
|
||||
"Modified" : "ØĸØŽØą ØĒؚدŲŲ",
|
||||
"Upload attachment" : "ØąŲØš Ø§ŲŲ
ØąŲŲØ§ØĒ",
|
||||
"Save" : "ØŲظ",
|
||||
"Created:" : "ØĒØ§ØąŲØŽ Ø§ŲØĨŲØ´Ø§ØĄ :",
|
||||
"In reply to" : "ŲŲŲŲ
Ø¨Ø§ŲØąØ¯ ØšŲŲ",
|
||||
"Cancel reply" : "ØĨŲØēØ§ØĄ Ø§ŲØąØ¯",
|
||||
"Reply" : "ØąØ¯",
|
||||
"Update" : "ØĒØØ¯ŲØĢ",
|
||||
"Write a description âĻ" : "ŲØĒØ§Ø¨ØŠ ŲØĩŲ...",
|
||||
"Description" : "اŲŲØĩŲ",
|
||||
"(Unsaved)" : "(ØēŲØą Ų
ØŲŲØ¸)",
|
||||
"(SavingâĻ)" : "(ŲŲØŲØ¸..)",
|
||||
"Formatting help" : "Ų
ØŗØ§ØšØ¯ØŠ Ø§ŲØĒŲØŗŲŲ",
|
||||
"Edit description" : "ØĒؚدŲŲ Ø§ŲŲØĩŲ",
|
||||
"View description" : "ØĨØ¸ŲØ§Øą اŲŲØĩŲ",
|
||||
"Add Attachment" : "ØŖØļŲ Ų
ŲØŲ",
|
||||
"Choose attachment" : "ا؎ØĒŲØ§Øą Ų
ØąŲŲ",
|
||||
"Select Date" : "ا؎ØĒØą Ø§ŲØĒØ§ØąŲØŽ ",
|
||||
"Later today â {timeLocale}" : "ŲŲ ŲŲØĒ ŲØ§ØŲŲ Ø§ŲŲŲŲ
â {timeLocale}",
|
||||
"Set due date for later today" : "ØĒØšŲŲŲ ØĸØŽŲØąŲ ŲØ°Ø§ اŲŲŲŲ
ŲŲ
ŲØšØ¯Ų ŲØ§ØŗØĒØŲØ§Ų Ø§ŲØ¨ØˇØ§ŲØŠ",
|
||||
"Tomorrow â {timeLocale}" : "ØēØ¯Ø§Ų â {timeLocale}",
|
||||
"Set due date for tomorrow" : "ØĒØšŲŲŲ ŲŲŲ
Ø§ŲØēØ¯ ŲŲ
ŲØšØ¯Ų ŲØ§ØŗØĒØŲØ§Ų Ø§ŲØ¨ØˇØ§ŲØŠ",
|
||||
"This weekend â {timeLocale}" : "ŲŲØ§ŲØŠ ŲØ°Ø§ Ø§ŲØŖØŗØ¨ŲØš â {timeLocale}",
|
||||
"Set due date for this weekend" : "ØĒØšŲŲŲ ŲŲØ§ŲØŠ ŲØ°Ø§ Ø§ŲØŖØŗØ¨ŲØš ŲŲ
ŲØšØ¯Ų ŲØ§ØŗØĒØŲØ§Ų Ø§ŲØ¨ØˇØ§ŲØŠ",
|
||||
"Next week â {timeLocale}" : "Ø§ŲØŖØŗØ¨ŲØš اŲŲØ§Ø¯Ų
â {timeLocale}",
|
||||
"Set due date for next week" : "ØĒØšŲŲŲ Ø§ŲØŖØŗØ¨ŲØš اŲŲ
ŲŲØ¨Ų ŲŲ
ŲØšØ¯Ų ŲØ§ØŗØĒØŲØ§Ų Ø§ŲØ¨ØˇØ§ŲØŠ",
|
||||
"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" : "ØŖØąØ´ŲØŠ Ø§ŲØ¨ØˇØ§ŲØŠ",
|
||||
"Assign a tag to this cardâĻ" : "Ø§ŲØŗØ¨ ŲØŗŲ
اŲŲ ŲØ°Ų Ø§ŲØ¨ØˇØ§ŲØŠ..",
|
||||
"Select or create a tagâĻ" : "ا؎ØĒŲØ§Øą ØŖŲ ØĨŲØ´Ø§ØĄ ŲØŗŲ
ØŦØ¯ŲØ¯...",
|
||||
"Create a new tag:" : "ØĨŲØ´Ø§ØĄ ŲØŗŲ
ØŦØ¯ŲØ¯:",
|
||||
"(group)" : "(Ų
ØŦŲ
ŲØšØŠ)",
|
||||
"{count} comments, {unread} unread" : "{ؚدد} Ø§ŲØĒØšŲŲŲØ§ØĒØ {ØēŲØą Ų
ŲØąŲØĄØŠ} ØēŲØą Ų
ŲØąŲØĄØŠ",
|
||||
"Todo items" : "ŲØ§ØĻŲ
ØŠ اŲŲ
ŲØ§Ų
",
|
||||
"Edit card title" : "ØĒؚدŲŲ Ø§ØŗŲ
اŲŲØ§ØĻŲ
ØŠ",
|
||||
"Open link" : "ØĨŲØĒŲØ Ø§ŲØąØ§Ø¨Øˇ",
|
||||
"Card deleted" : "Ø§ŲØ¨ØˇØ§ŲØŠ ØŲØ°ŲØĒ ",
|
||||
"Edit title" : "ØĒØØąŲØą ØšŲŲØ§Ų",
|
||||
"Assign to me" : "ŲŲØŗØ¨ ŲŲ",
|
||||
"Unassign myself" : "ØĨŲØēØ§ØĄ ØĒØšŲŲŲŲ ",
|
||||
"Mark as not done" : "ØĒŲ
ŲŲØ˛ ŲŲ \"ØēŲØą Ų
ŲØĒŲŲ\"",
|
||||
"Delete card" : "ØØ°Ų Ø§ŲØ¨ØˇØ§ŲØŠ",
|
||||
"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." : "اŲŲ
ØŗØĒ؎دŲŲ
ŲŲ Ų
Ų ØŽØ§ØąØŦ ØĒŲŲ Ø§ŲŲ
ØŦŲ
ŲØšØ§ØĒ ŲŲ ŲŲ
ŲŲŲŲ
ØĨŲØ´Ø§ØĄ ŲŲØØ§ØĒŲŲ
Ø§ŲØŽØ§ØĩØŠØ ŲŲŲ ŲŲ
ŲŲŲŲ
Ø§ŲØšŲ
Ų ØšŲŲ Ø§ŲŲŲØØ§ØĒ Ø§ŲØĒŲ ØĒØĒŲ
Ų Ų
Ø´Ø§ØąŲØĒŲØ§ Ų
ØšŲŲ
.",
|
||||
"Cancel edit" : "ØĨŲØēØ§ØĄ Ø§ŲØĒØšØ¯ŲŲ",
|
||||
"Save board" : "ØŲظ اŲŲŲØØŠ",
|
||||
"Board {0} deleted" : "اŲŲŲØ {0} ØĒŲ
Ų
ØŗØŲ",
|
||||
"All cards" : "ØŦŲ
ب𠨧ب¨ØˇØ§ŲاØĒ ",
|
||||
"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?" : "Ų
ØŗØ Ø§ŲŲŲØØ",
|
||||
"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" : "ØĒذŲبਧØĒ اŲŲ
ŲØšØ¯ Ø§ŲŲ
ØØ¯Ø¯ ",
|
||||
"Assigned cards" : "Ø§ŲØ¨ØˇØ§ŲاØĒ اŲŲ
ØŽØĩØĩØŠ",
|
||||
"No notifications" : "ŲØ§ ØĒŲØŦد ØĨØ´ØšØ§ØąØ§ØĒ",
|
||||
"Delete board" : "Ų
ØŗØ Ø§ŲŲŲØ",
|
||||
"Clone {boardTitle}" : "Ø§ØŗØĒŲØŗØ§ØŽ {boardTitle}",
|
||||
"Clone cards" : "Ø§ØŗØĒŲØŗØŽ Ø§ŲØ¨ØˇØ§ŲØŠ ",
|
||||
"Clone assignments" : "Ø§ØŗØĒŲØŗØ§ØŽ Ų
ŲØ§Ų
",
|
||||
"Clone labels" : "Ø§ØŗØĒŲØŗØ§ØŽ ØšŲØ§ŲŲŲ",
|
||||
"Clone due dates" : "Ø§ØŗØĒŲØŗØ§ØŽ ØĒŲØ§ØąŲØŽ Ø§ØŗØĒØŲاŲ",
|
||||
"Advanced options" : "Ø§ŲØŽŲØ§ØąØ§ØĒ اŲŲ
ØĒŲØ¯Ų
ØŠ",
|
||||
"Move all cards to the first list" : "ŲŲŲ ŲŲ Ø§ŲØ¨ØˇØ§ŲاØĒ ŲŲŲØ§ØĻŲ
ØŠ Ø§ŲØŖŲŲŲ",
|
||||
"Restore archived cards" : "Ø§ØŗØĒØąØŦاؚ Ø§ŲØ¨ØˇØ§ŲاØĒ اŲŲ
Ø¤ØąØ´ŲØŠ",
|
||||
"Clone" : "Ø§ØŗØĒŲØŗØŽ",
|
||||
"Export as CSV" : "ØĩدŲŲØą ŲŲ CSV",
|
||||
"Export" : "ØĒØĩØ¯ŲØą",
|
||||
"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}",
|
||||
"* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* ØŖŲŲØ´ØŖØĒ ŲŲ {created}\n* ØĸØŽØą ØĒؚدŲŲ ŲŲØ§ ŲŲ {lastMod}\n* {nbAttachments} Ų
ŲØąŲŲØ§ØĒ\n* {nbComments} Ų
ŲŲØ§ØØ¸Ø§ØĒ",
|
||||
"{nbCards} cards" : "{nbCards} Ø¨ØˇØ§ŲØ§ØĒ",
|
||||
"Due on {date}" : "Ų
ØˇŲŲØ¨ ŲŲ {date}",
|
||||
"{stack} in {board}" : "{stack} ŲŲ {board}",
|
||||
"Click to expand description" : "ØĨØļØšØˇ ŲŲØĒŲØŗŲØš ŲŲ Ø§ŲŲØĩŲ",
|
||||
"Click to expand comment" : "ØĨØļØēØˇ ŲŲØĒŲØŗØš ŲŲ Ø§ŲŲ
ŲØ§ØØ¸Ø§ØĒ",
|
||||
"Create card" : "ØŖŲØ´Ų Ø¨ØˇØ§ŲØŠ ",
|
||||
"Create a new card" : "ØŖŲØ´Ų Ø¨ØˇØ§ŲØŠ ØŦØ¯ŲØ¯ØŠ ",
|
||||
"Card title" : "ØšŲŲØ§Ų Ø§ŲØ¨ØˇØ§ŲØŠ ",
|
||||
"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" : "Ø¨ØˇØ§ŲØŠ ØŦØ¯ŲØ¯ØŠ",
|
||||
"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} Ø¨Ø§ŲØØŦŲ
اŲŲ
ØŗŲ
ŲØ ",
|
||||
"Due date" : "ØĒØ§ØąŲØŽ Ø§ŲØ§ŲØĒŲ
اŲ",
|
||||
"Error creating the share" : "ØŽØˇØŖ ŲŲ ØĨŲØ´Ø§ØĄ اŲŲ
Ø´Ø§ØąŲØŠ",
|
||||
"Share with a Deck card" : "Ų
Ø´Ø§ØąŲØŠ Ų
Øš Ø¨ØˇØ§ŲØŠ Deck",
|
||||
"Share {file} with a Deck card" : "Ų
Ø´Ø§ØąŲØŠ Ø§ŲŲ
ŲŲ {file} Ų
Øš Ø¨ØˇØ§ŲØŠ Deck",
|
||||
"Share" : "Ų
Ø´Ø§ØąŲØŠ ",
|
||||
"Personal" : "Ø´ØŽØĩŲ",
|
||||
"To do" : "ŲŲØšŲŲ",
|
||||
"Doing" : "ØĒØØĒ Ø§ŲØšŲ
Ų",
|
||||
"Example Task 3" : "Ų
ØĢØ§Ų Ø§ŲŲ
ŲŲ
ØŠ 3",
|
||||
"Example Task 2" : "Ų
ØĢØ§Ų Ø§ŲŲ
ŲŲ
ØŠ 2",
|
||||
"Example Task 1" : "Ų
ØĢØ§Ų Ø§ŲŲ
ŲŲ
ØŠ 1",
|
||||
"Move card to another board" : "ØØąŲ Ø§ŲØ¨ØˇØ§ŲØŠ اŲŲ ŲŲØ Ø§ØŽØą",
|
||||
"Filter by completed" : "ØĒØĩŲŲØŠ Ø¨ØØŗØ¨ Ø§ŲØĨŲØŦØ§Ø˛"
|
||||
"seconds ago" : "ØĢŲØ§Ų Ų
ØļØĒ",
|
||||
"Settings" : "Ø§ŲØĨؚداداØĒ",
|
||||
"Share" : "Ø´Ø§ØąŲ",
|
||||
"Options" : "Ø§ŲØŽŲØ§ØąØ§ØĒ",
|
||||
"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;");
|
||||
|
||||
402
l10n/ar.json
@@ -1,405 +1,35 @@
|
||||
{ "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>ŲŲØØŠ ØŖŲ ŲØ§ØĻŲ
ØŠ ØŖŲ Ø¨ØˇØ§ŲØŠ </strong>.",
|
||||
"A <strong>comment</strong> was created on a card" : "<strong>ØĒØšŲŲŲ</strong> ØĒŲ
ØĨŲØ´Ø§Ø¤Ų ØšŲŲ Ø¨ØˇØ§ŲØŠ",
|
||||
"A <strong>card description</strong> has been changed" : "ØĒŲ
Ų ØĒØēŲŲØą <strong>ŲØĩŲ Ø¨ØˇØ§ŲØŠ</strong>.",
|
||||
"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" : "اŲŲ
ŲŲ ŲØ¯ ØąŲŲØš ØŦØ˛ØĄØ§ Ų
ŲŲ ŲŲØˇ",
|
||||
"Personal" : "Ø´ØŽØĩŲ",
|
||||
"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",
|
||||
"Cards due today" : "Ø§ŲØ¨ØˇØ§ŲاØĒ اŲŲ
ØŗØĒØŲØŠ اŲŲŲŲ
",
|
||||
"Cards due tomorrow" : "Ø§ŲØ¨ØˇØ§ŲاØĒ اŲŲ
ØŗØĒØŲØŠ ØēداŲ",
|
||||
"Upcoming cards" : "Ø§ŲØ¨ØˇØ§ŲاØĒ اŲŲØ§Ø¯Ų
ØŠ",
|
||||
"Load more" : "ØŲ
ŲŲ ØŖŲØĢØą",
|
||||
"Welcome to Nextcloud Deck!" : "ØŖŲŲØ§ بŲŲ
ŲŲ ØĒØˇØ¨ŲŲ \"اŲŲØ¯ØŗØ§ØĒ\" Deck Ų
Ų ŲŲØŗØĒ ŲŲØ§Ųد! ",
|
||||
"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" : "ŲŲØØŠ Ø§ŲØ¨ØˇØ§ŲاØĒ",
|
||||
"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" : "ØĨŲØ´Ø§ØĄ ŲØ¯ØŗØŠ ØŦØ¯ŲØ¯ØŠ ŲŲØ¨ØˇØ§ŲاØĒ",
|
||||
"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" : "ŲØŗØŽ",
|
||||
"Read more inside" : "ØĨŲØąØĨ اŲŲ
Ø˛ŲØ¯ Ø¨Ø§ŲØ¯Ø§ØŽŲ",
|
||||
"Custom lists - click to rename!" : "ŲŲØ§ØĻŲ
Ų
ØŽØĩØĩØŠ - ØŖŲŲŲØą ŲØĒØēŲŲØą Ø§ŲØĒØŗŲ
ŲØŠ!",
|
||||
"To Do" : "Ų
ŲŲŲØ§Ų
ŲŲ",
|
||||
"In Progress" : "ŲŲØ¯ Ø§ŲØĒØŦŲŲØ˛",
|
||||
"Done" : "ØŖŲŲØŦØ˛",
|
||||
"1. Open to learn more about boards and cards" : "1. ØĨŲØĒŲØ ŲØĒØšØąŲŲ Ø§ŲŲ
Ø˛ŲØ¯ ØšŲ Ø§ŲŲŲØØ§ØĒ ŲØ§ŲØ¨ØˇØ§ŲØ§ØĒ",
|
||||
"2. Drag cards left and right, up and down" : "2. ØŗØØ¨ Ø§ŲØ¨ØˇØ§ŲاØĒ ŲŲ
ŲŲØ§Ų ŲŲØŗØ§ØąØ§ŲØ ŲØŖØšŲŲ ŲØŖØŗŲŲ",
|
||||
"3. Apply rich formatting and link content" : "3. ØĒØˇØ¨ŲŲ Ø§ŲØĒŲØŗŲŲ Ų ØąØ¨Øˇ اŲŲ
ØØĒŲŲ",
|
||||
"4. Share, comment and collaborate!" : "4. Ų
Ø´Ø§ØąŲØ§ØĒØ Ų Ų
ŲØ§ØØ¸Ø§ØĒØ ŲØĒØšØ§ŲŲ!",
|
||||
"Create your first card!" : "ØŖŲØ´ŲØĻ Ø¨ØˇØ§ŲØĒŲ Ø§ŲØŖŲŲŲ!",
|
||||
"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- đ Ų ŲŲ
ŲŲŲ ØŖŲØļØ§Ų ŲØļØš ŲŲØ§ØĩŲ labels ØšŲŲ Ø§ŲØ¨ØˇØ§ŲØŠ ŲØĒØĩŲŲŲŲØ§ بشŲŲ ØŖŲØļŲ\n- đĨ Ø´Ø§ØąŲ Ø§ŲØ¨ØˇØ§ŲØŠ Ų
Øš Ų
Ų ØĒØąØēب Ų
Ų ØŖØšØļØ§ØĄ ŲØąŲŲŲ ØŖŲ ØšØ§ØĻŲØĒŲ ØŖŲ ØŖØĩØ¯ŲØ§ØĻŲ\n- đ ØĨØąŲØ§Ų Ų
ŲŲØ§ØĒ Ų ØĒØļŲ
ŲŲŲØ§ بØĩŲØēØŠ Ų
Ø§ØąŲØ¯Ø§ŲŲ ŲŲ Ø§ŲØ¨ØˇØ§ŲØŠ\n- đŦŲØ§ŲØ´ Ø§ŲØ¨ØˇØ§ŲØŠ Ų
Øš Ø˛Ų
ŲØ§ØĻŲ ŲŲ ØŽØ§ŲØŠ Ø§ŲŲ
ŲØ§ØØ¸Ø§ØĒ\n- ⥠ØĒابؚ Ų
ا ŲŲØŗØĒØŦد Ų
Ų ØšŲ
ŲŲØ§ØĒ Ų ØĒØˇŲبਧØĒ ØšŲŲ Ø§ŲØ¨ØˇØ§ŲØŠ ØŖŲ Ø§ŲŲ
ŲŲ
ØŠ\n- đ ØØ§Ųظ ØšŲŲ Ų
Ø´ØąŲØšŲ Ų
ŲŲØŗŲŲØ§Ų Ø¨Ø§ØŗØĒŲ
ØąØ§Øą.",
|
||||
"Add board" : "ØĨØļØ§ŲØŠ ŲŲØ",
|
||||
"Card details" : "ØĒŲØ§ØĩŲŲ Ø§ŲØ¨ØˇØ§ŲØŠ",
|
||||
"Select the board to link to a project" : "ØĒØØ¯Ųد اŲŲŲØ ŲØąØ¨ØˇŲ Ø¨Ų
Ø´ØąŲØš",
|
||||
"Search by board title" : "Ø¨ØØĢ Ø¨ŲØ§ØŗØˇØŠ ØšŲŲØ§Ų اŲŲŲØ",
|
||||
"Select board" : "ØØ¯Ø¯ ŲŲØ",
|
||||
"Move/copy card" : "ŲØŗØŽ ØŖŲ ŲŲŲ Ø¨ØˇØ§ŲØŠ",
|
||||
"Select a board" : "ØØ¯Ø¯ ŲŲØ",
|
||||
"No lists available" : "ŲØ§ ŲŲØŦد ŲØ§ØĻŲ
ØŠ Ų
ØĒاØŲ ",
|
||||
"Select a list" : "ا؎ØĒØą ŲØ§ØĻŲ
ØŠ ",
|
||||
"Move card" : "ØØąŲ Ø§ŲØ¨ØˇØ§ŲØŠ",
|
||||
"Copy card" : "ŲØŗØŽ Ø¨ØˇØ§ŲØŠ",
|
||||
"Select the card to link to a project" : "ØØ¯Ø¯ Ø§ŲØ¨ØˇØ§ŲØŠ ŲØąØ¨ØˇŲØ§ بŲ
Ø´ØąŲØš",
|
||||
"Link to card" : "Ø§ØąØ¨Øˇ Ø¨ØˇØ§ŲØŠ",
|
||||
"Select a card" : "ØØ¯Ø¯ Ø¨ØˇØ§ŲØŠ",
|
||||
"Cancel" : "ØĨŲØēØ§ØĄ",
|
||||
"This board is read only" : "ŲØ°Ø§ اŲŲŲØ Ø¨ŲØļØš اŲŲØąØ§ØĄØŠ ŲŲØˇ",
|
||||
"Drop your files to upload" : "اŲŲØĒ Ø§ŲŲ
ŲŲØ§ØĒ ŲØąŲØšŲØ§",
|
||||
"File already exists" : "اŲŲ
ŲŲ Ų
ŲØŦŲØ¯ Ų
ØŗØ¨ŲØ§Ų",
|
||||
"A file with the name {filename} already exists." : "Ų
ŲŲ Ø¨Ø§ØŗŲ
{Ø§ØŗŲ
اŲŲ
ŲŲ} Ų
ŲØŦŲØ¯ Ų
ØŗØ¨ŲŲØ§ ",
|
||||
"Do you want to overwrite it?" : "ŲŲ ØĒØąŲØ¯ ØĒØŦØ§ŲØ˛ŲØ",
|
||||
"Overwrite file" : "ØĒØŦØ§ŲØ˛ Ų
ŲŲ",
|
||||
"Keep existing file" : "ابŲŲ Ø§ŲŲ
ŲŲ Ø§ŲŲ
ŲØŦŲØ¯",
|
||||
"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" : "Ø§ŲØ¨ØˇØ§ŲاØĒ اŲŲ
ØØ°ŲŲØŠ",
|
||||
"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}",
|
||||
"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" : "ØØ°Ų ",
|
||||
"List deleted" : "اŲŲØ§ØĻŲ
ØŠ ØŲØ°ŲØĒ ",
|
||||
"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" : "Ø§ØŗŲ
Ø§ŲØ¨ØˇØ§ŲØŠ ",
|
||||
"title and color value must be provided" : "Ø§ŲØšŲŲØ§Ų Ų ŲŲŲ
ØŠ اŲŲŲŲ ŲØŦب ØĒŲØ¯ŲŲ
ŲØ§ ",
|
||||
"Edit" : "ØĒؚدŲŲ",
|
||||
"Add a new tag" : "ØĨØļØ§ŲØŠ ŲØŗŲ
ØŦØ¯ŲØ¯",
|
||||
"Board name" : "Ø§ØŗŲ
اŲŲŲØ",
|
||||
"Members" : "Ø§ŲØ§ØšØļØ§ØĄ",
|
||||
"Assign to users/groups/team" : "ØĨØŗŲØ§Ø¯ ØĨŲŲ Ų
ØŗØĒ؎دŲ
ŲŲ/Ų
ØŦŲ
ب𨧨Ē/ŲØąŲ",
|
||||
"Assign a user to this cardâĻ" : "Ø§ŲØŗØ¨ Ų
ØŗØĒ؎دŲ
اŲŲ ŲØ°Ų Ø§ŲØ¨ØˇØ§ŲØŠ..",
|
||||
"Select a user to assign to this cardâĻ" : "ØØ¯ŲŲØ¯ Ų
ØŗØĒ؎دŲŲ
Ø§Ų ŲŲØĒŲ
ØĨØŗŲØ§Ø¯ ŲØ°Ų Ø§ŲØ¨ØˇØ§ŲØŠ ŲŲ...",
|
||||
"File to share" : "Ų
ŲŲ ŲŲŲ
Ø´Ø§ØąŲØŠ",
|
||||
"Invalid path selected" : "ØĒŲ
ØĒØØ¯Ųد Ų
ØŗØ§Øą ØēŲØą ØĩØŲØ",
|
||||
"Upload new files" : "ØąŲØš Ų
ŲŲØ§ØĒ ØŦØ¯ŲØ¯ØŠ",
|
||||
"Share from Files" : "Ų
Ø´Ø§ØąŲØŠ Ų
Ų Ø§ŲŲ
ŲŲØ§ØĒ",
|
||||
"Pending share" : "Ų
Ø´Ø§ØąŲØŠ Ų
ŲØšŲŲŲØŠ",
|
||||
"Add this attachment" : "ØĨØļØ§ŲØŠ ŲØ°Ø§ اŲŲ
ØąŲŲ",
|
||||
"Show in Files" : "ØšØąØļ ŲŲ Ø§ŲŲ
ŲŲØ§ØĒ ",
|
||||
"Download" : "ØĒŲØ˛ŲŲ",
|
||||
"Remove attachment" : "ØØ°Ų اŲŲ
ŲØąŲŲ",
|
||||
"Delete Attachment" : "Ų
ØŗØ Ø§ŲŲ
ØąŲŲ",
|
||||
"Restore Attachment" : "ØĨØŗØĒؚاد؊ اŲŲ
ØąŲŲ",
|
||||
"Modified" : "ØšŲØ¯Ų",
|
||||
"Created" : "ØŖŲŲØ´ØĻ",
|
||||
"The title cannot be empty." : "ŲØ§ ŲŲ
ŲŲ ØĒØąŲ Ø§ŲØšŲŲØ§Ų ŲØ§ØąØēŲØ§.",
|
||||
"Open in sidebar view" : "ŲØĒØ ŲŲ Ø§ŲØ´ØąŲØˇ Ø§ŲØŦØ§ŲØ¨Ų ",
|
||||
"Open in bigger view" : "ŲØĒØ ŲŲ ŲØ§Ųذ؊ ØŖŲØ¨Øą ",
|
||||
"Description" : "اŲŲØĩŲ",
|
||||
"Attachments" : "اŲŲ
ØąŲŲØ§ØĒ",
|
||||
"Comments" : "ØĒØšŲŲŲØ§ØĒ",
|
||||
"Failed to load comments" : "ŲØ´Ų ŲŲ ØĒØŲ
ŲŲ Ø§ŲØĒØšŲŲŲØ§ØĒ ",
|
||||
"No comments yet. Begin the discussion!" : "ŲØ§ ŲŲØŦد ØĒØšŲŲŲØ§ØĒ بؚد, Ø§Ø¨Ø¯ØŖ اŲŲŲØ§Ø´ Ø§ŲØĸŲ!",
|
||||
"The comment cannot be empty." : "Ø§ŲØĒØšŲŲŲ ŲØ§ŲŲ
ŲŲ Ø§Ų ŲŲŲŲ ŲØ§ØąØēا.",
|
||||
"The comment cannot be longer than 1000 characters." : "Ø§ŲØĒØšŲŲŲ ŲØ§ ŲŲ
ŲŲ Ø§Ų ŲŲŲŲ Ø§ØˇŲŲ Ų
Ų 1000 ØØąŲ.",
|
||||
"Modified" : "ØĸØŽØą ØĒؚدŲŲ",
|
||||
"Upload attachment" : "ØąŲØš Ø§ŲŲ
ØąŲŲØ§ØĒ",
|
||||
"Save" : "ØŲظ",
|
||||
"Created:" : "ØĒØ§ØąŲØŽ Ø§ŲØĨŲØ´Ø§ØĄ :",
|
||||
"In reply to" : "ŲŲŲŲ
Ø¨Ø§ŲØąØ¯ ØšŲŲ",
|
||||
"Cancel reply" : "ØĨŲØēØ§ØĄ Ø§ŲØąØ¯",
|
||||
"Reply" : "ØąØ¯",
|
||||
"Update" : "ØĒØØ¯ŲØĢ",
|
||||
"Write a description âĻ" : "ŲØĒØ§Ø¨ØŠ ŲØĩŲ...",
|
||||
"Description" : "اŲŲØĩŲ",
|
||||
"(Unsaved)" : "(ØēŲØą Ų
ØŲŲØ¸)",
|
||||
"(SavingâĻ)" : "(ŲŲØŲØ¸..)",
|
||||
"Formatting help" : "Ų
ØŗØ§ØšØ¯ØŠ Ø§ŲØĒŲØŗŲŲ",
|
||||
"Edit description" : "ØĒؚدŲŲ Ø§ŲŲØĩŲ",
|
||||
"View description" : "ØĨØ¸ŲØ§Øą اŲŲØĩŲ",
|
||||
"Add Attachment" : "ØŖØļŲ Ų
ŲØŲ",
|
||||
"Choose attachment" : "ا؎ØĒŲØ§Øą Ų
ØąŲŲ",
|
||||
"Select Date" : "ا؎ØĒØą Ø§ŲØĒØ§ØąŲØŽ ",
|
||||
"Later today â {timeLocale}" : "ŲŲ ŲŲØĒ ŲØ§ØŲŲ Ø§ŲŲŲŲ
â {timeLocale}",
|
||||
"Set due date for later today" : "ØĒØšŲŲŲ ØĸØŽŲØąŲ ŲØ°Ø§ اŲŲŲŲ
ŲŲ
ŲØšØ¯Ų ŲØ§ØŗØĒØŲØ§Ų Ø§ŲØ¨ØˇØ§ŲØŠ",
|
||||
"Tomorrow â {timeLocale}" : "ØēØ¯Ø§Ų â {timeLocale}",
|
||||
"Set due date for tomorrow" : "ØĒØšŲŲŲ ŲŲŲ
Ø§ŲØēØ¯ ŲŲ
ŲØšØ¯Ų ŲØ§ØŗØĒØŲØ§Ų Ø§ŲØ¨ØˇØ§ŲØŠ",
|
||||
"This weekend â {timeLocale}" : "ŲŲØ§ŲØŠ ŲØ°Ø§ Ø§ŲØŖØŗØ¨ŲØš â {timeLocale}",
|
||||
"Set due date for this weekend" : "ØĒØšŲŲŲ ŲŲØ§ŲØŠ ŲØ°Ø§ Ø§ŲØŖØŗØ¨ŲØš ŲŲ
ŲØšØ¯Ų ŲØ§ØŗØĒØŲØ§Ų Ø§ŲØ¨ØˇØ§ŲØŠ",
|
||||
"Next week â {timeLocale}" : "Ø§ŲØŖØŗØ¨ŲØš اŲŲØ§Ø¯Ų
â {timeLocale}",
|
||||
"Set due date for next week" : "ØĒØšŲŲŲ Ø§ŲØŖØŗØ¨ŲØš اŲŲ
ŲŲØ¨Ų ŲŲ
ŲØšØ¯Ų ŲØ§ØŗØĒØŲØ§Ų Ø§ŲØ¨ØˇØ§ŲØŠ",
|
||||
"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" : "ØŖØąØ´ŲØŠ Ø§ŲØ¨ØˇØ§ŲØŠ",
|
||||
"Assign a tag to this cardâĻ" : "Ø§ŲØŗØ¨ ŲØŗŲ
اŲŲ ŲØ°Ų Ø§ŲØ¨ØˇØ§ŲØŠ..",
|
||||
"Select or create a tagâĻ" : "ا؎ØĒŲØ§Øą ØŖŲ ØĨŲØ´Ø§ØĄ ŲØŗŲ
ØŦØ¯ŲØ¯...",
|
||||
"Create a new tag:" : "ØĨŲØ´Ø§ØĄ ŲØŗŲ
ØŦØ¯ŲØ¯:",
|
||||
"(group)" : "(Ų
ØŦŲ
ŲØšØŠ)",
|
||||
"{count} comments, {unread} unread" : "{ؚدد} Ø§ŲØĒØšŲŲŲØ§ØĒØ {ØēŲØą Ų
ŲØąŲØĄØŠ} ØēŲØą Ų
ŲØąŲØĄØŠ",
|
||||
"Todo items" : "ŲØ§ØĻŲ
ØŠ اŲŲ
ŲØ§Ų
",
|
||||
"Edit card title" : "ØĒؚدŲŲ Ø§ØŗŲ
اŲŲØ§ØĻŲ
ØŠ",
|
||||
"Open link" : "ØĨŲØĒŲØ Ø§ŲØąØ§Ø¨Øˇ",
|
||||
"Card deleted" : "Ø§ŲØ¨ØˇØ§ŲØŠ ØŲØ°ŲØĒ ",
|
||||
"Edit title" : "ØĒØØąŲØą ØšŲŲØ§Ų",
|
||||
"Assign to me" : "ŲŲØŗØ¨ ŲŲ",
|
||||
"Unassign myself" : "ØĨŲØēØ§ØĄ ØĒØšŲŲŲŲ ",
|
||||
"Mark as not done" : "ØĒŲ
ŲŲØ˛ ŲŲ \"ØēŲØą Ų
ŲØĒŲŲ\"",
|
||||
"Delete card" : "ØØ°Ų Ø§ŲØ¨ØˇØ§ŲØŠ",
|
||||
"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." : "اŲŲ
ØŗØĒ؎دŲŲ
ŲŲ Ų
Ų ØŽØ§ØąØŦ ØĒŲŲ Ø§ŲŲ
ØŦŲ
ŲØšØ§ØĒ ŲŲ ŲŲ
ŲŲŲŲ
ØĨŲØ´Ø§ØĄ ŲŲØØ§ØĒŲŲ
Ø§ŲØŽØ§ØĩØŠØ ŲŲŲ ŲŲ
ŲŲŲŲ
Ø§ŲØšŲ
Ų ØšŲŲ Ø§ŲŲŲØØ§ØĒ Ø§ŲØĒŲ ØĒØĒŲ
Ų Ų
Ø´Ø§ØąŲØĒŲØ§ Ų
ØšŲŲ
.",
|
||||
"Cancel edit" : "ØĨŲØēØ§ØĄ Ø§ŲØĒØšØ¯ŲŲ",
|
||||
"Save board" : "ØŲظ اŲŲŲØØŠ",
|
||||
"Board {0} deleted" : "اŲŲŲØ {0} ØĒŲ
Ų
ØŗØŲ",
|
||||
"All cards" : "ØŦŲ
ب𠨧ب¨ØˇØ§ŲاØĒ ",
|
||||
"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?" : "Ų
ØŗØ Ø§ŲŲŲØØ",
|
||||
"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" : "ØĒذŲبਧØĒ اŲŲ
ŲØšØ¯ Ø§ŲŲ
ØØ¯Ø¯ ",
|
||||
"Assigned cards" : "Ø§ŲØ¨ØˇØ§ŲاØĒ اŲŲ
ØŽØĩØĩØŠ",
|
||||
"No notifications" : "ŲØ§ ØĒŲØŦد ØĨØ´ØšØ§ØąØ§ØĒ",
|
||||
"Delete board" : "Ų
ØŗØ Ø§ŲŲŲØ",
|
||||
"Clone {boardTitle}" : "Ø§ØŗØĒŲØŗØ§ØŽ {boardTitle}",
|
||||
"Clone cards" : "Ø§ØŗØĒŲØŗØŽ Ø§ŲØ¨ØˇØ§ŲØŠ ",
|
||||
"Clone assignments" : "Ø§ØŗØĒŲØŗØ§ØŽ Ų
ŲØ§Ų
",
|
||||
"Clone labels" : "Ø§ØŗØĒŲØŗØ§ØŽ ØšŲØ§ŲŲŲ",
|
||||
"Clone due dates" : "Ø§ØŗØĒŲØŗØ§ØŽ ØĒŲØ§ØąŲØŽ Ø§ØŗØĒØŲاŲ",
|
||||
"Advanced options" : "Ø§ŲØŽŲØ§ØąØ§ØĒ اŲŲ
ØĒŲØ¯Ų
ØŠ",
|
||||
"Move all cards to the first list" : "ŲŲŲ ŲŲ Ø§ŲØ¨ØˇØ§ŲاØĒ ŲŲŲØ§ØĻŲ
ØŠ Ø§ŲØŖŲŲŲ",
|
||||
"Restore archived cards" : "Ø§ØŗØĒØąØŦاؚ Ø§ŲØ¨ØˇØ§ŲاØĒ اŲŲ
Ø¤ØąØ´ŲØŠ",
|
||||
"Clone" : "Ø§ØŗØĒŲØŗØŽ",
|
||||
"Export as CSV" : "ØĩدŲŲØą ŲŲ CSV",
|
||||
"Export" : "ØĒØĩØ¯ŲØą",
|
||||
"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}",
|
||||
"* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* ØŖŲŲØ´ØŖØĒ ŲŲ {created}\n* ØĸØŽØą ØĒؚدŲŲ ŲŲØ§ ŲŲ {lastMod}\n* {nbAttachments} Ų
ŲØąŲŲØ§ØĒ\n* {nbComments} Ų
ŲŲØ§ØØ¸Ø§ØĒ",
|
||||
"{nbCards} cards" : "{nbCards} Ø¨ØˇØ§ŲØ§ØĒ",
|
||||
"Due on {date}" : "Ų
ØˇŲŲØ¨ ŲŲ {date}",
|
||||
"{stack} in {board}" : "{stack} ŲŲ {board}",
|
||||
"Click to expand description" : "ØĨØļØšØˇ ŲŲØĒŲØŗŲØš ŲŲ Ø§ŲŲØĩŲ",
|
||||
"Click to expand comment" : "ØĨØļØēØˇ ŲŲØĒŲØŗØš ŲŲ Ø§ŲŲ
ŲØ§ØØ¸Ø§ØĒ",
|
||||
"Create card" : "ØŖŲØ´Ų Ø¨ØˇØ§ŲØŠ ",
|
||||
"Create a new card" : "ØŖŲØ´Ų Ø¨ØˇØ§ŲØŠ ØŦØ¯ŲØ¯ØŠ ",
|
||||
"Card title" : "ØšŲŲØ§Ų Ø§ŲØ¨ØˇØ§ŲØŠ ",
|
||||
"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" : "Ø¨ØˇØ§ŲØŠ ØŦØ¯ŲØ¯ØŠ",
|
||||
"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} Ø¨Ø§ŲØØŦŲ
اŲŲ
ØŗŲ
ŲØ ",
|
||||
"Due date" : "ØĒØ§ØąŲØŽ Ø§ŲØ§ŲØĒŲ
اŲ",
|
||||
"Error creating the share" : "ØŽØˇØŖ ŲŲ ØĨŲØ´Ø§ØĄ اŲŲ
Ø´Ø§ØąŲØŠ",
|
||||
"Share with a Deck card" : "Ų
Ø´Ø§ØąŲØŠ Ų
Øš Ø¨ØˇØ§ŲØŠ Deck",
|
||||
"Share {file} with a Deck card" : "Ų
Ø´Ø§ØąŲØŠ Ø§ŲŲ
ŲŲ {file} Ų
Øš Ø¨ØˇØ§ŲØŠ Deck",
|
||||
"Share" : "Ų
Ø´Ø§ØąŲØŠ ",
|
||||
"Personal" : "Ø´ØŽØĩŲ",
|
||||
"To do" : "ŲŲØšŲŲ",
|
||||
"Doing" : "ØĒØØĒ Ø§ŲØšŲ
Ų",
|
||||
"Example Task 3" : "Ų
ØĢØ§Ų Ø§ŲŲ
ŲŲ
ØŠ 3",
|
||||
"Example Task 2" : "Ų
ØĢØ§Ų Ø§ŲŲ
ŲŲ
ØŠ 2",
|
||||
"Example Task 1" : "Ų
ØĢØ§Ų Ø§ŲŲ
ŲŲ
ØŠ 1",
|
||||
"Move card to another board" : "ØØąŲ Ø§ŲØ¨ØˇØ§ŲØŠ اŲŲ ŲŲØ Ø§ØŽØą",
|
||||
"Filter by completed" : "ØĒØĩŲŲØŠ Ø¨ØØŗØ¨ Ø§ŲØĨŲØŦØ§Ø˛"
|
||||
"seconds ago" : "ØĢŲØ§Ų Ų
ØļØĒ",
|
||||
"Settings" : "Ø§ŲØĨؚداداØĒ",
|
||||
"Share" : "Ø´Ø§ØąŲ",
|
||||
"Options" : "Ø§ŲØŽŲØ§ØąØ§ØĒ",
|
||||
"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;"
|
||||
}
|
||||
147
l10n/ast.js
@@ -1,118 +1,41 @@
|
||||
OC.L10N.register(
|
||||
"deck",
|
||||
{
|
||||
"Deck" : "Tarxeteru",
|
||||
"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",
|
||||
"Upcoming cards" : "Tarxetes prÃŗximes",
|
||||
"Load more" : "Cargar mÃĄs",
|
||||
"Deck board" : "Mesa de tarxetes",
|
||||
"%s on %s" : "%s n %s",
|
||||
"Action needed" : "AiciÃŗn necesaria",
|
||||
"copy" : "copia",
|
||||
"Done" : "Fecho",
|
||||
"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",
|
||||
"Cancel" : "Encaboxar",
|
||||
"Drop your files to upload" : "Suelta los ficheros pa xubilos",
|
||||
"File already exists" : "El ficheru yÃĄ esiste",
|
||||
"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",
|
||||
"Tags" : "Etiquetes",
|
||||
"Deleted items" : "Elementos desaniciaos",
|
||||
"Activity" : "ActividÃĄ",
|
||||
"Deleted lists" : "Llistes desaniciaes",
|
||||
"Undo" : "Desfacer",
|
||||
"Deleted cards" : "Tarxetes desaniciaes",
|
||||
"Transfer" : "Tresferir",
|
||||
"(Group)" : "(Grupu)",
|
||||
"(Team)" : "(Equipu)",
|
||||
"Can edit" : "Pue editar",
|
||||
"Owner" : "Propietariu",
|
||||
"Delete" : "Desaniciar",
|
||||
"List deleted" : "DesaniciÃŗse la llista",
|
||||
"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",
|
||||
"Edit" : "Editar",
|
||||
"Add a new tag" : "Amestar una etiqueta nueva",
|
||||
"Members" : "Miembros",
|
||||
"Invalid path selected" : "SeleicionÃŗse un camÃn invÃĄlidu",
|
||||
"Show in Files" : "Amosar en Ficheros",
|
||||
"Download" : "Baxar",
|
||||
"Modified" : "ModificÃŗse",
|
||||
"The title cannot be empty." : "El tÃtulu nun pue tar baleru",
|
||||
"Comments" : "Comentarios",
|
||||
"Failed to load comments" : "Nun se puen cargar los comentarios",
|
||||
"No comments yet. Begin the discussion!" : "Nun hai nengÃēn comentariu. ÂĄComienza'l discutiniu!",
|
||||
"The comment cannot be empty." : "El comentariu nun pue tar baleru.",
|
||||
"Save" : "Guardar",
|
||||
"Created:" : "CreÃŗse'l",
|
||||
"In reply to" : "En rempuesta a",
|
||||
"Reply" : "Responder",
|
||||
"Update" : "Anovar",
|
||||
"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",
|
||||
"Tomorrow â {timeLocale}" : "MaÃąana â {timeLocale}",
|
||||
"This weekend â {timeLocale}" : "Esta fin de selmana â {timeLocale}",
|
||||
"Next week â {timeLocale}" : "La prÃŗxima selmana â {timeLocale}",
|
||||
"Mark as done" : "Marcar como fecha",
|
||||
"Archive card" : "Archivar la tarxeta",
|
||||
"(group)" : "(grupu)",
|
||||
"Edit title" : "Editar el tÃtulu",
|
||||
"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",
|
||||
"Cancel edit" : "Anular la ediciÃŗn",
|
||||
"All cards" : "Toles tarxetes",
|
||||
"No reminder" : "Nun hai nengÃēn recordatoriu",
|
||||
"An error occurred" : "ProdÃēxose un error",
|
||||
"No notifications" : "Nun hai nengÃēn avisu",
|
||||
"Clone cards" : "Clonar les tarxetes",
|
||||
"Advanced options" : "Opciones avanzaes",
|
||||
"Export" : "Esportar",
|
||||
"Today" : "GÃŧei",
|
||||
"Tomorrow" : "MaÃąana",
|
||||
"No results found" : "Nun s'atopÃŗ nengÃēn resultÃĄu",
|
||||
"Close" : "Zarrar",
|
||||
"Message from {author} in {conversationName}" : "Mensaxe de {author} en {conversationName}",
|
||||
"Due date" : "Data de fin",
|
||||
"Error creating the share" : "Hebo un error al crear la comparticiÃŗn",
|
||||
"Share" : "Compartir",
|
||||
"Deck" : "Deck",
|
||||
"Personal" : "Personal",
|
||||
"To do" : "Xera pendiente",
|
||||
"Example Task 3" : "Xera d'exemplu 3",
|
||||
"Example Task 2" : "Xera d'exemplu 2",
|
||||
"Example Task 1" : "Xera d'exemplu 1"
|
||||
"Finished" : "FinÃŗ",
|
||||
"Action needed" : "PrecÃsase aiciÃŗn",
|
||||
"Later" : "MÃĄs sero",
|
||||
"Done" : "Fecho",
|
||||
"The file was uploaded" : "XubiÃŗse'l ficheru",
|
||||
"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" : "YÃĄ esiste'l ficheru",
|
||||
"Show archived cards" : "Amosar tarxetes archivaes",
|
||||
"Details" : "Detalles",
|
||||
"Sharing" : "Compartiendo",
|
||||
"Tags" : "Etiquetes",
|
||||
"Undo" : "Desfacer",
|
||||
"Can edit" : "Can edit",
|
||||
"Can share" : "Can share",
|
||||
"Delete" : "Desaniciar",
|
||||
"Edit" : "Editar",
|
||||
"Description" : "DescripciÃŗn",
|
||||
"Attachments" : "Axuntos",
|
||||
"Comments" : "Comentarios",
|
||||
"Modified" : "ModificÃŗse'l",
|
||||
"Created" : "CreÃŗse",
|
||||
"Save" : "Guardar",
|
||||
"Reply" : "Rempuesta",
|
||||
"Update" : "Anovar",
|
||||
"(group)" : "(grupu)",
|
||||
"seconds ago" : "hai segundos",
|
||||
"Settings" : "Settings",
|
||||
"Share" : "Share"
|
||||
},
|
||||
"nplurals=2; plural=(n != 1);");
|
||||
|
||||
147
l10n/ast.json
@@ -1,116 +1,39 @@
|
||||
{ "translations": {
|
||||
"Deck" : "Tarxeteru",
|
||||
"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",
|
||||
"Upcoming cards" : "Tarxetes prÃŗximes",
|
||||
"Load more" : "Cargar mÃĄs",
|
||||
"Deck board" : "Mesa de tarxetes",
|
||||
"%s on %s" : "%s n %s",
|
||||
"Action needed" : "AiciÃŗn necesaria",
|
||||
"copy" : "copia",
|
||||
"Done" : "Fecho",
|
||||
"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",
|
||||
"Cancel" : "Encaboxar",
|
||||
"Drop your files to upload" : "Suelta los ficheros pa xubilos",
|
||||
"File already exists" : "El ficheru yÃĄ esiste",
|
||||
"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",
|
||||
"Tags" : "Etiquetes",
|
||||
"Deleted items" : "Elementos desaniciaos",
|
||||
"Activity" : "ActividÃĄ",
|
||||
"Deleted lists" : "Llistes desaniciaes",
|
||||
"Undo" : "Desfacer",
|
||||
"Deleted cards" : "Tarxetes desaniciaes",
|
||||
"Transfer" : "Tresferir",
|
||||
"(Group)" : "(Grupu)",
|
||||
"(Team)" : "(Equipu)",
|
||||
"Can edit" : "Pue editar",
|
||||
"Owner" : "Propietariu",
|
||||
"Delete" : "Desaniciar",
|
||||
"List deleted" : "DesaniciÃŗse la llista",
|
||||
"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",
|
||||
"Edit" : "Editar",
|
||||
"Add a new tag" : "Amestar una etiqueta nueva",
|
||||
"Members" : "Miembros",
|
||||
"Invalid path selected" : "SeleicionÃŗse un camÃn invÃĄlidu",
|
||||
"Show in Files" : "Amosar en Ficheros",
|
||||
"Download" : "Baxar",
|
||||
"Modified" : "ModificÃŗse",
|
||||
"The title cannot be empty." : "El tÃtulu nun pue tar baleru",
|
||||
"Comments" : "Comentarios",
|
||||
"Failed to load comments" : "Nun se puen cargar los comentarios",
|
||||
"No comments yet. Begin the discussion!" : "Nun hai nengÃēn comentariu. ÂĄComienza'l discutiniu!",
|
||||
"The comment cannot be empty." : "El comentariu nun pue tar baleru.",
|
||||
"Save" : "Guardar",
|
||||
"Created:" : "CreÃŗse'l",
|
||||
"In reply to" : "En rempuesta a",
|
||||
"Reply" : "Responder",
|
||||
"Update" : "Anovar",
|
||||
"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",
|
||||
"Tomorrow â {timeLocale}" : "MaÃąana â {timeLocale}",
|
||||
"This weekend â {timeLocale}" : "Esta fin de selmana â {timeLocale}",
|
||||
"Next week â {timeLocale}" : "La prÃŗxima selmana â {timeLocale}",
|
||||
"Mark as done" : "Marcar como fecha",
|
||||
"Archive card" : "Archivar la tarxeta",
|
||||
"(group)" : "(grupu)",
|
||||
"Edit title" : "Editar el tÃtulu",
|
||||
"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",
|
||||
"Cancel edit" : "Anular la ediciÃŗn",
|
||||
"All cards" : "Toles tarxetes",
|
||||
"No reminder" : "Nun hai nengÃēn recordatoriu",
|
||||
"An error occurred" : "ProdÃēxose un error",
|
||||
"No notifications" : "Nun hai nengÃēn avisu",
|
||||
"Clone cards" : "Clonar les tarxetes",
|
||||
"Advanced options" : "Opciones avanzaes",
|
||||
"Export" : "Esportar",
|
||||
"Today" : "GÃŧei",
|
||||
"Tomorrow" : "MaÃąana",
|
||||
"No results found" : "Nun s'atopÃŗ nengÃēn resultÃĄu",
|
||||
"Close" : "Zarrar",
|
||||
"Message from {author} in {conversationName}" : "Mensaxe de {author} en {conversationName}",
|
||||
"Due date" : "Data de fin",
|
||||
"Error creating the share" : "Hebo un error al crear la comparticiÃŗn",
|
||||
"Share" : "Compartir",
|
||||
"Deck" : "Deck",
|
||||
"Personal" : "Personal",
|
||||
"To do" : "Xera pendiente",
|
||||
"Example Task 3" : "Xera d'exemplu 3",
|
||||
"Example Task 2" : "Xera d'exemplu 2",
|
||||
"Example Task 1" : "Xera d'exemplu 1"
|
||||
"Finished" : "FinÃŗ",
|
||||
"Action needed" : "PrecÃsase aiciÃŗn",
|
||||
"Later" : "MÃĄs sero",
|
||||
"Done" : "Fecho",
|
||||
"The file was uploaded" : "XubiÃŗse'l ficheru",
|
||||
"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" : "YÃĄ esiste'l ficheru",
|
||||
"Show archived cards" : "Amosar tarxetes archivaes",
|
||||
"Details" : "Detalles",
|
||||
"Sharing" : "Compartiendo",
|
||||
"Tags" : "Etiquetes",
|
||||
"Undo" : "Desfacer",
|
||||
"Can edit" : "Can edit",
|
||||
"Can share" : "Can share",
|
||||
"Delete" : "Desaniciar",
|
||||
"Edit" : "Editar",
|
||||
"Description" : "DescripciÃŗn",
|
||||
"Attachments" : "Axuntos",
|
||||
"Comments" : "Comentarios",
|
||||
"Modified" : "ModificÃŗse'l",
|
||||
"Created" : "CreÃŗse",
|
||||
"Save" : "Guardar",
|
||||
"Reply" : "Rempuesta",
|
||||
"Update" : "Anovar",
|
||||
"(group)" : "(grupu)",
|
||||
"seconds ago" : "hai segundos",
|
||||
"Settings" : "Settings",
|
||||
"Share" : "Share"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
}
|
||||
27
l10n/az.js
@@ -1,44 +1,27 @@
|
||||
OC.L10N.register(
|
||||
"deck",
|
||||
{
|
||||
"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",
|
||||
"Personal" : "ÅÉxsi",
|
||||
"Done" : "Done",
|
||||
"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Äą",
|
||||
"Finished" : "Bitdi",
|
||||
"Done" : "Done",
|
||||
"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É",
|
||||
"Description" : "AÃ§Äąqlanma",
|
||||
"Modified" : "DÉyiÅdirildi",
|
||||
"Comments" : "ÅÉrhlÉr",
|
||||
"Save" : "Saxla",
|
||||
"Created:" : "YaradÄąldÄą:",
|
||||
"Reply" : "Cavab",
|
||||
"Update" : "YenilÉnmÉ",
|
||||
"Description" : "AÃ§Äąqlanma",
|
||||
"(group)" : "(qrup)",
|
||||
"seconds ago" : "saniyÉlÉr ÃļncÉ",
|
||||
"Search" : "AxtarÄąÅ",
|
||||
"Shared with you" : "Shared with you",
|
||||
"Export" : "ÃÄąxarÄąÅ",
|
||||
"Today" : "Bu gÃŧn",
|
||||
"Tomorrow" : "Sabah",
|
||||
"Close" : "BaÄla",
|
||||
"Share" : "PaylaÅ",
|
||||
"Personal" : "ÅÉxsi"
|
||||
"Settings" : "QuraÅdÄąrmalar",
|
||||
"Share" : "PaylaÅ"
|
||||
},
|
||||
"nplurals=2; plural=(n != 1);");
|
||||
|
||||
27
l10n/az.json
@@ -1,42 +1,25 @@
|
||||
{ "translations": {
|
||||
"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",
|
||||
"Personal" : "ÅÉxsi",
|
||||
"Done" : "Done",
|
||||
"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Äą",
|
||||
"Finished" : "Bitdi",
|
||||
"Done" : "Done",
|
||||
"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É",
|
||||
"Description" : "AÃ§Äąqlanma",
|
||||
"Modified" : "DÉyiÅdirildi",
|
||||
"Comments" : "ÅÉrhlÉr",
|
||||
"Save" : "Saxla",
|
||||
"Created:" : "YaradÄąldÄą:",
|
||||
"Reply" : "Cavab",
|
||||
"Update" : "YenilÉnmÉ",
|
||||
"Description" : "AÃ§Äąqlanma",
|
||||
"(group)" : "(qrup)",
|
||||
"seconds ago" : "saniyÉlÉr ÃļncÉ",
|
||||
"Search" : "AxtarÄąÅ",
|
||||
"Shared with you" : "Shared with you",
|
||||
"Export" : "ÃÄąxarÄąÅ",
|
||||
"Today" : "Bu gÃŧn",
|
||||
"Tomorrow" : "Sabah",
|
||||
"Close" : "BaÄla",
|
||||
"Share" : "PaylaÅ",
|
||||
"Personal" : "ÅÉxsi"
|
||||
"Settings" : "QuraÅdÄąrmalar",
|
||||
"Share" : "PaylaÅ"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
}
|
||||
316
l10n/bg.js
@@ -1,329 +1,45 @@
|
||||
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>",
|
||||
"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",
|
||||
"Upcoming cards" : "ĐŅĐĩĐ´ŅŅĐžŅŅи ĐēаŅŅи",
|
||||
"Load more" : "ĐаŅĐĩĐļдаĐŊĐĩ ĐŊа ĐžŅĐĩ",
|
||||
"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." : "ĐĐĩ ĐąŅŅ
а ĐŋŅĐĩĐ´ĐžŅŅавĐĩĐŊи даĐŊĐŊи Са ŅŅСдаваĐŊĐĩ ĐŊа ĐŋŅиĐēаŅĐĩĐŊ ŅаКĐģ.",
|
||||
"Personal" : "ĐиŅĐŊи",
|
||||
"Finished" : "ĐĐžŅОвО",
|
||||
"To review" : "Đа ĐŋŅĐĩĐŗĐģĐĩĐ´",
|
||||
"Action needed" : "ĐĐĩОйŅ
ОдиĐŧĐž Đĩ Đ´ĐĩĐšŅŅвиĐĩ",
|
||||
"Later" : "ĐĐž-ĐēŅŅĐŊĐž",
|
||||
"copy" : "ĐĐžĐŋиŅаĐŊĐĩ",
|
||||
"To Do" : "ĐадаŅи",
|
||||
"Done" : "ĐавŅŅŅĐĩĐŊĐž",
|
||||
"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" : "ĐОйави ŅайĐģĐž",
|
||||
"Card details" : "ĐОдŅОйĐŊĐžŅŅи Са ĐēаŅŅаŅа",
|
||||
"Select the board to link to a project" : "ĐСйĐĩŅĐĩŅĐĩ ŅайĐģĐžŅĐž, ĐēĐžĐĩŅĐž да ŅвŅŅĐļĐĩŅĐĩ ĐēŅĐŧ ĐŋŅĐžĐĩĐēŅ",
|
||||
"Search by board title" : "ĐĸŅŅŅĐĩĐŊĐĩ ĐŋĐž ĐˇĐ°ĐŗĐģавиĐĩ ĐŊа ŅайĐģĐžŅĐž",
|
||||
"Select board" : "ĐĐˇĐąĐžŅ ĐŊа ŅайĐģĐž",
|
||||
"Select a board" : "ĐĐˇĐąĐžŅ ĐŊа ŅайĐģĐž",
|
||||
"No lists available" : "ĐŅĐŧа ĐŊаĐģиŅĐŊа ŅĐŋиŅŅŅи.",
|
||||
"Select a list" : "ĐĐˇĐąĐžŅ ĐŊа ŅĐŋиŅŅĐē",
|
||||
"Move card" : "ĐŅĐĩĐŧĐĩŅŅваĐŊĐĩ ĐŊа ĐēаŅŅа",
|
||||
"Select the card to link to a project" : "ĐСйĐĩŅĐĩŅĐĩ ĐēаŅŅаŅа, ĐēĐžŅŅĐž да ŅвŅŅĐļĐĩŅĐĩ ĐēŅĐŧ ĐŋŅĐžĐĩĐēŅ",
|
||||
"Link to card" : "ĐŅŅСĐēа ĐēŅĐŧ ĐēаŅŅа",
|
||||
"Select a card" : "ĐĐˇĐąĐžŅ ĐŊа ĐēаŅŅа",
|
||||
"Done" : "ĐĐžŅОвО",
|
||||
"The file was uploaded" : "ФаКĐģŅŅ Đĩ ĐēаŅĐĩĐŊ",
|
||||
"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" : "ĐиĐŋŅва вŅĐĩĐŧĐĩĐŊĐŊа ĐŋаĐŋĐēа",
|
||||
"Cancel" : "ĐŅĐēаС",
|
||||
"This board is read only" : "ĐĸайĐģĐžŅĐž Đĩ ŅаĐŧĐž Са ŅĐĩŅĐĩĐŊĐĩ",
|
||||
"Drop your files to upload" : "ĐŅŅĐŊĐĩŅĐĩ ваŅиŅĐĩ ŅаКĐģОвĐĩ, Са да ĐŗĐ¸ ĐēаŅиŅĐĩ",
|
||||
"File already exists" : "ФаКĐģŅŅ Đ˛ĐĩŅĐĩ ŅŅŅĐĩŅŅвŅва",
|
||||
"A file with the name {filename} already exists." : "ĐĐĩŅĐĩ ŅŅŅĐĩŅŅвŅва ŅаКĐģ Ņ Đ¸ĐŧĐĩŅĐž {filename}.",
|
||||
"Do you want to overwrite it?" : "ĐŅĐēаŅĐĩ Đģи да ĐŗĐž ĐŋŅĐĩСаĐŋиŅĐĩŅĐĩ?",
|
||||
"Overwrite file" : "ĐŅĐĩСаĐŋиŅи ŅаКĐģа",
|
||||
"Keep existing file" : "ĐаĐŋаСваĐŊĐĩ ĐŊа ŅŅŅĐĩŅŅвŅĐ˛Đ°Ņ ŅаКĐģ",
|
||||
"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" : "ĐСŅŅиŅи ĐēаŅŅи",
|
||||
"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}",
|
||||
"No participants found" : "ĐŅĐŧа ĐŊаĐŧĐĩŅĐĩĐŊи ŅŅаŅŅĐŊиŅи",
|
||||
"Board owner" : "ХОйŅŅвĐĩĐŊиĐē ĐŊа ŅайĐģĐž",
|
||||
"(Group)" : "(ĐŅŅĐŋа)",
|
||||
"Can edit" : "ĐĐžĐļĐĩ да ŅĐĩдаĐēŅиŅа",
|
||||
"Can share" : "ĐĐžĐļĐĩ да ŅĐŋОдĐĩĐģŅ",
|
||||
"Can manage" : "ĐĐžĐļĐĩ да ŅĐŋŅавĐģŅва",
|
||||
"Owner" : "ХОйŅŅвĐĩĐŊиĐē",
|
||||
"Delete" : "ĐСŅŅиваĐŊĐĩ",
|
||||
"List deleted" : "ĐĄĐŋиŅŅĐēŅŅ Đĩ иСŅŅиŅ",
|
||||
"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" : "ĐĐŧĐĩ ĐŊа ĐēаŅŅа",
|
||||
"title and color value must be provided" : "ŅŅŅйва да ŅĐĩ ĐŋŅĐĩĐ´ĐžŅŅавŅŅ ĐˇĐ°ĐŗĐģавиĐĩ и ŅŅОКĐŊĐžŅŅ ĐŊа ŅвĐĩŅа",
|
||||
"Edit" : "Đ ĐĩдаĐēŅиŅ",
|
||||
"Add a new tag" : "ĐОйавŅĐŊĐĩ ĐŊа ĐŊОв ĐĩŅиĐēĐĩŅ",
|
||||
"Board name" : "ĐĐŧĐĩ ĐŊа ŅайĐģĐž",
|
||||
"Members" : "ЧĐģĐĩĐŊОвĐĩ",
|
||||
"Assign a user to this cardâĻ" : "ĐаŅиŅĐģŅваĐŊĐĩ ĐŊа ĐŋĐžŅŅĐĩйиŅĐĩĐģ ĐŊа ŅаСи ĐēаŅŅа ...",
|
||||
"File to share" : "ФаКĐģ Са ŅĐŋОдĐĩĐģŅĐŊĐĩ",
|
||||
"Invalid path selected" : "ĐСйŅаĐŊ Đĩ ĐŊĐĩваĐģидĐĩĐŊ ĐŋŅŅ ",
|
||||
"Upload new files" : "ĐаŅи ĐŊОви ŅаКĐģОвĐĩ",
|
||||
"Share from Files" : "ĐĄĐŋОдĐĩĐģŅĐŊĐĩ ĐžŅ Đ¤Đ°ĐšĐģОвĐĩ",
|
||||
"Pending share" : "ЧаĐēаŅĐž ŅĐŋОдĐĩĐģŅĐŊĐĩ",
|
||||
"Add this attachment" : "ĐОйавĐĩŅĐĩ ŅОСи ĐŋŅиĐēаŅĐĩĐŊ ŅаКĐģ",
|
||||
"Show in Files" : "ĐĐžĐēаСваĐŊĐĩ вŅв ŅаКĐģОвĐĩ",
|
||||
"Download" : "ĐСŅĐĩĐŗĐģŅĐŊĐĩ",
|
||||
"Remove attachment" : "ĐŅĐĩĐŧаŅ
ваĐŊĐĩ ĐŊа ĐŋŅиĐēаŅĐĩĐŊ ŅаКĐģ",
|
||||
"Delete Attachment" : "ĐСŅŅиваĐŊĐĩ ĐŊа ĐŋŅиĐēаŅĐĩĐŊ ŅаКĐģ",
|
||||
"Restore Attachment" : "ĐŅСŅŅаĐŊОвŅваĐŊĐĩ ĐŊа ĐŋŅиĐēаŅĐĩĐŊ ŅаКĐģ",
|
||||
"Modified" : "ĐŅĐžĐŧŅĐŊа",
|
||||
"Created" : "ĐĄŅСдадĐĩĐŊ",
|
||||
"The title cannot be empty." : "ĐĐ°ĐŗĐģавиĐĩŅĐž ĐŊĐĩ ĐŧĐžĐļĐĩ да ĐąŅĐ´Đĩ ĐŋŅаСĐŊĐž.",
|
||||
"Open in sidebar view" : "ĐŅваŅŅĐŊĐĩ в Đ¸ĐˇĐŗĐģĐĩда ĐŊа ŅŅŅаĐŊиŅĐŊаŅа ĐģĐĩĐŊŅа",
|
||||
"Open in bigger view" : "ĐŅваŅŅ ŅĐĩ в ĐŋĐž-ĐŗĐžĐģŅĐŧ Đ¸ĐˇĐŗĐģĐĩĐ´",
|
||||
"Due date" : "ĐŅаКĐŊа даŅа",
|
||||
"Remove due date" : "ĐŅĐĩĐŧаŅ
ĐŊи ĐēŅаКĐŊаŅа даŅа",
|
||||
"Description" : "ĐĐŋиŅаĐŊиĐĩ",
|
||||
"Attachments" : "ĐŅиĐēаŅĐĩĐŊи ŅаКĐģОвĐĩ",
|
||||
"Comments" : "ĐĐžĐŧĐĩĐŊŅаŅи",
|
||||
"Failed to load comments" : "ĐĐĩŅŅĐŋĐĩŅĐŊĐž СаŅĐĩĐļдаĐŊĐĩ ĐŊа ĐēĐžĐŧĐĩĐŊŅаŅи",
|
||||
"No comments yet. Begin the discussion!" : "ĐŅĐĩ ĐžŅĐĩ ĐŊŅĐŧа ĐēĐžĐŧĐĩĐŊŅаŅи. ĐаĐŋĐžŅĐŊĐĩŅĐĩ диŅĐēŅŅиŅŅа!",
|
||||
"The comment cannot be empty." : "ĐĐžĐŧĐĩĐŊŅаŅŅŅ ĐŊĐĩ ĐŧĐžĐļĐĩ да ĐąŅĐ´Đĩ ĐŋŅаСĐĩĐŊ.",
|
||||
"The comment cannot be longer than 1000 characters." : "ĐĐžĐŧĐĩĐŊŅаŅŅŅ ĐŊĐĩ ĐŧĐžĐļĐĩ да ĐąŅĐ´Đĩ ĐŋĐž-Đ´ŅĐģŅĐŗ ĐžŅ 1000 СĐŊаĐēа.",
|
||||
"Modified" : "ĐŅĐžĐŧŅĐŊа",
|
||||
"Created" : "ĐĄŅСдадĐĩĐŊ",
|
||||
"Upload attachment" : "ĐаŅваĐŊĐĩ",
|
||||
"Save" : "ĐаĐŋаСваĐŊĐĩ",
|
||||
"Created:" : "ĐĄŅСдадĐĩĐŊĐž:",
|
||||
"In reply to" : "Đ ĐžŅĐŗĐžĐ˛ĐžŅ ĐŊа",
|
||||
"Cancel reply" : "ĐŅĐēаС ĐŊа ĐžŅĐŗĐžĐ˛ĐžŅ",
|
||||
"Reply" : "ĐŅĐŗĐžĐ˛ĐžŅи",
|
||||
"Update" : "ĐĐąĐŊОвŅваĐŊĐĩ",
|
||||
"Write a description âĻ" : "ĐаĐŋиŅĐĩŅĐĩ ĐžĐŋиŅаĐŊиĐĩ ...",
|
||||
"Description" : "ĐĐŋиŅаĐŊиĐĩ",
|
||||
"(Unsaved)" : " (ĐĐĩСаĐŋиŅаĐŊ)",
|
||||
"(SavingâĻ)" : "(ĐаĐŋиŅваĐŊĐĩ...)",
|
||||
"Formatting help" : "ĐĐžĐŧĐžŅ ĐˇĐ° ŅĐžŅĐŧаŅиŅаĐŊĐĩ",
|
||||
"Edit description" : "Đ ĐĩдаĐēŅиŅаĐŊĐĩ ĐŊа ĐžĐŋиŅаĐŊиĐĩŅĐž",
|
||||
"View description" : "ĐŅĐĩĐŗĐģĐĩĐ´ ĐŊа ĐžĐŋиŅаĐŊиĐĩŅĐž",
|
||||
"Add Attachment" : "ĐОйавŅĐŊĐĩ ĐŊа ĐŋŅиĐēаŅĐĩĐŊ ŅаКĐģ",
|
||||
"Choose attachment" : "ĐĐˇĐąĐžŅ ĐŊа ĐŋŅиĐēаŅĐĩĐŊ ŅаКĐģ",
|
||||
"Select Date" : "ĐСйĐĩŅĐĩŅĐĩ даŅа",
|
||||
"Set a due date" : "ĐадаваĐŊĐĩ ĐŊа ĐēŅаКĐŊа даŅа",
|
||||
"Remove due date" : "ĐŅĐĩĐŧаŅ
ĐŊи ĐēŅаКĐŊаŅа даŅа",
|
||||
"Mark as done" : "ĐаŅĐēиŅаК ĐēаŅĐž ĐŗĐžŅОвО",
|
||||
"Unarchive card" : "РаСаŅŅ
ивиŅаĐŊĐĩ ĐŊа ĐēаŅŅа",
|
||||
"Archive card" : "ĐŅŅ
ивиŅаĐŊĐĩ ĐŊа ĐēаŅŅа",
|
||||
"Assign a tag to this cardâĻ" : "ĐŅиŅвОŅваĐŊĐĩ ĐŊа ĐĩŅиĐēĐĩŅ ĐŊа ŅаСи ĐēаŅŅа ...",
|
||||
"(group)" : "(ĐŗŅŅĐŋа)",
|
||||
"{count} comments, {unread} unread" : "{count} ĐēĐžĐŧĐĩĐŊŅаŅи, {unread} ĐŊĐĩĐŋŅĐžŅĐĩŅĐĩĐŊи",
|
||||
"Todo items" : "ĐĐģĐĩĐŧĐĩĐŊŅи ĐŊа СадаŅа Са иСĐŋŅĐģĐŊĐĩĐŊиĐĩ",
|
||||
"Edit card title" : "Đ ĐĩдаĐēŅиŅаĐŊĐĩ ĐŊа ĐˇĐ°ĐŗĐģавиĐĩŅĐž ĐŊа ĐēаŅŅа",
|
||||
"Card deleted" : "ĐаŅŅаŅа Đĩ иСŅŅиŅа",
|
||||
"Edit title" : "Đ ĐĩдаĐēŅиŅаĐŊĐĩ ĐŊа ĐˇĐ°ĐŗĐģавиĐĩŅĐž",
|
||||
"Assign to me" : "ĐаŅиŅĐģŅваĐŊĐĩ ĐēŅĐŧ ĐŧĐĩĐŊ",
|
||||
"Unassign myself" : "ĐŅĐŧŅĐŊа ĐŊа СаŅиŅĐģŅваĐŊĐĩŅĐž ĐēŅĐŧ ĐŧĐĩĐŊ",
|
||||
"Delete card" : "ĐСŅŅиваĐŊĐĩ ĐŊа ĐēаŅŅа",
|
||||
"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" : "ĐĐžĐēаСваĐŊĐĩ ĐŊа ŅайĐģаŅа в ĐēаĐģĐĩĐŊĐ´Đ°Ņ / СадаŅи",
|
||||
"Cancel edit" : "ĐŅĐēаС ĐŊа ŅĐĩдаĐēŅиŅаĐŊĐĩ",
|
||||
"Board {0} deleted" : "ĐĸайĐģĐž {0} иСŅŅиŅĐž",
|
||||
"All cards" : "ĐŅиŅĐēи ĐēаŅŅи",
|
||||
"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?" : "ĐСŅŅиваĐŊĐĩ ĐŊа ŅайĐģĐžŅĐž?",
|
||||
"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" : " ĐаĐŋĐžĐŧĐŊŅĐŊĐ¸Ņ ĐˇĐ° ĐēŅаĐĩĐŊ ŅŅĐžĐē",
|
||||
"Assigned cards" : "ĐаŅиŅĐģĐĩĐŊи ĐēаŅŅи",
|
||||
"No notifications" : "ĐŅĐŧа иСвĐĩŅŅиŅ",
|
||||
"Delete board" : "ĐСŅŅиваĐŊĐĩ ĐŊа ŅайĐģĐž",
|
||||
"Clone cards" : " ĐĐģĐžĐŊиŅаĐŊĐĩ ĐŊа ĐēаŅŅи",
|
||||
"Advanced options" : "ĐĐžĐŋŅĐģĐŊиŅĐĩĐģĐŊи ĐžĐŋŅии",
|
||||
"Clone" : "ĐĐģĐžĐŊиŅаĐŊĐĩ",
|
||||
"Export as CSV" : "ĐĐēŅĐŋĐžŅŅиŅаĐŊĐĩ ĐēаŅĐž CSV ŅаКĐģ",
|
||||
"Export" : "ĐĐēŅĐŋĐžŅŅ /иСĐŊаŅŅĐŧ/",
|
||||
"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}",
|
||||
"* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* ĐĄŅСдадĐĩĐŊ ĐŊа {created}\n* ĐĐžŅĐģĐĩĐ´ĐŊа ĐŋŅĐžĐŧŅĐŊа ĐŊа {lastMod} \n* {nbAttachments} ĐŋŅиĐēаŅĐĩĐŊи ŅаКĐģОвĐĩ \n* {nbComments} ĐēĐžĐŧĐĩĐŊŅаŅа",
|
||||
"{nbCards} cards" : "{nbCards} ĐēаŅŅи",
|
||||
"Due on {date}" : "ĐŅаĐĩĐŊ ŅŅĐžĐē Đ´Đž {date}",
|
||||
"{stack} in {board}" : "{stack} в {board}",
|
||||
"Click to expand description" : "ĐĐģиĐēваĐŊĐĩ Са ŅаСŅиŅŅваĐŊĐĩ ĐŊа ĐžĐŋиŅаĐŊиĐĩŅĐž",
|
||||
"Click to expand comment" : "ĐĐģиĐēваĐŊĐĩ Са ŅаСŅиŅŅваĐŊĐĩ ĐŊа ĐēĐžĐŧĐĩĐŊŅаŅа",
|
||||
"Create card" : "ĐĄŅСдаваĐŊĐĩ ĐŊа ĐēаŅŅа",
|
||||
"Create a new card" : "ĐĄŅСдаваĐŊĐĩ ĐŊа ĐŊОва ĐēаŅŅа",
|
||||
"Card title" : "ĐĐ°ĐŗĐģавиĐĩ ĐŊа ĐēаŅŅа",
|
||||
"Creating the new card âĻ" : "ĐĄŅСдаваĐŊĐĩ ĐŊа ĐŊОваŅа ĐēаŅŅа ...",
|
||||
"Card \"{card}\" was added to \"{board}\"" : "ĐаŅŅа \"{card}\" ĐąĐĩŅĐĩ дОйавĐĩĐŊа ĐēŅĐŧ \"{board}\"",
|
||||
"Open card" : "ĐŅваŅŅĐŊĐĩ ĐŊа ĐēаŅŅа",
|
||||
"Close" : "ĐаŅваŅŅĐŊĐĩ",
|
||||
"No upcoming cards" : "ĐŅĐŧа ĐŋŅĐĩĐ´ŅŅĐžŅŅи ĐēаŅŅи",
|
||||
"upcoming cards" : "ĐŋŅĐĩĐ´ŅŅĐžŅŅи ĐēаŅŅи",
|
||||
"New card" : "ĐОва ĐēаŅŅа",
|
||||
"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} Đĩ ĐŊадвиŅĐĩĐŊ",
|
||||
"Due date" : "ĐŅаКĐŊа даŅа",
|
||||
"Error creating the share" : "ĐŅĐĩŅĐēа ĐŋŅи ŅŅСдаваĐŊĐĩ ĐŊа ŅĐŋОдĐĩĐģŅĐŊĐĩ",
|
||||
"Share with a Deck card" : "ĐĄĐŋОдĐĩĐģŅĐŊĐĩ Ņ Deck ĐēаŅŅа",
|
||||
"Share {file} with a Deck card" : "ĐĄĐŋОдĐĩĐģŅĐŊĐĩ {file} Ņ Deck ĐēаŅŅа",
|
||||
"Share" : "ĐĄĐŋОдĐĩĐģŅĐŊĐĩ",
|
||||
"Personal" : "ĐиŅĐŊи",
|
||||
"To do" : "ĐадаŅи",
|
||||
"Doing" : "ĐадаŅи в ĐŋŅĐžŅĐĩŅ ĐŊа иСĐŋŅĐģĐŊĐĩĐŊиĐĩ",
|
||||
"Example Task 3" : "ĐŅиĐŧĐĩŅĐŊа СадаŅа 3",
|
||||
"Example Task 2" : "ĐŅиĐŧĐĩŅĐŊа СадаŅа 2",
|
||||
"Example Task 1" : "ĐŅиĐŧĐĩŅĐŊа СадаŅа 1",
|
||||
"Move card to another board" : "ĐŅĐĩĐŧĐĩŅŅваĐŊĐĩ ĐŊа ĐēаŅŅаŅа ĐŊа Đ´ŅŅĐŗĐž ŅайĐģĐž"
|
||||
"Settings" : "ĐаŅŅŅОКĐēи",
|
||||
"Share" : "ĐĄĐŋОдĐĩĐģи",
|
||||
"An error occurred" : "ĐŅСĐŊиĐēĐŊа ĐŗŅĐĩŅĐēа"
|
||||
},
|
||||
"nplurals=2; plural=(n != 1);");
|
||||
|
||||
316
l10n/bg.json
@@ -1,327 +1,43 @@
|
||||
{ "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>",
|
||||
"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",
|
||||
"Upcoming cards" : "ĐŅĐĩĐ´ŅŅĐžŅŅи ĐēаŅŅи",
|
||||
"Load more" : "ĐаŅĐĩĐļдаĐŊĐĩ ĐŊа ĐžŅĐĩ",
|
||||
"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." : "ĐĐĩ ĐąŅŅ
а ĐŋŅĐĩĐ´ĐžŅŅавĐĩĐŊи даĐŊĐŊи Са ŅŅСдаваĐŊĐĩ ĐŊа ĐŋŅиĐēаŅĐĩĐŊ ŅаКĐģ.",
|
||||
"Personal" : "ĐиŅĐŊи",
|
||||
"Finished" : "ĐĐžŅОвО",
|
||||
"To review" : "Đа ĐŋŅĐĩĐŗĐģĐĩĐ´",
|
||||
"Action needed" : "ĐĐĩОйŅ
ОдиĐŧĐž Đĩ Đ´ĐĩĐšŅŅвиĐĩ",
|
||||
"Later" : "ĐĐž-ĐēŅŅĐŊĐž",
|
||||
"copy" : "ĐĐžĐŋиŅаĐŊĐĩ",
|
||||
"To Do" : "ĐадаŅи",
|
||||
"Done" : "ĐавŅŅŅĐĩĐŊĐž",
|
||||
"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" : "ĐОйави ŅайĐģĐž",
|
||||
"Card details" : "ĐОдŅОйĐŊĐžŅŅи Са ĐēаŅŅаŅа",
|
||||
"Select the board to link to a project" : "ĐСйĐĩŅĐĩŅĐĩ ŅайĐģĐžŅĐž, ĐēĐžĐĩŅĐž да ŅвŅŅĐļĐĩŅĐĩ ĐēŅĐŧ ĐŋŅĐžĐĩĐēŅ",
|
||||
"Search by board title" : "ĐĸŅŅŅĐĩĐŊĐĩ ĐŋĐž ĐˇĐ°ĐŗĐģавиĐĩ ĐŊа ŅайĐģĐžŅĐž",
|
||||
"Select board" : "ĐĐˇĐąĐžŅ ĐŊа ŅайĐģĐž",
|
||||
"Select a board" : "ĐĐˇĐąĐžŅ ĐŊа ŅайĐģĐž",
|
||||
"No lists available" : "ĐŅĐŧа ĐŊаĐģиŅĐŊа ŅĐŋиŅŅŅи.",
|
||||
"Select a list" : "ĐĐˇĐąĐžŅ ĐŊа ŅĐŋиŅŅĐē",
|
||||
"Move card" : "ĐŅĐĩĐŧĐĩŅŅваĐŊĐĩ ĐŊа ĐēаŅŅа",
|
||||
"Select the card to link to a project" : "ĐСйĐĩŅĐĩŅĐĩ ĐēаŅŅаŅа, ĐēĐžŅŅĐž да ŅвŅŅĐļĐĩŅĐĩ ĐēŅĐŧ ĐŋŅĐžĐĩĐēŅ",
|
||||
"Link to card" : "ĐŅŅСĐēа ĐēŅĐŧ ĐēаŅŅа",
|
||||
"Select a card" : "ĐĐˇĐąĐžŅ ĐŊа ĐēаŅŅа",
|
||||
"Done" : "ĐĐžŅОвО",
|
||||
"The file was uploaded" : "ФаКĐģŅŅ Đĩ ĐēаŅĐĩĐŊ",
|
||||
"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" : "ĐиĐŋŅва вŅĐĩĐŧĐĩĐŊĐŊа ĐŋаĐŋĐēа",
|
||||
"Cancel" : "ĐŅĐēаС",
|
||||
"This board is read only" : "ĐĸайĐģĐžŅĐž Đĩ ŅаĐŧĐž Са ŅĐĩŅĐĩĐŊĐĩ",
|
||||
"Drop your files to upload" : "ĐŅŅĐŊĐĩŅĐĩ ваŅиŅĐĩ ŅаКĐģОвĐĩ, Са да ĐŗĐ¸ ĐēаŅиŅĐĩ",
|
||||
"File already exists" : "ФаКĐģŅŅ Đ˛ĐĩŅĐĩ ŅŅŅĐĩŅŅвŅва",
|
||||
"A file with the name {filename} already exists." : "ĐĐĩŅĐĩ ŅŅŅĐĩŅŅвŅва ŅаКĐģ Ņ Đ¸ĐŧĐĩŅĐž {filename}.",
|
||||
"Do you want to overwrite it?" : "ĐŅĐēаŅĐĩ Đģи да ĐŗĐž ĐŋŅĐĩСаĐŋиŅĐĩŅĐĩ?",
|
||||
"Overwrite file" : "ĐŅĐĩСаĐŋиŅи ŅаКĐģа",
|
||||
"Keep existing file" : "ĐаĐŋаСваĐŊĐĩ ĐŊа ŅŅŅĐĩŅŅвŅĐ˛Đ°Ņ ŅаКĐģ",
|
||||
"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" : "ĐСŅŅиŅи ĐēаŅŅи",
|
||||
"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}",
|
||||
"No participants found" : "ĐŅĐŧа ĐŊаĐŧĐĩŅĐĩĐŊи ŅŅаŅŅĐŊиŅи",
|
||||
"Board owner" : "ХОйŅŅвĐĩĐŊиĐē ĐŊа ŅайĐģĐž",
|
||||
"(Group)" : "(ĐŅŅĐŋа)",
|
||||
"Can edit" : "ĐĐžĐļĐĩ да ŅĐĩдаĐēŅиŅа",
|
||||
"Can share" : "ĐĐžĐļĐĩ да ŅĐŋОдĐĩĐģŅ",
|
||||
"Can manage" : "ĐĐžĐļĐĩ да ŅĐŋŅавĐģŅва",
|
||||
"Owner" : "ХОйŅŅвĐĩĐŊиĐē",
|
||||
"Delete" : "ĐСŅŅиваĐŊĐĩ",
|
||||
"List deleted" : "ĐĄĐŋиŅŅĐēŅŅ Đĩ иСŅŅиŅ",
|
||||
"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" : "ĐĐŧĐĩ ĐŊа ĐēаŅŅа",
|
||||
"title and color value must be provided" : "ŅŅŅйва да ŅĐĩ ĐŋŅĐĩĐ´ĐžŅŅавŅŅ ĐˇĐ°ĐŗĐģавиĐĩ и ŅŅОКĐŊĐžŅŅ ĐŊа ŅвĐĩŅа",
|
||||
"Edit" : "Đ ĐĩдаĐēŅиŅ",
|
||||
"Add a new tag" : "ĐОйавŅĐŊĐĩ ĐŊа ĐŊОв ĐĩŅиĐēĐĩŅ",
|
||||
"Board name" : "ĐĐŧĐĩ ĐŊа ŅайĐģĐž",
|
||||
"Members" : "ЧĐģĐĩĐŊОвĐĩ",
|
||||
"Assign a user to this cardâĻ" : "ĐаŅиŅĐģŅваĐŊĐĩ ĐŊа ĐŋĐžŅŅĐĩйиŅĐĩĐģ ĐŊа ŅаСи ĐēаŅŅа ...",
|
||||
"File to share" : "ФаКĐģ Са ŅĐŋОдĐĩĐģŅĐŊĐĩ",
|
||||
"Invalid path selected" : "ĐСйŅаĐŊ Đĩ ĐŊĐĩваĐģидĐĩĐŊ ĐŋŅŅ ",
|
||||
"Upload new files" : "ĐаŅи ĐŊОви ŅаКĐģОвĐĩ",
|
||||
"Share from Files" : "ĐĄĐŋОдĐĩĐģŅĐŊĐĩ ĐžŅ Đ¤Đ°ĐšĐģОвĐĩ",
|
||||
"Pending share" : "ЧаĐēаŅĐž ŅĐŋОдĐĩĐģŅĐŊĐĩ",
|
||||
"Add this attachment" : "ĐОйавĐĩŅĐĩ ŅОСи ĐŋŅиĐēаŅĐĩĐŊ ŅаКĐģ",
|
||||
"Show in Files" : "ĐĐžĐēаСваĐŊĐĩ вŅв ŅаКĐģОвĐĩ",
|
||||
"Download" : "ĐСŅĐĩĐŗĐģŅĐŊĐĩ",
|
||||
"Remove attachment" : "ĐŅĐĩĐŧаŅ
ваĐŊĐĩ ĐŊа ĐŋŅиĐēаŅĐĩĐŊ ŅаКĐģ",
|
||||
"Delete Attachment" : "ĐСŅŅиваĐŊĐĩ ĐŊа ĐŋŅиĐēаŅĐĩĐŊ ŅаКĐģ",
|
||||
"Restore Attachment" : "ĐŅСŅŅаĐŊОвŅваĐŊĐĩ ĐŊа ĐŋŅиĐēаŅĐĩĐŊ ŅаКĐģ",
|
||||
"Modified" : "ĐŅĐžĐŧŅĐŊа",
|
||||
"Created" : "ĐĄŅСдадĐĩĐŊ",
|
||||
"The title cannot be empty." : "ĐĐ°ĐŗĐģавиĐĩŅĐž ĐŊĐĩ ĐŧĐžĐļĐĩ да ĐąŅĐ´Đĩ ĐŋŅаСĐŊĐž.",
|
||||
"Open in sidebar view" : "ĐŅваŅŅĐŊĐĩ в Đ¸ĐˇĐŗĐģĐĩда ĐŊа ŅŅŅаĐŊиŅĐŊаŅа ĐģĐĩĐŊŅа",
|
||||
"Open in bigger view" : "ĐŅваŅŅ ŅĐĩ в ĐŋĐž-ĐŗĐžĐģŅĐŧ Đ¸ĐˇĐŗĐģĐĩĐ´",
|
||||
"Due date" : "ĐŅаКĐŊа даŅа",
|
||||
"Remove due date" : "ĐŅĐĩĐŧаŅ
ĐŊи ĐēŅаКĐŊаŅа даŅа",
|
||||
"Description" : "ĐĐŋиŅаĐŊиĐĩ",
|
||||
"Attachments" : "ĐŅиĐēаŅĐĩĐŊи ŅаКĐģОвĐĩ",
|
||||
"Comments" : "ĐĐžĐŧĐĩĐŊŅаŅи",
|
||||
"Failed to load comments" : "ĐĐĩŅŅĐŋĐĩŅĐŊĐž СаŅĐĩĐļдаĐŊĐĩ ĐŊа ĐēĐžĐŧĐĩĐŊŅаŅи",
|
||||
"No comments yet. Begin the discussion!" : "ĐŅĐĩ ĐžŅĐĩ ĐŊŅĐŧа ĐēĐžĐŧĐĩĐŊŅаŅи. ĐаĐŋĐžŅĐŊĐĩŅĐĩ диŅĐēŅŅиŅŅа!",
|
||||
"The comment cannot be empty." : "ĐĐžĐŧĐĩĐŊŅаŅŅŅ ĐŊĐĩ ĐŧĐžĐļĐĩ да ĐąŅĐ´Đĩ ĐŋŅаСĐĩĐŊ.",
|
||||
"The comment cannot be longer than 1000 characters." : "ĐĐžĐŧĐĩĐŊŅаŅŅŅ ĐŊĐĩ ĐŧĐžĐļĐĩ да ĐąŅĐ´Đĩ ĐŋĐž-Đ´ŅĐģŅĐŗ ĐžŅ 1000 СĐŊаĐēа.",
|
||||
"Modified" : "ĐŅĐžĐŧŅĐŊа",
|
||||
"Created" : "ĐĄŅСдадĐĩĐŊ",
|
||||
"Upload attachment" : "ĐаŅваĐŊĐĩ",
|
||||
"Save" : "ĐаĐŋаСваĐŊĐĩ",
|
||||
"Created:" : "ĐĄŅСдадĐĩĐŊĐž:",
|
||||
"In reply to" : "Đ ĐžŅĐŗĐžĐ˛ĐžŅ ĐŊа",
|
||||
"Cancel reply" : "ĐŅĐēаС ĐŊа ĐžŅĐŗĐžĐ˛ĐžŅ",
|
||||
"Reply" : "ĐŅĐŗĐžĐ˛ĐžŅи",
|
||||
"Update" : "ĐĐąĐŊОвŅваĐŊĐĩ",
|
||||
"Write a description âĻ" : "ĐаĐŋиŅĐĩŅĐĩ ĐžĐŋиŅаĐŊиĐĩ ...",
|
||||
"Description" : "ĐĐŋиŅаĐŊиĐĩ",
|
||||
"(Unsaved)" : " (ĐĐĩСаĐŋиŅаĐŊ)",
|
||||
"(SavingâĻ)" : "(ĐаĐŋиŅваĐŊĐĩ...)",
|
||||
"Formatting help" : "ĐĐžĐŧĐžŅ ĐˇĐ° ŅĐžŅĐŧаŅиŅаĐŊĐĩ",
|
||||
"Edit description" : "Đ ĐĩдаĐēŅиŅаĐŊĐĩ ĐŊа ĐžĐŋиŅаĐŊиĐĩŅĐž",
|
||||
"View description" : "ĐŅĐĩĐŗĐģĐĩĐ´ ĐŊа ĐžĐŋиŅаĐŊиĐĩŅĐž",
|
||||
"Add Attachment" : "ĐОйавŅĐŊĐĩ ĐŊа ĐŋŅиĐēаŅĐĩĐŊ ŅаКĐģ",
|
||||
"Choose attachment" : "ĐĐˇĐąĐžŅ ĐŊа ĐŋŅиĐēаŅĐĩĐŊ ŅаКĐģ",
|
||||
"Select Date" : "ĐСйĐĩŅĐĩŅĐĩ даŅа",
|
||||
"Set a due date" : "ĐадаваĐŊĐĩ ĐŊа ĐēŅаКĐŊа даŅа",
|
||||
"Remove due date" : "ĐŅĐĩĐŧаŅ
ĐŊи ĐēŅаКĐŊаŅа даŅа",
|
||||
"Mark as done" : "ĐаŅĐēиŅаК ĐēаŅĐž ĐŗĐžŅОвО",
|
||||
"Unarchive card" : "РаСаŅŅ
ивиŅаĐŊĐĩ ĐŊа ĐēаŅŅа",
|
||||
"Archive card" : "ĐŅŅ
ивиŅаĐŊĐĩ ĐŊа ĐēаŅŅа",
|
||||
"Assign a tag to this cardâĻ" : "ĐŅиŅвОŅваĐŊĐĩ ĐŊа ĐĩŅиĐēĐĩŅ ĐŊа ŅаСи ĐēаŅŅа ...",
|
||||
"(group)" : "(ĐŗŅŅĐŋа)",
|
||||
"{count} comments, {unread} unread" : "{count} ĐēĐžĐŧĐĩĐŊŅаŅи, {unread} ĐŊĐĩĐŋŅĐžŅĐĩŅĐĩĐŊи",
|
||||
"Todo items" : "ĐĐģĐĩĐŧĐĩĐŊŅи ĐŊа СадаŅа Са иСĐŋŅĐģĐŊĐĩĐŊиĐĩ",
|
||||
"Edit card title" : "Đ ĐĩдаĐēŅиŅаĐŊĐĩ ĐŊа ĐˇĐ°ĐŗĐģавиĐĩŅĐž ĐŊа ĐēаŅŅа",
|
||||
"Card deleted" : "ĐаŅŅаŅа Đĩ иСŅŅиŅа",
|
||||
"Edit title" : "Đ ĐĩдаĐēŅиŅаĐŊĐĩ ĐŊа ĐˇĐ°ĐŗĐģавиĐĩŅĐž",
|
||||
"Assign to me" : "ĐаŅиŅĐģŅваĐŊĐĩ ĐēŅĐŧ ĐŧĐĩĐŊ",
|
||||
"Unassign myself" : "ĐŅĐŧŅĐŊа ĐŊа СаŅиŅĐģŅваĐŊĐĩŅĐž ĐēŅĐŧ ĐŧĐĩĐŊ",
|
||||
"Delete card" : "ĐСŅŅиваĐŊĐĩ ĐŊа ĐēаŅŅа",
|
||||
"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" : "ĐĐžĐēаСваĐŊĐĩ ĐŊа ŅайĐģаŅа в ĐēаĐģĐĩĐŊĐ´Đ°Ņ / СадаŅи",
|
||||
"Cancel edit" : "ĐŅĐēаС ĐŊа ŅĐĩдаĐēŅиŅаĐŊĐĩ",
|
||||
"Board {0} deleted" : "ĐĸайĐģĐž {0} иСŅŅиŅĐž",
|
||||
"All cards" : "ĐŅиŅĐēи ĐēаŅŅи",
|
||||
"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?" : "ĐСŅŅиваĐŊĐĩ ĐŊа ŅайĐģĐžŅĐž?",
|
||||
"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" : " ĐаĐŋĐžĐŧĐŊŅĐŊĐ¸Ņ ĐˇĐ° ĐēŅаĐĩĐŊ ŅŅĐžĐē",
|
||||
"Assigned cards" : "ĐаŅиŅĐģĐĩĐŊи ĐēаŅŅи",
|
||||
"No notifications" : "ĐŅĐŧа иСвĐĩŅŅиŅ",
|
||||
"Delete board" : "ĐСŅŅиваĐŊĐĩ ĐŊа ŅайĐģĐž",
|
||||
"Clone cards" : " ĐĐģĐžĐŊиŅаĐŊĐĩ ĐŊа ĐēаŅŅи",
|
||||
"Advanced options" : "ĐĐžĐŋŅĐģĐŊиŅĐĩĐģĐŊи ĐžĐŋŅии",
|
||||
"Clone" : "ĐĐģĐžĐŊиŅаĐŊĐĩ",
|
||||
"Export as CSV" : "ĐĐēŅĐŋĐžŅŅиŅаĐŊĐĩ ĐēаŅĐž CSV ŅаКĐģ",
|
||||
"Export" : "ĐĐēŅĐŋĐžŅŅ /иСĐŊаŅŅĐŧ/",
|
||||
"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}",
|
||||
"* Created on {created}\n* Last modified on {lastMod}\n* {nbAttachments} attachments\n* {nbComments} comments" : "* ĐĄŅСдадĐĩĐŊ ĐŊа {created}\n* ĐĐžŅĐģĐĩĐ´ĐŊа ĐŋŅĐžĐŧŅĐŊа ĐŊа {lastMod} \n* {nbAttachments} ĐŋŅиĐēаŅĐĩĐŊи ŅаКĐģОвĐĩ \n* {nbComments} ĐēĐžĐŧĐĩĐŊŅаŅа",
|
||||
"{nbCards} cards" : "{nbCards} ĐēаŅŅи",
|
||||
"Due on {date}" : "ĐŅаĐĩĐŊ ŅŅĐžĐē Đ´Đž {date}",
|
||||
"{stack} in {board}" : "{stack} в {board}",
|
||||
"Click to expand description" : "ĐĐģиĐēваĐŊĐĩ Са ŅаСŅиŅŅваĐŊĐĩ ĐŊа ĐžĐŋиŅаĐŊиĐĩŅĐž",
|
||||
"Click to expand comment" : "ĐĐģиĐēваĐŊĐĩ Са ŅаСŅиŅŅваĐŊĐĩ ĐŊа ĐēĐžĐŧĐĩĐŊŅаŅа",
|
||||
"Create card" : "ĐĄŅСдаваĐŊĐĩ ĐŊа ĐēаŅŅа",
|
||||
"Create a new card" : "ĐĄŅСдаваĐŊĐĩ ĐŊа ĐŊОва ĐēаŅŅа",
|
||||
"Card title" : "ĐĐ°ĐŗĐģавиĐĩ ĐŊа ĐēаŅŅа",
|
||||
"Creating the new card âĻ" : "ĐĄŅСдаваĐŊĐĩ ĐŊа ĐŊОваŅа ĐēаŅŅа ...",
|
||||
"Card \"{card}\" was added to \"{board}\"" : "ĐаŅŅа \"{card}\" ĐąĐĩŅĐĩ дОйавĐĩĐŊа ĐēŅĐŧ \"{board}\"",
|
||||
"Open card" : "ĐŅваŅŅĐŊĐĩ ĐŊа ĐēаŅŅа",
|
||||
"Close" : "ĐаŅваŅŅĐŊĐĩ",
|
||||
"No upcoming cards" : "ĐŅĐŧа ĐŋŅĐĩĐ´ŅŅĐžŅŅи ĐēаŅŅи",
|
||||
"upcoming cards" : "ĐŋŅĐĩĐ´ŅŅĐžŅŅи ĐēаŅŅи",
|
||||
"New card" : "ĐОва ĐēаŅŅа",
|
||||
"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} Đĩ ĐŊадвиŅĐĩĐŊ",
|
||||
"Due date" : "ĐŅаКĐŊа даŅа",
|
||||
"Error creating the share" : "ĐŅĐĩŅĐēа ĐŋŅи ŅŅСдаваĐŊĐĩ ĐŊа ŅĐŋОдĐĩĐģŅĐŊĐĩ",
|
||||
"Share with a Deck card" : "ĐĄĐŋОдĐĩĐģŅĐŊĐĩ Ņ Deck ĐēаŅŅа",
|
||||
"Share {file} with a Deck card" : "ĐĄĐŋОдĐĩĐģŅĐŊĐĩ {file} Ņ Deck ĐēаŅŅа",
|
||||
"Share" : "ĐĄĐŋОдĐĩĐģŅĐŊĐĩ",
|
||||
"Personal" : "ĐиŅĐŊи",
|
||||
"To do" : "ĐадаŅи",
|
||||
"Doing" : "ĐадаŅи в ĐŋŅĐžŅĐĩŅ ĐŊа иСĐŋŅĐģĐŊĐĩĐŊиĐĩ",
|
||||
"Example Task 3" : "ĐŅиĐŧĐĩŅĐŊа СадаŅа 3",
|
||||
"Example Task 2" : "ĐŅиĐŧĐĩŅĐŊа СадаŅа 2",
|
||||
"Example Task 1" : "ĐŅиĐŧĐĩŅĐŊа СадаŅа 1",
|
||||
"Move card to another board" : "ĐŅĐĩĐŧĐĩŅŅваĐŊĐĩ ĐŊа ĐēаŅŅаŅа ĐŊа Đ´ŅŅĐŗĐž ŅайĐģĐž"
|
||||
"Settings" : "ĐаŅŅŅОКĐēи",
|
||||
"Share" : "ĐĄĐŋОдĐĩĐģи",
|
||||
"An error occurred" : "ĐŅСĐŊиĐēĐŊа ĐŗŅĐĩŅĐēа"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
}
|
||||
@@ -1,38 +1,27 @@
|
||||
OC.L10N.register(
|
||||
"deck",
|
||||
{
|
||||
"Personal" : "āĻŦā§āϝāĻā§āϤāĻŋāĻāϤ",
|
||||
"Done" : "Done",
|
||||
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "āĻāĻĒāϞā§āĻĄ āĻāϰāĻž āĻĢāĻžāĻāϞāĻāĻŋ HTML āĻĢāϰā§āĻŽā§ āĻāϞā§āϞāĻŋāĻāĻŋāϤ MAX_FILE_SIZE āύāĻŋāϰā§āϧāĻžāϰāĻŋāϤ āĻĢāĻžāĻāϞā§āϰ āϏāϰā§āĻŦā§āĻā§āĻ āĻāĻāĻžāϰ āĻ
āϤāĻŋāĻā§āϰāĻŽ āĻāϰāϤ⧠āĻāϞā§āĻā§ ",
|
||||
"No file was uploaded" : "āĻā§āύ āĻĢāĻžāĻāϞ āĻāĻĒāϞā§āĻĄ āĻāϰāĻž āĻšā§ āύāĻŋ",
|
||||
"Missing a temporary folder" : "āĻ
āϏā§āĻĨāĻžā§ā§ āĻĢā§āϞā§āĻĄāĻžāϰāĻāĻŋ āĻšāĻžāϰāĻžāύ⧠āĻāĻŋā§ā§āĻā§",
|
||||
"Done" : "Done",
|
||||
"Cancel" : "āĻŦāĻžāϤāĻŋāϰ",
|
||||
"Completed" : "āϏā§āϏāĻŽā§āĻĒāύā§āύ",
|
||||
"Details" : "āĻŦāĻŋāϏāϤāĻžāϰāĻŋāϤ",
|
||||
"Sharing" : "āĻāĻžāĻāĻžāĻāĻžāĻāĻŋāϰāϤ",
|
||||
"Tags" : "āĻā§āϝāĻžāĻ",
|
||||
"Activity" : "āϏāĻā§āϰāĻŋā§āϤāĻž",
|
||||
"Can edit" : "Can edit",
|
||||
"Can share" : "Can share",
|
||||
"Owner" : "Owner",
|
||||
"Delete" : "āĻŽā§āĻā§",
|
||||
"Edit" : "āϏāĻŽā§āĻĒāĻžāĻĻāύāĻž",
|
||||
"Download" : "āĻĄāĻžāĻāύāϞā§āĻĄ",
|
||||
"Description" : "āĻŦāĻŋāĻŦāϰāĻŖ",
|
||||
"Modified" : "āĻĒāϰāĻŋāĻŦāϰā§āϤāĻŋāϤ",
|
||||
"Save" : "āϏāĻāϰāĻā§āώāĻŖ",
|
||||
"Created:" : "āϤā§āϰā§āϰ āύāĻŋāϰā§āĻāύā§āĻāĻ",
|
||||
"Reply" : "āĻāĻŦāĻžāĻŦ",
|
||||
"Update" : "āĻĒāϰāĻŋāĻŦāϰā§āϧāύ",
|
||||
"Description" : "āĻŦāĻŋāĻŦāϰāĻŖ",
|
||||
"(group)" : "(āĻā§āώā§āĻ āĻŋ)",
|
||||
"seconds ago" : "āϏā§āĻā§āύā§āĻĄ āĻĒā§āϰā§āĻŦā§",
|
||||
"Keyboard shortcuts" : "āĻā§-āĻŦā§āϰā§āĻĄ āĻļāϰā§āĻāĻāĻžāĻ",
|
||||
"Search" : "Search",
|
||||
"Shared with you" : "Shared with you",
|
||||
"Export" : "āϰāĻĒā§āϤāĻžāύāĻŋ",
|
||||
"Today" : "āĻāĻ",
|
||||
"Tomorrow" : "āĻāĻāĻžāĻŽā§āĻāĻžāϞ",
|
||||
"Close" : "āĻŦāύā§āϧ",
|
||||
"Share" : "āĻāĻžāĻāĻžāĻāĻžāĻāĻŋ āĻāϰ",
|
||||
"Personal" : "āĻŦā§āϝāĻā§āϤāĻŋāĻāϤ"
|
||||
"Settings" : "āϏā§āĻāĻŋāĻāϏ",
|
||||
"Share" : "āĻāĻžāĻāĻžāĻāĻžāĻāĻŋ āĻāϰ"
|
||||
},
|
||||
"nplurals=2; plural=(n != 1);");
|
||||
|
||||
@@ -1,36 +1,25 @@
|
||||
{ "translations": {
|
||||
"Personal" : "āĻŦā§āϝāĻā§āϤāĻŋāĻāϤ",
|
||||
"Done" : "Done",
|
||||
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "āĻāĻĒāϞā§āĻĄ āĻāϰāĻž āĻĢāĻžāĻāϞāĻāĻŋ HTML āĻĢāϰā§āĻŽā§ āĻāϞā§āϞāĻŋāĻāĻŋāϤ MAX_FILE_SIZE āύāĻŋāϰā§āϧāĻžāϰāĻŋāϤ āĻĢāĻžāĻāϞā§āϰ āϏāϰā§āĻŦā§āĻā§āĻ āĻāĻāĻžāϰ āĻ
āϤāĻŋāĻā§āϰāĻŽ āĻāϰāϤ⧠āĻāϞā§āĻā§ ",
|
||||
"No file was uploaded" : "āĻā§āύ āĻĢāĻžāĻāϞ āĻāĻĒāϞā§āĻĄ āĻāϰāĻž āĻšā§ āύāĻŋ",
|
||||
"Missing a temporary folder" : "āĻ
āϏā§āĻĨāĻžā§ā§ āĻĢā§āϞā§āĻĄāĻžāϰāĻāĻŋ āĻšāĻžāϰāĻžāύ⧠āĻāĻŋā§ā§āĻā§",
|
||||
"Done" : "Done",
|
||||
"Cancel" : "āĻŦāĻžāϤāĻŋāϰ",
|
||||
"Completed" : "āϏā§āϏāĻŽā§āĻĒāύā§āύ",
|
||||
"Details" : "āĻŦāĻŋāϏāϤāĻžāϰāĻŋāϤ",
|
||||
"Sharing" : "āĻāĻžāĻāĻžāĻāĻžāĻāĻŋāϰāϤ",
|
||||
"Tags" : "āĻā§āϝāĻžāĻ",
|
||||
"Activity" : "āϏāĻā§āϰāĻŋā§āϤāĻž",
|
||||
"Can edit" : "Can edit",
|
||||
"Can share" : "Can share",
|
||||
"Owner" : "Owner",
|
||||
"Delete" : "āĻŽā§āĻā§",
|
||||
"Edit" : "āϏāĻŽā§āĻĒāĻžāĻĻāύāĻž",
|
||||
"Download" : "āĻĄāĻžāĻāύāϞā§āĻĄ",
|
||||
"Description" : "āĻŦāĻŋāĻŦāϰāĻŖ",
|
||||
"Modified" : "āĻĒāϰāĻŋāĻŦāϰā§āϤāĻŋāϤ",
|
||||
"Save" : "āϏāĻāϰāĻā§āώāĻŖ",
|
||||
"Created:" : "āϤā§āϰā§āϰ āύāĻŋāϰā§āĻāύā§āĻāĻ",
|
||||
"Reply" : "āĻāĻŦāĻžāĻŦ",
|
||||
"Update" : "āĻĒāϰāĻŋāĻŦāϰā§āϧāύ",
|
||||
"Description" : "āĻŦāĻŋāĻŦāϰāĻŖ",
|
||||
"(group)" : "(āĻā§āώā§āĻ āĻŋ)",
|
||||
"seconds ago" : "āϏā§āĻā§āύā§āĻĄ āĻĒā§āϰā§āĻŦā§",
|
||||
"Keyboard shortcuts" : "āĻā§-āĻŦā§āϰā§āĻĄ āĻļāϰā§āĻāĻāĻžāĻ",
|
||||
"Search" : "Search",
|
||||
"Shared with you" : "Shared with you",
|
||||
"Export" : "āϰāĻĒā§āϤāĻžāύāĻŋ",
|
||||
"Today" : "āĻāĻ",
|
||||
"Tomorrow" : "āĻāĻāĻžāĻŽā§āĻāĻžāϞ",
|
||||
"Close" : "āĻŦāύā§āϧ",
|
||||
"Share" : "āĻāĻžāĻāĻžāĻāĻžāĻāĻŋ āĻāϰ",
|
||||
"Personal" : "āĻŦā§āϝāĻā§āϤāĻŋāĻāϤ"
|
||||
"Settings" : "āϏā§āĻāĻŋāĻāϏ",
|
||||
"Share" : "āĻāĻžāĻāĻžāĻāĻžāĻāĻŋ āĻāϰ"
|
||||
},"pluralForm" :"nplurals=2; plural=(n != 1);"
|
||||
}
|
||||