// English locale — typed as typeof ru so missing/extra keys fail vue-tsc.
import type ru from './ru'
export default {
common: {
any: '— any —',
anyStatus: '— any status —',
noProject: '— no project —',
none: '— none —',
choose: '— choose —',
error: 'Request failed',
save: 'Save',
cancel: 'Cancel',
edit: 'Edit',
preview: 'Preview',
confirmTitle: 'Confirmation',
delete: 'Delete',
open: 'Open',
deleteConfirmTask: 'Delete task "{title}"? This cannot be undone.',
deleteConfirmProject: 'Delete project "{name}"? Tasks will remain, but without a project.',
saved: 'Saved',
created: 'Created',
create: 'Create',
taskDeleted: 'Task deleted',
projectDeleted: 'Project deleted',
taskApproved: 'Task approved',
taskTaken: 'Task started',
taskFinished: 'Task finished',
},
nav: {
sections: 'Sections',
subtitle: 'GNexus Tasks — personal tasks',
signIn: 'Sign in',
account: 'Account',
signOut: 'Sign out',
task: 'Task',
home: 'Home',
stack: 'Inbox stack',
list: 'Task list',
garden: 'Garden',
projects: 'Projects',
options: '3 options',
settings: 'Settings',
},
garden: {
title: 'Garden',
level: 'Level {n}',
xpTotal: '{n} XP',
plants: 'plants: {n}',
levelProgress: 'To next level: {xp}/{span} XP',
emptyTitle: 'The garden is empty',
emptyText: 'Complete your first task and a plant will grow here.',
achievements: 'Achievements',
ach: {
firstDone: 'First sprout',
done10: 'Perfect ten',
done50: 'Half hundred',
level5: 'Level 5',
level10: 'Level 10',
recurring: 'Life rhythm',
projectDone: 'Project done',
},
},
gamify: {
praise: [
'Well done!',
'Done — half the battle!',
'One more step forward.',
'Beautiful!',
'Keep it up!',
'One task less, one mood more.',
],
},
home: {
title: 'Home',
stackCount: 'in stack: {n}',
activeCount: 'active: {n}',
inProgress: 'In progress',
overdue: 'Overdue',
deadlines: 'Deadlines this week',
next: 'Up next',
overview: 'Overview',
projects: 'Active projects',
totalTasks: 'Total tasks',
doneMonth: 'Done this month',
doneAll: 'Done all time',
clearTitle: 'All clear',
clearText: 'No active tasks — a good moment to work through the stack.',
},
stack: {
title: 'Inbox stack',
count: 'Tasks in stack: {n}',
quickPlaceholder: 'Throw in a task — just the text, details later…',
quickAdd: 'Throw in',
newTask: 'New task',
added: 'Task added to the stack',
detailTitle: 'Task details',
emptyTitle: 'Stack is empty',
emptyText: 'Throw in your first task — detailing is picked automatically.',
inStack: 'in stack',
uploading: 'uploading…',
proposal: 'AI proposal:',
proposalPending: 'Detailing in progress…',
proposalNewProject: '+ project "{name}"',
proposalPriority: 'priority {n}',
approveProposal: 'Yes, looks right',
detail: 'Detail it',
redetail: 'Ask AI again',
deleteTask: 'Delete task',
deleteAttachment: 'Delete attachment',
promptProject: 'Name of the new project:',
promptTag: 'Name of the new tag:',
newProject: 'New project',
newTag: 'New tag',
approve: 'Approve',
form: {
title: 'Title',
description: 'Description (Markdown, Ctrl+V for image)',
preview: 'Markdown preview',
project: 'Project',
tagsPlaceholder: 'Add a tag…',
tags: 'Tags',
priority: 'Priority',
estimate: 'Time estimate, minutes',
budget: 'Budget (in settings currency)',
cost: 'Cost estimate (in settings currency)',
},
deadline: {
legend: 'Deadline',
date: 'Strict — date',
period: 'Soft — period',
},
recur: {
legend: 'Task type',
oneTime: 'One-time',
recurring: 'Recurring (repeats)',
kind: 'Repeat rule',
interval: 'Interval, days',
weekdays: 'Days of week',
monthlyDay: 'Day of month (1–31, empty — last)',
},
},
tree: {
addSubtask: 'Add subtask',
promptSubtask: 'Subtask:',
},
task: {
notFoundTitle: 'Task not found',
notFoundText: 'The task may have been deleted or the link is stale.',
proposalTitle: 'AI proposal',
proposalHint: 'Review the details and approve — the task joins the list.',
description: 'Description',
descriptionEmpty: 'No description yet — detail the task.',
attachments: 'Attachments',
fields: 'Details',
dates: 'Dates',
field: {
project: 'Project',
taskType: 'Task type',
priority: 'Priority',
estimate: 'Time estimate',
actual: 'Actual',
money: 'Money',
deadline: 'Deadline',
recurrence: 'Recurrence',
created: 'Created',
approved: 'Approved',
done: 'Done',
},
subtasks: 'Subtasks',
noSubtasks: 'No subtasks',
statusTitle: 'Status',
changeStatus: 'Change status',
subtaskCreated: 'Subtask created — it went to the stack for detailing',
createdRaw: 'Task went to the stack — detail it there',
actions: 'Actions',
addTag: 'Add a tag…',
},
projectPage: {
notFoundTitle: 'Project not found',
notFoundText: 'The project may have been deleted or the link is stale.',
note: 'Note',
noteEmpty: 'No note yet — add one via "Edit".',
progress: 'Project tasks: {done}/{total}',
newTask: 'New task',
taskCreated: 'Task created — it went to the stack for detailing',
promptTask: 'New project task:',
emptyTitle: 'No tasks',
emptyText: 'Create the first project task or relax the filters.',
tree: 'Project tree',
stats: 'Statistics',
total: 'Total tasks',
doneN: 'Done',
inProgress: 'In progress',
toDo: 'To do',
overdue: 'Overdue',
taskCount: '{n} tasks',
},
list: {
title: 'Task list',
count: 'Found: {n}',
emptyTitle: 'Nothing found',
emptyText: 'Try relaxing the filters or throw a new task into the stack.',
filterStatus: 'Status',
filterProject: 'Project',
filterTag: 'Tag',
},
options: {
title: '3 options',
done: 'Done',
notNow: 'Not now — other options',
available: 'Available time, minutes',
suggest: 'Suggest',
choose: 'Do it now',
emptyTitle: 'No options',
emptyText: 'No free tasks fit this time — throw something into the stack or lower the time.',
},
projects: {
title: 'Projects',
count: 'Projects: {n}',
new: 'New project',
emptyTitle: 'No projects',
emptyText:
'Create a project — tasks can be grouped and get notes with resources.',
prompt: 'Name of the new project:',
edit: 'Edit',
delete: 'Delete project',
form: {
name: 'Name',
relevance: 'Relevance',
priority: 'Priority',
note: 'Note (Markdown: links, context)',
preview: 'Preview',
},
},
settings: {
title: 'Settings',
currencyTitle: 'Budget currency',
currencyHint:
'The unit is chosen once and applies to all amounts: task budget, cost estimate.',
currencyUnit: 'Unit',
saved: 'Saved — applied in all views.',
languageTitle: 'Interface language',
languageHint:
'The chosen language applies immediately. "Same as account" takes it from gnexus auth.',
languageUnit: 'Language',
languageAuto: 'Same as account (SSO)',
langRu: 'Русский',
langEn: 'English',
langUk: 'Українська',
},
md: {
bold: 'Bold',
boldText: 'bold text',
italic: 'Italic',
italicText: 'italic text',
heading: 'Heading',
list: 'List',
checklist: 'Checklist',
link: 'Link',
linkText: 'link text',
code: 'Code',
},
taskui: {
priority: {
very_low: 'Very low',
low: 'Low',
medium: 'Medium',
high: 'High',
urgent: 'Urgent',
},
status: {
to_do: 'To do',
in_progress: 'In progress',
done: 'Done',
cancelled: 'Cancelled',
deferred: 'Deferred',
},
relevance: {
active: 'Active',
paused: 'Paused',
archived: 'Archived',
},
time: {
hm: '{h} h {m} m',
h: '{h} h',
m: '{m} m',
},
money: {
budget: 'budget {amount}',
estimate: 'estimate {amount}',
},
currency: {
UAH: '₴ Hryvnia (UAH)',
USD: '$ Dollar (USD)',
EUR: '€ Euro (EUR)',
GBP: '£ Pound (GBP)',
PLN: 'zł Zloty (PLN)',
},
deadline: {
day: 'within a day',
week: 'within a week',
month: 'within a month',
year: 'within a year',
until: 'by {date}',
},
recur: {
kind: {
interval: 'Every N days',
weekdays: 'Days of week',
monthly: 'Day of month',
},
daily: 'daily',
weekly: 'weekly',
everyN: 'every {n} d',
byWeekdays: 'by days of week',
monthlyDay: 'monthly on day {day}',
recurring: 'recurring',
},
},
} satisfies typeof ru