Fix layout view in today

This commit is contained in:
Chris Veleris 2025-08-04 16:33:50 +03:00 committed by Chris
parent a326e0f3b2
commit e590fec7aa
28 changed files with 784 additions and 239 deletions

View file

@ -160,11 +160,11 @@ const NextTaskSuggestion: React.FC<NextTaskSuggestionProps> = ({
</p>
)}
</div>
<div className="flex items-center space-x-3">
<div className="flex flex-col sm:flex-row items-stretch sm:items-center space-y-2 sm:space-y-0 sm:space-x-3">
<button
onClick={handleStartTask}
disabled={isUpdating}
className="inline-flex items-center px-4 py-2 bg-green-600 hover:bg-green-700 disabled:bg-green-400 text-white text-sm font-medium rounded-md transition-colors"
className="flex items-center justify-center px-4 py-2 bg-green-600 hover:bg-green-700 disabled:bg-green-400 text-white text-sm font-medium rounded-md transition-colors w-full sm:w-auto"
>
<PlayIcon className="h-4 w-4 mr-2" />
{isUpdating
@ -175,7 +175,7 @@ const NextTaskSuggestion: React.FC<NextTaskSuggestionProps> = ({
<button
onClick={handleGiveMeSomethingElse}
disabled={isUpdating}
className="inline-flex items-center px-4 py-2 bg-gray-600 hover:bg-gray-700 disabled:bg-gray-400 text-white text-sm font-medium rounded-md transition-colors"
className="flex items-center justify-center px-4 py-2 bg-gray-600 hover:bg-gray-700 disabled:bg-gray-400 text-white text-sm font-medium rounded-md transition-colors w-full sm:w-auto"
>
<ArrowPathIcon className="h-4 w-4 mr-2" />
{t(

View file

@ -10,6 +10,7 @@ import {
ExclamationTriangleIcon,
ArrowPathIcon,
ListBulletIcon,
XMarkIcon,
} from '@heroicons/react/24/outline';
import ConfirmDialog from '../Shared/ConfirmDialog';
import TaskModal from './TaskModal';
@ -27,6 +28,7 @@ import TaskPriorityIcon from './TaskPriorityIcon';
import LoadingScreen from '../Shared/LoadingScreen';
import MarkdownRenderer from '../Shared/MarkdownRenderer';
import TaskTimeline from './TaskTimeline';
import { isTaskOverdue } from '../../utils/dateUtils';
const TaskDetails: React.FC = () => {
const { uuid } = useParams<{ uuid: string }>();
@ -52,6 +54,8 @@ const TaskDetails: React.FC = () => {
const [taskToDelete, setTaskToDelete] = useState<Task | null>(null);
const [focusSubtasks, setFocusSubtasks] = useState(false);
const [timelineRefreshKey, setTimelineRefreshKey] = useState(0);
const [isOverdueAlertDismissed, setIsOverdueAlertDismissed] =
useState(false);
// Load tags early and check for pending modal state on mount
useEffect(() => {
@ -445,6 +449,42 @@ const TaskDetails: React.FC = () => {
</div>
</div>
{/* Overdue Alert */}
{isTaskOverdue(task) && !isOverdueAlertDismissed && (
<div className="mb-6 mt-6 p-4 bg-amber-50 dark:bg-amber-900/20 border-l-4 border-amber-400 rounded-r-lg relative">
<button
onClick={() => setIsOverdueAlertDismissed(true)}
className="absolute top-2 right-2 p-1 text-amber-600 dark:text-amber-400 hover:text-amber-800 dark:hover:text-amber-200 transition-colors"
aria-label={t('common.close', 'Close')}
>
<XMarkIcon className="h-4 w-4" />
</button>
<div className="flex items-start pr-8">
<ExclamationTriangleIcon className="h-5 w-5 text-amber-600 dark:text-amber-400 mr-3 flex-shrink-0 mt-0.5" />
<div>
<p className="text-sm font-medium text-amber-800 dark:text-amber-200">
{t(
'task.overdueAlert',
"This task was in your plan yesterday and wasn't completed."
)}
</p>
<p className="text-xs text-amber-700 dark:text-amber-300 mt-1">
{task.today_move_count &&
task.today_move_count > 1
? t(
'task.overdueMultipleDays',
`This task has been postponed ${task.today_move_count} times.`
)
: t(
'task.overdueYesterday',
'Consider prioritizing this task or breaking it into smaller steps.'
)}
</p>
</div>
</div>
</div>
)}
{/* Content - Two column layout */}
<div className="mb-8 mt-8">
<div className="grid grid-cols-1 lg:grid-cols-3 gap-8">

View file

@ -1,14 +1,15 @@
import React, { useState, useEffect } from 'react';
import React, { useState, useEffect, useRef } from 'react';
import { createPortal } from 'react-dom';
import { Link } from 'react-router-dom';
import {
CalendarDaysIcon,
CalendarIcon,
PlayIcon,
ArrowPathIcon,
ArrowRightIcon,
ListBulletIcon,
PencilIcon,
TrashIcon,
EllipsisVerticalIcon,
} from '@heroicons/react/24/outline';
import { TagIcon, FolderIcon } from '@heroicons/react/24/solid';
import { useTranslation } from 'react-i18next';
@ -43,7 +44,6 @@ const TaskHeader: React.FC<TaskHeaderProps> = ({
hideProjectName = false,
onToggleToday,
onTaskUpdate,
isOverdue = false,
// Props for subtasks functionality
showSubtasks,
hasSubtasks,
@ -53,6 +53,92 @@ const TaskHeader: React.FC<TaskHeaderProps> = ({
onDelete,
}) => {
const { t } = useTranslation();
const [isDropdownOpen, setIsDropdownOpen] = useState(false);
const [dropdownPosition, setDropdownPosition] = useState({
top: 0,
left: 0,
});
const buttonRef = useRef<HTMLButtonElement>(null);
const dropdownId = useRef(
`dropdown-${Math.random().toString(36).substr(2, 9)}`
).current;
// Calculate dropdown position
const calculateDropdownPosition = () => {
if (buttonRef.current) {
const rect = buttonRef.current.getBoundingClientRect();
const dropdownHeight = 300; // Approximate dropdown height
const dropdownWidth = 192; // w-48 = 192px
const padding = 8; // Padding from screen edges
// Default position: below and to the left of the button
let top = rect.bottom + window.scrollY + 4;
let left = rect.right - dropdownWidth;
// Ensure dropdown doesn't go off the left edge
if (left < padding) {
left = padding;
}
// Ensure dropdown doesn't go off the right edge
if (left + dropdownWidth > window.innerWidth - padding) {
left = window.innerWidth - dropdownWidth - padding;
}
// If dropdown would go below viewport, position it above the button
if (rect.bottom + dropdownHeight > window.innerHeight - padding) {
top = rect.top + window.scrollY - dropdownHeight - 4;
// Ensure it doesn't go above the top of the viewport
if (top < window.scrollY + padding) {
top = window.scrollY + padding;
}
}
const position = { top, left };
setDropdownPosition(position);
}
};
// Close dropdown when clicking outside
useEffect(() => {
const handleClickOutside = (event: MouseEvent) => {
if (isDropdownOpen && buttonRef.current) {
const target = event.target as Node;
const isOutsideButton = !buttonRef.current.contains(target);
const currentDropdown = document.querySelector(
`[data-dropdown-id="${dropdownId}"]`
);
const isOutsideDropdown = !currentDropdown?.contains(target);
if (isOutsideButton && isOutsideDropdown) {
setIsDropdownOpen(false);
}
}
};
// Listen for custom event to close this dropdown when another opens
const handleCloseOtherDropdowns = (event: CustomEvent) => {
if (event.detail.dropdownId !== dropdownId && isDropdownOpen) {
setIsDropdownOpen(false);
}
};
if (isDropdownOpen) {
document.addEventListener('click', handleClickOutside);
document.addEventListener(
'closeOtherDropdowns',
handleCloseOtherDropdowns as EventListener
);
}
return () => {
document.removeEventListener('click', handleClickOutside);
document.removeEventListener(
'closeOtherDropdowns',
handleCloseOtherDropdowns as EventListener
);
};
}, [isDropdownOpen, dropdownId]);
const formatDueDate = (dueDate: string) => {
const today = new Date().toISOString().split('T')[0];
@ -170,12 +256,6 @@ const TaskHeader: React.FC<TaskHeaderProps> = ({
<span className="text-md text-gray-900 dark:text-gray-100">
{task.name}
</span>
{isOverdue && (
<ArrowRightIcon
className="ml-2 h-4 w-4 text-amber-600 dark:text-amber-400 opacity-60"
title="This task was in your plan yesterday and wasn't completed."
/>
)}
</div>
{/* Project, tags, due date, and recurrence in same row, with spacing when they exist */}
<div className="flex items-center text-xs text-gray-500 dark:text-gray-400">
@ -406,17 +486,11 @@ const TaskHeader: React.FC<TaskHeaderProps> = ({
/>
</div>
{/* Task content - 65% width */}
<div className="ml-2 flex-1 w-[65%] min-w-0">
{/* Task content - full width */}
<div className="ml-2 flex-1 min-w-0">
{/* Task Title */}
<div className="font-light text-md text-gray-900 dark:text-gray-100">
<span className="break-words">{task.name}</span>
{isOverdue && (
<ArrowRightIcon
className="ml-2 h-4 w-4 text-amber-600 dark:text-amber-400 opacity-60"
title="This task was in your plan yesterday and wasn't completed."
/>
)}
</div>
{/* Project, tags, due date, and recurrence */}
@ -485,135 +559,170 @@ const TaskHeader: React.FC<TaskHeaderProps> = ({
</div>
</div>
{/* Mobile buttons on the right */}
{/* Mobile 3-dot dropdown menu */}
<div className="flex items-center ml-2">
{/* Button Group - All buttons together - Mobile */}
<div className="flex items-center space-x-1 opacity-0 group-hover:opacity-100 transition-opacity duration-200">
{/* Today Plan Controls - Mobile */}
{onToggleToday && (
<button
type="button"
onClick={handleTodayToggle}
className={`items-center justify-center ${Number(task.today_move_count) > 1 ? 'px-2 h-6' : 'w-6 h-6'} rounded-full transition-all duration-200 ${
task.today
? 'bg-green-100 dark:bg-green-900 text-green-600 dark:text-green-400 hover:bg-green-200 dark:hover:bg-green-800 opacity-100 flex'
: 'bg-gray-100 dark:bg-gray-700 text-gray-600 dark:text-gray-400 hover:bg-gray-200 dark:hover:bg-gray-600 flex'
}`}
title={
task.today
? t(
'tasks.removeFromToday',
'Remove from today plan'
)
: t(
'tasks.addToToday',
'Add to today plan'
)
}
>
{task.today ? (
<CalendarDaysIcon className="h-3 w-3" />
) : (
<CalendarIcon className="h-3 w-3" />
)}
{Number(task.today_move_count) > 1 && (
<span className="ml-1 text-xs font-medium">
{Number(task.today_move_count)}
</span>
)}
</button>
)}
<button
ref={buttonRef}
type="button"
data-dropdown-button
onClick={(e) => {
e.stopPropagation();
const newOpenState = !isDropdownOpen;
{/* Play/In Progress Controls - Mobile */}
{(task.status === 'not_started' ||
task.status === 'in_progress' ||
task.status === 0 ||
task.status === 1) && (
<button
type="button"
onClick={handlePlayToggle}
className={`flex items-center justify-center w-6 h-6 rounded-full transition-all duration-200 ${
task.status === 'in_progress' ||
task.status === 1
? 'bg-green-100 dark:bg-green-900 text-green-600 dark:text-green-400 hover:bg-green-200 dark:hover:bg-green-800 animate-pulse opacity-100'
: 'bg-gray-100 dark:bg-gray-700 text-gray-600 dark:text-gray-400 hover:bg-gray-200 dark:hover:bg-gray-600'
}`}
title={
task.status === 'in_progress' ||
task.status === 1
? t(
'tasks.setNotStarted',
'Set to not started'
)
: t(
'tasks.setInProgress',
'Set in progress'
)
}
>
<PlayIcon className="h-3 w-3" />
</button>
)}
// Close other dropdowns when opening this one
if (newOpenState) {
document.dispatchEvent(
new CustomEvent('closeOtherDropdowns', {
detail: { dropdownId },
})
);
// Calculate position BEFORE opening to prevent blink
calculateDropdownPosition();
}
{/* Show Subtasks Controls - Mobile */}
{hasSubtasks &&
!(
task.status === 'archived' ||
task.status === 3
) && (
<button
type="button"
onClick={(e) => {
if (onSubtasksToggle) {
onSubtasksToggle(e);
}
}}
className={`flex items-center justify-center w-6 h-6 rounded-full transition-all duration-200 ${
showSubtasks
? 'bg-blue-100 dark:bg-blue-900 text-blue-600 dark:text-blue-400 hover:bg-blue-200 dark:hover:bg-blue-800 opacity-100'
: 'bg-gray-100 dark:bg-gray-700 text-gray-600 dark:text-gray-400 hover:bg-gray-200 dark:hover:bg-gray-600'
}`}
title={
showSubtasks
setIsDropdownOpen(newOpenState);
}}
className="flex items-center justify-center w-8 h-8 rounded-full transition-all duration-200 text-gray-600 dark:text-gray-400 hover:bg-gray-100 dark:hover:bg-gray-700"
>
<EllipsisVerticalIcon className="h-5 w-5" />
</button>
</div>
{/* Dropdown Menu - Rendered via Portal */}
{isDropdownOpen &&
createPortal(
<div
data-dropdown-id={dropdownId}
className="fixed w-48 bg-white dark:bg-gray-800 rounded-md shadow-lg border border-gray-200 dark:border-gray-700 z-[9999]"
style={{
top: dropdownPosition.top,
left: dropdownPosition.left,
}}
onClick={(e) => e.stopPropagation()}
>
<div className="py-1">
{/* Today Plan Controls */}
{onToggleToday && (
<button
type="button"
onClick={(e) => {
e.stopPropagation();
handleTodayToggle(e);
setIsDropdownOpen(false);
}}
className="w-full px-4 py-2 text-sm text-left text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-700 flex justify-between items-center"
>
<span>
{task.today
? t(
'tasks.removeFromToday',
'Remove from today plan'
)
: t(
'tasks.addToToday',
'Add to today plan'
)}
</span>
{Number(task.today_move_count) >
1 && (
<span className="text-xs bg-gray-200 dark:bg-gray-600 px-2 py-1 rounded">
{Number(
task.today_move_count
)}
</span>
)}
</button>
)}
{/* Play/In Progress Controls */}
{(task.status === 'not_started' ||
task.status === 'in_progress' ||
task.status === 0 ||
task.status === 1) && (
<button
type="button"
onClick={(e) => {
e.stopPropagation();
handlePlayToggle(e);
setIsDropdownOpen(false);
}}
className="w-full px-4 py-2 text-sm text-left text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-700"
>
{task.status === 'in_progress' ||
task.status === 1
? t(
'tasks.hideSubtasks',
'Hide subtasks'
'tasks.setNotStarted',
'Set to not started'
)
: t(
'tasks.showSubtasks',
'Show subtasks'
)
}
>
<ListBulletIcon className="h-3 w-3" />
</button>
)}
'tasks.setInProgress',
'Set in progress'
)}
</button>
)}
{/* Edit Button - Mobile */}
{onEdit && (
<button
type="button"
onClick={onEdit}
className="flex items-center justify-center w-6 h-6 rounded-full transition-all duration-200 bg-gray-100 dark:bg-gray-700 text-gray-600 dark:text-gray-400 hover:bg-blue-100 dark:hover:bg-blue-800 hover:text-blue-600 dark:hover:text-blue-400"
title={t('tasks.edit', 'Edit task')}
>
<PencilIcon className="h-3 w-3" />
</button>
)}
{/* Show Subtasks Controls */}
{hasSubtasks &&
!(
task.status === 'archived' ||
task.status === 3
) && (
<button
type="button"
onClick={(e) => {
e.stopPropagation();
if (onSubtasksToggle) {
onSubtasksToggle(e);
}
setIsDropdownOpen(false);
}}
className="w-full px-4 py-2 text-sm text-left text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-700"
>
{showSubtasks
? t(
'tasks.hideSubtasks',
'Hide subtasks'
)
: t(
'tasks.showSubtasks',
'Show subtasks'
)}
</button>
)}
{/* Delete Button - Mobile */}
{onDelete && (
<button
type="button"
onClick={onDelete}
className="flex items-center justify-center w-6 h-6 rounded-full transition-all duration-200 bg-gray-100 dark:bg-gray-700 text-gray-600 dark:text-gray-400 hover:bg-red-100 dark:hover:bg-red-800 hover:text-red-600 dark:hover:text-red-400"
title={t('tasks.delete', 'Delete task')}
>
<TrashIcon className="h-3 w-3" />
</button>
)}
</div>
</div>
{/* Edit Button */}
{onEdit && (
<button
type="button"
onClick={(e) => {
e.stopPropagation();
onEdit(e);
setIsDropdownOpen(false);
}}
className="w-full px-4 py-2 text-sm text-left text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-700"
>
{t('tasks.edit', 'Edit task')}
</button>
)}
{/* Delete Button */}
{onDelete && (
<button
type="button"
onClick={(e) => {
e.stopPropagation();
onDelete(e);
setIsDropdownOpen(false);
}}
className="w-full px-4 py-2 text-sm text-left text-red-600 dark:text-red-400 hover:bg-red-50 dark:hover:bg-red-900/20"
>
{t('tasks.delete', 'Delete task')}
</button>
)}
</div>
</div>,
document.body
)}
</div>
</div>
</div>

View file

@ -111,7 +111,11 @@
"addToToday": "إضافة إلى خطة اليوم",
"removeFromToday": "إزالة من خطة اليوم",
"setInProgress": "تعيين قيد التنفيذ",
"setNotStarted": "تعيين لم يبدأ بعد"
"setNotStarted": "تعيين لم يبدأ بعد",
"showSubtasks": "عرض المهام الفرعية",
"hideSubtasks": "إخفاء المهام الفرعية",
"edit": "تعديل المهمة",
"delete": "حذف المهمة"
},
"timeline": {
"activityTimeline": "جدول الأنشطة",
@ -134,7 +138,9 @@
"status": "الحالة",
"priority": "الأولوية",
"dueDate": "تاريخ الاستحقاق",
"none": "لا شيء"
"none": "لا شيء",
"recurrenceEndDateChanged": "تاريخ انتهاء التكرار تم تغييره",
"recurrenceEndDate": "تاريخ انتهاء التكرار"
},
"justNow": "الآن",
"minutesAgo": "{{minutes}} دقيقة مضت",
@ -464,7 +470,9 @@
"archived": "مؤرشف",
"unknown": "غير معروف",
"telegramConnected": "تم الاتصال بتليجرام وجاري الاستطلاع",
"telegramConnectionProblem": "مشكلة في اتصال تليجرام"
"telegramConnectionProblem": "مشكلة في اتصال تليجرام",
"completed": "مكتمل",
"waiting": "في الانتظار"
},
"project": {
"name": "اسم المشروع",
@ -611,7 +619,15 @@
"nameHelper": {
"title": "اجعلها أكثر وصفًا!",
"suggestion": "حاول إضافة المزيد من التفاصيل مثل \"اتصل بطبيب الأسنان لتحديد موعد التنظيف\" بدلاً من \"اتصل بطبيب الأسنان\""
}
},
"overdueAlert": "كانت هذه المهمة في خطتك بالأمس ولم تكتمل.",
"overdueYesterday": "فكر في إعطاء أولوية لهذه المهمة أو تقسيمها إلى خطوات أصغر.",
"overdueMultipleDays": "تم تأجيل هذه المهمة {{count}} مرات.",
"content": "المحتوى",
"noNotes": "لم يتم إضافة محتوى بعد",
"subtasks": "المهام الفرعية",
"noSubtasks": "لا توجد مهام فرعية بعد",
"recentActivity": "النشاط الأخير"
},
"projects": {
"loading": "جارٍ تحميل المشاريع...",

View file

@ -111,7 +111,11 @@
"addToToday": "Добави към плана за днес",
"removeFromToday": "Премахни от плана за днес",
"setInProgress": "Задай в процес",
"setNotStarted": "Задай като не започната"
"setNotStarted": "Задай като не започната",
"showSubtasks": "Покажи подзадачи",
"hideSubtasks": "Скрий подзадачи",
"edit": "Редактиране на задача",
"delete": "Изтриване на задача"
},
"timeline": {
"activityTimeline": "Хронология на активността",
@ -134,7 +138,9 @@
"status": "Статус",
"priority": "Приоритет",
"dueDate": "Срок",
"none": "Няма"
"none": "Няма",
"recurrenceEndDateChanged": "Дата на края на повторението е променена",
"recurrenceEndDate": "Дата на края на повторението"
},
"justNow": "Току-що",
"minutesAgo": "{{minutes}}м. назад",
@ -464,7 +470,9 @@
"archived": "Архивирано",
"unknown": "Неизвестно",
"telegramConnected": "Telegram свързан и проверява",
"telegramConnectionProblem": "Проблем с връзката на Telegram"
"telegramConnectionProblem": "Проблем с връзката на Telegram",
"completed": "Завършено",
"waiting": "В очакване"
},
"project": {
"name": "Име на проекта",
@ -611,7 +619,15 @@
"nameHelper": {
"title": "Направете го по-описателно!",
"suggestion": "Опитайте да добавите повече детайли като \"Обадете се на зъболекаря, за да насрочите час за почистване\" вместо просто \"Обадете се на зъболекаря\""
}
},
"overdueAlert": "Тази задача беше в плана ви вчера и не беше завършена.",
"overdueYesterday": "Помислете за приоритизиране на тази задача или разделянето ѝ на по-малки стъпки.",
"overdueMultipleDays": "Тази задача е отложена {{count}} пъти.",
"content": "Съдържание",
"noNotes": "Все още не е добавено съдържание",
"subtasks": "Подзадачи",
"noSubtasks": "Все още няма подзадачи",
"recentActivity": "Наскоро извършена дейност"
},
"projects": {
"loading": "Зареждане на проекти...",

View file

@ -111,7 +111,11 @@
"addToToday": "Tilføj til dagens plan",
"removeFromToday": "Fjern fra dagens plan",
"setInProgress": "Sæt i gang",
"setNotStarted": "Sæt til ikke startet"
"setNotStarted": "Sæt til ikke startet",
"showSubtasks": "Vis underopgaver",
"hideSubtasks": "Skjul underopgaver",
"edit": "Rediger opgave",
"delete": "Slet opgave"
},
"timeline": {
"activityTimeline": "Aktivitets Tidslinje",
@ -134,7 +138,9 @@
"status": "Status",
"priority": "Prioritet",
"dueDate": "Forfaldsdato",
"none": "Ingen"
"none": "Ingen",
"recurrenceEndDateChanged": "Ændret slutdato for gentagelse",
"recurrenceEndDate": "Slutdato for gentagelse"
},
"justNow": "Lige nu",
"minutesAgo": "{{minutes}}m siden",
@ -464,7 +470,9 @@
"archived": "Arkiveret",
"unknown": "Ukendt",
"telegramConnected": "Telegram tilsluttet og polling",
"telegramConnectionProblem": "Telegram forbindelsesproblem"
"telegramConnectionProblem": "Telegram forbindelsesproblem",
"completed": "Fuldført",
"waiting": "Venter"
},
"project": {
"name": "Projekt Navn",
@ -611,7 +619,15 @@
"nameHelper": {
"title": "Gør det mere beskrivende!",
"suggestion": "Prøv at tilføje flere detaljer som \"Ring til tandlægen for at planlægge rengøringsaftale\" i stedet for bare \"Ring til tandlægen\""
}
},
"overdueAlert": "Denne opgave var i din plan i går og blev ikke fuldført.",
"overdueYesterday": "Overvej at prioritere denne opgave eller opdele den i mindre trin.",
"overdueMultipleDays": "Denne opgave er blevet udsat {{count}} gange.",
"content": "Indhold",
"noNotes": "Ingen indhold tilføjet endnu",
"subtasks": "Underopgaver",
"noSubtasks": "Ingen underopgaver endnu",
"recentActivity": "Seneste aktivitet"
},
"projects": {
"loading": "Indlæser projekter...",

View file

@ -111,7 +111,11 @@
"addNewTask": "Neue Aufgabe hinzufügen",
"metrics": "Metriken",
"setInProgress": "In Bearbeitung setzen",
"setNotStarted": "Auf nicht begonnen setzen"
"setNotStarted": "Auf nicht begonnen setzen",
"showSubtasks": "Unteraufgaben anzeigen",
"hideSubtasks": "Unteraufgaben ausblenden",
"edit": "Aufgabe bearbeiten",
"delete": "Aufgabe löschen"
},
"timeline": {
"activityTimeline": "Aktivitätsverlauf",
@ -134,7 +138,9 @@
"status": "Status",
"priority": "Priorität",
"dueDate": "Fälligkeitsdatum",
"none": "Keine"
"none": "Keine",
"recurrenceEndDateChanged": "Das Enddatum der Wiederholung wurde geändert",
"recurrenceEndDate": "Enddatum der Wiederholung"
},
"justNow": "Gerade eben",
"minutesAgo": "{{minutes}}m her",
@ -550,7 +556,15 @@
"updated": "Aufgabe",
"updatedSuccessfully": "erfolgreich aktualisiert!",
"deleted": "Aufgabe",
"deletedSuccessfully": "erfolgreich gelöscht!"
"deletedSuccessfully": "erfolgreich gelöscht!",
"overdueAlert": "Diese Aufgabe war gestern in Ihrem Plan und wurde nicht abgeschlossen.",
"overdueYesterday": "Erwägen Sie, diese Aufgabe zu priorisieren oder in kleinere Schritte zu unterteilen.",
"overdueMultipleDays": "Diese Aufgabe wurde {{count}} Mal verschoben.",
"content": "Inhalt",
"noNotes": "Noch kein Inhalt hinzugefügt",
"subtasks": "Unteraufgaben",
"noSubtasks": "Noch keine Unteraufgaben",
"recentActivity": "Aktuelle Aktivitäten"
},
"calendar": {
"month": "Monat",
@ -674,7 +688,9 @@
"archived": "Archiviert",
"unknown": "Unbekannt",
"telegramConnected": "Telegram verbunden und abfragt",
"telegramConnectionProblem": "Telegram-Verbindungsproblem"
"telegramConnectionProblem": "Telegram-Verbindungsproblem",
"completed": "Abgeschlossen",
"waiting": "Warten"
},
"dateIndicators": {
"today": "HEUTE",

View file

@ -306,7 +306,11 @@
"addToToday": "Προσθήκη στο σημερινό σχέδιο",
"removeFromToday": "Αφαίρεση από το σημερινό σχέδιο",
"setInProgress": "Ορισμός ως 'Σε Εξέλιξη'",
"setNotStarted": "Ορισμός ως 'Δεν Έχει Ξεκινήσει'"
"setNotStarted": "Ορισμός ως 'Δεν Έχει Ξεκινήσει'",
"showSubtasks": "Εμφάνιση υποκαθηκόντων",
"hideSubtasks": "Απόκρυψη υποκαθηκόντων",
"edit": "Επεξεργασία καθήκοντος",
"delete": "Διαγραφή καθήκοντος"
},
"timeline": {
"activityTimeline": "Χρονοδιάγραμμα Δραστηριότητας",
@ -329,7 +333,9 @@
"status": "Κατάσταση",
"priority": "Προτεραιότητα",
"dueDate": "Ημερομηνία λήξης",
"none": "Καμία"
"none": "Καμία",
"recurrenceEndDateChanged": "Η ημερομηνία λήξης επανάληψης άλλαξε",
"recurrenceEndDate": "Η ημερομηνία λήξης επανάληψης"
},
"justNow": "Μόλις τώρα",
"minutesAgo": "{{minutes}} λεπτά πριν",
@ -526,7 +532,9 @@
"archived": "Αρχειοθετημένο",
"unknown": "Άγνωστο",
"telegramConnected": "Το Telegram είναι συνδεδεμένο και αναζητά",
"telegramConnectionProblem": "Πρόβλημα σύνδεσης με το Telegram"
"telegramConnectionProblem": "Πρόβλημα σύνδεσης με το Telegram",
"completed": "Ολοκληρώθηκε",
"waiting": "Σε αναμονή"
},
"task": {
"labels": {
@ -564,7 +572,15 @@
"updated": "Εργασία",
"updatedSuccessfully": "ενημερώθηκε επιτυχώς!",
"deleted": "Εργασία",
"deletedSuccessfully": "διαγράφηκε επιτυχώς!"
"deletedSuccessfully": "διαγράφηκε επιτυχώς!",
"overdueAlert": "Αυτή η εργασία ήταν στο σχέδιο σας χθες και δεν ολοκληρώθηκε.",
"overdueYesterday": "Σκεφτείτε να δώσετε προτεραιότητα σε αυτή την εργασία ή να την χωρίσετε σε μικρότερα βήματα.",
"overdueMultipleDays": "Αυτή η εργασία έχει αναβληθεί {{count}} φορές.",
"content": "Περιεχόμενο",
"noNotes": "Δεν έχει προστεθεί περιεχόμενο ακόμα",
"subtasks": "Υποεργασίες",
"noSubtasks": "Δεν υπάρχουν υποεργασίες ακόμα",
"recentActivity": "Πρόσφατη Δραστηριότητα"
},
"dateFormats": {
"long": "EEEE, d MMMM yyyy",

View file

@ -111,7 +111,11 @@
"addToToday": "Add to today plan",
"removeFromToday": "Remove from today plan",
"setInProgress": "Set in progress",
"setNotStarted": "Set to not started"
"setNotStarted": "Set to not started",
"showSubtasks": "Show subtasks",
"hideSubtasks": "Hide subtasks",
"edit": "Edit task",
"delete": "Delete task"
},
"timeline": {
"activityTimeline": "Activity Timeline",
@ -621,7 +625,15 @@
"nameHelper": {
"title": "Make it more descriptive!",
"suggestion": "Try adding more details like \"Call dentist to schedule cleaning appointment\" instead of just \"Call dentist\""
}
},
"overdueAlert": "This task was in your plan yesterday and wasn't completed.",
"overdueYesterday": "Consider prioritizing this task or breaking it into smaller steps.",
"overdueMultipleDays": "This task has been postponed {{count}} times.",
"content": "Content",
"noNotes": "No content added yet",
"subtasks": "Subtasks",
"noSubtasks": "No subtasks yet",
"recentActivity": "Recent Activity"
},
"projects": {
"loading": "Loading projects...",

View file

@ -306,7 +306,11 @@
"tasksCompleted": "tareas completadas",
"metrics": "Métricas",
"setInProgress": "Establecer en progreso",
"setNotStarted": "Establecer como no iniciado"
"setNotStarted": "Establecer como no iniciado",
"showSubtasks": "Mostrar subtareas",
"hideSubtasks": "Ocultar subtareas",
"edit": "Editar tarea",
"delete": "Eliminar tarea"
},
"timeline": {
"activityTimeline": "Línea de Tiempo de Actividad",
@ -329,7 +333,9 @@
"status": "Estado",
"priority": "Prioridad",
"dueDate": "Fecha de vencimiento",
"none": "Ninguno"
"none": "Ninguno",
"recurrenceEndDateChanged": "Fecha de finalización de la recurrencia cambiada",
"recurrenceEndDate": "Fecha de finalización de la recurrencia"
},
"justNow": "Justo ahora",
"minutesAgo": "{{minutes}}m hace",
@ -520,7 +526,9 @@
"archived": "Archivado",
"unknown": "Desconocido",
"telegramConnected": "Telegram conectado y sondeando",
"telegramConnectionProblem": "Problema de conexión de Telegram"
"telegramConnectionProblem": "Problema de conexión de Telegram",
"completed": "Completado",
"waiting": "Esperando"
},
"project": {
"name": "Nombre del Proyecto",
@ -564,7 +572,15 @@
"updated": "Tarea",
"updatedSuccessfully": "actualizada con éxito!",
"deleted": "Tarea",
"deletedSuccessfully": "eliminada con éxito!"
"deletedSuccessfully": "eliminada con éxito!",
"overdueAlert": "Esta tarea estaba en tu plan ayer y no se completó.",
"overdueYesterday": "Considera priorizar esta tarea o dividirla en pasos más pequeños.",
"overdueMultipleDays": "Esta tarea ha sido pospuesta {{count}} veces.",
"content": "Contenido",
"noNotes": "No se ha añadido contenido aún",
"subtasks": "Subtareas",
"noSubtasks": "No hay subtareas aún",
"recentActivity": "Actividad Reciente"
},
"dateIndicators": {
"today": "HOY",

View file

@ -111,7 +111,11 @@
"addToToday": "Lisää tänään suunnitelmaan",
"removeFromToday": "Poista tänään suunnitelmasta",
"setInProgress": "Aseta käynnissä olevaksi",
"setNotStarted": "Aseta aloittamatta"
"setNotStarted": "Aseta aloittamatta",
"showSubtasks": "Näytä alitehtävät",
"hideSubtasks": "Piilota alitehtävät",
"edit": "Muokkaa tehtävää",
"delete": "Poista tehtävä"
},
"timeline": {
"activityTimeline": "Toiminta-aikajana",
@ -134,7 +138,9 @@
"status": "Tila",
"priority": "Prioriteetti",
"dueDate": "Eräpäivä",
"none": "Ei mitään"
"none": "Ei mitään",
"recurrenceEndDateChanged": "Toistuvuuden päättymispäivämäärä on muuttunut",
"recurrenceEndDate": "Toistuvuuden päättymispäivämäärä"
},
"justNow": "Juuri nyt",
"minutesAgo": "{{minutes}}m sitten",
@ -464,7 +470,9 @@
"archived": "Arkistoitu",
"unknown": "Tuntematon",
"telegramConnected": "Telegram yhdistetty ja kyselyssä",
"telegramConnectionProblem": "Telegram-yhteysongelma"
"telegramConnectionProblem": "Telegram-yhteysongelma",
"completed": "Valmis",
"waiting": "Odottaa"
},
"project": {
"name": "Projektin nimi",
@ -611,7 +619,15 @@
"nameHelper": {
"title": "Tee siitä kuvaavampi!",
"suggestion": "Yritä lisätä enemmän yksityiskohtia, kuten \"Soita hammaslääkärille aikatauluttaaksesi puhdistusajan\" sen sijaan, että sanoisit vain \"Soita hammaslääkärille\""
}
},
"overdueAlert": "Tämä tehtävä oli suunnitelmassasi eilen eikä sitä ole suoritettu.",
"overdueYesterday": "Harkitse tämän tehtävän priorisoimista tai jakamista pienempiin vaiheisiin.",
"overdueMultipleDays": "Tätä tehtävää on siirretty {{count}} kertaa.",
"content": "Sisältö",
"noNotes": "Ei vielä lisättyä sisältöä",
"subtasks": "Ala-tehtävät",
"noSubtasks": "Ei vielä ala-tehtäviä",
"recentActivity": "Viimeaikainen toiminta"
},
"projects": {
"loading": "Ladataan projekteja...",

View file

@ -111,7 +111,11 @@
"addToToday": "Ajouter au plan d'aujourd'hui",
"removeFromToday": "Retirer du plan d'aujourd'hui",
"setInProgress": "Définir en cours",
"setNotStarted": "Définir comme non commencé"
"setNotStarted": "Définir comme non commencé",
"showSubtasks": "Afficher les sous-tâches",
"hideSubtasks": "Masquer les sous-tâches",
"edit": "Modifier la tâche",
"delete": "Supprimer la tâche"
},
"timeline": {
"activityTimeline": "Chronologie d'Activité",
@ -134,7 +138,9 @@
"status": "Statut",
"priority": "Priorité",
"dueDate": "Date d'échéance",
"none": "Aucun"
"none": "Aucun",
"recurrenceEndDateChanged": "Date de fin de récurrence modifiée",
"recurrenceEndDate": "Date de fin de récurrence"
},
"justNow": "À l'instant",
"minutesAgo": "{{minutes}}m auparavant",
@ -464,7 +470,9 @@
"archived": "Archivé",
"unknown": "Inconnu",
"telegramConnected": "Telegram connecté et en cours de sondage",
"telegramConnectionProblem": "Problème de connexion à Telegram"
"telegramConnectionProblem": "Problème de connexion à Telegram",
"completed": "Terminé",
"waiting": "En attente"
},
"project": {
"name": "Nom du projet",
@ -611,7 +619,15 @@
"nameHelper": {
"title": "Rendez-le plus descriptif !",
"suggestion": "Essayez d'ajouter plus de détails comme \"Appeler le dentiste pour prendre un rendez-vous de nettoyage\" au lieu de simplement \"Appeler le dentiste\""
}
},
"overdueAlert": "Cette tâche était dans votre plan hier et n'a pas été complétée.",
"overdueYesterday": "Envisagez de prioriser cette tâche ou de la décomposer en étapes plus petites.",
"overdueMultipleDays": "Cette tâche a été reportée {{count}} fois.",
"content": "Contenu",
"noNotes": "Aucun contenu ajouté pour le moment",
"subtasks": "Sous-tâches",
"noSubtasks": "Aucune sous-tâche pour le moment",
"recentActivity": "Activité récente"
},
"projects": {
"loading": "Chargement des projets...",

View file

@ -111,7 +111,11 @@
"addToToday": "Tambahkan ke rencana hari ini",
"removeFromToday": "Hapus dari rencana hari ini",
"setInProgress": "Tandai sebagai sedang berlangsung",
"setNotStarted": "Tandai sebagai belum dimulai"
"setNotStarted": "Tandai sebagai belum dimulai",
"showSubtasks": "Tampilkan subtugas",
"hideSubtasks": "Sembunyikan subtugas",
"edit": "Edit tugas",
"delete": "Hapus tugas"
},
"timeline": {
"activityTimeline": "Garis Waktu Aktivitas",
@ -134,7 +138,9 @@
"status": "Status",
"priority": "Prioritas",
"dueDate": "Tanggal jatuh tempo",
"none": "Tidak ada"
"none": "Tidak ada",
"recurrenceEndDateChanged": "Tanggal akhir pengulangan telah diubah",
"recurrenceEndDate": "Tanggal akhir pengulangan"
},
"justNow": "Baru saja",
"minutesAgo": "{{minutes}}m yang lalu",
@ -464,7 +470,9 @@
"archived": "Arsip",
"unknown": "Tidak Diketahui",
"telegramConnected": "Telegram terhubung dan memeriksa",
"telegramConnectionProblem": "Masalah koneksi Telegram"
"telegramConnectionProblem": "Masalah koneksi Telegram",
"completed": "Selesai",
"waiting": "Menunggu"
},
"project": {
"name": "Nama Proyek",
@ -611,7 +619,15 @@
"nameHelper": {
"title": "Buat lebih deskriptif!",
"suggestion": "Cobalah menambahkan lebih banyak detail seperti \"Hubungi dokter gigi untuk menjadwalkan janji pembersihan\" alih-alih hanya \"Hubungi dokter gigi\""
}
},
"overdueAlert": "Tugas ini ada dalam rencana Anda kemarin dan belum diselesaikan.",
"overdueYesterday": "Pertimbangkan untuk memprioritaskan tugas ini atau membaginya menjadi langkah-langkah yang lebih kecil.",
"overdueMultipleDays": "Tugas ini telah ditunda {{count}} kali.",
"content": "Konten",
"noNotes": "Belum ada konten yang ditambahkan",
"subtasks": "Subtugas",
"noSubtasks": "Belum ada subtugas",
"recentActivity": "Aktivitas Terbaru"
},
"projects": {
"loading": "Memuat proyek...",

View file

@ -111,7 +111,11 @@
"addToToday": "Aggiungi al piano di oggi",
"removeFromToday": "Rimuovi dal piano di oggi",
"setInProgress": "Imposta in corso",
"setNotStarted": "Imposta come non iniziata"
"setNotStarted": "Imposta come non iniziata",
"showSubtasks": "Mostra sottocompiti",
"hideSubtasks": "Nascondi sottocompiti",
"edit": "Modifica attività",
"delete": "Elimina attività"
},
"timeline": {
"activityTimeline": "Timeline delle Attività",
@ -134,7 +138,9 @@
"status": "Stato",
"priority": "Priorità",
"dueDate": "Data di scadenza",
"none": "Nessuno"
"none": "Nessuno",
"recurrenceEndDateChanged": "Data di fine ricorrenza cambiata",
"recurrenceEndDate": "Data di fine ricorrenza"
},
"justNow": "Proprio adesso",
"minutesAgo": "{{minutes}}m fa",
@ -464,7 +470,9 @@
"archived": "Archiviata",
"unknown": "Sconosciuto",
"telegramConnected": "Telegram connesso e in polling",
"telegramConnectionProblem": "Problema di connessione a Telegram"
"telegramConnectionProblem": "Problema di connessione a Telegram",
"completed": "Completato",
"waiting": "In attesa"
},
"project": {
"name": "Nome Progetto",
@ -612,7 +620,15 @@
"nameHelper": {
"title": "Rendila più descrittiva!",
"suggestion": "Prova ad aggiungere più dettagli come \"Chiamare il dentista per programmare l'appuntamento per la pulizia\" invece di solo \"Chiamare il dentista\""
}
},
"overdueAlert": "Questo compito era nel tuo piano ieri e non è stato completato.",
"overdueYesterday": "Considera di dare priorità a questo compito o di suddividerlo in passaggi più piccoli.",
"overdueMultipleDays": "Questo compito è stato posticipato {{count}} volte.",
"content": "Contenuto",
"noNotes": "Nessun contenuto aggiunto ancora",
"subtasks": "Sottocompiti",
"noSubtasks": "Nessun sottocompito ancora",
"recentActivity": "Attività recente"
},
"projects": {
"loading": "Caricamento progetti...",

View file

@ -111,7 +111,11 @@
"tasksCompleted": "タスク完了",
"metrics": "メトリクス",
"setInProgress": "進行中に設定",
"setNotStarted": "未開始に設定"
"setNotStarted": "未開始に設定",
"showSubtasks": "サブタスクを表示",
"hideSubtasks": "サブタスクを非表示",
"edit": "タスクを編集",
"delete": "タスクを削除"
},
"timeline": {
"activityTimeline": "アクティビティタイムライン",
@ -134,7 +138,9 @@
"status": "ステータス",
"priority": "優先度",
"dueDate": "期限",
"none": "なし"
"none": "なし",
"recurrenceEndDateChanged": "繰り返し終了日が変更されました",
"recurrenceEndDate": "繰り返し終了日"
},
"justNow": "たった今",
"minutesAgo": "{{minutes}}分前",
@ -666,7 +672,15 @@
"updated": "タスク",
"updatedSuccessfully": "が正常に更新されました!",
"deleted": "タスク",
"deletedSuccessfully": "が正常に削除されました!"
"deletedSuccessfully": "が正常に削除されました!",
"overdueAlert": "このタスクは昨日の計画に含まれていましたが、完了していません。",
"overdueYesterday": "このタスクを優先するか、より小さなステップに分けることを検討してください。",
"overdueMultipleDays": "このタスクは{{count}}回延期されています。",
"content": "内容",
"noNotes": "まだ内容が追加されていません",
"subtasks": "サブタスク",
"noSubtasks": "まだサブタスクはありません",
"recentActivity": "最近の活動"
},
"calendar": {
"month": "月",
@ -738,7 +752,9 @@
"archived": "アーカイブ",
"unknown": "不明",
"telegramConnected": "Telegramが接続され、ポーリング中",
"telegramConnectionProblem": "Telegram接続の問題"
"telegramConnectionProblem": "Telegram接続の問題",
"completed": "完了",
"waiting": "待機中"
},
"dateIndicators": {
"today": "今日",

View file

@ -111,7 +111,11 @@
"addToToday": "오늘 계획에 추가",
"removeFromToday": "오늘 계획에서 제거",
"setInProgress": "진행 중으로 설정",
"setNotStarted": "시작되지 않음으로 설정"
"setNotStarted": "시작되지 않음으로 설정",
"showSubtasks": "하위 작업 표시",
"hideSubtasks": "하위 작업 숨기기",
"edit": "작업 편집",
"delete": "작업 삭제"
},
"timeline": {
"activityTimeline": "활동 타임라인",
@ -134,7 +138,9 @@
"status": "상태",
"priority": "우선순위",
"dueDate": "마감일",
"none": "없음"
"none": "없음",
"recurrenceEndDateChanged": "반복 종료 날짜가 변경되었습니다",
"recurrenceEndDate": "반복 종료 날짜"
},
"justNow": "방금",
"minutesAgo": "{{minutes}}분 전",
@ -464,7 +470,9 @@
"archived": "보관됨",
"unknown": "알 수 없음",
"telegramConnected": "텔레그램 연결됨 및 폴링 중",
"telegramConnectionProblem": "텔레그램 연결 문제"
"telegramConnectionProblem": "텔레그램 연결 문제",
"completed": "완료됨",
"waiting": "대기 중"
},
"project": {
"name": "프로젝트 이름",
@ -611,7 +619,15 @@
"nameHelper": {
"title": "더 설명적으로 만들어 보세요!",
"suggestion": "\"치과에 전화하여 청소 예약하기\"와 같은 더 많은 세부정보를 추가해 보세요. 단순히 \"치과에 전화하기\" 대신에요."
}
},
"overdueAlert": "이 작업은 어제 귀하의 계획에 있었으나 완료되지 않았습니다.",
"overdueYesterday": "이 작업의 우선 순위를 정하거나 더 작은 단계로 나누는 것을 고려해 보세요.",
"overdueMultipleDays": "이 작업은 {{count}} 번 연기되었습니다.",
"content": "내용",
"noNotes": "아직 추가된 내용이 없습니다",
"subtasks": "하위 작업",
"noSubtasks": "아직 하위 작업이 없습니다",
"recentActivity": "최근 활동"
},
"projects": {
"loading": "프로젝트 로딩 중...",

View file

@ -111,7 +111,11 @@
"addToToday": "Toevoegen aan het plan van vandaag",
"removeFromToday": "Verwijderen van het plan van vandaag",
"setInProgress": "Instellen op in uitvoering",
"setNotStarted": "Instellen op niet gestart"
"setNotStarted": "Instellen op niet gestart",
"showSubtasks": "Toon subtaken",
"hideSubtasks": "Verberg subtaken",
"edit": "Bewerk taak",
"delete": "Verwijder taak"
},
"timeline": {
"activityTimeline": "Activiteit Tijdlijn",
@ -134,7 +138,9 @@
"status": "Status",
"priority": "Prioriteit",
"dueDate": "Vervaldatum",
"none": "Geen"
"none": "Geen",
"recurrenceEndDateChanged": "Einddatum van herhaling gewijzigd",
"recurrenceEndDate": "Einddatum van herhaling"
},
"justNow": "Net nu",
"minutesAgo": "{{minutes}}m geleden",
@ -464,7 +470,9 @@
"archived": "Gearchiveerd",
"unknown": "Onbekend",
"telegramConnected": "Telegram verbonden en aan het polleren",
"telegramConnectionProblem": "Probleem met Telegram-verbinding"
"telegramConnectionProblem": "Probleem met Telegram-verbinding",
"completed": "Voltooid",
"waiting": "Wachten"
},
"project": {
"name": "Projectnaam",
@ -611,7 +619,15 @@
"nameHelper": {
"title": "Maak het beschrijvender!",
"suggestion": "Probeer meer details toe te voegen zoals \"Bel de tandarts om een afspraak voor een reiniging te plannen\" in plaats van alleen \"Bel de tandarts\""
}
},
"overdueAlert": "Deze taak stond gisteren in je planning en is niet voltooid.",
"overdueYesterday": "Overweeg deze taak prioriteit te geven of deze in kleinere stappen op te splitsen.",
"overdueMultipleDays": "Deze taak is {{count}} keer uitgesteld.",
"content": "Inhoud",
"noNotes": "Nog geen inhoud toegevoegd",
"subtasks": "Subtaken",
"noSubtasks": "Nog geen subtaken",
"recentActivity": "Recente Activiteit"
},
"projects": {
"loading": "Projecten laden...",

View file

@ -111,7 +111,11 @@
"addToToday": "Legg til i dagens plan",
"removeFromToday": "Fjern fra dagens plan",
"setInProgress": "Sett i gang",
"setNotStarted": "Sett til ikke startet"
"setNotStarted": "Sett til ikke startet",
"showSubtasks": "Vis undertasker",
"hideSubtasks": "Skjul undertasker",
"edit": "Rediger oppgave",
"delete": "Slett oppgave"
},
"timeline": {
"activityTimeline": "Aktivitetslinje",
@ -134,7 +138,9 @@
"status": "Status",
"priority": "Prioritet",
"dueDate": "Forfallsdato",
"none": "Ingen"
"none": "Ingen",
"recurrenceEndDateChanged": "Endringsdato for gjentakelse endret",
"recurrenceEndDate": "Endringsdato for gjentakelse"
},
"justNow": "Akkurat nå",
"minutesAgo": "{{minutes}}m siden",
@ -464,7 +470,9 @@
"archived": "Arkivert",
"unknown": "Ukjent",
"telegramConnected": "Telegram tilkoblet og henter data",
"telegramConnectionProblem": "Telegram tilkoblingsproblem"
"telegramConnectionProblem": "Telegram tilkoblingsproblem",
"completed": "Fullført",
"waiting": "Venter"
},
"project": {
"name": "Prosjektnavn",
@ -611,7 +619,15 @@
"nameHelper": {
"title": "Gjør det mer beskrivende!",
"suggestion": "Prøv å legge til flere detaljer som \"Ring tannlegen for å avtale rengjøringsavtale\" i stedet for bare \"Ring tannlegen\""
}
},
"overdueAlert": "Denne oppgaven var i planen din i går og ble ikke fullført.",
"overdueYesterday": "Vurder å prioritere denne oppgaven eller dele den opp i mindre trinn.",
"overdueMultipleDays": "Denne oppgaven har blitt utsatt {{count}} ganger.",
"content": "Innhold",
"noNotes": "Ingen innhold lagt til ennå",
"subtasks": "Undertasker",
"noSubtasks": "Ingen undertasker ennå",
"recentActivity": "Nylig aktivitet"
},
"projects": {
"loading": "Laster prosjekter...",

View file

@ -111,7 +111,11 @@
"addToToday": "Dodaj do planu na dzisiaj",
"removeFromToday": "Usuń z planu na dzisiaj",
"setInProgress": "Ustaw jako w trakcie",
"setNotStarted": "Ustaw jako nie rozpoczęte"
"setNotStarted": "Ustaw jako nie rozpoczęte",
"showSubtasks": "Pokaż podzadania",
"hideSubtasks": "Ukryj podzadania",
"edit": "Edytuj zadanie",
"delete": "Usuń zadanie"
},
"timeline": {
"activityTimeline": "Oś czasu aktywności",
@ -134,7 +138,9 @@
"status": "Status",
"priority": "Priorytet",
"dueDate": "Termin",
"none": "Brak"
"none": "Brak",
"recurrenceEndDateChanged": "Data zakończenia powtarzania została zmieniona",
"recurrenceEndDate": "Data zakończenia powtarzania"
},
"justNow": "Właśnie teraz",
"minutesAgo": "{{minutes}}m temu",
@ -464,7 +470,9 @@
"archived": "Zarchiwizowane",
"unknown": "Nieznany",
"telegramConnected": "Telegram połączony i sprawdzanie",
"telegramConnectionProblem": "Problem z połączeniem Telegram"
"telegramConnectionProblem": "Problem z połączeniem Telegram",
"completed": "Zakończone",
"waiting": "Oczekiwanie"
},
"project": {
"name": "Nazwa projektu",
@ -611,7 +619,15 @@
"nameHelper": {
"title": "Uczyń to bardziej opisowym!",
"suggestion": "Spróbuj dodać więcej szczegółów, takich jak \"Zadzwoń do dentysty, aby umówić się na wizytę na czyszczenie\" zamiast po prostu \"Zadzwoń do dentysty\""
}
},
"overdueAlert": "To zadanie było w Twoim planie wczoraj i nie zostało ukończone.",
"overdueYesterday": "Rozważ nadanie priorytetu temu zadaniu lub podzielenie go na mniejsze kroki.",
"overdueMultipleDays": "To zadanie zostało odłożone {{count}} razy.",
"content": "Treść",
"noNotes": "Nie dodano jeszcze treści",
"subtasks": "Podzadania",
"noSubtasks": "Brak podzadań",
"recentActivity": "Ostatnia aktywność"
},
"projects": {
"loading": "Ładowanie projektów...",

View file

@ -111,7 +111,11 @@
"addToToday": "Adicionar ao plano de hoje",
"removeFromToday": "Remover do plano de hoje",
"setInProgress": "Definir como em progresso",
"setNotStarted": "Definir como não iniciado"
"setNotStarted": "Definir como não iniciado",
"showSubtasks": "Mostrar subtarefas",
"hideSubtasks": "Ocultar subtarefas",
"edit": "Editar tarefa",
"delete": "Excluir tarefa"
},
"timeline": {
"activityTimeline": "Linha do Tempo de Atividades",
@ -134,7 +138,9 @@
"status": "Status",
"priority": "Prioridade",
"dueDate": "Data de vencimento",
"none": "Nenhum"
"none": "Nenhum",
"recurrenceEndDateChanged": "Data de término da recorrência alterada",
"recurrenceEndDate": "Data de término da recorrência"
},
"justNow": "Agora mesmo",
"minutesAgo": "{{minutes}}m atrás",
@ -464,7 +470,9 @@
"archived": "Arquivado",
"unknown": "Desconhecido",
"telegramConnected": "Telegram conectado e recebendo dados",
"telegramConnectionProblem": "Problema de conexão com o Telegram"
"telegramConnectionProblem": "Problema de conexão com o Telegram",
"completed": "Concluído",
"waiting": "Aguardando"
},
"project": {
"name": "Nome do Projeto",
@ -611,7 +619,15 @@
"nameHelper": {
"title": "Torne-o mais descritivo!",
"suggestion": "Tente adicionar mais detalhes como \"Ligar para o dentista para agendar a limpeza\" em vez de apenas \"Ligar para o dentista\""
}
},
"overdueAlert": "Esta tarefa estava no seu plano ontem e não foi concluída.",
"overdueYesterday": "Considere priorizar esta tarefa ou dividi-la em etapas menores.",
"overdueMultipleDays": "Esta tarefa foi adiada {{count}} vezes.",
"content": "Conteúdo",
"noNotes": "Nenhum conteúdo adicionado ainda",
"subtasks": "Subtarefas",
"noSubtasks": "Nenhuma subtarefa ainda",
"recentActivity": "Atividade Recente"
},
"projects": {
"loading": "Carregando projetos...",

View file

@ -111,7 +111,11 @@
"addToToday": "Adaugă la planul de astăzi",
"removeFromToday": "Elimină din planul de astăzi",
"setInProgress": "Setează în desfășurare",
"setNotStarted": "Setează ca neluat în lucru"
"setNotStarted": "Setează ca neluat în lucru",
"showSubtasks": "Arată subtask-uri",
"hideSubtasks": "Ascunde subtask-uri",
"edit": "Editează task-ul",
"delete": "Șterge task-ul"
},
"timeline": {
"activityTimeline": "Cronologia activităților",
@ -134,7 +138,9 @@
"status": "Status",
"priority": "Prioritate",
"dueDate": "Data limită",
"none": "Niciunul"
"none": "Niciunul",
"recurrenceEndDateChanged": "Data de încheiere a recurenței a fost modificată",
"recurrenceEndDate": "Data de încheiere a recurenței"
},
"justNow": "Chiar acum",
"minutesAgo": "{{minutes}}m în urmă",
@ -464,7 +470,9 @@
"archived": "Arhivat",
"unknown": "Necunoscut",
"telegramConnected": "Telegram conectat și polling",
"telegramConnectionProblem": "Problemă de conectare Telegram"
"telegramConnectionProblem": "Problemă de conectare Telegram",
"completed": "Finalizat",
"waiting": "În așteptare"
},
"project": {
"name": "Numele Proiectului",
@ -611,7 +619,15 @@
"nameHelper": {
"title": "Faceți-l mai descriptiv!",
"suggestion": "Încercați să adăugați mai multe detalii, cum ar fi \"Sunați dentistul pentru a programa o întâlnire pentru curățare\" în loc de doar \"Sunați dentistul\""
}
},
"overdueAlert": "Această sarcină a fost în planul tău ieri și nu a fost finalizată.",
"overdueYesterday": "Ia în considerare prioritizarea acestei sarcini sau împărțirea ei în pași mai mici.",
"overdueMultipleDays": "Această sarcină a fost amânată de {{count}} ori.",
"content": "Conținut",
"noNotes": "Nu a fost adăugat încă niciun conținut",
"subtasks": "Subsarci",
"noSubtasks": "Nu există subsarci încă",
"recentActivity": "Activitate recentă"
},
"projects": {
"loading": "Se încarcă proiectele...",

View file

@ -111,7 +111,11 @@
"addToToday": "Добавить в план на сегодня",
"removeFromToday": "Удалить из плана на сегодня",
"setInProgress": "Установить в процессе",
"setNotStarted": "Установить как не начатую"
"setNotStarted": "Установить как не начатую",
"showSubtasks": "Показать подзадачи",
"hideSubtasks": "Скрыть подзадачи",
"edit": "Редактировать задачу",
"delete": "Удалить задачу"
},
"timeline": {
"activityTimeline": "Хронология активности",
@ -134,7 +138,9 @@
"status": "Статус",
"priority": "Приоритет",
"dueDate": "Срок выполнения",
"none": "Нет"
"none": "Нет",
"recurrenceEndDateChanged": "Дата окончания повторения изменена",
"recurrenceEndDate": "Дата окончания повторения"
},
"justNow": "Только что",
"minutesAgo": "{{minutes}}м назад",
@ -464,7 +470,9 @@
"archived": "Архивировано",
"unknown": "Неизвестно",
"telegramConnected": "Telegram подключен и опрашивает",
"telegramConnectionProblem": "Проблема с подключением Telegram"
"telegramConnectionProblem": "Проблема с подключением Telegram",
"completed": "Завершено",
"waiting": "Ожидание"
},
"project": {
"name": "Название проекта",
@ -611,7 +619,15 @@
"nameHelper": {
"title": "Сделайте это более описательным!",
"suggestion": "Попробуйте добавить больше деталей, например, \"Позвонить стоматологу, чтобы записаться на чистку\" вместо просто \"Позвонить стоматологу\""
}
},
"overdueAlert": "Эта задача была в вашем плане вчера и не была выполнена.",
"overdueYesterday": "Рассмотрите возможность приоритизировать эту задачу или разбить её на более мелкие шаги.",
"overdueMultipleDays": "Эта задача была отложена {{count}} раз.",
"content": "Содержание",
"noNotes": "Содержимое ещё не добавлено",
"subtasks": "Подзадачи",
"noSubtasks": "Подзадач пока нет",
"recentActivity": "Недавняя активность"
},
"projects": {
"loading": "Загрузка проектов...",

View file

@ -111,7 +111,11 @@
"addToToday": "Dodaj v današnji načrt",
"removeFromToday": "Odstrani iz današnjega načrta",
"setInProgress": "Nastavi v poteku",
"setNotStarted": "Nastavi na ni začeto"
"setNotStarted": "Nastavi na ni začeto",
"showSubtasks": "Prikaži podnaloge",
"hideSubtasks": "Skrij podnaloge",
"edit": "Uredi nalogo",
"delete": "Izbriši nalogo"
},
"timeline": {
"activityTimeline": "Časovnica aktivnosti",
@ -141,7 +145,9 @@
"status": "Status",
"priority": "Prioriteta",
"dueDate": "Rok",
"none": "Nič"
"none": "Nič",
"recurrenceEndDateChanged": "Datum konca ponavljanja se je spremenil",
"recurrenceEndDate": "Datum konca ponavljanja"
}
},
"profile": {
@ -464,7 +470,9 @@
"archived": "Arhivirano",
"unknown": "Neznano",
"telegramConnected": "Telegram povezan in preverja",
"telegramConnectionProblem": "Težava s povezavo Telegram"
"telegramConnectionProblem": "Težava s povezavo Telegram",
"completed": "Dokončano",
"waiting": "Čaka"
},
"project": {
"name": "Ime projekta",
@ -611,7 +619,15 @@
"nameHelper": {
"title": "Naredite ga bolj opisnega!",
"suggestion": "Poskusite dodati več podrobnosti, kot je \"Pokličite zobozdravnika, da se dogovorite za termin čiščenja\" namesto samo \"Pokličite zobozdravnika\""
}
},
"overdueAlert": "Ta naloga je bila v vašem načrtu včeraj in ni bila dokončana.",
"overdueYesterday": "Razmislite o prioriteti te naloge ali jo razdelite na manjše korake.",
"overdueMultipleDays": "Ta naloga je bila prestavljena {{count}}-krat.",
"content": "Vsebina",
"noNotes": "Še ni dodane vsebine",
"subtasks": "Podnaloge",
"noSubtasks": "Še ni podnalog",
"recentActivity": "Nedavna dejavnost"
},
"projects": {
"loading": "Nalagam projekte...",

View file

@ -111,7 +111,11 @@
"addToToday": "Lägg till i dagens plan",
"removeFromToday": "Ta bort från dagens plan",
"setInProgress": "Sätt i pågående",
"setNotStarted": "Sätt till ej påbörjad"
"setNotStarted": "Sätt till ej påbörjad",
"showSubtasks": "Visa deluppgifter",
"hideSubtasks": "Dölj deluppgifter",
"edit": "Redigera uppgift",
"delete": "Ta bort uppgift"
},
"timeline": {
"activityTimeline": "Aktivitetslinje",
@ -141,7 +145,9 @@
"status": "Status",
"priority": "Prioritet",
"dueDate": "Förfallodatum",
"none": "Inga"
"none": "Inga",
"recurrenceEndDateChanged": "Återkommande slutdatum ändrat",
"recurrenceEndDate": "Återkommande slutdatum"
}
},
"profile": {
@ -464,7 +470,9 @@
"archived": "Arkiverad",
"unknown": "Okänd",
"telegramConnected": "Telegram ansluten och polling",
"telegramConnectionProblem": "Problem med Telegram-anslutning"
"telegramConnectionProblem": "Problem med Telegram-anslutning",
"completed": "Slutförd",
"waiting": "Väntar"
},
"project": {
"name": "Projektets namn",
@ -611,7 +619,15 @@
"nameHelper": {
"title": "Gör den mer beskrivande!",
"suggestion": "Försök att lägga till mer information som \"Ring tandläkaren för att boka tid för rengöring\" istället för bara \"Ring tandläkaren\""
}
},
"overdueAlert": "Denna uppgift var i din plan igår och blev inte slutförd.",
"overdueYesterday": "Överväg att prioritera denna uppgift eller dela upp den i mindre steg.",
"overdueMultipleDays": "Denna uppgift har blivit uppskjuten {{count}} gånger.",
"content": "Innehåll",
"noNotes": "Inga anteckningar tillagda än",
"subtasks": "Deluppgifter",
"noSubtasks": "Inga deluppgifter än",
"recentActivity": "Senaste aktivitet"
},
"projects": {
"loading": "Laddar projekt...",

View file

@ -111,7 +111,11 @@
"addToToday": "Bugün planına ekle",
"removeFromToday": "Bugün planından çıkar",
"setInProgress": "Devam ediyor olarak ayarla",
"setNotStarted": "Başlamadı olarak ayarla"
"setNotStarted": "Başlamadı olarak ayarla",
"showSubtasks": "Alt görevleri göster",
"hideSubtasks": "Alt görevleri gizle",
"edit": "Görevi düzenle",
"delete": "Görevi sil"
},
"timeline": {
"activityTimeline": "Etkinlik Zaman Çizelgesi",
@ -134,7 +138,9 @@
"status": "Durum",
"priority": "Öncelik",
"dueDate": "Son tarih",
"none": "Yok"
"none": "Yok",
"recurrenceEndDateChanged": "Tekrar son tarihi değiştirildi",
"recurrenceEndDate": "Tekrar son tarihi"
},
"justNow": "Şu anda",
"minutesAgo": "{{minutes}}d önce",
@ -464,7 +470,9 @@
"archived": "Arşivlendi",
"unknown": "Bilinmiyor",
"telegramConnected": "Telegram bağlı ve sorgulama yapılıyor",
"telegramConnectionProblem": "Telegram bağlantı sorunu"
"telegramConnectionProblem": "Telegram bağlantı sorunu",
"completed": "Tamamlandı",
"waiting": "Bekliyor"
},
"project": {
"name": "Proje Adı",
@ -611,7 +619,15 @@
"nameHelper": {
"title": "Daha açıklayıcı hale getirin!",
"suggestion": "\"Temizlik randevusu ayarlamak için dişçiyi ara\" gibi daha fazla detay eklemeyi deneyin, sadece \"Dişçiyi ara\" demek yerine"
}
},
"overdueAlert": "Bu görev dün planınızdaydı ve tamamlanmadı.",
"overdueYesterday": "Bu görevi önceliklendirmeyi veya daha küçük adımlara ayırmayı düşünün.",
"overdueMultipleDays": "Bu görev {{count}} kez ertelendi.",
"content": "İçerik",
"noNotes": "Henüz içerik eklenmedi",
"subtasks": "Alt görevler",
"noSubtasks": "Henüz alt görev yok",
"recentActivity": "Son Aktivite"
},
"projects": {
"loading": "Projeler yükleniyor...",

View file

@ -111,7 +111,11 @@
"tasksCompleted": "завдання виконані",
"metrics": "Метрики",
"setInProgress": "Встановити в процесі",
"setNotStarted": "Встановити як не розпочате"
"setNotStarted": "Встановити як не розпочате",
"showSubtasks": "Показати підзадачі",
"hideSubtasks": "Сховати підзадачі",
"edit": "Редагувати задачу",
"delete": "Видалити задачу"
},
"timeline": {
"activityTimeline": "Хронологія Активності",
@ -134,7 +138,9 @@
"status": "Статус",
"priority": "Пріоритет",
"dueDate": "Термін",
"none": "Немає"
"none": "Немає",
"recurrenceEndDateChanged": "Дата закінчення повторення змінена",
"recurrenceEndDate": "Дата закінчення повторення"
},
"justNow": "Щойно",
"minutesAgo": "{{minutes}}м тому",
@ -576,7 +582,15 @@
"updated": "Завдання",
"updatedSuccessfully": "успішно оновлено!",
"deleted": "Завдання",
"deletedSuccessfully": "успішно видалено!"
"deletedSuccessfully": "успішно видалено!",
"overdueAlert": "Це завдання було у вашому плані вчора і не було завершено.",
"overdueYesterday": "Розгляньте можливість пріоритизувати це завдання або розбити його на менші етапи.",
"overdueMultipleDays": "Це завдання було відкладено {{count}} разів.",
"content": "Зміст",
"noNotes": "Ще не додано жодного змісту",
"subtasks": "Підзавдання",
"noSubtasks": "Ще немає підзавдань",
"recentActivity": "Остання активність"
},
"calendar": {
"month": "Місяць",
@ -691,7 +705,9 @@
"archived": "Архівовано",
"unknown": "Невідомо",
"telegramConnected": "Telegram підключено та опитування",
"telegramConnectionProblem": "Проблема з підключенням Telegram"
"telegramConnectionProblem": "Проблема з підключенням Telegram",
"completed": "Завершено",
"waiting": "Очікування"
},
"dateIndicators": {
"today": "СЬОГОДНІ",

View file

@ -111,7 +111,11 @@
"addToToday": "Thêm vào kế hoạch hôm nay",
"removeFromToday": "Gỡ bỏ khỏi kế hoạch hôm nay",
"setInProgress": "Đặt thành đang tiến hành",
"setNotStarted": "Đặt thành chưa bắt đầu"
"setNotStarted": "Đặt thành chưa bắt đầu",
"showSubtasks": "Hiện các công việc con",
"hideSubtasks": "Ẩn các công việc con",
"edit": "Chỉnh sửa công việc",
"delete": "Xóa công việc"
},
"timeline": {
"activityTimeline": "Dòng Thời Gian Hoạt Động",
@ -134,7 +138,9 @@
"status": "Trạng thái",
"priority": "Độ ưu tiên",
"dueDate": "Ngày đến hạn",
"none": "Không có"
"none": "Không có",
"recurrenceEndDateChanged": "Ngày kết thúc chu kỳ đã thay đổi",
"recurrenceEndDate": "Ngày kết thúc chu kỳ"
},
"justNow": "Vừa xong",
"minutesAgo": "{{minutes}} phút trước",
@ -464,7 +470,9 @@
"archived": "Đã lưu trữ",
"unknown": "Không xác định",
"telegramConnected": "Telegram đã kết nối và đang kiểm tra",
"telegramConnectionProblem": "Vấn đề kết nối Telegram"
"telegramConnectionProblem": "Vấn đề kết nối Telegram",
"completed": "Đã hoàn thành",
"waiting": "Đang chờ"
},
"project": {
"name": "Tên Dự Án",
@ -611,7 +619,15 @@
"nameHelper": {
"title": "Hãy làm cho nó mô tả hơn!",
"suggestion": "Cố gắng thêm nhiều chi tiết như \"Gọi nha sĩ để đặt lịch hẹn làm sạch\" thay vì chỉ \"Gọi nha sĩ\""
}
},
"overdueAlert": "Nhiệm vụ này đã có trong kế hoạch của bạn hôm qua và chưa được hoàn thành.",
"overdueYesterday": "Hãy xem xét ưu tiên nhiệm vụ này hoặc chia nhỏ nó thành các bước nhỏ hơn.",
"overdueMultipleDays": "Nhiệm vụ này đã bị hoãn lại {{count}} lần.",
"content": "Nội dung",
"noNotes": "Chưa có nội dung nào được thêm vào",
"subtasks": "Công việc con",
"noSubtasks": "Chưa có công việc con nào",
"recentActivity": "Hoạt động gần đây"
},
"projects": {
"loading": "Đang tải dự án...",

View file

@ -111,7 +111,11 @@
"addToToday": "添加到今天计划",
"removeFromToday": "从今天计划中移除",
"setInProgress": "设置为进行中",
"setNotStarted": "设置为未开始"
"setNotStarted": "设置为未开始",
"showSubtasks": "显示子任务",
"hideSubtasks": "隐藏子任务",
"edit": "编辑任务",
"delete": "删除任务"
},
"timeline": {
"activityTimeline": "活动时间线",
@ -134,7 +138,9 @@
"status": "状态",
"priority": "优先级",
"dueDate": "截止日期",
"none": "无"
"none": "无",
"recurrenceEndDateChanged": "重复结束日期已更改",
"recurrenceEndDate": "重复结束日期"
},
"justNow": "刚刚",
"minutesAgo": "{{minutes}}分钟前",
@ -464,7 +470,9 @@
"archived": "已归档",
"unknown": "未知",
"telegramConnected": "Telegram 已连接并正在轮询",
"telegramConnectionProblem": "Telegram 连接问题"
"telegramConnectionProblem": "Telegram 连接问题",
"completed": "已完成",
"waiting": "等待中"
},
"project": {
"name": "项目名称",
@ -611,7 +619,15 @@
"nameHelper": {
"title": "让它更具描述性!",
"suggestion": "尝试添加更多细节,例如 \"打电话给牙医安排清洁预约\" 而不仅仅是 \"打电话给牙医\""
}
},
"overdueAlert": "此任务昨天在您的计划中,但未完成。",
"overdueYesterday": "考虑优先处理此任务或将其拆分为更小的步骤。",
"overdueMultipleDays": "此任务已推迟 {{count }} 次。",
"content": "内容",
"noNotes": "尚未添加内容",
"subtasks": "子任务",
"noSubtasks": "尚无子任务",
"recentActivity": "最近活动"
},
"projects": {
"loading": "加载项目中...",