forked from vikunja/frontend
Compare commits
238 Commits
fix/task-d
...
main
Author | SHA1 | Date |
---|---|---|
sdanthinne | ad5e72aaf1 | |
renovate | e2c9e83c2a | |
renovate | cd434a0e3e | |
renovate | 9f293af804 | |
renovate | b175e00cfe | |
Frederick [Bot] | 19dd82d62a | |
renovate | b3ddc9465a | |
renovate | 6b38f17d32 | |
renovate | 86449d4912 | |
renovate | 145d756251 | |
renovate | 838a11a2f6 | |
renovate | 3bfd3210b0 | |
renovate | e933bfa99e | |
renovate | f6a37a54d0 | |
primeapple | e00c9bb1af | |
kolaente | 018707c3d5 | |
renovate | 386727f6c5 | |
renovate | a29ce36d6c | |
renovate | 7aed16bd6f | |
renovate | b1f3ca6e59 | |
renovate | 4c0b8a06c5 | |
renovate | 60647c50ac | |
renovate | 59eaf1849e | |
renovate | fb57339050 | |
renovate | f9831a6ad8 | |
renovate | f25c67f80a | |
renovate | d3b0b97192 | |
renovate | fa3be219a8 | |
renovate | c22702d911 | |
renovate | b25c5ff547 | |
renovate | 2e0a097806 | |
renovate | c2083f7924 | |
renovate | 8923261e5b | |
renovate | 5391df56b0 | |
renovate | d2b1f5780e | |
renovate | 1717e968e1 | |
renovate | 2c29bb3971 | |
renovate | 37b8218a0a | |
konrad | ca7bbb5b91 | |
renovate | 2f3c008d2b | |
renovate | c2722b7c3d | |
renovate | 312abd907f | |
renovate | 1b73c1ed64 | |
renovate | d442d6653b | |
renovate | 758b8d6e2b | |
renovate | 416fd2e2a7 | |
renovate | 15a8335f1a | |
renovate | c689583669 | |
renovate | 7a43a7acc9 | |
renovate | 8843418161 | |
renovate | 7c1eab13ae | |
renovate | 5a69036da7 | |
renovate | 2ad3458873 | |
renovate | eb464343e8 | |
kolaente | 2f18d0cbad | |
renovate | 6cd463a514 | |
kolaente | 05b70632c5 | |
kolaente | ca9fe6ff21 | |
renovate | e5754300de | |
renovate | 65134048bf | |
renovate | 8339a99747 | |
renovate | 3e1ae41e70 | |
renovate | f757ba3441 | |
renovate | 6499c9cb5b | |
renovate | 28e5440d8b | |
renovate | fef8c4d0f4 | |
renovate | 99e5059c64 | |
renovate | 5df4f39d95 | |
renovate | 7ec5a70ccb | |
renovate | 72fcab6e78 | |
kolaente | 292c90425e | |
kolaente | b80f070431 | |
renovate | 03936c0403 | |
kolaente | 62825d2e64 | |
renovate | 5cd5caef45 | |
renovate | 798e8b529d | |
renovate | 0e3766c5a5 | |
renovate | 90207a4427 | |
renovate | 60993a886a | |
renovate | a6b42f9181 | |
renovate | 98fbd7c53c | |
renovate | 8d533f50e8 | |
renovate | 707459ec77 | |
renovate | faf7db649e | |
renovate | 202e71be48 | |
renovate | d6e8b418d3 | |
renovate | a9f41f6114 | |
renovate | f6f0d52518 | |
renovate | ccb9be42c2 | |
renovate | 179009bfe3 | |
renovate | 8c2bd94a9f | |
renovate | 7757166d75 | |
renovate | 7f03002972 | |
renovate | 8555006d9e | |
renovate | 713ad64658 | |
renovate | 0713d481e3 | |
renovate | ace0cf3588 | |
renovate | bba3bbfe89 | |
renovate | 754afc5496 | |
renovate | f1e8892ab5 | |
renovate | c11e192c4e | |
renovate | e9c704075d | |
renovate | 35edcb5672 | |
renovate | 4695798176 | |
renovate | 7a323fd170 | |
renovate | 1d6e4b6e32 | |
renovate | 5524aa7998 | |
renovate | 15ff2008e3 | |
renovate | 9bc2e6e165 | |
renovate | 344001856c | |
renovate | ad261fcc2f | |
renovate | 5142a0ae72 | |
renovate | 6d195f96c9 | |
Frederick [Bot] | 1917b217a8 | |
renovate | 1f6b01bc73 | |
renovate | d47a16aa8e | |
renovate | c57d00a74b | |
renovate | 77ea7fa0ee | |
kolaente | b92d780cda | |
kolaente | f14e721caf | |
renovate | 1ff6399112 | |
renovate | 503fb8da76 | |
renovate | f050cb7015 | |
renovate | 3670916f36 | |
Frederick [Bot] | 838a063eaa | |
renovate | e1b16b11d6 | |
Dominik Pschenitschni | 314cbf471f | |
Dominik Pschenitschni | a416d26f7c | |
Dominik Pschenitschni | 795b26e1dd | |
renovate | 14666cf9d8 | |
renovate | c938f31935 | |
kolaente | 35a52ef01b | |
renovate | 3b05ce3f10 | |
renovate | aec4fd7a2d | |
renovate | 2661af3a17 | |
renovate | 56f43bae3f | |
renovate | 84472d2e9c | |
renovate | c5afcd63b0 | |
renovate | 9bdb257814 | |
renovate | 5ad9891b16 | |
renovate | 7c04064917 | |
renovate | fb5383d86b | |
renovate | 68af314ec0 | |
renovate | 8b1de5ce09 | |
renovate | 724b6fe091 | |
renovate | 6648cd30c3 | |
kolaente | 8b90b45739 | |
renovate | 39be67eecf | |
Frederick [Bot] | 750f0ddeab | |
renovate | 6a5ece2f24 | |
Frederick [Bot] | 4ce33abfe6 | |
renovate | 5b7e1af87d | |
renovate | 59c6605b14 | |
Dominik Pschenitschni | 820d598ecd | |
Dominik Pschenitschni | a263ec1273 | |
renovate | b68892492c | |
renovate | 7c97695cec | |
renovate | e764f34a2d | |
renovate | 6892a28bb6 | |
renovate | 74d688b8d2 | |
renovate | ed84651046 | |
renovate | 7468ed21fa | |
renovate | d8015913c3 | |
Frederick [Bot] | 78789834f0 | |
Dominik Pschenitschni | 739fe0caa1 | |
Dominik Pschenitschni | 4703f9c4d5 | |
Dominik Pschenitschni | fd699ad777 | |
Dominik Pschenitschni | 0acf44778d | |
Dominik Pschenitschni | 8fc254d2db | |
Dominik Pschenitschni | 7d3b97d422 | |
kolaente | 4a34f245db | |
renovate | 973ea39a64 | |
renovate | f94a65ce7a | |
renovate | 432fbbea78 | |
renovate | e483f1cd2e | |
renovate | eb34f6e136 | |
Dominik Pschenitschni | 91e9eef582 | |
Dominik Pschenitschni | dea1789a00 | |
WofWca | 30adad5ae6 | |
renovate | 3ed6f939e5 | |
renovate | a337d22c1f | |
renovate | addfcf2510 | |
renovate | 303034f02c | |
renovate | 0fd44e9484 | |
renovate | 04040f20ba | |
konrad | 6c999ad148 | |
renovate | cc519e6773 | |
renovate | f9dcae4f65 | |
renovate | ade6c2cb18 | |
renovate | 4566b62a93 | |
renovate | 37d3ef24d2 | |
kolaente | 71265769ce | |
kolaente | a13c16ca03 | |
kolaente | a33fb72ef8 | |
kolaente | c5776264c0 | |
kolaente | 078d8b39a9 | |
kolaente | b77c7c2f45 | |
renovate | e369473dd0 | |
renovate | 70501f9da1 | |
renovate | 9bb7019b09 | |
renovate | df4fe7a644 | |
renovate | 2f009d0b27 | |
renovate | 70d7def7d7 | |
renovate | 0033407f96 | |
renovate | b10a2329ca | |
WofWca | 6870db4a72 | |
WofWca | 3643ffe0d0 | |
renovate | 02971f6ff9 | |
renovate | 7d3c34b004 | |
renovate | f3ea6fd4dc | |
renovate | bed6b81a58 | |
renovate | f9bf9139b8 | |
Dominik Pschenitschni | 96e2c81b7e | |
renovate | e62c00a187 | |
renovate | 611419888a | |
renovate | 5cc7e282bf | |
renovate | de0b71103c | |
renovate | 537e9e8044 | |
renovate | ac95c1fdc8 | |
renovate | b36da9e4d9 | |
renovate | e11ee3c136 | |
renovate | 887719ea24 | |
renovate | 14f1c3b26e | |
renovate | 2142729d38 | |
renovate | 9dcc2baae2 | |
renovate | 37c88d2974 | |
renovate | 36fd0deec4 | |
renovate | 4a4438d431 | |
renovate | 28a6745346 | |
renovate | 9ae0470879 | |
renovate | 927aed1161 | |
renovate | 7f3d7a656d | |
renovate | 040a8ce095 | |
Frederick [Bot] | 8974939bf2 | |
Dominik Pschenitschni | 846de369f2 | |
Frederick [Bot] | 4d865af423 | |
renovate | 62ad01fc8f | |
renovate | da0164b97d |
20
.drone.yml
20
.drone.yml
|
@ -42,11 +42,12 @@ steps:
|
|||
# - .cache
|
||||
|
||||
- name: dependencies
|
||||
image: node:18-alpine
|
||||
image: node:20-alpine
|
||||
pull: always
|
||||
environment:
|
||||
PNPM_CACHE_FOLDER: .cache/pnpm
|
||||
CYPRESS_CACHE_FOLDER: .cache/cypress
|
||||
PUPPETEER_SKIP_DOWNLOAD: true
|
||||
commands:
|
||||
- corepack enable && pnpm config set store-dir .cache/pnpm
|
||||
- pnpm install --fetch-timeout 100000
|
||||
|
@ -54,7 +55,7 @@ steps:
|
|||
# - restore-cache
|
||||
|
||||
- name: lint
|
||||
image: node:18-alpine
|
||||
image: node:20-alpine
|
||||
pull: always
|
||||
environment:
|
||||
PNPM_CACHE_FOLDER: .cache/pnpm
|
||||
|
@ -65,7 +66,7 @@ steps:
|
|||
- dependencies
|
||||
|
||||
- name: build-prod
|
||||
image: node:18-alpine
|
||||
image: node:20-alpine
|
||||
pull: always
|
||||
environment:
|
||||
PNPM_CACHE_FOLDER: .cache/pnpm
|
||||
|
@ -76,7 +77,7 @@ steps:
|
|||
- dependencies
|
||||
|
||||
- name: test-unit
|
||||
image: node:18-alpine
|
||||
image: node:20-alpine
|
||||
pull: always
|
||||
commands:
|
||||
- corepack enable && pnpm config set store-dir .cache/pnpm
|
||||
|
@ -86,7 +87,7 @@ steps:
|
|||
|
||||
- name: typecheck
|
||||
failure: ignore
|
||||
image: node:18-alpine
|
||||
image: node:20-alpine
|
||||
pull: always
|
||||
environment:
|
||||
PNPM_CACHE_FOLDER: .cache/pnpm
|
||||
|
@ -136,8 +137,9 @@ steps:
|
|||
# - dependencies
|
||||
|
||||
- name: deploy-preview
|
||||
image: node:18-alpine
|
||||
image: williamjackson/netlify-cli
|
||||
pull: always
|
||||
user: root # The rest runs as root and thus the permissions wouldn't work
|
||||
environment:
|
||||
NETLIFY_AUTH_TOKEN:
|
||||
from_secret: netlify_auth_token
|
||||
|
@ -200,7 +202,7 @@ steps:
|
|||
# - .cache
|
||||
|
||||
- name: build
|
||||
image: node:18-alpine
|
||||
image: node:20-alpine
|
||||
pull: always
|
||||
environment:
|
||||
PNPM_CACHE_FOLDER: .cache/pnpm
|
||||
|
@ -277,7 +279,7 @@ steps:
|
|||
# - .cache
|
||||
|
||||
- name: build
|
||||
image: node:18-alpine
|
||||
image: node:20-alpine
|
||||
pull: always
|
||||
environment:
|
||||
PNPM_CACHE_FOLDER: .cache/pnpm
|
||||
|
@ -522,6 +524,6 @@ steps:
|
|||
from_secret: crowdin_key
|
||||
---
|
||||
kind: signature
|
||||
hmac: 303afeb09b75a57ba88720b45dc06c8bf2c7320e19d738d8299f325438246f75
|
||||
hmac: 511c2a090e9efd4c942980d971204adb6321540bb01c92409dd9bf8463b7f6f4
|
||||
|
||||
...
|
||||
|
|
14
.npmrc
14
.npmrc
|
@ -1,2 +1,14 @@
|
|||
fetch-timeout=100000
|
||||
|
||||
# pnpm settings
|
||||
# The following settings prepare for the new default value of pnpm 8
|
||||
# they can be removed directly after having moved to pnpm 8
|
||||
auto-install-peers=true
|
||||
fetch-timeout=100000
|
||||
dedupe-peer-dependents=true
|
||||
resolve-peers-from-workspace-root=true
|
||||
save-workspace-protocol=rolling
|
||||
resolution-mode=lowest-direct
|
||||
publishConfig.linkDirectory=true
|
||||
|
||||
# remove some time after having moved to pnpm 8
|
||||
use-lockfile-v6=true
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
"lokalise.i18n-ally",
|
||||
"mgmcdermott.vscode-language-babel",
|
||||
"mikestead.dotenv",
|
||||
"Syler.sass-indented"
|
||||
"Syler.sass-indented",
|
||||
"zixuanchen.vitest-explorer"
|
||||
]
|
||||
}
|
|
@ -3,7 +3,7 @@
|
|||
# │─││ │││ │ │
|
||||
# ┘─┘┘─┘┘┘─┘┘─┘
|
||||
|
||||
FROM --platform=$BUILDPLATFORM node:18-alpine AS builder
|
||||
FROM --platform=$BUILDPLATFORM node:20-alpine AS builder
|
||||
|
||||
WORKDIR /build
|
||||
|
||||
|
@ -13,6 +13,7 @@ ENV PNPM_CACHE_FOLDER .cache/pnpm/
|
|||
|
||||
COPY package.json ./
|
||||
COPY pnpm-lock.yaml ./
|
||||
COPY patches /build/patches
|
||||
|
||||
RUN if [ "$USE_RELEASE" != true ]; then \
|
||||
# https://pnpm.io/installation#using-corepack
|
||||
|
|
|
@ -120,7 +120,7 @@ describe('Namepaces', () => {
|
|||
.should('not.contain', 'Archived')
|
||||
|
||||
// Show archived
|
||||
cy.get('[data-cy="show-archived-check"] label.check span')
|
||||
cy.get('[data-cy="show-archived-check"] .fancycheckbox__content')
|
||||
.should('be.visible')
|
||||
.click()
|
||||
cy.get('[data-cy="show-archived-check"] input')
|
||||
|
@ -129,7 +129,7 @@ describe('Namepaces', () => {
|
|||
.should('contain', 'Archived')
|
||||
|
||||
// Don't show archived
|
||||
cy.get('[data-cy="show-archived-check"] label.check span')
|
||||
cy.get('[data-cy="show-archived-check"] .fancycheckbox__content')
|
||||
.should('be.visible')
|
||||
.click()
|
||||
cy.get('[data-cy="show-archived-check"] input')
|
||||
|
|
|
@ -22,10 +22,10 @@ describe('Project View Table', () => {
|
|||
cy.get('.project-table .filter-container .items .button')
|
||||
.contains('Columns')
|
||||
.click()
|
||||
cy.get('.project-table .filter-container .card.columns-filter .card-content .fancycheckbox .check')
|
||||
cy.get('.project-table .filter-container .card.columns-filter .card-content .fancycheckbox')
|
||||
.contains('Priority')
|
||||
.click()
|
||||
cy.get('.project-table .filter-container .card.columns-filter .card-content .fancycheckbox .check')
|
||||
cy.get('.project-table .filter-container .card.columns-filter .card-content .fancycheckbox')
|
||||
.contains('Done')
|
||||
.click()
|
||||
|
||||
|
|
|
@ -96,7 +96,7 @@ describe('Task', () => {
|
|||
TaskFactory.create(1)
|
||||
|
||||
cy.visit('/projects/1/list')
|
||||
cy.get('.tasks .task .fancycheckbox label.check')
|
||||
cy.get('.tasks .task .fancycheckbox')
|
||||
.first()
|
||||
.click()
|
||||
cy.get('.global-notification')
|
||||
|
|
|
@ -1,11 +1,12 @@
|
|||
{
|
||||
"extends": "@vue/tsconfig/tsconfig.web.json",
|
||||
"extends": "@vue/tsconfig/tsconfig.dom.json",
|
||||
"include": ["./**/*", "../support/**/*", "../factories/**/*"],
|
||||
"compilerOptions": {
|
||||
"baseUrl": ".",
|
||||
"isolatedModules": false,
|
||||
"target": "ES2015",
|
||||
"lib": ["ESNext", "dom"],
|
||||
"types": ["cypress"]
|
||||
"types": ["cypress"],
|
||||
"ignoreDeprecations": "5.0"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
|
||||
pid /tmp/nginx.pid;
|
||||
worker_processes auto;
|
||||
worker_rlimit_nofile 65535;
|
||||
|
||||
events {
|
||||
multi_accept on;
|
||||
|
|
|
@ -3,6 +3,16 @@
|
|||
/// <reference types="cypress" />
|
||||
/// <reference types="@histoire/plugin-vue/components" />
|
||||
|
||||
declare module 'postcss-focus-within/browser' {
|
||||
import focusWithinInit from 'postcss-focus-within/browser'
|
||||
export default focusWithinInit
|
||||
}
|
||||
|
||||
declare module 'css-has-pseudo/browser' {
|
||||
import cssHasPseudo from 'css-has-pseudo/browser'
|
||||
export default cssHasPseudo
|
||||
}
|
||||
|
||||
interface ImportMetaEnv {
|
||||
readonly VITE_IS_ONLINE: boolean
|
||||
}
|
||||
|
|
|
@ -2,11 +2,11 @@
|
|||
"nodes": {
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1664753041,
|
||||
"narHash": "sha256-0ogaD8PaGHluARFeupofvk1Nq9gpVeZdlFM0Kcwguys=",
|
||||
"lastModified": 1680030621,
|
||||
"narHash": "sha256-qQa1NeS5Rvk2lgK5lSk986PC6I72yIHejzM8PFu+dHs=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "a62844b302507c7531ad68a86cb7aa54704c9cb4",
|
||||
"rev": "402cc3633cc60dfc50378197305c984518b30773",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
Binary file not shown.
Binary file not shown.
109
package.json
109
package.json
|
@ -13,7 +13,7 @@
|
|||
},
|
||||
"homepage": "https://vikunja.io/",
|
||||
"funding": "https://opencollective.com/vikunja",
|
||||
"packageManager": "pnpm@7.29.3",
|
||||
"packageManager": "pnpm@8.5.0",
|
||||
"keywords": [
|
||||
"todo",
|
||||
"productivity",
|
||||
|
@ -45,101 +45,100 @@
|
|||
"story:preview": "histoire preview"
|
||||
},
|
||||
"dependencies": {
|
||||
"@fortawesome/fontawesome-svg-core": "6.3.0",
|
||||
"@fortawesome/free-regular-svg-icons": "6.3.0",
|
||||
"@fortawesome/free-solid-svg-icons": "6.3.0",
|
||||
"@fortawesome/fontawesome-svg-core": "6.4.0",
|
||||
"@fortawesome/free-regular-svg-icons": "6.4.0",
|
||||
"@fortawesome/free-solid-svg-icons": "6.4.0",
|
||||
"@fortawesome/vue-fontawesome": "3.0.3",
|
||||
"@github/hotkey": "2.0.1",
|
||||
"@infectoone/vue-ganttastic": "2.1.4",
|
||||
"@intlify/unplugin-vue-i18n": "0.9.2",
|
||||
"@intlify/unplugin-vue-i18n": "0.10.0",
|
||||
"@kyvg/vue3-notification": "2.9.0",
|
||||
"@sentry/tracing": "7.43.0",
|
||||
"@sentry/vue": "7.43.0",
|
||||
"@types/is-touch-device": "1.0.0",
|
||||
"@types/lodash.clonedeep": "4.5.7",
|
||||
"@types/sortablejs": "1.15.1",
|
||||
"@vueuse/core": "9.13.0",
|
||||
"axios": "1.3.4",
|
||||
"@sentry/tracing": "7.51.2",
|
||||
"@sentry/vue": "7.51.2",
|
||||
"@vueuse/core": "10.1.2",
|
||||
"axios": "1.4.0",
|
||||
"blurhash": "2.0.5",
|
||||
"bulma-css-variables": "0.9.33",
|
||||
"camel-case": "4.1.2",
|
||||
"codemirror": "5.65.12",
|
||||
"date-fns": "2.29.3",
|
||||
"codemirror": "5.65.13",
|
||||
"date-fns": "2.30.0",
|
||||
"dayjs": "1.11.7",
|
||||
"dompurify": "3.0.1",
|
||||
"dompurify": "3.0.3",
|
||||
"easymde": "2.18.0",
|
||||
"fast-deep-equal": "3.1.3",
|
||||
"flatpickr": "4.6.13",
|
||||
"flexsearch": "0.7.31",
|
||||
"floating-vue": "2.0.0-beta.20",
|
||||
"focus-within": "3.0.2",
|
||||
"highlight.js": "11.7.0",
|
||||
"highlight.js": "11.8.0",
|
||||
"is-touch-device": "1.0.1",
|
||||
"klona": "2.0.6",
|
||||
"lodash.debounce": "4.0.8",
|
||||
"marked": "4.2.12",
|
||||
"pinia": "2.0.33",
|
||||
"marked": "5.0.2",
|
||||
"pinia": "2.0.36",
|
||||
"register-service-worker": "1.7.2",
|
||||
"snake-case": "3.0.4",
|
||||
"sortablejs": "1.15.0",
|
||||
"ufo": "1.1.1",
|
||||
"ufo": "1.1.2",
|
||||
"vue": "3.2.47",
|
||||
"vue-advanced-cropper": "2.8.8",
|
||||
"vue-flatpickr-component": "11.0.3",
|
||||
"vue-i18n": "9.2.2",
|
||||
"vue-router": "4.1.6",
|
||||
"vue-router": "4.2.0",
|
||||
"workbox-precaching": "6.5.4",
|
||||
"zhyswan-vuedraggable": "4.1.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@4tw/cypress-drag-drop": "2.2.3",
|
||||
"@cypress/vite-dev-server": "5.0.4",
|
||||
"@cypress/vue": "5.0.4",
|
||||
"@faker-js/faker": "7.6.0",
|
||||
"@histoire/plugin-screenshot": "0.15.8",
|
||||
"@histoire/plugin-vue": "0.15.8",
|
||||
"@cypress/vite-dev-server": "5.0.5",
|
||||
"@cypress/vue": "5.0.5",
|
||||
"@faker-js/faker": "8.0.0",
|
||||
"@histoire/plugin-screenshot": "0.16.1",
|
||||
"@histoire/plugin-vue": "0.16.1",
|
||||
"@rushstack/eslint-patch": "1.2.0",
|
||||
"@tsconfig/node18": "2.0.1",
|
||||
"@types/codemirror": "5.60.7",
|
||||
"@types/dompurify": "3.0.0",
|
||||
"@types/dompurify": "3.0.2",
|
||||
"@types/flexsearch": "0.7.3",
|
||||
"@types/focus-within": "1.0.1",
|
||||
"@types/is-touch-device": "1.0.0",
|
||||
"@types/lodash.debounce": "4.0.7",
|
||||
"@types/marked": "4.0.8",
|
||||
"@types/node": "18.15.3",
|
||||
"@types/marked": "4.3.0",
|
||||
"@types/node": "18.16.8",
|
||||
"@types/postcss-preset-env": "7.7.0",
|
||||
"@typescript-eslint/eslint-plugin": "5.55.0",
|
||||
"@typescript-eslint/parser": "5.55.0",
|
||||
"@vitejs/plugin-legacy": "4.0.2",
|
||||
"@vitejs/plugin-vue": "4.1.0",
|
||||
"@vue/eslint-config-typescript": "11.0.2",
|
||||
"@vue/test-utils": "2.3.1",
|
||||
"@vue/tsconfig": "0.1.3",
|
||||
"@types/sortablejs": "1.15.1",
|
||||
"@typescript-eslint/eslint-plugin": "5.59.5",
|
||||
"@typescript-eslint/parser": "5.59.5",
|
||||
"@vitejs/plugin-legacy": "4.0.3",
|
||||
"@vitejs/plugin-vue": "4.2.3",
|
||||
"@vue/eslint-config-typescript": "11.0.3",
|
||||
"@vue/test-utils": "2.3.2",
|
||||
"@vue/tsconfig": "0.4.0",
|
||||
"autoprefixer": "10.4.14",
|
||||
"browserslist": "4.21.5",
|
||||
"caniuse-lite": "1.0.30001465",
|
||||
"csstype": "3.1.1",
|
||||
"cypress": "12.8.1",
|
||||
"esbuild": "0.17.11",
|
||||
"eslint": "8.36.0",
|
||||
"eslint-plugin-vue": "9.9.0",
|
||||
"happy-dom": "8.9.0",
|
||||
"histoire": "0.15.8",
|
||||
"netlify-cli": "13.1.2",
|
||||
"postcss": "8.4.21",
|
||||
"caniuse-lite": "1.0.30001486",
|
||||
"css-has-pseudo": "5.0.2",
|
||||
"csstype": "3.1.2",
|
||||
"cypress": "12.12.0",
|
||||
"esbuild": "0.17.18",
|
||||
"eslint": "8.40.0",
|
||||
"eslint-plugin-vue": "9.12.0",
|
||||
"happy-dom": "9.10.9",
|
||||
"histoire": "0.16.1",
|
||||
"postcss": "8.4.23",
|
||||
"postcss-easing-gradients": "3.0.1",
|
||||
"postcss-easings": "3.0.1",
|
||||
"postcss-preset-env": "8.0.1",
|
||||
"rollup": "3.19.1",
|
||||
"postcss-focus-within": "7.0.2",
|
||||
"postcss-preset-env": "8.3.2",
|
||||
"rollup": "3.21.6",
|
||||
"rollup-plugin-visualizer": "5.9.0",
|
||||
"sass": "1.59.3",
|
||||
"sass": "1.62.1",
|
||||
"start-server-and-test": "2.0.0",
|
||||
"typescript": "4.9.5",
|
||||
"vite": "4.2.0",
|
||||
"typescript": "5.0.4",
|
||||
"vite": "4.3.5",
|
||||
"vite-plugin-inject-preload": "1.3.1",
|
||||
"vite-plugin-pwa": "0.14.4",
|
||||
"vite-plugin-pwa": "0.14.7",
|
||||
"vite-svg-loader": "4.0.0",
|
||||
"vitest": "0.29.3",
|
||||
"vue-tsc": "1.2.0",
|
||||
"vitest": "0.31.0",
|
||||
"vue-tsc": "1.6.4",
|
||||
"wait-on": "7.0.1",
|
||||
"workbox-cli": "6.5.4"
|
||||
},
|
||||
|
|
10739
pnpm-lock.yaml
10739
pnpm-lock.yaml
File diff suppressed because it is too large
Load Diff
|
@ -6,7 +6,7 @@
|
|||
],
|
||||
"packageRules": [
|
||||
{
|
||||
"matchPackageNames": ["netlify-cli", "happy-dom"],
|
||||
"matchPackageNames": ["happy-dom"],
|
||||
"extends": ["schedule:weekly"]
|
||||
},
|
||||
{
|
||||
|
|
|
@ -33,9 +33,9 @@ const promiseExec = cmd => {
|
|||
}
|
||||
|
||||
(async function () {
|
||||
let stdout = await promiseExec(`./node_modules/.bin/netlify link --id ${siteId}`)
|
||||
let stdout = await promiseExec(`/home/node/docker-netlify-cli/node_modules/.bin/netlify link --id ${siteId}`)
|
||||
console.log(stdout)
|
||||
stdout = await promiseExec(`./node_modules/.bin/netlify deploy --alias ${alias}`)
|
||||
stdout = await promiseExec(`/home/node/docker-netlify-cli/node_modules/.bin/netlify deploy --alias ${alias}`)
|
||||
console.log(stdout)
|
||||
|
||||
const data = await fetch(prIssueCommentsUrl).then(response => response.json())
|
||||
|
|
|
@ -1 +1 @@
|
|||
57af69409e66bc87f4f2fc5822dd8d3c2eb47c601f81af1ac4a56f3e2d80837b1a2de06f4ff57695ec379b7c15b881e3 ./scripts/deploy-preview-netlify.mjs
|
||||
4a7c1293c7b12e9ab476cdf35251a407c6a1cd005d22c06df994222cccfb25cde5f47d15866a098c9d739778fee4dc19 ./scripts/deploy-preview-netlify.mjs
|
||||
|
|
Binary file not shown.
|
@ -0,0 +1,4 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="18px" height="18px" viewBox="0 0 18 18" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5">
|
||||
<path d="M1,9 L1,3.5 C1,2 2,1 3.5,1 L14.5,1 C16,1 17,2 17,3.5 L17,14.5 C17,16 16,17 14.5,17 L3.5,17 C2,17 1,16 1,14.5 L1,9 Z" stroke-dasharray="60"></path>
|
||||
<polyline points="1 9 7 14 15 4" stroke-dasharray="22" stroke-dashoffset="66"></polyline>
|
||||
</svg>
|
After Width: | Height: | Size: 420 B |
|
@ -0,0 +1,54 @@
|
|||
<template>
|
||||
<div class="base-checkbox" v-cy="'checkbox'">
|
||||
<input
|
||||
type="checkbox"
|
||||
:id="checkboxId"
|
||||
class="is-sr-only"
|
||||
:checked="modelValue"
|
||||
@change="(event) => emit('update:modelValue', (event.target as HTMLInputElement).checked)"
|
||||
:disabled="disabled || undefined"
|
||||
/>
|
||||
|
||||
<slot name="label" :checkboxId="checkboxId">
|
||||
<label :for="checkboxId" class="base-checkbox__label">
|
||||
<slot/>
|
||||
</label>
|
||||
</slot>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import {ref} from 'vue'
|
||||
import {createRandomID} from '@/helpers/randomId'
|
||||
|
||||
defineProps({
|
||||
modelValue: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
disabled: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
})
|
||||
|
||||
const emit = defineEmits<{
|
||||
(event: 'update:modelValue', value: boolean): void
|
||||
}>()
|
||||
|
||||
const checkboxId = ref(`fancycheckbox_${createRandomID()}`)
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.base-checkbox__label {
|
||||
cursor: pointer;
|
||||
user-select: none;
|
||||
-webkit-tap-highlight-color: transparent;
|
||||
display: inline-flex;
|
||||
}
|
||||
|
||||
.base-checkbox:has(input:disabled) .base-checkbox__label {
|
||||
cursor:not-allowed;
|
||||
pointer-events: none;
|
||||
}
|
||||
</style>
|
|
@ -32,7 +32,7 @@ import {computed, ref} from 'vue'
|
|||
import {getInheritedBackgroundColor} from '@/helpers/getInheritedBackgroundColor'
|
||||
|
||||
const props = defineProps({
|
||||
/** Wheather the Expandable is open or not */
|
||||
/** Whether the Expandable is open or not */
|
||||
open: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
<script setup lang="ts">
|
||||
import datemathHelp from './datemathHelp.vue'
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<Story>
|
||||
<Variant title="Default">
|
||||
<datemathHelp />
|
||||
</Variant>
|
||||
</Story>
|
||||
</template>
|
|
@ -1,7 +1,8 @@
|
|||
<template>
|
||||
<card
|
||||
class="has-no-shadow how-it-works-modal"
|
||||
:title="$t('input.datemathHelp.title')">
|
||||
:title="$t('input.datemathHelp.title')"
|
||||
>
|
||||
<p>
|
||||
{{ $t('input.datemathHelp.intro') }}
|
||||
</p>
|
||||
|
@ -27,11 +28,11 @@
|
|||
</p>
|
||||
<p>{{ $t('misc.forExample') }}</p>
|
||||
<ul>
|
||||
<li><code>+1d</code>{{ $t('input.datemathHelp.add1Day') }}</li>
|
||||
<li><code>-1d</code>{{ $t('input.datemathHelp.minus1Day') }}</li>
|
||||
<li><code>/d</code>{{ $t('input.datemathHelp.roundDay') }}</li>
|
||||
<li><code>+1d</code> {{ $t('input.datemathHelp.add1Day') }}</li>
|
||||
<li><code>-1d</code> {{ $t('input.datemathHelp.minus1Day') }}</li>
|
||||
<li><code>/d</code> {{ $t('input.datemathHelp.roundDay') }}</li>
|
||||
</ul>
|
||||
<p>{{ $t('input.datemathHelp.supportedUnits') }}</p>
|
||||
<h3>{{ $t('input.datemathHelp.supportedUnits') }}</h3>
|
||||
<table class="table">
|
||||
<tbody>
|
||||
<tr>
|
||||
|
@ -69,7 +70,7 @@
|
|||
</tbody>
|
||||
</table>
|
||||
|
||||
<p>{{ $t('input.datemathHelp.someExamples') }}</p>
|
||||
<h3>{{ $t('input.datemathHelp.someExamples') }}</h3>
|
||||
<table class="table">
|
||||
<tbody>
|
||||
<tr>
|
||||
|
@ -100,7 +101,7 @@
|
|||
<td><code>{{ exampleDate }}||+1M/d</code></td>
|
||||
<td>
|
||||
<i18n-t keypath="input.datemathHelp.examples.datePlusMonth" scope="global">
|
||||
<code>{{ exampleDate }}</code>
|
||||
<strong>{{ exampleDate }}</strong>
|
||||
</i18n-t>
|
||||
</td>
|
||||
</tr>
|
||||
|
@ -110,13 +111,15 @@
|
|||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import {formatDate} from '@/helpers/time/formatDate'
|
||||
import {formatDateShort} from '@/helpers/time/formatDate'
|
||||
|
||||
import BaseButton from '@/components/base/BaseButton.vue'
|
||||
|
||||
const exampleDate = formatDate(new Date(), 'yyyy-MM-dd')
|
||||
const exampleDate = formatDateShort(new Date())
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
// FIXME: Remove style overwrites
|
||||
.how-it-works-modal {
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
|
|
@ -4,8 +4,11 @@ import { useNow } from '@vueuse/core'
|
|||
|
||||
import LogoFull from '@/assets/logo-full.svg?component'
|
||||
import LogoFullPride from '@/assets/logo-full-pride.svg?component'
|
||||
import {MILLISECONDS_A_HOUR} from '@/constants/date'
|
||||
|
||||
const now = useNow()
|
||||
const now = useNow({
|
||||
interval: MILLISECONDS_A_HOUR,
|
||||
})
|
||||
const Logo = computed(() => now.value.getMonth() === 5 ? LogoFullPride : LogoFull)
|
||||
</script>
|
||||
|
||||
|
|
|
@ -0,0 +1,71 @@
|
|||
<script lang="ts" setup>
|
||||
import {ref} from 'vue'
|
||||
import {logEvent} from 'histoire/client'
|
||||
import FancyCheckbox from './fancycheckbox.vue'
|
||||
|
||||
const isDisabled = ref<boolean | undefined>()
|
||||
|
||||
const isChecked = ref(false)
|
||||
|
||||
const isCheckedInitiallyEnabled = ref(true)
|
||||
|
||||
const isCheckedDisabled = ref(false)
|
||||
|
||||
const withoutInitialState = ref<boolean | undefined>()
|
||||
</script>
|
||||
|
||||
|
||||
<template>
|
||||
<Story :layout="{ type: 'grid', width: '200px' }">
|
||||
<Variant title="Default">
|
||||
<FancyCheckbox
|
||||
v-model="isChecked"
|
||||
:disabled="isDisabled"
|
||||
>
|
||||
This is probably not important
|
||||
</FancyCheckbox>
|
||||
|
||||
Visualisation
|
||||
<input type="checkbox" v-model="isChecked">
|
||||
{{ isChecked }}
|
||||
</Variant>
|
||||
<Variant title="Enabled Initially">
|
||||
<FancyCheckbox
|
||||
:disabled="isDisabled"
|
||||
v-model="isCheckedInitiallyEnabled"
|
||||
>
|
||||
We want you to use this option
|
||||
</FancyCheckbox>
|
||||
|
||||
Visualisation
|
||||
<input type="checkbox" v-model="isCheckedInitiallyEnabled">
|
||||
{{ isCheckedInitiallyEnabled }}
|
||||
</Variant>
|
||||
<Variant title="Disabled">
|
||||
<FancyCheckbox
|
||||
disabled
|
||||
:modelValue="isCheckedDisabled"
|
||||
@update:model-value="logEvent('Setting disabled: This should never happen', $event)"
|
||||
>
|
||||
You can't change this
|
||||
</FancyCheckbox>
|
||||
|
||||
Visualisation
|
||||
<input type="checkbox" v-model="isCheckedDisabled" disabled>
|
||||
{{ isCheckedDisabled }}
|
||||
</Variant>
|
||||
|
||||
<Variant title="Undefined initial State">
|
||||
<FancyCheckbox
|
||||
v-model="withoutInitialState"
|
||||
:disabled="isDisabled"
|
||||
>
|
||||
Not sure what the value should be
|
||||
</FancyCheckbox>
|
||||
|
||||
Visualisation
|
||||
<input type="checkbox" v-model="withoutInitialState" disabled>
|
||||
{{ withoutInitialState }}
|
||||
</Variant>
|
||||
</Story>
|
||||
</template>
|
|
@ -1,66 +1,42 @@
|
|||
<template>
|
||||
<div :class="{'is-disabled': disabled}" class="fancycheckbox">
|
||||
<input
|
||||
:checked="checked"
|
||||
:disabled="disabled || undefined"
|
||||
:id="checkBoxId"
|
||||
@change="(event: Event) => updateData((event.target as HTMLInputElement).checked)"
|
||||
type="checkbox"
|
||||
/>
|
||||
<label :for="checkBoxId" class="check" @click.prevent="check">
|
||||
<svg height="18px" viewBox="0 0 18 18" width="18px">
|
||||
<path
|
||||
d="M1,9 L1,3.5 C1,2 2,1 3.5,1 L14.5,1 C16,1 17,2 17,3.5 L17,14.5 C17,16 16,17 14.5,17 L3.5,17 C2,17 1,16 1,14.5 L1,9 Z"></path>
|
||||
<polyline points="1 9 7 14 15 4"></polyline>
|
||||
</svg>
|
||||
<span>
|
||||
<slot></slot>
|
||||
</span>
|
||||
</label>
|
||||
</div>
|
||||
<BaseCheckbox
|
||||
class="fancycheckbox"
|
||||
:class="{
|
||||
'is-disabled': disabled,
|
||||
'is-block': isBlock,
|
||||
}"
|
||||
:disabled="disabled"
|
||||
:model-value="modelValue"
|
||||
@update:model-value="value => emit('update:modelValue', value)"
|
||||
>
|
||||
<CheckboxIcon class="fancycheckbox__icon" />
|
||||
<span v-if="$slots.default" class="fancycheckbox__content">
|
||||
<slot/>
|
||||
</span>
|
||||
</BaseCheckbox>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import {ref, toRef, watch} from 'vue'
|
||||
import CheckboxIcon from '@/assets/checkbox.svg?component'
|
||||
|
||||
import {createRandomID} from '@/helpers/randomId'
|
||||
import BaseCheckbox from '@/components/base/BaseCheckbox.vue'
|
||||
|
||||
const checked = ref(false)
|
||||
const checkBoxId = `fancycheckbox_${createRandomID()}`
|
||||
|
||||
const props = defineProps({
|
||||
defineProps({
|
||||
modelValue: {
|
||||
type: Boolean,
|
||||
required: false,
|
||||
},
|
||||
disabled: {
|
||||
type: Boolean,
|
||||
required: false,
|
||||
},
|
||||
isBlock: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
})
|
||||
const emit = defineEmits(['update:modelValue', 'change'])
|
||||
|
||||
const modelValue = toRef(props, 'modelValue')
|
||||
|
||||
watch(
|
||||
modelValue,
|
||||
newValue => {
|
||||
checked.value = newValue
|
||||
},
|
||||
{immediate: true},
|
||||
)
|
||||
|
||||
function updateData(newChecked: boolean) {
|
||||
checked.value = newChecked
|
||||
emit('update:modelValue', newChecked)
|
||||
emit('change', newChecked)
|
||||
}
|
||||
|
||||
function check() {
|
||||
checked.value = !checked.value
|
||||
updateData(checked.value)
|
||||
}
|
||||
const emit = defineEmits<{
|
||||
(event: 'update:modelValue', value: boolean): void
|
||||
}>()
|
||||
</script>
|
||||
|
||||
|
||||
|
@ -70,75 +46,54 @@ function check() {
|
|||
padding-right: 5px;
|
||||
padding-top: 3px;
|
||||
|
||||
// FIXME: should be a prop
|
||||
&.is-block {
|
||||
display: block;
|
||||
margin: .5rem .2rem;
|
||||
}
|
||||
}
|
||||
|
||||
input[type=checkbox] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.check {
|
||||
cursor: pointer;
|
||||
position: relative;
|
||||
margin: auto;
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
-webkit-tap-highlight-color: transparent;
|
||||
transform: translate3d(0, 0, 0);
|
||||
}
|
||||
|
||||
span {
|
||||
.fancycheckbox__content {
|
||||
font-size: 0.8rem;
|
||||
vertical-align: top;
|
||||
padding-left: .5rem;
|
||||
}
|
||||
|
||||
svg {
|
||||
.fancycheckbox__icon:deep() {
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
fill: none;
|
||||
stroke-linecap: round;
|
||||
stroke-linejoin: round;
|
||||
stroke: #c8ccd4;
|
||||
stroke-width: 1.5;
|
||||
stroke: var(--stroke-color, #c8ccd4);
|
||||
transform: translate3d(0, 0, 0);
|
||||
transition: all 0.2s ease;
|
||||
}
|
||||
|
||||
.check:hover svg {
|
||||
stroke: var(--primary);
|
||||
}
|
||||
|
||||
.is-disabled .check:hover svg {
|
||||
stroke: #c8ccd4;
|
||||
}
|
||||
|
||||
path {
|
||||
stroke-dasharray: 60;
|
||||
stroke-dashoffset: 0;
|
||||
}
|
||||
|
||||
polyline {
|
||||
stroke-dasharray: 22;
|
||||
stroke-dashoffset: 66;
|
||||
}
|
||||
|
||||
input[type=checkbox]:checked + .check {
|
||||
svg {
|
||||
stroke: var(--primary);
|
||||
path,
|
||||
polyline {
|
||||
transition: all 0.2s linear, color 0.2s ease;
|
||||
}
|
||||
}
|
||||
|
||||
.fancycheckbox:not(:has(input:disabled)):hover .fancycheckbox__icon,
|
||||
.fancycheckbox:has(input:checked) .fancycheckbox__icon {
|
||||
--stroke-color: var(--primary);
|
||||
}
|
||||
</style>
|
||||
|
||||
<style lang="scss">
|
||||
// Since css-has-pseudo doesn't work with deep classes,
|
||||
// the following rules can't be scoped
|
||||
|
||||
.fancycheckbox:has(:not(input:checked)) .fancycheckbox__icon {
|
||||
path {
|
||||
transition-delay: 0.05s;
|
||||
}
|
||||
}
|
||||
|
||||
.fancycheckbox:has(input:checked) .fancycheckbox__icon {
|
||||
path {
|
||||
stroke-dashoffset: 60;
|
||||
transition: all 0.3s linear;
|
||||
}
|
||||
|
||||
polyline {
|
||||
stroke-dashoffset: 42;
|
||||
transition: all 0.2s linear;
|
||||
transition-delay: 0.15s;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -140,6 +140,18 @@ export const KEYBOARD_SHORTCUTS : ShortcutGroup[] = [
|
|||
title: 'keyboardShortcuts.task.description',
|
||||
keys: ['e'],
|
||||
},
|
||||
{
|
||||
title: 'keyboardShortcuts.task.priority',
|
||||
keys: ['p'],
|
||||
},
|
||||
{
|
||||
title: 'keyboardShortcuts.task.delete',
|
||||
keys: ['shift', 'delete'],
|
||||
},
|
||||
{
|
||||
title: 'keyboardShortcuts.task.favorite',
|
||||
keys: ['s'],
|
||||
},
|
||||
],
|
||||
},
|
||||
]
|
||||
]
|
|
@ -49,9 +49,11 @@ const displayName = computed(() => getDisplayName(props.user))
|
|||
<style lang="scss" scoped>
|
||||
.user {
|
||||
margin: .5rem;
|
||||
display: flex;
|
||||
justify-items: center;
|
||||
|
||||
&.is-inline {
|
||||
display: inline;
|
||||
display: inline-flex;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -145,12 +145,13 @@ function to(n, index) {
|
|||
|
||||
.trigger-button {
|
||||
width: 100%;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.unread-indicator {
|
||||
position: absolute;
|
||||
top: .75rem;
|
||||
right: 1.15rem;
|
||||
top: 1rem;
|
||||
right: .5rem;
|
||||
width: .75rem;
|
||||
height: .75rem;
|
||||
|
||||
|
|
|
@ -38,9 +38,8 @@
|
|||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import {computed, ref, watch, toRefs} from 'vue'
|
||||
import {computed, ref, watch, toRefs, onActivated} from 'vue'
|
||||
import {useRouter} from 'vue-router'
|
||||
import {useNow} from '@vueuse/core'
|
||||
|
||||
import {getHexColor} from '@/models/task'
|
||||
|
||||
|
@ -157,7 +156,8 @@ function openTask(e: {
|
|||
|
||||
const weekDayFromDate = useWeekDayFromDate()
|
||||
|
||||
const today = useNow()
|
||||
const today = ref(new Date())
|
||||
onActivated(() => today.value = new Date())
|
||||
const dateIsToday = computed(() => (date: Date) => {
|
||||
return (
|
||||
date.getDate() === today.value.getDate() &&
|
||||
|
|
|
@ -442,5 +442,6 @@ async function toggleTaskDone(task: ITask) {
|
|||
.task-done-checkbox {
|
||||
padding: 0;
|
||||
height: 18px; // The exact height of the checkbox in the container
|
||||
margin-right: .75rem;
|
||||
}
|
||||
</style>
|
|
@ -1,12 +1,8 @@
|
|||
<template>
|
||||
<router-link
|
||||
:to="taskDetailRoute"
|
||||
:class="{'is-loading': taskService.loading}"
|
||||
class="task loader-container"
|
||||
>
|
||||
<div :class="{'is-loading': taskService.loading}" class="task loader-container">
|
||||
<fancycheckbox
|
||||
:disabled="(isArchived || disabled) && !canMarkAsDone"
|
||||
@change="markAsDone"
|
||||
@update:model-value="markAsDone"
|
||||
v-model="task.done"
|
||||
/>
|
||||
|
||||
|
@ -16,7 +12,8 @@
|
|||
class="mr-1"
|
||||
/>
|
||||
|
||||
<div
|
||||
<router-link
|
||||
:to="taskDetailRoute"
|
||||
:class="{ 'done': task.done, 'show-project': showProject && project !== null}"
|
||||
class="tasktext"
|
||||
>
|
||||
|
@ -96,7 +93,7 @@
|
|||
</span>
|
||||
|
||||
<checklist-summary :task="task"/>
|
||||
</div>
|
||||
</router-link>
|
||||
|
||||
<progress
|
||||
class="progress is-small"
|
||||
|
@ -117,14 +114,14 @@
|
|||
|
||||
<BaseButton
|
||||
:class="{'is-favorite': task.isFavorite}"
|
||||
@click.prevent="toggleFavorite"
|
||||
@click="toggleFavorite"
|
||||
class="favorite"
|
||||
>
|
||||
<icon icon="star" v-if="task.isFavorite"/>
|
||||
<icon :icon="['far', 'star']" v-else/>
|
||||
</BaseButton>
|
||||
<slot />
|
||||
</router-link>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
|
@ -288,11 +285,7 @@ function hideDeferDueDatePopup(e) {
|
|||
border-radius: $radius;
|
||||
border: 2px solid transparent;
|
||||
|
||||
color: var(--text);
|
||||
transition: color ease $transition-duration;
|
||||
|
||||
&:hover {
|
||||
color: var(--grey-900);
|
||||
background-color: var(--grey-100);
|
||||
}
|
||||
|
||||
|
@ -338,6 +331,15 @@ function hideDeferDueDatePopup(e) {
|
|||
|
||||
}
|
||||
|
||||
a {
|
||||
color: var(--text);
|
||||
transition: color ease $transition-duration;
|
||||
|
||||
&:hover {
|
||||
color: var(--grey-900);
|
||||
}
|
||||
}
|
||||
|
||||
.favorite {
|
||||
opacity: 1;
|
||||
text-align: center;
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
import {computed} from 'vue'
|
||||
import {computed, onActivated, ref} from 'vue'
|
||||
import {useI18n} from 'vue-i18n'
|
||||
import {useNow} from '@vueuse/core'
|
||||
|
||||
import {useAuthStore} from '@/stores/auth'
|
||||
import {hourToDaytime} from '@/helpers/hourToDaytime'
|
||||
|
@ -9,7 +8,8 @@ export type Daytime = 'night' | 'morning' | 'day' | 'evening'
|
|||
|
||||
export function useDaytimeSalutation() {
|
||||
const {t} = useI18n({useScope: 'global'})
|
||||
const now = useNow()
|
||||
const now = ref(new Date())
|
||||
onActivated(() => now.value = new Date())
|
||||
const authStore = useAuthStore()
|
||||
|
||||
const name = computed(() => authStore.userDisplayName)
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import { computed } from 'vue'
|
||||
import type { Ref } from 'vue'
|
||||
import {computed} from 'vue'
|
||||
import type {Ref} from 'vue'
|
||||
|
||||
import {useTitle as useTitleVueUse, resolveRef} from '@vueuse/core'
|
||||
import {useTitle as useTitleVueUse, toRef} from '@vueuse/core'
|
||||
|
||||
type UseTitleParameters = Parameters<typeof useTitleVueUse>
|
||||
|
||||
|
@ -9,12 +9,12 @@ export function useTitle(...args: UseTitleParameters) {
|
|||
|
||||
const [newTitle, ...restArgs] = args
|
||||
|
||||
const pageTitle = resolveRef(newTitle) as Ref<string>
|
||||
const pageTitle = toRef(newTitle) as Ref<string>
|
||||
|
||||
const completeTitle = computed(() =>
|
||||
const completeTitle = computed(() =>
|
||||
(typeof pageTitle.value === 'undefined' || pageTitle.value === '')
|
||||
? 'Vikunja'
|
||||
: `${pageTitle.value} | Vikunja`,
|
||||
? 'Vikunja'
|
||||
: `${pageTitle.value} | Vikunja`,
|
||||
)
|
||||
|
||||
return useTitleVueUse(completeTitle, ...restArgs)
|
||||
|
|
|
@ -6,13 +6,11 @@ declare global {
|
|||
}
|
||||
}
|
||||
|
||||
const cypressDirective: Directive = {
|
||||
mounted(el, {value}) {
|
||||
if (
|
||||
(window.Cypress || import.meta.env.DEV) &&
|
||||
value
|
||||
) {
|
||||
el.setAttribute('data-cy', value)
|
||||
const cypressDirective = <Directive<HTMLElement,string>>{
|
||||
mounted(el, {arg, value}) {
|
||||
const testingId = arg || value
|
||||
if ((window.Cypress || import.meta.env.DEV) && testingId) {
|
||||
el.setAttribute('data-cy', testingId)
|
||||
}
|
||||
},
|
||||
beforeUnmount(el) {
|
||||
|
|
|
@ -6,16 +6,16 @@ export const ERROR_NO_API_URL = 'noApiUrlProvided'
|
|||
|
||||
|
||||
export const checkAndSetApiUrl = (url: string): Promise<string> => {
|
||||
if(url.startsWith('/')) {
|
||||
if (url.startsWith('/')) {
|
||||
url = window.location.host + url
|
||||
}
|
||||
|
||||
// Check if the url has an http prefix
|
||||
|
||||
// Check if the url has a http prefix
|
||||
if (
|
||||
!url.startsWith('http://') &&
|
||||
!url.startsWith('https://')
|
||||
) {
|
||||
url = `http://${url}`
|
||||
url = `${window.location.protocol}//${url}`
|
||||
}
|
||||
|
||||
const urlToCheck: URL = new URL(url)
|
||||
|
@ -41,15 +41,6 @@ export const checkAndSetApiUrl = (url: string): Promise<string> => {
|
|||
}
|
||||
throw e
|
||||
})
|
||||
.catch(e => {
|
||||
// Check if it has a port and if not check if it is reachable at https
|
||||
if (urlToCheck.protocol === 'http:') {
|
||||
urlToCheck.protocol = 'https:'
|
||||
window.API_URL = urlToCheck.toString()
|
||||
return updateConfig()
|
||||
}
|
||||
throw e
|
||||
})
|
||||
.catch(e => {
|
||||
// Check if it is reachable at /api/v1 and https
|
||||
urlToCheck.pathname = origUrlToCheck.pathname
|
||||
|
@ -66,7 +57,6 @@ export const checkAndSetApiUrl = (url: string): Promise<string> => {
|
|||
.catch(e => {
|
||||
// Check if it is reachable at port API_DEFAULT_PORT and https
|
||||
if (urlToCheck.port !== API_DEFAULT_PORT) {
|
||||
urlToCheck.protocol = 'https:'
|
||||
urlToCheck.port = API_DEFAULT_PORT
|
||||
window.API_URL = urlToCheck.toString()
|
||||
return updateConfig()
|
||||
|
@ -74,30 +64,7 @@ export const checkAndSetApiUrl = (url: string): Promise<string> => {
|
|||
throw e
|
||||
})
|
||||
.catch(e => {
|
||||
// Check if it is reachable at :API_DEFAULT_PORT and /api/v1 and https
|
||||
urlToCheck.pathname = origUrlToCheck.pathname
|
||||
if (
|
||||
!urlToCheck.pathname.endsWith('/api/v1') &&
|
||||
!urlToCheck.pathname.endsWith('/api/v1/')
|
||||
) {
|
||||
urlToCheck.pathname = `${urlToCheck.pathname}api/v1`
|
||||
window.API_URL = urlToCheck.toString()
|
||||
return updateConfig()
|
||||
}
|
||||
throw e
|
||||
})
|
||||
.catch(e => {
|
||||
// Check if it is reachable at port API_DEFAULT_PORT and http
|
||||
if (urlToCheck.port !== API_DEFAULT_PORT) {
|
||||
urlToCheck.protocol = 'http:'
|
||||
urlToCheck.port = API_DEFAULT_PORT
|
||||
window.API_URL = urlToCheck.toString()
|
||||
return updateConfig()
|
||||
}
|
||||
throw e
|
||||
})
|
||||
.catch(e => {
|
||||
// Check if it is reachable at :API_DEFAULT_PORT and /api/v1 and http
|
||||
// Check if it is reachable at :API_DEFAULT_PORT and /api/v1
|
||||
urlToCheck.pathname = origUrlToCheck.pathname
|
||||
if (
|
||||
!urlToCheck.pathname.endsWith('/api/v1') &&
|
||||
|
@ -118,7 +85,7 @@ export const checkAndSetApiUrl = (url: string): Promise<string> => {
|
|||
localStorage.setItem('API_URL', window.API_URL)
|
||||
return window.API_URL
|
||||
}
|
||||
|
||||
|
||||
throw new Error(ERROR_NO_API_URL)
|
||||
})
|
||||
}
|
||||
|
|
|
@ -48,7 +48,7 @@ export function parseSubtasksViaIndention(taskTitles: string): TaskWithParent[]
|
|||
task.title = cleanupTitle(title.replace(spaceRegex, ''))
|
||||
task.parent = task.parent.replace(spaceRegex, '')
|
||||
if (task.project === null) {
|
||||
// This allows to specify a list once for the parent task and inherit it to all subtasks
|
||||
// This allows to specify a project once for the parent task and inherit it to all subtasks
|
||||
task.project = getProjectFromPrefix(task.parent)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -129,7 +129,7 @@ const addTimeToDate = (text: string, date: Date, previousMatch: string | null):
|
|||
}
|
||||
|
||||
export const getDateFromText = (text: string, now: Date = new Date()) => {
|
||||
const fullDateRegex = / ([0-9][0-9]?\/[0-9][0-9]?\/[0-9][0-9]([0-9][0-9])?|[0-9][0-9][0-9][0-9]\/[0-9][0-9]?\/[0-9][0-9]?|[0-9][0-9][0-9][0-9]-[0-9][0-9]?-[0-9][0-9]?)/ig
|
||||
const fullDateRegex = /(^| )([0-9][0-9]?\/[0-9][0-9]?\/[0-9][0-9]([0-9][0-9])?|[0-9][0-9][0-9][0-9]\/[0-9][0-9]?\/[0-9][0-9]?|[0-9][0-9][0-9][0-9]-[0-9][0-9]?-[0-9][0-9]?)/ig
|
||||
|
||||
// 1. Try parsing the text as a "usual" date, like 2021-06-24 or 06/24/2021
|
||||
let results: string[] | null = fullDateRegex.exec(text)
|
||||
|
@ -138,7 +138,7 @@ export const getDateFromText = (text: string, now: Date = new Date()) => {
|
|||
let containsYear = true
|
||||
if (result === null) {
|
||||
// 2. Try parsing the date as something like "jan 21" or "21 jan"
|
||||
const monthRegex = new RegExp(` (${monthsRegexGroup} [0-9][0-9]?|[0-9][0-9]? ${monthsRegexGroup})`, 'ig')
|
||||
const monthRegex = new RegExp(`(^| )(${monthsRegexGroup} [0-9][0-9]?|[0-9][0-9]? ${monthsRegexGroup})`, 'ig')
|
||||
results = monthRegex.exec(text)
|
||||
result = results === null ? null : `${results[0]} ${now.getFullYear()}`.trim()
|
||||
foundText = results === null ? '' : results[0].trim()
|
||||
|
@ -146,7 +146,7 @@ export const getDateFromText = (text: string, now: Date = new Date()) => {
|
|||
|
||||
if (result === null) {
|
||||
// 3. Try parsing the date as "27/01" or "01/27"
|
||||
const monthNumericRegex = / ([0-9][0-9]?\/[0-9][0-9]?)/ig
|
||||
const monthNumericRegex = /(^| )([0-9][0-9]?\/[0-9][0-9]?)/ig
|
||||
results = monthNumericRegex.exec(text)
|
||||
|
||||
// Put the year before or after the date, depending on what works
|
||||
|
@ -299,7 +299,7 @@ const getDateFromWeekday = (text: string): dateFoundResult => {
|
|||
}
|
||||
|
||||
const getDayFromText = (text: string) => {
|
||||
const matcher = /($| )(([1-2][0-9])|(3[01])|(0?[1-9]))(st|nd|rd|th|\.)($| )/ig
|
||||
const matcher = /(^| )(([1-2][0-9])|(3[01])|(0?[1-9]))(st|nd|rd|th|\.)($| )/ig
|
||||
const results = matcher.exec(text)
|
||||
if (results === null) {
|
||||
return {
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import { defineSetupVue3 } from '@histoire/plugin-vue'
|
||||
import './polyfills'
|
||||
import {defineSetupVue3} from '@histoire/plugin-vue'
|
||||
import {i18n} from './i18n'
|
||||
|
||||
// import './histoire.css' // Import global CSS
|
||||
|
@ -6,18 +7,21 @@ import './styles/global.scss'
|
|||
|
||||
import {createPinia} from 'pinia'
|
||||
|
||||
import cypress from '@/directives/cypress'
|
||||
|
||||
import FontAwesomeIcon from '@/components/misc/Icon'
|
||||
import XButton from '@/components/input/button.vue'
|
||||
import Modal from '@/components/misc/modal.vue'
|
||||
import Card from '@/components/misc/card.vue'
|
||||
|
||||
|
||||
export const setupVue3 = defineSetupVue3(({ app }) => {
|
||||
// Add Pinia store
|
||||
const pinia = createPinia()
|
||||
app.use(pinia)
|
||||
app.use(i18n)
|
||||
|
||||
app.directive('cy', cypress)
|
||||
|
||||
app.component('icon', FontAwesomeIcon)
|
||||
app.component('XButton', XButton)
|
||||
app.component('modal', Modal)
|
||||
|
|
|
@ -15,7 +15,7 @@ export const SUPPORTED_LOCALES = {
|
|||
'pt-PT': 'Português',
|
||||
'zh-CN': 'Chinese',
|
||||
'no-NO': 'Norsk Bokmål',
|
||||
} as Record<string, string>
|
||||
} as const
|
||||
|
||||
export type SupportedLocale = keyof typeof SUPPORTED_LOCALES
|
||||
|
||||
|
@ -23,12 +23,12 @@ export const DEFAULT_LANGUAGE: SupportedLocale= 'en'
|
|||
|
||||
export type ISOLanguage = string
|
||||
|
||||
// we load all messsages async
|
||||
// we load all messages async
|
||||
export const i18n = createI18n({
|
||||
fallbackLocale: DEFAULT_LANGUAGE,
|
||||
legacy: false,
|
||||
messages: {
|
||||
en: langEN,
|
||||
[DEFAULT_LANGUAGE]: langEN,
|
||||
} as Record<SupportedLocale, any>,
|
||||
})
|
||||
|
||||
|
@ -54,16 +54,16 @@ export async function setLanguage(lang: SupportedLocale = getCurrentLanguage()):
|
|||
}
|
||||
|
||||
export function getCurrentLanguage(): SupportedLocale {
|
||||
const savedLanguage = localStorage.getItem('language')
|
||||
const savedLanguage = localStorage.getItem('language') as SupportedLocale | null
|
||||
if (savedLanguage !== null) {
|
||||
return savedLanguage
|
||||
}
|
||||
|
||||
const browserLanguage = navigator.language
|
||||
|
||||
const language: SupportedLocale | undefined = Object.keys(SUPPORTED_LOCALES).find(langKey => {
|
||||
const language = Object.keys(SUPPORTED_LOCALES).find(langKey => {
|
||||
return langKey === browserLanguage || langKey.startsWith(browserLanguage + '-')
|
||||
})
|
||||
}) as SupportedLocale | undefined
|
||||
|
||||
return language || DEFAULT_LANGUAGE
|
||||
}
|
||||
|
|
|
@ -529,7 +529,7 @@
|
|||
"code": "Code",
|
||||
"quote": "Quote",
|
||||
"unorderedList": "Unordered List",
|
||||
"orderedList ": "Ordered List",
|
||||
"orderedList": "Ordered List",
|
||||
"cleanBlock": "Clean Block",
|
||||
"link": "Link",
|
||||
"image": "Image",
|
||||
|
@ -566,14 +566,14 @@
|
|||
"canuse": "You can use date math to filter for relative dates.",
|
||||
"learnhow": "Check out how it works",
|
||||
"title": "Date Math",
|
||||
"intro": "Date Math allows you to specify relative dates which are resolved on the fly by Vikunja when applying the filter.",
|
||||
"intro": "Specify relative dates which are resolved on the fly by Vikunja when applying the filter.",
|
||||
"expression": "Each Date Math expression starts with an anchor date, which can either be {0}, or a date string ending with {1}. This anchor date can optionally be followed by one or more maths expressions.",
|
||||
"similar": "These expressions are similar to the ones provided by {0} and {1}.",
|
||||
"add1Day": "Add one day",
|
||||
"minus1Day": "Subtract one day",
|
||||
"roundDay": "Round down to the nearest day",
|
||||
"supportedUnits": "Supported time units are:",
|
||||
"someExamples": "Some examples of time expressions:",
|
||||
"supportedUnits": "Supported time units",
|
||||
"someExamples": "Examples of time expressions",
|
||||
"units": {
|
||||
"seconds": "Seconds",
|
||||
"minutes": "Minutes",
|
||||
|
@ -894,7 +894,10 @@
|
|||
"color": "Change the color of this task",
|
||||
"move": "Move this task to another project",
|
||||
"reminder": "Manage reminders of this task",
|
||||
"description": "Toggle editing of the task description"
|
||||
"description": "Toggle editing of the task description",
|
||||
"delete": "Delete this task",
|
||||
"priority": "Change the priority of this task",
|
||||
"favorite": "Mark this task as favorite / unfavorite"
|
||||
},
|
||||
"project": {
|
||||
"title": "Project Views",
|
||||
|
@ -1053,4 +1056,4 @@
|
|||
"frontendVersion": "Frontend Version: {version}",
|
||||
"apiVersion": "API Version: {version}"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -529,7 +529,7 @@
|
|||
"code": "Kód",
|
||||
"quote": "Citace",
|
||||
"unorderedList": "Seznam s odrážkami",
|
||||
"orderedList ": "Ordered List",
|
||||
"orderedList": "Ordered List",
|
||||
"cleanBlock": "Čistý blok",
|
||||
"link": "Odkaz",
|
||||
"image": "Obrázek",
|
||||
|
@ -566,14 +566,14 @@
|
|||
"canuse": "Můžete použít vzorec pro filtrování podle relativních datumů.",
|
||||
"learnhow": "Podívejte se, jak to funguje",
|
||||
"title": "Datumový vzorec",
|
||||
"intro": "Datumový vzorec umožňuje určit relativní data, která jsou při použití filtru vyřešena za běhu Vikunjou.",
|
||||
"intro": "Specify relative dates which are resolved on the fly by Vikunja when applying the filter.",
|
||||
"expression": "Každý datumový matematický výraz začíná datem ukotvení, které může být buď {0}, nebo datový řetězec končící {1}. Po tomto ukotvení může volitelně následovat jeden nebo více matematických výrazů.",
|
||||
"similar": "Tyto výrazy jsou podobné výrazům poskytnutým {0} a {1}.",
|
||||
"add1Day": "Přidat jeden den",
|
||||
"minus1Day": "Odečíst jeden den",
|
||||
"roundDay": "Zaokrouhlit dolů na nejbližší den",
|
||||
"supportedUnits": "Podporované časové jednotky jsou:",
|
||||
"someExamples": "Některé příklady časových výrazů:",
|
||||
"supportedUnits": "Supported time units",
|
||||
"someExamples": "Examples of time expressions",
|
||||
"units": {
|
||||
"seconds": "Sekundy",
|
||||
"minutes": "Minuty",
|
||||
|
@ -894,7 +894,10 @@
|
|||
"color": "Změnit barvu tohoto úkolu",
|
||||
"move": "Move this task to another project",
|
||||
"reminder": "Spravovat připomenutí této úlohy",
|
||||
"description": "Přepnout úpravy popisu úkolu"
|
||||
"description": "Přepnout úpravy popisu úkolu",
|
||||
"delete": "Delete this task",
|
||||
"priority": "Change the priority of this task",
|
||||
"favorite": "Mark this task as favorite / unfavorite"
|
||||
},
|
||||
"project": {
|
||||
"title": "Project Views",
|
||||
|
@ -1053,4 +1056,4 @@
|
|||
"frontendVersion": "Verze frontendu: {version}",
|
||||
"apiVersion": "Verze API: {version}"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -529,7 +529,7 @@
|
|||
"code": "Kode",
|
||||
"quote": "Citat",
|
||||
"unorderedList": "Usorteret liste",
|
||||
"orderedList ": "Ordered List",
|
||||
"orderedList": "Ordered List",
|
||||
"cleanBlock": "Ryd Blok",
|
||||
"link": "Link",
|
||||
"image": "Billede",
|
||||
|
@ -566,14 +566,14 @@
|
|||
"canuse": "Du kan bruge datomatematik til at filtrere for relative datoer.",
|
||||
"learnhow": "Se hvordan det virker",
|
||||
"title": "Datomatematik",
|
||||
"intro": "Dato Matematik giver dig mulighed for at angive relative datoer, som er løst løbende af Vikunja, når du anvender filteret.",
|
||||
"intro": "Specify relative dates which are resolved on the fly by Vikunja when applying the filter.",
|
||||
"expression": "Hver Datomatematik udtryk starter med en ankerdato, som enten kan være {0} eller en datostreng, der slutter med {1}. Denneanker dato kan eventuelt efterfølges af en eller flere matematik udtryk.",
|
||||
"similar": "Disse udtryk ligner dem fra {0} og {1}.",
|
||||
"add1Day": "Læg en dag til",
|
||||
"minus1Day": "Træk en dag fra",
|
||||
"roundDay": "Rund ned til nærmeste dag",
|
||||
"supportedUnits": "Understøttede tidsenheder er:",
|
||||
"someExamples": "Eksempler på tidsudtryk:",
|
||||
"supportedUnits": "Supported time units",
|
||||
"someExamples": "Examples of time expressions",
|
||||
"units": {
|
||||
"seconds": "Sekunder",
|
||||
"minutes": "Minutter",
|
||||
|
@ -894,7 +894,10 @@
|
|||
"color": "Skift farven på denne opgave",
|
||||
"move": "Move this task to another project",
|
||||
"reminder": "Administrer påmindelser om denne opgave",
|
||||
"description": "Slå redigering af opgavebeskrivelse til/fra"
|
||||
"description": "Slå redigering af opgavebeskrivelse til/fra",
|
||||
"delete": "Delete this task",
|
||||
"priority": "Change the priority of this task",
|
||||
"favorite": "Mark this task as favorite / unfavorite"
|
||||
},
|
||||
"project": {
|
||||
"title": "Project Views",
|
||||
|
@ -1053,4 +1056,4 @@
|
|||
"frontendVersion": "Frontend Version: {version}",
|
||||
"apiVersion": "API Version: {version}"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -529,7 +529,7 @@
|
|||
"code": "Code",
|
||||
"quote": "Zitat",
|
||||
"unorderedList": "Ungeordnete Liste",
|
||||
"orderedList ": "Ordered List",
|
||||
"orderedList": "Geordnete Liste",
|
||||
"cleanBlock": "Formatierung löschen",
|
||||
"link": "Link",
|
||||
"image": "Bild",
|
||||
|
@ -566,14 +566,14 @@
|
|||
"canuse": "Du kannst Datumsberechnung verwenden, um nach relativen Daten zu filtern.",
|
||||
"learnhow": "Sieh dir an, wie es funktioniert",
|
||||
"title": "Datumsberechnung",
|
||||
"intro": "Die Datumsberechnung erlaubt es, relative Daten anzugeben, die bei der Anwendung des Filters von Vikunja aufgelöst werden.",
|
||||
"intro": "Du kannst relative Daten angeben, die bei der Anwendung des Filters von Vikunja aufgelöst werden.",
|
||||
"expression": "Jeder Ausdruck der Datumsberechnung beginnt mit einem Datumswert, welcher entweder {0} sein kann oder mit {1} endet. Auf diesen Datumswert kann optional ein oder mehrere mathematische Ausdrücke folgen.",
|
||||
"similar": "Diese Ausdrücke ähneln denen von {0} und {1}.",
|
||||
"add1Day": "Einen Tag hinzufügen",
|
||||
"minus1Day": "Einen Tag abziehen",
|
||||
"roundDay": "Auf den nächsten Tag abrunden",
|
||||
"supportedUnits": "Unterstützte Zeiteinheiten sind:",
|
||||
"someExamples": "Einige Beispiele für Zeitausdrücke:",
|
||||
"supportedUnits": "Unterstützte Zeiteinheiten",
|
||||
"someExamples": "Beispiele für Zeitausdrücke",
|
||||
"units": {
|
||||
"seconds": "Sekunden",
|
||||
"minutes": "Minuten",
|
||||
|
@ -894,7 +894,10 @@
|
|||
"color": "Die Farbe dieser Aufgabe ändern",
|
||||
"move": "Move this task to another project",
|
||||
"reminder": "Erinnerungen für diese Aufgabe verwalten",
|
||||
"description": "Aufgabenbeschreibung bearbeiten"
|
||||
"description": "Aufgabenbeschreibung bearbeiten",
|
||||
"delete": "Delete this task",
|
||||
"priority": "Change the priority of this task",
|
||||
"favorite": "Mark this task as favorite / unfavorite"
|
||||
},
|
||||
"project": {
|
||||
"title": "Project Views",
|
||||
|
@ -1053,4 +1056,4 @@
|
|||
"frontendVersion": "Frontend-Version: {version}",
|
||||
"apiVersion": "API-Version: {version}"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -529,7 +529,7 @@
|
|||
"code": "Code",
|
||||
"quote": "Zitaat",
|
||||
"unorderedList": "Ungordnedi Listä",
|
||||
"orderedList ": "Ordered List",
|
||||
"orderedList": "Geordnete Liste",
|
||||
"cleanBlock": "Formatierig Lösche",
|
||||
"link": "Link",
|
||||
"image": "Bild",
|
||||
|
@ -566,14 +566,14 @@
|
|||
"canuse": "Du kannst Datumsberechnung verwenden, um nach relativen Daten zu filtern.",
|
||||
"learnhow": "Sieh dir an, wie es funktioniert",
|
||||
"title": "Datumsberechnung",
|
||||
"intro": "Die Datumsberechnung erlaubt es, relative Daten anzugeben, die bei der Anwendung des Filters von Vikunja aufgelöst werden.",
|
||||
"intro": "Du kannst relative Daten angeben, die bei der Anwendung des Filters von Vikunja aufgelöst werden.",
|
||||
"expression": "Jeder Ausdruck der Datumsberechnung beginnt mit einem Datumswert, welcher entweder {0} sein kann oder mit {1} endet. Auf diesen Datumswert kann optional ein oder mehrere mathematische Ausdrücke folgen.",
|
||||
"similar": "Diese Ausdrücke ähneln denen von {0} und {1}.",
|
||||
"add1Day": "Einen Tag hinzufügen",
|
||||
"minus1Day": "Einen Tag abziehen",
|
||||
"roundDay": "Auf den nächsten Tag abrunden",
|
||||
"supportedUnits": "Unterstützte Zeiteinheiten sind:",
|
||||
"someExamples": "Einige Beispiele für Zeitausdrücke:",
|
||||
"supportedUnits": "Unterstützte Zeiteinheiten",
|
||||
"someExamples": "Beispiele für Zeitausdrücke",
|
||||
"units": {
|
||||
"seconds": "Sekunden",
|
||||
"minutes": "Minuten",
|
||||
|
@ -894,7 +894,10 @@
|
|||
"color": "Die Farbe dieser Aufgabe ändern",
|
||||
"move": "Move this task to another project",
|
||||
"reminder": "Erinnerungen für diese Aufgabe verwalten",
|
||||
"description": "Aufgabenbeschreibung bearbeiten"
|
||||
"description": "Aufgabenbeschreibung bearbeiten",
|
||||
"delete": "Delete this task",
|
||||
"priority": "Change the priority of this task",
|
||||
"favorite": "Mark this task as favorite / unfavorite"
|
||||
},
|
||||
"project": {
|
||||
"title": "Project Views",
|
||||
|
@ -1053,4 +1056,4 @@
|
|||
"frontendVersion": "Frontend Version: {version}",
|
||||
"apiVersion": "API Version: {version}"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -529,7 +529,7 @@
|
|||
"code": "Code",
|
||||
"quote": "Quote",
|
||||
"unorderedList": "Unordered List",
|
||||
"orderedList ": "Ordered List",
|
||||
"orderedList": "Ordered List",
|
||||
"cleanBlock": "Clean Block",
|
||||
"link": "Link",
|
||||
"image": "Image",
|
||||
|
@ -569,14 +569,14 @@
|
|||
"canuse": "You can use date math to filter for relative dates.",
|
||||
"learnhow": "Check out how it works",
|
||||
"title": "Date Math",
|
||||
"intro": "Date Math allows you to specify relative dates which are resolved on the fly by Vikunja when applying the filter.",
|
||||
"intro": "Specify relative dates which are resolved on the fly by Vikunja when applying the filter.",
|
||||
"expression": "Each Date Math expression starts with an anchor date, which can either be {0}, or a date string ending with {1}. This anchor date can optionally be followed by one or more maths expressions.",
|
||||
"similar": "These expressions are similar to the ones provided by {0} and {1}.",
|
||||
"add1Day": "Add one day",
|
||||
"minus1Day": "Subtract one day",
|
||||
"roundDay": "Round down to the nearest day",
|
||||
"supportedUnits": "Supported time units are:",
|
||||
"someExamples": "Some examples of time expressions:",
|
||||
"supportedUnits": "Supported time units",
|
||||
"someExamples": "Examples of time expressions",
|
||||
"units": {
|
||||
"seconds": "Seconds",
|
||||
"minutes": "Minutes",
|
||||
|
@ -897,7 +897,10 @@
|
|||
"color": "Change the color of this task",
|
||||
"move": "Move this task to another project",
|
||||
"reminder": "Manage reminders of this task",
|
||||
"description": "Toggle editing of the task description"
|
||||
"description": "Toggle editing of the task description",
|
||||
"delete": "Delete this task",
|
||||
"priority": "Change the priority of this task",
|
||||
"favorite": "Mark this task as favorite / unfavorite"
|
||||
},
|
||||
"project": {
|
||||
"title": "Project Views",
|
||||
|
@ -1056,4 +1059,4 @@
|
|||
"frontendVersion": "Frontend Version: {version}",
|
||||
"apiVersion": "API Version: {version}"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -529,7 +529,7 @@
|
|||
"code": "Código",
|
||||
"quote": "Cita",
|
||||
"unorderedList": "Lista no ordenada",
|
||||
"orderedList ": "Ordered List",
|
||||
"orderedList": "Ordered List",
|
||||
"cleanBlock": "Borrar Bloque",
|
||||
"link": "Enlace",
|
||||
"image": "Imagen",
|
||||
|
@ -566,14 +566,14 @@
|
|||
"canuse": "Puedes usar ecuaciones para filtrar por fechas relacionadas.",
|
||||
"learnhow": "Mira cómo funciona",
|
||||
"title": "Ecuaciones",
|
||||
"intro": "Las Ecuaciones permiten determinar qué fechas relacionadas te mostrará Vikunja al aplicar este filtro.",
|
||||
"intro": "Specify relative dates which are resolved on the fly by Vikunja when applying the filter.",
|
||||
"expression": "Cada expresión matemática empieza con una fecha ancla, que puede ser {0}, o una cadena de texto que acabe en {1}. Opcionalmente, esta fecha puede estar seguida de una o más expresiones.",
|
||||
"similar": "Estas expresiones son similares a las definidas en {0} y {1}.",
|
||||
"add1Day": "Añadir un día",
|
||||
"minus1Day": "Subtract one day",
|
||||
"roundDay": "Round down to the nearest day",
|
||||
"supportedUnits": "Supported time units are:",
|
||||
"someExamples": "Some examples of time expressions:",
|
||||
"supportedUnits": "Supported time units",
|
||||
"someExamples": "Examples of time expressions",
|
||||
"units": {
|
||||
"seconds": "Seconds",
|
||||
"minutes": "Minutes",
|
||||
|
@ -894,7 +894,10 @@
|
|||
"color": "Cambia el color de esta tarea",
|
||||
"move": "Move this task to another project",
|
||||
"reminder": "Administrar recordatorios de esta tarea",
|
||||
"description": "Editar la descripción de la tarea"
|
||||
"description": "Editar la descripción de la tarea",
|
||||
"delete": "Delete this task",
|
||||
"priority": "Change the priority of this task",
|
||||
"favorite": "Mark this task as favorite / unfavorite"
|
||||
},
|
||||
"project": {
|
||||
"title": "Project Views",
|
||||
|
@ -1053,4 +1056,4 @@
|
|||
"frontendVersion": "Frontend Version: {version}",
|
||||
"apiVersion": "Versión de la API: {version}"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -529,7 +529,7 @@
|
|||
"code": "Code",
|
||||
"quote": "Citation",
|
||||
"unorderedList": "Liste non ordonnée",
|
||||
"orderedList ": "Ordered List",
|
||||
"orderedList": "Ordered List",
|
||||
"cleanBlock": "Bloc propre",
|
||||
"link": "Lien",
|
||||
"image": "Image",
|
||||
|
@ -566,14 +566,14 @@
|
|||
"canuse": "You can use date math to filter for relative dates.",
|
||||
"learnhow": "Check out how it works",
|
||||
"title": "Date Math",
|
||||
"intro": "Date Math allows you to specify relative dates which are resolved on the fly by Vikunja when applying the filter.",
|
||||
"intro": "Specify relative dates which are resolved on the fly by Vikunja when applying the filter.",
|
||||
"expression": "Each Date Math expression starts with an anchor date, which can either be {0}, or a date string ending with {1}. This anchor date can optionally be followed by one or more maths expressions.",
|
||||
"similar": "These expressions are similar to the ones provided by {0} and {1}.",
|
||||
"add1Day": "Add one day",
|
||||
"minus1Day": "Subtract one day",
|
||||
"roundDay": "Round down to the nearest day",
|
||||
"supportedUnits": "Supported time units are:",
|
||||
"someExamples": "Some examples of time expressions:",
|
||||
"supportedUnits": "Supported time units",
|
||||
"someExamples": "Examples of time expressions",
|
||||
"units": {
|
||||
"seconds": "Seconds",
|
||||
"minutes": "Minutes",
|
||||
|
@ -894,7 +894,10 @@
|
|||
"color": "Changer la couleur de cette tâche",
|
||||
"move": "Move this task to another project",
|
||||
"reminder": "Manage reminders of this task",
|
||||
"description": "Toggle editing of the task description"
|
||||
"description": "Toggle editing of the task description",
|
||||
"delete": "Delete this task",
|
||||
"priority": "Change the priority of this task",
|
||||
"favorite": "Mark this task as favorite / unfavorite"
|
||||
},
|
||||
"project": {
|
||||
"title": "Project Views",
|
||||
|
@ -1053,4 +1056,4 @@
|
|||
"frontendVersion": "Version : {version}",
|
||||
"apiVersion": "Version de l’API : {version}"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -529,7 +529,7 @@
|
|||
"code": "Codice",
|
||||
"quote": "Citazione",
|
||||
"unorderedList": "Elenco puntato",
|
||||
"orderedList ": "Ordered List",
|
||||
"orderedList": "Ordered List",
|
||||
"cleanBlock": "Pulisci Blocco",
|
||||
"link": "Link",
|
||||
"image": "Immagine",
|
||||
|
@ -566,14 +566,14 @@
|
|||
"canuse": "Puoi usare le date calcolate per filtrare per date relative.",
|
||||
"learnhow": "Scopri come funziona",
|
||||
"title": "Date Calcolate",
|
||||
"intro": "Le Date Calcolate ti permettono di specificare date relative che vengono calcolate al volo da Vikunja quando viene applicato il filtro.",
|
||||
"intro": "Specify relative dates which are resolved on the fly by Vikunja when applying the filter.",
|
||||
"expression": "Ogni Data Calcolata inizia con una data base, che può essere {0}, o una data con {1} alla fine. Questa data base può essere seguita da una o più espressioni matematiche.",
|
||||
"similar": "Queste espressioni sono simili a quelle fornite da {0} e {1}.",
|
||||
"add1Day": "Aggiungi un giorno",
|
||||
"minus1Day": "Sottrai un giorno",
|
||||
"roundDay": "Arrotonda per difetto al giorno più vicino",
|
||||
"supportedUnits": "Le unità di tempo supportate sono:",
|
||||
"someExamples": "Alcuni esempi di espressione temporale:",
|
||||
"supportedUnits": "Supported time units",
|
||||
"someExamples": "Examples of time expressions",
|
||||
"units": {
|
||||
"seconds": "Secondi",
|
||||
"minutes": "Minuti",
|
||||
|
@ -894,7 +894,10 @@
|
|||
"color": "Cambia il colore di questa attività",
|
||||
"move": "Move this task to another project",
|
||||
"reminder": "Gestisci i promemoria di questa attività",
|
||||
"description": "Attiva/Disattiva modifica della descrizione dell'attività"
|
||||
"description": "Attiva/Disattiva modifica della descrizione dell'attività",
|
||||
"delete": "Delete this task",
|
||||
"priority": "Change the priority of this task",
|
||||
"favorite": "Mark this task as favorite / unfavorite"
|
||||
},
|
||||
"project": {
|
||||
"title": "Project Views",
|
||||
|
@ -1053,4 +1056,4 @@
|
|||
"frontendVersion": "Versione Frontend: {version}",
|
||||
"apiVersion": "Versione API: {version}"
|
||||
}
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
|
@ -529,7 +529,7 @@
|
|||
"code": "Code",
|
||||
"quote": "Citaat",
|
||||
"unorderedList": "Ongesorteerde lijst",
|
||||
"orderedList ": "Ordered List",
|
||||
"orderedList": "Ordered List",
|
||||
"cleanBlock": "Clean Block",
|
||||
"link": "Link",
|
||||
"image": "Afbeelding",
|
||||
|
@ -566,14 +566,14 @@
|
|||
"canuse": "You can use date math to filter for relative dates.",
|
||||
"learnhow": "Check out how it works",
|
||||
"title": "Date Math",
|
||||
"intro": "Date Math allows you to specify relative dates which are resolved on the fly by Vikunja when applying the filter.",
|
||||
"intro": "Specify relative dates which are resolved on the fly by Vikunja when applying the filter.",
|
||||
"expression": "Each Date Math expression starts with an anchor date, which can either be {0}, or a date string ending with {1}. This anchor date can optionally be followed by one or more maths expressions.",
|
||||
"similar": "These expressions are similar to the ones provided by {0} and {1}.",
|
||||
"add1Day": "Add one day",
|
||||
"minus1Day": "Subtract one day",
|
||||
"roundDay": "Round down to the nearest day",
|
||||
"supportedUnits": "Supported time units are:",
|
||||
"someExamples": "Some examples of time expressions:",
|
||||
"supportedUnits": "Supported time units",
|
||||
"someExamples": "Examples of time expressions",
|
||||
"units": {
|
||||
"seconds": "Seconds",
|
||||
"minutes": "Minutes",
|
||||
|
@ -894,7 +894,10 @@
|
|||
"color": "Change the color of this task",
|
||||
"move": "Move this task to another project",
|
||||
"reminder": "Manage reminders of this task",
|
||||
"description": "Toggle editing of the task description"
|
||||
"description": "Toggle editing of the task description",
|
||||
"delete": "Delete this task",
|
||||
"priority": "Change the priority of this task",
|
||||
"favorite": "Mark this task as favorite / unfavorite"
|
||||
},
|
||||
"project": {
|
||||
"title": "Project Views",
|
||||
|
@ -1053,4 +1056,4 @@
|
|||
"frontendVersion": "Frontend versie: {version}",
|
||||
"apiVersion": "API Versie: {version}"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -6,10 +6,10 @@
|
|||
"welcomeEvening": "God Morgen {username}!",
|
||||
"lastViewed": "Sist sett",
|
||||
"project": {
|
||||
"newText": "You can create a new project for your new tasks:",
|
||||
"new": "New project",
|
||||
"importText": "Or import your projects and tasks from other services into Vikunja:",
|
||||
"import": "Import your data into Vikunja"
|
||||
"newText": "Du kan opprette en ny liste for dine nye oppgaver:",
|
||||
"new": "Nytt prosjekt",
|
||||
"importText": "Eller importer lister og oppgaver fra andre tjenester til Vikunja:",
|
||||
"import": "Importer dine data til Vikunja"
|
||||
}
|
||||
},
|
||||
"404": {
|
||||
|
@ -85,7 +85,7 @@
|
|||
"weekStartSunday": "Søndag",
|
||||
"weekStartMonday": "Mandag",
|
||||
"language": "Språk",
|
||||
"defaultProject": "Default Project",
|
||||
"defaultProject": "Standard prosjekt",
|
||||
"timezone": "Tidssone",
|
||||
"overdueTasksRemindersTime": "Utløpte påminnelses-tid for oppgaver"
|
||||
},
|
||||
|
@ -143,7 +143,7 @@
|
|||
},
|
||||
"deletion": {
|
||||
"title": "Slett kontoen din",
|
||||
"text1": "The deletion of your account is permanent and cannot be undone. We will delete all your namespaces, projects, tasks and everything associated with it.",
|
||||
"text1": "Sletting av din konto er permanent og kan ikke angres. Vi vil slette alle dine navneområder og prosjekter, oppgaver og alt forbundet med den.",
|
||||
"text2": "For å fortsette, skriv inn passordet ditt. Du vil motta en e-post med ytterligere instruksjoner.",
|
||||
"confirm": "Slett min konto",
|
||||
"requestSuccess": "Forespørselen var vellykket. Du vil motta en e-post med ytterligere instruksjoner.",
|
||||
|
@ -157,7 +157,7 @@
|
|||
},
|
||||
"export": {
|
||||
"title": "Eksporter dine kontodata",
|
||||
"description": "You can request a copy of all your Vikunja data. This include Namespaces, Projects, Tasks and everything associated to them. You can import this data in any Vikunja instance through the migration function.",
|
||||
"description": "Du kan be om en kopi av alle Vikunja dataene dine. Dette inkluderer navneområder, lister, oppgaver og alt tilknyttet dem.",
|
||||
"descriptionPasswordRequired": "Skriv inn passordet for å fortsette:",
|
||||
"request": "Be om kopi av mine Vikunja Data",
|
||||
"success": "Du har spurt om dine Vikunja data! Vi sender deg en e-post når den er klar til å laste ned.",
|
||||
|
@ -165,193 +165,193 @@
|
|||
}
|
||||
},
|
||||
"project": {
|
||||
"archived": "This project is archived. It is not possible to create new or edit tasks for it.",
|
||||
"title": "Project Title",
|
||||
"color": "Color",
|
||||
"projects": "Projects",
|
||||
"search": "Type to search for a project…",
|
||||
"searchSelect": "Click or press enter to select this project",
|
||||
"shared": "Shared Projects",
|
||||
"noDescriptionAvailable": "No project description is available.",
|
||||
"archived": "Dette prosjektet er arkivert. Det er ikke mulig å opprette nye eller redigere oppgaver for det.",
|
||||
"title": "Prosjekt tittel",
|
||||
"color": "Farger",
|
||||
"projects": "Prosjekter",
|
||||
"search": "Tast for å søke etter et prosjekt…",
|
||||
"searchSelect": "Klikk eller trykk enter for å velge dette prosjektet",
|
||||
"shared": "Delte prosjekter",
|
||||
"noDescriptionAvailable": "Ingen prosjektbeskrivelse er tilgjengelig.",
|
||||
"create": {
|
||||
"header": "New project",
|
||||
"titlePlaceholder": "The project's title goes here…",
|
||||
"addTitleRequired": "Please specify a title.",
|
||||
"createdSuccess": "The project was successfully created.",
|
||||
"addProjectRequired": "Please specify a project or set a default project in the settings."
|
||||
"header": "Nytt prosjekt",
|
||||
"titlePlaceholder": "Prosjektets tittel er her…",
|
||||
"addTitleRequired": "Angi den nye tittelen.",
|
||||
"createdSuccess": "Prosjektet ble opprettet.",
|
||||
"addProjectRequired": "Vennligst spesifiser et prosjekt eller angi et standardprosjekt i innstillingene."
|
||||
},
|
||||
"archive": {
|
||||
"title": "Archive \"{project}\"",
|
||||
"archive": "Archive this project",
|
||||
"unarchive": "Un-Archive this project",
|
||||
"unarchiveText": "You will be able to create new tasks or edit it.",
|
||||
"archiveText": "You won't be able to edit this project or create new tasks until you un-archive it.",
|
||||
"success": "The project was successfully archived."
|
||||
"title": "Arkiver{project}\"",
|
||||
"archive": "Arkiver dette prosjektet",
|
||||
"unarchive": "Av-arkivere dette prosjektet",
|
||||
"unarchiveText": "Du vil kunne opprette nye oppgaver eller redigere den.",
|
||||
"archiveText": "Du vil ikke være i stand til å redigere denne listen eller opprette nye oppgaver før du fjerner arkiveringen.",
|
||||
"success": "Prosjektet ble vellykket arkivert."
|
||||
},
|
||||
"background": {
|
||||
"title": "Set project background",
|
||||
"remove": "Remove Background",
|
||||
"upload": "Choose a background from your pc",
|
||||
"searchPlaceholder": "Search for a background…",
|
||||
"poweredByUnsplash": "Powered by Unsplash",
|
||||
"loadMore": "Load more photos",
|
||||
"success": "The background has been set successfully!",
|
||||
"removeSuccess": "The background has been removed successfully!"
|
||||
"title": "Angi prosjektbakgrunn",
|
||||
"remove": "Fjern bakgrunn",
|
||||
"upload": "Velg en bakgrunn fra din pc",
|
||||
"searchPlaceholder": "Søk etter en bakgrunn…",
|
||||
"poweredByUnsplash": "Drevet av Unsplash",
|
||||
"loadMore": "Laste inn flere bilder",
|
||||
"success": "Bakgrunnen er satt vellykket!",
|
||||
"removeSuccess": "Bakgrunnen har blitt fjernet!"
|
||||
},
|
||||
"delete": {
|
||||
"title": "Delete \"{project}\"",
|
||||
"header": "Delete this project",
|
||||
"text1": "Are you sure you want to delete this project and all of its contents?",
|
||||
"text2": "This includes all tasks and CANNOT BE UNDONE!",
|
||||
"success": "The project was successfully deleted.",
|
||||
"tasksToDelete": "This will irrevocably remove approx. {count} tasks.",
|
||||
"noTasksToDelete": "This project does not contain any tasks, it should be safe to delete."
|
||||
"title": "Slett \"{project}",
|
||||
"header": "Slett dette prosjektet",
|
||||
"text1": "Er du sikker på at du vil slette dette prosjektet og alle relaterte data?",
|
||||
"text2": "Dette inkluderer alle oppgaver og KAN IKKE ANGRES!",
|
||||
"success": "Prosjektet ble slettet.",
|
||||
"tasksToDelete": "Dette vil ugjenkallelig fjerne ca. {count} oppgaver.",
|
||||
"noTasksToDelete": "Dette prosjektet inneholder ingen oppgaver, det bør være trygt å slette."
|
||||
},
|
||||
"duplicate": {
|
||||
"title": "Duplicate this project",
|
||||
"label": "Duplicate",
|
||||
"text": "Select a namespace which should hold the duplicated project:",
|
||||
"success": "The project was successfully duplicated."
|
||||
"title": "Dupliser dette prosjektet",
|
||||
"label": "Dupliser",
|
||||
"text": "Velg et navneområde som skal holde det dupliserte prosjektet:",
|
||||
"success": "Prosjektet ble duplisert."
|
||||
},
|
||||
"edit": {
|
||||
"header": "Edit This Project",
|
||||
"title": "Edit \"{project}\"",
|
||||
"titlePlaceholder": "The project title goes here…",
|
||||
"identifierTooltip": "The project identifier can be used to uniquely identify a task across projects. You can set it to empty to disable it.",
|
||||
"identifier": "Project Identifier",
|
||||
"identifierPlaceholder": "The project identifier goes here…",
|
||||
"description": "Description",
|
||||
"descriptionPlaceholder": "The projects description goes here…",
|
||||
"color": "Color",
|
||||
"success": "The project was successfully updated."
|
||||
"header": "Rediger prosjekt",
|
||||
"title": "Rediger \"{project}",
|
||||
"titlePlaceholder": "Prosjekttittelen går her…",
|
||||
"identifierTooltip": "Prosjektidentifikatoren kan brukes til å identifisere en oppgave på tvers av prosjekter. Du kan sette den til tom for å deaktivere den.",
|
||||
"identifier": "Prosjekt identifikator",
|
||||
"identifierPlaceholder": "Prosjektidentifikatoren kommer her…",
|
||||
"description": "Beskrivelse",
|
||||
"descriptionPlaceholder": "Beskrivelsen gis her…",
|
||||
"color": "Farger",
|
||||
"success": "Prosjektet ble opprettet."
|
||||
},
|
||||
"share": {
|
||||
"header": "Share this project",
|
||||
"title": "Share \"{project}\"",
|
||||
"share": "Share",
|
||||
"header": "Del dette prosjektet",
|
||||
"title": "Del \"{project}\"",
|
||||
"share": "Del",
|
||||
"links": {
|
||||
"title": "Share Links",
|
||||
"what": "What is a share link?",
|
||||
"explanation": "Share Links allow you to easily share a project with other users who don't have an account on Vikunja.",
|
||||
"create": "Create a new link share",
|
||||
"name": "Name (optional)",
|
||||
"title": "Del link",
|
||||
"what": "Hva er en lenke for deling?",
|
||||
"explanation": "Lenker lar deg enkelt dele et prosjekt med andre brukere som ikke har en konto på Vikunja.",
|
||||
"create": "Opprett en ny lenkedeling",
|
||||
"name": "Navn (valgfritt)",
|
||||
"namePlaceholder": "e.g. Lorem Ipsum",
|
||||
"nameExplanation": "All actions done by this link share will show up with the name.",
|
||||
"password": "Password (optional)",
|
||||
"passwordExplanation": "When authenticating, the user will be required to enter this password.",
|
||||
"noName": "No name set",
|
||||
"remove": "Remove a link share",
|
||||
"removeText": "Are you sure you want to remove this link share? It will no longer be possible to access this project with this link share. This cannot be undone!",
|
||||
"createSuccess": "The link share was successfully created.",
|
||||
"deleteSuccess": "The link share was successfully deleted",
|
||||
"view": "View",
|
||||
"sharedBy": "Shared by {0}"
|
||||
"nameExplanation": "Alle handlinger utført av denne koblingsdelingen vises med navnet.",
|
||||
"password": "Passord (valgfritt)",
|
||||
"passwordExplanation": "Når brukeren autentiseres, må vedkommende angi dette passordet.",
|
||||
"noName": "Ingen navn satt",
|
||||
"remove": "Fjern en link deling",
|
||||
"removeText": "Er du sikker på at du vil fjerne denne lenkedelen? Det vil ikke lenger være mulig å åpne dette prosjektet med denne lenkedelingen. Dette kan ikke angres!",
|
||||
"createSuccess": "Delingen ble opprettet.",
|
||||
"deleteSuccess": "Delingen ble slettet",
|
||||
"view": "Vis",
|
||||
"sharedBy": "Delt av {0}"
|
||||
},
|
||||
"userTeam": {
|
||||
"typeUser": "user | users",
|
||||
"typeUser": "bruker | brukere",
|
||||
"typeTeam": "team | teams",
|
||||
"shared": "Shared with these {type}",
|
||||
"you": "You",
|
||||
"notShared": "Not shared with any {type} yet.",
|
||||
"removeHeader": "Remove a {type} from the {sharable}",
|
||||
"removeText": "Are you sure you want to remove this {sharable} from the {type}? This cannot be undone!",
|
||||
"removeSuccess": "The {sharable} was successfully removed from the {type}.",
|
||||
"addedSuccess": "The {type} was successfully added.",
|
||||
"updatedSuccess": "The {type} was successfully added."
|
||||
"shared": "Delt med disse {type}",
|
||||
"you": "Du",
|
||||
"notShared": "Ikke delt med noen {type} ennå.",
|
||||
"removeHeader": "Fjern en {type} fra {sharable}",
|
||||
"removeText": "Er du sikker på at du vil fjerne denne {sharable} fra {type}? Dette kan ikke angres!",
|
||||
"removeSuccess": "{sharable} ble fjernet fra {type}.",
|
||||
"addedSuccess": "{type} ble lagt til.",
|
||||
"updatedSuccess": "{type} ble lagt til."
|
||||
},
|
||||
"right": {
|
||||
"title": "Permission",
|
||||
"read": "Read only",
|
||||
"readWrite": "Read & write",
|
||||
"admin": "Admin"
|
||||
"title": "Rettighet",
|
||||
"read": "Kun lese",
|
||||
"readWrite": "Lese og skrive",
|
||||
"admin": "Administrator"
|
||||
},
|
||||
"attributes": {
|
||||
"link": "Link",
|
||||
"delete": "Delete"
|
||||
"delete": "Slett"
|
||||
}
|
||||
},
|
||||
"list": {
|
||||
"title": "List",
|
||||
"add": "Add",
|
||||
"addPlaceholder": "Add a new task…",
|
||||
"empty": "This project is currently empty.",
|
||||
"newTaskCta": "Create a new task.",
|
||||
"editTask": "Edit Task"
|
||||
"title": "Liste",
|
||||
"add": "Legg til",
|
||||
"addPlaceholder": "Legg til ny oppgave…",
|
||||
"empty": "Dette prosjektet er for øyeblikket tomt.",
|
||||
"newTaskCta": "Lage en ny oppgave.",
|
||||
"editTask": "Endre oppgave"
|
||||
},
|
||||
"gantt": {
|
||||
"title": "Gantt",
|
||||
"showTasksWithoutDates": "Show tasks which don't have dates set",
|
||||
"size": "Size",
|
||||
"default": "Default",
|
||||
"month": "Month",
|
||||
"day": "Day",
|
||||
"hour": "Hour",
|
||||
"range": "Date Range",
|
||||
"noDates": "This task has no dates set."
|
||||
"showTasksWithoutDates": "Vis oppgaver som ikke har datoer angitt",
|
||||
"size": "Størrelse",
|
||||
"default": "Standard",
|
||||
"month": "Måned",
|
||||
"day": "Dag",
|
||||
"hour": "Time",
|
||||
"range": "Datointervall",
|
||||
"noDates": "Denne oppgaven har ingen datoer satt."
|
||||
},
|
||||
"table": {
|
||||
"title": "Table",
|
||||
"columns": "Columns"
|
||||
"title": "Tabell",
|
||||
"columns": "Kolonner"
|
||||
},
|
||||
"kanban": {
|
||||
"title": "Kanban",
|
||||
"limit": "Limit: {limit}",
|
||||
"noLimit": "Not Set",
|
||||
"doneBucket": "Done bucket",
|
||||
"doneBucketHint": "All tasks moved into this bucket will automatically marked as done.",
|
||||
"doneBucketHintExtended": "All tasks moved into the done bucket will be marked as done automatically. All tasks marked as done from elsewhere will be moved as well.",
|
||||
"doneBucketSavedSuccess": "The done bucket has been saved successfully.",
|
||||
"deleteLast": "You cannot remove the last bucket.",
|
||||
"addTaskPlaceholder": "Enter the new task title…",
|
||||
"addTask": "Add a task",
|
||||
"addAnotherTask": "Add another task",
|
||||
"addBucket": "Create a new bucket",
|
||||
"addBucketPlaceholder": "Enter the new bucket title…",
|
||||
"deleteHeaderBucket": "Delete the bucket",
|
||||
"deleteBucketText1": "Are you sure you want to delete this bucket?",
|
||||
"deleteBucketText2": "This will not delete any tasks but move them into the default bucket.",
|
||||
"deleteBucketSuccess": "The bucket has been deleted successfully.",
|
||||
"bucketTitleSavedSuccess": "The bucket title has been saved successfully.",
|
||||
"bucketLimitSavedSuccess": "The bucket limit been saved successfully.",
|
||||
"collapse": "Collapse this bucket"
|
||||
"limit": "Grense: {limit}",
|
||||
"noLimit": "Ikke Angitt",
|
||||
"doneBucket": "Ferdig bøtte",
|
||||
"doneBucketHint": "Alle oppgaver som flyttet til denne bøtte vil automatisk bli markert som ferdig.",
|
||||
"doneBucketHintExtended": "Alle oppgaver som er flyttet inn i den utførte bøtten, vil bli merket som utført automatisk. Alle oppgaver merket som gjort fra andre steder vil også bli flyttet.",
|
||||
"doneBucketSavedSuccess": "Bøtten er lagret.",
|
||||
"deleteLast": "Du kan ikke fjerne den siste bøtten.",
|
||||
"addTaskPlaceholder": "Angi den nye oppgavens tittel…",
|
||||
"addTask": "Legg til oppgave",
|
||||
"addAnotherTask": "Legg til en annen oppgave",
|
||||
"addBucket": "Lag en ny bøtte",
|
||||
"addBucketPlaceholder": "Angi den nye bøtte tittelen…",
|
||||
"deleteHeaderBucket": "Slett bøtte",
|
||||
"deleteBucketText1": "Er du sikker på at du vil slette denne bøtte?",
|
||||
"deleteBucketText2": "Dette vil ikke slette noen oppgaver, men flytte dem til standard bøtte.",
|
||||
"deleteBucketSuccess": "Bøtten er slettet.",
|
||||
"bucketTitleSavedSuccess": "Bøtten er lagret.",
|
||||
"bucketLimitSavedSuccess": "Grensen på bøtte er lagret.",
|
||||
"collapse": "Skjul denne bøtten"
|
||||
},
|
||||
"pseudo": {
|
||||
"favorites": {
|
||||
"title": "Favorites"
|
||||
"title": "Favoritter"
|
||||
}
|
||||
}
|
||||
},
|
||||
"namespace": {
|
||||
"title": "Namespaces & Projects",
|
||||
"title": "Navneområder & lister",
|
||||
"namespace": "Navneområde",
|
||||
"showArchived": "Vis arkiverte",
|
||||
"noneAvailable": "Du har ingen navneområder akkurat nå.",
|
||||
"unarchive": "Av-arkiver",
|
||||
"archived": "Arkivert",
|
||||
"noProjects": "This namespace does not contain any projects.",
|
||||
"createProject": "Create a new project in this namespace.",
|
||||
"noProjects": "Dette navneområdet inneholder ikke noen prosjekter.",
|
||||
"createProject": "Opprett et nytt prosjekt i dette navneområdet.",
|
||||
"namespaces": "Navnerom",
|
||||
"search": "Skriv for å søke etter en etikett…",
|
||||
"create": {
|
||||
"title": "Nytt navneområde",
|
||||
"titleRequired": "Angi den nye tittelen.",
|
||||
"explanation": "A namespace is a collection of projects you can share and use to organize your projects with. In fact, every project belongs to a namespace.",
|
||||
"explanation": "Et navneområde er en samling av lister du kan dele og bruke til å organisere listene dine med. I realiteten hører hver liste til et navneområde.",
|
||||
"tooltip": "Hva er et navneområde?",
|
||||
"success": "Navneområdet ble opprettet."
|
||||
},
|
||||
"archive": {
|
||||
"titleArchive": "Arkiv \"{namespace}\"",
|
||||
"titleUnarchive": "Av-Arkiv \"{namespace}\"",
|
||||
"archiveText": "You won't be able to edit this namespace or create new projects until you un-archive it. This will also archive all projects in this namespace.",
|
||||
"unarchiveText": "You will be able to create new projects or edit it.",
|
||||
"archiveText": "Du vil ikke kunne redigere dette navneområdet eller opprette nye lister før du avlaster arkivet. Dette vil også arkivere alle lister i dette navneområdet.",
|
||||
"unarchiveText": "Du vil kunne opprette nye oppgaver eller redigere den.",
|
||||
"success": "Navnerommet ble arkivert.",
|
||||
"unarchiveSuccess": "Navnerommet ble vellykket fjernet fra arkivet.",
|
||||
"description": "If a namespace is archived, you cannot create new projects or edit it."
|
||||
"description": "Hvis navneområdet er arkivert, kan du ikke opprette nye lister eller redigere det."
|
||||
},
|
||||
"delete": {
|
||||
"title": "Slett \"{namespace}",
|
||||
"text1": "Er du sikker på at du vil slette dette navneområdet og alt innholdet?",
|
||||
"text2": "This includes all projects and tasks and CANNOT BE UNDONE!",
|
||||
"text2": "Dette inkluderer alle oppgaver og KAN IKKE ANGRES!",
|
||||
"success": "Navnområdet ble slettet."
|
||||
},
|
||||
"edit": {
|
||||
|
@ -372,7 +372,7 @@
|
|||
},
|
||||
"pseudo": {
|
||||
"sharedProjects": {
|
||||
"title": "Shared Projects"
|
||||
"title": "Delte prosjekter"
|
||||
},
|
||||
"favorites": {
|
||||
"title": "Favoritter"
|
||||
|
@ -403,9 +403,9 @@
|
|||
},
|
||||
"create": {
|
||||
"title": "Nytt lagret filter",
|
||||
"description": "A saved filter is a virtual project which is computed from a set of filters each time it is accessed. Once created, it will appear in a special namespace.",
|
||||
"description": "Et lagret filter er en virtuell liste som beregnes fra et sett med filtre hver gang det åpnes. Når du er opprettet, vil det vises i et eget navneområde.",
|
||||
"action": "Opprett nytt filter",
|
||||
"titleRequired": "Please provide a title for the filter."
|
||||
"titleRequired": "Skriv inn en tittel for filteret."
|
||||
},
|
||||
"delete": {
|
||||
"header": "Slett dette lagrede filteret",
|
||||
|
@ -435,7 +435,7 @@
|
|||
"label": {
|
||||
"title": "Etiketter",
|
||||
"manage": "Behandle etiketter",
|
||||
"description": "Click on a label to edit it. You can edit all labels you created, you can use all labels which are associated with a task to whose project you have access.",
|
||||
"description": "Klikk på en etikett for å redigere den. Du kan redigere alle etikettene du lagde, du kan bruke alle etikettene som er tilknyttet en oppgave som du har tilgang til.",
|
||||
"newCTA": "Du har ingen etiketter for øyeblikket.",
|
||||
"search": "Skriv for å søke etter en etikett…",
|
||||
"create": {
|
||||
|
@ -460,7 +460,7 @@
|
|||
},
|
||||
"sharing": {
|
||||
"authenticating": "Autentiserer…",
|
||||
"passwordRequired": "This shared project requires a password. Please enter it below:",
|
||||
"passwordRequired": "Denne delte listen krever et passord. Vennligst skriv det nedenfor:",
|
||||
"error": "En feil oppsto.",
|
||||
"invalidPassword": "Det oppgitte passordet er ugyldig."
|
||||
},
|
||||
|
@ -529,7 +529,7 @@
|
|||
"code": "Kode",
|
||||
"quote": "Sitat",
|
||||
"unorderedList": "Uordnet liste",
|
||||
"orderedList ": "Ordered List",
|
||||
"orderedList": "Sortert liste",
|
||||
"cleanBlock": "Tøm blokk",
|
||||
"link": "Link",
|
||||
"image": "Bilde",
|
||||
|
@ -572,8 +572,8 @@
|
|||
"add1Day": "Legg til en dag",
|
||||
"minus1Day": "Trekk fra en dag",
|
||||
"roundDay": "Rund ned til nærmeste verdi",
|
||||
"supportedUnits": "Støttede tidsenheter er:",
|
||||
"someExamples": "Noen eksempler på tidsuttrykk:",
|
||||
"supportedUnits": "Støttede tidsenheter",
|
||||
"someExamples": "Noen eksempler på tidsuttrykk",
|
||||
"units": {
|
||||
"seconds": "Sekunder",
|
||||
"minutes": "Minutter",
|
||||
|
@ -602,7 +602,7 @@
|
|||
"addReminder": "Legg til en ny påminnelse…",
|
||||
"doneSuccess": "Oppgaven ble markert som ferdig.",
|
||||
"undoneSuccess": "Oppgaven ble fjernet som ferdig.",
|
||||
"undo": "Undo",
|
||||
"undo": "Angre",
|
||||
"openDetail": "Åpne detaljvisning",
|
||||
"checklistTotal": "{checked} av {total} oppgaver",
|
||||
"checklistAllDone": "{total} oppgaver",
|
||||
|
@ -619,7 +619,7 @@
|
|||
"chooseDueDate": "Klikk her for å angi en forfallsdato",
|
||||
"chooseStartDate": "Klikk her for å angi en startdato",
|
||||
"chooseEndDate": "Klikk her for å angi en sluttdato",
|
||||
"move": "Move task to a different project",
|
||||
"move": "Flytt oppgaven til en annen liste",
|
||||
"done": "Marker som utført!",
|
||||
"undone": "Merk som uferdig",
|
||||
"created": "Opprettet {0} av {1}",
|
||||
|
@ -627,7 +627,7 @@
|
|||
"doneAt": "Ferdig {0}",
|
||||
"updateSuccess": "Oppgaven ble lagret.",
|
||||
"deleteSuccess": "Oppgaven har blitt slettet.",
|
||||
"belongsToProject": "This task belongs to project '{project}'",
|
||||
"belongsToProject": "Denne oppgaven tilhører listen '{project}'",
|
||||
"due": "Forfallsdato {at}",
|
||||
"closePopup": "Lukk popup",
|
||||
"delete": {
|
||||
|
@ -647,7 +647,7 @@
|
|||
"percentDone": "Angi fremdrift",
|
||||
"attachments": "Legg til vedlegg",
|
||||
"relatedTasks": "Legg til relasjon",
|
||||
"moveProject": "Move",
|
||||
"moveProject": "Flytt",
|
||||
"color": "Sett Farge",
|
||||
"delete": "Slett",
|
||||
"favorite": "Legg til i favoritter",
|
||||
|
@ -674,21 +674,21 @@
|
|||
"updated": "Oppdatert"
|
||||
},
|
||||
"subscription": {
|
||||
"subscribedProjectThroughParentNamespace": "You can't unsubscribe here because you are subscribed to this project through its namespace.",
|
||||
"subscribedProjectThroughParentNamespace": "Du kan ikke slutte å abonnere her fordi du abonnerer på denne listen gjennom dens navneområde.",
|
||||
"subscribedTaskThroughParentNamespace": "Du kan ikke slutte å abonnere her fordi du abonnerer på denne oppgaven gjennom navneområdet.",
|
||||
"subscribedTaskThroughParentProject": "You can't unsubscribe here because you are subscribed to this task through its project.",
|
||||
"subscribedTaskThroughParentProject": "Du kan ikke melde deg ut her fordi du abonnerer på denne oppgaven gjennom prosjektet.",
|
||||
"subscribedNamespace": "Du abonnerer for øyeblikket på dette navneområdet og vil motta varsler for endringer.",
|
||||
"notSubscribedNamespace": "Du abonnerer ikke på dette navneområdet og vil ikke motta varsler for endringer.",
|
||||
"subscribedProject": "You are currently subscribed to this project and will receive notifications for changes.",
|
||||
"notSubscribedProject": "You are not subscribed to this project and won't receive notifications for changes.",
|
||||
"subscribedProject": "Du abonnerer for øyeblikket på dette prosjektet og vil motta varsler for endringer.",
|
||||
"notSubscribedProject": "Du abonnerer ikke på dette prosjektet og vil ikke motta varsler for endringer.",
|
||||
"subscribedTask": "Du abonnerer for øyeblikket på denne oppgaven og vil motta varsler for endringer.",
|
||||
"notSubscribedTask": "Du abonnerer ikke på denne oppgaven og vil ikke motta varsler for endringer.",
|
||||
"subscribe": "Abonnerer",
|
||||
"unsubscribe": "Avslutt abonnement",
|
||||
"subscribeSuccessNamespace": "Du abonnerer nå på dette navneområdet",
|
||||
"unsubscribeSuccessNamespace": "Du blir nå avmeldt dette navneområdet",
|
||||
"subscribeSuccessProject": "You are now subscribed to this project",
|
||||
"unsubscribeSuccessProject": "You are now unsubscribed to this project",
|
||||
"subscribeSuccessProject": "Du abonnerer nå på dette prosjektet",
|
||||
"unsubscribeSuccessProject": "Du har nå avsluttet abonnementet for dette prosjektet",
|
||||
"subscribeSuccessTask": "Du abonnerer nå på denne oppgaven",
|
||||
"unsubscribeSuccessTask": "Du har nå avsluttet abonnementet for denne oppgaven"
|
||||
},
|
||||
|
@ -762,7 +762,7 @@
|
|||
"new": "Ny oppgaveforbindelse",
|
||||
"searchPlaceholder": "Skriv søk etter en ny oppgave å legge til som relatert…",
|
||||
"createPlaceholder": "Legg til denne som ny relatert oppgave",
|
||||
"differentProject": "This task belongs to a different project.",
|
||||
"differentProject": "Denne oppgaven tilhører et annet prosjekt.",
|
||||
"differentNamespace": "Denne oppgaven tilhører en annen navneområde.",
|
||||
"noneYet": "Ingen arbeidsrelasjoner ennå.",
|
||||
"delete": "Slett relasjon",
|
||||
|
@ -812,10 +812,10 @@
|
|||
"priority1": "For å angi en oppgaves prioritet, legg til et nummer 1-5, med en {prefix} som prefiks.",
|
||||
"priority2": "Jo høyere tallet er, desto høyere prioritet.",
|
||||
"assignees": "For å direkte tilordne oppgaven til en bruker må du legge til brukernavnet deres med {prefix} som er prefikset på oppgaven.",
|
||||
"project1": "To set a project for the task to appear in, enter its name prefixed with {prefix}.",
|
||||
"project2": "This will return an error if the project does not exist.",
|
||||
"project3": "To use spaces, simply add a \" or ' around the project name.",
|
||||
"project4": "For example: {prefix}\"Project with spaces\".",
|
||||
"project1": "For å angi et prosjekt for oppgaven som skal vises i, angi dets navn med {prefix}.",
|
||||
"project2": "Dette vil returnere en feil dersom prosjektet ikke finnes.",
|
||||
"project3": "For å bruke mellomrom, legg bare til en \" eller ' rundt navnet på prosjektet.",
|
||||
"project4": "For eksempel: {prefix}\"Prosjekt med mellomrom\".",
|
||||
"dateAndTime": "Dato og tid",
|
||||
"date": "Hvilken som helst dato vil bli brukt som forfallsdato for den nye oppgaven. Du kan bruke datoer i hvilket som helst format:",
|
||||
"dateWeekday": "hver ukedag vil bruke neste dato med den datoen",
|
||||
|
@ -848,19 +848,19 @@
|
|||
"delete": {
|
||||
"header": "Slett gruppen",
|
||||
"text1": "Er du sikker på at du vil slette denne gruppen og alle dets medlemmer?",
|
||||
"text2": "All team members will lose access to projects and namespaces shared with this team. This CANNOT BE UNDONE!",
|
||||
"text2": "Alle teammedlemmer vil miste tilgang til prosjekter og navneområder som deles med dette teamet. KAN IKKE ANGRES!",
|
||||
"success": "Gruppen ble slettet."
|
||||
},
|
||||
"deleteUser": {
|
||||
"header": "Fjerne en bruker fra gruppen",
|
||||
"text1": "Er du sikker på at du vil fjerne bruker fra denne gruppen?",
|
||||
"text2": "They will lose access to all projects and namespaces this team has access to. This CANNOT BE UNDONE!",
|
||||
"text2": "De vil miste tilgang til alle prosjekter og namespaces dette teamet har tilgang til. Dette KAN IKKE ANGRES!",
|
||||
"success": "Brukeren ble slettet fra gruppen."
|
||||
},
|
||||
"leave": {
|
||||
"title": "Forlat gruppen",
|
||||
"text1": "Er du sikker på at du vil forlate denne gruppen?",
|
||||
"text2": "You will lose access to all projects and namespaces this team has access to. If you change your mind you'll need a team admin to add you again.",
|
||||
"text2": "Du vil miste tilgang til alle prosjekter og namespaces dette teamet har tilgang til. Hvis du ombestemmer deg, må du ha en lagadministrator for å legge deg til igjen.",
|
||||
"success": "Du har forlatt gruppen."
|
||||
}
|
||||
},
|
||||
|
@ -892,22 +892,25 @@
|
|||
"attachment": "Legg til et vedlegg til denne oppgaven",
|
||||
"related": "Endre relaterte oppgaver for denne oppgaven",
|
||||
"color": "Endre fargen på denne oppgaven",
|
||||
"move": "Move this task to another project",
|
||||
"move": "Flytt denne oppgaven til et annet prosjekt",
|
||||
"reminder": "Behandle påminnelser om denne oppgaven",
|
||||
"description": "Veksle redigering av oppgavebeskrivelsen"
|
||||
"description": "Veksle redigering av oppgavebeskrivelsen",
|
||||
"delete": "Delete this task",
|
||||
"priority": "Change the priority of this task",
|
||||
"favorite": "Mark this task as favorite / unfavorite"
|
||||
},
|
||||
"project": {
|
||||
"title": "Project Views",
|
||||
"switchToListView": "Switch to list view",
|
||||
"switchToGanttView": "Switch to gantt view",
|
||||
"switchToKanbanView": "Switch to kanban view",
|
||||
"switchToTableView": "Switch to table view"
|
||||
"title": "Prosjektvisning",
|
||||
"switchToListView": "Byttet til listevisning",
|
||||
"switchToGanttView": "Bytt til gantt-visning",
|
||||
"switchToKanbanView": "Bytt til kanban visning",
|
||||
"switchToTableView": "Bytt til tabellvisning"
|
||||
},
|
||||
"navigation": {
|
||||
"title": "Navigasjon",
|
||||
"overview": "Naviger til oversikt",
|
||||
"upcoming": "Gå til kommende oppgaver",
|
||||
"namespaces": "Navigate to namespaces & projects",
|
||||
"namespaces": "Gå til navneområder & prosjekter",
|
||||
"labels": "Naviger til etiketter",
|
||||
"teams": "Naviger til gruppe"
|
||||
}
|
||||
|
@ -924,7 +927,7 @@
|
|||
"unarchive": "Av-arkiver",
|
||||
"setBackground": "Bruk som bakgrunn",
|
||||
"share": "Del",
|
||||
"newProject": "New project"
|
||||
"newProject": "Nytt prosjekt"
|
||||
},
|
||||
"apiConfig": {
|
||||
"url": "Vikunja URL",
|
||||
|
@ -943,24 +946,24 @@
|
|||
"notification": {
|
||||
"title": "Varsler",
|
||||
"none": "Du har ingen varsler på dette tidspunktet!",
|
||||
"explainer": "Notifications will appear here when actions on namespaces, projects or tasks you subscribed to happen."
|
||||
"explainer": "Varsler vil vises her når handlinger på navneområder, prosjekter, lister eller oppgaver du abonnerer på."
|
||||
},
|
||||
"quickActions": {
|
||||
"commands": "Kommandoer",
|
||||
"placeholder": "Skriv en kommando eller søk…",
|
||||
"hint": "You can use {project} to limit the search to a project. Combine {project} or {label} (labels) with a search query to search for a task with these labels or on that project. Use {assignee} to only search for teams.",
|
||||
"hint": "Du kan bruke {project} for å begrense søket til en liste. Kombiner {project} eller {label} (etiketter) med et søk for å søke etter en oppgave med disse etikettene eller på den listen. Bruk {assignee} for bare å søke etter lag.",
|
||||
"tasks": "Oppgaver",
|
||||
"projects": "Projects",
|
||||
"projects": "Prosjekter",
|
||||
"teams": "Grupper",
|
||||
"newProject": "Enter the title of the new project…",
|
||||
"newProject": "Skriv tittelen på det nye prosjektet…",
|
||||
"newTask": "Skriv tittelen på den nye oppgaven…",
|
||||
"newNamespace": "Skriv inn tittelen på det nye navneområdet…",
|
||||
"newTeam": "Skriv inn navnet på den nye gruppen…",
|
||||
"createTask": "Create a task in the current project ({title})",
|
||||
"createProject": "Create a project in the current namespace ({title})",
|
||||
"createTask": "Opprett en oppgave i det gjeldende prosjektet ({title})",
|
||||
"createProject": "Opprett et prosjekt i gjeldende navneområde ({title})",
|
||||
"cmds": {
|
||||
"newTask": "Ny oppgave",
|
||||
"newProject": "New project",
|
||||
"newProject": "Nytt prosjekt",
|
||||
"newNamespace": "Nytt navneområde",
|
||||
"newTeam": "Ny gruppe"
|
||||
}
|
||||
|
@ -992,15 +995,15 @@
|
|||
"1018": "Innstillingen av brukerens avatartype er ugyldig.",
|
||||
"2001": "ID kan ikke være tom eller 0.",
|
||||
"2002": "Noen av forespørselsdataene var ugyldig.",
|
||||
"3001": "The project does not exist.",
|
||||
"3004": "You need to have read permissions on that project to perform that action.",
|
||||
"3005": "The project title cannot be empty.",
|
||||
"3006": "The project share does not exist.",
|
||||
"3007": "A project with this identifier already exists.",
|
||||
"3008": "The project is archived and can therefore only be accessed read only. This is also true for all tasks associated with this project.",
|
||||
"4001": "The project task text cannot be empty.",
|
||||
"4002": "The project task does not exist.",
|
||||
"4003": "All bulk editing tasks must belong to the same project.",
|
||||
"3001": "Prosjektet finnes ikke.",
|
||||
"3004": "Du må ha lesetilgang til prosjektet for å utføre den handlingen.",
|
||||
"3005": "Tittelen kan ikke være tom.",
|
||||
"3006": "Prosjektdeling finnes ikke.",
|
||||
"3007": "Et prosjekt med denne identifikatoren eksisterer allerede.",
|
||||
"3008": "Prosjektet er arkivert og kan derfor bare leses inn. Dette gjelder også for alle oppgaver som er tilknyttet dette prosjektet.",
|
||||
"4001": "Prosjektets oppgavetekst kan ikke være tom.",
|
||||
"4002": "Prosjektoppgaven finnes ikke.",
|
||||
"4003": "Alle bulkredigering oppgaver må tilhøre samme prosjekt.",
|
||||
"4004": "Trenger minst én oppgave når masseredigeringsoppgaver skal utføres.",
|
||||
"4005": "Du har ikke rettigheter til å redigere denne siden.",
|
||||
"4006": "Du kan ikke sette en overordnet oppgave som oppgaven selv.",
|
||||
|
@ -1026,21 +1029,21 @@
|
|||
"5012": "Navneområdet er arkivert og kan derfor kun leses på.",
|
||||
"6001": "Gruppe nanvet kan ikke være tomt.",
|
||||
"6002": "Gruppen finnes ikke.",
|
||||
"6004": "The team already has access to that namespace or project.",
|
||||
"6004": "Teamet har allerede tilgang til det navneområdet eller prosjektet.",
|
||||
"6005": "Brukeren er allerede medlem av gruppen.",
|
||||
"6006": "Kan ikke slette siste gruppemedlem.",
|
||||
"6007": "The team does not have access to the project to perform that action.",
|
||||
"7002": "The user already has access to that project.",
|
||||
"7003": "You do not have access to that project.",
|
||||
"6007": "Gruppen har ikke tilgang til prosjektet for å utføre den handlingen.",
|
||||
"7002": "Brukeren har allerede tilgang til det prosjektet.",
|
||||
"7003": "Du har ikke tilgang til det prosjektet.",
|
||||
"8001": "Denne etiketten finnes allerede på den oppgaven.",
|
||||
"8002": "Etiketten finnes ikke.",
|
||||
"8003": "Du har ikke tilgang til denne etiketten.",
|
||||
"9001": "Linken er ugyldig.",
|
||||
"10001": "Bøtten finnes ikke.",
|
||||
"10002": "The bucket does not belong to that project.",
|
||||
"10003": "You cannot remove the last bucket on a project.",
|
||||
"10002": "Denne bøtte tilhører ikke det prosjektet.",
|
||||
"10003": "Du kan ikke fjerne den siste bøtten på et prosjekt.",
|
||||
"10004": "Du kan ikke legge til oppgaven i denne bøtte fordi den allerede overskrider grensen på oppgaver som den kan holde.",
|
||||
"10005": "There can be only one done bucket per project.",
|
||||
"10005": "Det kan bare finnes én ferdigstilt bøtte per prosjekt.",
|
||||
"11001": "Det lagrede filteret finnes ikke.",
|
||||
"11002": "Lagrede filtre er ikke tilgjengelige for lenke delinger.",
|
||||
"12001": "Abonnement enhetstypen er ugyldig.",
|
||||
|
@ -1053,4 +1056,4 @@
|
|||
"frontendVersion": "Frontend versjon: {version}",
|
||||
"apiVersion": "API versjon: {version}"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -529,7 +529,7 @@
|
|||
"code": "Kod",
|
||||
"quote": "Cytat",
|
||||
"unorderedList": "Lista nieuporządkowana",
|
||||
"orderedList ": "Ordered List",
|
||||
"orderedList": "Ordered List",
|
||||
"cleanBlock": "Wyczyść blok",
|
||||
"link": "Link",
|
||||
"image": "Obraz",
|
||||
|
@ -566,14 +566,14 @@
|
|||
"canuse": "Możesz użyć kalkulacji dat do względnego filtrowania dat.",
|
||||
"learnhow": "Sprawdź jak to działa",
|
||||
"title": "Kalkulacja daty",
|
||||
"intro": "Kalkulacja daty pozwala względnie określić daty, które są przetwarzane przez Vikunję w locie, w czasie stosowania filtra.",
|
||||
"intro": "Specify relative dates which are resolved on the fly by Vikunja when applying the filter.",
|
||||
"expression": "Każde wyrażenie kalkulacji daty rozpoczyna się datą zakotwiczenia, którą może być {0} lub wyrażeniem daty zakończonym {1}. Po tej dacie zakotwiczenia opcjonalnie może następować jedno lub więcej wyrażeń matematycznych.",
|
||||
"similar": "Te wyrażenia są podobne do tych dostarczonych przez {0} i {1}.",
|
||||
"add1Day": "Dodaj jeden dzień",
|
||||
"minus1Day": "Odejmij jeden dzień",
|
||||
"roundDay": "Zaokrąglij w dół do najbliższego dnia",
|
||||
"supportedUnits": "Obsługiwane jednostki czasu to:",
|
||||
"someExamples": "Kilka przykładów wyrażeń czasowych:",
|
||||
"supportedUnits": "Supported time units",
|
||||
"someExamples": "Examples of time expressions",
|
||||
"units": {
|
||||
"seconds": "Sekundy",
|
||||
"minutes": "Minuty",
|
||||
|
@ -894,7 +894,10 @@
|
|||
"color": "Zmień kolor tego zadania",
|
||||
"move": "Move this task to another project",
|
||||
"reminder": "Zarządzaj przypomnieniami o tym zadaniu",
|
||||
"description": "Toggle editing of the task description"
|
||||
"description": "Toggle editing of the task description",
|
||||
"delete": "Delete this task",
|
||||
"priority": "Change the priority of this task",
|
||||
"favorite": "Mark this task as favorite / unfavorite"
|
||||
},
|
||||
"project": {
|
||||
"title": "Project Views",
|
||||
|
@ -1053,4 +1056,4 @@
|
|||
"frontendVersion": "Wersja frontendu: {version}",
|
||||
"apiVersion": "Wersja API: {version}"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -529,7 +529,7 @@
|
|||
"code": "Código",
|
||||
"quote": "Citação",
|
||||
"unorderedList": "Lista não ordenada",
|
||||
"orderedList ": "Ordered List",
|
||||
"orderedList": "Ordered List",
|
||||
"cleanBlock": "Clean Block",
|
||||
"link": "Link",
|
||||
"image": "Imagem",
|
||||
|
@ -566,14 +566,14 @@
|
|||
"canuse": "Você pode usar matemática de data para filtrar datas relativas.",
|
||||
"learnhow": "Veja como funciona",
|
||||
"title": "Matemática de Data",
|
||||
"intro": "A matemática de data permite que você especifique datas relativas que são resolvidas em tempo real pelo Vikunja ao aplicar o filtro.",
|
||||
"intro": "Specify relative dates which are resolved on the fly by Vikunja when applying the filter.",
|
||||
"expression": "Each Date Math expression starts with an anchor date, which can either be {0}, or a date string ending with {1}. This anchor date can optionally be followed by one or more maths expressions.",
|
||||
"similar": "These expressions are similar to the ones provided by {0} and {1}.",
|
||||
"add1Day": "Adicionar um dia",
|
||||
"minus1Day": "Subtrair um dia",
|
||||
"roundDay": "Round down to the nearest day",
|
||||
"supportedUnits": "As unidades de tempo suportadas são:",
|
||||
"someExamples": "Alguns exemplos de expressões temporais:",
|
||||
"supportedUnits": "Supported time units",
|
||||
"someExamples": "Examples of time expressions",
|
||||
"units": {
|
||||
"seconds": "Segundos",
|
||||
"minutes": "Minutos",
|
||||
|
@ -894,7 +894,10 @@
|
|||
"color": "Change the color of this task",
|
||||
"move": "Move this task to another project",
|
||||
"reminder": "Manage reminders of this task",
|
||||
"description": "Toggle editing of the task description"
|
||||
"description": "Toggle editing of the task description",
|
||||
"delete": "Delete this task",
|
||||
"priority": "Change the priority of this task",
|
||||
"favorite": "Mark this task as favorite / unfavorite"
|
||||
},
|
||||
"project": {
|
||||
"title": "Project Views",
|
||||
|
@ -1053,4 +1056,4 @@
|
|||
"frontendVersion": "Frontend Version: {version}",
|
||||
"apiVersion": "API Version: {version}"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -6,10 +6,10 @@
|
|||
"welcomeEvening": "Boa Tarde {username}!",
|
||||
"lastViewed": "Visto recentemente",
|
||||
"project": {
|
||||
"newText": "You can create a new project for your new tasks:",
|
||||
"new": "New project",
|
||||
"importText": "Or import your projects and tasks from other services into Vikunja:",
|
||||
"import": "Import your data into Vikunja"
|
||||
"newText": "Podes criar um novo projeto para as tuas novas tarefas:",
|
||||
"new": "Novo projeto",
|
||||
"importText": "Ou importar os teus projetos e tarefas de outros serviços para o Vikunja:",
|
||||
"import": "Importar os teus dados para o Vikunja"
|
||||
}
|
||||
},
|
||||
"404": {
|
||||
|
@ -85,7 +85,7 @@
|
|||
"weekStartSunday": "Domingo",
|
||||
"weekStartMonday": "Segunda-Feira",
|
||||
"language": "Idioma",
|
||||
"defaultProject": "Default Project",
|
||||
"defaultProject": "Projeto Padrão",
|
||||
"timezone": "Fuso Horário",
|
||||
"overdueTasksRemindersTime": "Horário do e-mail de lembrete de tarefas pendentes"
|
||||
},
|
||||
|
@ -143,7 +143,7 @@
|
|||
},
|
||||
"deletion": {
|
||||
"title": "Eliminar a tua conta Vikunja",
|
||||
"text1": "The deletion of your account is permanent and cannot be undone. We will delete all your namespaces, projects, tasks and everything associated with it.",
|
||||
"text1": "A eliminação da tua conta é permanente e não pode ser revertida. Vão ser eliminados todos os teus espaços, projetos, tarefas e tudo o que lhes está associado.",
|
||||
"text2": "Para prosseguires, introduz por favor a tua palavra-passe. Receberás um e-mail com mais instruções.",
|
||||
"confirm": "Eliminar a minha conta",
|
||||
"requestSuccess": "A solicitação foi bem sucedida. Receberás um e-mail com mais instruções.",
|
||||
|
@ -157,7 +157,7 @@
|
|||
},
|
||||
"export": {
|
||||
"title": "Exportar os teus dados do Vikunja",
|
||||
"description": "You can request a copy of all your Vikunja data. This include Namespaces, Projects, Tasks and everything associated to them. You can import this data in any Vikunja instance through the migration function.",
|
||||
"description": "Podes solicitar uma cópia de todos os teus dados do Vikunja. Isso inclui Espaços, Projetos, Tarefas e tudo o que lhes está associado. Podes importar esses dados em qualquer instância do Vikunja através da função de migração.",
|
||||
"descriptionPasswordRequired": "Por favor, introduz a tua palavra-passe para continuar:",
|
||||
"request": "Solicitar uma cópia dos meus dados do Vikunja",
|
||||
"success": "Solicitaste com sucesso os teus dados do Vikunja! Enviaremos um e-mail assim que estiverem prontos para download.",
|
||||
|
@ -165,193 +165,193 @@
|
|||
}
|
||||
},
|
||||
"project": {
|
||||
"archived": "This project is archived. It is not possible to create new or edit tasks for it.",
|
||||
"title": "Project Title",
|
||||
"color": "Color",
|
||||
"projects": "Projects",
|
||||
"search": "Type to search for a project…",
|
||||
"searchSelect": "Click or press enter to select this project",
|
||||
"shared": "Shared Projects",
|
||||
"noDescriptionAvailable": "No project description is available.",
|
||||
"archived": "Este projeto está arquivado. Não é possível editar ou criar novas tarefas para ele.",
|
||||
"title": "Título do Projeto",
|
||||
"color": "Cor",
|
||||
"projects": "Projetos",
|
||||
"search": "Escreve para pesquisar por um projeto…",
|
||||
"searchSelect": "Clica ou pressiona Enter para selecionar este projeto",
|
||||
"shared": "Projetos Partilhados",
|
||||
"noDescriptionAvailable": "Não está disponível nenhuma descrição do projeto.",
|
||||
"create": {
|
||||
"header": "New project",
|
||||
"titlePlaceholder": "The project's title goes here…",
|
||||
"addTitleRequired": "Please specify a title.",
|
||||
"createdSuccess": "The project was successfully created.",
|
||||
"addProjectRequired": "Please specify a project or set a default project in the settings."
|
||||
"header": "Novo projeto",
|
||||
"titlePlaceholder": "O título do projeto será aqui…",
|
||||
"addTitleRequired": "Por favor, especifica um título.",
|
||||
"createdSuccess": "O projeto foi criado com sucesso.",
|
||||
"addProjectRequired": "Por favor, especifica um projeto ou define um projeto padrão nas configurações."
|
||||
},
|
||||
"archive": {
|
||||
"title": "Archive \"{project}\"",
|
||||
"archive": "Archive this project",
|
||||
"unarchive": "Un-Archive this project",
|
||||
"unarchiveText": "You will be able to create new tasks or edit it.",
|
||||
"archiveText": "You won't be able to edit this project or create new tasks until you un-archive it.",
|
||||
"success": "The project was successfully archived."
|
||||
"title": "Arquivar \"{project}\"",
|
||||
"archive": "Arquivar este projeto",
|
||||
"unarchive": "Desarquivar este projeto",
|
||||
"unarchiveText": "Vais ser capaz de criar novas tarefas ou editá-las.",
|
||||
"archiveText": "Não poderás editar este projeto ou criar novas tarefas até o desarquivares.",
|
||||
"success": "Este projeto foi arquivado com sucesso."
|
||||
},
|
||||
"background": {
|
||||
"title": "Set project background",
|
||||
"remove": "Remove Background",
|
||||
"upload": "Choose a background from your pc",
|
||||
"searchPlaceholder": "Search for a background…",
|
||||
"poweredByUnsplash": "Powered by Unsplash",
|
||||
"loadMore": "Load more photos",
|
||||
"success": "The background has been set successfully!",
|
||||
"removeSuccess": "The background has been removed successfully!"
|
||||
"title": "Definir a imagem de fundo do projeto",
|
||||
"remove": "Remover Imagem de Fundo",
|
||||
"upload": "Escolhe uma imagem de fundo do teu pc",
|
||||
"searchPlaceholder": "Procura por uma imagem de fundo…",
|
||||
"poweredByUnsplash": "Fornecido por Unsplash",
|
||||
"loadMore": "Carregar mais fotos",
|
||||
"success": "A imagem de fundo foi definida com sucesso!",
|
||||
"removeSuccess": "A imagem de fundo foi removida com sucesso!"
|
||||
},
|
||||
"delete": {
|
||||
"title": "Delete \"{project}\"",
|
||||
"header": "Delete this project",
|
||||
"text1": "Are you sure you want to delete this project and all of its contents?",
|
||||
"text2": "This includes all tasks and CANNOT BE UNDONE!",
|
||||
"success": "The project was successfully deleted.",
|
||||
"tasksToDelete": "This will irrevocably remove approx. {count} tasks.",
|
||||
"noTasksToDelete": "This project does not contain any tasks, it should be safe to delete."
|
||||
"title": "Eliminar \"{project}\"",
|
||||
"header": "Eliminar este projeto",
|
||||
"text1": "Tens a certeza que prentedes apagar este projeto e todo o seu conteúdo?",
|
||||
"text2": "Isto inclui todas as tarefas e NÃO PODE SER REVERTIDO!",
|
||||
"success": "O projeto foi eliminado com sucesso.",
|
||||
"tasksToDelete": "Isto irá remover irrevogavelmente aprox. {count} tarefas.",
|
||||
"noTasksToDelete": "Este projeto não contém tarefas, deve ser seguro eliminá-lo."
|
||||
},
|
||||
"duplicate": {
|
||||
"title": "Duplicate this project",
|
||||
"label": "Duplicate",
|
||||
"text": "Select a namespace which should hold the duplicated project:",
|
||||
"success": "The project was successfully duplicated."
|
||||
"title": "Duplicar este projeto",
|
||||
"label": "Duplicar",
|
||||
"text": "Selecione um espaço para colocar o projeto duplicado:",
|
||||
"success": "O projeto foi duplicado com sucesso."
|
||||
},
|
||||
"edit": {
|
||||
"header": "Edit This Project",
|
||||
"title": "Edit \"{project}\"",
|
||||
"titlePlaceholder": "The project title goes here…",
|
||||
"identifierTooltip": "The project identifier can be used to uniquely identify a task across projects. You can set it to empty to disable it.",
|
||||
"identifier": "Project Identifier",
|
||||
"identifierPlaceholder": "The project identifier goes here…",
|
||||
"description": "Description",
|
||||
"descriptionPlaceholder": "The projects description goes here…",
|
||||
"color": "Color",
|
||||
"success": "The project was successfully updated."
|
||||
"header": "Editar Este Projeto",
|
||||
"title": "Editar \"{project}\"",
|
||||
"titlePlaceholder": "O título do projeto será aqui…",
|
||||
"identifierTooltip": "O identificador do projeto pode ser utilizado para identificar de forma única uma tarefa entre diferentes projetos. Pode defini-lo como vazio para o desativar.",
|
||||
"identifier": "Identificador do Projeto",
|
||||
"identifierPlaceholder": "O identificador do porjeto será aqui…",
|
||||
"description": "Descrição",
|
||||
"descriptionPlaceholder": "A descrição do projeto será aqui…",
|
||||
"color": "Cor",
|
||||
"success": "O projeto foi atualizado com sucesso."
|
||||
},
|
||||
"share": {
|
||||
"header": "Share this project",
|
||||
"title": "Share \"{project}\"",
|
||||
"share": "Share",
|
||||
"header": "Partilhar este projeto",
|
||||
"title": "Partilhar \"{project}\"",
|
||||
"share": "Partilhar",
|
||||
"links": {
|
||||
"title": "Share Links",
|
||||
"what": "What is a share link?",
|
||||
"explanation": "Share Links allow you to easily share a project with other users who don't have an account on Vikunja.",
|
||||
"create": "Create a new link share",
|
||||
"name": "Name (optional)",
|
||||
"namePlaceholder": "e.g. Lorem Ipsum",
|
||||
"nameExplanation": "All actions done by this link share will show up with the name.",
|
||||
"password": "Password (optional)",
|
||||
"passwordExplanation": "When authenticating, the user will be required to enter this password.",
|
||||
"noName": "No name set",
|
||||
"remove": "Remove a link share",
|
||||
"removeText": "Are you sure you want to remove this link share? It will no longer be possible to access this project with this link share. This cannot be undone!",
|
||||
"createSuccess": "The link share was successfully created.",
|
||||
"deleteSuccess": "The link share was successfully deleted",
|
||||
"view": "View",
|
||||
"sharedBy": "Shared by {0}"
|
||||
"title": "Links Partilhados",
|
||||
"what": "Como funcionam os links partilhados?",
|
||||
"explanation": "Links Partilhados permite-lhe partilhar facilmente um projeto com outros utilizadores que não têm uma conta no Vikunja.",
|
||||
"create": "Criar um novo link partilhado",
|
||||
"name": "Nome (opcional)",
|
||||
"namePlaceholder": "ex.: Lorem Ipsum",
|
||||
"nameExplanation": "Todas as ações realizadas através deste link partilhado vão aparecer com este nome.",
|
||||
"password": "Palavra-passe (opcional)",
|
||||
"passwordExplanation": "Ao autenticar-se, ao utilizador vai ser requerido introduzir esta palavra-passe.",
|
||||
"noName": "Nenhum nome definido",
|
||||
"remove": "Remover um link partilhado",
|
||||
"removeText": "Tens a certeza que queres remover este link partilhado? Não será mais possível aceder a este projeto utilizando este link partilhado. Isto não pode ser revertido!",
|
||||
"createSuccess": "O link partilhado foi criado com sucesso.",
|
||||
"deleteSuccess": "O link partilhado foi eliminado com sucesso",
|
||||
"view": "Visualizar",
|
||||
"sharedBy": "Partilhado por {0}"
|
||||
},
|
||||
"userTeam": {
|
||||
"typeUser": "user | users",
|
||||
"typeTeam": "team | teams",
|
||||
"shared": "Shared with these {type}",
|
||||
"you": "You",
|
||||
"notShared": "Not shared with any {type} yet.",
|
||||
"removeHeader": "Remove a {type} from the {sharable}",
|
||||
"removeText": "Are you sure you want to remove this {sharable} from the {type}? This cannot be undone!",
|
||||
"removeSuccess": "The {sharable} was successfully removed from the {type}.",
|
||||
"addedSuccess": "The {type} was successfully added.",
|
||||
"updatedSuccess": "The {type} was successfully added."
|
||||
"typeUser": "utilizador | utilizadores",
|
||||
"typeTeam": "equipa | equipas",
|
||||
"shared": "Partilhado com seguintes {type}",
|
||||
"you": "Tu",
|
||||
"notShared": "Ainda não partilhado com {type}.",
|
||||
"removeHeader": "Remover {type} de {sharable}",
|
||||
"removeText": "Tens a certeza que prentendes remover {sharable} de {type}? Isto não pode ser revertido!",
|
||||
"removeSuccess": "{sharable} foi removido com sucesso de {type}.",
|
||||
"addedSuccess": "{type} foi adicionado com sucesso.",
|
||||
"updatedSuccess": "{type} foi adicionado com sucesso."
|
||||
},
|
||||
"right": {
|
||||
"title": "Permission",
|
||||
"read": "Read only",
|
||||
"readWrite": "Read & write",
|
||||
"admin": "Admin"
|
||||
"title": "Permissão",
|
||||
"read": "Apenas de leitura",
|
||||
"readWrite": "Leitura e escrita",
|
||||
"admin": "Administrador"
|
||||
},
|
||||
"attributes": {
|
||||
"link": "Link",
|
||||
"delete": "Delete"
|
||||
"delete": "Eliminar"
|
||||
}
|
||||
},
|
||||
"list": {
|
||||
"title": "List",
|
||||
"add": "Add",
|
||||
"addPlaceholder": "Add a new task…",
|
||||
"empty": "This project is currently empty.",
|
||||
"newTaskCta": "Create a new task.",
|
||||
"editTask": "Edit Task"
|
||||
"title": "Lista",
|
||||
"add": "Adicionar",
|
||||
"addPlaceholder": "Adicionar uma nova tarefa…",
|
||||
"empty": "Este projeto está atualmente vazio.",
|
||||
"newTaskCta": "Cria uma nova tarefa.",
|
||||
"editTask": "Editar Tarefa"
|
||||
},
|
||||
"gantt": {
|
||||
"title": "Gantt",
|
||||
"showTasksWithoutDates": "Show tasks which don't have dates set",
|
||||
"size": "Size",
|
||||
"default": "Default",
|
||||
"month": "Month",
|
||||
"day": "Day",
|
||||
"hour": "Hour",
|
||||
"range": "Date Range",
|
||||
"noDates": "This task has no dates set."
|
||||
"showTasksWithoutDates": "Mostrar tarefas que não têm datas atríbuidas",
|
||||
"size": "Tamanho",
|
||||
"default": "Padrão",
|
||||
"month": "Mês",
|
||||
"day": "Dia",
|
||||
"hour": "Hora",
|
||||
"range": "Intervalo de Datas",
|
||||
"noDates": "Esta tarefa não tem datas definidas."
|
||||
},
|
||||
"table": {
|
||||
"title": "Table",
|
||||
"columns": "Columns"
|
||||
"title": "Tabela",
|
||||
"columns": "Colunas"
|
||||
},
|
||||
"kanban": {
|
||||
"title": "Kanban",
|
||||
"limit": "Limit: {limit}",
|
||||
"noLimit": "Not Set",
|
||||
"doneBucket": "Done bucket",
|
||||
"doneBucketHint": "All tasks moved into this bucket will automatically marked as done.",
|
||||
"doneBucketHintExtended": "All tasks moved into the done bucket will be marked as done automatically. All tasks marked as done from elsewhere will be moved as well.",
|
||||
"doneBucketSavedSuccess": "The done bucket has been saved successfully.",
|
||||
"deleteLast": "You cannot remove the last bucket.",
|
||||
"addTaskPlaceholder": "Enter the new task title…",
|
||||
"addTask": "Add a task",
|
||||
"addAnotherTask": "Add another task",
|
||||
"addBucket": "Create a new bucket",
|
||||
"addBucketPlaceholder": "Enter the new bucket title…",
|
||||
"deleteHeaderBucket": "Delete the bucket",
|
||||
"deleteBucketText1": "Are you sure you want to delete this bucket?",
|
||||
"deleteBucketText2": "This will not delete any tasks but move them into the default bucket.",
|
||||
"deleteBucketSuccess": "The bucket has been deleted successfully.",
|
||||
"bucketTitleSavedSuccess": "The bucket title has been saved successfully.",
|
||||
"bucketLimitSavedSuccess": "The bucket limit been saved successfully.",
|
||||
"collapse": "Collapse this bucket"
|
||||
"limit": "Limite: {limit}",
|
||||
"noLimit": "Não Definido",
|
||||
"doneBucket": "Conjunto concluído",
|
||||
"doneBucketHint": "Todas as tarefas movidas para este conjunto serão automaticamente marcadas como concluídas.",
|
||||
"doneBucketHintExtended": "Todas as tarefas movidas para o conjunto concluído serão marcadas automaticamente como concluídas. Todas as tarefas marcadas como concluídas em outro lugar também serão movidas.",
|
||||
"doneBucketSavedSuccess": "O conjunto concluído foi salvo com sucesso.",
|
||||
"deleteLast": "Não podes remover o ultimo conjunto.",
|
||||
"addTaskPlaceholder": "Introduz o título da nova tarefa…",
|
||||
"addTask": "Adicionar uma tarefa",
|
||||
"addAnotherTask": "Adicionar outra tarefa",
|
||||
"addBucket": "Criar um novo conjunto",
|
||||
"addBucketPlaceholder": "Introduz o título do novo conjunto…",
|
||||
"deleteHeaderBucket": "Eliminar o conjunto",
|
||||
"deleteBucketText1": "Tens a certeza que pretendes eliminar este conjunto?",
|
||||
"deleteBucketText2": "Isto não vai eliminar nenhuma tarefa, mas sim movê-la para o conjunto padrão.",
|
||||
"deleteBucketSuccess": "O conjunto foi eliminado com sucesso.",
|
||||
"bucketTitleSavedSuccess": "O título do conjunto foi salvo com sucesso.",
|
||||
"bucketLimitSavedSuccess": "O limite do conjunto foi salvo com sucesso.",
|
||||
"collapse": "Encolher este conjunto"
|
||||
},
|
||||
"pseudo": {
|
||||
"favorites": {
|
||||
"title": "Favorites"
|
||||
"title": "Favoritos"
|
||||
}
|
||||
}
|
||||
},
|
||||
"namespace": {
|
||||
"title": "Namespaces & Projects",
|
||||
"title": "Espaços e Projetos",
|
||||
"namespace": "Espaço",
|
||||
"showArchived": "Mostrar Arquivados",
|
||||
"noneAvailable": "Por enquanto não tens nenhum espaço.",
|
||||
"unarchive": "Desarquivar",
|
||||
"archived": "Arquivado",
|
||||
"noProjects": "This namespace does not contain any projects.",
|
||||
"createProject": "Create a new project in this namespace.",
|
||||
"noProjects": "Este espaço não contém qualquer projeto.",
|
||||
"createProject": "Criar uma novo projeto neste espaço.",
|
||||
"namespaces": "Espaços",
|
||||
"search": "Escreva para pesquisar por um espaço…",
|
||||
"create": {
|
||||
"title": "Novo espaço",
|
||||
"titleRequired": "Por favor, especifica um título.",
|
||||
"explanation": "A namespace is a collection of projects you can share and use to organize your projects with. In fact, every project belongs to a namespace.",
|
||||
"explanation": "Um espaço é uma coleção de projetos que podes partilhar e utilizar para organizar as tuas listas. De facto, cada projeto pertence a um espaço.",
|
||||
"tooltip": "O que é um espaço?",
|
||||
"success": "O espaço foi criado com sucesso."
|
||||
},
|
||||
"archive": {
|
||||
"titleArchive": "Arquivar \"{namespace}\"",
|
||||
"titleUnarchive": "Desarquivar \"{namespace}\"",
|
||||
"archiveText": "You won't be able to edit this namespace or create new projects until you un-archive it. This will also archive all projects in this namespace.",
|
||||
"unarchiveText": "You will be able to create new projects or edit it.",
|
||||
"archiveText": "Não será possível editar este espaço nem criar novos projetos enquanto não o desarquivares. Isto também irá arquivar todas os projetos existentes neste espaço.",
|
||||
"unarchiveText": "Poderás criar novos projetos ou editá-los.",
|
||||
"success": "O espaço foi arquivado com sucesso.",
|
||||
"unarchiveSuccess": "O espaço foi desarquivado com sucesso.",
|
||||
"description": "If a namespace is archived, you cannot create new projects or edit it."
|
||||
"description": "Se um espaço estiver arquivado, não poderás criar novos projetos ou editá-los."
|
||||
},
|
||||
"delete": {
|
||||
"title": "Eliminar \"{namespace}\"",
|
||||
"text1": "Tens a certeza que pretendes eliminar este espaço e todo o seu conteúdo?",
|
||||
"text2": "This includes all projects and tasks and CANNOT BE UNDONE!",
|
||||
"text2": "Isto inclui todas os projetos e tarefas, e NÃO PODE SER REVERTIDO!",
|
||||
"success": "O espaço foi eliminado com sucesso."
|
||||
},
|
||||
"edit": {
|
||||
|
@ -372,7 +372,7 @@
|
|||
},
|
||||
"pseudo": {
|
||||
"sharedProjects": {
|
||||
"title": "Shared Projects"
|
||||
"title": "Projetos Partilhados"
|
||||
},
|
||||
"favorites": {
|
||||
"title": "Favoritos"
|
||||
|
@ -403,7 +403,7 @@
|
|||
},
|
||||
"create": {
|
||||
"title": "Novo Filtro Memorizado",
|
||||
"description": "A saved filter is a virtual project which is computed from a set of filters each time it is accessed. Once created, it will appear in a special namespace.",
|
||||
"description": "Um filtro memorizado é uma lista virtual que é compilada a partir de um conjunto de filtros de cada vez que é acedido. Uma vez criado, irá aparecer num espaço especial.",
|
||||
"action": "Criar novo filtro memorizado",
|
||||
"titleRequired": "Por favor, insere um título para o filtro."
|
||||
},
|
||||
|
@ -435,7 +435,7 @@
|
|||
"label": {
|
||||
"title": "Etiquetas",
|
||||
"manage": "Gerir etiquetas",
|
||||
"description": "Click on a label to edit it. You can edit all labels you created, you can use all labels which are associated with a task to whose project you have access.",
|
||||
"description": "Clica numa etiqueta para a editares. Podes editar todas as etiquetas que criaste, podes utilizar todas as etiquetas que estão associadas a uma tarefa a cujo projeto tens acesso.",
|
||||
"newCTA": "Atualmente não tens quaisquer etiquetas.",
|
||||
"search": "Escreve para pesquisar uma etiqueta…",
|
||||
"create": {
|
||||
|
@ -460,7 +460,7 @@
|
|||
},
|
||||
"sharing": {
|
||||
"authenticating": "A autenticar…",
|
||||
"passwordRequired": "This shared project requires a password. Please enter it below:",
|
||||
"passwordRequired": "Este projeto partilhado requer uma palavra-passe. Por favor, introduz-a abaixo:",
|
||||
"error": "Ocorreu um erro.",
|
||||
"invalidPassword": "A palavra-passe é inválida."
|
||||
},
|
||||
|
@ -529,7 +529,7 @@
|
|||
"code": "Código",
|
||||
"quote": "Citação",
|
||||
"unorderedList": "Lista Não Ordenada",
|
||||
"orderedList ": "Ordered List",
|
||||
"orderedList": "Lista Ordenada",
|
||||
"cleanBlock": "Limpar Formatação",
|
||||
"link": "Link",
|
||||
"image": "Imagem",
|
||||
|
@ -566,14 +566,14 @@
|
|||
"canuse": "Podes utilizar cálculo de data para filtrar por datas relativas.",
|
||||
"learnhow": "Vê como funciona",
|
||||
"title": "Cálculo de Data",
|
||||
"intro": "O cálculo de data permite especificar datas relativas resolvidas em tempo real pelo Vikunja na aplicação do filtro.",
|
||||
"intro": "Especifica datas relativas que serão resolvidas em tempo real pela Vikunja ao aplicar o filtro.",
|
||||
"expression": "Cada expressão de Cálculo de Data inicia com uma data âncora, que tanto pode ser {0}, como uma expressão de data terminada com {1}. Esta data âncora pode ser opcionalmente seguida de uma ou mais expressões matemáticas.",
|
||||
"similar": "Essas expressões são semelhantes às fornecidas por {0} e {1}.",
|
||||
"add1Day": "Adicionar um dia",
|
||||
"minus1Day": "Subtrair um dia",
|
||||
"roundDay": "Arredondar para baixo para o dia mais próximo",
|
||||
"supportedUnits": "As unidades de tempo suportadas são:",
|
||||
"someExamples": "Alguns exemplos de expressões de tempo:",
|
||||
"supportedUnits": "Unidades de tempo suportadas",
|
||||
"someExamples": "Exemplos de expressões de tempo",
|
||||
"units": {
|
||||
"seconds": "Segundos",
|
||||
"minutes": "Minutos",
|
||||
|
@ -619,7 +619,7 @@
|
|||
"chooseDueDate": "Clica aqui para definir uma data de vencimento",
|
||||
"chooseStartDate": "Clica aqui para definir uma data de início",
|
||||
"chooseEndDate": "Clica aqui para definir uma data de fim",
|
||||
"move": "Move task to a different project",
|
||||
"move": "Mover tarefa para outro projeto",
|
||||
"done": "Marcar como concluída!",
|
||||
"undone": "Marcar como não concluída",
|
||||
"created": "Criada {0} por {1}",
|
||||
|
@ -627,7 +627,7 @@
|
|||
"doneAt": "Concluído {0}",
|
||||
"updateSuccess": "A tarefa foi salva com sucesso.",
|
||||
"deleteSuccess": "A tarefa foi eliminada com sucesso.",
|
||||
"belongsToProject": "This task belongs to project '{project}'",
|
||||
"belongsToProject": "Esta tarefa pertence ao projeto '{project}'",
|
||||
"due": "Vence {at}",
|
||||
"closePopup": "Fechar janela",
|
||||
"delete": {
|
||||
|
@ -647,7 +647,7 @@
|
|||
"percentDone": "Definir Progresso",
|
||||
"attachments": "Adicionar Anexos",
|
||||
"relatedTasks": "Adicionar Relação",
|
||||
"moveProject": "Move",
|
||||
"moveProject": "Mover",
|
||||
"color": "Definir Cor",
|
||||
"delete": "Eliminar",
|
||||
"favorite": "Adicionar aos Favoritos",
|
||||
|
@ -674,21 +674,21 @@
|
|||
"updated": "Atualizado"
|
||||
},
|
||||
"subscription": {
|
||||
"subscribedProjectThroughParentNamespace": "You can't unsubscribe here because you are subscribed to this project through its namespace.",
|
||||
"subscribedProjectThroughParentNamespace": "Não podes cancelar a tua subscrição aqui porque estás subscrito neste projeto através do seu espaço.",
|
||||
"subscribedTaskThroughParentNamespace": "Não podes cancelar a tua subscrição aqui porque estás subscrito nesta tarefa através do seu espaço.",
|
||||
"subscribedTaskThroughParentProject": "You can't unsubscribe here because you are subscribed to this task through its project.",
|
||||
"subscribedTaskThroughParentProject": "Não podes cancelar a tua subscrição aqui porque estás subscrito nesta tarefa através do seu projeto.",
|
||||
"subscribedNamespace": "Estás atualmente subscrito a este espaço e serás notificado de alterações.",
|
||||
"notSubscribedNamespace": "Não estás subscrito a este espaço e não serás notificado de alterações.",
|
||||
"subscribedProject": "You are currently subscribed to this project and will receive notifications for changes.",
|
||||
"notSubscribedProject": "You are not subscribed to this project and won't receive notifications for changes.",
|
||||
"subscribedProject": "Estás atualmente subscrito a este projeto e serás notificado de alterações.",
|
||||
"notSubscribedProject": "Não estás subscrito a este projeto e não serás notificado de alterações.",
|
||||
"subscribedTask": "Estás atualmente subscrito a esta tarefa e serás notificado de alterações.",
|
||||
"notSubscribedTask": "Não estás subscrito a esta tarefa e não serás notificado de alterações.",
|
||||
"subscribe": "Subscrever",
|
||||
"unsubscribe": "Remover Subscrição",
|
||||
"subscribeSuccessNamespace": "Estás agora subscrito a este espaço",
|
||||
"unsubscribeSuccessNamespace": "Não estás mais subcrito a este espaço",
|
||||
"subscribeSuccessProject": "You are now subscribed to this project",
|
||||
"unsubscribeSuccessProject": "You are now unsubscribed to this project",
|
||||
"subscribeSuccessProject": "Estás agora subscrito a este projeto",
|
||||
"unsubscribeSuccessProject": "Não estás mais subcrito a este projeto",
|
||||
"subscribeSuccessTask": "Estás agora subscrito a esta tarefa",
|
||||
"unsubscribeSuccessTask": "Não estás mais subcrito a esta tarefa"
|
||||
},
|
||||
|
@ -762,7 +762,7 @@
|
|||
"new": "Nova Relação Entre Tarefas",
|
||||
"searchPlaceholder": "Escreve para pesquisar uma tarefa a adicionar como relacionada…",
|
||||
"createPlaceholder": "Adicionar como nova tarefa relacionada",
|
||||
"differentProject": "This task belongs to a different project.",
|
||||
"differentProject": "Esta tarefa pertence a um projeto diferente.",
|
||||
"differentNamespace": "Esta tarefa pertence a um espaço diferente.",
|
||||
"noneYet": "Ainda sem tarefas relacionadas.",
|
||||
"delete": "Eliminar Relação Entre Tarefas",
|
||||
|
@ -812,10 +812,10 @@
|
|||
"priority1": "Para definir a prioridade de uma tarefa, adiciona um número entre 1 a 5, prefixado com um {prefix}.",
|
||||
"priority2": "Quanto maior o número, maior a prioridade.",
|
||||
"assignees": "Para atribuires uma tarefa diretamente a um utilizador, adiciona à tarefa os seus nomes de utilizador prefixados com {prefix}.",
|
||||
"project1": "To set a project for the task to appear in, enter its name prefixed with {prefix}.",
|
||||
"project2": "This will return an error if the project does not exist.",
|
||||
"project3": "To use spaces, simply add a \" or ' around the project name.",
|
||||
"project4": "For example: {prefix}\"Project with spaces\".",
|
||||
"project1": "Para definir um projeto onde a tarefa deve aparecer, adiciona o seu nome prefixado com {prefix}.",
|
||||
"project2": "Isto vai retornar um erro se o projeto não existir.",
|
||||
"project3": "Para utilizares espaços, basta adicionares um \" ou ' no início e fim do nome do projeto.",
|
||||
"project4": "Por exemplo: {prefix}\"Projeto com espaços\".",
|
||||
"dateAndTime": "Data e hora",
|
||||
"date": "Qualquer data será utilizada como data de vencimento da nova tarefa. Podes utilizar datas em qualquer dos seguintes formatos:",
|
||||
"dateWeekday": "qualquer dia de semana, usará a próxima data com essa data",
|
||||
|
@ -848,19 +848,19 @@
|
|||
"delete": {
|
||||
"header": "Eliminar equipa",
|
||||
"text1": "Tens a certeza que pretendes eliminar esta equipa e todos os seus membros?",
|
||||
"text2": "All team members will lose access to projects and namespaces shared with this team. This CANNOT BE UNDONE!",
|
||||
"text2": "Todos os membros da equipa perderão acesso aos projetos e espaços partilhados com esta equipa. Isto NÃO PODE SER REVERTIDO!",
|
||||
"success": "A equipa foi eliminada com sucesso."
|
||||
},
|
||||
"deleteUser": {
|
||||
"header": "Remover utilizador da equipa",
|
||||
"text1": "Tens a certeza que pretendes remover este utilizador da equipa?",
|
||||
"text2": "They will lose access to all projects and namespaces this team has access to. This CANNOT BE UNDONE!",
|
||||
"text2": "Eles perderão o acesso a todos os projetos e espaços a que esta equipa tem acesso. Isto NÃO PODER SER REVERTIDO!",
|
||||
"success": "O utilizador foi removido da equipa com sucesso."
|
||||
},
|
||||
"leave": {
|
||||
"title": "Sair da equipa",
|
||||
"text1": "Tens a certeza de que queres sair desta equipa?",
|
||||
"text2": "You will lose access to all projects and namespaces this team has access to. If you change your mind you'll need a team admin to add you again.",
|
||||
"text2": "Vais perder o acesso a todos os projetos e espaços a que esta equipa tem acesso. Se mudares de ideias, vais necessitar que um administrador da equipa te adicione novamente.",
|
||||
"success": "Saíste da equipa com sucesso."
|
||||
}
|
||||
},
|
||||
|
@ -892,22 +892,25 @@
|
|||
"attachment": "Adicionar um anexo a esta tarefa",
|
||||
"related": "Modificar as tarefas relacionadas desta tarefa",
|
||||
"color": "Alterar a cor desta tarefa",
|
||||
"move": "Move this task to another project",
|
||||
"move": "Mover esta tarefa para outro projeto",
|
||||
"reminder": "Gerir lembretes desta tarefa",
|
||||
"description": "Alternar edição da descrição da tarefa"
|
||||
"description": "Alternar edição da descrição da tarefa",
|
||||
"delete": "Delete this task",
|
||||
"priority": "Change the priority of this task",
|
||||
"favorite": "Mark this task as favorite / unfavorite"
|
||||
},
|
||||
"project": {
|
||||
"title": "Project Views",
|
||||
"switchToListView": "Switch to list view",
|
||||
"switchToGanttView": "Switch to gantt view",
|
||||
"switchToKanbanView": "Switch to kanban view",
|
||||
"switchToTableView": "Switch to table view"
|
||||
"title": "Vista do Projeto",
|
||||
"switchToListView": "Alternar para visualização em lista",
|
||||
"switchToGanttView": "Alternar para visualização em gráfico de Gantt",
|
||||
"switchToKanbanView": "Alternar para visualização em método de Kanban",
|
||||
"switchToTableView": "Alternar para visualização em tabela"
|
||||
},
|
||||
"navigation": {
|
||||
"title": "Navegação",
|
||||
"overview": "Ir para a vista geral",
|
||||
"upcoming": "Ir para próximas tarefas",
|
||||
"namespaces": "Navigate to namespaces & projects",
|
||||
"namespaces": "Ir para espaços e projetos",
|
||||
"labels": "Navegar para etiquetas",
|
||||
"teams": "Navegar para equipas"
|
||||
}
|
||||
|
@ -924,7 +927,7 @@
|
|||
"unarchive": "Desarquivar",
|
||||
"setBackground": "Definir Fundo",
|
||||
"share": "Partilhar",
|
||||
"newProject": "New project"
|
||||
"newProject": "Novo projeto"
|
||||
},
|
||||
"apiConfig": {
|
||||
"url": "URL do Vikunja",
|
||||
|
@ -943,24 +946,24 @@
|
|||
"notification": {
|
||||
"title": "Notificações",
|
||||
"none": "Não tens nenhuma notificação. Tem um bom dia!",
|
||||
"explainer": "Notifications will appear here when actions on namespaces, projects or tasks you subscribed to happen."
|
||||
"explainer": "As notificações aparecerão aqui quando ocorrem ações em espaços, projetos ou tarefas às quais estejas subscrito."
|
||||
},
|
||||
"quickActions": {
|
||||
"commands": "Comandos",
|
||||
"placeholder": "Escreve um comando ou pesquisa…",
|
||||
"hint": "You can use {project} to limit the search to a project. Combine {project} or {label} (labels) with a search query to search for a task with these labels or on that project. Use {assignee} to only search for teams.",
|
||||
"hint": "Podes utilizar {project} para limitar a pesquisa a um projeto. Combina {project} ou {label} (etiquetas) com uma pesquisa para procurar uma tarefa com essas etiquetas ou nesse projeto. Utiliza {assignee} para pesquisares apenas por equipas.",
|
||||
"tasks": "Tarefas",
|
||||
"projects": "Projects",
|
||||
"projects": "Projetos",
|
||||
"teams": "Equipas",
|
||||
"newProject": "Enter the title of the new project…",
|
||||
"newProject": "Insere o título do novo espaço…",
|
||||
"newTask": "Insere o título da nova tarefa…",
|
||||
"newNamespace": "Insere o título do novo espaço…",
|
||||
"newTeam": "Insere o nome da nova equipa…",
|
||||
"createTask": "Create a task in the current project ({title})",
|
||||
"createProject": "Create a project in the current namespace ({title})",
|
||||
"createTask": "Cria uma tarefa no projeto atual ({title})",
|
||||
"createProject": "Cria um projeto no espaço atual ({title})",
|
||||
"cmds": {
|
||||
"newTask": "Nova tarefa",
|
||||
"newProject": "New project",
|
||||
"newProject": "Novo projeto",
|
||||
"newNamespace": "Novo espaço",
|
||||
"newTeam": "Nova equipa"
|
||||
}
|
||||
|
@ -992,15 +995,15 @@
|
|||
"1018": "A definição do tipo de avatar do utilizador é inválida.",
|
||||
"2001": "O ID não pode ser 0 ou estar vazio.",
|
||||
"2002": "Alguns dos dados solicitados eram inválidos.",
|
||||
"3001": "The project does not exist.",
|
||||
"3004": "You need to have read permissions on that project to perform that action.",
|
||||
"3005": "The project title cannot be empty.",
|
||||
"3006": "The project share does not exist.",
|
||||
"3007": "A project with this identifier already exists.",
|
||||
"3008": "The project is archived and can therefore only be accessed read only. This is also true for all tasks associated with this project.",
|
||||
"4001": "The project task text cannot be empty.",
|
||||
"4002": "The project task does not exist.",
|
||||
"4003": "All bulk editing tasks must belong to the same project.",
|
||||
"3001": "O projeto não existe.",
|
||||
"3004": "Precisas ter permissão de leitura nesse projeto para executar essa ação.",
|
||||
"3005": "O nome do projeto não pode estar em branco.",
|
||||
"3006": "O projeto partiilhado não existe.",
|
||||
"3007": "Já existe um projeto com este identificador.",
|
||||
"3008": "O projeto está arquivado, portanto, só pode ser acedido para leitura. Isto é também verdade para todas as tarefas associadas a este projeto.",
|
||||
"4001": "O texto da tarefa não pode estar vazio.",
|
||||
"4002": "A tarefa não existe.",
|
||||
"4003": "Todas as tarefas para edição em massa devem pertencer ao mesmo projeto.",
|
||||
"4004": "Precisas selecionar pelo menos uma tarefa para realizar uma edição em massa.",
|
||||
"4005": "Não possuis permissão para ver esta tarefa.",
|
||||
"4006": "Não podes definir uma tarefa principal como a tarefa em si.",
|
||||
|
@ -1026,21 +1029,21 @@
|
|||
"5012": "O espaço está arquivado, portanto, só pode ser acedido para leitura.",
|
||||
"6001": "O nome da equipa não pode estar vazio.",
|
||||
"6002": "A equipa não existe.",
|
||||
"6004": "The team already has access to that namespace or project.",
|
||||
"6004": "A equipa tem já acesso a esse espaço ou projeto.",
|
||||
"6005": "O utilizador é já membro dessa equipa.",
|
||||
"6006": "Não podes eliminar o último membro da equipa.",
|
||||
"6007": "The team does not have access to the project to perform that action.",
|
||||
"7002": "The user already has access to that project.",
|
||||
"7003": "You do not have access to that project.",
|
||||
"6007": "A equipa não tem acesso ao projeto para executar essa ação.",
|
||||
"7002": "O utilizador tem já acesso a esse projeto.",
|
||||
"7003": "Não tens acesso a esse projeto.",
|
||||
"8001": "Esta etiqueta já existe nessa lista.",
|
||||
"8002": "A etiqueta não existe.",
|
||||
"8003": "Não tens acesso a esta etiqueta.",
|
||||
"9001": "A permissão é inválida.",
|
||||
"10001": "O conjunto não existe.",
|
||||
"10002": "The bucket does not belong to that project.",
|
||||
"10003": "You cannot remove the last bucket on a project.",
|
||||
"10002": "O conjunto não pertence a esse projeto.",
|
||||
"10003": "Não podes eliminar o último conjunto num projeto.",
|
||||
"10004": "Não podes adicionar a tarefa a este conjunto, pois dessa forma excede-se o seu limite de tarefas.",
|
||||
"10005": "There can be only one done bucket per project.",
|
||||
"10005": "Só pode existir um conjunto concluído por projeto.",
|
||||
"11001": "O filtro memorizado não existe.",
|
||||
"11002": "Filtros memorizados não estão disponíveis para links partilhados.",
|
||||
"12001": "O tipo de entidade da subscrição é inválido.",
|
||||
|
@ -1053,4 +1056,4 @@
|
|||
"frontendVersion": "Versão Atual: {version}",
|
||||
"apiVersion": "Versão da API: {version}"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -529,7 +529,7 @@
|
|||
"code": "Code",
|
||||
"quote": "Quote",
|
||||
"unorderedList": "Unordered List",
|
||||
"orderedList ": "Ordered List",
|
||||
"orderedList": "Ordered List",
|
||||
"cleanBlock": "Clean Block",
|
||||
"link": "Link",
|
||||
"image": "Image",
|
||||
|
@ -566,14 +566,14 @@
|
|||
"canuse": "You can use date math to filter for relative dates.",
|
||||
"learnhow": "Check out how it works",
|
||||
"title": "Date Math",
|
||||
"intro": "Date Math allows you to specify relative dates which are resolved on the fly by Vikunja when applying the filter.",
|
||||
"intro": "Specify relative dates which are resolved on the fly by Vikunja when applying the filter.",
|
||||
"expression": "Each Date Math expression starts with an anchor date, which can either be {0}, or a date string ending with {1}. This anchor date can optionally be followed by one or more maths expressions.",
|
||||
"similar": "These expressions are similar to the ones provided by {0} and {1}.",
|
||||
"add1Day": "Add one day",
|
||||
"minus1Day": "Subtract one day",
|
||||
"roundDay": "Round down to the nearest day",
|
||||
"supportedUnits": "Supported time units are:",
|
||||
"someExamples": "Some examples of time expressions:",
|
||||
"supportedUnits": "Supported time units",
|
||||
"someExamples": "Examples of time expressions",
|
||||
"units": {
|
||||
"seconds": "Seconds",
|
||||
"minutes": "Minutes",
|
||||
|
@ -894,7 +894,10 @@
|
|||
"color": "Change the color of this task",
|
||||
"move": "Move this task to another project",
|
||||
"reminder": "Manage reminders of this task",
|
||||
"description": "Toggle editing of the task description"
|
||||
"description": "Toggle editing of the task description",
|
||||
"delete": "Delete this task",
|
||||
"priority": "Change the priority of this task",
|
||||
"favorite": "Mark this task as favorite / unfavorite"
|
||||
},
|
||||
"project": {
|
||||
"title": "Project Views",
|
||||
|
@ -1053,4 +1056,4 @@
|
|||
"frontendVersion": "Frontend Version: {version}",
|
||||
"apiVersion": "API Version: {version}"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -6,10 +6,10 @@
|
|||
"welcomeEvening": "Добрый вечер, {username}!",
|
||||
"lastViewed": "Последние просмотренные",
|
||||
"project": {
|
||||
"newText": "You can create a new project for your new tasks:",
|
||||
"new": "New project",
|
||||
"importText": "Or import your projects and tasks from other services into Vikunja:",
|
||||
"import": "Import your data into Vikunja"
|
||||
"newText": "Вы можете создать новый проект для своих задач:",
|
||||
"new": "Создать проект",
|
||||
"importText": "Или импортировать проекты и задачи из других сервисов в Vikunja:",
|
||||
"import": "Импорт данных в Vikunja"
|
||||
}
|
||||
},
|
||||
"404": {
|
||||
|
@ -31,7 +31,7 @@
|
|||
"username": "Имя пользователя",
|
||||
"usernameEmail": "Имя пользователя или Email",
|
||||
"usernamePlaceholder": "напр. frederick",
|
||||
"email": "Email address",
|
||||
"email": "Email адрес",
|
||||
"emailPlaceholder": "напр. frederic{'@'}vikunja.io",
|
||||
"password": "Пароль",
|
||||
"passwordPlaceholder": "напр. •••••••••••",
|
||||
|
@ -48,7 +48,7 @@
|
|||
"loginWith": "Войти через {provider}",
|
||||
"authenticating": "Аутентификация…",
|
||||
"openIdStateError": "State does not match, refusing to continue!",
|
||||
"openIdGeneralError": "An error occured while authenticating against the third party.",
|
||||
"openIdGeneralError": "Произошла ошибка при аутентификации с помощью третьей стороны.",
|
||||
"logout": "Выйти",
|
||||
"emailInvalid": "Введите корректный email адрес.",
|
||||
"usernameRequired": "Введите имя пользователя.",
|
||||
|
@ -85,9 +85,9 @@
|
|||
"weekStartSunday": "Воскресенье",
|
||||
"weekStartMonday": "Понедельник",
|
||||
"language": "Язык",
|
||||
"defaultProject": "Default Project",
|
||||
"defaultProject": "Проект по умолчанию",
|
||||
"timezone": "Часовой пояс",
|
||||
"overdueTasksRemindersTime": "Overdue tasks reminder email time"
|
||||
"overdueTasksRemindersTime": "Время напоминания о невыполненных задачах"
|
||||
},
|
||||
"totp": {
|
||||
"title": "Двухфакторная аутентификация",
|
||||
|
@ -143,7 +143,7 @@
|
|||
},
|
||||
"deletion": {
|
||||
"title": "Удалить свой аккаунт VIkunja",
|
||||
"text1": "The deletion of your account is permanent and cannot be undone. We will delete all your namespaces, projects, tasks and everything associated with it.",
|
||||
"text1": "Удаление аккаунта необратимо. Мы удалим все ваши пространства имён, проекты, задачи и всё связанное с ними.",
|
||||
"text2": "Для продолжения введите свой пароль. На почту будет отправлено письмо с дальнейшими инструкциями.",
|
||||
"confirm": "Удалить мой аккаунт",
|
||||
"requestSuccess": "Запрос успешно выполнен. На почту будет отправлено письмо с дальнейшими инструкциями.",
|
||||
|
@ -157,7 +157,7 @@
|
|||
},
|
||||
"export": {
|
||||
"title": "Экспорт данных Vikunja",
|
||||
"description": "You can request a copy of all your Vikunja data. This include Namespaces, Projects, Tasks and everything associated to them. You can import this data in any Vikunja instance through the migration function.",
|
||||
"description": "Вы можете запросить копию всех своих данных Vikunja. Это включает в себя пространства имён, проекты, задачи и всё связанное с ними. Эти данные можно будет импортировать на любом экземпляре Vikunja через функцию миграции.",
|
||||
"descriptionPasswordRequired": "Для продолжения введите свой пароль:",
|
||||
"request": "Запросить копию моих данных Vikunja",
|
||||
"success": "Данные Vikunja успешно запрошены! На почту придёт письмо, когда они будут готовы для скачивания.",
|
||||
|
@ -165,193 +165,193 @@
|
|||
}
|
||||
},
|
||||
"project": {
|
||||
"archived": "This project is archived. It is not possible to create new or edit tasks for it.",
|
||||
"title": "Project Title",
|
||||
"color": "Color",
|
||||
"projects": "Projects",
|
||||
"search": "Type to search for a project…",
|
||||
"searchSelect": "Click or press enter to select this project",
|
||||
"archived": "Этот проект архивирован. В нём нельзя создавать или изменять задачи.",
|
||||
"title": "Название проекта",
|
||||
"color": "Цвет",
|
||||
"projects": "Проекты",
|
||||
"search": "Введите запрос для поиска проекта…",
|
||||
"searchSelect": "Кликните или нажмите Enter для выбора этого проекта",
|
||||
"shared": "Shared Projects",
|
||||
"noDescriptionAvailable": "No project description is available.",
|
||||
"noDescriptionAvailable": "Описание проекта отсутствует.",
|
||||
"create": {
|
||||
"header": "New project",
|
||||
"titlePlaceholder": "The project's title goes here…",
|
||||
"addTitleRequired": "Please specify a title.",
|
||||
"createdSuccess": "The project was successfully created.",
|
||||
"addProjectRequired": "Please specify a project or set a default project in the settings."
|
||||
"header": "Создать проект",
|
||||
"titlePlaceholder": "Введите название проекта…",
|
||||
"addTitleRequired": "Пожалуйста, укажите название.",
|
||||
"createdSuccess": "Проект успешно создан.",
|
||||
"addProjectRequired": "Пожалуйста, укажите проект или выберите проект по умолчанию в настройках."
|
||||
},
|
||||
"archive": {
|
||||
"title": "Archive \"{project}\"",
|
||||
"archive": "Archive this project",
|
||||
"unarchive": "Un-Archive this project",
|
||||
"unarchiveText": "You will be able to create new tasks or edit it.",
|
||||
"archiveText": "You won't be able to edit this project or create new tasks until you un-archive it.",
|
||||
"success": "The project was successfully archived."
|
||||
"title": "Архивирование «{project}»",
|
||||
"archive": "Архивирование проекта",
|
||||
"unarchive": "Возвращение проекта из архива",
|
||||
"unarchiveText": "Вы сможете создавать новые задачи или изменять их.",
|
||||
"archiveText": "Вы не сможете изменять этот проект или создавать в нём новые задачи, пока не вернёте его из архива.",
|
||||
"success": "Проект архивирован."
|
||||
},
|
||||
"background": {
|
||||
"title": "Set project background",
|
||||
"remove": "Remove Background",
|
||||
"upload": "Choose a background from your pc",
|
||||
"searchPlaceholder": "Search for a background…",
|
||||
"poweredByUnsplash": "Powered by Unsplash",
|
||||
"loadMore": "Load more photos",
|
||||
"success": "The background has been set successfully!",
|
||||
"removeSuccess": "The background has been removed successfully!"
|
||||
"title": "Установить фон проекта",
|
||||
"remove": "Удалить фон",
|
||||
"upload": "Выбрать фон со своего ПК",
|
||||
"searchPlaceholder": "Введите запрос для поиска фона…",
|
||||
"poweredByUnsplash": "Изображения с Unsplash",
|
||||
"loadMore": "Загрузить больше фотографий",
|
||||
"success": "Фон установлен!",
|
||||
"removeSuccess": "Фон удалён!"
|
||||
},
|
||||
"delete": {
|
||||
"title": "Delete \"{project}\"",
|
||||
"header": "Delete this project",
|
||||
"text1": "Are you sure you want to delete this project and all of its contents?",
|
||||
"text2": "This includes all tasks and CANNOT BE UNDONE!",
|
||||
"success": "The project was successfully deleted.",
|
||||
"tasksToDelete": "This will irrevocably remove approx. {count} tasks.",
|
||||
"noTasksToDelete": "This project does not contain any tasks, it should be safe to delete."
|
||||
"title": "Удаление «{project}»",
|
||||
"header": "Удаление проекта",
|
||||
"text1": "Удалить этот проект вместе со всем содержимым?",
|
||||
"text2": "Это включает в себя все задачи, и отменить это будет нельзя!",
|
||||
"success": "Проект успешно удалён.",
|
||||
"tasksToDelete": "Это безвозвратно удалит примерно {count} задач.",
|
||||
"noTasksToDelete": "В этом проекте нет никаких задач, можно спокойно удалять."
|
||||
},
|
||||
"duplicate": {
|
||||
"title": "Duplicate this project",
|
||||
"label": "Duplicate",
|
||||
"text": "Select a namespace which should hold the duplicated project:",
|
||||
"success": "The project was successfully duplicated."
|
||||
"title": "Создание копии проекта",
|
||||
"label": "Создать копию",
|
||||
"text": "Пространство имён, в которое поместить копию проекта:",
|
||||
"success": "Копия проекта создана."
|
||||
},
|
||||
"edit": {
|
||||
"header": "Edit This Project",
|
||||
"title": "Edit \"{project}\"",
|
||||
"titlePlaceholder": "The project title goes here…",
|
||||
"identifierTooltip": "The project identifier can be used to uniquely identify a task across projects. You can set it to empty to disable it.",
|
||||
"identifier": "Project Identifier",
|
||||
"identifierPlaceholder": "The project identifier goes here…",
|
||||
"description": "Description",
|
||||
"descriptionPlaceholder": "The projects description goes here…",
|
||||
"header": "Изменение проекта",
|
||||
"title": "Изменить «{project}»",
|
||||
"titlePlaceholder": "Введите название проекта…",
|
||||
"identifierTooltip": "Идентификатор проекта используется для однозначной идентификации задачи среди разных проектов. Можно оставить пустым для отключения этого.",
|
||||
"identifier": "Идентификатор проекта",
|
||||
"identifierPlaceholder": "Введите идентификатор проекта…",
|
||||
"description": "Описание",
|
||||
"descriptionPlaceholder": "Введите описание проекта…",
|
||||
"color": "Color",
|
||||
"success": "The project was successfully updated."
|
||||
"success": "Проект успешно обновлён."
|
||||
},
|
||||
"share": {
|
||||
"header": "Share this project",
|
||||
"title": "Share \"{project}\"",
|
||||
"share": "Share",
|
||||
"header": "Поделиться проектом",
|
||||
"title": "Поделиться проектом «{project}»",
|
||||
"share": "Поделиться",
|
||||
"links": {
|
||||
"title": "Share Links",
|
||||
"what": "What is a share link?",
|
||||
"explanation": "Share Links allow you to easily share a project with other users who don't have an account on Vikunja.",
|
||||
"create": "Create a new link share",
|
||||
"name": "Name (optional)",
|
||||
"namePlaceholder": "e.g. Lorem Ipsum",
|
||||
"nameExplanation": "All actions done by this link share will show up with the name.",
|
||||
"password": "Password (optional)",
|
||||
"passwordExplanation": "When authenticating, the user will be required to enter this password.",
|
||||
"noName": "No name set",
|
||||
"remove": "Remove a link share",
|
||||
"removeText": "Are you sure you want to remove this link share? It will no longer be possible to access this project with this link share. This cannot be undone!",
|
||||
"createSuccess": "The link share was successfully created.",
|
||||
"deleteSuccess": "The link share was successfully deleted",
|
||||
"view": "View",
|
||||
"sharedBy": "Shared by {0}"
|
||||
"title": "Ссылки для обмена",
|
||||
"what": "Что такое ссылка для обмена?",
|
||||
"explanation": "Ссылка для обмена позволяет поделиться проектом с теми, у кого нет аккаунта в Vikunja.",
|
||||
"create": "Создать новую ссылку для обмена",
|
||||
"name": "Имя (необязательно)",
|
||||
"namePlaceholder": "напр. Lorem Ipsum",
|
||||
"nameExplanation": "Все действия, выполненные через эту ссылку, будут подписаны этим именем.",
|
||||
"password": "Пароль (необязательно)",
|
||||
"passwordExplanation": "Пользователь будет должен ввести пароль для входа.",
|
||||
"noName": "Без имени",
|
||||
"remove": "Удалить ссылку для обмена",
|
||||
"removeText": "Удалить эту ссылку для обмена? Больше не удастся получить доступ к проекту через эту ссылку. Это действие отменить нельзя!",
|
||||
"createSuccess": "Ссылка создана.",
|
||||
"deleteSuccess": "Ссылка удалена",
|
||||
"view": "Режим просмотра",
|
||||
"sharedBy": "Создатель: {0}"
|
||||
},
|
||||
"userTeam": {
|
||||
"typeUser": "user | users",
|
||||
"typeTeam": "team | teams",
|
||||
"shared": "Shared with these {type}",
|
||||
"you": "You",
|
||||
"notShared": "Not shared with any {type} yet.",
|
||||
"removeHeader": "Remove a {type} from the {sharable}",
|
||||
"removeText": "Are you sure you want to remove this {sharable} from the {type}? This cannot be undone!",
|
||||
"removeSuccess": "The {sharable} was successfully removed from the {type}.",
|
||||
"addedSuccess": "The {type} was successfully added.",
|
||||
"updatedSuccess": "The {type} was successfully added."
|
||||
"typeUser": "пользователь | пользователи",
|
||||
"typeTeam": "группа | группы",
|
||||
"shared": "Поделились с {type}",
|
||||
"you": "Вы",
|
||||
"notShared": "Не поделились ни с кем из {type}.",
|
||||
"removeHeader": "Удалить {type} из {sharable}",
|
||||
"removeText": "Удалить {sharable} из {type}? Это действие отменить нельзя!",
|
||||
"removeSuccess": "{sharable} успешно удалён из {type}.",
|
||||
"addedSuccess": "{type} успешно добавлен.",
|
||||
"updatedSuccess": "{type} успешно добавлен."
|
||||
},
|
||||
"right": {
|
||||
"title": "Permission",
|
||||
"read": "Read only",
|
||||
"readWrite": "Read & write",
|
||||
"admin": "Admin"
|
||||
"title": "Права",
|
||||
"read": "Только чтение",
|
||||
"readWrite": "Чтение и запись",
|
||||
"admin": "Админ"
|
||||
},
|
||||
"attributes": {
|
||||
"link": "Link",
|
||||
"delete": "Delete"
|
||||
"link": "Ссылка",
|
||||
"delete": "Удалить"
|
||||
}
|
||||
},
|
||||
"list": {
|
||||
"title": "List",
|
||||
"add": "Add",
|
||||
"addPlaceholder": "Add a new task…",
|
||||
"empty": "This project is currently empty.",
|
||||
"newTaskCta": "Create a new task.",
|
||||
"editTask": "Edit Task"
|
||||
"title": "Список",
|
||||
"add": "Добавить",
|
||||
"addPlaceholder": "Добавить новую задачу…",
|
||||
"empty": "Проект сейчас пуст.",
|
||||
"newTaskCta": "Создать новую задачу.",
|
||||
"editTask": "Изменить задачу"
|
||||
},
|
||||
"gantt": {
|
||||
"title": "Gantt",
|
||||
"showTasksWithoutDates": "Show tasks which don't have dates set",
|
||||
"size": "Size",
|
||||
"default": "Default",
|
||||
"month": "Month",
|
||||
"day": "Day",
|
||||
"hour": "Hour",
|
||||
"range": "Date Range",
|
||||
"noDates": "This task has no dates set."
|
||||
"title": "Гант",
|
||||
"showTasksWithoutDates": "Показать задачи без установленной даты",
|
||||
"size": "Размер",
|
||||
"default": "По умолчанию",
|
||||
"month": "Месяц",
|
||||
"day": "День",
|
||||
"hour": "Час",
|
||||
"range": "Диапазон",
|
||||
"noDates": "В этой задаче нет установленной даты."
|
||||
},
|
||||
"table": {
|
||||
"title": "Table",
|
||||
"columns": "Columns"
|
||||
"title": "Таблица",
|
||||
"columns": "Столбцы"
|
||||
},
|
||||
"kanban": {
|
||||
"title": "Kanban",
|
||||
"limit": "Limit: {limit}",
|
||||
"noLimit": "Not Set",
|
||||
"doneBucket": "Done bucket",
|
||||
"doneBucketHint": "All tasks moved into this bucket will automatically marked as done.",
|
||||
"doneBucketHintExtended": "All tasks moved into the done bucket will be marked as done automatically. All tasks marked as done from elsewhere will be moved as well.",
|
||||
"doneBucketSavedSuccess": "The done bucket has been saved successfully.",
|
||||
"deleteLast": "You cannot remove the last bucket.",
|
||||
"addTaskPlaceholder": "Enter the new task title…",
|
||||
"addTask": "Add a task",
|
||||
"addAnotherTask": "Add another task",
|
||||
"addBucket": "Create a new bucket",
|
||||
"addBucketPlaceholder": "Enter the new bucket title…",
|
||||
"deleteHeaderBucket": "Delete the bucket",
|
||||
"deleteBucketText1": "Are you sure you want to delete this bucket?",
|
||||
"deleteBucketText2": "This will not delete any tasks but move them into the default bucket.",
|
||||
"deleteBucketSuccess": "The bucket has been deleted successfully.",
|
||||
"bucketTitleSavedSuccess": "The bucket title has been saved successfully.",
|
||||
"bucketLimitSavedSuccess": "The bucket limit been saved successfully.",
|
||||
"collapse": "Collapse this bucket"
|
||||
"title": "Канбан",
|
||||
"limit": "Лимит: {limit}",
|
||||
"noLimit": "не установлен",
|
||||
"doneBucket": "Колонка завершённых",
|
||||
"doneBucketHint": "Все задачи, помещённые в эту колонку, автоматически отмечаются как завершённые.",
|
||||
"doneBucketHintExtended": "Все задачи, перенесённые в колонку завершённых, будут помечены как завершённые. Все задачи, помеченные как завершённые, также будут перемещены в эту колонку.",
|
||||
"doneBucketSavedSuccess": "Колонка завершённых была успешно сохранена.",
|
||||
"deleteLast": "Нельзя удалить последнюю колонку.",
|
||||
"addTaskPlaceholder": "Введите название задачи…",
|
||||
"addTask": "Добавить задачу",
|
||||
"addAnotherTask": "Добавить ещё задачу",
|
||||
"addBucket": "Создать новую колонку",
|
||||
"addBucketPlaceholder": "Введите название новой колонки…",
|
||||
"deleteHeaderBucket": "Удаление колонки",
|
||||
"deleteBucketText1": "Удалить эту колонку?",
|
||||
"deleteBucketText2": "Это не удалит задачи, а переместит их в колонку по умолчанию.",
|
||||
"deleteBucketSuccess": "Колонка удалена.",
|
||||
"bucketTitleSavedSuccess": "Название колонки сохранено.",
|
||||
"bucketLimitSavedSuccess": "Лимит колонки сохранён.",
|
||||
"collapse": "Свернуть эту колонку"
|
||||
},
|
||||
"pseudo": {
|
||||
"favorites": {
|
||||
"title": "Favorites"
|
||||
"title": "Избранное"
|
||||
}
|
||||
}
|
||||
},
|
||||
"namespace": {
|
||||
"title": "Namespaces & Projects",
|
||||
"title": "Пространства имён и проекты",
|
||||
"namespace": "Пространство имён",
|
||||
"showArchived": "Показать архив",
|
||||
"noneAvailable": "Пространств имён сейчас нет.",
|
||||
"unarchive": "Вернуть из архива",
|
||||
"archived": "Архивировано",
|
||||
"noProjects": "This namespace does not contain any projects.",
|
||||
"createProject": "Create a new project in this namespace.",
|
||||
"noProjects": "В этом пространстве имён нет ни одного проекта.",
|
||||
"createProject": "Создать новый проект в этом пространстве имён.",
|
||||
"namespaces": "Пространства имён",
|
||||
"search": "Введите запрос для поиска пространства имён…",
|
||||
"create": {
|
||||
"title": "New namespace",
|
||||
"title": "Создать пространство имён",
|
||||
"titleRequired": "Пожалуйста, укажите название.",
|
||||
"explanation": "A namespace is a collection of projects you can share and use to organize your projects with. In fact, every project belongs to a namespace.",
|
||||
"explanation": "Это коллекция проектов, которым можно поделиться и который можно использовать для упорядочивания проектов. Фактически, каждый проект принадлежит какому-нибудь пространству имён.",
|
||||
"tooltip": "Что такое пространство имён?",
|
||||
"success": "Пространство имён создано."
|
||||
},
|
||||
"archive": {
|
||||
"titleArchive": "Архивировать «{namespace}»",
|
||||
"titleUnarchive": "Вернуть «{namespace}» из архива",
|
||||
"archiveText": "You won't be able to edit this namespace or create new projects until you un-archive it. This will also archive all projects in this namespace.",
|
||||
"unarchiveText": "You will be able to create new projects or edit it.",
|
||||
"archiveText": "Вы не сможете изменять это пространство имён, пока не вернёте его из архива. Это также касается всех проектов в этом пространстве имён.",
|
||||
"unarchiveText": "Вы сможете создавать новые проекты или изменять их.",
|
||||
"success": "Пространство имён архивировано.",
|
||||
"unarchiveSuccess": "Пространство имён разархивировано.",
|
||||
"description": "If a namespace is archived, you cannot create new projects or edit it."
|
||||
"description": "Архивирование пространства имён означает, что вы не сможете создавать в нём новые проекты или изменять их."
|
||||
},
|
||||
"delete": {
|
||||
"title": "Удалить «{namespace}»",
|
||||
"text1": "Удалить это пространство имён вместе со всем содержимым?",
|
||||
"text2": "This includes all projects and tasks and CANNOT BE UNDONE!",
|
||||
"text2": "Это включает в себя все проекты и задачи, и отменить это будет нельзя!",
|
||||
"success": "Пространство имён удалено."
|
||||
},
|
||||
"edit": {
|
||||
|
@ -403,7 +403,7 @@
|
|||
},
|
||||
"create": {
|
||||
"title": "Создать сохранённый фильтр",
|
||||
"description": "A saved filter is a virtual project which is computed from a set of filters each time it is accessed. Once created, it will appear in a special namespace.",
|
||||
"description": "Сохранённый фильтр — это виртуальный проект, построенный из набора фильтров. При создании отображается в специальном пространстве имён.",
|
||||
"action": "Создать новый сохранённый фильтр",
|
||||
"titleRequired": "Укажите название фильтра."
|
||||
},
|
||||
|
@ -435,7 +435,7 @@
|
|||
"label": {
|
||||
"title": "Метки",
|
||||
"manage": "Управление метками",
|
||||
"description": "Click on a label to edit it. You can edit all labels you created, you can use all labels which are associated with a task to whose project you have access.",
|
||||
"description": "Нажмите на метку, чтобы изменить её. Вы сможете редактировать все созданные вами метки, сможете использовать все метки, связанные с задачей, к проекту которой у вас есть доступ.",
|
||||
"newCTA": "Меток сейчас нет.",
|
||||
"search": "Введите запрос для поиска метки…",
|
||||
"create": {
|
||||
|
@ -460,7 +460,7 @@
|
|||
},
|
||||
"sharing": {
|
||||
"authenticating": "Аутентификация…",
|
||||
"passwordRequired": "This shared project requires a password. Please enter it below:",
|
||||
"passwordRequired": "Для доступа к этому проекту нужен пароль. Введите его сюда:",
|
||||
"error": "Случилась ошибка.",
|
||||
"invalidPassword": "Неверный пароль."
|
||||
},
|
||||
|
@ -498,10 +498,10 @@
|
|||
"hideMenu": "Скрыть меню",
|
||||
"forExample": "Например:",
|
||||
"welcomeBack": "С возвращением!",
|
||||
"custom": "Custom",
|
||||
"custom": "Настраиваемый",
|
||||
"id": "ID",
|
||||
"created": "Created at",
|
||||
"actions": "Actions",
|
||||
"created": "Дата создания",
|
||||
"actions": "Действия",
|
||||
"cannotBeUndone": "Это действие отменить нельзя!"
|
||||
},
|
||||
"input": {
|
||||
|
@ -529,7 +529,7 @@
|
|||
"code": "Код",
|
||||
"quote": "Цитата",
|
||||
"unorderedList": "Маркированный список",
|
||||
"orderedList ": "Ordered List",
|
||||
"orderedList": "Нумерованный список",
|
||||
"cleanBlock": "Очистить блок",
|
||||
"link": "Ссылка",
|
||||
"image": "Изображение",
|
||||
|
@ -566,14 +566,14 @@
|
|||
"canuse": "You can use date math to filter for relative dates.",
|
||||
"learnhow": "Как это работает",
|
||||
"title": "Date Math",
|
||||
"intro": "Date Math allows you to specify relative dates which are resolved on the fly by Vikunja when applying the filter.",
|
||||
"intro": "Specify relative dates which are resolved on the fly by Vikunja when applying the filter.",
|
||||
"expression": "Each Date Math expression starts with an anchor date, which can either be {0}, or a date string ending with {1}. This anchor date can optionally be followed by one or more maths expressions.",
|
||||
"similar": "Это похоже на выражения, которые используются в {0} и {1}.",
|
||||
"add1Day": "Добавить один день",
|
||||
"minus1Day": "Вычесть один день",
|
||||
"roundDay": "Округление вниз до начала дня",
|
||||
"supportedUnits": "Поддерживаемые единицы времени:",
|
||||
"someExamples": "Примеры выражений:",
|
||||
"supportedUnits": "Supported time units",
|
||||
"someExamples": "Examples of time expressions",
|
||||
"units": {
|
||||
"seconds": "Секунды",
|
||||
"minutes": "Минуты",
|
||||
|
@ -602,10 +602,10 @@
|
|||
"addReminder": "Добавить напоминание…",
|
||||
"doneSuccess": "Задача отмечена как завершённая.",
|
||||
"undoneSuccess": "Задача отмечена как незавершённая.",
|
||||
"undo": "Undo",
|
||||
"undo": "Отменить",
|
||||
"openDetail": "Открыть подробный просмотр задачи",
|
||||
"checklistTotal": "{checked} of {total} tasks",
|
||||
"checklistAllDone": "{total} tasks",
|
||||
"checklistTotal": "{checked} из {total} задач",
|
||||
"checklistAllDone": "{total} задач",
|
||||
"show": {
|
||||
"titleCurrent": "Текущие задачи",
|
||||
"titleDates": "Задачи с {from} по {to}",
|
||||
|
@ -619,7 +619,7 @@
|
|||
"chooseDueDate": "Нажмите для выбора срока",
|
||||
"chooseStartDate": "Нажмите для выбора даты начала",
|
||||
"chooseEndDate": "Нажмите для выбора даты завершения",
|
||||
"move": "Move task to a different project",
|
||||
"move": "Переместить задачу в другой проект",
|
||||
"done": "Завершено!",
|
||||
"undone": "Не завершено",
|
||||
"created": "Создана {0} пользователем {1}",
|
||||
|
@ -627,7 +627,7 @@
|
|||
"doneAt": "Завершено {0}",
|
||||
"updateSuccess": "Задача сохранена.",
|
||||
"deleteSuccess": "Задача удалена.",
|
||||
"belongsToProject": "This task belongs to project '{project}'",
|
||||
"belongsToProject": "Задача принадлежит проекту «{project}»",
|
||||
"due": "Истекает {at}",
|
||||
"closePopup": "Закрыть всплывающее окно",
|
||||
"delete": {
|
||||
|
@ -647,7 +647,7 @@
|
|||
"percentDone": "Задать прогресс",
|
||||
"attachments": "Добавить вложения",
|
||||
"relatedTasks": "Добавить связь",
|
||||
"moveProject": "Move",
|
||||
"moveProject": "Переместить",
|
||||
"color": "Выбрать цвет",
|
||||
"delete": "Удалить",
|
||||
"favorite": "Добавить в избранное",
|
||||
|
@ -674,21 +674,21 @@
|
|||
"updated": "Дата изменения"
|
||||
},
|
||||
"subscription": {
|
||||
"subscribedProjectThroughParentNamespace": "You can't unsubscribe here because you are subscribed to this project through its namespace.",
|
||||
"subscribedTaskThroughParentNamespace": "You can't unsubscribe here because you are subscribed to this task through its namespace.",
|
||||
"subscribedTaskThroughParentProject": "You can't unsubscribe here because you are subscribed to this task through its project.",
|
||||
"subscribedNamespace": "You are currently subscribed to this namespace and will receive notifications for changes.",
|
||||
"notSubscribedNamespace": "You are not subscribed to this namespace and won't receive notifications for changes.",
|
||||
"subscribedProject": "You are currently subscribed to this project and will receive notifications for changes.",
|
||||
"notSubscribedProject": "You are not subscribed to this project and won't receive notifications for changes.",
|
||||
"subscribedTask": "You are currently subscribed to this task and will receive notifications for changes.",
|
||||
"notSubscribedTask": "You are not subscribed to this task and won't receive notifications for changes.",
|
||||
"subscribedProjectThroughParentNamespace": "Вы не можете отписаться здесь, потому что вы подписаны на проект через его пространство имён.",
|
||||
"subscribedTaskThroughParentNamespace": "Вы не можете отписаться здесь, потому что вы подписаны на эту задачу через её пространство имён.",
|
||||
"subscribedTaskThroughParentProject": "Вы не можете отписаться здесь, потому что вы подписаны эту задачу через её проект.",
|
||||
"subscribedNamespace": "Вы подписаны на это пространство имён и будете получать уведомления об изменениях.",
|
||||
"notSubscribedNamespace": "Вы не подписаны на это пространство имён и не будете получать уведомления об изменениях.",
|
||||
"subscribedProject": "Вы подписаны на этот проект и будете получать уведомления об изменениях.",
|
||||
"notSubscribedProject": "Вы не подписаны на этот проект и не будете получать уведомления об изменениях.",
|
||||
"subscribedTask": "Вы подписаны на эту задачу и будете получать уведомления об изменениях.",
|
||||
"notSubscribedTask": "Вы не подписаны на эту задачу и не будете получать уведомления об изменениях.",
|
||||
"subscribe": "Подписаться",
|
||||
"unsubscribe": "Отписаться",
|
||||
"subscribeSuccessNamespace": "Подписка на пространство имён оформлена",
|
||||
"unsubscribeSuccessNamespace": "Подписка на пространство имён удалена",
|
||||
"subscribeSuccessProject": "You are now subscribed to this project",
|
||||
"unsubscribeSuccessProject": "You are now unsubscribed to this project",
|
||||
"subscribeSuccessProject": "Подписка на проект оформлена",
|
||||
"unsubscribeSuccessProject": "Подписка на проект удалена",
|
||||
"subscribeSuccessTask": "Подписка на задачу оформлена",
|
||||
"unsubscribeSuccessTask": "Подписка на задачу удалена"
|
||||
},
|
||||
|
@ -762,13 +762,13 @@
|
|||
"new": "Новая связанная задача",
|
||||
"searchPlaceholder": "Введи запрос для поиска задачи, чтобы добавить связь…",
|
||||
"createPlaceholder": "Добавить как связанную задачу",
|
||||
"differentProject": "This task belongs to a different project.",
|
||||
"differentProject": "Эта задача принадлежит другому проекту.",
|
||||
"differentNamespace": "Эта задача принадлежит другому пространству имён.",
|
||||
"noneYet": "Ещё нет связанных задач.",
|
||||
"delete": "Удалить связь",
|
||||
"deleteText1": "Удалить эту связь с задачей?",
|
||||
"select": "Выберите вид связи",
|
||||
"taskRequired": "Please select a task or enter a new task title.",
|
||||
"taskRequired": "Выберите задачу или введите название новой задачи.",
|
||||
"kinds": {
|
||||
"subtask": "Подзадача | Подзадачи",
|
||||
"parenttask": "Родительская задача | Родительские задачи",
|
||||
|
@ -797,7 +797,7 @@
|
|||
"weeks": "Недель",
|
||||
"months": "Месяцев",
|
||||
"years": "Лет",
|
||||
"invalidAmount": "Please enter more than 0."
|
||||
"invalidAmount": "Введите больше чем 0."
|
||||
},
|
||||
"quickAddMagic": {
|
||||
"hint": "Вы можете использовать Волшебное Быстрое Добавление",
|
||||
|
@ -807,15 +807,15 @@
|
|||
"multiple": "Вы можете использовать это несколько раз.",
|
||||
"label1": "Чтобы добавить метку, просто добавьте к названию метки префикс {prefix}.",
|
||||
"label2": "Vikunja проверит, существует ли такая метка, и создаст её, если ещё нет.",
|
||||
"label3": "To use spaces, simply add a \" or ' around the label name.",
|
||||
"label3": "Чтобы использовать пробелы, оберните метку в \"двойные\" или 'одинарные' кавычки.",
|
||||
"label4": "Например: {prefix}\"Метка с пробелами\".",
|
||||
"priority1": "Чтобы установить задаче приоритет, добавьте число 1-5 с префиксом {prefix}.",
|
||||
"priority2": "Чем больше число, тем выше приоритет.",
|
||||
"assignees": "Чтобы назначить задачу пользователю, добавьте к задаче его имя с префиксом {prefix}.",
|
||||
"project1": "To set a project for the task to appear in, enter its name prefixed with {prefix}.",
|
||||
"project2": "This will return an error if the project does not exist.",
|
||||
"project3": "To use spaces, simply add a \" or ' around the project name.",
|
||||
"project4": "For example: {prefix}\"Project with spaces\".",
|
||||
"project1": "Чтобы выбрать проект, в который будет помещена создаваемая задача, введите его имя с префиксом {prefix}.",
|
||||
"project2": "Если проект не существует, будет возвращена ошибка.",
|
||||
"project3": "Чтобы использовать пробелы, оберните название проекта в \"двойные\" или 'одинарные' кавычки.",
|
||||
"project4": "Например: {prefix}\"Проект с пробелами\".",
|
||||
"dateAndTime": "Дата и время",
|
||||
"date": "Любая дата будет использоваться как срок выполнения новой задачи. Вы можете использовать даты в любом из этих форматов:",
|
||||
"dateWeekday": "любой день недели, будет использовать следующую дату",
|
||||
|
@ -848,19 +848,19 @@
|
|||
"delete": {
|
||||
"header": "Удалить команду",
|
||||
"text1": "Удалить эту команду вместе с участниками?",
|
||||
"text2": "All team members will lose access to projects and namespaces shared with this team. This CANNOT BE UNDONE!",
|
||||
"text2": "Все участники команды потеряют доступ к проектам и пространствам имён, которыми поделились с этой командой. Это действие отменить НЕЛЬЗЯ!",
|
||||
"success": "Команда удалена."
|
||||
},
|
||||
"deleteUser": {
|
||||
"header": "Удалить пользователя из команды",
|
||||
"text1": "Удалить этого пользователя из команды?",
|
||||
"text2": "They will lose access to all projects and namespaces this team has access to. This CANNOT BE UNDONE!",
|
||||
"text2": "Пользователь потеряет доступ ко всем проектам и пространствам имён, к которым есть доступ у команды. Это действие отменить нельзя!",
|
||||
"success": "Пользователь удалён из команды."
|
||||
},
|
||||
"leave": {
|
||||
"title": "Покинуть команду",
|
||||
"text1": "Покинуть эту команду?",
|
||||
"text2": "You will lose access to all projects and namespaces this team has access to. If you change your mind you'll need a team admin to add you again.",
|
||||
"text2": "Вы потеряете доступ ко всем проектам и пространствам имён, к которым есть доступ у команды. Если вы передумаете, придётся просить администратора команды добавить вас снова.",
|
||||
"success": "Вы покинули команду."
|
||||
}
|
||||
},
|
||||
|
@ -892,22 +892,25 @@
|
|||
"attachment": "Добавить вложение к задаче",
|
||||
"related": "Изменить связанные задачи",
|
||||
"color": "Изменить цвет этой задачи",
|
||||
"move": "Move this task to another project",
|
||||
"move": "Переместить эту задачу в другой проект",
|
||||
"reminder": "Управление напоминаниями об этой задаче",
|
||||
"description": "Toggle editing of the task description"
|
||||
"description": "Включить изменение описания задачи",
|
||||
"delete": "Удалить задачу",
|
||||
"priority": "Изменить приоритет задачи",
|
||||
"favorite": "Mark this task as favorite / unfavorite"
|
||||
},
|
||||
"project": {
|
||||
"title": "Project Views",
|
||||
"switchToListView": "Switch to list view",
|
||||
"switchToGanttView": "Switch to gantt view",
|
||||
"switchToKanbanView": "Switch to kanban view",
|
||||
"switchToTableView": "Switch to table view"
|
||||
"title": "Просмотр проекта",
|
||||
"switchToListView": "Переключиться на список",
|
||||
"switchToGanttView": "Переключиться на гант",
|
||||
"switchToKanbanView": "Переключиться на канбан",
|
||||
"switchToTableView": "Переключиться на таблицу"
|
||||
},
|
||||
"navigation": {
|
||||
"title": "Навигация",
|
||||
"overview": "Перейти к странице обзора",
|
||||
"upcoming": "Перейти к предстоящим задачам",
|
||||
"namespaces": "Navigate to namespaces & projects",
|
||||
"namespaces": "Перейти к пространствам имён и проектам",
|
||||
"labels": "Перейти к меткам",
|
||||
"teams": "Перейти к командам"
|
||||
}
|
||||
|
@ -924,7 +927,7 @@
|
|||
"unarchive": "Вернуть из архива",
|
||||
"setBackground": "Задать фон",
|
||||
"share": "Поделиться",
|
||||
"newProject": "New project"
|
||||
"newProject": "Создать проект"
|
||||
},
|
||||
"apiConfig": {
|
||||
"url": "Vikunja URL",
|
||||
|
@ -943,24 +946,24 @@
|
|||
"notification": {
|
||||
"title": "Уведомления",
|
||||
"none": "Уведомлений нет. Хорошего дня!",
|
||||
"explainer": "Notifications will appear here when actions on namespaces, projects or tasks you subscribed to happen."
|
||||
"explainer": "Здесь появятся уведомления, когда что-нибудь произойдёт с пространствами имён, проектами или задачами, на которые вы подписаны."
|
||||
},
|
||||
"quickActions": {
|
||||
"commands": "Команды",
|
||||
"placeholder": "Введите команду или поисковый запрос…",
|
||||
"hint": "You can use {project} to limit the search to a project. Combine {project} or {label} (labels) with a search query to search for a task with these labels or on that project. Use {assignee} to only search for teams.",
|
||||
"hint": "Используйте {project}, чтобы ограничить поиск проектом. Комбинируйте {project} и {label} (метки) с поисковым запросом для поиска задачи с этими метками или на этом проекте. Используйте {assignee} для поиска команд.",
|
||||
"tasks": "Задачи",
|
||||
"projects": "Projects",
|
||||
"projects": "Проекты",
|
||||
"teams": "Команды",
|
||||
"newProject": "Enter the title of the new project…",
|
||||
"newProject": "Введите название проекта…",
|
||||
"newTask": "Введите название задачи…",
|
||||
"newNamespace": "Введите название пространства имён…",
|
||||
"newTeam": "Введите название новой команды…",
|
||||
"createTask": "Create a task in the current project ({title})",
|
||||
"createProject": "Create a project in the current namespace ({title})",
|
||||
"createTask": "Создать задачу в текущем проекте ({title})",
|
||||
"createProject": "Создать проект в текущем пространстве имён ({title})",
|
||||
"cmds": {
|
||||
"newTask": "Новая задача",
|
||||
"newProject": "New project",
|
||||
"newProject": "Создать проект",
|
||||
"newNamespace": "Новое пространство имён",
|
||||
"newTeam": "Новая команда"
|
||||
}
|
||||
|
@ -992,15 +995,15 @@
|
|||
"1018": "Тип аватара пользователя неверный.",
|
||||
"2001": "ID не может быть пустой или 0.",
|
||||
"2002": "Некоторые данные запроса неверны.",
|
||||
"3001": "The project does not exist.",
|
||||
"3004": "You need to have read permissions on that project to perform that action.",
|
||||
"3005": "The project title cannot be empty.",
|
||||
"3001": "Проект не существует.",
|
||||
"3004": "У вас должны быть права на чтение этого проекта, чтобы выполнить это действие.",
|
||||
"3005": "Нужно ввести название проекта.",
|
||||
"3006": "The project share does not exist.",
|
||||
"3007": "A project with this identifier already exists.",
|
||||
"3008": "The project is archived and can therefore only be accessed read only. This is also true for all tasks associated with this project.",
|
||||
"4001": "The project task text cannot be empty.",
|
||||
"4002": "The project task does not exist.",
|
||||
"4003": "All bulk editing tasks must belong to the same project.",
|
||||
"3007": "Проект с таким идентификатором уже существует.",
|
||||
"3008": "Этот проект архивирован и поэтому доступен только для чтения. Это также касается всех задач в этом проекте.",
|
||||
"4001": "Текст задачи не может быть пустым.",
|
||||
"4002": "Задача не существует.",
|
||||
"4003": "Все задачи для массового редактирования должны принадлежать одному проекту.",
|
||||
"4004": "Необходима хотя бы одна задача для массового редактирования.",
|
||||
"4005": "У вас нет прав для просмотра задачи.",
|
||||
"4006": "Нельзя установить родительскую задачу этой же задачей.",
|
||||
|
@ -1026,21 +1029,21 @@
|
|||
"5012": "Это пространство имён архивировано и поэтому доступно только для чтения.",
|
||||
"6001": "Имя команды не может быть пустым.",
|
||||
"6002": "Команда не существует.",
|
||||
"6004": "The team already has access to that namespace or project.",
|
||||
"6004": "Эта команда уже имеет доступ к этому пространству имён или проекту.",
|
||||
"6005": "Пользователь уже является участником этой команды.",
|
||||
"6006": "Нельзя удалить последнего участника команды.",
|
||||
"6007": "The team does not have access to the project to perform that action.",
|
||||
"7002": "The user already has access to that project.",
|
||||
"7003": "You do not have access to that project.",
|
||||
"6007": "У команды нет доступа к проекту, чтобы выполнить это действие.",
|
||||
"7002": "У пользователя уже есть доступ к этому проекту.",
|
||||
"7003": "У вас нет доступа к этому проекту.",
|
||||
"8001": "Эта метка уже существует в этой задаче.",
|
||||
"8002": "Эта метка не существует.",
|
||||
"8003": "У вас нет доступа к этой метке.",
|
||||
"9001": "Некорректные права.",
|
||||
"10001": "Эта колонка не существует.",
|
||||
"10002": "The bucket does not belong to that project.",
|
||||
"10003": "You cannot remove the last bucket on a project.",
|
||||
"10002": "Эта колонка не принадлежит этому проекту.",
|
||||
"10003": "Вы не можете удалить последнюю колонку проекта.",
|
||||
"10004": "Вы не можете добавить задачу в эту колонку, так как достигнуто ограничение на число задач в ней.",
|
||||
"10005": "There can be only one done bucket per project.",
|
||||
"10005": "В проекте может быть только одна колонка завершённых.",
|
||||
"11001": "Сохранённый фильтр не существует.",
|
||||
"11002": "Saved filters are not available for link shares.",
|
||||
"12001": "Некорректный тип подписки.",
|
||||
|
@ -1053,4 +1056,4 @@
|
|||
"frontendVersion": "Версия фронтенда: {version}",
|
||||
"apiVersion": "Версия API: {version}"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -529,7 +529,7 @@
|
|||
"code": "Code",
|
||||
"quote": "Quote",
|
||||
"unorderedList": "Unordered List",
|
||||
"orderedList ": "Ordered List",
|
||||
"orderedList": "Ordered List",
|
||||
"cleanBlock": "Clean Block",
|
||||
"link": "Link",
|
||||
"image": "Image",
|
||||
|
@ -566,14 +566,14 @@
|
|||
"canuse": "You can use date math to filter for relative dates.",
|
||||
"learnhow": "Check out how it works",
|
||||
"title": "Date Math",
|
||||
"intro": "Date Math allows you to specify relative dates which are resolved on the fly by Vikunja when applying the filter.",
|
||||
"intro": "Specify relative dates which are resolved on the fly by Vikunja when applying the filter.",
|
||||
"expression": "Each Date Math expression starts with an anchor date, which can either be {0}, or a date string ending with {1}. This anchor date can optionally be followed by one or more maths expressions.",
|
||||
"similar": "These expressions are similar to the ones provided by {0} and {1}.",
|
||||
"add1Day": "Add one day",
|
||||
"minus1Day": "Subtract one day",
|
||||
"roundDay": "Round down to the nearest day",
|
||||
"supportedUnits": "Supported time units are:",
|
||||
"someExamples": "Some examples of time expressions:",
|
||||
"supportedUnits": "Supported time units",
|
||||
"someExamples": "Examples of time expressions",
|
||||
"units": {
|
||||
"seconds": "Seconds",
|
||||
"minutes": "Minutes",
|
||||
|
@ -894,7 +894,10 @@
|
|||
"color": "Change the color of this task",
|
||||
"move": "Move this task to another project",
|
||||
"reminder": "Manage reminders of this task",
|
||||
"description": "Toggle editing of the task description"
|
||||
"description": "Toggle editing of the task description",
|
||||
"delete": "Delete this task",
|
||||
"priority": "Change the priority of this task",
|
||||
"favorite": "Mark this task as favorite / unfavorite"
|
||||
},
|
||||
"project": {
|
||||
"title": "Project Views",
|
||||
|
@ -1053,4 +1056,4 @@
|
|||
"frontendVersion": "Frontend Version: {version}",
|
||||
"apiVersion": "API Version: {version}"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -529,7 +529,7 @@
|
|||
"code": "Code",
|
||||
"quote": "Quote",
|
||||
"unorderedList": "Unordered List",
|
||||
"orderedList ": "Ordered List",
|
||||
"orderedList": "Ordered List",
|
||||
"cleanBlock": "Clean Block",
|
||||
"link": "Link",
|
||||
"image": "Image",
|
||||
|
@ -566,14 +566,14 @@
|
|||
"canuse": "You can use date math to filter for relative dates.",
|
||||
"learnhow": "Check out how it works",
|
||||
"title": "Date Math",
|
||||
"intro": "Date Math allows you to specify relative dates which are resolved on the fly by Vikunja when applying the filter.",
|
||||
"intro": "Specify relative dates which are resolved on the fly by Vikunja when applying the filter.",
|
||||
"expression": "Each Date Math expression starts with an anchor date, which can either be {0}, or a date string ending with {1}. This anchor date can optionally be followed by one or more maths expressions.",
|
||||
"similar": "These expressions are similar to the ones provided by {0} and {1}.",
|
||||
"add1Day": "Add one day",
|
||||
"minus1Day": "Subtract one day",
|
||||
"roundDay": "Round down to the nearest day",
|
||||
"supportedUnits": "Supported time units are:",
|
||||
"someExamples": "Some examples of time expressions:",
|
||||
"supportedUnits": "Supported time units",
|
||||
"someExamples": "Examples of time expressions",
|
||||
"units": {
|
||||
"seconds": "Seconds",
|
||||
"minutes": "Minutes",
|
||||
|
@ -894,7 +894,10 @@
|
|||
"color": "Change the color of this task",
|
||||
"move": "Move this task to another project",
|
||||
"reminder": "Manage reminders of this task",
|
||||
"description": "Toggle editing of the task description"
|
||||
"description": "Toggle editing of the task description",
|
||||
"delete": "Delete this task",
|
||||
"priority": "Change the priority of this task",
|
||||
"favorite": "Mark this task as favorite / unfavorite"
|
||||
},
|
||||
"project": {
|
||||
"title": "Project Views",
|
||||
|
@ -1053,4 +1056,4 @@
|
|||
"frontendVersion": "Frontend Version: {version}",
|
||||
"apiVersion": "API Version: {version}"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -529,7 +529,7 @@
|
|||
"code": "Code",
|
||||
"quote": "Quote",
|
||||
"unorderedList": "Unordered List",
|
||||
"orderedList ": "Ordered List",
|
||||
"orderedList": "Ordered List",
|
||||
"cleanBlock": "Clean Block",
|
||||
"link": "Link",
|
||||
"image": "Image",
|
||||
|
@ -566,14 +566,14 @@
|
|||
"canuse": "You can use date math to filter for relative dates.",
|
||||
"learnhow": "Check out how it works",
|
||||
"title": "Date Math",
|
||||
"intro": "Date Math allows you to specify relative dates which are resolved on the fly by Vikunja when applying the filter.",
|
||||
"intro": "Specify relative dates which are resolved on the fly by Vikunja when applying the filter.",
|
||||
"expression": "Each Date Math expression starts with an anchor date, which can either be {0}, or a date string ending with {1}. This anchor date can optionally be followed by one or more maths expressions.",
|
||||
"similar": "These expressions are similar to the ones provided by {0} and {1}.",
|
||||
"add1Day": "Add one day",
|
||||
"minus1Day": "Subtract one day",
|
||||
"roundDay": "Round down to the nearest day",
|
||||
"supportedUnits": "Supported time units are:",
|
||||
"someExamples": "Some examples of time expressions:",
|
||||
"supportedUnits": "Supported time units",
|
||||
"someExamples": "Examples of time expressions",
|
||||
"units": {
|
||||
"seconds": "Seconds",
|
||||
"minutes": "Minutes",
|
||||
|
@ -894,7 +894,10 @@
|
|||
"color": "Change the color of this task",
|
||||
"move": "Move this task to another project",
|
||||
"reminder": "Manage reminders of this task",
|
||||
"description": "Toggle editing of the task description"
|
||||
"description": "Toggle editing of the task description",
|
||||
"delete": "Delete this task",
|
||||
"priority": "Change the priority of this task",
|
||||
"favorite": "Mark this task as favorite / unfavorite"
|
||||
},
|
||||
"project": {
|
||||
"title": "Project Views",
|
||||
|
@ -1053,4 +1056,4 @@
|
|||
"frontendVersion": "Frontend Version: {version}",
|
||||
"apiVersion": "API Version: {version}"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -529,7 +529,7 @@
|
|||
"code": "Code",
|
||||
"quote": "Quote",
|
||||
"unorderedList": "Unordered List",
|
||||
"orderedList ": "Ordered List",
|
||||
"orderedList": "Ordered List",
|
||||
"cleanBlock": "Clean Block",
|
||||
"link": "Link",
|
||||
"image": "Image",
|
||||
|
@ -566,14 +566,14 @@
|
|||
"canuse": "You can use date math to filter for relative dates.",
|
||||
"learnhow": "Check out how it works",
|
||||
"title": "Date Math",
|
||||
"intro": "Date Math allows you to specify relative dates which are resolved on the fly by Vikunja when applying the filter.",
|
||||
"intro": "Specify relative dates which are resolved on the fly by Vikunja when applying the filter.",
|
||||
"expression": "Each Date Math expression starts with an anchor date, which can either be {0}, or a date string ending with {1}. This anchor date can optionally be followed by one or more maths expressions.",
|
||||
"similar": "These expressions are similar to the ones provided by {0} and {1}.",
|
||||
"add1Day": "Add one day",
|
||||
"minus1Day": "Subtract one day",
|
||||
"roundDay": "Round down to the nearest day",
|
||||
"supportedUnits": "Supported time units are:",
|
||||
"someExamples": "Some examples of time expressions:",
|
||||
"supportedUnits": "Supported time units",
|
||||
"someExamples": "Examples of time expressions",
|
||||
"units": {
|
||||
"seconds": "Seconds",
|
||||
"minutes": "Minutes",
|
||||
|
@ -894,7 +894,10 @@
|
|||
"color": "Change the color of this task",
|
||||
"move": "Move this task to another project",
|
||||
"reminder": "Manage reminders of this task",
|
||||
"description": "Toggle editing of the task description"
|
||||
"description": "Toggle editing of the task description",
|
||||
"delete": "Delete this task",
|
||||
"priority": "Change the priority of this task",
|
||||
"favorite": "Mark this task as favorite / unfavorite"
|
||||
},
|
||||
"project": {
|
||||
"title": "Project Views",
|
||||
|
@ -1053,4 +1056,4 @@
|
|||
"frontendVersion": "Frontend Version: {version}",
|
||||
"apiVersion": "API Version: {version}"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -529,7 +529,7 @@
|
|||
"code": "Code",
|
||||
"quote": "Trích dẫn",
|
||||
"unorderedList": "Gạch đầu dòng",
|
||||
"orderedList ": "Ordered List",
|
||||
"orderedList": "Ordered List",
|
||||
"cleanBlock": "Làm sạch Khối",
|
||||
"link": "Liên kết",
|
||||
"image": "Ảnh",
|
||||
|
@ -566,14 +566,14 @@
|
|||
"canuse": "Bạn có thể sử dụng biểu thức tính ngày để lọc những ngày liên quan.",
|
||||
"learnhow": "Xem cách hoạt động",
|
||||
"title": "Tính Ngày",
|
||||
"intro": "Date Math allows you to specify relative dates which are resolved on the fly by Vikunja when applying the filter.",
|
||||
"intro": "Specify relative dates which are resolved on the fly by Vikunja when applying the filter.",
|
||||
"expression": "Mỗi Biểu thức tính ngày bắt đầu bằng một ngày cố định, có thể là {0}, hoặc kết thúc bằng {1}. Ngày cố định này có thể được theo sau bởi một hoặc nhiều biểu thức toán học.",
|
||||
"similar": "Những biểu thức này tương tự như những biểu thức được cung cấp bởi {0} và {1}.",
|
||||
"add1Day": "Thêm một ngày",
|
||||
"minus1Day": "Bớt đi một ngày",
|
||||
"roundDay": "Làm tròn đến ngày gần nhất",
|
||||
"supportedUnits": "Các đơn vị thời gian hỗ trợ là:",
|
||||
"someExamples": "Một vài ví dụ về cách hiển thị thời gian:",
|
||||
"supportedUnits": "Supported time units",
|
||||
"someExamples": "Examples of time expressions",
|
||||
"units": {
|
||||
"seconds": "Giây",
|
||||
"minutes": "Phút",
|
||||
|
@ -894,7 +894,10 @@
|
|||
"color": "Thay đổi màu công việc này",
|
||||
"move": "Move this task to another project",
|
||||
"reminder": "Manage reminders of this task",
|
||||
"description": "Toggle editing of the task description"
|
||||
"description": "Toggle editing of the task description",
|
||||
"delete": "Delete this task",
|
||||
"priority": "Change the priority of this task",
|
||||
"favorite": "Mark this task as favorite / unfavorite"
|
||||
},
|
||||
"project": {
|
||||
"title": "Project Views",
|
||||
|
@ -1053,4 +1056,4 @@
|
|||
"frontendVersion": "Phiên bản giao diện người dùng: {version}",
|
||||
"apiVersion": "Phiên bản API: {version}"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -529,7 +529,7 @@
|
|||
"code": "代码",
|
||||
"quote": "引用",
|
||||
"unorderedList": "无序列表",
|
||||
"orderedList ": "Ordered List",
|
||||
"orderedList": "Ordered List",
|
||||
"cleanBlock": "清除格式",
|
||||
"link": "链接",
|
||||
"image": "图片",
|
||||
|
@ -566,14 +566,14 @@
|
|||
"canuse": "你可以使用 Date Math 来筛选相对日期。",
|
||||
"learnhow": "查看它如何工作",
|
||||
"title": "Date Math",
|
||||
"intro": "Date Math 允许你在使用过滤器时由 Vikunja 动态解析相对日期。",
|
||||
"intro": "Specify relative dates which are resolved on the fly by Vikunja when applying the filter.",
|
||||
"expression": "每个 Date Math 表达式以锚点日期开头,可以是 {0},也可以是以 {1} 结尾的日期文本。 这个锚点日期后可以跟一个或多个数学表达式。",
|
||||
"similar": "这些表达式类似于 {0} 和 {1} 提供的表达式。",
|
||||
"add1Day": "加一天",
|
||||
"minus1Day": "减一天",
|
||||
"roundDay": "往最近的那天舍入",
|
||||
"supportedUnits": "支持的时间单位是:",
|
||||
"someExamples": "时间表达式的一些例子:",
|
||||
"supportedUnits": "Supported time units",
|
||||
"someExamples": "Examples of time expressions",
|
||||
"units": {
|
||||
"seconds": "秒数。",
|
||||
"minutes": "分钟",
|
||||
|
@ -894,7 +894,10 @@
|
|||
"color": "更改此任务的颜色",
|
||||
"move": "Move this task to another project",
|
||||
"reminder": "管理此任务的提醒",
|
||||
"description": "切换编辑时的任务描述"
|
||||
"description": "切换编辑时的任务描述",
|
||||
"delete": "Delete this task",
|
||||
"priority": "Change the priority of this task",
|
||||
"favorite": "Mark this task as favorite / unfavorite"
|
||||
},
|
||||
"project": {
|
||||
"title": "Project Views",
|
||||
|
@ -1053,4 +1056,4 @@
|
|||
"frontendVersion": "前端版本:{version}",
|
||||
"apiVersion": "API 版本:{version}"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -529,7 +529,7 @@
|
|||
"code": "Code",
|
||||
"quote": "Quote",
|
||||
"unorderedList": "Unordered List",
|
||||
"orderedList ": "Ordered List",
|
||||
"orderedList": "Ordered List",
|
||||
"cleanBlock": "Clean Block",
|
||||
"link": "Link",
|
||||
"image": "Image",
|
||||
|
@ -566,14 +566,14 @@
|
|||
"canuse": "You can use date math to filter for relative dates.",
|
||||
"learnhow": "Check out how it works",
|
||||
"title": "Date Math",
|
||||
"intro": "Date Math allows you to specify relative dates which are resolved on the fly by Vikunja when applying the filter.",
|
||||
"intro": "Specify relative dates which are resolved on the fly by Vikunja when applying the filter.",
|
||||
"expression": "Each Date Math expression starts with an anchor date, which can either be {0}, or a date string ending with {1}. This anchor date can optionally be followed by one or more maths expressions.",
|
||||
"similar": "These expressions are similar to the ones provided by {0} and {1}.",
|
||||
"add1Day": "Add one day",
|
||||
"minus1Day": "Subtract one day",
|
||||
"roundDay": "Round down to the nearest day",
|
||||
"supportedUnits": "Supported time units are:",
|
||||
"someExamples": "Some examples of time expressions:",
|
||||
"supportedUnits": "Supported time units",
|
||||
"someExamples": "Examples of time expressions",
|
||||
"units": {
|
||||
"seconds": "Seconds",
|
||||
"minutes": "Minutes",
|
||||
|
@ -894,7 +894,10 @@
|
|||
"color": "Change the color of this task",
|
||||
"move": "Move this task to another project",
|
||||
"reminder": "Manage reminders of this task",
|
||||
"description": "Toggle editing of the task description"
|
||||
"description": "Toggle editing of the task description",
|
||||
"delete": "Delete this task",
|
||||
"priority": "Change the priority of this task",
|
||||
"favorite": "Mark this task as favorite / unfavorite"
|
||||
},
|
||||
"project": {
|
||||
"title": "Project Views",
|
||||
|
@ -1053,4 +1056,4 @@
|
|||
"frontendVersion": "Frontend Version: {version}",
|
||||
"apiVersion": "API Version: {version}"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -5,7 +5,7 @@ import type { IUser } from '@/modelTypes/IUser'
|
|||
import type { IFile } from '@/modelTypes/IFile'
|
||||
import type { IAttachment } from '@/modelTypes/IAttachment'
|
||||
|
||||
export const SUPPORTED_IMAGE_SUFFIX = ['.jpg', '.png', '.bmp', '.gif']
|
||||
export const SUPPORTED_IMAGE_SUFFIX = ['.jpg','.jpeg', '.png', '.bmp', '.gif']
|
||||
|
||||
export default class AttachmentModel extends AbstractModel<IAttachment> implements IAttachment {
|
||||
id = 0
|
||||
|
|
|
@ -438,41 +438,50 @@ describe('Parse Task Text', () => {
|
|||
now.setFullYear(2021, 5, 24)
|
||||
|
||||
const cases = {
|
||||
'Lorem Ipsum 06/08/2021 ad': '2021-6-8',
|
||||
'Lorem Ipsum 6/7/21 ad': '2021-6-7',
|
||||
'dolor sit amet 27/07/2021,': null,
|
||||
'dolor sit amet 2021/07/06,': '2021-7-6',
|
||||
'dolor sit amet 2021-07-06': '2021-7-6',
|
||||
'dolor sit amet 27 jan': '2022-1-27',
|
||||
'dolor sit amet 27/1': '2022-1-27',
|
||||
'dolor sit amet 27/01': '2022-1-27',
|
||||
'dolor sit amet 16/12': '2021-12-16',
|
||||
'dolor sit amet 01/27': '2022-1-27',
|
||||
'dolor sit amet 1/27': '2022-1-27',
|
||||
'dolor sit amet Jan 27': '2022-1-27',
|
||||
'dolor sit amet jan 27': '2022-1-27',
|
||||
'dolor sit amet feb 21': '2022-2-21',
|
||||
'dolor sit amet mar 21': '2022-3-21',
|
||||
'dolor sit amet apr 21': '2022-4-21',
|
||||
'dolor sit amet may 21': '2022-5-21',
|
||||
'dolor sit amet jun 21': '2022-6-21',
|
||||
'dolor sit amet jul 21': '2021-7-21',
|
||||
'dolor sit amet aug 21': '2021-8-21',
|
||||
'dolor sit amet sep 21': '2021-9-21',
|
||||
'dolor sit amet oct 21': '2021-10-21',
|
||||
'dolor sit amet nov 21': '2021-11-21',
|
||||
'dolor sit amet dec 21': '2021-12-21',
|
||||
'06/08/2021': '2021-6-8',
|
||||
'6/7/21': '2021-6-7',
|
||||
'27/07/2021,': null,
|
||||
'2021/07/06,': '2021-7-6',
|
||||
'2021-07-06': '2021-7-6',
|
||||
'27 jan': '2022-1-27',
|
||||
'27/1': '2022-1-27',
|
||||
'27/01': '2022-1-27',
|
||||
'16/12': '2021-12-16',
|
||||
'01/27': '2022-1-27',
|
||||
'1/27': '2022-1-27',
|
||||
'Jan 27': '2022-1-27',
|
||||
'jan 27': '2022-1-27',
|
||||
'feb 21': '2022-2-21',
|
||||
'mar 21': '2022-3-21',
|
||||
'apr 21': '2022-4-21',
|
||||
'may 21': '2022-5-21',
|
||||
'jun 21': '2022-6-21',
|
||||
'jul 21': '2021-7-21',
|
||||
'aug 21': '2021-8-21',
|
||||
'sep 21': '2021-9-21',
|
||||
'oct 21': '2021-10-21',
|
||||
'nov 21': '2021-11-21',
|
||||
'dec 21': '2021-12-21',
|
||||
} as Record<string, string | null>
|
||||
|
||||
for (const c in cases) {
|
||||
it(`should parse '${c}' as '${cases[c]}'`, () => {
|
||||
const {date} = getDateFromText(c, now)
|
||||
it(`should parse '${c}' as '${cases[c]}' with the date at the end`, () => {
|
||||
const {date} = getDateFromText(`Lorem Ipsum ${c}`, now)
|
||||
if (date === null && cases[c] === null) {
|
||||
expect(date).toBeNull()
|
||||
return
|
||||
}
|
||||
|
||||
expect(`${date?.getFullYear()}-${date.getMonth() + 1}-${date?.getDate()}`).toBe(cases[c])
|
||||
expect(`${date?.getFullYear()}-${date?.getMonth() + 1}-${date?.getDate()}`).toBe(cases[c])
|
||||
})
|
||||
it(`should parse '${c}' as '${cases[c]}' with the date at the beginning`, () => {
|
||||
const {date} = getDateFromText(`${c} Lorem Ipsum`, now)
|
||||
if (date === null && cases[c] === null) {
|
||||
expect(date).toBeNull()
|
||||
return
|
||||
}
|
||||
|
||||
expect(`${date?.getFullYear()}-${date?.getMonth() + 1}-${date?.getDate()}`).toBe(cases[c])
|
||||
})
|
||||
}
|
||||
})
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
// in order to use postcss-preset-env correctly we need some client side plugins
|
||||
import focusWithin from 'focus-within'
|
||||
import focusWithinInit from 'postcss-focus-within/browser'
|
||||
import cssHasPseudo from 'css-has-pseudo/browser'
|
||||
|
||||
focusWithin(document)
|
||||
focusWithinInit()
|
||||
cssHasPseudo(document)
|
|
@ -22,7 +22,7 @@
|
|||
<x-button @click="setDefaultFilters">Reset</x-button>
|
||||
</div>
|
||||
</div>
|
||||
<fancycheckbox class="is-block" v-model="filters.showTasksWithoutDates">
|
||||
<fancycheckbox is-block v-model="filters.showTasksWithoutDates">
|
||||
{{ $t('project.gantt.showTasksWithoutDates') }}
|
||||
</fancycheckbox>
|
||||
</div>
|
||||
|
|
|
@ -415,6 +415,7 @@ async function updateTaskPosition(e) {
|
|||
: e.newIndex
|
||||
|
||||
const task = newBucket.tasks[newTaskIndex]
|
||||
const oldBucket = buckets.value.find(b => b.id === task.bucketId)
|
||||
const taskBefore = newBucket.tasks[newTaskIndex - 1] ?? null
|
||||
const taskAfter = newBucket.tasks[newTaskIndex + 1] ?? null
|
||||
taskUpdating.value[task.id] = true
|
||||
|
@ -425,6 +426,13 @@ async function updateTaskPosition(e) {
|
|||
taskBefore !== null ? taskBefore.kanbanPosition : null,
|
||||
taskAfter !== null ? taskAfter.kanbanPosition : null,
|
||||
)
|
||||
if (
|
||||
oldBucket !== undefined && // This shouldn't actually be `undefined`, but let's play it safe.
|
||||
newBucket.id !== oldBucket.id &&
|
||||
newBucket.isDoneBucket !== oldBucket.isDoneBucket
|
||||
) {
|
||||
newTask.done = newBucket.isDoneBucket
|
||||
}
|
||||
|
||||
try {
|
||||
await taskStore.update(newTask)
|
||||
|
|
|
@ -144,24 +144,6 @@ import {useTaskStore} from '@/stores/tasks'
|
|||
|
||||
import type {IProject} from '@/modelTypes/IProject'
|
||||
|
||||
function sortTasks(tasks: ITask[]) {
|
||||
if (tasks === null || Array.isArray(tasks) && tasks.length === 0) {
|
||||
return
|
||||
}
|
||||
return tasks.sort((a, b) => {
|
||||
if (a.done < b.done)
|
||||
return -1
|
||||
if (a.done > b.done)
|
||||
return 1
|
||||
|
||||
if (a.position < b.position)
|
||||
return -1
|
||||
if (a.position > b.position)
|
||||
return 1
|
||||
return 0
|
||||
})
|
||||
}
|
||||
|
||||
const props = defineProps({
|
||||
projectId: {
|
||||
type: Number as PropType<IProject['id']>,
|
||||
|
@ -268,8 +250,6 @@ function updateTasks(updatedTask: ITask) {
|
|||
break
|
||||
}
|
||||
}
|
||||
// FIXME: Use computed
|
||||
sortTasks(tasks.value)
|
||||
}
|
||||
|
||||
async function saveTaskPosition(e) {
|
||||
|
|
|
@ -11,10 +11,10 @@
|
|||
</x-button>
|
||||
</template>
|
||||
</datepicker-with-range>
|
||||
<fancycheckbox @change="setShowNulls" class="mr-2">
|
||||
<fancycheckbox @update:model-value="setShowNulls" class="mr-2">
|
||||
{{ $t('task.show.noDates') }}
|
||||
</fancycheckbox>
|
||||
<fancycheckbox @change="setShowOverdue">
|
||||
<fancycheckbox @update:model-value="setShowOverdue">
|
||||
{{ $t('task.show.overdue') }}
|
||||
</fancycheckbox>
|
||||
</p>
|
||||
|
|
|
@ -322,6 +322,7 @@
|
|||
@click="setFieldActive('priority')"
|
||||
variant="secondary"
|
||||
icon="exclamation"
|
||||
v-shortcut="'p'"
|
||||
>
|
||||
{{ $t('task.detail.actions.priority') }}
|
||||
</x-button>
|
||||
|
@ -406,6 +407,7 @@
|
|||
@click="toggleFavorite"
|
||||
variant="secondary"
|
||||
:icon="task.isFavorite ? 'star' : ['far', 'star']"
|
||||
v-shortcut="'s'"
|
||||
>
|
||||
{{
|
||||
task.isFavorite ? $t('task.detail.actions.unfavorite') : $t('task.detail.actions.favorite')
|
||||
|
@ -416,6 +418,7 @@
|
|||
icon="trash-alt"
|
||||
:shadow="false"
|
||||
class="is-danger is-outlined has-no-border"
|
||||
v-shortcut="'Shift+Delete'"
|
||||
>
|
||||
{{ $t('task.detail.actions.delete') }}
|
||||
</x-button>
|
||||
|
|
|
@ -73,7 +73,11 @@
|
|||
:search-results="foundUsers"
|
||||
label="username"
|
||||
v-model="newMember"
|
||||
/>
|
||||
>
|
||||
<template #searchResult="{option: user}">
|
||||
<User :avatar-size="24" :user="user" class="m-0"/>
|
||||
</template>
|
||||
</multiselect>
|
||||
</div>
|
||||
<div class="control">
|
||||
<x-button @click="addUser" icon="plus">
|
||||
|
@ -88,7 +92,9 @@
|
|||
<table class="table has-actions is-striped is-hoverable is-fullwidth">
|
||||
<tbody>
|
||||
<tr :key="m.id" v-for="m in team?.members">
|
||||
<td>{{ getDisplayName(m) }}</td>
|
||||
<td>
|
||||
<User :avatar-size="24" :user="m" class="m-0"/>
|
||||
</td>
|
||||
<td>
|
||||
<template v-if="m.id === userInfo.id">
|
||||
<b class="is-success">You</b>
|
||||
|
@ -185,6 +191,7 @@ import {useRoute, useRouter} from 'vue-router'
|
|||
|
||||
import Editor from '@/components/input/AsyncEditor'
|
||||
import Multiselect from '@/components/input/multiselect.vue'
|
||||
import User from '@/components/misc/user.vue'
|
||||
|
||||
import TeamService from '@/services/team'
|
||||
import TeamMemberService from '@/services/teamMember'
|
||||
|
@ -194,7 +201,6 @@ import {RIGHTS as Rights} from '@/constants/rights'
|
|||
|
||||
import {useTitle} from '@/composables/useTitle'
|
||||
import {success} from '@/message'
|
||||
import {getDisplayName} from '@/models/user'
|
||||
import {useAuthStore} from '@/stores/auth'
|
||||
|
||||
import type {ITeam} from '@/modelTypes/ITeam'
|
||||
|
|
|
@ -11,17 +11,17 @@
|
|||
{{ $t('user.auth.login') }}
|
||||
</x-button>
|
||||
</div>
|
||||
<form @submit.prevent="submit" id="form" v-if="!successMessage">
|
||||
<form @submit.prevent="resetPassword" id="form" v-if="!successMessage">
|
||||
<div class="field">
|
||||
<label class="label" for="password">{{ $t('user.auth.password') }}</label>
|
||||
<Password @submit="submit" @update:modelValue="v => credentials.password = v"/>
|
||||
<Password @submit="resetPassword" @update:modelValue="v => credentials.password = v"/>
|
||||
</div>
|
||||
|
||||
<div class="field is-grouped">
|
||||
<div class="control">
|
||||
<x-button
|
||||
:loading="passwordResetService.loading"
|
||||
@click="submit"
|
||||
@click="resetPassword"
|
||||
>
|
||||
{{ $t('user.auth.resetPassword') }}
|
||||
</x-button>
|
||||
|
@ -47,7 +47,7 @@ const passwordResetService = reactive(new PasswordResetService())
|
|||
const errorMsg = ref('')
|
||||
const successMessage = ref('')
|
||||
|
||||
async function submit() {
|
||||
async function resetPassword() {
|
||||
errorMsg.value = ''
|
||||
|
||||
if(credentials.password === '') {
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
{{ $t('user.auth.login') }}
|
||||
</x-button>
|
||||
</div>
|
||||
<form @submit.prevent="submit" v-if="!isSuccess">
|
||||
<form @submit.prevent="requestPasswordReset" v-if="!isSuccess">
|
||||
<div class="field">
|
||||
<label class="label" for="email">{{ $t('user.auth.email') }}</label>
|
||||
<div class="control">
|
||||
|
@ -30,7 +30,7 @@
|
|||
<div class="field is-grouped">
|
||||
<div class="control">
|
||||
<x-button
|
||||
@click="submit"
|
||||
type="submit"
|
||||
:loading="passwordResetService.loading"
|
||||
>
|
||||
{{ $t('user.auth.resetPasswordAction') }}
|
||||
|
@ -45,19 +45,18 @@
|
|||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import {ref, reactive} from 'vue'
|
||||
import {ref, shallowReactive} from 'vue'
|
||||
|
||||
import PasswordResetModel from '@/models/passwordReset'
|
||||
import PasswordResetService from '@/services/passwordReset'
|
||||
import Message from '@/components/misc/message.vue'
|
||||
|
||||
// Not sure if this instance needs a shalloRef at all
|
||||
const passwordResetService = reactive(new PasswordResetService())
|
||||
const passwordResetService = shallowReactive(new PasswordResetService())
|
||||
const passwordReset = ref(new PasswordResetModel())
|
||||
const errorMsg = ref('')
|
||||
const isSuccess = ref(false)
|
||||
|
||||
async function submit() {
|
||||
async function requestPasswordReset() {
|
||||
errorMsg.value = ''
|
||||
try {
|
||||
await passwordResetService.requestResetPassword(passwordReset.value)
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"extends": "@vue/tsconfig/tsconfig.web.json",
|
||||
"extends": "@vue/tsconfig/tsconfig.dom.json",
|
||||
"include": ["env.d.ts", "src/**/*.d.ts", "src/**/*", "src/**/*.vue", "src/**/*.json"],
|
||||
"exclude": ["src/**/__tests__/*"],
|
||||
"compilerOptions": {
|
||||
|
@ -13,7 +13,8 @@
|
|||
|
||||
"paths": {
|
||||
"@/*": ["./src/*"]
|
||||
}
|
||||
},
|
||||
"ignoreDeprecations": "5.0"
|
||||
},
|
||||
"vueCompilerOptions": {
|
||||
// "strictTemplates": true
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
{
|
||||
"extends": "@vue/tsconfig/tsconfig.node.json",
|
||||
"extends": [
|
||||
"@tsconfig/node18/tsconfig.json",
|
||||
"@vue/tsconfig/tsconfig.json"
|
||||
],
|
||||
"include": ["vite.config.*", "vitest.config.*", "cypress.config.*", "env.config.d.ts"],
|
||||
"compilerOptions": {
|
||||
"composite": true,
|
||||
|
|
|
@ -60,6 +60,7 @@ export default defineConfig(({mode}) => {
|
|||
// https://vitest.dev/config/
|
||||
test: {
|
||||
environment: 'happy-dom',
|
||||
'vitest.commandLine': 'pnpm test:unit',
|
||||
},
|
||||
css: {
|
||||
preprocessorOptions: {
|
||||
|
@ -81,6 +82,7 @@ export default defineConfig(({mode}) => {
|
|||
// See also './src/polyfills.ts'
|
||||
features: {
|
||||
'focus-within-pseudo-class': true,
|
||||
'has-pseudo-class': true,
|
||||
},
|
||||
}),
|
||||
],
|
||||
|
|
Loading…
Reference in New Issue