forked from vikunja/frontend
Compare commits
41 Commits
renovate/n
...
main
Author | SHA1 | Date | |
---|---|---|---|
75262b716f | |||
7e623d919e | |||
3f42ce2b34 | |||
8b8da40265 | |||
|
0f23cc2162 | ||
|
adf80d9184 | ||
|
e3dfcafc29 | ||
|
a9df58109f | ||
59a7360608 | |||
29e128c64c | |||
cec50d912c | |||
53564ec46c | |||
e9cd7aac69 | |||
a47bfb3ff1 | |||
86eb4da2e3 | |||
d1882e9c3f | |||
974755ffc2 | |||
|
f00d49cada | ||
|
e41ec4e8b2 | ||
218d72494a | |||
bde212d432 | |||
64a8dd189b | |||
ba766a29af | |||
e02a106c64 | |||
ccdc5d4868 | |||
9240739a4b | |||
963d91c4d5 | |||
f33d154b37 | |||
|
b12db63de0 | ||
|
a3e729a3c8 | ||
8e0ba555ed | |||
9cf81e1478 | |||
4350d78178 | |||
cea27bb754 | |||
4b7f8c265d | |||
412e6e77b4 | |||
45abdda680 | |||
0b2188d72d | |||
143a2a105d | |||
68d18934d8 | |||
cea3274a90 |
16
.drone.yml
16
.drone.yml
|
@ -42,7 +42,7 @@ steps:
|
|||
# - .cache
|
||||
|
||||
- name: dependencies
|
||||
image: node:20.8-alpine
|
||||
image: node:20.9-alpine
|
||||
pull: always
|
||||
environment:
|
||||
PNPM_CACHE_FOLDER: .cache/pnpm
|
||||
|
@ -55,7 +55,7 @@ steps:
|
|||
# - restore-cache
|
||||
|
||||
- name: lint
|
||||
image: node:20.8-alpine
|
||||
image: node:20.9-alpine
|
||||
pull: always
|
||||
environment:
|
||||
PNPM_CACHE_FOLDER: .cache/pnpm
|
||||
|
@ -66,7 +66,7 @@ steps:
|
|||
- dependencies
|
||||
|
||||
- name: build-prod
|
||||
image: node:20.8-alpine
|
||||
image: node:20.9-alpine
|
||||
pull: always
|
||||
environment:
|
||||
PNPM_CACHE_FOLDER: .cache/pnpm
|
||||
|
@ -77,7 +77,7 @@ steps:
|
|||
- dependencies
|
||||
|
||||
- name: test-unit
|
||||
image: node:20.8-alpine
|
||||
image: node:20.9-alpine
|
||||
pull: always
|
||||
commands:
|
||||
- corepack enable && pnpm config set store-dir .cache/pnpm
|
||||
|
@ -87,7 +87,7 @@ steps:
|
|||
|
||||
- name: typecheck
|
||||
failure: ignore
|
||||
image: node:20.8-alpine
|
||||
image: node:20.9-alpine
|
||||
pull: always
|
||||
environment:
|
||||
PNPM_CACHE_FOLDER: .cache/pnpm
|
||||
|
@ -202,7 +202,7 @@ steps:
|
|||
# - .cache
|
||||
|
||||
- name: build
|
||||
image: node:20.8-alpine
|
||||
image: node:20.9-alpine
|
||||
pull: always
|
||||
environment:
|
||||
PNPM_CACHE_FOLDER: .cache/pnpm
|
||||
|
@ -285,7 +285,7 @@ steps:
|
|||
# - .cache
|
||||
|
||||
- name: build
|
||||
image: node:20.8-alpine
|
||||
image: node:20.9-alpine
|
||||
pull: always
|
||||
environment:
|
||||
PNPM_CACHE_FOLDER: .cache/pnpm
|
||||
|
@ -532,6 +532,6 @@ steps:
|
|||
src/i18n/lang/en.json: en.json
|
||||
---
|
||||
kind: signature
|
||||
hmac: 3678445f9053754ee4aae3e8888f8275e592711b84f0a1f013da117c9c1f44ce
|
||||
hmac: dab902060979f246df77641c995c843ea39f86dba2de9003da7e593ce6f6f08a
|
||||
|
||||
...
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
# │─││ │││ │ │
|
||||
# ┘─┘┘─┘┘┘─┘┘─┘
|
||||
|
||||
FROM --platform=$BUILDPLATFORM node:20.8-alpine AS builder
|
||||
FROM --platform=$BUILDPLATFORM node:20.9-alpine AS builder
|
||||
|
||||
WORKDIR /build
|
||||
|
||||
|
|
74
package.json
74
package.json
|
@ -13,7 +13,7 @@
|
|||
},
|
||||
"homepage": "https://vikunja.io/",
|
||||
"funding": "https://opencollective.com/vikunja",
|
||||
"packageManager": "pnpm@8.9.2",
|
||||
"packageManager": "pnpm@8.10.2",
|
||||
"keywords": [
|
||||
"todo",
|
||||
"productivity",
|
||||
|
@ -48,13 +48,13 @@
|
|||
"@fortawesome/fontawesome-svg-core": "6.4.2",
|
||||
"@fortawesome/free-regular-svg-icons": "6.4.2",
|
||||
"@fortawesome/free-solid-svg-icons": "6.4.2",
|
||||
"@fortawesome/vue-fontawesome": "3.0.3",
|
||||
"@github/hotkey": "2.1.1",
|
||||
"@fortawesome/vue-fontawesome": "3.0.5",
|
||||
"@github/hotkey": "2.3.0",
|
||||
"@infectoone/vue-ganttastic": "2.2.0",
|
||||
"@intlify/unplugin-vue-i18n": "1.4.0",
|
||||
"@intlify/unplugin-vue-i18n": "1.5.0",
|
||||
"@kyvg/vue3-notification": "3.0.2",
|
||||
"@sentry/tracing": "7.74.1",
|
||||
"@sentry/vue": "7.74.1",
|
||||
"@sentry/tracing": "7.77.0",
|
||||
"@sentry/vue": "7.77.0",
|
||||
"@tiptap/core": "2.1.12",
|
||||
"@tiptap/extension-blockquote": "2.1.12",
|
||||
"@tiptap/extension-bold": "2.1.12",
|
||||
|
@ -88,12 +88,12 @@
|
|||
"@tiptap/pm": "2.1.12",
|
||||
"@tiptap/suggestion": "2.1.12",
|
||||
"@tiptap/vue-3": "2.1.12",
|
||||
"@types/is-touch-device": "1.0.1",
|
||||
"@types/lodash.clonedeep": "4.5.8",
|
||||
"@types/is-touch-device": "1.0.2",
|
||||
"@types/lodash.clonedeep": "4.5.9",
|
||||
"@types/sortablejs": "1.15.4",
|
||||
"@vueuse/core": "10.5.0",
|
||||
"@vueuse/router": "10.5.0",
|
||||
"axios": "1.5.1",
|
||||
"axios": "1.6.0",
|
||||
"blurhash": "2.0.5",
|
||||
"bulma-css-variables": "0.9.33",
|
||||
"camel-case": "4.1.2",
|
||||
|
@ -114,10 +114,10 @@
|
|||
"sortablejs": "1.15.0",
|
||||
"tippy.js": "6.3.7",
|
||||
"ufo": "1.3.1",
|
||||
"vue": "3.3.6",
|
||||
"vue": "3.3.8",
|
||||
"vue-advanced-cropper": "2.8.8",
|
||||
"vue-flatpickr-component": "11.0.3",
|
||||
"vue-i18n": "9.5.0",
|
||||
"vue-i18n": "9.6.5",
|
||||
"vue-router": "4.2.5",
|
||||
"workbox-precaching": "7.0.0",
|
||||
"zhyswan-vuedraggable": "4.1.3"
|
||||
|
@ -126,56 +126,56 @@
|
|||
"@4tw/cypress-drag-drop": "2.2.5",
|
||||
"@cypress/vite-dev-server": "5.0.6",
|
||||
"@cypress/vue": "6.0.0",
|
||||
"@faker-js/faker": "8.2.0",
|
||||
"@faker-js/faker": "8.3.1",
|
||||
"@histoire/plugin-screenshot": "0.17.0",
|
||||
"@histoire/plugin-vue": "0.17.1",
|
||||
"@histoire/plugin-vue": "0.17.5",
|
||||
"@rushstack/eslint-patch": "1.5.1",
|
||||
"@tsconfig/node18": "18.2.2",
|
||||
"@types/codemirror": "5.60.12",
|
||||
"@types/dompurify": "3.0.4",
|
||||
"@types/flexsearch": "0.7.5",
|
||||
"@types/is-touch-device": "1.0.1",
|
||||
"@types/lodash.debounce": "4.0.8",
|
||||
"@types/codemirror": "5.60.13",
|
||||
"@types/dompurify": "3.0.5",
|
||||
"@types/flexsearch": "0.7.6",
|
||||
"@types/is-touch-device": "1.0.2",
|
||||
"@types/lodash.debounce": "4.0.9",
|
||||
"@types/marked": "5.0.2",
|
||||
"@types/node": "18.18.6",
|
||||
"@types/node": "20.9.0",
|
||||
"@types/postcss-preset-env": "7.7.0",
|
||||
"@types/sortablejs": "1.15.4",
|
||||
"@typescript-eslint/eslint-plugin": "6.8.0",
|
||||
"@typescript-eslint/parser": "6.8.0",
|
||||
"@types/sortablejs": "1.15.5",
|
||||
"@typescript-eslint/eslint-plugin": "6.11.0",
|
||||
"@typescript-eslint/parser": "6.11.0",
|
||||
"@vitejs/plugin-legacy": "4.1.1",
|
||||
"@vitejs/plugin-vue": "4.4.0",
|
||||
"@vitejs/plugin-vue": "4.4.1",
|
||||
"@vue/eslint-config-typescript": "12.0.0",
|
||||
"@vue/test-utils": "2.4.1",
|
||||
"@vue/test-utils": "2.4.2",
|
||||
"@vue/tsconfig": "0.4.0",
|
||||
"autoprefixer": "10.4.16",
|
||||
"browserslist": "4.22.1",
|
||||
"caniuse-lite": "1.0.30001551",
|
||||
"caniuse-lite": "1.0.30001562",
|
||||
"css-has-pseudo": "6.0.0",
|
||||
"csstype": "3.1.2",
|
||||
"cypress": "13.3.2",
|
||||
"cypress": "13.5.1",
|
||||
"esbuild": "0.19.5",
|
||||
"eslint": "8.52.0",
|
||||
"eslint-plugin-vue": "9.17.0",
|
||||
"happy-dom": "12.9.1",
|
||||
"histoire": "0.17.2",
|
||||
"eslint": "8.53.0",
|
||||
"eslint-plugin-vue": "9.18.1",
|
||||
"happy-dom": "12.10.3",
|
||||
"histoire": "0.17.5",
|
||||
"postcss": "8.4.31",
|
||||
"postcss-easing-gradients": "3.0.1",
|
||||
"postcss-easings": "4.0.0",
|
||||
"postcss-focus-within": "8.0.0",
|
||||
"postcss-preset-env": "9.2.0",
|
||||
"rollup": "4.1.4",
|
||||
"postcss-preset-env": "9.3.0",
|
||||
"rollup": "4.4.1",
|
||||
"rollup-plugin-visualizer": "5.9.2",
|
||||
"sass": "1.69.4",
|
||||
"start-server-and-test": "2.0.1",
|
||||
"sass": "1.69.5",
|
||||
"start-server-and-test": "2.0.2",
|
||||
"typescript": "5.2.2",
|
||||
"vite": "4.5.0",
|
||||
"vite-plugin-inject-preload": "1.3.3",
|
||||
"vite-plugin-pwa": "0.16.5",
|
||||
"vite-plugin-pwa": "0.16.7",
|
||||
"vite-plugin-sentry": "1.3.0",
|
||||
"vite-svg-loader": "4.0.0",
|
||||
"vitest": "0.34.6",
|
||||
"vue-tsc": "1.8.19",
|
||||
"wait-on": "7.0.1",
|
||||
"vue-tsc": "1.8.22",
|
||||
"wait-on": "7.2.0",
|
||||
"workbox-cli": "7.0.0"
|
||||
},
|
||||
"pnpm": {
|
||||
|
|
1166
pnpm-lock.yaml
1166
pnpm-lock.yaml
File diff suppressed because it is too large
Load Diff
|
@ -39,7 +39,7 @@
|
|||
</router-view>
|
||||
|
||||
<modal
|
||||
:enabled="Boolean(currentModal)"
|
||||
:enabled="typeof currentModal !== 'undefined'"
|
||||
@close="closeModal()"
|
||||
variant="scrolling"
|
||||
class="task-detail-view-modal"
|
||||
|
|
|
@ -20,11 +20,20 @@ import type {IProject} from '@/modelTypes/IProject'
|
|||
import ProjectService from '@/services/project'
|
||||
import {includesById} from '@/helpers/utils'
|
||||
|
||||
type ProjectFilterFunc = (p: IProject) => boolean
|
||||
|
||||
const props = defineProps({
|
||||
modelValue: {
|
||||
type: Array as PropType<IProject[]>,
|
||||
default: () => [],
|
||||
},
|
||||
projectFilter: {
|
||||
type: Function as PropType<ProjectFilterFunc>,
|
||||
default: () => {
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
return (_: IProject) => true
|
||||
},
|
||||
},
|
||||
})
|
||||
const emit = defineEmits<{
|
||||
(e: 'update:modelValue', value: IProject[]): void
|
||||
|
@ -58,6 +67,8 @@ async function findProjects(query: string) {
|
|||
const response = await projectService.getAll({}, {s: query}) as IProject[]
|
||||
|
||||
// Filter selected items from the results
|
||||
foundProjects.value = response.filter(({id}) => !includesById(projects.value, id))
|
||||
foundProjects.value = response
|
||||
.filter(({id}) => !includesById(projects.value, id))
|
||||
.filter(props.projectFilter)
|
||||
}
|
||||
</script>
|
|
@ -173,6 +173,7 @@ import {Placeholder} from '@tiptap/extension-placeholder'
|
|||
import {eventToHotkeyString} from '@github/hotkey'
|
||||
import {mergeAttributes} from '@tiptap/core'
|
||||
import {createRandomID} from '@/helpers/randomId'
|
||||
import {isEditorContentEmpty} from '@/helpers/editorContentEmpty'
|
||||
|
||||
const {t} = useI18n()
|
||||
|
||||
|
@ -267,41 +268,12 @@ const {
|
|||
const emit = defineEmits(['update:modelValue', 'save'])
|
||||
|
||||
const inputHTML = ref('')
|
||||
watch(
|
||||
() => modelValue,
|
||||
() => {
|
||||
inputHTML.value = modelValue
|
||||
},
|
||||
{immediate: true},
|
||||
)
|
||||
|
||||
const isEmpty = computed(() => inputHTML.value === '')
|
||||
const isEmpty = computed(() => isEditorContentEmpty(inputHTML.value))
|
||||
const internalMode = ref<Mode>(initialMode)
|
||||
const isEditing = computed(() => internalMode.value === 'edit' && isEditEnabled)
|
||||
|
||||
function setEdit() {
|
||||
internalMode.value = 'edit'
|
||||
editor.value?.commands.focus()
|
||||
}
|
||||
|
||||
const debouncedInputHTML = refDebounced(inputHTML, 1000)
|
||||
|
||||
watch(debouncedInputHTML, () => bubbleNow())
|
||||
|
||||
function bubbleNow() {
|
||||
emit('update:modelValue', inputHTML.value)
|
||||
}
|
||||
|
||||
function bubbleSave() {
|
||||
bubbleNow()
|
||||
emit('save', inputHTML.value)
|
||||
if (initialMode === 'preview' && isEditing.value) {
|
||||
internalMode.value = 'preview'
|
||||
}
|
||||
}
|
||||
|
||||
const editor = useEditor({
|
||||
content: inputHTML.value,
|
||||
content: modelValue,
|
||||
editable: isEditing.value,
|
||||
extensions: [
|
||||
// Starterkit:
|
||||
|
@ -386,14 +358,45 @@ const editor = useEditor({
|
|||
BubbleMenu,
|
||||
],
|
||||
onUpdate: () => {
|
||||
// HTML
|
||||
inputHTML.value = editor.value!.getHTML()
|
||||
|
||||
// JSON
|
||||
// this.$emit('update:modelValue', this.editor.getJSON())
|
||||
},
|
||||
})
|
||||
|
||||
watch(
|
||||
() => modelValue,
|
||||
value => {
|
||||
inputHTML.value = value
|
||||
|
||||
if (!editor?.value) return
|
||||
|
||||
if (editor.value.getHTML() === value) {
|
||||
return
|
||||
}
|
||||
|
||||
editor.value.commands.setContent(value, false)
|
||||
},
|
||||
)
|
||||
|
||||
const debouncedInputHTML = refDebounced(inputHTML, 1000)
|
||||
watch(debouncedInputHTML, () => bubbleNow())
|
||||
|
||||
function bubbleNow() {
|
||||
emit('update:modelValue', inputHTML.value)
|
||||
}
|
||||
|
||||
function bubbleSave() {
|
||||
bubbleNow()
|
||||
emit('save', inputHTML.value)
|
||||
if (isEditing.value) {
|
||||
internalMode.value = 'preview'
|
||||
}
|
||||
}
|
||||
|
||||
function setEdit() {
|
||||
internalMode.value = 'edit'
|
||||
editor.value?.commands.focus()
|
||||
}
|
||||
|
||||
watch(
|
||||
() => isEditing.value,
|
||||
() => {
|
||||
|
@ -401,21 +404,6 @@ watch(
|
|||
},
|
||||
)
|
||||
|
||||
watch(inputHTML, (value) => {
|
||||
if (!editor.value) return
|
||||
// HTML
|
||||
const isSame = editor.value.getHTML() === value
|
||||
|
||||
// JSON
|
||||
// const isSame = JSON.stringify(editor.value.getJSON()) === JSON.stringify(value)
|
||||
|
||||
if (isSame) {
|
||||
return
|
||||
}
|
||||
|
||||
editor.value.commands.setContent(value, false)
|
||||
})
|
||||
|
||||
onBeforeUnmount(() => editor.value?.destroy())
|
||||
|
||||
const uploadInputRef = ref<HTMLInputElement | null>(null)
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
<template>
|
||||
<transition :name="name">
|
||||
<slot />
|
||||
<!-- eslint-disable-next-line -->
|
||||
<slot/>
|
||||
</transition>
|
||||
</template>
|
||||
|
||||
|
|
|
@ -164,6 +164,7 @@
|
|||
v-model="entities.projects"
|
||||
@select="changeMultiselectFilter('projects', 'project_id')"
|
||||
@remove="changeMultiselectFilter('projects', 'project_id')"
|
||||
:project-filter="p => p.id > 0"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -411,10 +412,10 @@ function prepareDate(filterName, variableName) {
|
|||
const endDate = new Date(params.value.filter_value[foundDateEnd])
|
||||
filters.value[variableName] = {
|
||||
dateFrom: !isNaN(startDate)
|
||||
? `${startDate.getFullYear()}-${startDate.getMonth() + 1}-${startDate.getDate()}`
|
||||
? `${startDate.getUTCFullYear()}-${startDate.getUTCMonth() + 1}-${startDate.getUTCDate()}`
|
||||
: params.value.filter_value[foundDateStart],
|
||||
dateTo: !isNaN(endDate)
|
||||
? `${endDate.getFullYear()}-${endDate.getMonth() + 1}-${endDate.getDate()}`
|
||||
? `${endDate.getUTCFullYear()}-${endDate.getUTCMonth() + 1}-${endDate.getUTCDate()}`
|
||||
: params.value.filter_value[foundDateEnd],
|
||||
}
|
||||
}
|
||||
|
|
|
@ -22,10 +22,10 @@
|
|||
:placeholder="$t('task.description.placeholder')"
|
||||
:show-save="true"
|
||||
edit-shortcut="e"
|
||||
v-model="task.description"
|
||||
v-model="description"
|
||||
@update:model-value="saveWithDelay"
|
||||
@save="save"
|
||||
:initial-mode="task.description !== '' ? 'preview' : 'edit'"
|
||||
:initial-mode="isEditorContentEmpty(description) ? 'preview' : 'edit'"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
@ -38,7 +38,7 @@ import Editor from '@/components/input/AsyncEditor'
|
|||
|
||||
import type {ITask} from '@/modelTypes/ITask'
|
||||
import {useTaskStore} from '@/stores/tasks'
|
||||
import TaskModel from '@/models/task'
|
||||
import {isEditorContentEmpty} from '@/helpers/editorContentEmpty'
|
||||
|
||||
type AttachmentUploadFunction = (file: File, onSuccess: (attachmentUrl: string) => void) => Promise<string>
|
||||
|
||||
|
@ -54,7 +54,7 @@ const {
|
|||
|
||||
const emit = defineEmits(['update:modelValue'])
|
||||
|
||||
const task = ref<ITask>(new TaskModel())
|
||||
const description = ref<string>('')
|
||||
const saved = ref(false)
|
||||
|
||||
// Since loading is global state, this variable ensures we're only showing the saving icon when saving the description.
|
||||
|
@ -64,9 +64,9 @@ const taskStore = useTaskStore()
|
|||
const loading = computed(() => taskStore.isLoading)
|
||||
|
||||
watch(
|
||||
() => modelValue,
|
||||
(value) => {
|
||||
task.value = value
|
||||
() => modelValue.description,
|
||||
value => {
|
||||
description.value = value
|
||||
},
|
||||
{immediate: true},
|
||||
)
|
||||
|
@ -92,8 +92,11 @@ async function save() {
|
|||
|
||||
try {
|
||||
// FIXME: don't update state from internal.
|
||||
task.value = await taskStore.update(task.value)
|
||||
emit('update:modelValue', task.value)
|
||||
const updated = await taskStore.update({
|
||||
...modelValue,
|
||||
description: description.value,
|
||||
})
|
||||
emit('update:modelValue', updated)
|
||||
|
||||
saved.value = true
|
||||
setTimeout(() => {
|
||||
|
|
|
@ -24,13 +24,18 @@ export function useRouteWithModal() {
|
|||
// this is adapted from vue-router
|
||||
// https://github.com/vuejs/vue-router-next/blob/798cab0d1e21f9b4d45a2bd12b840d2c7415f38a/src/RouterView.ts#L125
|
||||
const routePropsOption = route.matched[0]?.props.default
|
||||
const routeProps = routePropsOption
|
||||
? routePropsOption === true
|
||||
? route.params
|
||||
: typeof routePropsOption === 'function'
|
||||
? routePropsOption(route)
|
||||
: routePropsOption
|
||||
: {}
|
||||
let routeProps = undefined
|
||||
if (routePropsOption) {
|
||||
if (routePropsOption === true) {
|
||||
routeProps = route.params
|
||||
} else {
|
||||
if(typeof routePropsOption === 'function') {
|
||||
routeProps = routePropsOption(route)
|
||||
} else {
|
||||
routeProps = routePropsOption
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (typeof routeProps === 'undefined') {
|
||||
currentModal.value = undefined
|
||||
|
|
3
src/helpers/editorContentEmpty.ts
Normal file
3
src/helpers/editorContentEmpty.ts
Normal file
|
@ -0,0 +1,3 @@
|
|||
export function isEditorContentEmpty(content: string): boolean {
|
||||
return content === '' || content === '<p></p>'
|
||||
}
|
|
@ -6,6 +6,7 @@
|
|||
"welcomeEvening": "مساء الخير {username}!",
|
||||
"lastViewed": "آخر مشاهدة",
|
||||
"addToHomeScreen": "أضف هذا التطبيق إلى شاشتك الرئيسة من أجل وصول أسرع وتجربة أفضل.",
|
||||
"goToOverview": "Go to overview",
|
||||
"project": {
|
||||
"importText": "استيراد مشاريعك ومهامك من المنصات الأخرى إلى Vikunja:",
|
||||
"import": "استيراد بياناتك إلى Vikunja"
|
||||
|
@ -424,7 +425,9 @@
|
|||
"alreadyMigrated2": "الاستيراد مرة أخرى ممكن، ولكن قد يتسبب هذا بإنشاء بيانات مكررة. هل أنت متأكد؟",
|
||||
"confirm": "أنا متأكد، الرجاء البدء في عملية الترحيل الآن!",
|
||||
"importUpload": "لاستيراد البيانات من {name} إلى Vikunja، انقر على الزر أدناه لاختيار الملف.",
|
||||
"upload": "رفع الملف"
|
||||
"upload": "رفع الملف",
|
||||
"migrationStartedWillReciveEmail": "Vikunja will now import your lists/projects, tasks, notes, reminders and files from {service}. As this will take a while, we will send you an email once done. You can close this window now.",
|
||||
"migrationInProgress": "A migration is currently in progress. Please wait until it is done."
|
||||
},
|
||||
"label": {
|
||||
"title": "التسميات",
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
"welcomeEvening": "Good Evening {username}!",
|
||||
"lastViewed": "Last viewed",
|
||||
"addToHomeScreen": "Add this app to your home screen for faster access and improved experience.",
|
||||
"goToOverview": "Go to overview",
|
||||
"project": {
|
||||
"importText": "Import your projects and tasks from other services into Vikunja:",
|
||||
"import": "Import your data into Vikunja"
|
||||
|
@ -424,7 +425,9 @@
|
|||
"alreadyMigrated2": "Importing again is possible, but might create duplicates. Are you sure?",
|
||||
"confirm": "I am sure, please start migrating now!",
|
||||
"importUpload": "To import data from {name} into Vikunja, click the button below to select a file.",
|
||||
"upload": "Upload file"
|
||||
"upload": "Upload file",
|
||||
"migrationStartedWillReciveEmail": "Vikunja will now import your lists/projects, tasks, notes, reminders and files from {service}. As this will take a while, we will send you an email once done. You can close this window now.",
|
||||
"migrationInProgress": "A migration is currently in progress. Please wait until it is done."
|
||||
},
|
||||
"label": {
|
||||
"title": "Labels",
|
||||
|
|
|
@ -5,16 +5,17 @@
|
|||
"welcomeDay": "Ahoj {username}!",
|
||||
"welcomeEvening": "Dobrý večer {username}!",
|
||||
"lastViewed": "Naposledy zobrazeno",
|
||||
"addToHomeScreen": "Add this app to your home screen for faster access and improved experience.",
|
||||
"addToHomeScreen": "Přidejte tuto aplikaci na domovskou obrazovku pro rychlejší přístup a lepší zážitek.",
|
||||
"goToOverview": "Přejít na přehled",
|
||||
"project": {
|
||||
"importText": "Import your projects and tasks from other services into Vikunja:",
|
||||
"import": "Import your data into Vikunja"
|
||||
"importText": "Importujte své projekty a úkoly z jiných služeb do Vikunja:",
|
||||
"import": "Importujte svá data do Vikunja"
|
||||
}
|
||||
},
|
||||
"demo": {
|
||||
"title": "This instance is in demo mode. Do not use this for real data!",
|
||||
"everythingWillBeDeleted": "Everything will be deleted in regular intervals!",
|
||||
"accountWillBeDeleted": "Your account will be deleted, including all projects, tasks and attachments you might create."
|
||||
"title": "Tato instance je v ukázkovém režimu. Nepoužívejte ji pro skutečná data!",
|
||||
"everythingWillBeDeleted": "Všechno bude v pravidelných intervalech smazáno!",
|
||||
"accountWillBeDeleted": "Váš účet bude smazán včetně všech projektů, úkolů a příloh, které můžete vytvořit."
|
||||
},
|
||||
"404": {
|
||||
"title": "Nenalezeno",
|
||||
|
@ -82,17 +83,17 @@
|
|||
"savedSuccess": "Nastavení bylo úspěšně aktualizováno.",
|
||||
"emailReminders": "Posílat mi připomenutí pro úkoly e-mailem",
|
||||
"overdueReminders": "Pošlete mi každý den shrnutí mých zpožděných úkolů",
|
||||
"discoverableByName": "Allow other users to add me as a member to teams or projects when they search for my name",
|
||||
"discoverableByEmail": "Allow other users to add me as a member to teams or projects when they search for my full email",
|
||||
"discoverableByName": "Umožnit ostatním uživatelům přidat mě jako člena do týmů nebo projektů, když hledají mé jméno",
|
||||
"discoverableByEmail": "Umožnit ostatním uživatelům, aby mě přidali jako člena do týmů nebo projektů, když hledají můj úplný e-mail",
|
||||
"playSoundWhenDone": "Přehrát zvuk při označení úkolů jako hotovo",
|
||||
"weekStart": "Začátek týdne",
|
||||
"weekStart": "První den týdne",
|
||||
"weekStartSunday": "Neděle",
|
||||
"weekStartMonday": "Pondělí",
|
||||
"language": "Jazyk",
|
||||
"defaultProject": "Default Project",
|
||||
"defaultProject": "Výchozí projekt",
|
||||
"timezone": "Časové pásmo",
|
||||
"overdueTasksRemindersTime": "Čas odeslání emailu o zpožděných úkolech",
|
||||
"filterUsedOnOverview": "Saved filter used on the overview page"
|
||||
"filterUsedOnOverview": "Uložený filtr použitý na stránce přehledu"
|
||||
},
|
||||
"totp": {
|
||||
"title": "Dvoufaktorové ověření",
|
||||
|
@ -146,37 +147,37 @@
|
|||
}
|
||||
},
|
||||
"apiTokens": {
|
||||
"title": "API Tokens",
|
||||
"general": "API tokens allow you to use Vikunja's API without user credentials.",
|
||||
"apiDocs": "Check out the api docs",
|
||||
"createAToken": "Create a token",
|
||||
"createToken": "Create token",
|
||||
"30d": "30 Days",
|
||||
"60d": "60 Days",
|
||||
"90d": "90 Days",
|
||||
"permissionExplanation": "Permissions allow you to scope what an api token is allowed to do.",
|
||||
"titleRequired": "The title is required",
|
||||
"expired": "This token has expired {ago}.",
|
||||
"tokenCreatedSuccess": "Here is your new api token: {token}",
|
||||
"tokenCreatedNotSeeAgain": "Store it in a secure location, you won't see it again!",
|
||||
"title": "API Tokeny",
|
||||
"general": "API tokeny umožňují používat Vikunja API bez uživatelských údajů.",
|
||||
"apiDocs": "Podívejte se na dokumentaci api",
|
||||
"createAToken": "Vytvořit token",
|
||||
"createToken": "Vytvořit token",
|
||||
"30d": "30 dní",
|
||||
"60d": "60 dní",
|
||||
"90d": "90 dní",
|
||||
"permissionExplanation": "Oprávnění vám umožní nastavit, k čemu lze api token použít.",
|
||||
"titleRequired": "Je vyžadován název",
|
||||
"expired": "Platnost tohoto tokenu vypršela {ago}.",
|
||||
"tokenCreatedSuccess": "Zde je tvůj nový api token: {token}",
|
||||
"tokenCreatedNotSeeAgain": "Ulož jej na zabezpečeném místě, už ho znovu neuvidíš!",
|
||||
"delete": {
|
||||
"header": "Delete this token",
|
||||
"text1": "Are you sure you want to delete the token \"{token}\"?",
|
||||
"text2": "This will revoke access to all applications or integrations using it. You cannot undo this."
|
||||
"header": "Smazat tento token",
|
||||
"text1": "Opravdu chcete smazat token \"{token}\"?",
|
||||
"text2": "Tímto zrušíte přístup ke všem aplikacím nebo integracím, které ho používají. Toto nelze vrátit zpět."
|
||||
},
|
||||
"attributes": {
|
||||
"title": "Title",
|
||||
"titlePlaceholder": "Enter a title you will recognize later",
|
||||
"expiresAt": "Expires at",
|
||||
"permissions": "Permissions"
|
||||
"title": "Název",
|
||||
"titlePlaceholder": "Zadejte název, podle kterýho ho později poznáte",
|
||||
"expiresAt": "Vyprší v",
|
||||
"permissions": "Oprávnění"
|
||||
}
|
||||
}
|
||||
},
|
||||
"deletion": {
|
||||
"title": "Smazat svůj účet",
|
||||
"text1": "The deletion of your account is permanent and cannot be undone. We will delete all your projects, tasks and everything associated with it.",
|
||||
"text1": "Odstranění vašeho účtu je trvalé a nelze ho vrátit zpět. Vymažeme všechny vaše projekty, úkoly a vše, co je s ním spojeno.",
|
||||
"text2": "Chcete-li pokračovat, zadejte své heslo. Obdržíte e-mail s dalšími pokyny.",
|
||||
"text3": "To proceed, please press the button below. You will receive an email with further instructions.",
|
||||
"text3": "Chcete-li pokračovat, klikněte na tlačítko níže. Obdržíte e-mail s dalšími pokyny.",
|
||||
"confirm": "Smazat můj účet",
|
||||
"requestSuccess": "Požadavek byl úspěšný. Obdržíte e-mail s dalšími pokyny.",
|
||||
"passwordRequired": "Prosím zadejte Vaše heslo.",
|
||||
|
@ -184,13 +185,13 @@
|
|||
"scheduled": "Váš Vikunja účet odstraníme do {date} ({dateSince}).",
|
||||
"scheduledCancel": "Chcete-li zrušit smazání vašeho účtu, klikněte zde.",
|
||||
"scheduledCancelText": "Chcete-li zrušit smazání vašeho účtu, zadejte prosím své heslo níže:",
|
||||
"scheduledCancelButton": "To cancel the deletion of your account, please press the button below:",
|
||||
"scheduledCancelButton": "Chcete-li zrušit odstranění vašeho účtu, klikněte na tlačítko níže:",
|
||||
"scheduledCancelConfirm": "Zrušit smazání mého účtu",
|
||||
"scheduledCancelSuccess": "Váš účet nebude smazán."
|
||||
},
|
||||
"export": {
|
||||
"title": "Exportovat data účtu",
|
||||
"description": "You can request a copy of all your Vikunja data. This includes Projects, Tasks and everything associated to them. You can import this data in any Vikunja instance through the migration function.",
|
||||
"description": "Můžete si vyžádat kopii všech vašich dat Vikunje. To zahrnuje projekty, úkoly a vše, co je s nimi spojeno. Tato data můžete importovat v libovolné instanci Vikunja prostřednictvím migrační funkce.",
|
||||
"descriptionPasswordRequired": "Pokračujte zadáním vašeho hesla:",
|
||||
"request": "Požádat o kopii mých dat",
|
||||
"success": "Úspěšně jste požádali o svá data! Jakmile budou připravena ke stažení, pošleme Vám e-mail.",
|
||||
|
@ -198,182 +199,182 @@
|
|||
}
|
||||
},
|
||||
"project": {
|
||||
"archivedMessage": "This project is archived. It is not possible to create new or edit tasks for it.",
|
||||
"archived": "Archived",
|
||||
"showArchived": "Show Archived",
|
||||
"title": "Project Title",
|
||||
"color": "Color",
|
||||
"projects": "Projects",
|
||||
"parent": "Parent Project",
|
||||
"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.",
|
||||
"archivedMessage": "Tento projekt je archivován. Není možné vytvořit ani upravovat jeho úkoly.",
|
||||
"archived": "Archivováno",
|
||||
"showArchived": "Zobrazit archivované",
|
||||
"title": "Název projektu",
|
||||
"color": "Barva",
|
||||
"projects": "Projekty",
|
||||
"parent": "Nadřazený projekt",
|
||||
"search": "Začni psát pro vyhledání projektu…",
|
||||
"searchSelect": "Klikněte nebo stiskněte Enter pro výběr tohoto projektu",
|
||||
"shared": "Sdílené projekty",
|
||||
"noDescriptionAvailable": "Není k dispozici žádný popis projektu.",
|
||||
"inboxTitle": "Inbox",
|
||||
"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": "Nový projekt",
|
||||
"titlePlaceholder": "Název projektu přijde sem…",
|
||||
"addTitleRequired": "Zadejte název prosím.",
|
||||
"createdSuccess": "Projekt byl úspěšně vytvořen.",
|
||||
"addProjectRequired": "Vyberte projekt nebo nastavte výchozí projekt v nastavení."
|
||||
},
|
||||
"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": "Archivovat \"{project}\"",
|
||||
"archive": "Archivovat tento projekt",
|
||||
"unarchive": "Zrušit archivaci tohoto projektu",
|
||||
"unarchiveText": "Budete moci vytvářet nové úkoly nebo je upravovat.",
|
||||
"archiveText": "Tento projekt nebudete moci upravovat ani v něm vytvářet nové úkoly, dokud jej neodarchivujete.",
|
||||
"success": "Projekt byl úspěšně archivován."
|
||||
},
|
||||
"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": "Nastavit pozadí projektu",
|
||||
"remove": "Odstranit pozadí",
|
||||
"upload": "Vyberte si pozadí ze svého počítače",
|
||||
"searchPlaceholder": "Hledat pozadí…",
|
||||
"poweredByUnsplash": "Běží na Unsplash",
|
||||
"loadMore": "Načíst více fotek",
|
||||
"success": "Pozadí bylo úspěšně nastaveno!",
|
||||
"removeSuccess": "Pozadí bylo úspěšně odebráno!"
|
||||
},
|
||||
"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": "Smazat \"{project}\"",
|
||||
"header": "Odstranit tento projekt",
|
||||
"text1": "Opravdu chcete smazat projekt a všechny jeho úkoly?",
|
||||
"text2": "To zahrnuje všechny úkoly a JE TO NEVRATNÉ!",
|
||||
"success": "Projekt byl úspěšně smazán.",
|
||||
"tasksToDelete": "Neodvolatelně tím odstraníme asi {count} úloh.",
|
||||
"noTasksToDelete": "Tento projekt neobsahuje žádné úkoly, mělo by být bezpečné ho smazat."
|
||||
},
|
||||
"duplicate": {
|
||||
"title": "Duplicate this project",
|
||||
"label": "Duplicate",
|
||||
"text": "Select a parent project which should hold the duplicated project:",
|
||||
"success": "The project was successfully duplicated."
|
||||
"title": "Duplikovat projekt",
|
||||
"label": "Duplikovat",
|
||||
"text": "Vyberte projekt nadřazený duplikovanému projektu:",
|
||||
"success": "Projekt byl úspěšně duplikován."
|
||||
},
|
||||
"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": "Enter a description for this project, hit '/' for more options…",
|
||||
"color": "Color",
|
||||
"success": "The project was successfully updated."
|
||||
"header": "Upravit tento projekt",
|
||||
"title": "Upravit \"{project}\"",
|
||||
"titlePlaceholder": "Název projektu přijde sem…",
|
||||
"identifierTooltip": "Identifikátor projektu může být použit k jedinečné identifikaci úkolu napříč projekty. Můžete jej nastavit jako prázdný pro jeho vypnutí.",
|
||||
"identifier": "Identifikátor projektu",
|
||||
"identifierPlaceholder": "Identifikátor projektu přijde sem…",
|
||||
"description": "Popis",
|
||||
"descriptionPlaceholder": "Zadejte popis tohoto projektu, stiskněte '/' pro další možnosti…",
|
||||
"color": "Barva",
|
||||
"success": "Projekt byl úspěšně aktualizován."
|
||||
},
|
||||
"share": {
|
||||
"header": "Share this project",
|
||||
"title": "Share \"{project}\"",
|
||||
"share": "Share",
|
||||
"header": "Sdílet tento projekt",
|
||||
"title": "Sdílet \"{project}\"",
|
||||
"share": "Sdílet",
|
||||
"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 signing in, 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": "Sdílené odkazy",
|
||||
"what": "Co je to sdílený odkaz?",
|
||||
"explanation": "Sdílené odkazy vám umožní snadno sdílet projekt s ostatními uživateli, kteří nemají účet na Vikunja.",
|
||||
"create": "Vytvořit sdílený odkaz",
|
||||
"name": "Název (volitelné)",
|
||||
"namePlaceholder": "např. Lorem Ipsum",
|
||||
"nameExplanation": "Všechny akce provedené tímto sdíleným odkazem se zobrazí s tímto názvem.",
|
||||
"password": "Heslo (volitelné)",
|
||||
"passwordExplanation": "Při přihlášení bude uživatel muset zadat toto heslo.",
|
||||
"noName": "Není nastaven žádný název",
|
||||
"remove": "Odstranit sdílený odkaz",
|
||||
"removeText": "Jste si jisti, že chcete odstranit tento sdílený odkaz? K tomuto projektu již nebude možné přistupovat s tímto sdíleným odkazem. Tuto akci nelze vrátit zpět!",
|
||||
"createSuccess": "Sdílený odkaz byl úspěšně vytvořen.",
|
||||
"deleteSuccess": "Sdílený odkaz byl úspěšně smazán",
|
||||
"view": "Zobrazit",
|
||||
"sharedBy": "Sdílel(a) {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": "uživatel | uživatelé",
|
||||
"typeTeam": "tým | týmy",
|
||||
"shared": "Sdíleno s těmito {type}",
|
||||
"you": "Ty",
|
||||
"notShared": "Zatím není sdíleno s žádným {type}.",
|
||||
"removeHeader": "Odstranit {type} z {sharable}",
|
||||
"removeText": "Jste si jisti, že chcete odstranit {sharable} z {type}.? Tuto akci nelze vrátit zpět!",
|
||||
"removeSuccess": "{sharable} byl úspěšně odebrán z {type}.",
|
||||
"addedSuccess": "{type} byl úspěšně přidán.",
|
||||
"updatedSuccess": "{type} byl úspěšně přidán."
|
||||
},
|
||||
"right": {
|
||||
"title": "Permission",
|
||||
"read": "Read only",
|
||||
"readWrite": "Read & write",
|
||||
"admin": "Admin"
|
||||
"title": "Oprávnění",
|
||||
"read": "Pouze pro čtení",
|
||||
"readWrite": "Čtení a zápis",
|
||||
"admin": "Administrátor"
|
||||
},
|
||||
"attributes": {
|
||||
"link": "Link",
|
||||
"delete": "Delete"
|
||||
"link": "Odkaz",
|
||||
"delete": "Smazat"
|
||||
}
|
||||
},
|
||||
"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": "Seznam",
|
||||
"add": "Přidat",
|
||||
"addPlaceholder": "Přidat nový úkol…",
|
||||
"empty": "Tento projekt je zatím prázdný.",
|
||||
"newTaskCta": "Vytvořit nový úkol.",
|
||||
"editTask": "Upravit úkol"
|
||||
},
|
||||
"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": "Zobrazit úkoly, které nemají nastavené datum",
|
||||
"size": "Velikost",
|
||||
"default": "Výchozí",
|
||||
"month": "Měsíc",
|
||||
"day": "Den",
|
||||
"hour": "Hodina",
|
||||
"range": "Časové období",
|
||||
"noDates": "Tento úkol nemá nastaveno žádné datum."
|
||||
},
|
||||
"table": {
|
||||
"title": "Table",
|
||||
"columns": "Columns"
|
||||
"title": "Tabulka",
|
||||
"columns": "Sloupce"
|
||||
},
|
||||
"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.",
|
||||
"defaultBucket": "Default bucket",
|
||||
"defaultBucketHint": "When creating tasks without specifying a bucket, they will be added to this bucket.",
|
||||
"defaultBucketSavedSuccess": "The default 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"
|
||||
"noLimit": "Nenastaveno",
|
||||
"doneBucket": "Sloupec \"Hotovo\"",
|
||||
"doneBucketHint": "Všechny úkoly přesunuté do tohoto sloupce budou automaticky označeny jako dokončené.",
|
||||
"doneBucketHintExtended": "Všechny úkoly přesunuté do sloupce \"Hotovo\" budou označeny jako dokončené automaticky. Všechny úkoly označené jako dokončené jinde sem budou přesunuty také.",
|
||||
"doneBucketSavedSuccess": "Sloupec \"Hotovo\" byl úspěšně uložen.",
|
||||
"defaultBucket": "Výchozí sloupec",
|
||||
"defaultBucketHint": "Při vytváření úkolů bez uvedení sloupce, budou přidány do tohoto sloupce.",
|
||||
"defaultBucketSavedSuccess": "Výchozí sloupec byl úspěšně uložen.",
|
||||
"deleteLast": "Nelze odstranit poslední sloupec.",
|
||||
"addTaskPlaceholder": "Zadejte nový název úkolu…",
|
||||
"addTask": "Přidat úkol",
|
||||
"addAnotherTask": "Přidat další úkol",
|
||||
"addBucket": "Vytvořit nový sloupec",
|
||||
"addBucketPlaceholder": "Zadejte název nového sloupce…",
|
||||
"deleteHeaderBucket": "Smazat sloupec",
|
||||
"deleteBucketText1": "Opravdu chcete smazat tento sloupec?",
|
||||
"deleteBucketText2": "Toto nesmaže žádné úkoly, ale přesune je do výchozího sloupce.",
|
||||
"deleteBucketSuccess": "Sloupec byl úspěšně smazán.",
|
||||
"bucketTitleSavedSuccess": "Název sloupce byl úspěšně uložen.",
|
||||
"bucketLimitSavedSuccess": "Limit sloupce byl úspěšně uložen.",
|
||||
"collapse": "Sbalit tento sloupec"
|
||||
},
|
||||
"pseudo": {
|
||||
"favorites": {
|
||||
"title": "Favorites"
|
||||
"title": "Oblíbené"
|
||||
}
|
||||
},
|
||||
"webhooks": {
|
||||
"title": "Webhooks",
|
||||
"targetUrl": "Target URL",
|
||||
"targetUrlInvalid": "Please provide a valid URL.",
|
||||
"events": "Events",
|
||||
"eventsHint": "Select all events this webhook should recieve updates for (within the current project).",
|
||||
"mustSelectEvents": "You must select at least one event.",
|
||||
"delete": "Delete this webhook",
|
||||
"deleteText": "Are you sure you want to delete this webhook? External targets will not be notified of its events anymore.",
|
||||
"deleteSuccess": "The webhook was successfully deleted.",
|
||||
"create": "Create webhook",
|
||||
"secret": "Secret",
|
||||
"secretHint": "If provided, all requests to the webhook target URL will be signed using HMAC.",
|
||||
"secretDocs": "Check out the docs for more details about how to use secrets."
|
||||
"title": "Webhooky",
|
||||
"targetUrl": "Cílová URL",
|
||||
"targetUrlInvalid": "Zadejte prosím platnou URL adresu.",
|
||||
"events": "Události",
|
||||
"eventsHint": "Vyberte všechny události, pro které by tento webhook měl dostávat aktualizace (v rámci aktuálního projektu).",
|
||||
"mustSelectEvents": "Musíte zvolit alespoň jednu událost.",
|
||||
"delete": "Smazat tento webhook",
|
||||
"deleteText": "Opravdu chcete odstranit tento webhook? Externí cíle již nebudou informovány o jeho událostech.",
|
||||
"deleteSuccess": "Webhook byl úspěšně odstraněn.",
|
||||
"create": "Vytvořit webhook",
|
||||
"secret": "Tajný klíč",
|
||||
"secretHint": "Pokud je zadáno, všechny požadavky na cílovou adresu URL webhooku budou podepsány pomocí HMAC.",
|
||||
"secretDocs": "Další podrobnosti o používání tajných klíčů naleznete v dokumentaci."
|
||||
}
|
||||
},
|
||||
"filters": {
|
||||
|
@ -383,7 +384,7 @@
|
|||
"title": "Název",
|
||||
"titlePlaceholder": "Název uloženého filtru přijde sem…",
|
||||
"description": "Popis",
|
||||
"descriptionPlaceholder": "Add a description for this filter here, hit '/' for more options…",
|
||||
"descriptionPlaceholder": "Přidejte popis pro tento filtr, stiskněte '/' pro více možností…",
|
||||
"includeNulls": "Zahrnout úkoly, které nemají nastavenou hodnotu",
|
||||
"requireAll": "Vyžaduje aby všechny filtry odpovídaly, aby se úkol zobrazil",
|
||||
"showDoneTasks": "Zobrazit dokončené úkoly",
|
||||
|
@ -397,9 +398,9 @@
|
|||
},
|
||||
"create": {
|
||||
"title": "Nový uložený filtr",
|
||||
"description": "A saved filter is a virtual project which is computed from a set of filters each time it is accessed.",
|
||||
"description": "Uložený filtr je virtuální projekt, který se počítá ze sady filtrů pokaždé, když je k němu přistupováno.",
|
||||
"action": "Vytvořit uložený filtr",
|
||||
"titleRequired": "Please provide a title for the filter."
|
||||
"titleRequired": "Uveďte název filtru."
|
||||
},
|
||||
"delete": {
|
||||
"header": "Smazat tento uložený filtr",
|
||||
|
@ -412,7 +413,7 @@
|
|||
}
|
||||
},
|
||||
"migrate": {
|
||||
"title": "Import from other services",
|
||||
"title": "Import z jiných služeb",
|
||||
"titleService": "Importujte svá data z {name} do Vikunja",
|
||||
"import": "Importujte svá data do Vikunja",
|
||||
"description": "Chcete-li začít, klikněte na logo jedné ze služeb třetích stran.",
|
||||
|
@ -424,12 +425,14 @@
|
|||
"alreadyMigrated2": "Import je možný, ale mohl by vytvářet duplicity. Jste si jisti?",
|
||||
"confirm": "Jsem si jistý, začněte migrovat!",
|
||||
"importUpload": "Chcete-li importovat data z {name} do Vikunja, klikněte na tlačítko níže pro výběr souboru.",
|
||||
"upload": "Nahrát soubor"
|
||||
"upload": "Nahrát soubor",
|
||||
"migrationStartedWillReciveEmail": "Vikunja nyní importuje vaše seznamy/projekty, úkoly, poznámky, připomenutí a soubory z {service}. Protože to bude chvíli trvat, pošleme vám e-mail až bude hotovo. Toto okno můžete nyní zavřít.",
|
||||
"migrationInProgress": "Probíhá migrace. Počkejte prosím na její dokončení."
|
||||
},
|
||||
"label": {
|
||||
"title": "Štítky",
|
||||
"manage": "Spravovat štítky",
|
||||
"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": "Klikněte na štítek pro jeho úpravu. Můžete upravit všechny štítky, které jste vytvořili, můžete použít všechny štítky, které jsou přiřazeny k úkolu z projektu, do kterého máte přístup.",
|
||||
"newCTA": "Momentálně nemáte žádné štítky.",
|
||||
"search": "Zadejte hledaný štítek…",
|
||||
"create": {
|
||||
|
@ -440,7 +443,7 @@
|
|||
},
|
||||
"edit": {
|
||||
"header": "Upravit štítek",
|
||||
"forbidden": "You are not allowed to edit this label because you don't own it.",
|
||||
"forbidden": "Nemáte oprávnění upravovat tento popisek, protože ho nevlastníte.",
|
||||
"success": "Štítek byl úspěšně aktualizován."
|
||||
},
|
||||
"deleteSuccess": "Štítek byl úspěšně smazán.",
|
||||
|
@ -454,7 +457,7 @@
|
|||
},
|
||||
"sharing": {
|
||||
"authenticating": "Ověřování…",
|
||||
"passwordRequired": "This shared project requires a password. Please enter it below:",
|
||||
"passwordRequired": "Tento sdílený projekt vyžaduje heslo. Zadejte jej níže:",
|
||||
"error": "Došlo k chybě.",
|
||||
"invalidPassword": "Neplatné heslo."
|
||||
},
|
||||
|
@ -495,7 +498,7 @@
|
|||
"custom": "Vlastní",
|
||||
"id": "ID",
|
||||
"created": "Vytvořeno",
|
||||
"createdBy": "Created by {0}",
|
||||
"createdBy": "Vytvořil(a) {0}",
|
||||
"actions": "Akce",
|
||||
"cannotBeUndone": "Toto nelze vrátit!"
|
||||
},
|
||||
|
@ -514,59 +517,59 @@
|
|||
"edit": "Upravit",
|
||||
"done": "Hotovo",
|
||||
"heading1": "Nadpis 1",
|
||||
"heading1Tooltip": "Big section heading.",
|
||||
"heading1Tooltip": "Velké záhlaví.",
|
||||
"heading2": "Nadpis 2",
|
||||
"heading2Tooltip": "Medium section heading.",
|
||||
"heading2Tooltip": "Střední záhlaví.",
|
||||
"heading3": "Nadpis 3",
|
||||
"heading3Tooltip": "Smaller section header.",
|
||||
"heading3Tooltip": "Menší záhlaví.",
|
||||
"headingSmaller": "Menší nadpis",
|
||||
"headingBigger": "Větší nadpis",
|
||||
"bold": "Tučné",
|
||||
"italic": "Skloněné",
|
||||
"strikethrough": "Přeškrtnuté",
|
||||
"underline": "Underline",
|
||||
"underline": "Podtržení",
|
||||
"code": "Kód",
|
||||
"codeTooltip": "Capture a code snippet.",
|
||||
"codeTooltip": "Zachytit úryvek kódu.",
|
||||
"quote": "Citace",
|
||||
"quoteTooltip": "Capture a quote.",
|
||||
"bulletList": "Bullet list",
|
||||
"bulletListTooltip": "Create a simple bullet list.",
|
||||
"unorderedList": "Unordered list",
|
||||
"orderedList": "Ordered list",
|
||||
"orderedListTooltip": "Create a list with numbering.",
|
||||
"quoteTooltip": "Zachyťte citaci.",
|
||||
"bulletList": "Seznam s odrážkami",
|
||||
"bulletListTooltip": "Vytvořit jednoduchý seznam odrážek.",
|
||||
"unorderedList": "Nečíslovaný seznam",
|
||||
"orderedList": "Číslovaný seznam",
|
||||
"orderedListTooltip": "Vytvořit seznam s číslováním.",
|
||||
"cleanBlock": "Čistý blok",
|
||||
"link": "Odkaz",
|
||||
"image": "Obrázek",
|
||||
"imageTooltip": "Upload an image from your computer.",
|
||||
"imageTooltip": "Nahrát obrázek z vašeho počítače.",
|
||||
"table": {
|
||||
"title": "Table",
|
||||
"insert": "Insert table",
|
||||
"addColumnBefore": "Add column before",
|
||||
"addColumnAfter": "Add column after",
|
||||
"deleteColumn": "Delete column",
|
||||
"addRowBefore": "Add row before",
|
||||
"addRowAfter": "Add row after",
|
||||
"deleteRow": "Delete row",
|
||||
"deleteTable": "Delete table",
|
||||
"mergeCells": "Merge cells",
|
||||
"splitCell": "Split cell",
|
||||
"toggleHeaderColumn": "Toggle header column",
|
||||
"toggleHeaderRow": "Toggle header row",
|
||||
"toggleHeaderCell": "Toggle header cell",
|
||||
"mergeOrSplit": "Merge or split",
|
||||
"fixTables": "Fix tables"
|
||||
"title": "Tabulka",
|
||||
"insert": "Vložit tabulku",
|
||||
"addColumnBefore": "Přidat sloupec před",
|
||||
"addColumnAfter": "Přidat sloupec za",
|
||||
"deleteColumn": "Smazat sloupec",
|
||||
"addRowBefore": "Přidat řádek před",
|
||||
"addRowAfter": "Přidat řádek za",
|
||||
"deleteRow": "Smazat řádek",
|
||||
"deleteTable": "Smazat tabulku",
|
||||
"mergeCells": "Sloučit buňky",
|
||||
"splitCell": "Rozdělit buňku",
|
||||
"toggleHeaderColumn": "Přepnout sloupec záhlaví",
|
||||
"toggleHeaderRow": "Přepnout řádek záhlaví",
|
||||
"toggleHeaderCell": "Přepnout hlavičku",
|
||||
"mergeOrSplit": "Sloučit nebo rozdělit",
|
||||
"fixTables": "Opravit tabulky"
|
||||
},
|
||||
"horizontalRule": "Vodorovná čára",
|
||||
"horizontalRuleTooltip": "Divide a section.",
|
||||
"horizontalRuleTooltip": "Rozdělit sekci.",
|
||||
"sideBySide": "Vedle sebe",
|
||||
"guide": "Průvodce",
|
||||
"text": "Text",
|
||||
"textTooltip": "Just start typing with plain text.",
|
||||
"taskList": "Task list",
|
||||
"taskListTooltip": "Track tasks with a to-do list.",
|
||||
"undo": "Undo",
|
||||
"redo": "Redo",
|
||||
"placeholder": "Type some text or hit '/' to see more options…"
|
||||
"textTooltip": "Stačí začít psát prostý text.",
|
||||
"taskList": "Seznam úkolů",
|
||||
"taskListTooltip": "Sledovat úkoly se seznamem úkolů.",
|
||||
"undo": "Vrátit zpět",
|
||||
"redo": "Opakovat akci",
|
||||
"placeholder": "Zadejte nějaký text nebo stiskněte '/' pro zobrazení více možností…"
|
||||
},
|
||||
"multiselect": {
|
||||
"createPlaceholder": "Vytvořit nový",
|
||||
|
@ -596,14 +599,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": "Specify relative dates which are resolved on the fly by Vikunja when applying the filter.",
|
||||
"intro": "Použijte relativní časové údaje, které budou vyřešeny za běhu po aplikování filtru.",
|
||||
"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": "Supported time units",
|
||||
"someExamples": "Examples of time expressions",
|
||||
"supportedUnits": "Podporované časové jednotky",
|
||||
"someExamples": "Příklady časových výrazů",
|
||||
"units": {
|
||||
"seconds": "Sekundy",
|
||||
"minutes": "Minuty",
|
||||
|
@ -632,7 +635,7 @@
|
|||
"addReminder": "Přidat novou připomínku…",
|
||||
"doneSuccess": "Úkol byl úspěšně označen jako dokončený.",
|
||||
"undoneSuccess": "Úkol byl úspěšně znovu otevřen.",
|
||||
"undo": "Undo",
|
||||
"undo": "Vrátit zpět",
|
||||
"openDetail": "Otevřít zobrazení detailu úkolu",
|
||||
"checklistTotal": "{checked} z {total} úkolů",
|
||||
"checklistAllDone": "{total} úkolů",
|
||||
|
@ -649,7 +652,7 @@
|
|||
"chooseDueDate": "Klikněte zde pro nastavení termínu dokončení",
|
||||
"chooseStartDate": "Klikněte zde pro nastavení počátečního data",
|
||||
"chooseEndDate": "Klikněte zde pro nastavení data ukončení",
|
||||
"move": "Move task to a different project",
|
||||
"move": "Přesunout úkol do jiného projektu",
|
||||
"done": "Označit úkol jako hotový!",
|
||||
"undone": "Označit jako znovu otevřené",
|
||||
"created": "Vytvořeno {0} uživatelem {1}",
|
||||
|
@ -657,12 +660,12 @@
|
|||
"doneAt": "Dokončeno {0}",
|
||||
"updateSuccess": "Úkol byl úspěšně uložen.",
|
||||
"deleteSuccess": "Úkol byl úspěšně smazán.",
|
||||
"belongsToProject": "This task belongs to project '{project}'",
|
||||
"belongsToProject": "Tento úkol patří do projektu '{project}'",
|
||||
"due": "Termín {at}",
|
||||
"closePopup": "Zavřít vyskakovací okno",
|
||||
"organization": "Organization",
|
||||
"organization": "Organizace",
|
||||
"management": "Management",
|
||||
"dateAndTime": "Date and time",
|
||||
"dateAndTime": "Datum a čas",
|
||||
"delete": {
|
||||
"header": "Smazat tento úkol",
|
||||
"text1": "Opravdu chcete odstranit tento úkol?",
|
||||
|
@ -680,7 +683,7 @@
|
|||
"percentDone": "Nastavit průběh",
|
||||
"attachments": "Přidat přílohy",
|
||||
"relatedTasks": "Přidat vztah",
|
||||
"moveProject": "Move",
|
||||
"moveProject": "Přesunout",
|
||||
"color": "Nastavit barvu",
|
||||
"delete": "Smazat",
|
||||
"favorite": "Přidat do oblíbených",
|
||||
|
@ -707,15 +710,15 @@
|
|||
"updated": "Aktualizováno"
|
||||
},
|
||||
"subscription": {
|
||||
"subscribedTaskThroughParentProject": "You can't unsubscribe here because you are subscribed to this task through its project.",
|
||||
"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.",
|
||||
"subscribedTaskThroughParentProject": "Zde se nemůžete odhlásit, protože jste přihlášeni k odběru tohoto úkolu prostřednictvím jeho projektu.",
|
||||
"subscribedProject": "Nyní jste přihlášeni k odběru tohoto projektu a budete dostávat oznámení o změnách.",
|
||||
"notSubscribedProject": "Nejste přihlášeni k tomuto projektu a nebudete dostávat oznámení o změnách.",
|
||||
"subscribedTask": "Nyní jste přihlášeni k odběru tohoto úkolu a budete dostávat oznámení o změnách.",
|
||||
"notSubscribedTask": "Nejste přihlášeni k odběru tohoto úkolu, takže nebudete dostávat upozornění na změny.",
|
||||
"subscribe": "Odebírat",
|
||||
"unsubscribe": "Odhlásit odběr",
|
||||
"subscribeSuccessProject": "You are now subscribed to this project",
|
||||
"unsubscribeSuccessProject": "You are now unsubscribed to this project",
|
||||
"subscribeSuccessProject": "Nyní jste přihlášeni k odběru tohoto projektu",
|
||||
"unsubscribeSuccessProject": "Nyní jste odhlášeni od odběru tohoto projektu",
|
||||
"subscribeSuccessTask": "Nyní jste přihlášeni k tomuto úkolu",
|
||||
"unsubscribeSuccessTask": "Nyní jste odhlášeni od tohoto úkolu"
|
||||
},
|
||||
|
@ -740,7 +743,7 @@
|
|||
"loading": "Načítám komentáře…",
|
||||
"edited": "upraveno {date}",
|
||||
"creating": "Vytvářím komentář…",
|
||||
"placeholder": "Add your comment, hit '/' for more options…",
|
||||
"placeholder": "Přidejte svůj komentář, stiskněte '/' pro více možností…",
|
||||
"comment": "Komentář",
|
||||
"delete": "Smazat tento komentář",
|
||||
"deleteText1": "Opravdu chcete smazat tento komentář?",
|
||||
|
@ -754,7 +757,7 @@
|
|||
"1week": "1 týden"
|
||||
},
|
||||
"description": {
|
||||
"placeholder": "Enter a description, hit '/' for more options…",
|
||||
"placeholder": "Zadejte popis, stiskněte '/' pro více možností…",
|
||||
"empty": "Ještě není k dispozici žádný popis."
|
||||
},
|
||||
"assignee": {
|
||||
|
@ -789,7 +792,7 @@
|
|||
"new": "Nový vztah k úkolu",
|
||||
"searchPlaceholder": "Hledejte nový úkol, který chcete přidat jako související…",
|
||||
"createPlaceholder": "Přidat toto jako nový související úkol",
|
||||
"differentProject": "This task belongs to a different project.",
|
||||
"differentProject": "Tento úkol patří do jiného projektu.",
|
||||
"noneYet": "Zatím žádné vztahy mezi úkoly.",
|
||||
"delete": "Odstranit vztah k úloze",
|
||||
"deleteText1": "Jste si jisti, že chcete odstranit tento vztah úkolu?",
|
||||
|
@ -810,20 +813,20 @@
|
|||
}
|
||||
},
|
||||
"reminder": {
|
||||
"before": "{amount} {unit} before {type}",
|
||||
"after": "{amount} {unit} after {type}",
|
||||
"beforeShort": "before",
|
||||
"afterShort": "after",
|
||||
"onDueDate": "On the due date",
|
||||
"onStartDate": "On the start date",
|
||||
"onEndDate": "On the end date",
|
||||
"custom": "Custom",
|
||||
"dateAndTime": "Date and time"
|
||||
"before": "{amount} {unit} před {type}",
|
||||
"after": "{amount} {unit} po {type}",
|
||||
"beforeShort": "před",
|
||||
"afterShort": "po",
|
||||
"onDueDate": "V termínu",
|
||||
"onStartDate": "V den zahájení",
|
||||
"onEndDate": "V den ukončení",
|
||||
"custom": "Vlastní",
|
||||
"dateAndTime": "Datum a čas"
|
||||
},
|
||||
"repeat": {
|
||||
"everyDay": "Každý den",
|
||||
"everyWeek": "Každý týden",
|
||||
"every30d": "Every 30 Days",
|
||||
"every30d": "Každých 30 dní",
|
||||
"mode": "Režim opakování",
|
||||
"monthly": "Měsíčně",
|
||||
"fromCurrentDate": "Od aktuálního data",
|
||||
|
@ -837,7 +840,7 @@
|
|||
"invalidAmount": "Zadejte prosím více než 0."
|
||||
},
|
||||
"quickAddMagic": {
|
||||
"hint": "Use magic prefixes to define due dates, assignees and other task properties.",
|
||||
"hint": "Používejte magické prefixy pro definování termínů, přiřazených osob a dalších vlastností úkolů.",
|
||||
"title": "Kouzelné rychlé přidání",
|
||||
"intro": "Při vytváření úkolu můžete použít speciální klíčová slova pro přímé přidání atributů k nově vytvořenému úkolu. To umožňuje přidat běžně používané atributy k úkolům mnohem rychleji.",
|
||||
"multiple": "Toto můžete použít několikrát.",
|
||||
|
@ -848,10 +851,10 @@
|
|||
"priority1": "Chcete-li nastavit prioritu úkolu, přidejte číslo 1-5, s prefixem {prefix}.",
|
||||
"priority2": "Čím vyšší číslo, tím vyšší priorita.",
|
||||
"assignees": "Chcete-li přímo přiřadit úkol k uživateli, přidejte k úkolu jejich uživatelské jméno s prefixem {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": "Chcete-li nastavit projekt pro zobrazený úkol, zadejte jeho název s předponou {prefix}.",
|
||||
"project2": "Toto vrátí chybu, pokud projekt neexistuje.",
|
||||
"project3": "Chcete-li použít mezery, stačí přidat \" nebo ' kolem názvu projektu.",
|
||||
"project4": "Například: {prefix}\"Projekt s mezerami\".",
|
||||
"dateAndTime": "Datum a čas",
|
||||
"date": "Jakékoliv datum bude použito jako datum dokončení nového úkolu. Můžete použít data v kterémkoli z těchto formátů:",
|
||||
"dateWeekday": "každý pracovní den použije další datum s tímto datem",
|
||||
|
@ -884,19 +887,19 @@
|
|||
"delete": {
|
||||
"header": "Smazat tým",
|
||||
"text1": "Jste si jisti, že chcete smazat tento tým a všechny jeho členy?",
|
||||
"text2": "All team members will lose access to projects shared with this team. This CANNOT BE UNDONE!",
|
||||
"text2": "Všichni členové týmu ztratí přístup k projektům sdíleným s tímto týmem. NELZE TO VZÍT ZPĚT!",
|
||||
"success": "Tým byl úspěšně smazán."
|
||||
},
|
||||
"deleteUser": {
|
||||
"header": "Odebrat uživatele z týmu",
|
||||
"text1": "Opravdu chcete odebrat tohoto uživatele z týmu?",
|
||||
"text2": "They will lose access to all projects this team has access to. This CANNOT BE UNDONE!",
|
||||
"text2": "Ztratí přístup ke všem projektům, k nimž má tento tým přístup. NELZE VZÍT ZPĚT!",
|
||||
"success": "Uživatel byl úspěšně odstraněn z týmu."
|
||||
},
|
||||
"leave": {
|
||||
"title": "Opustit tým",
|
||||
"text1": "Opravdu chcete opustit tento tým?",
|
||||
"text2": "You will lose access to all projects this team has access to. If you change your mind you'll need a team admin to add you again.",
|
||||
"text2": "Ztratíte přístup ke všem projektům, k nimž má tento tým přístup. Pokud změníte názor, budete potřebovat správce týmu, aby vás znovu přidal.",
|
||||
"success": "Úspěšně jste opustili tým."
|
||||
}
|
||||
},
|
||||
|
@ -905,7 +908,7 @@
|
|||
"namePlaceholder": "Název týmu přijde sem…",
|
||||
"nameRequired": "Zadejte název.",
|
||||
"description": "Popis",
|
||||
"descriptionPlaceholder": "Describe the team here, hit '/' for more options…",
|
||||
"descriptionPlaceholder": "Popište tým, stiskněte '/' pro více možností…",
|
||||
"admin": "Administrátor",
|
||||
"member": "Člen"
|
||||
}
|
||||
|
@ -928,20 +931,20 @@
|
|||
"attachment": "Přidat přílohu k tomuto úkolu",
|
||||
"related": "Upravit související úkoly tohoto úkolu",
|
||||
"color": "Změnit barvu tohoto úkolu",
|
||||
"move": "Move this task to another project",
|
||||
"move": "Přesunout tento úkol do jiného projektu",
|
||||
"reminder": "Spravovat připomenutí této úlohy",
|
||||
"description": "Přepnout úpravy popisu úkolu",
|
||||
"delete": "Delete this task",
|
||||
"priority": "Change the priority of this task",
|
||||
"favorite": "Mark this task as favorite / unfavorite",
|
||||
"save": "Save the current task"
|
||||
"delete": "Smazat tento úkol",
|
||||
"priority": "Změnit prioritu tohoto úkolu",
|
||||
"favorite": "Označit tuto úlohu jako oblíbenou / odebrat oblíbené",
|
||||
"save": "Uložit aktuální úkol"
|
||||
},
|
||||
"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": "Zobrazení projektu",
|
||||
"switchToListView": "Přepnout na zobrazení seznamu",
|
||||
"switchToGanttView": "Přepnout na zobrazení gantt",
|
||||
"switchToKanbanView": "Přepnout na zobrazení kanbanu",
|
||||
"switchToTableView": "Přepnout na zobrazení tabulky"
|
||||
},
|
||||
"navigation": {
|
||||
"title": "Navigace",
|
||||
|
@ -949,11 +952,11 @@
|
|||
"upcoming": "Přejít na nadcházející úkoly",
|
||||
"labels": "Přejít na štítky",
|
||||
"teams": "Přejít na týmy",
|
||||
"projects": "Navigate to projects"
|
||||
"projects": "Přejít na projekty"
|
||||
}
|
||||
},
|
||||
"update": {
|
||||
"available": "There is an update available!",
|
||||
"available": "K dispozici je aktualizace!",
|
||||
"do": "Aktualizovat nyní"
|
||||
},
|
||||
"menu": {
|
||||
|
@ -964,15 +967,15 @@
|
|||
"unarchive": "Zrušit archivaci",
|
||||
"setBackground": "Nastavit pozadí",
|
||||
"share": "Sdílet",
|
||||
"newProject": "New project",
|
||||
"createProject": "Create project"
|
||||
"newProject": "Nový projekt",
|
||||
"createProject": "Vytvořit projekt"
|
||||
},
|
||||
"apiConfig": {
|
||||
"url": "Vikunja URL",
|
||||
"urlPlaceholder": "např. https://localhost:3456",
|
||||
"change": "změnit",
|
||||
"use": "Používá se instalace Vikunja v {0}",
|
||||
"error": "Could not find or use Vikunja installation at \"{domain}\". Please check if the url has the correct format and you can reach it when accessing it directly and try again.",
|
||||
"error": "Nelze najít nebo použít instalaci Vikunja na \"{domain}\". Zkontrolujte, zda má URL správný formát a můžete se k ní připojit při přímém přístupu a zkuste to znovu.",
|
||||
"success": "Pomocí instalace Vikunja na \"{domain}\".",
|
||||
"urlRequired": "Je vyžadována adresa URL."
|
||||
},
|
||||
|
@ -984,26 +987,26 @@
|
|||
"notification": {
|
||||
"title": "Oznámení",
|
||||
"none": "Nemáte žádná oznámení. Mějte příjemný den!",
|
||||
"explainer": "Notifications will appear here when actions projects or tasks you subscribed to happen.",
|
||||
"markAllRead": "Mark all notifications as read",
|
||||
"markAllReadSuccess": "Successfully marked all notifications as read."
|
||||
"explainer": "Upozornění se zobrazí zde, když proběhne akce na projektech nebo úkolech, ke kterým jste se přihlásili.",
|
||||
"markAllRead": "Označit všechna oznámení za přečtená",
|
||||
"markAllReadSuccess": "Všechna oznámení byla označena jako přečtená."
|
||||
},
|
||||
"quickActions": {
|
||||
"commands": "Příkazy",
|
||||
"placeholder": "Napište příkaz nebo vyhledávání…",
|
||||
"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": "Můžete použít {project} k omezení vyhledávání na projekt. Kombinujte {project} nebo {label} (štítky) s vyhledávacím dotazem pro hledání úkolu s těmito štítky nebo na tomto projektu. Použijte {assignee} pouze pro hledání týmů.",
|
||||
"tasks": "Úkoly",
|
||||
"projects": "Projects",
|
||||
"projects": "Projekty",
|
||||
"teams": "Týmy",
|
||||
"labels": "Labels",
|
||||
"newProject": "Enter the title of the new project…",
|
||||
"labels": "Štítky",
|
||||
"newProject": "Zadejte název nového projektu…",
|
||||
"newTask": "Zadejte název nového úkolu…",
|
||||
"newTeam": "Zadejte název nového týmu…",
|
||||
"createTask": "Create a task in the current project ({title})",
|
||||
"createProject": "Create a project",
|
||||
"createTask": "Vytvořit úkol v aktuálním projektu ({title})",
|
||||
"createProject": "Vytvořit projekt",
|
||||
"cmds": {
|
||||
"newTask": "Nový úkol",
|
||||
"newProject": "New project",
|
||||
"newProject": "Nový projekt",
|
||||
"newTeam": "Nový tým"
|
||||
}
|
||||
},
|
||||
|
@ -1034,15 +1037,15 @@
|
|||
"1018": "Nastavení typu avatara uživatele je neplatné.",
|
||||
"2001": "ID nemůže být prázdné nebo 0.",
|
||||
"2002": "Některé údaje požadavku byly neplatné.",
|
||||
"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": "Projekt neexistuje.",
|
||||
"3004": "Pro provedení této akce musíte mít oprávnění ke čtení k tomuto projektu.",
|
||||
"3005": "Název projektu nemůže být prázdný.",
|
||||
"3006": "Sdílení projektu neexistuje.",
|
||||
"3007": "Projekt s tímto identifikátorem již existuje.",
|
||||
"3008": "Projekt je archivován, a proto je přístupný pouze pro čtení. To platí i pro všechny úkoly spojené s tímto projektem.",
|
||||
"4001": "Text úkolu projektu nemůže být prázdný.",
|
||||
"4002": "Úkol projektu neexistuje.",
|
||||
"4003": "Všechny úkoly pro hromadnou úpravu musí patřit do stejného projektu.",
|
||||
"4004": "Při hromadných úpravách úkolů je potřeba alespoň jeden úkol.",
|
||||
"4005": "Nemáte právo vidět tento úkol.",
|
||||
"4006": "Nadřazený úkol nelze nastavit jako takový.",
|
||||
|
@ -1061,21 +1064,21 @@
|
|||
"4019": "Neplatná hodnota filtru úkolů.",
|
||||
"6001": "Název týmu nemůže být prázdný.",
|
||||
"6002": "Tým neexistuje.",
|
||||
"6004": "The team already has access to that project.",
|
||||
"6004": "Tým již má k tomuto projektu přístup.",
|
||||
"6005": "Uživatel je již členem tohoto týmu.",
|
||||
"6006": "Nelze odstranit posledního člena týmu.",
|
||||
"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": "Tým nemá přístup k seznamu pro provedení této akce.",
|
||||
"7002": "Uživatel již má přístup k tomuto projektu.",
|
||||
"7003": "K tomuto projektu nemáte přístup.",
|
||||
"8001": "Tento štítek již v tomto úkolu existuje.",
|
||||
"8002": "Štítek neexistuje.",
|
||||
"8003": "K tomuto štítku nemáte přístup.",
|
||||
"9001": "Právo je neplatné.",
|
||||
"10001": "Sloupec neexistuje.",
|
||||
"10002": "The bucket does not belong to that project.",
|
||||
"10003": "You cannot remove the last bucket on a project.",
|
||||
"10002": "Sloupec nepatří do tohoto projektu.",
|
||||
"10003": "Poslední sloupec v projektu nelze odstranit.",
|
||||
"10004": "Nemůžete přidat úkol do tohoto sloupce, protože již překročil limit úkolů, které do něj můžete uložit.",
|
||||
"10005": "There can be only one done bucket per project.",
|
||||
"10005": "V projektu může být pouze jeden sloupec \"Hotovo\".",
|
||||
"11001": "Uložený filtr neexistuje.",
|
||||
"11002": "Uložené filtry nejsou k dispozici pro sdílení odkazů.",
|
||||
"12001": "Typ předplatného je neplatný.",
|
||||
|
@ -1090,13 +1093,13 @@
|
|||
},
|
||||
"time": {
|
||||
"units": {
|
||||
"seconds": "second|seconds",
|
||||
"minutes": "minute|minutes",
|
||||
"hours": "hour|hours",
|
||||
"days": "day|days",
|
||||
"weeks": "week|weeks",
|
||||
"months": "month|months",
|
||||
"years": "year|years"
|
||||
"seconds": "sekunda|sekund",
|
||||
"minutes": "minuta|minut",
|
||||
"hours": "hodina|hodin",
|
||||
"days": "den|dny",
|
||||
"weeks": "týden|týdny",
|
||||
"months": "měsíc|měsíce",
|
||||
"years": "rok|roky"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -6,6 +6,7 @@
|
|||
"welcomeEvening": "Godaften {username}!",
|
||||
"lastViewed": "Sidst vist",
|
||||
"addToHomeScreen": "Add this app to your home screen for faster access and improved experience.",
|
||||
"goToOverview": "Go to overview",
|
||||
"project": {
|
||||
"importText": "Import your projects and tasks from other services into Vikunja:",
|
||||
"import": "Import your data into Vikunja"
|
||||
|
@ -424,7 +425,9 @@
|
|||
"alreadyMigrated2": "Du kan godt importere igen, men kan der kan opstå dubletter. Er du sikker?",
|
||||
"confirm": "Jeg er sikker, start migreringen nu!",
|
||||
"importUpload": "For at importere data fra {name} til Vikunja, skal du klikke på knappen nedenfor for at vælge en fil.",
|
||||
"upload": "Upload fil"
|
||||
"upload": "Upload fil",
|
||||
"migrationStartedWillReciveEmail": "Vikunja will now import your lists/projects, tasks, notes, reminders and files from {service}. As this will take a while, we will send you an email once done. You can close this window now.",
|
||||
"migrationInProgress": "A migration is currently in progress. Please wait until it is done."
|
||||
},
|
||||
"label": {
|
||||
"title": "Etiketter",
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
"welcomeEvening": "Guten Abend, {username}!",
|
||||
"lastViewed": "Zuletzt angesehen",
|
||||
"addToHomeScreen": "Füge diese App deinem Startbildschirm hinzu, um schneller darauf zuzugreifen und das Erlebnis zu verbessern.",
|
||||
"goToOverview": "Zur Übersicht",
|
||||
"project": {
|
||||
"importText": "Importiere deine Projekte und Aufgaben aus anderen Diensten in Vikunja:",
|
||||
"import": "Importiere deine Daten in Vikunja"
|
||||
|
@ -424,7 +425,9 @@
|
|||
"alreadyMigrated2": "Ein erneutes Importieren ist möglich, kann aber Duplikate erzeugen. Bist du sicher?",
|
||||
"confirm": "Ich bin sicher, bitte starte mit der Migration!",
|
||||
"importUpload": "Um Daten von {name} in Vikunja zu importieren, klicke auf die Schaltfläche unten, um eine Datei auszuwählen.",
|
||||
"upload": "Datei hochladen"
|
||||
"upload": "Datei hochladen",
|
||||
"migrationStartedWillReciveEmail": "Vikunja wird nun deine Listen/Projekte, Aufgaben, Notizen, Erinnerungen und Dateien von {service} importieren. Da dies eine Weile dauern wird, senden wir dir eine E-Mail, sobald der Import abgeschlossen ist. Du kannst dieses Fenster jetzt schließen.",
|
||||
"migrationInProgress": "Ein Import wird gerade durchgeführt. Bitte warte, bis dieser abgeschlossen ist."
|
||||
},
|
||||
"label": {
|
||||
"title": "Labels",
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
"welcomeEvening": "Guten Abend, {username}!",
|
||||
"lastViewed": "Zletscht ahglueget",
|
||||
"addToHomeScreen": "Füge diese App deinem Startbildschirm hinzu, um schneller darauf zuzugreifen und das Erlebnis zu verbessern.",
|
||||
"goToOverview": "Zur Übersicht",
|
||||
"project": {
|
||||
"importText": "Importiere deine Projekte und Aufgaben aus anderen Diensten in Vikunja:",
|
||||
"import": "Importiere deine Daten in Vikunja"
|
||||
|
@ -424,7 +425,9 @@
|
|||
"alreadyMigrated2": "Es erneuts Importiere isch scho mögli, aber chenti Duplikaat erstelle. Bisch der sicher?",
|
||||
"confirm": "Ich bin sicher, fang mit de Migration ah!",
|
||||
"importUpload": "Um Daten von {name} in Vikunja zu importieren, klicke auf die Schaltfläche unten, um eine Datei auszuwählen.",
|
||||
"upload": "Datei hochladen"
|
||||
"upload": "Datei hochladen",
|
||||
"migrationStartedWillReciveEmail": "Vikunja wird nun deine Listen/Projekte, Aufgaben, Notizen, Erinnerungen und Dateien von {service} importieren. Da dies eine Weile dauern wird, senden wir dir eine E-Mail, sobald der Import abgeschlossen ist. Du kannst dieses Fenster jetzt schließen.",
|
||||
"migrationInProgress": "Ein Import wird gerade durchgeführt. Bitte warte, bis dieser abgeschlossen ist."
|
||||
},
|
||||
"label": {
|
||||
"title": "Labels",
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
"welcomeEvening": "Good Evening {username}!",
|
||||
"lastViewed": "Last viewed",
|
||||
"addToHomeScreen": "Add this app to your home screen for faster access and improved experience.",
|
||||
"goToOverview": "Go to overview",
|
||||
"project": {
|
||||
"importText": "Import your projects and tasks from other services into Vikunja:",
|
||||
"import": "Import your data into Vikunja"
|
||||
|
@ -424,7 +425,9 @@
|
|||
"alreadyMigrated2": "Importing again is possible, but might create duplicates. Are you sure?",
|
||||
"confirm": "I am sure, please start migrating now!",
|
||||
"importUpload": "To import data from {name} into Vikunja, click the button below to select a file.",
|
||||
"upload": "Upload file"
|
||||
"upload": "Upload file",
|
||||
"migrationStartedWillReciveEmail": "Vikunja will now import your lists/projects, tasks, notes, reminders and files from {service}. As this will take a while, we will send you an email once done. You can close this window now.",
|
||||
"migrationInProgress": "A migration is currently in progress. Please wait until it is done."
|
||||
},
|
||||
"label": {
|
||||
"title": "Labels",
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
"welcomeEvening": "Good Evening {username}!",
|
||||
"lastViewed": "Last viewed",
|
||||
"addToHomeScreen": "Add this app to your home screen for faster access and improved experience.",
|
||||
"goToOverview": "Go to overview",
|
||||
"project": {
|
||||
"importText": "Import your projects and tasks from other services into Vikunja:",
|
||||
"import": "Import your data into Vikunja"
|
||||
|
@ -424,7 +425,9 @@
|
|||
"alreadyMigrated2": "Importing again is possible, but might create duplicates. Are you sure?",
|
||||
"confirm": "I am sure, please start migrating now!",
|
||||
"importUpload": "To import data from {name} into Vikunja, click the button below to select a file.",
|
||||
"upload": "Upload file"
|
||||
"upload": "Upload file",
|
||||
"migrationStartedWillReciveEmail": "Vikunja will now import your lists/projects, tasks, notes, reminders and files from {service}. As this will take a while, we will send you an email once done. You can close this window now.",
|
||||
"migrationInProgress": "A migration is currently in progress. Please wait until it is done."
|
||||
},
|
||||
"label": {
|
||||
"title": "Labels",
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
"welcomeEvening": "¡Buenas Tardes {username}!",
|
||||
"lastViewed": "Visto por última vez",
|
||||
"addToHomeScreen": "Añade esta aplicación a tu pantalla de inicio para un acceso más rápido y una experiencia mejorada.",
|
||||
"goToOverview": "Go to overview",
|
||||
"project": {
|
||||
"importText": "Importa tus proyectos y tareas de otros servicios a Vikunja:",
|
||||
"import": "Importa tus datos a Vikunja"
|
||||
|
@ -424,7 +425,9 @@
|
|||
"alreadyMigrated2": "Importar de nuevo es posible, pero puede crear duplicados. ¿Estás seguro?",
|
||||
"confirm": "Estoy seguro, ¡por favor empieza a migrar ahora!",
|
||||
"importUpload": "Para importar datos de {name} a Vikunja, haz clic en el botón de abajo para seleccionar un archivo.",
|
||||
"upload": "Subir archivo"
|
||||
"upload": "Subir archivo",
|
||||
"migrationStartedWillReciveEmail": "Vikunja will now import your lists/projects, tasks, notes, reminders and files from {service}. As this will take a while, we will send you an email once done. You can close this window now.",
|
||||
"migrationInProgress": "A migration is currently in progress. Please wait until it is done."
|
||||
},
|
||||
"label": {
|
||||
"title": "Etiquetas",
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
"welcomeEvening": "Bonsoir {username} !",
|
||||
"lastViewed": "Dernière consultation",
|
||||
"addToHomeScreen": "Ajoutez cette application à votre écran d'accueil pour un accès plus rapide et une meilleure expérience.",
|
||||
"goToOverview": "Go to overview",
|
||||
"project": {
|
||||
"importText": "Importer vos projets et tâches d’autres services dans Vikunja :",
|
||||
"import": "Importer vos données dans Vikunja"
|
||||
|
@ -424,7 +425,9 @@
|
|||
"alreadyMigrated2": "Importer à nouveau est possible mais peut créer des doublons. Es-tu sûr·e ?",
|
||||
"confirm": "Je suis sûr·e, commencer à migrer maintenant !",
|
||||
"importUpload": "Pour importer les données de {name} dans Vikunja, cliquez sur le bouton ci-dessous pour sélectionner un fichier.",
|
||||
"upload": "Téléverser le fichier"
|
||||
"upload": "Téléverser le fichier",
|
||||
"migrationStartedWillReciveEmail": "Vikunja will now import your lists/projects, tasks, notes, reminders and files from {service}. As this will take a while, we will send you an email once done. You can close this window now.",
|
||||
"migrationInProgress": "A migration is currently in progress. Please wait until it is done."
|
||||
},
|
||||
"label": {
|
||||
"title": "Étiquettes",
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
"welcomeEvening": "Jó estét {username}!",
|
||||
"lastViewed": "Utoljára megtekintve",
|
||||
"addToHomeScreen": "Adja hozzá ezt az alkalmazást a kezdőképernyőhöz a gyorsabb hozzáférés és a jobb élmény érdekében.",
|
||||
"goToOverview": "Go to overview",
|
||||
"project": {
|
||||
"importText": "Importálja projektjeit és feladatait más szolgáltatásokból a Vikunjába:",
|
||||
"import": "Importálja adatait a Vikunjába"
|
||||
|
@ -424,7 +425,9 @@
|
|||
"alreadyMigrated2": "Az újbóli importálás lehetséges, de előfordulhat, hogy ismétlődések keletkeznek. Biztos ebben?",
|
||||
"confirm": "Biztos vagyok benne, kezdje el a migrációt most!",
|
||||
"importUpload": "Ha adatokat szeretne importálni a(z) {name} webhelyről a Vikunjába, kattintson az alábbi gombra a fájl kiválasztásához.",
|
||||
"upload": "Fájl feltöltése"
|
||||
"upload": "Fájl feltöltése",
|
||||
"migrationStartedWillReciveEmail": "Vikunja will now import your lists/projects, tasks, notes, reminders and files from {service}. As this will take a while, we will send you an email once done. You can close this window now.",
|
||||
"migrationInProgress": "A migration is currently in progress. Please wait until it is done."
|
||||
},
|
||||
"label": {
|
||||
"title": "Címkék",
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
"welcomeEvening": "Buonasera {username}!",
|
||||
"lastViewed": "Ultima visualizzazione",
|
||||
"addToHomeScreen": "Aggiungi questa app alla tua schermata iniziale per un accesso più veloce e un'esperienza migliore.",
|
||||
"goToOverview": "Go to overview",
|
||||
"project": {
|
||||
"importText": "Import your projects and tasks from other services into Vikunja:",
|
||||
"import": "Importa i tuoi dati in Vikunja"
|
||||
|
@ -424,7 +425,9 @@
|
|||
"alreadyMigrated2": "Importare di nuovo è possibile, ma potrebbe creare duplicati. Sei sicuro?",
|
||||
"confirm": "Sono sicuro, per favore inizia adesso la migrazione!",
|
||||
"importUpload": "Per importare i dati da {name} in Vikunja, fai clic sul pulsante qui sotto per selezionare un file.",
|
||||
"upload": "Carica file"
|
||||
"upload": "Carica file",
|
||||
"migrationStartedWillReciveEmail": "Vikunja will now import your lists/projects, tasks, notes, reminders and files from {service}. As this will take a while, we will send you an email once done. You can close this window now.",
|
||||
"migrationInProgress": "A migration is currently in progress. Please wait until it is done."
|
||||
},
|
||||
"label": {
|
||||
"title": "Etichette",
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
"welcomeEvening": "こんばんは、{username}さん",
|
||||
"lastViewed": "最近の表示",
|
||||
"addToHomeScreen": "Add this app to your home screen for faster access and improved experience.",
|
||||
"goToOverview": "Go to overview",
|
||||
"project": {
|
||||
"importText": "他のサービスからVikunjaにプロジェクトやタスクをインポートします:",
|
||||
"import": "Vikunjaへのデータのインポート"
|
||||
|
@ -424,7 +425,9 @@
|
|||
"alreadyMigrated2": "再びインポートすることも可能ですが、重複する可能性があります。インポートして本当によろしいですか?",
|
||||
"confirm": "了解!インポート開始なのだ!",
|
||||
"importUpload": "{name}からVikunjaにデータをインポートするには、以下のボタンをクリックしてファイルを選択してください。",
|
||||
"upload": "ファイルのアップロード"
|
||||
"upload": "ファイルのアップロード",
|
||||
"migrationStartedWillReciveEmail": "Vikunja will now import your lists/projects, tasks, notes, reminders and files from {service}. As this will take a while, we will send you an email once done. You can close this window now.",
|
||||
"migrationInProgress": "A migration is currently in progress. Please wait until it is done."
|
||||
},
|
||||
"label": {
|
||||
"title": "ラベル",
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
"welcomeEvening": " 오늘 하루는 어땠나요? {username} 님!",
|
||||
"lastViewed": "최근에 본 것",
|
||||
"addToHomeScreen": "더 빠른 액세스와 향상된 경험을 위해 이 앱을 홈 화면에 추가하세요.",
|
||||
"goToOverview": "Go to overview",
|
||||
"project": {
|
||||
"importText": "다른 서비스의 프로젝트 및 작업을 Vikunja로 가져옵니다.",
|
||||
"import": "데이터를 Vikunja로 가져오기"
|
||||
|
@ -424,7 +425,9 @@
|
|||
"alreadyMigrated2": "Importing again is possible, but might create duplicates. Are you sure?",
|
||||
"confirm": "I am sure, please start migrating now!",
|
||||
"importUpload": "To import data from {name} into Vikunja, click the button below to select a file.",
|
||||
"upload": "Upload file"
|
||||
"upload": "Upload file",
|
||||
"migrationStartedWillReciveEmail": "Vikunja will now import your lists/projects, tasks, notes, reminders and files from {service}. As this will take a while, we will send you an email once done. You can close this window now.",
|
||||
"migrationInProgress": "A migration is currently in progress. Please wait until it is done."
|
||||
},
|
||||
"label": {
|
||||
"title": "Labels",
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
"welcomeEvening": "Good Evening {username}!",
|
||||
"lastViewed": "Laatst bekeken",
|
||||
"addToHomeScreen": "Add this app to your home screen for faster access and improved experience.",
|
||||
"goToOverview": "Go to overview",
|
||||
"project": {
|
||||
"importText": "Import your projects and tasks from other services into Vikunja:",
|
||||
"import": "Import your data into Vikunja"
|
||||
|
@ -424,7 +425,9 @@
|
|||
"alreadyMigrated2": "Importing again is possible, but might create duplicates. Are you sure?",
|
||||
"confirm": "Ik weet het zeker, begin nu met migreren!",
|
||||
"importUpload": "To import data from {name} into Vikunja, click the button below to select a file.",
|
||||
"upload": "Bestand uploaden"
|
||||
"upload": "Bestand uploaden",
|
||||
"migrationStartedWillReciveEmail": "Vikunja will now import your lists/projects, tasks, notes, reminders and files from {service}. As this will take a while, we will send you an email once done. You can close this window now.",
|
||||
"migrationInProgress": "A migration is currently in progress. Please wait until it is done."
|
||||
},
|
||||
"label": {
|
||||
"title": "Labels",
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
"welcomeEvening": "God Morgen {username}!",
|
||||
"lastViewed": "Sist sett",
|
||||
"addToHomeScreen": "Add this app to your home screen for faster access and improved experience.",
|
||||
"goToOverview": "Go to overview",
|
||||
"project": {
|
||||
"importText": "Import your projects and tasks from other services into Vikunja:",
|
||||
"import": "Importer dine data til Vikunja"
|
||||
|
@ -424,7 +425,9 @@
|
|||
"alreadyMigrated2": "Importering på nytt er mulig, men kan skape duplikater. Er du sikker?",
|
||||
"confirm": "Jeg er sikker, vennligst begynn å migrere nå!",
|
||||
"importUpload": "For å importere data fra {name} til Vikunja, klikk på knappen nedenfor for å velge en fil.",
|
||||
"upload": "Last opp fil"
|
||||
"upload": "Last opp fil",
|
||||
"migrationStartedWillReciveEmail": "Vikunja will now import your lists/projects, tasks, notes, reminders and files from {service}. As this will take a while, we will send you an email once done. You can close this window now.",
|
||||
"migrationInProgress": "A migration is currently in progress. Please wait until it is done."
|
||||
},
|
||||
"label": {
|
||||
"title": "Etiketter",
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -6,6 +6,7 @@
|
|||
"welcomeEvening": "Boa noite, {username}!",
|
||||
"lastViewed": "Visto por último",
|
||||
"addToHomeScreen": "Add this app to your home screen for faster access and improved experience.",
|
||||
"goToOverview": "Go to overview",
|
||||
"project": {
|
||||
"importText": "Import your projects and tasks from other services into Vikunja:",
|
||||
"import": "Import your data into Vikunja"
|
||||
|
@ -424,7 +425,9 @@
|
|||
"alreadyMigrated2": "Importing again is possible, but might create duplicates. Are you sure?",
|
||||
"confirm": "Tenho certeza, comece a migrar agora, por favor!",
|
||||
"importUpload": "To import data from {name} into Vikunja, click the button below to select a file.",
|
||||
"upload": "Enviar arquivo"
|
||||
"upload": "Enviar arquivo",
|
||||
"migrationStartedWillReciveEmail": "Vikunja will now import your lists/projects, tasks, notes, reminders and files from {service}. As this will take a while, we will send you an email once done. You can close this window now.",
|
||||
"migrationInProgress": "A migration is currently in progress. Please wait until it is done."
|
||||
},
|
||||
"label": {
|
||||
"title": "Etiquetas",
|
||||
|
|
|
@ -6,15 +6,16 @@
|
|||
"welcomeEvening": "Boa Tarde {username}!",
|
||||
"lastViewed": "Visto recentemente",
|
||||
"addToHomeScreen": "Adiciona esta aplicação ao ecrã inicial para um acesso mais rápido e uma melhor experiência.",
|
||||
"goToOverview": "Ir para a vista geral",
|
||||
"project": {
|
||||
"importText": "Importa os teus projetos e tarefas de outros serviços para o Vikunja:",
|
||||
"import": "Importar os teus dados para o Vikunja"
|
||||
}
|
||||
},
|
||||
"demo": {
|
||||
"title": "This instance is in demo mode. Do not use this for real data!",
|
||||
"everythingWillBeDeleted": "Everything will be deleted in regular intervals!",
|
||||
"accountWillBeDeleted": "Your account will be deleted, including all projects, tasks and attachments you might create."
|
||||
"title": "Esta instância está em modo de demonstração. Não a utilizes para dados reais!",
|
||||
"everythingWillBeDeleted": "Tudo aqui serão eliminados em intervalos regulares!",
|
||||
"accountWillBeDeleted": "A tua conta será eliminada, incluindo todos os projetos, tarefas e anexos que poderás ter criado."
|
||||
},
|
||||
"404": {
|
||||
"title": "Não encontrado",
|
||||
|
@ -146,29 +147,29 @@
|
|||
}
|
||||
},
|
||||
"apiTokens": {
|
||||
"title": "API Tokens",
|
||||
"general": "API tokens allow you to use Vikunja's API without user credentials.",
|
||||
"apiDocs": "Check out the api docs",
|
||||
"createAToken": "Create a token",
|
||||
"createToken": "Create token",
|
||||
"30d": "30 Days",
|
||||
"60d": "60 Days",
|
||||
"90d": "90 Days",
|
||||
"permissionExplanation": "Permissions allow you to scope what an api token is allowed to do.",
|
||||
"titleRequired": "The title is required",
|
||||
"expired": "This token has expired {ago}.",
|
||||
"tokenCreatedSuccess": "Here is your new api token: {token}",
|
||||
"tokenCreatedNotSeeAgain": "Store it in a secure location, you won't see it again!",
|
||||
"title": "Tokens de API",
|
||||
"general": "Tokens de API permitem que utilize a API do Vikunja sem as credenciais de utilizador.",
|
||||
"apiDocs": "Verifica a documentação da API",
|
||||
"createAToken": "Criar um token",
|
||||
"createToken": "Criar token",
|
||||
"30d": "30 Dias",
|
||||
"60d": "60 Dias",
|
||||
"90d": "90 Dias",
|
||||
"permissionExplanation": "As permissões permitem-te definir o âmbito para o qual o token de API pode ser utilizado.",
|
||||
"titleRequired": "O título é requerido",
|
||||
"expired": "Este token expirou {ago}.",
|
||||
"tokenCreatedSuccess": "Aqui está o teu novo token de API: {token}",
|
||||
"tokenCreatedNotSeeAgain": "Guarda-o num local seguro, não o vais poder visualizar novamente!",
|
||||
"delete": {
|
||||
"header": "Delete this token",
|
||||
"text1": "Are you sure you want to delete the token \"{token}\"?",
|
||||
"text2": "This will revoke access to all applications or integrations using it. You cannot undo this."
|
||||
"header": "Eliminar este token",
|
||||
"text1": "Tens a certeza que pretendes eliminar o token \"{token}\"?",
|
||||
"text2": "Isto vai revogar o acesso a todos os aplicativos ou integrações que o utilizam. Não é possível anular esta ação."
|
||||
},
|
||||
"attributes": {
|
||||
"title": "Title",
|
||||
"titlePlaceholder": "Enter a title you will recognize later",
|
||||
"expiresAt": "Expires at",
|
||||
"permissions": "Permissions"
|
||||
"title": "Título",
|
||||
"titlePlaceholder": "Insere um título que reconhecerás mais tarde",
|
||||
"expiresAt": "Expira a",
|
||||
"permissions": "Permissões"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -176,7 +177,7 @@
|
|||
"title": "Eliminar a tua conta Vikunja",
|
||||
"text1": "A eliminação da tua conta é permanente e não pode ser revertida. Vão ser eliminados todos os teus 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.",
|
||||
"text3": "To proceed, please press the button below. You will receive an email with further instructions.",
|
||||
"text3": "Para prosseguir, pressiona o botão abaixo. Vais receber 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.",
|
||||
"passwordRequired": "Por favor, insere a tua palavra-passe.",
|
||||
|
@ -184,7 +185,7 @@
|
|||
"scheduled": "Vamos eliminar a tua conta no Vikunja em {date} ({dateSince}).",
|
||||
"scheduledCancel": "Para cancelar a eliminação da tua conta, clica aqui.",
|
||||
"scheduledCancelText": "Para cancelares a eliminação da tua conta, introduz a tua palavra-passe abaixo:",
|
||||
"scheduledCancelButton": "To cancel the deletion of your account, please press the button below:",
|
||||
"scheduledCancelButton": "Para cancelares a eliminação da tua conta, pressiona o botão abaixo:",
|
||||
"scheduledCancelConfirm": "Cancelar a eliminação da minha conta",
|
||||
"scheduledCancelSuccess": "Não vamos apagar a tua conta."
|
||||
},
|
||||
|
@ -258,7 +259,7 @@
|
|||
"identifier": "Identificador do Projeto",
|
||||
"identifierPlaceholder": "O identificador do porjeto será aqui…",
|
||||
"description": "Descrição",
|
||||
"descriptionPlaceholder": "Enter a description for this project, hit '/' for more options…",
|
||||
"descriptionPlaceholder": "Insere uma descrição para este projeto, pressiona '/' para mais opções…",
|
||||
"color": "Cor",
|
||||
"success": "O projeto foi atualizado com sucesso."
|
||||
},
|
||||
|
@ -338,9 +339,9 @@
|
|||
"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.",
|
||||
"defaultBucket": "Default bucket",
|
||||
"defaultBucketHint": "When creating tasks without specifying a bucket, they will be added to this bucket.",
|
||||
"defaultBucketSavedSuccess": "The default bucket has been saved successfully.",
|
||||
"defaultBucket": "Conjunto padrão",
|
||||
"defaultBucketHint": "Quando criares tarefas sem especificar um conjunto, elas serão adicionadas a este conjunto.",
|
||||
"defaultBucketSavedSuccess": "O conjunto padrão foi salvo com sucesso.",
|
||||
"deleteLast": "Não podes remover o ultimo conjunto.",
|
||||
"addTaskPlaceholder": "Introduz o título da nova tarefa…",
|
||||
"addTask": "Adicionar uma tarefa",
|
||||
|
@ -362,18 +363,18 @@
|
|||
},
|
||||
"webhooks": {
|
||||
"title": "Webhooks",
|
||||
"targetUrl": "Target URL",
|
||||
"targetUrlInvalid": "Please provide a valid URL.",
|
||||
"events": "Events",
|
||||
"eventsHint": "Select all events this webhook should recieve updates for (within the current project).",
|
||||
"mustSelectEvents": "You must select at least one event.",
|
||||
"delete": "Delete this webhook",
|
||||
"deleteText": "Are you sure you want to delete this webhook? External targets will not be notified of its events anymore.",
|
||||
"deleteSuccess": "The webhook was successfully deleted.",
|
||||
"create": "Create webhook",
|
||||
"secret": "Secret",
|
||||
"secretHint": "If provided, all requests to the webhook target URL will be signed using HMAC.",
|
||||
"secretDocs": "Check out the docs for more details about how to use secrets."
|
||||
"targetUrl": "URL de destino",
|
||||
"targetUrlInvalid": "Por favor, fornece um URL válido.",
|
||||
"events": "Eventos",
|
||||
"eventsHint": "Selecionar todos os eventos para os quais este webhook deve receber atualizações (no projeto atual).",
|
||||
"mustSelectEvents": "Tens de selecionar pelo menos um evento.",
|
||||
"delete": "Eliminar este webhook",
|
||||
"deleteText": "Tens a certeza de que pretendes eliminar este webhook? Os alvos externos deixarão de ser notificados dos seus eventos.",
|
||||
"deleteSuccess": "O webhook foi eliminada com sucesso.",
|
||||
"create": "Criar webhook",
|
||||
"secret": "Segredo",
|
||||
"secretHint": "Se fornecido, todos os pedidos para o URL de destino do webhook serão assinados utilizando HMAC.",
|
||||
"secretDocs": "Verifica a documentação para mais detalhes sobre como utilizar segredos."
|
||||
}
|
||||
},
|
||||
"filters": {
|
||||
|
@ -383,7 +384,7 @@
|
|||
"title": "Título",
|
||||
"titlePlaceholder": "O título do filtro memorizado será aqui…",
|
||||
"description": "Descrição",
|
||||
"descriptionPlaceholder": "Add a description for this filter here, hit '/' for more options…",
|
||||
"descriptionPlaceholder": "Insere aqui uma descrição para este filtro, pressiona '/' para mais opções…",
|
||||
"includeNulls": "Incluir Tarefas que não têm um valor definido",
|
||||
"requireAll": "Requerer que todos os filtros sejam verdadeiros para que uma tarefa apareça",
|
||||
"showDoneTasks": "Mostrar Tarefas Concluídas",
|
||||
|
@ -424,7 +425,9 @@
|
|||
"alreadyMigrated2": "É possível importar novamente, mas pode criar duplicados. Tens a certeza?",
|
||||
"confirm": "Tenho a certeza, por favor comece a migração agora!",
|
||||
"importUpload": "Para importares dados de {name} para o Vikunja, clica no botão abaixo para selecionar um ficheiro.",
|
||||
"upload": "Carregar ficheiro"
|
||||
"upload": "Carregar ficheiro",
|
||||
"migrationStartedWillReciveEmail": "O Vikunja irá agora importar as tuas listas/projetos, tarefas, lembretes e ficheiros a partir de {service}. Como isso vai demorar algum tempo, vamos enviar-te um e-mail após a importação estar concluída. Podes agora fechar esta janela.",
|
||||
"migrationInProgress": "Uma migração está atualmente em curso. Por favor, aguarda até ela estar concluída."
|
||||
},
|
||||
"label": {
|
||||
"title": "Etiquetas",
|
||||
|
@ -495,7 +498,7 @@
|
|||
"custom": "Personalizado",
|
||||
"id": "ID",
|
||||
"created": "Criado em",
|
||||
"createdBy": "Created by {0}",
|
||||
"createdBy": "Criado por {0}",
|
||||
"actions": "Ações",
|
||||
"cannotBeUndone": "Isto não pode ser revertido!"
|
||||
},
|
||||
|
@ -514,59 +517,59 @@
|
|||
"edit": "Editar",
|
||||
"done": "Concluído",
|
||||
"heading1": "Cabeçalho 1",
|
||||
"heading1Tooltip": "Big section heading.",
|
||||
"heading1Tooltip": "Título de secção grande.",
|
||||
"heading2": "Cabeçalho 2",
|
||||
"heading2Tooltip": "Medium section heading.",
|
||||
"heading2Tooltip": "Título de secção médio.",
|
||||
"heading3": "Cabeçalho 3",
|
||||
"heading3Tooltip": "Smaller section header.",
|
||||
"heading3Tooltip": "Título de secção pequeno.",
|
||||
"headingSmaller": "Título Menor",
|
||||
"headingBigger": "Título Maior",
|
||||
"bold": "Negrito",
|
||||
"italic": "Itálico",
|
||||
"strikethrough": "Rasurado",
|
||||
"underline": "Underline",
|
||||
"underline": "Sublinhar",
|
||||
"code": "Código",
|
||||
"codeTooltip": "Capture a code snippet.",
|
||||
"codeTooltip": "Capture um trecho de código.",
|
||||
"quote": "Citação",
|
||||
"quoteTooltip": "Capture a quote.",
|
||||
"bulletList": "Bullet list",
|
||||
"bulletListTooltip": "Create a simple bullet list.",
|
||||
"unorderedList": "Unordered list",
|
||||
"orderedList": "Ordered list",
|
||||
"orderedListTooltip": "Create a list with numbering.",
|
||||
"quoteTooltip": "Capture uma citação.",
|
||||
"bulletList": "Lista de tópicos",
|
||||
"bulletListTooltip": "Criar uma lista simples de tópicos.",
|
||||
"unorderedList": "Lista não ordenada",
|
||||
"orderedList": "Lista ordenada",
|
||||
"orderedListTooltip": "Cria uma lista com numeração.",
|
||||
"cleanBlock": "Limpar Formatação",
|
||||
"link": "Link",
|
||||
"image": "Imagem",
|
||||
"imageTooltip": "Upload an image from your computer.",
|
||||
"imageTooltip": "Carregar uma imagem do teu computador.",
|
||||
"table": {
|
||||
"title": "Table",
|
||||
"insert": "Insert table",
|
||||
"addColumnBefore": "Add column before",
|
||||
"addColumnAfter": "Add column after",
|
||||
"deleteColumn": "Delete column",
|
||||
"addRowBefore": "Add row before",
|
||||
"addRowAfter": "Add row after",
|
||||
"deleteRow": "Delete row",
|
||||
"deleteTable": "Delete table",
|
||||
"mergeCells": "Merge cells",
|
||||
"splitCell": "Split cell",
|
||||
"toggleHeaderColumn": "Toggle header column",
|
||||
"toggleHeaderRow": "Toggle header row",
|
||||
"toggleHeaderCell": "Toggle header cell",
|
||||
"mergeOrSplit": "Merge or split",
|
||||
"fixTables": "Fix tables"
|
||||
"title": "Tabela",
|
||||
"insert": "Inserir tabela",
|
||||
"addColumnBefore": "Adicionar coluna antes",
|
||||
"addColumnAfter": "Adicionar coluna depois",
|
||||
"deleteColumn": "Eliminar coluna",
|
||||
"addRowBefore": "Adicionar linha antes",
|
||||
"addRowAfter": "Adicionar linha depois",
|
||||
"deleteRow": "Eliminar linha",
|
||||
"deleteTable": "Eliminar tabela",
|
||||
"mergeCells": "Unir células",
|
||||
"splitCell": "Dividir célula",
|
||||
"toggleHeaderColumn": "Alternar coluna de cabeçalho",
|
||||
"toggleHeaderRow": "Alternar linha de cabeçalho",
|
||||
"toggleHeaderCell": "Alternar célula de cabeçalho",
|
||||
"mergeOrSplit": "Unir ou dividir",
|
||||
"fixTables": "Corrigir tabelas"
|
||||
},
|
||||
"horizontalRule": "Linha Horizontal",
|
||||
"horizontalRuleTooltip": "Divide a section.",
|
||||
"horizontalRuleTooltip": "Dividir uma secção.",
|
||||
"sideBySide": "Lado-a-lado",
|
||||
"guide": "Guia",
|
||||
"text": "Text",
|
||||
"textTooltip": "Just start typing with plain text.",
|
||||
"taskList": "Task list",
|
||||
"taskListTooltip": "Track tasks with a to-do list.",
|
||||
"undo": "Undo",
|
||||
"redo": "Redo",
|
||||
"placeholder": "Type some text or hit '/' to see more options…"
|
||||
"text": "Texto",
|
||||
"textTooltip": "É só começares a escrever texto sem formatação.",
|
||||
"taskList": "Lista de tarefas",
|
||||
"taskListTooltip": "Rastrear tarefas com uma lista a fazer.",
|
||||
"undo": "Desfazer",
|
||||
"redo": "Refazer",
|
||||
"placeholder": "Insere algum texto ou pressiona '/' para ver mais opções…"
|
||||
},
|
||||
"multiselect": {
|
||||
"createPlaceholder": "Criar novo",
|
||||
|
@ -660,9 +663,9 @@
|
|||
"belongsToProject": "Esta tarefa pertence ao projeto '{project}'",
|
||||
"due": "Vence {at}",
|
||||
"closePopup": "Fechar janela",
|
||||
"organization": "Organization",
|
||||
"management": "Management",
|
||||
"dateAndTime": "Date and time",
|
||||
"organization": "Organização",
|
||||
"management": "Gestão",
|
||||
"dateAndTime": "Data e hora",
|
||||
"delete": {
|
||||
"header": "Eliminar esta tarefa",
|
||||
"text1": "Tens a certeza que pretendes eliminar esta tarefa?",
|
||||
|
@ -740,7 +743,7 @@
|
|||
"loading": "A carregar comentários…",
|
||||
"edited": "editado em {date}",
|
||||
"creating": "A criar comentário…",
|
||||
"placeholder": "Add your comment, hit '/' for more options…",
|
||||
"placeholder": "Adicione o teu comentário, pressiona '/' para mais opções…",
|
||||
"comment": "Comentário",
|
||||
"delete": "Eliminar este comentário",
|
||||
"deleteText1": "Tens a certeza que pretendes eliminar este comentário?",
|
||||
|
@ -754,7 +757,7 @@
|
|||
"1week": "1 semana"
|
||||
},
|
||||
"description": {
|
||||
"placeholder": "Enter a description, hit '/' for more options…",
|
||||
"placeholder": "Insere uma descrição, pressiona '/' para mais opções…",
|
||||
"empty": "Nenhuma descrição ainda disponível."
|
||||
},
|
||||
"assignee": {
|
||||
|
@ -823,7 +826,7 @@
|
|||
"repeat": {
|
||||
"everyDay": "Todos os Dias",
|
||||
"everyWeek": "Todas as Semanas",
|
||||
"every30d": "Every 30 Days",
|
||||
"every30d": "A cada 30 Dias",
|
||||
"mode": "Modo de repetição",
|
||||
"monthly": "Mensal",
|
||||
"fromCurrentDate": "Da Data Atual",
|
||||
|
@ -905,7 +908,7 @@
|
|||
"namePlaceholder": "O nome da equipa será aqui…",
|
||||
"nameRequired": "Por favor, específica um nome.",
|
||||
"description": "Descrição",
|
||||
"descriptionPlaceholder": "Describe the team here, hit '/' for more options…",
|
||||
"descriptionPlaceholder": "Descreve aqui a equipa, pressiona '/' para mais opções…",
|
||||
"admin": "Administrador",
|
||||
"member": "Membro"
|
||||
}
|
||||
|
@ -934,7 +937,7 @@
|
|||
"delete": "Eliminar esta tarefa",
|
||||
"priority": "Alterar a prioridade desta tarefa",
|
||||
"favorite": "Marcar / Desmarcar esta tarefa como favorita",
|
||||
"save": "Save the current task"
|
||||
"save": "Salvar a tarefa atual"
|
||||
},
|
||||
"project": {
|
||||
"title": "Vista do Projeto",
|
||||
|
@ -972,7 +975,7 @@
|
|||
"urlPlaceholder": "ex.: https://localhost:3456",
|
||||
"change": "alterar",
|
||||
"use": "A utilizar a instalação do Vikunja em {0}",
|
||||
"error": "Could not find or use Vikunja installation at \"{domain}\". Please check if the url has the correct format and you can reach it when accessing it directly and try again.",
|
||||
"error": "Não foi possível encontrar ou utilizar a instalação Vikunja em \"{domain}\". Por favor, verifica se o url tem o formato correto e se consegues aceder-lhe diretamente e tenta novamente.",
|
||||
"success": "A utilizar a instalação do Vikunja em \"{domain}\".",
|
||||
"urlRequired": "É necessário um url."
|
||||
},
|
||||
|
@ -985,8 +988,8 @@
|
|||
"title": "Notificações",
|
||||
"none": "Não tens nenhuma notificação. Tem um bom dia!",
|
||||
"explainer": "As notificações aparecerão aqui quando ocorrem ações em projetos ou tarefas às quais estejas subscrito.",
|
||||
"markAllRead": "Mark all notifications as read",
|
||||
"markAllReadSuccess": "Successfully marked all notifications as read."
|
||||
"markAllRead": "Marcar todas as notificações como lidas",
|
||||
"markAllReadSuccess": "Todas as notificações foram marcadas como lidas."
|
||||
},
|
||||
"quickActions": {
|
||||
"commands": "Comandos",
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
"welcomeEvening": "Good Evening {username}!",
|
||||
"lastViewed": "Last viewed",
|
||||
"addToHomeScreen": "Add this app to your home screen for faster access and improved experience.",
|
||||
"goToOverview": "Go to overview",
|
||||
"project": {
|
||||
"importText": "Import your projects and tasks from other services into Vikunja:",
|
||||
"import": "Import your data into Vikunja"
|
||||
|
@ -424,7 +425,9 @@
|
|||
"alreadyMigrated2": "Importing again is possible, but might create duplicates. Are you sure?",
|
||||
"confirm": "I am sure, please start migrating now!",
|
||||
"importUpload": "To import data from {name} into Vikunja, click the button below to select a file.",
|
||||
"upload": "Upload file"
|
||||
"upload": "Upload file",
|
||||
"migrationStartedWillReciveEmail": "Vikunja will now import your lists/projects, tasks, notes, reminders and files from {service}. As this will take a while, we will send you an email once done. You can close this window now.",
|
||||
"migrationInProgress": "A migration is currently in progress. Please wait until it is done."
|
||||
},
|
||||
"label": {
|
||||
"title": "Labels",
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
"welcomeEvening": "Добрый вечер, {username}!",
|
||||
"lastViewed": "Последние просмотренные",
|
||||
"addToHomeScreen": "Add this app to your home screen for faster access and improved experience.",
|
||||
"goToOverview": "Go to overview",
|
||||
"project": {
|
||||
"importText": "Импортировать проекты и задачи из других сервисов в Vikunja:",
|
||||
"import": "Импорт данных в Vikunja"
|
||||
|
@ -424,7 +425,9 @@
|
|||
"alreadyMigrated2": "Повторный импорт возможен, но могут возникнуть дубликаты. Продолжить?",
|
||||
"confirm": "Я уверен, давай начнём миграцию!",
|
||||
"importUpload": "Чтобы импортировать данные из {name} в Vikunja, нажмите кнопку ниже для выбора файла.",
|
||||
"upload": "Загрузить файл"
|
||||
"upload": "Загрузить файл",
|
||||
"migrationStartedWillReciveEmail": "Vikunja will now import your lists/projects, tasks, notes, reminders and files from {service}. As this will take a while, we will send you an email once done. You can close this window now.",
|
||||
"migrationInProgress": "A migration is currently in progress. Please wait until it is done."
|
||||
},
|
||||
"label": {
|
||||
"title": "Метки",
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
"welcomeEvening": "Good Evening {username}!",
|
||||
"lastViewed": "Last viewed",
|
||||
"addToHomeScreen": "Add this app to your home screen for faster access and improved experience.",
|
||||
"goToOverview": "Go to overview",
|
||||
"project": {
|
||||
"importText": "Import your projects and tasks from other services into Vikunja:",
|
||||
"import": "Import your data into Vikunja"
|
||||
|
@ -424,7 +425,9 @@
|
|||
"alreadyMigrated2": "Importing again is possible, but might create duplicates. Are you sure?",
|
||||
"confirm": "I am sure, please start migrating now!",
|
||||
"importUpload": "To import data from {name} into Vikunja, click the button below to select a file.",
|
||||
"upload": "Upload file"
|
||||
"upload": "Upload file",
|
||||
"migrationStartedWillReciveEmail": "Vikunja will now import your lists/projects, tasks, notes, reminders and files from {service}. As this will take a while, we will send you an email once done. You can close this window now.",
|
||||
"migrationInProgress": "A migration is currently in progress. Please wait until it is done."
|
||||
},
|
||||
"label": {
|
||||
"title": "Labels",
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
"welcomeEvening": "Good Evening {username}!",
|
||||
"lastViewed": "Last viewed",
|
||||
"addToHomeScreen": "Add this app to your home screen for faster access and improved experience.",
|
||||
"goToOverview": "Go to overview",
|
||||
"project": {
|
||||
"importText": "Import your projects and tasks from other services into Vikunja:",
|
||||
"import": "Import your data into Vikunja"
|
||||
|
@ -424,7 +425,9 @@
|
|||
"alreadyMigrated2": "Importing again is possible, but might create duplicates. Are you sure?",
|
||||
"confirm": "I am sure, please start migrating now!",
|
||||
"importUpload": "To import data from {name} into Vikunja, click the button below to select a file.",
|
||||
"upload": "Upload file"
|
||||
"upload": "Upload file",
|
||||
"migrationStartedWillReciveEmail": "Vikunja will now import your lists/projects, tasks, notes, reminders and files from {service}. As this will take a while, we will send you an email once done. You can close this window now.",
|
||||
"migrationInProgress": "A migration is currently in progress. Please wait until it is done."
|
||||
},
|
||||
"label": {
|
||||
"title": "Labels",
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
"welcomeEvening": "Godkväll {username}!",
|
||||
"lastViewed": "Last viewed",
|
||||
"addToHomeScreen": "Add this app to your home screen for faster access and improved experience.",
|
||||
"goToOverview": "Go to overview",
|
||||
"project": {
|
||||
"importText": "Import your projects and tasks from other services into Vikunja:",
|
||||
"import": "Importera din data till Vikunja"
|
||||
|
@ -424,7 +425,9 @@
|
|||
"alreadyMigrated2": "Importing again is possible, but might create duplicates. Are you sure?",
|
||||
"confirm": "I am sure, please start migrating now!",
|
||||
"importUpload": "To import data from {name} into Vikunja, click the button below to select a file.",
|
||||
"upload": "Ladda upp fil"
|
||||
"upload": "Ladda upp fil",
|
||||
"migrationStartedWillReciveEmail": "Vikunja will now import your lists/projects, tasks, notes, reminders and files from {service}. As this will take a while, we will send you an email once done. You can close this window now.",
|
||||
"migrationInProgress": "A migration is currently in progress. Please wait until it is done."
|
||||
},
|
||||
"label": {
|
||||
"title": "Etiketter",
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
"welcomeEvening": "Good Evening {username}!",
|
||||
"lastViewed": "Last viewed",
|
||||
"addToHomeScreen": "Add this app to your home screen for faster access and improved experience.",
|
||||
"goToOverview": "Go to overview",
|
||||
"project": {
|
||||
"importText": "Import your projects and tasks from other services into Vikunja:",
|
||||
"import": "Import your data into Vikunja"
|
||||
|
@ -424,7 +425,9 @@
|
|||
"alreadyMigrated2": "Importing again is possible, but might create duplicates. Are you sure?",
|
||||
"confirm": "I am sure, please start migrating now!",
|
||||
"importUpload": "To import data from {name} into Vikunja, click the button below to select a file.",
|
||||
"upload": "Upload file"
|
||||
"upload": "Upload file",
|
||||
"migrationStartedWillReciveEmail": "Vikunja will now import your lists/projects, tasks, notes, reminders and files from {service}. As this will take a while, we will send you an email once done. You can close this window now.",
|
||||
"migrationInProgress": "A migration is currently in progress. Please wait until it is done."
|
||||
},
|
||||
"label": {
|
||||
"title": "Labels",
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
"welcomeEvening": "Good Evening {username}!",
|
||||
"lastViewed": "Xem gần đây",
|
||||
"addToHomeScreen": "Add this app to your home screen for faster access and improved experience.",
|
||||
"goToOverview": "Go to overview",
|
||||
"project": {
|
||||
"importText": "Import your projects and tasks from other services into Vikunja:",
|
||||
"import": "Import your data into Vikunja"
|
||||
|
@ -424,7 +425,9 @@
|
|||
"alreadyMigrated2": "Nhập lại được luôn, nhưng có thể tạo ra các trùng lặp đấy. Bạn chắc chưa?",
|
||||
"confirm": "Tôi chắc như đinh, hãy bắt đầu di chuyển thôi!",
|
||||
"importUpload": "Để nhập dữ liệu từ {name} vào Vikunja, hãy nhấp vào nút bên dưới để chọn tệp.",
|
||||
"upload": "Tải tệp lên"
|
||||
"upload": "Tải tệp lên",
|
||||
"migrationStartedWillReciveEmail": "Vikunja will now import your lists/projects, tasks, notes, reminders and files from {service}. As this will take a while, we will send you an email once done. You can close this window now.",
|
||||
"migrationInProgress": "A migration is currently in progress. Please wait until it is done."
|
||||
},
|
||||
"label": {
|
||||
"title": "Nhãn",
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
"welcomeEvening": "中午好,{username}!",
|
||||
"lastViewed": "最近查看",
|
||||
"addToHomeScreen": "Add this app to your home screen for faster access and improved experience.",
|
||||
"goToOverview": "Go to overview",
|
||||
"project": {
|
||||
"importText": "Import your projects and tasks from other services into Vikunja:",
|
||||
"import": "Import your data into Vikunja"
|
||||
|
@ -424,7 +425,9 @@
|
|||
"alreadyMigrated2": "可以再次导入,但这可能会造成数据重复。您确定吗?",
|
||||
"confirm": "我确定, 请立即开始迁移!",
|
||||
"importUpload": "请点击下面的按钮选择一个文件,将 {name} 的数据导入到 Vikunja",
|
||||
"upload": "点击上传文件"
|
||||
"upload": "点击上传文件",
|
||||
"migrationStartedWillReciveEmail": "Vikunja will now import your lists/projects, tasks, notes, reminders and files from {service}. As this will take a while, we will send you an email once done. You can close this window now.",
|
||||
"migrationInProgress": "A migration is currently in progress. Please wait until it is done."
|
||||
},
|
||||
"label": {
|
||||
"title": "标签",
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
"welcomeEvening": "Good Evening {username}!",
|
||||
"lastViewed": "Last viewed",
|
||||
"addToHomeScreen": "Add this app to your home screen for faster access and improved experience.",
|
||||
"goToOverview": "Go to overview",
|
||||
"project": {
|
||||
"importText": "Import your projects and tasks from other services into Vikunja:",
|
||||
"import": "Import your data into Vikunja"
|
||||
|
@ -424,7 +425,9 @@
|
|||
"alreadyMigrated2": "Importing again is possible, but might create duplicates. Are you sure?",
|
||||
"confirm": "I am sure, please start migrating now!",
|
||||
"importUpload": "To import data from {name} into Vikunja, click the button below to select a file.",
|
||||
"upload": "Upload file"
|
||||
"upload": "Upload file",
|
||||
"migrationStartedWillReciveEmail": "Vikunja will now import your lists/projects, tasks, notes, reminders and files from {service}. As this will take a while, we will send you an email once done. You can close this window now.",
|
||||
"migrationInProgress": "A migration is currently in progress. Please wait until it is done."
|
||||
},
|
||||
"label": {
|
||||
"title": "Labels",
|
||||
|
|
|
@ -37,7 +37,11 @@ const MigrationHandlerComponent = () => import('@/views/migrate/MigrationHandler
|
|||
const ProjectList = () => import('@/views/project/ProjectList.vue')
|
||||
const ProjectGantt = () => import('@/views/project/ProjectGantt.vue')
|
||||
const ProjectTable = () => import('@/views/project/ProjectTable.vue')
|
||||
const ProjectKanban = () => import('@/views/project/ProjectKanban.vue')
|
||||
// If we load the component async, using it as a backdrop view will not work. Instead, everything explodes
|
||||
// with an error from the core saying "Cannot read properties of undefined (reading 'parentNode')"
|
||||
// Of course, with no clear indicator of where the problem comes from.
|
||||
// const ProjectKanban = () => import('@/views/project/ProjectKanban.vue')
|
||||
import ProjectKanban from '@/views/project/ProjectKanban.vue'
|
||||
const ProjectInfo = () => import('@/views/project/ProjectInfo.vue')
|
||||
|
||||
// Project Settings
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
<h1>{{ $t('migrate.titleService', {name: migrator.name}) }}</h1>
|
||||
<p>{{ $t('migrate.descriptionDo') }}</p>
|
||||
|
||||
<template v-if="message === '' && lastMigrationDate === null">
|
||||
<template v-if="message === '' && lastMigrationFinishedAt === null">
|
||||
<template v-if="isMigrating === false">
|
||||
<template v-if="migrator.isFileMigrator">
|
||||
<p>{{ $t('migrate.importUpload', {name: migrator.name}) }}</p>
|
||||
|
@ -46,21 +46,35 @@
|
|||
<p>{{ $t('migrate.inProgress') }}</p>
|
||||
</div>
|
||||
</template>
|
||||
<div v-else-if="lastMigrationDate">
|
||||
<div v-else-if="lastMigrationStartedAt && lastMigrationFinishedAt === null">
|
||||
<p>
|
||||
{{ $t('migrate.alreadyMigrated1', {name: migrator.name, date: formatDateLong(lastMigrationDate)}) }}<br/>
|
||||
{{ $t('migrate.migrationInProgress') }}
|
||||
</p>
|
||||
<x-button :to="{name: 'home'}">{{ $t('home.goToOverview') }}</x-button>
|
||||
</div>
|
||||
<div v-else-if="lastMigrationFinishedAt">
|
||||
<p>
|
||||
{{
|
||||
$t('migrate.alreadyMigrated1', {name: migrator.name, date: formatDateLong(lastMigrationFinishedAt)})
|
||||
}}<br/>
|
||||
{{ $t('migrate.alreadyMigrated2') }}
|
||||
</p>
|
||||
<div class="buttons">
|
||||
<x-button @click="migrate">{{ $t('migrate.confirm') }}</x-button>
|
||||
<x-button :to="{name: 'home'}" variant="tertiary" class="has-text-danger">{{ $t('misc.cancel') }}</x-button>
|
||||
<x-button :to="{name: 'home'}" variant="tertiary" class="has-text-danger">
|
||||
{{ $t('misc.cancel') }}
|
||||
</x-button>
|
||||
</div>
|
||||
</div>
|
||||
<div v-else>
|
||||
<Message class="mb-4">
|
||||
<Message class="mb-4" v-if="migrator.isFileMigrator">
|
||||
{{ message }}
|
||||
</Message>
|
||||
<x-button :to="{name: 'home'}">{{ $t('misc.refresh') }}</x-button>
|
||||
<Message class="mb-4" v-else>
|
||||
{{ $t('migrate.migrationStartedWillReciveEmail', {service: migrator.name}) }}
|
||||
</Message>
|
||||
|
||||
<x-button :to="{name: 'home'}">{{ $t('home.goToOverview') }}</x-button>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
@ -82,13 +96,13 @@ import {useI18n} from 'vue-i18n'
|
|||
import Logo from '@/assets/logo.svg?component'
|
||||
import Message from '@/components/misc/message.vue'
|
||||
|
||||
import AbstractMigrationService, { type MigrationConfig } from '@/services/migrator/abstractMigration'
|
||||
import AbstractMigrationService, {type MigrationConfig} from '@/services/migrator/abstractMigration'
|
||||
import AbstractMigrationFileService from '@/services/migrator/abstractMigrationFile'
|
||||
|
||||
import {formatDateLong} from '@/helpers/time/formatDate'
|
||||
import {parseDateOrNull} from '@/helpers/parseDateOrNull'
|
||||
|
||||
import {MIGRATORS} from './migrators'
|
||||
import {MIGRATORS, Migrator} from './migrators'
|
||||
import {useTitle} from '@/composables/useTitle'
|
||||
import {useProjectStore} from '@/stores/projects'
|
||||
|
||||
|
@ -104,11 +118,12 @@ const {t} = useI18n({useScope: 'global'})
|
|||
const progressDotsCount = ref(PROGRESS_DOTS_COUNT)
|
||||
const authUrl = ref('')
|
||||
const isMigrating = ref(false)
|
||||
const lastMigrationDate = ref<Date | null>(null)
|
||||
const lastMigrationFinishedAt = ref<Date | null>(null)
|
||||
const lastMigrationStartedAt = ref<Date | null>(null)
|
||||
const message = ref('')
|
||||
const migratorAuthCode = ref('')
|
||||
|
||||
const migrator = computed(() => MIGRATORS[props.service])
|
||||
const migrator = computed<Migrator>(() => MIGRATORS[props.service])
|
||||
|
||||
const migrationService = shallowReactive(new AbstractMigrationService(migrator.value.id))
|
||||
const migrationFileService = shallowReactive(new AbstractMigrationFileService(migrator.value.id))
|
||||
|
@ -130,23 +145,32 @@ async function initMigration() {
|
|||
if (!migratorAuthCode.value) {
|
||||
return
|
||||
}
|
||||
const {time} = await migrationService.getStatus()
|
||||
if (time) {
|
||||
lastMigrationDate.value = parseDateOrNull(time)
|
||||
|
||||
if (lastMigrationDate.value) {
|
||||
const {startedAt, finishedAt} = await migrationService.getStatus()
|
||||
if (startedAt) {
|
||||
lastMigrationStartedAt.value = parseDateOrNull(startedAt)
|
||||
}
|
||||
if (finishedAt) {
|
||||
lastMigrationFinishedAt.value = parseDateOrNull(finishedAt)
|
||||
if (lastMigrationFinishedAt.value) {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
if (lastMigrationStartedAt.value && lastMigrationFinishedAt.value === null) {
|
||||
// Migration already in progress
|
||||
return
|
||||
}
|
||||
|
||||
await migrate()
|
||||
}
|
||||
|
||||
initMigration()
|
||||
|
||||
const uploadInput = ref<HTMLInputElement | null>(null)
|
||||
|
||||
async function migrate() {
|
||||
isMigrating.value = true
|
||||
lastMigrationDate.value = null
|
||||
lastMigrationFinishedAt.value = null
|
||||
message.value = ''
|
||||
|
||||
let migrationConfig: MigrationConfig | File = {code: migratorAuthCode.value}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<template>
|
||||
<ProjectWrapper
|
||||
class="project-kanban"
|
||||
:project-id="project.id"
|
||||
:project-id="projectId"
|
||||
viewName="kanban"
|
||||
>
|
||||
<template #header>
|
||||
|
@ -330,9 +330,14 @@ const bucketDraggableComponentData = computed(() => ({
|
|||
{'dragging-disabled': !canWrite.value},
|
||||
],
|
||||
}))
|
||||
const {
|
||||
projectId = undefined,
|
||||
} = defineProps<{
|
||||
projectId: number,
|
||||
}>()
|
||||
|
||||
const canWrite = computed(() => baseStore.currentProject?.maxRight > Rights.READ)
|
||||
const project = computed(() => baseStore.currentProject)
|
||||
const project = computed(() => projectId ? projectStore.projects[projectId]: null)
|
||||
|
||||
const buckets = computed(() => kanbanStore.buckets)
|
||||
const loading = computed(() => kanbanStore.isLoading)
|
||||
|
@ -342,10 +347,9 @@ const taskLoading = computed(() => taskStore.isLoading)
|
|||
watch(
|
||||
() => ({
|
||||
params: params.value,
|
||||
project: project.value,
|
||||
projectId,
|
||||
}),
|
||||
({params, project}) => {
|
||||
const projectId = project.id
|
||||
({params}) => {
|
||||
if (projectId === undefined || Number(projectId) === 0) {
|
||||
return
|
||||
}
|
||||
|
@ -396,7 +400,7 @@ function updateTasks(bucketId: IBucket['id'], tasks: IBucket['tasks']) {
|
|||
async function updateTaskPosition(e) {
|
||||
drag.value = false
|
||||
|
||||
// While we could just pass the bucket index in through the function call, this would not give us the
|
||||
// While we could just pass the bucket index in through the function call, this would not give us the
|
||||
// new bucket id when a task has been moved between buckets, only the new bucket. Using the data-bucket-id
|
||||
// of the drop target works all the time.
|
||||
const bucketIndex = parseInt(e.to.dataset.bucketIndex)
|
||||
|
@ -450,7 +454,7 @@ async function updateTaskPosition(e) {
|
|||
|
||||
try {
|
||||
await taskStore.update(newTask)
|
||||
|
||||
|
||||
// Make sure the first and second task don't both get position 0 assigned
|
||||
if(newTaskIndex === 0 && taskAfter !== null && taskAfter.kanbanPosition === 0) {
|
||||
const taskAfterAfter = newBucket.tasks[newTaskIndex + 2] ?? null
|
||||
|
@ -480,7 +484,7 @@ async function addTaskToBucket(bucketId: IBucket['id']) {
|
|||
return
|
||||
}
|
||||
newTaskError.value[bucketId] = false
|
||||
|
||||
|
||||
const task = await taskStore.createNewTask({
|
||||
title: newTaskText.value,
|
||||
bucketId,
|
||||
|
@ -619,7 +623,7 @@ async function toggleDoneBucket(bucket: IBucket) {
|
|||
const doneBucketId = project.value.doneBucketId === bucket.id
|
||||
? 0
|
||||
: bucket.id
|
||||
|
||||
|
||||
await projectStore.updateProject({
|
||||
...project.value,
|
||||
doneBucketId,
|
||||
|
@ -722,7 +726,7 @@ $filter-container-height: '1rem - #{$switch-view-height}';
|
|||
}
|
||||
&:last-of-type {
|
||||
padding-bottom: .5rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.no-move {
|
||||
|
|
Loading…
Reference in New Issue
Block a user