feat(todo): the app on halkyon_app, with its own icon
Todo's app is halkyon_app's instance and session gates with Todo's
frame ("Todo" under "Halkyon", its icon, its own sentences) and an
instance check accepting only `todo`; TodoDependencies on an instance,
an empty TodoPerson per person, nothing kept or synced yet. A person
sees an empty home and their account: whose it is on which instance,
switching account, signing out and deleting it (each asking first where
it deletes), and About with the source of what the instance runs and
the licence list. Texts in British English and German. App ID
app.halkyon.todo on every platform, GitHub's callback scheme registered
on Android, no web build.
Its icon is Lucide's list-checks (lucide-static 1.50.0) in the brand's
blues on white: tool/app_icons.py draws its strokes with Pillow and
writes every platform's launcher icon; Lucide's ISC notice joins the
licence list.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-19 21:56:12 +02:00
|
|
|
{
|
|
|
|
|
"@@locale": "en",
|
|
|
|
|
|
|
|
|
|
"appTitle": "Halkyon Todo",
|
|
|
|
|
"@appTitle": {"description": "The app's name: the window's title, and where halkyon_app's texts name the app."},
|
|
|
|
|
"launchProduct": "Todo",
|
|
|
|
|
"@launchProduct": {"description": "The app's word in its wordmark, under \"Halkyon\"."},
|
|
|
|
|
|
|
|
|
|
"instanceFirstStartSubtitle": "Choose the instance to keep your tasks on. Someone runs each one; you can add others later.",
|
|
|
|
|
|
|
|
|
|
"accountTitle": "Account",
|
|
|
|
|
"accountDeleteMessage": "Your account is deleted on the server and on all your devices. This can't be undone.",
|
|
|
|
|
|
feat(todo): the four tabs in Todo's frame, washed in strawberry, Settings from Browse
ADR 0033, step 1: go_router with a StatefulShellRoute and halkyon_ui's
NavigationFrame as Train's (D1), the tabs Today, Upcoming, Inbox and
Browse, each saying tasks come later (D2), every screen washing down in
strawberry (D3), and Settings over the tabs from Browse's cog, grouped in
cards: the operator's, the account, What's new and About Halkyon Todo,
the version below (D4). The account sheet and the empty home go.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-11-01 00:57:44 +01:00
|
|
|
"aboutTitle": "About Halkyon Todo",
|
|
|
|
|
|
|
|
|
|
"shellTabToday": "Today",
|
|
|
|
|
"shellTabUpcoming": "Upcoming",
|
|
|
|
|
"shellTabInbox": "Inbox",
|
|
|
|
|
"shellTabBrowse": "Browse",
|
|
|
|
|
"settingsTitle": "Settings",
|
|
|
|
|
"settingsVersion": "Version {version} (build {build})",
|
feat(todo): Today, Upcoming, Inbox, projects, quick add and the task sheet (ADR 0033, D8, D9)
The tabs hold the person's tasks: Today what is overdue (Reschedule
moving it all to a day, times kept) and what is due today; Upcoming the
overdue ones and the next four weeks day by day; Inbox and each
project's screen from Browse the tasks above and in their sections, done
ones on asking; Browse the projects with their open counts and the
labels. A task's row shows its check in its priority's colour, its date
in the colour of how near it is, its deadline, its sub-tasks done and
its labels; quick add takes its title, date, priority, project, labels
and description and stays for the next; its sheet edits all of it, adds
sub-tasks and deletes it with them after asking. Colours are the
palette's, cerise for overdue and P1 against the strawberry wash.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-11-01 10:25:34 +01:00
|
|
|
"@settingsVersion": {"placeholders": {"version": {"type": "String"}, "build": {"type": "String"}}},
|
|
|
|
|
|
|
|
|
|
"clear": "Clear",
|
|
|
|
|
"colorLabel": "Colour",
|
|
|
|
|
"completedShow": "Show done tasks",
|
|
|
|
|
"completedHide": "Hide done tasks",
|
|
|
|
|
"dateTitle": "Date",
|
|
|
|
|
"dateNextWeek": "Next week",
|
|
|
|
|
"dateWeekend": "This weekend",
|
|
|
|
|
"datePick": "Pick a day",
|
|
|
|
|
"dateTime": "Time",
|
|
|
|
|
"dateNone": "No date",
|
|
|
|
|
"dateNoneYet": "No date",
|
|
|
|
|
"dayToday": "Today",
|
|
|
|
|
"dayTomorrow": "Tomorrow",
|
|
|
|
|
"dayYesterday": "Yesterday",
|
|
|
|
|
"dayHeadingNamed": "{date} · {name}",
|
|
|
|
|
"@dayHeadingNamed": {"placeholders": {"date": {"type": "String"}, "name": {"type": "String"}}},
|
|
|
|
|
"deadlineOn": "Deadline {day}",
|
|
|
|
|
"@deadlineOn": {"placeholders": {"day": {"type": "String"}}},
|
|
|
|
|
"deadlineNone": "No deadline",
|
|
|
|
|
"keysMissing": "This device can't save: it doesn't hold your account's keys. Sign in with your password or recovery phrase to add them.",
|
|
|
|
|
"labelsTitle": "Labels",
|
|
|
|
|
"labelsNone": "No labels yet.",
|
|
|
|
|
"labelsNoneSet": "No labels",
|
|
|
|
|
"labelsCount": "{count, plural, =1{1 label} other{{count} labels}}",
|
|
|
|
|
"@labelsCount": {"placeholders": {"count": {"type": "int"}}},
|
|
|
|
|
"labelAdd": "New label",
|
|
|
|
|
"labelEdit": "Edit label",
|
|
|
|
|
"labelDelete": "Delete label",
|
|
|
|
|
"labelDeleteTitle": "Delete the label?",
|
|
|
|
|
"labelDeleteMessage": "\"{name}\" is taken off every task that has it.",
|
|
|
|
|
"@labelDeleteMessage": {"placeholders": {"name": {"type": "String"}}},
|
|
|
|
|
"nameLabel": "Name",
|
|
|
|
|
"save": "Save",
|
|
|
|
|
"overdue": "Overdue",
|
|
|
|
|
"reschedule": "Reschedule",
|
|
|
|
|
"priorityTitle": "Priority",
|
|
|
|
|
"priority1": "Priority 1",
|
|
|
|
|
"priority2": "Priority 2",
|
|
|
|
|
"priority3": "Priority 3",
|
|
|
|
|
"priority4": "No priority",
|
|
|
|
|
"projectsTitle": "Projects",
|
|
|
|
|
"projectsNone": "No projects of your own yet.",
|
|
|
|
|
"projectAdd": "New project",
|
|
|
|
|
"projectEdit": "Edit project",
|
|
|
|
|
"projectDelete": "Delete project",
|
|
|
|
|
"projectDeleteTitle": "Delete the project?",
|
|
|
|
|
"projectDeleteMessage": "\"{name}\" is deleted with its sections and tasks, on all your devices.",
|
|
|
|
|
"@projectDeleteMessage": {"placeholders": {"name": {"type": "String"}}},
|
|
|
|
|
"projectEmptyTitle": "Nothing to do here",
|
|
|
|
|
"projectEmptyHint": "Add a task with the + button.",
|
|
|
|
|
"projectGone": "This project was deleted.",
|
|
|
|
|
"projectMenu": "More",
|
|
|
|
|
"projectPickTitle": "Project",
|
|
|
|
|
"sectionAdd": "New section",
|
|
|
|
|
"sectionEdit": "Rename section",
|
|
|
|
|
"sectionDelete": "Delete section",
|
|
|
|
|
"sectionDeleteTitle": "Delete the section?",
|
|
|
|
|
"sectionDeleteMessage": "\"{name}\" is deleted with its tasks.",
|
|
|
|
|
"@sectionDeleteMessage": {"placeholders": {"name": {"type": "String"}}},
|
|
|
|
|
"sectionMenu": "Section",
|
|
|
|
|
"subTasks": "Sub-tasks",
|
|
|
|
|
"subTasksDone": "Sub-tasks {done}/{count}",
|
|
|
|
|
"@subTasksDone": {"placeholders": {"done": {"type": "int"}, "count": {"type": "int"}}},
|
|
|
|
|
"subTaskAdd": "Add sub-task",
|
|
|
|
|
"taskTitle": "Task",
|
|
|
|
|
"taskAddTitle": "Add task",
|
|
|
|
|
"taskAdd": "Add",
|
|
|
|
|
"taskAddOn": "Add a task on {day}",
|
|
|
|
|
"@taskAddOn": {"placeholders": {"day": {"type": "String"}}},
|
|
|
|
|
"taskTitleHint": "What's to be done?",
|
|
|
|
|
"taskDescription": "Description",
|
|
|
|
|
"taskDescriptionHint": "Description",
|
|
|
|
|
"taskComplete": "Mark as done",
|
|
|
|
|
"taskReopen": "Mark as not done",
|
|
|
|
|
"taskCompleted": "Task done",
|
|
|
|
|
"taskDelete": "Delete task",
|
|
|
|
|
"taskDeleteTitle": "Delete the task?",
|
|
|
|
|
"taskDeleteMessage": "\"{title}\" is deleted on all your devices.",
|
|
|
|
|
"@taskDeleteMessage": {"placeholders": {"title": {"type": "String"}}},
|
|
|
|
|
"taskDeleteWithSubTasks": "\"{title}\" is deleted with its {count, plural, =1{sub-task} other{{count} sub-tasks}}, on all your devices.",
|
|
|
|
|
"@taskDeleteWithSubTasks": {"placeholders": {"title": {"type": "String"}, "count": {"type": "int"}}},
|
|
|
|
|
"taskGone": "This task was deleted.",
|
|
|
|
|
"todayEmptyTitle": "Nothing due today",
|
|
|
|
|
"todayEmptyHint": "Tasks dated today, and those overdue, show here.",
|
|
|
|
|
"lockedRows": "{count, plural, =1{1 item doesn't open on this device.} other{{count} items don't open on this device.}}",
|
|
|
|
|
"@lockedRows": {"placeholders": {"count": {"type": "int"}}},
|
|
|
|
|
"inboxMissingTitle": "No Inbox yet",
|
feat(todo): recurring tasks, set through a picker (ADR 0033, D7)
A task's date may recur: every n days, weeks (on which weekdays),
months (on its day, or its nth or last weekday), years, from its date
or from when it is done, until a day or for n times. Done, it moves on
to the next day after both its date and today, its deadline as far, its
time kept, its done sub-tasks open again and when it was done kept in
its payload; undo writes all of it back. The date sheet offers the rules
that fit the task's day and a rule of the person's own; rows show a
recurring date with its own icon, the task sheet the rule in words.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-11-01 12:15:51 +01:00
|
|
|
"inboxMissingHint": "Your Inbox comes with the next sync, or once this device holds your account's keys.",
|
|
|
|
|
"repeatTitle": "Repeat",
|
|
|
|
|
"repeatNone": "Doesn't repeat",
|
|
|
|
|
"repeatCustom": "Custom",
|
|
|
|
|
"repeatEveryDay": "{count, plural, =1{Every day} other{Every {count} days}}",
|
|
|
|
|
"@repeatEveryDay": {"placeholders": {"count": {"type": "int"}}},
|
|
|
|
|
"repeatEveryWeek": "{count, plural, =1{Every week} other{Every {count} weeks}}",
|
|
|
|
|
"@repeatEveryWeek": {"placeholders": {"count": {"type": "int"}}},
|
|
|
|
|
"repeatEveryMonth": "{count, plural, =1{Every month} other{Every {count} months}}",
|
|
|
|
|
"@repeatEveryMonth": {"placeholders": {"count": {"type": "int"}}},
|
|
|
|
|
"repeatEveryYear": "{count, plural, =1{Every year} other{Every {count} years}}",
|
|
|
|
|
"@repeatEveryYear": {"placeholders": {"count": {"type": "int"}}},
|
|
|
|
|
"repeatWeekdays": "Every weekday",
|
|
|
|
|
"repeatOn": "{rule} on {on}",
|
|
|
|
|
"@repeatOn": {"placeholders": {"rule": {"type": "String"}, "on": {"type": "String"}}},
|
|
|
|
|
"repeatMonthDay": "day {day}",
|
|
|
|
|
"@repeatMonthDay": {"placeholders": {"day": {"type": "int"}}},
|
|
|
|
|
"repeatMonthWeek": "the {nth, select, 1{first} 2{second} 3{third} 4{fourth} other{last}} {weekday}",
|
|
|
|
|
"@repeatMonthWeek": {"placeholders": {"nth": {"type": "String"}, "weekday": {"type": "String"}}},
|
|
|
|
|
"repeatFromCompletion": "{rule}, from when it's done",
|
|
|
|
|
"@repeatFromCompletion": {"placeholders": {"rule": {"type": "String"}}},
|
|
|
|
|
"repeatUntil": "{rule}, until {day}",
|
|
|
|
|
"@repeatUntil": {"placeholders": {"rule": {"type": "String"}, "day": {"type": "String"}}},
|
|
|
|
|
"repeatLeft": "{rule}, {count, plural, =0{this time only} =1{once more} other{{count} more times}}",
|
|
|
|
|
"@repeatLeft": {"placeholders": {"rule": {"type": "String"}, "count": {"type": "int"}}},
|
|
|
|
|
"repeatEvery": "Every",
|
|
|
|
|
"repeatUnitDays": "Days",
|
|
|
|
|
"repeatUnitWeeks": "Weeks",
|
|
|
|
|
"repeatUnitMonths": "Months",
|
|
|
|
|
"repeatUnitYears": "Years",
|
|
|
|
|
"repeatCountFromCompletion": "Count from when it's done",
|
|
|
|
|
"repeatCountFromCompletionHint": "Not from its date: done late, it comes again as long after.",
|
|
|
|
|
"repeatEnds": "Ends",
|
|
|
|
|
"repeatEndsNever": "Never",
|
|
|
|
|
"repeatEndsOn": "On a day",
|
|
|
|
|
"repeatEndsAfter": "{count, plural, =1{After once} other{After {count} times}}",
|
|
|
|
|
"@repeatEndsAfter": {"placeholders": {"count": {"type": "int"}}}
|
feat(todo): the app on halkyon_app, with its own icon
Todo's app is halkyon_app's instance and session gates with Todo's
frame ("Todo" under "Halkyon", its icon, its own sentences) and an
instance check accepting only `todo`; TodoDependencies on an instance,
an empty TodoPerson per person, nothing kept or synced yet. A person
sees an empty home and their account: whose it is on which instance,
switching account, signing out and deleting it (each asking first where
it deletes), and About with the source of what the instance runs and
the licence list. Texts in British English and German. App ID
app.halkyon.todo on every platform, GitHub's callback scheme registered
on Android, no web build.
Its icon is Lucide's list-checks (lucide-static 1.50.0) in the brand's
blues on white: tool/app_icons.py draws its strokes with Pillow and
writes every platform's launcher icon; Lucide's ISC notice joins the
licence list.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-10-19 21:56:12 +02:00
|
|
|
}
|