Fix bug 613 (#638)

* Fix missing project meta

* fixup! Fix missing project meta

* fixup! fixup! Fix missing project meta

* fixup! fixup! fixup! Fix missing project meta
This commit is contained in:
Chris 2025-12-03 12:58:24 +02:00 committed by GitHub
parent 3ee20711da
commit fcaf9a9a4d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
30 changed files with 487 additions and 222 deletions

View file

@ -236,7 +236,7 @@ const ProjectDropdown: React.FC<ProjectDropdownProps> = ({
{dropdownOpen && !selectedProject && (
<div
ref={dropdownRef}
className="absolute mt-1 bg-white dark:bg-gray-800 shadow-lg rounded-md w-full z-50 border border-gray-200 dark:border-gray-700"
className="absolute mt-1 bg-white dark:bg-gray-800 shadow-lg rounded-md w-full z-50 border border-gray-200 dark:border-gray-700 max-h-80 overflow-y-auto"
>
{(() => {
// Show filtered projects if user is typing, otherwise show all projects
@ -250,13 +250,26 @@ const ProjectDropdown: React.FC<ProjectDropdownProps> = ({
key={project.id}
type="button"
onClick={() => onProjectSelection(project)}
className={`block w-full text-gray-700 dark:text-gray-300 text-left px-4 py-2 hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors ${
className={`flex items-center gap-3 w-full text-gray-700 dark:text-gray-300 text-left px-4 py-2 hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors ${
index === highlightedIndex
? 'bg-blue-50 dark:bg-blue-900/30'
: ''
}`}
>
{project.name}
<div className="w-10 h-10 rounded overflow-hidden flex-shrink-0">
{project.image_url ? (
<img
src={project.image_url}
alt={project.name}
className="w-full h-full object-cover"
/>
) : (
<div className="w-full h-full bg-gradient-to-br from-blue-500 to-purple-600 dark:from-blue-600 dark:to-purple-700"></div>
)}
</div>
<span className="flex-1 truncate">
{project.name}
</span>
</button>
))
) : (

View file

@ -927,6 +927,17 @@ const TaskDetails: React.FC = () => {
return `/project/${project.id}`;
};
const getTagLink = (tag: any) => {
if (tag.uid) {
const slug = tag.name
.toLowerCase()
.replace(/[^a-z0-9]+/g, '-')
.replace(/^-|-$/g, '');
return `/tag/${tag.uid}-${slug}`;
}
return `/tag/${encodeURIComponent(tag.name)}`;
};
// Wrapper handlers for new components
const handleTitleUpdate = async (newTitle: string) => {
if (!task?.uid || !newTitle.trim()) {
@ -1157,6 +1168,8 @@ const TaskDetails: React.FC = () => {
onTitleUpdate={handleTitleUpdate}
onEdit={handleEdit}
onDelete={handleDeleteClick}
getProjectLink={getProjectLink}
getTagLink={getTagLink}
/>
{/* Summary and Overdue Alerts */}
@ -1232,6 +1245,7 @@ const TaskDetails: React.FC = () => {
isLoadingTags={tagsStore.isLoading}
onUpdate={handleTagsUpdate}
onLoadTags={() => tagsStore.loadTags()}
getTagLink={getTagLink}
/>
{/* Priority Section */}

View file

@ -1,6 +1,12 @@
import React, { useRef, useState, useEffect } from 'react';
import { useTranslation } from 'react-i18next';
import { CheckIcon, XMarkIcon } from '@heroicons/react/24/outline';
import {
CheckIcon,
XMarkIcon,
FolderIcon,
TagIcon,
} from '@heroicons/react/24/outline';
import { Link } from 'react-router-dom';
import TaskPriorityIcon from '../TaskPriorityIcon';
import { Task } from '../../../entities/Task';
@ -10,6 +16,8 @@ interface TaskDetailsHeaderProps {
onTitleUpdate: (newTitle: string) => Promise<void>;
onEdit: () => void;
onDelete: () => void;
getProjectLink?: (project: any) => string;
getTagLink?: (tag: any) => string;
}
const TaskDetailsHeader: React.FC<TaskDetailsHeaderProps> = ({
@ -18,6 +26,8 @@ const TaskDetailsHeader: React.FC<TaskDetailsHeaderProps> = ({
onTitleUpdate,
onEdit,
onDelete,
getProjectLink,
getTagLink,
}) => {
const { t } = useTranslation();
const [isEditingTitle, setIsEditingTitle] = useState(false);
@ -80,99 +90,181 @@ const TaskDetailsHeader: React.FC<TaskDetailsHeaderProps> = ({
};
return (
<div className="flex items-center justify-between mb-6">
<div className="flex items-center space-x-3">
<TaskPriorityIcon
priority={task.priority}
status={task.status}
onToggleCompletion={onToggleCompletion}
/>
<div className="flex flex-col flex-1">
{isEditingTitle ? (
<div className="flex items-center space-x-2">
<input
ref={titleInputRef}
type="text"
value={editedTitle}
onChange={(e) => setEditedTitle(e.target.value)}
onKeyDown={handleTitleKeyDown}
onBlur={handleSaveTitle}
className="text-2xl font-normal text-gray-900 dark:text-gray-100 bg-white dark:bg-gray-800 border-2 border-blue-500 dark:border-blue-400 rounded px-2 py-1 focus:outline-none focus:ring-2 focus:ring-blue-500 dark:focus:ring-blue-400 w-full"
placeholder={t(
'task.titlePlaceholder',
'Enter task title'
<div className="mb-6">
<div className="flex items-center justify-between">
<div className="flex items-start space-x-3 flex-1">
<div
className="flex items-center"
style={{ height: '2.5rem' }}
>
<TaskPriorityIcon
priority={task.priority}
status={task.status}
onToggleCompletion={onToggleCompletion}
/>
</div>
<div className="flex-1">
{isEditingTitle ? (
<div className="flex items-center space-x-2">
<input
ref={titleInputRef}
type="text"
value={editedTitle}
onChange={(e) =>
setEditedTitle(e.target.value)
}
onKeyDown={handleTitleKeyDown}
onBlur={handleSaveTitle}
className="text-2xl font-normal text-gray-900 dark:text-gray-100 bg-white dark:bg-gray-800 border-2 border-blue-500 dark:border-blue-400 rounded px-2 py-1 focus:outline-none focus:ring-2 focus:ring-blue-500 dark:focus:ring-blue-400 w-full"
placeholder={t(
'task.titlePlaceholder',
'Enter task title'
)}
/>
<button
onClick={handleSaveTitle}
className="p-1.5 text-green-600 dark:text-green-400 hover:text-green-700 dark:hover:text-green-300 rounded-full transition-colors duration-200"
title={t('common.save', 'Save')}
>
<CheckIcon className="h-5 w-5" />
</button>
<button
onClick={handleCancelTitleEdit}
className="p-1.5 text-gray-600 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-300 rounded-full transition-colors duration-200"
title={t('common.cancel', 'Cancel')}
>
<XMarkIcon className="h-5 w-5" />
</button>
</div>
) : (
<>
<h2
onClick={handleStartTitleEdit}
className="text-2xl font-normal text-gray-900 dark:text-gray-100 cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded px-2 py-1 -mx-2 transition-colors"
title={t(
'task.clickToEditTitle',
'Click to edit title'
)}
>
{task.name}
</h2>
{/* Project and tags display below title */}
{(task.Project ||
(task.tags && task.tags.length > 0)) && (
<div className="flex items-center text-xs text-gray-500 dark:text-gray-400 mt-2 px-2 -mx-2 gap-2 flex-wrap">
{task.Project && (
<Link
to={
getProjectLink
? getProjectLink(
task.Project
)
: '#'
}
className="flex items-center gap-1 hover:text-gray-900 dark:hover:text-gray-200 hover:underline transition-colors"
onClick={(e) =>
e.stopPropagation()
}
>
<FolderIcon className="h-4 w-4" />
<span>{task.Project.name}</span>
</Link>
)}
{task.tags && task.tags.length > 0 && (
<div className="flex items-center gap-1 flex-wrap">
<TagIcon className="h-4 w-4" />
<div className="flex gap-1 flex-wrap">
{task.tags.map(
(
tag: any,
index: number
) => (
<React.Fragment
key={
tag.uid ||
tag.id ||
tag.name
}
>
<Link
to={
getTagLink
? getTagLink(
tag
)
: '#'
}
className="hover:text-gray-900 dark:hover:text-gray-200 hover:underline transition-colors"
onClick={(
e
) =>
e.stopPropagation()
}
>
{tag.name}
</Link>
{index <
task.tags!
.length -
1 && (
<span>
,
</span>
)}
</React.Fragment>
)
)}
</div>
</div>
)}
</div>
)}
/>
</>
)}
</div>
</div>
<div className="relative" ref={actionsMenuRef}>
<button
className="px-2 py-1 text-gray-600 dark:text-gray-300 hover:text-gray-900 dark:hover:text-gray-100 rounded transition-colors duration-200 text-base"
onClick={(e) => {
e.preventDefault();
e.stopPropagation();
setActionsMenuOpen(!actionsMenuOpen);
}}
aria-haspopup="true"
aria-expanded={actionsMenuOpen}
aria-label={t('common.moreActions', 'More actions')}
>
...
</button>
{actionsMenuOpen && (
<div className="absolute right-0 mt-2 w-40 rounded-lg shadow-lg bg-white dark:bg-gray-900 border border-gray-200 dark:border-gray-700 z-20">
<button
onClick={handleSaveTitle}
className="p-1.5 text-green-600 dark:text-green-400 hover:text-green-700 dark:hover:text-green-300 rounded-full transition-colors duration-200"
title={t('common.save', 'Save')}
className="w-full text-left px-3 py-2 text-sm text-gray-700 dark:text-gray-200 hover:bg-gray-100 dark:hover:bg-gray-800 rounded-t-lg"
onClick={(e) => {
e.preventDefault();
e.stopPropagation();
setActionsMenuOpen(false);
onEdit();
}}
>
<CheckIcon className="h-5 w-5" />
{t('common.edit', 'Edit')}
</button>
<button
onClick={handleCancelTitleEdit}
className="p-1.5 text-gray-600 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-300 rounded-full transition-colors duration-200"
title={t('common.cancel', 'Cancel')}
className="w-full text-left px-3 py-2 text-sm text-red-600 dark:text-red-400 hover:bg-gray-100 dark:hover:bg-gray-800 rounded-b-lg"
onClick={(e) => {
e.preventDefault();
e.stopPropagation();
setActionsMenuOpen(false);
onDelete();
}}
>
<XMarkIcon className="h-5 w-5" />
{t('common.delete', 'Delete')}
</button>
</div>
) : (
<h2
onClick={handleStartTitleEdit}
className="text-2xl font-normal text-gray-900 dark:text-gray-100 cursor-pointer hover:bg-gray-50 dark:hover:bg-gray-800 rounded px-2 py-1 -mx-2 transition-colors"
title={t(
'task.clickToEditTitle',
'Click to edit title'
)}
>
{task.name}
</h2>
)}
</div>
</div>
<div className="relative" ref={actionsMenuRef}>
<button
className="px-2 py-1 text-gray-600 dark:text-gray-300 hover:text-gray-900 dark:hover:text-gray-100 rounded transition-colors duration-200 text-base"
onClick={(e) => {
e.preventDefault();
e.stopPropagation();
setActionsMenuOpen(!actionsMenuOpen);
}}
aria-haspopup="true"
aria-expanded={actionsMenuOpen}
aria-label={t('common.moreActions', 'More actions')}
>
...
</button>
{actionsMenuOpen && (
<div className="absolute right-0 mt-2 w-40 rounded-lg shadow-lg bg-white dark:bg-gray-900 border border-gray-200 dark:border-gray-700 z-20">
<button
className="w-full text-left px-3 py-2 text-sm text-gray-700 dark:text-gray-200 hover:bg-gray-100 dark:hover:bg-gray-800 rounded-t-lg"
onClick={(e) => {
e.preventDefault();
e.stopPropagation();
setActionsMenuOpen(false);
onEdit();
}}
>
{t('common.edit', 'Edit')}
</button>
<button
className="w-full text-left px-3 py-2 text-sm text-red-600 dark:text-red-400 hover:bg-gray-100 dark:hover:bg-gray-800 rounded-b-lg"
onClick={(e) => {
e.preventDefault();
e.stopPropagation();
setActionsMenuOpen(false);
onDelete();
}}
>
{t('common.delete', 'Delete')}
</button>
</div>
)}
</div>
</div>
);
};

View file

@ -1,7 +1,7 @@
import React, { useRef, useState, useEffect } from 'react';
import { useTranslation } from 'react-i18next';
import { Link } from 'react-router-dom';
import { ArrowRightIcon, XMarkIcon } from '@heroicons/react/24/outline';
import { ArrowRightIcon } from '@heroicons/react/24/outline';
import ProjectDropdown from '../../Shared/ProjectDropdown';
import { Project } from '../../../entities/Project';
import { Task } from '../../../entities/Task';
@ -101,69 +101,53 @@ const TaskProjectCard: React.FC<TaskProjectCardProps> = ({
isCreatingProject={isCreatingProject}
onShowAllProjects={handleShowAllProjects}
allProjects={projects}
selectedProject={null}
selectedProject={task.Project || null}
onClearProject={handleClearProject}
/>
) : task.Project ? (
<div className="bg-gray-50 dark:bg-gray-900 rounded-lg shadow-sm relative overflow-hidden">
<button
type="button"
<div
className="flex items-center justify-center overflow-hidden relative hover:opacity-90 transition-opacity cursor-pointer"
style={{ height: '100px' }}
onClick={() => setProjectDropdownOpen(true)}
className="group w-full text-left hover:opacity-90 transition-opacity"
>
<div
className="flex items-center justify-center overflow-hidden relative"
style={{ height: '100px' }}
>
{task.Project.image_url ? (
<img
src={task.Project.image_url}
alt={task.Project.name}
className="w-full h-full object-cover"
/>
) : (
<div className="w-full h-full bg-gradient-to-br from-blue-500 to-purple-600 dark:from-blue-600 dark:to-purple-700"></div>
)}
</div>
<div className="p-3">
<div className="flex items-center text-md font-semibold text-gray-900 dark:text-gray-100">
<span className="truncate">
{task.Project.name}
</span>
<button
type="button"
onClick={(e) => {
e.stopPropagation();
handleClearProject();
}}
className="ml-auto inline-flex items-center justify-center w-6 h-6 rounded-full text-gray-500 dark:text-gray-400 bg-transparent hover:bg-gray-200 dark:hover:bg-gray-700 opacity-0 group-hover:opacity-100 transition-opacity"
title={t(
'task.clearProject',
'Remove project'
)}
>
<XMarkIcon className="h-4 w-4" />
</button>
<Link
to={getProjectLink(task.Project)}
onClick={(e) => e.stopPropagation()}
className="p-1.5 rounded-full text-blue-600 dark:text-blue-400 hover:text-blue-700 dark:hover:text-blue-300 flex-shrink-0 ml-2"
title={t(
{task.Project.image_url ? (
<img
src={task.Project.image_url}
alt={task.Project.name}
className="w-full h-full object-cover"
/>
) : (
<div className="w-full h-full bg-gradient-to-br from-blue-500 to-purple-600 dark:from-blue-600 dark:to-purple-700"></div>
)}
</div>
<div className="p-3">
<div className="flex items-center justify-between gap-2">
<div
className="text-md font-semibold text-gray-900 dark:text-gray-100 truncate cursor-pointer flex-1"
onClick={() => setProjectDropdownOpen(true)}
>
{task.Project.name}
</div>
<Link
to={getProjectLink(task.Project)}
onClick={(e) => e.stopPropagation()}
className="p-1.5 rounded-full text-blue-600 dark:text-blue-400 hover:text-blue-700 dark:hover:text-blue-300 hover:bg-blue-50 dark:hover:bg-blue-900/30 transition-colors flex-shrink-0"
title={t(
'project.viewProject',
'Go to project'
)}
>
<ArrowRightIcon className="h-4 w-4" />
<span className="sr-only">
{t(
'project.viewProject',
'Go to project'
)}
>
<ArrowRightIcon className="h-4 w-4" />
<span className="sr-only">
{t(
'project.viewProject',
'Go to project'
)}
</span>
</Link>
</div>
</span>
</Link>
</div>
</button>
</div>
</div>
) : (
<div

View file

@ -1,5 +1,6 @@
import React, { useState, useEffect } from 'react';
import { useTranslation } from 'react-i18next';
import { Link } from 'react-router-dom';
import { TagIcon, ArrowRightIcon } from '@heroicons/react/24/outline';
import TagInput from '../../Tag/TagInput';
import { Task } from '../../../entities/Task';
@ -12,6 +13,7 @@ interface TaskTagsCardProps {
isLoadingTags: boolean;
onUpdate: (tags: string[]) => Promise<void>;
onLoadTags: () => void;
getTagLink?: (tag: any) => string;
}
const TaskTagsCard: React.FC<TaskTagsCardProps> = ({
@ -21,6 +23,7 @@ const TaskTagsCard: React.FC<TaskTagsCardProps> = ({
isLoadingTags,
onUpdate,
onLoadTags,
getTagLink,
}) => {
const { t } = useTranslation();
const [isEditing, setIsEditing] = useState(false);
@ -95,25 +98,34 @@ const TaskTagsCard: React.FC<TaskTagsCardProps> = ({
) : task.tags && task.tags.length > 0 ? (
<div>
{task.tags.map((tag: any, index: number) => (
<button
<div
key={tag.uid || tag.id || tag.name}
type="button"
onClick={(e) => {
e.stopPropagation();
handleStartEdit();
}}
className={`group flex w-full items-center justify-between px-3 py-2.5 bg-white dark:bg-gray-900 shadow-sm hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors ${
index === 0 ? 'rounded-t-lg' : ''
} ${index === task.tags.length - 1 ? 'rounded-b-lg' : ''}`}
>
<div className="flex items-center space-x-2 min-w-0">
<button
type="button"
onClick={(e) => {
e.stopPropagation();
handleStartEdit();
}}
className="flex items-center space-x-2 min-w-0 flex-1 text-left"
>
<TagIcon className="h-4 w-4 text-gray-500 dark:text-gray-400" />
<span className="text-sm text-gray-900 dark:text-gray-100 truncate">
{tag.name}
</span>
</div>
<ArrowRightIcon className="h-4 w-4 text-blue-600 dark:text-blue-400 group-hover:text-blue-700 dark:group-hover:text-blue-300 flex-shrink-0" />
</button>
</button>
<Link
to={getTagLink ? getTagLink(tag) : '#'}
onClick={(e) => e.stopPropagation()}
className="p-1.5 rounded-full text-blue-600 dark:text-blue-400 hover:text-blue-700 dark:hover:text-blue-300 hover:bg-blue-50 dark:hover:bg-blue-900/30 transition-colors flex-shrink-0"
title={t('tag.viewTag', 'Go to tag')}
>
<ArrowRightIcon className="h-4 w-4" />
</Link>
</div>
))}
</div>
) : (

View file

@ -438,7 +438,8 @@
"weekOfMonth": "أسبوع من الشهر",
"recurrenceEndDate": "تاريخ الانتهاء (اختياري)",
"completionBased": "كرر بعد الانتهاء",
"repeatOn": "التكرار في"
"repeatOn": "التكرار في",
"deferUntil": "تأجيل حتى"
},
"projectSearchPlaceholder": "ابحث أو أنشئ مشروعًا...",
"noMatchingProjects": "لا توجد مشاريع مطابقة",
@ -460,7 +461,8 @@
"noVerb": "ما الإجراء المحدد الذي تحتاج إلى اتخاذه؟ حاول البدء بفعل.",
"vague": "حاول البدء بفعل عمل مثل \"اتصل\"، \"اكتب\"، \"حدد موعدًا\"، أو \"ابحث\""
},
"selectAtLeastOneDay": "يرجى اختيار يوم واحد على الأقل"
"selectAtLeastOneDay": "يرجى اختيار يوم واحد على الأقل",
"deferUntilPlaceholder": "اختر تاريخ ووقت التأجيل"
},
"noteTitle": "عنوان الملاحظة",
"noteContent": "محتوى الملاحظة",
@ -765,7 +767,11 @@
"parentTask": "المهمة الرئيسية",
"includingToday": "بما في ذلك اليوم",
"has": "يمتلك",
"fromProject": "من المشروع"
"fromProject": "من المشروع",
"deferUntil": "تأجيل حتى",
"noDeferUntil": "لا تأجيل حتى",
"deferUntilUpdated": "تأجيل حتى يتم التحديث بنجاح",
"deferUntilUpdateError": "فشل في تحديث التأجيل حتى"
},
"projects": {
"loading": "جارٍ تحميل المشاريع...",

View file

@ -438,7 +438,8 @@
"weekOfMonth": "Седмица от месеца",
"recurrenceEndDate": "Краен срок (по избор)",
"completionBased": "Повторете след завършване",
"repeatOn": "Повтаряй на"
"repeatOn": "Повтаряй на",
"deferUntil": "Отложи до"
},
"projectSearchPlaceholder": "Търсене или създаване на проект...",
"noMatchingProjects": "Няма съвпадащи проекти",
@ -460,7 +461,8 @@
"noVerb": "Какво конкретно действие трябва да предприемете? Опитайте да започнете с глагол.",
"vague": "Опитайте да започнете с глагол за действие като \"Обади се\", \"Напиши\", \"Насрочи\" или \"Изследвай\""
},
"selectAtLeastOneDay": "Моля, изберете поне един ден"
"selectAtLeastOneDay": "Моля, изберете поне един ден",
"deferUntilPlaceholder": "Изберете дата и час за отлагане"
},
"noteTitle": "Заглавие на бележка",
"noteContent": "Съдържание на бележка",
@ -765,7 +767,11 @@
"parentTask": "Родителска задача",
"includingToday": "включително днес",
"has": "има",
"fromProject": "от проекта"
"fromProject": "от проекта",
"deferUntil": "Отложи до",
"noDeferUntil": "Няма отлагане до",
"deferUntilUpdated": "Отложи до успешно актуализиране",
"deferUntilUpdateError": "Неуспешно актуализиране на отлагането до"
},
"projects": {
"loading": "Зареждане на проекти...",

View file

@ -438,7 +438,8 @@
"weekOfMonth": "Uge i måneden",
"recurrenceEndDate": "Slutdato (valgfri)",
"completionBased": "Gentag efter fuldførelse",
"repeatOn": "Gentag på"
"repeatOn": "Gentag på",
"deferUntil": "Udsæt indtil"
},
"projectSearchPlaceholder": "Søg eller opret et projekt...",
"noMatchingProjects": "Ingen matchende projekter",
@ -460,7 +461,8 @@
"noVerb": "Hvilken specifik handling skal du tage? Prøv at starte med et verbum.",
"vague": "Prøv at starte med et handlingsverb som \"Ring\", \"Skriv\", \"Planlæg\" eller \"Undersøg\""
},
"selectAtLeastOneDay": "Vælg venligst mindst én dag"
"selectAtLeastOneDay": "Vælg venligst mindst én dag",
"deferUntilPlaceholder": "Vælg udsætte indtil dato og tid"
},
"noteTitle": "Notetitel",
"noteContent": "Noteindhold",
@ -765,7 +767,11 @@
"parentTask": "Overordnet opgave",
"includingToday": "inklusive i dag",
"has": "har",
"fromProject": "fra projektet"
"fromProject": "fra projektet",
"deferUntil": "Udsæt indtil",
"noDeferUntil": "Ingen udsættelse indtil",
"deferUntilUpdated": "Udsæt indtil opdateret med succes",
"deferUntilUpdateError": "Fejl ved opdatering af udsættelse indtil"
},
"projects": {
"loading": "Indlæser projekter...",

View file

@ -209,7 +209,8 @@
"priority": "Priorität",
"dueDate": "Fälligkeitsdatum",
"note": "Notiz",
"repeatOn": "Wiederholen am"
"repeatOn": "Wiederholen am",
"deferUntil": "Aufschieben bis"
},
"recurrenceSettings": "Wiederholungseinstellungen",
"completionBasedHelp": "Falls aktiviert, wird die nächste Aufgabe basierend auf dem Abschlussdatum statt dem Fälligkeitsdatum erstellt",
@ -232,7 +233,8 @@
"noVerb": "Welche spezifische Aktion müssen Sie durchführen? Versuchen Sie, mit einem Verb zu beginnen.",
"vague": "Versuchen Sie, mit einem Aktionsverb wie \"Anrufen\", \"Schreiben\", \"Planen\" oder \"Forschen\" zu beginnen"
},
"selectAtLeastOneDay": "Bitte wählen Sie mindestens einen Tag aus"
"selectAtLeastOneDay": "Bitte wählen Sie mindestens einen Tag aus",
"deferUntilPlaceholder": "Wählen Sie das Datum und die Uhrzeit für das Aufschieben aus"
},
"noteTitle": "Notiz-Titel",
"noteContent": "Notiz-Inhalt",
@ -699,7 +701,11 @@
"parentTask": "Übergeordnete Aufgabe",
"includingToday": "einschließlich heute",
"has": "hat",
"fromProject": "vom Projekt"
"fromProject": "vom Projekt",
"deferUntil": "Bis später verschieben",
"noDeferUntil": "Keine Verschiebung bis",
"deferUntilUpdated": "Bis zur erfolgreichen Aktualisierung verschieben",
"deferUntilUpdateError": "Aktualisierung der Verschiebung bis fehlgeschlagen"
},
"calendar": {
"month": "Monat",

View file

@ -574,7 +574,8 @@
"weekOfMonth": "Εβδομάδα του μήνα",
"recurrenceEndDate": "Ημερομηνία λήξης (προαιρετικό)",
"completionBased": "Επανάληψη μετά την ολοκλήρωση",
"repeatOn": "Επανάληψη στις"
"repeatOn": "Επανάληψη στις",
"deferUntil": "Αναβολή μέχρι"
},
"recurrenceSettings": "Ρυθμίσεις Επανάληψης",
"completionBasedHelp": "Αν είναι ενεργοποιημένο, η επόμενη εργασία θα δημιουργηθεί με βάση την ημερομηνία ολοκλήρωσης αντί της ημερομηνίας λήξης",
@ -592,7 +593,8 @@
"noVerb": "Ποια συγκεκριμένη ενέργεια πρέπει να κάνετε; Δοκιμάστε να ξεκινήσετε με ένα ρήμα.",
"vague": "Δοκιμάστε να ξεκινήσετε με ένα ρήμα δράσης όπως \"Καλέστε\", \"Γράψτε\", \"Προγραμματίστε\", ή \"Έρευνα\""
},
"selectAtLeastOneDay": "Παρακαλώ επιλέξτε τουλάχιστον μία ημέρα"
"selectAtLeastOneDay": "Παρακαλώ επιλέξτε τουλάχιστον μία ημέρα",
"deferUntilPlaceholder": "Επιλέξτε ημερομηνία και ώρα αναβολής"
},
"projectDescriptionPlaceholder": "Εισάγετε περιγραφή έργου"
},
@ -721,7 +723,11 @@
"parentTask": "Γονική Εργασία",
"includingToday": "συμπεριλαμβανομένης της σημερινής ημέρας",
"has": "έχει",
"fromProject": "από το έργο"
"fromProject": "από το έργο",
"deferUntil": "Αναβολή μέχρι",
"noDeferUntil": "Καμία αναβολή μέχρι",
"deferUntilUpdated": "Αναβολή μέχρι να ενημερωθεί επιτυχώς",
"deferUntilUpdateError": "Αποτυχία ενημέρωσης αναβολής μέχρι"
},
"dateFormats": {
"long": "EEEE, d MMMM yyyy",

View file

@ -430,6 +430,7 @@
"status": "Status",
"priority": "Priority",
"dueDate": "Due Date",
"deferUntil": "Defer Until",
"note": "Note",
"recurrenceType": "Repeat",
"recurrenceInterval": "Every",
@ -448,6 +449,7 @@
"recurrenceSettings": "Recurrence Settings",
"completionBasedHelp": "If checked, the next task will be created based on completion date instead of due date",
"dueDatePlaceholder": "Select due date",
"deferUntilPlaceholder": "Select defer until date and time",
"endDatePlaceholder": "Select end date",
"nameHelper": {
"title": "Make it more descriptive!",
@ -759,6 +761,10 @@
"projectClearError": "Failed to clear project",
"priorityUpdated": "Priority updated successfully",
"priorityUpdateError": "Failed to update priority",
"deferUntil": "Defer Until",
"noDeferUntil": "No defer until",
"deferUntilUpdated": "Defer until updated successfully",
"deferUntilUpdateError": "Failed to update defer until",
"status": {
"notStarted": "not started",
"inProgress": "in progress",

View file

@ -542,7 +542,8 @@
"weekOfMonth": "Semana del mes",
"recurrenceEndDate": "Fecha de fin (opcional)",
"completionBased": "Repetir después de completar",
"repeatOn": "Repetir en"
"repeatOn": "Repetir en",
"deferUntil": "Aplazar hasta"
},
"projectSearchPlaceholder": "Buscar o crear un proyecto...",
"noMatchingProjects": "No hay proyectos coincidentes",
@ -564,7 +565,8 @@
"noVerb": "¿Qué acción específica necesitas tomar? Intenta comenzar con un verbo.",
"vague": "Intenta comenzar con un verbo de acción como \"Llamar\", \"Escribir\", \"Programar\", o \"Investigar\""
},
"selectAtLeastOneDay": "Por favor, selecciona al menos un día"
"selectAtLeastOneDay": "Por favor, selecciona al menos un día",
"deferUntilPlaceholder": "Seleccione la fecha y hora hasta la cual aplazar"
},
"projectDescriptionPlaceholder": "Ingrese la descripción del proyecto"
},
@ -730,7 +732,11 @@
"parentTask": "Tarea principal",
"includingToday": "incluyendo hoy",
"has": "tiene",
"fromProject": "del proyecto"
"fromProject": "del proyecto",
"deferUntil": "Aplazar hasta",
"noDeferUntil": "No aplazar hasta",
"deferUntilUpdated": "Aplazar hasta que se actualice correctamente",
"deferUntilUpdateError": "Error al actualizar el aplazamiento"
},
"dateIndicators": {
"today": "HOY",

View file

@ -438,7 +438,8 @@
"weekOfMonth": "Kuukauden viikko",
"recurrenceEndDate": "Loppupäivämäärä (valinnainen)",
"completionBased": "Toista valmistumisen jälkeen",
"repeatOn": "Toista"
"repeatOn": "Toista",
"deferUntil": "Viivytä kunnes"
},
"projectSearchPlaceholder": "Etsi tai luo projekti...",
"noMatchingProjects": "Ei vastaavia projekteja",
@ -460,7 +461,8 @@
"noVerb": "Mitä erityistä toimintoa sinun tarvitsee tehdä? Yritä aloittaa verbillä.",
"vague": "Yritä aloittaa toimintaverbillä kuten \"Soita\", \"Kirjoita\", \"Aikatauluta\" tai \"Tutki\""
},
"selectAtLeastOneDay": "Valitse vähintään yksi päivä"
"selectAtLeastOneDay": "Valitse vähintään yksi päivä",
"deferUntilPlaceholder": "Valitse viivytyspäivämäärä ja -aika"
},
"noteTitle": "Muistion Otsikko",
"noteContent": "Muistion Sisältö",
@ -765,7 +767,11 @@
"parentTask": "Ylätason tehtävä",
"includingToday": "mukana tänään",
"has": "on",
"fromProject": "projektista"
"fromProject": "projektista",
"deferUntil": "Viivytä kunnes",
"noDeferUntil": "Ei viivytystä ennen",
"deferUntilUpdated": "Viivytä kunnes päivitys onnistuu",
"deferUntilUpdateError": "Viivytyksen päivittäminen epäonnistui"
},
"projects": {
"loading": "Ladataan projekteja...",

View file

@ -438,7 +438,8 @@
"weekOfMonth": "Semaine du mois",
"recurrenceEndDate": "Date de fin (optionnel)",
"completionBased": "Répéter après achèvement",
"repeatOn": "Répéter le"
"repeatOn": "Répéter le",
"deferUntil": "Reporter jusqu'à"
},
"projectSearchPlaceholder": "Rechercher ou créer un projet...",
"noMatchingProjects": "Aucun projet correspondant",
@ -460,7 +461,8 @@
"noVerb": "Quelle action spécifique devez-vous entreprendre ? Essayez de commencer par un verbe.",
"vague": "Essayez de commencer par un verbe d'action comme \"Appeler\", \"Écrire\", \"Planifier\" ou \"Rechercher\""
},
"selectAtLeastOneDay": "Veuillez sélectionner au moins un jour"
"selectAtLeastOneDay": "Veuillez sélectionner au moins un jour",
"deferUntilPlaceholder": "Sélectionnez la date et l'heure de report"
},
"noteTitle": "Titre de la note",
"noteContent": "Contenu de la note",
@ -765,7 +767,11 @@
"parentTask": "Tâche parente",
"includingToday": "y compris aujourd'hui",
"has": "a",
"fromProject": "du projet"
"fromProject": "du projet",
"deferUntil": "Différer jusqu'à",
"noDeferUntil": "Pas de différé jusqu'à",
"deferUntilUpdated": "Différer jusqu'à mise à jour réussie",
"deferUntilUpdateError": "Échec de la mise à jour du différé jusqu'à"
},
"projects": {
"loading": "Chargement des projets...",

View file

@ -438,7 +438,8 @@
"weekOfMonth": "Minggu dalam bulan",
"recurrenceEndDate": "Tanggal akhir (opsional)",
"completionBased": "Ulangi setelah penyelesaian",
"repeatOn": "Ulangi pada"
"repeatOn": "Ulangi pada",
"deferUntil": "Tunda Hingga"
},
"projectSearchPlaceholder": "Cari atau buat proyek...",
"noMatchingProjects": "Tidak ada proyek yang cocok",
@ -460,7 +461,8 @@
"noVerb": "Tindakan spesifik apa yang perlu Anda ambil? Cobalah mulai dengan kata kerja.",
"vague": "Cobalah mulai dengan kata kerja aksi seperti \"Hubungi\", \"Tulis\", \"Jadwalkan\", atau \"Teliti\""
},
"selectAtLeastOneDay": "Silakan pilih setidaknya satu hari"
"selectAtLeastOneDay": "Silakan pilih setidaknya satu hari",
"deferUntilPlaceholder": "Pilih tanggal dan waktu tunda hingga"
},
"noteTitle": "Judul Catatan",
"noteContent": "Konten Catatan",
@ -765,7 +767,11 @@
"parentTask": "Tugas Induk",
"includingToday": "termasuk hari ini",
"has": "memiliki",
"fromProject": "dari proyek"
"fromProject": "dari proyek",
"deferUntil": "Tunda Hingga",
"noDeferUntil": "Tidak ada tunda hingga",
"deferUntilUpdated": "Tunda hingga diperbarui dengan sukses",
"deferUntilUpdateError": "Gagal memperbarui tunda hingga"
},
"projects": {
"loading": "Memuat proyek...",

View file

@ -438,7 +438,8 @@
"weekOfMonth": "Settimana del mese",
"recurrenceEndDate": "Data di fine (opzionale)",
"completionBased": "Ripeti dopo il completamento",
"repeatOn": "Ripeti il"
"repeatOn": "Ripeti il",
"deferUntil": "Rimanda fino a"
},
"projectSearchPlaceholder": "Cerca o crea un progetto...",
"noMatchingProjects": "Nessun progetto corrispondente",
@ -460,7 +461,8 @@
"noVerb": "Quale azione specifica devi intraprendere? Prova a iniziare con un verbo.",
"vague": "Prova a iniziare con un verbo d'azione come \"Chiamare\", \"Scrivere\", \"Programmare\", o \"Ricercare\""
},
"selectAtLeastOneDay": "Seleziona almeno un giorno"
"selectAtLeastOneDay": "Seleziona almeno un giorno",
"deferUntilPlaceholder": "Seleziona la data e l'ora di rimando"
},
"noteTitle": "Titolo Nota",
"noteContent": "Contenuto Nota",
@ -765,7 +767,11 @@
"parentTask": "Attività principale",
"includingToday": "incluso oggi",
"has": "ha",
"fromProject": "dal progetto"
"fromProject": "dal progetto",
"deferUntil": "Rimanda fino a",
"noDeferUntil": "Nessun rimando fino a",
"deferUntilUpdated": "Rimandato fino a aggiornato con successo",
"deferUntilUpdateError": "Impossibile aggiornare il rimando fino a"
},
"projects": {
"loading": "Caricamento progetti...",

View file

@ -424,7 +424,8 @@
"priority": "優先度",
"dueDate": "期限日",
"note": "ノート",
"repeatOn": "繰り返し"
"repeatOn": "繰り返し",
"deferUntil": "延期するまで"
},
"recurrenceSettings": "繰り返し設定",
"completionBasedHelp": "チェックすると、次のタスクは期限日ではなく完了日に基づいて作成されます",
@ -447,7 +448,8 @@
"noVerb": "具体的な行動は何ですか? 動詞で始めてみてください。",
"vague": "\"電話する\"、\"書く\"、\"予定する\"、\"調査する\"などの動詞で始めてみてください"
},
"selectAtLeastOneDay": "少なくとも1日を選択してください"
"selectAtLeastOneDay": "少なくとも1日を選択してください",
"deferUntilPlaceholder": "延期する日付と時間を選択"
},
"areaName": "エリア名",
"areaDescription": "エリアの説明",
@ -835,7 +837,11 @@
"parentTask": "親タスク",
"includingToday": "今日を含む",
"has": "持っている",
"fromProject": "プロジェクトから"
"fromProject": "プロジェクトから",
"deferUntil": "延期するまで",
"noDeferUntil": "延期なし",
"deferUntilUpdated": "正常に延期が更新されました",
"deferUntilUpdateError": "延期の更新に失敗しました"
},
"calendar": {
"month": "月",

View file

@ -438,7 +438,8 @@
"weekOfMonth": "월의 주",
"recurrenceEndDate": "종료일 (선택 사항)",
"completionBased": "완료 후 반복",
"repeatOn": "반복"
"repeatOn": "반복",
"deferUntil": "연기할 때까지"
},
"projectSearchPlaceholder": "프로젝트 검색 또는 생성...",
"noMatchingProjects": "일치하는 프로젝트가 없습니다",
@ -460,7 +461,8 @@
"noVerb": "어떤 특정 행동을 취해야 하나요? 동사로 시작해보세요.",
"vague": "\"전화하기\", \"작성하기\", \"일정 잡기\", 또는 \"조사하기\"와 같은 행동 동사로 시작해보세요"
},
"selectAtLeastOneDay": "하루 이상 선택해 주세요"
"selectAtLeastOneDay": "하루 이상 선택해 주세요",
"deferUntilPlaceholder": "연기할 날짜와 시간을 선택하세요"
},
"noteTitle": "노트 제목",
"noteContent": "노트 내용",
@ -765,7 +767,11 @@
"parentTask": "상위 작업",
"includingToday": "오늘 포함",
"has": "있음",
"fromProject": "프로젝트에서"
"fromProject": "프로젝트에서",
"deferUntil": "연기할 때까지",
"noDeferUntil": "연기할 때까지 없음",
"deferUntilUpdated": "연기할 때까지 성공적으로 업데이트됨",
"deferUntilUpdateError": "연기할 때까지 업데이트 실패"
},
"projects": {
"loading": "프로젝트 로딩 중...",

View file

@ -438,7 +438,8 @@
"weekOfMonth": "Week van de maand",
"recurrenceEndDate": "Einddatum (optioneel)",
"completionBased": "Herhaal na voltooiing",
"repeatOn": "Herhaal op"
"repeatOn": "Herhaal op",
"deferUntil": "Uitstellen Tot"
},
"projectSearchPlaceholder": "Zoek of maak een project...",
"noMatchingProjects": "Geen overeenkomende projecten",
@ -460,7 +461,8 @@
"noVerb": "Welke specifieke actie moet je ondernemen? Probeer te beginnen met een werkwoord.",
"vague": "Probeer te beginnen met een actie werkwoord zoals \"Bel\", \"Schrijf\", \"Plan\" of \"Onderzoek\""
},
"selectAtLeastOneDay": "Selecteer alstublieft minimaal één dag"
"selectAtLeastOneDay": "Selecteer alstublieft minimaal één dag",
"deferUntilPlaceholder": "Selecteer uitstel tot datum en tijd"
},
"noteTitle": "Notitietitel",
"noteContent": "Notitie-inhoud",
@ -765,7 +767,11 @@
"parentTask": "Bovenliggende Taak",
"includingToday": "inclusief vandaag",
"has": "heeft",
"fromProject": "van het project"
"fromProject": "van het project",
"deferUntil": "Uitstellen Tot",
"noDeferUntil": "Geen uitstel tot",
"deferUntilUpdated": "Uitstel tot succesvol bijgewerkt",
"deferUntilUpdateError": "Bijwerken van uitstel tot is mislukt"
},
"projects": {
"loading": "Projecten laden...",

View file

@ -438,7 +438,8 @@
"weekOfMonth": "Uke i måneden",
"recurrenceEndDate": "Sluttdato (valgfritt)",
"completionBased": "Gjenta etter fullføring",
"repeatOn": "Gjenta på"
"repeatOn": "Gjenta på",
"deferUntil": "Utsett til"
},
"projectSearchPlaceholder": "Søk eller opprett et prosjekt...",
"noMatchingProjects": "Ingen matchende prosjekter",
@ -460,7 +461,8 @@
"noVerb": "Hvilken spesifikk handling må du ta? Prøv å starte med et verb.",
"vague": "Prøv å starte med et handlingsverb som \"Ring\", \"Skriv\", \"Planlegg\" eller \"Undersøk\""
},
"selectAtLeastOneDay": "Vennligst velg minst én dag"
"selectAtLeastOneDay": "Vennligst velg minst én dag",
"deferUntilPlaceholder": "Velg dato og klokkeslett for utsettelse"
},
"noteTitle": "Notattittel",
"noteContent": "Notatinnhold",
@ -765,7 +767,11 @@
"parentTask": "Foreldrepågave",
"includingToday": "inkludert i dag",
"has": "har",
"fromProject": "fra prosjektet"
"fromProject": "fra prosjektet",
"deferUntil": "Utsett til",
"noDeferUntil": "Ingen utsettelse til",
"deferUntilUpdated": "Utsettelse oppdatert vellykket",
"deferUntilUpdateError": "Kunne ikke oppdatere utsettelse"
},
"projects": {
"loading": "Laster prosjekter...",

View file

@ -438,7 +438,8 @@
"weekOfMonth": "Tydzień miesiąca",
"recurrenceEndDate": "Data zakończenia (opcjonalnie)",
"completionBased": "Powtórz po zakończeniu",
"repeatOn": "Powtarzaj w"
"repeatOn": "Powtarzaj w",
"deferUntil": "Odłóż do"
},
"projectSearchPlaceholder": "Szukaj lub utwórz projekt...",
"noMatchingProjects": "Brak pasujących projektów",
@ -460,7 +461,8 @@
"noVerb": "Jaką konkretną czynność musisz wykonać? Spróbuj zacząć od czasownika.",
"vague": "Spróbuj zacząć od czasownika akcji, takiego jak \"Zadzwoń\", \"Napisz\", \"Zaplanuj\" lub \"Zbadaj\""
},
"selectAtLeastOneDay": "Proszę wybrać przynajmniej jeden dzień"
"selectAtLeastOneDay": "Proszę wybrać przynajmniej jeden dzień",
"deferUntilPlaceholder": "Wybierz datę i godzinę odłożenia"
},
"noteTitle": "Tytuł notatki",
"noteContent": "Treść notatki",
@ -765,7 +767,11 @@
"parentTask": "Zadanie nadrzędne",
"includingToday": "w tym dzisiaj",
"has": "ma",
"fromProject": "z projektu"
"fromProject": "z projektu",
"deferUntil": "Odłóż do",
"noDeferUntil": "Brak odłożenia do",
"deferUntilUpdated": "Odłożono do zaktualizowania pomyślnie",
"deferUntilUpdateError": "Nie udało się zaktualizować odłożenia do"
},
"projects": {
"loading": "Ładowanie projektów...",

View file

@ -438,7 +438,8 @@
"weekOfMonth": "Semana do mês",
"recurrenceEndDate": "Data de término (opcional)",
"completionBased": "Repetir após conclusão",
"repeatOn": "Repetir em"
"repeatOn": "Repetir em",
"deferUntil": "Adiar até"
},
"projectSearchPlaceholder": "Pesquisar ou criar um projeto...",
"noMatchingProjects": "Nenhum projeto correspondente",
@ -460,7 +461,8 @@
"noVerb": "Qual ação específica você precisa realizar? Tente começar com um verbo.",
"vague": "Tente começar com um verbo de ação como \"Ligar\", \"Escrever\", \"Agendar\" ou \"Pesquisar\""
},
"selectAtLeastOneDay": "Por favor, selecione pelo menos um dia"
"selectAtLeastOneDay": "Por favor, selecione pelo menos um dia",
"deferUntilPlaceholder": "Selecione a data e hora para adiar até"
},
"noteTitle": "Título da Nota",
"noteContent": "Conteúdo da Nota",
@ -765,7 +767,11 @@
"parentTask": "Tarefa Pai",
"includingToday": "incluindo hoje",
"has": "tem",
"fromProject": "do projeto"
"fromProject": "do projeto",
"deferUntil": "Adiar até",
"noDeferUntil": "Sem adiamento até",
"deferUntilUpdated": "Adiado até atualizado com sucesso",
"deferUntilUpdateError": "Falha ao atualizar o adiamento até"
},
"projects": {
"loading": "Carregando projetos...",

View file

@ -438,7 +438,8 @@
"weekOfMonth": "Săptămâna lunii",
"recurrenceEndDate": "Data de sfârșit (opțional)",
"completionBased": "Repetare după finalizare",
"repeatOn": "Repetă pe"
"repeatOn": "Repetă pe",
"deferUntil": "Amână până la"
},
"projectSearchPlaceholder": "Caută sau creează un proiect...",
"noMatchingProjects": "Niciun proiect corespunzător",
@ -460,7 +461,8 @@
"noVerb": "Ce acțiune specifică trebuie să întreprinzi? Încercați să începeți cu un verb.",
"vague": "Încercați să începeți cu un verb de acțiune, cum ar fi \"Sună\", \"Scrie\", \"Programează\" sau \"Cercetează\""
},
"selectAtLeastOneDay": "Te rugăm să selectezi cel puțin o zi"
"selectAtLeastOneDay": "Te rugăm să selectezi cel puțin o zi",
"deferUntilPlaceholder": "Selectați data și ora până la care să amânați"
},
"noteTitle": "Titlul notei",
"noteContent": "Conținutul notei",
@ -765,7 +767,11 @@
"parentTask": "Sarcina Părinte",
"includingToday": "inclusiv astăzi",
"has": "are",
"fromProject": "din proiect"
"fromProject": "din proiect",
"deferUntil": "Amână până la",
"noDeferUntil": "Nicio amânare până la",
"deferUntilUpdated": "Amânare până la actualizare cu succes",
"deferUntilUpdateError": "Actualizarea amânării până la a eșuat"
},
"projects": {
"loading": "Se încarcă proiectele...",

View file

@ -438,7 +438,8 @@
"weekOfMonth": "Неделя месяца",
"recurrenceEndDate": "Дата окончания (необязательно)",
"completionBased": "Повторять после завершения",
"repeatOn": "Повторять в"
"repeatOn": "Повторять в",
"deferUntil": "Отложить до"
},
"projectSearchPlaceholder": "Поиск или создание проекта...",
"noMatchingProjects": "Нет подходящих проектов",
@ -460,7 +461,8 @@
"noVerb": "Какое конкретное действие вам нужно предпринять? Попробуйте начать с глагола.",
"vague": "Попробуйте начать с глагола действия, например, \"Позвонить\", \"Написать\", \"Запланировать\" или \"Исследовать\""
},
"selectAtLeastOneDay": "Пожалуйста, выберите хотя бы один день"
"selectAtLeastOneDay": "Пожалуйста, выберите хотя бы один день",
"deferUntilPlaceholder": "Выберите дату и время отложения"
},
"noteTitle": "Название заметки",
"noteContent": "Содержание заметки",
@ -765,7 +767,11 @@
"parentTask": "Родительская задача",
"includingToday": "включая сегодня",
"has": "имеет",
"fromProject": "из проекта"
"fromProject": "из проекта",
"deferUntil": "Отложить до",
"noDeferUntil": "Нет отложения до",
"deferUntilUpdated": "Отложено до обновления успешно",
"deferUntilUpdateError": "Не удалось обновить отложение до"
},
"projects": {
"loading": "Загрузка проектов...",

View file

@ -438,7 +438,8 @@
"weekOfMonth": "Teden v mesecu",
"recurrenceEndDate": "Datum konca (neobvezno)",
"completionBased": "Ponovi po zaključku",
"repeatOn": "Ponovi na"
"repeatOn": "Ponovi na",
"deferUntil": "Odmik do"
},
"projectSearchPlaceholder": "Išči ali ustvari projekt...",
"noMatchingProjects": "Brez ustreznih projektov",
@ -460,7 +461,8 @@
"noVerb": "Katero specifično dejanje morate izvesti? Poskusite začeti z glagolom.",
"vague": "Poskusite začeti z glagolom akcije, kot so \"Pokliči\", \"Napiši\", \"Načrtuj\" ali \"Raziskuj\""
},
"selectAtLeastOneDay": "Prosimo, izberite vsaj en dan"
"selectAtLeastOneDay": "Prosimo, izberite vsaj en dan",
"deferUntilPlaceholder": "Izberite datum in čas odloga"
},
"noteTitle": "Naslov opombe",
"noteContent": "Vsebina opombe",
@ -765,7 +767,11 @@
"parentTask": "Nadrejena naloga",
"includingToday": "vključno s danes",
"has": "ima",
"fromProject": "iz projekta"
"fromProject": "iz projekta",
"deferUntil": "Odmik do",
"noDeferUntil": "Brez odloga do",
"deferUntilUpdated": "Odmik do uspešno posodobljen",
"deferUntilUpdateError": "Posodobitev odloga do ni uspela"
},
"projects": {
"loading": "Nalagam projekte...",

View file

@ -438,7 +438,8 @@
"weekOfMonth": "Vecka i månaden",
"recurrenceEndDate": "Slutdatum (valfritt)",
"completionBased": "Upprepa efter slutförd",
"repeatOn": "Upprepa på"
"repeatOn": "Upprepa på",
"deferUntil": "Skjut upp till"
},
"projectSearchPlaceholder": "Sök eller skapa ett projekt...",
"noMatchingProjects": "Inga matchande projekt",
@ -460,7 +461,8 @@
"noVerb": "Vilken specifik åtgärd behöver du vidta? Försök att börja med ett verb.",
"vague": "Försök att börja med ett handlingsverb som \"Ring\", \"Skriv\", \"Boka\" eller \"Forska\""
},
"selectAtLeastOneDay": "Vänligen välj minst en dag"
"selectAtLeastOneDay": "Vänligen välj minst en dag",
"deferUntilPlaceholder": "Välj datum och tid för uppskjutning"
},
"noteTitle": "Anteckningsitel",
"noteContent": "Anteckningsinnehåll",
@ -765,7 +767,11 @@
"parentTask": "Överordnad uppgift",
"includingToday": "inklusive idag",
"has": "har",
"fromProject": "från projektet"
"fromProject": "från projektet",
"deferUntil": "Skjut upp till",
"noDeferUntil": "Ingen uppskjutning",
"deferUntilUpdated": "Uppskjutning uppdaterad framgångsrikt",
"deferUntilUpdateError": "Misslyckades med att uppdatera uppskjutning"
},
"projects": {
"loading": "Laddar projekt...",

View file

@ -438,7 +438,8 @@
"weekOfMonth": "Ayın Haftası",
"recurrenceEndDate": "Bitiş tarihi (isteğe bağlı)",
"completionBased": "Tamamlandıktan sonra tekrar et",
"repeatOn": "Şu tarihlerde tekrar et"
"repeatOn": "Şu tarihlerde tekrar et",
"deferUntil": "Erteleme Tarihi"
},
"projectSearchPlaceholder": "Proje ara veya oluştur...",
"noMatchingProjects": "Eşleşen proje yok",
@ -460,7 +461,8 @@
"noVerb": "Hangi spesifik eylemi gerçekleştirmeniz gerekiyor? Bir fiille başlamayı deneyin.",
"vague": "\"Ara\", \"Yaz\", \"Planla\" veya \"Araştır\" gibi bir eylem fiili ile başlamayı deneyin"
},
"selectAtLeastOneDay": "Lütfen en az bir gün seçin"
"selectAtLeastOneDay": "Lütfen en az bir gün seçin",
"deferUntilPlaceholder": "Erteleme tarihi ve saatini seçin"
},
"noteTitle": "Not Başlığı",
"noteContent": "Not İçeriği",
@ -765,7 +767,11 @@
"parentTask": "Üst Görev",
"includingToday": "bugün dahil",
"has": "var",
"fromProject": "projeden"
"fromProject": "projeden",
"deferUntil": "Erteleme Tarihi",
"noDeferUntil": "Erteleme yok",
"deferUntilUpdated": "Başarıyla erteleme tarihi güncellendi",
"deferUntilUpdateError": "Erteleme tarihini güncelleme başarısız oldu"
},
"projects": {
"loading": "Projeler yükleniyor...",

View file

@ -257,7 +257,8 @@
"priority": "Пріоритет",
"dueDate": "Термін виконання",
"note": "Примітка",
"repeatOn": "Повторювати в"
"repeatOn": "Повторювати в",
"deferUntil": "Відкласти до"
},
"recurrenceSettings": "Налаштування повторення",
"completionBasedHelp": "Якщо відмічено, наступне завдання буде створене на основі дати завершення замість дати виконання",
@ -280,7 +281,8 @@
"noVerb": "Які конкретні дії ви повинні виконати? Спробуйте почати з дієслова.",
"vague": "Спробуйте почати з дієслова, наприклад \"Зателефонувати\", \"Написати\", \"Запланувати\", або \"Дослідити\""
},
"selectAtLeastOneDay": "Будь ласка, виберіть принаймні один день"
"selectAtLeastOneDay": "Будь ласка, виберіть принаймні один день",
"deferUntilPlaceholder": "Виберіть дату та час для відкладення"
},
"title": "Назва",
"description": "Опис",
@ -745,7 +747,11 @@
"parentTask": "Батьківське завдання",
"includingToday": "включаючи сьогодні",
"has": "має",
"fromProject": "з проєкту"
"fromProject": "з проєкту",
"deferUntil": "Відкласти до",
"noDeferUntil": "Не відкладати до",
"deferUntilUpdated": "Відкладено до успішного оновлення",
"deferUntilUpdateError": "Не вдалося оновити відкладення до"
},
"calendar": {
"month": "Місяць",

View file

@ -438,7 +438,8 @@
"weekOfMonth": "Tuần trong tháng",
"recurrenceEndDate": "Ngày kết thúc (tùy chọn)",
"completionBased": "Lặp lại sau khi hoàn thành",
"repeatOn": "Lặp lại vào"
"repeatOn": "Lặp lại vào",
"deferUntil": "Hoãn đến"
},
"projectSearchPlaceholder": "Tìm kiếm hoặc tạo một dự án...",
"noMatchingProjects": "Không có dự án nào phù hợp",
@ -460,7 +461,8 @@
"noVerb": "Bạn cần thực hiện hành động cụ thể nào? Hãy thử bắt đầu bằng một động từ.",
"vague": "Hãy thử bắt đầu bằng một động từ hành động như \"Gọi\", \"Viết\", \"Lên lịch\", hoặc \"Nghiên cứu\""
},
"selectAtLeastOneDay": "Vui lòng chọn ít nhất một ngày"
"selectAtLeastOneDay": "Vui lòng chọn ít nhất một ngày",
"deferUntilPlaceholder": "Chọn ngày và giờ hoãn đến"
},
"noteTitle": "Tiêu đề ghi chú",
"noteContent": "Nội dung ghi chú",
@ -765,7 +767,11 @@
"parentTask": "Nhiệm vụ Cha",
"includingToday": "bao gồm hôm nay",
"has": "có",
"fromProject": "từ dự án"
"fromProject": "từ dự án",
"deferUntil": "Hoãn đến",
"noDeferUntil": "Không có hoãn đến",
"deferUntilUpdated": "Hoãn đến đã được cập nhật thành công",
"deferUntilUpdateError": "Cập nhật hoãn đến không thành công"
},
"projects": {
"loading": "Đang tải dự án...",

View file

@ -438,7 +438,8 @@
"weekOfMonth": "每月的周",
"recurrenceEndDate": "结束日期(可选)",
"completionBased": "完成后重复",
"repeatOn": "重复于"
"repeatOn": "重复于",
"deferUntil": "延迟至"
},
"projectSearchPlaceholder": "搜索或创建项目...",
"noMatchingProjects": "没有匹配的项目",
@ -460,7 +461,8 @@
"noVerb": "你需要采取什么具体行动?尝试以动词开头。",
"vague": "尝试以动作动词开头,例如 \"打电话\"、\"写\"、\"安排\" 或 \"研究\""
},
"selectAtLeastOneDay": "请至少选择一天"
"selectAtLeastOneDay": "请至少选择一天",
"deferUntilPlaceholder": "选择延迟至的日期和时间"
},
"noteTitle": "笔记标题",
"noteContent": "笔记内容",
@ -765,7 +767,11 @@
"parentTask": "父任务",
"includingToday": "包括今天",
"has": "有",
"fromProject": "来自项目"
"fromProject": "来自项目",
"deferUntil": "延迟至",
"noDeferUntil": "无延迟至",
"deferUntilUpdated": "成功更新延迟至",
"deferUntilUpdateError": "更新延迟至失败"
},
"projects": {
"loading": "加载项目中...",