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:
parent
3ee20711da
commit
fcaf9a9a4d
30 changed files with 487 additions and 222 deletions
|
|
@ -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>
|
||||
))
|
||||
) : (
|
||||
|
|
|
|||
|
|
@ -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 */}
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
);
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
) : (
|
||||
|
|
|
|||
|
|
@ -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": "جارٍ تحميل المشاريع...",
|
||||
|
|
|
|||
|
|
@ -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": "Зареждане на проекти...",
|
||||
|
|
|
|||
|
|
@ -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...",
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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...",
|
||||
|
|
|
|||
|
|
@ -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...",
|
||||
|
|
|
|||
|
|
@ -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...",
|
||||
|
|
|
|||
|
|
@ -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...",
|
||||
|
|
|
|||
|
|
@ -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": "月",
|
||||
|
|
|
|||
|
|
@ -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": "프로젝트 로딩 중...",
|
||||
|
|
|
|||
|
|
@ -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...",
|
||||
|
|
|
|||
|
|
@ -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...",
|
||||
|
|
|
|||
|
|
@ -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...",
|
||||
|
|
|
|||
|
|
@ -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...",
|
||||
|
|
|
|||
|
|
@ -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...",
|
||||
|
|
|
|||
|
|
@ -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": "Загрузка проектов...",
|
||||
|
|
|
|||
|
|
@ -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...",
|
||||
|
|
|
|||
|
|
@ -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...",
|
||||
|
|
|
|||
|
|
@ -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...",
|
||||
|
|
|
|||
|
|
@ -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": "Місяць",
|
||||
|
|
|
|||
|
|
@ -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...",
|
||||
|
|
|
|||
|
|
@ -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": "加载项目中...",
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue