feat(space): unify end session flow and en-first copy

This commit is contained in:
2026-03-17 14:04:13 +09:00
parent 5026138ad9
commit 2afbe3ce7a
10 changed files with 609 additions and 344 deletions

View File

@@ -0,0 +1,208 @@
import { space as koSpace } from './space';
export const spaceEn = {
...koSpace,
sessionGoal: {
...koSpace.sessionGoal,
label: 'One goal for this session',
required: '(Required)',
placeholder: 'e.g. Draft the first page of the contract',
hint: 'Keep it small. Just the next concrete piece.',
},
setup: {
...koSpace.setup,
panelAriaLabel: 'Focus entry panel',
eyebrow: 'Execution Setup',
title: 'Set the goal, time, and atmosphere. Then step in.',
description: 'Pick a goal, background, timer, and sound. Then move straight into the focus stage.',
resumeTitle: 'Pick up the last block',
startFresh: 'Start fresh',
resumePrepare: 'Prepare to resume',
sceneLabel: 'Background',
timerLabel: 'Time',
soundLabel: 'Sound',
reviewTeaserEyebrow: 'Weekly Review',
reviewTeaserTitle: 'Take another look at this week?',
reviewTeaserTitlePro: 'Review this week and reopen the rhythm that worked best?',
reviewTeaserHelper: 'You can jump right back in, or pause for a quick weekly review first.',
reviewTeaserHelperPro: 'You can jump right back in, or check this weeks flow and recommended atmosphere first.',
reviewTeaserCta: 'Open weekly review',
reviewTeaserDismiss: 'Later',
readyHint: 'Add a goal to unlock the start flow.',
openFocusScreen: 'Open focus stage',
},
timerHud: {
...koSpace.timerHud,
actions: [
{ id: 'start', label: 'Start', icon: '▶' },
{ id: 'pause', label: 'Pause', icon: '⏸' },
{ id: 'reset', label: 'Reset', icon: '↺' },
],
readyMode: 'Ready',
focusMode: 'Focus',
breakMode: 'Break',
goalFallback: 'Set the next block to begin.',
goalPrefix: 'Current block · ',
completeButton: 'Complete',
},
focusHud: {
...koSpace.focusHud,
goalFallback: 'Start the next block.',
goalToast: (goal: string) => `Current block · ${goal}`,
restReminder: 'Five minutes passed. Come back to the next block.',
intentLabel: 'Current session goal',
microStepLabel: 'Current microstep',
intentExpandAriaLabel: 'Expand goal card',
refocusButton: 'Edit goal',
intentEditLabel: 'Edit',
refocusTitle: 'Reset the direction',
refocusDescription: 'Tighten one line, then go again.',
refocusApply: 'Apply',
refocusApplyAndResume: 'Apply and resume',
refocusApplying: 'Applying…',
refocusSaved: 'The session direction is updated.',
refocusOpenOnPause: 'If you paused, want to realign the next tiny piece before you continue?',
pausePromptEyebrow: 'Paused',
pausePromptTitle: 'You only need one line to restart.',
pausePromptDescription: 'You do not have to explain why you stopped. Just set the next line your hands can land on.',
pausePromptRefocus: 'Reset the next piece',
pausePromptRefocusHint: 'Keep the goal. Rewrite only the next line you will actually start with.',
pausePromptKeep: 'Resume now',
pausePromptKeepHint: 'Keep the current direction and continue from where you stopped.',
pausePromptFinish: 'Finish here',
pausePromptFinishHint: 'Close this block quietly instead of trying to force your way back in.',
returnPromptEyebrow: 'You are back',
returnPromptFocusTitle: 'The flow is still here.',
returnPromptFocusDescription: 'You can continue exactly where you paused, or softly reset the next piece before you return.',
returnPromptBreakTitle: 'A break started while you were away.',
returnPromptBreakDescription: 'Keep the break going, or move gently into the next block.',
returnPromptContinue: 'Resume where I left off',
returnPromptContinueHint: 'Keep the timer and the flow exactly as they are and return to focus.',
returnPromptRest: 'Stay on break',
returnPromptRestHint: 'Keep the break that already started and breathe for a little longer.',
returnPromptNext: 'Next block',
returnPromptNextHint: 'Set the next piece and continue inside the same session flow.',
returnPromptRefocus: 'Reset the next piece',
returnPromptRefocusHint: 'Skip the explanation. Just leave yourself the next line to start with.',
returnPromptFinish: 'Finish here',
returnPromptFinishHint: 'Close this flow here and leave the next entry light.',
microStepCompleteAriaLabel: 'Complete current microstep',
microStepPromptEyebrow: 'Next step',
microStepPromptTitle: 'Is there a clear next step?',
microStepPromptDescription: 'If yes, write one line. If not, keep the goal and continue.',
microStepPromptKeep: 'Keep going with the goal',
microStepPromptKeepHint: 'Clear the next step and continue inside the same goal.',
microStepPromptDefine: 'Write the next step',
microStepPromptDefineHint: 'Capture the smallest next action you can immediately start.',
microStepPromptFinish: 'Finish this goal here',
microStepPromptFinishHint: 'Do not grow the next step. Close this block cleanly here.',
microStepCleared: 'The microstep is cleared. The goal stays.',
completeAction: 'END SESSION',
},
goalComplete: {
...koSpace.goalComplete,
placeholderFallback: 'Write the next block',
placeholderExample: (goal: string) => `e.g. ${goal}`,
title: 'How do you want to continue this block?',
description: 'Pick one path and keep the momentum simple.',
timerTitle: 'Time is up. What should happen to this goal?',
timerDescription: 'Finish the session here, or keep the same flow alive for ten more minutes.',
nextTitle: 'Good. Define the next block.',
nextDescription: 'Do not make it bigger. Leave only the next line your hands can start with.',
currentGoalLabel: 'Current block',
nextGoalLabel: 'Next block',
chooseNextButton: 'Next block',
chooseNextDescription: 'Define the next piece and continue inside the same flow.',
backButton: 'Back',
closeAriaLabel: 'Close',
finishButton: 'Finish here',
finishDescription: 'Close this block here and leave the next entry light.',
timerFinishButton: 'Finish session',
timerFinishDescription: 'Record this goal as complete and close the session.',
timerFinishPending: 'Finishing…',
restButton: 'Step away',
restDescription: 'Keep the block alive, pause briefly, and come back later.',
extendButton: '10 more minutes',
extendDescription: 'Keep the current flow and continue for ten more minutes.',
extendPending: 'Adding 10 minutes…',
confirmButton: 'Start next block',
confirmPending: 'Starting…',
finishPending: 'Finishing…',
},
completionResult: {
...koSpace.completionResult,
eyebrow: 'SESSION COMPLETE',
title: 'This session is now gently closed.',
description: 'Here is what you focused on, what you finished, and what you parked in your thought capsule.',
focusedLabel: 'Focused time',
focusedValue: (minutes: number) => `${minutes} min`,
goalLabel: 'Completed goal',
thoughtsLabel: 'Thought capsule',
thoughtCount: (count: number) => `${count} items`,
confirmButton: 'Back to lobby',
},
endSession: {
...koSpace.endSession,
trigger: 'END SESSION',
eyebrow: 'END SESSION',
title: 'Did you finish this goal?',
description: 'Choose the path that matches this block. If you close the session, we will show the result summary before you head back.',
goalLabel: 'Current goal',
cancelButton: 'Keep focusing',
confirmButton: 'End session',
confirmPending: 'Ending…',
finishedTitle: 'Nice. How do you want to close it?',
finishedDescription: 'You can open the next block right away, or close this session here.',
unfinishedTitle: 'Okay. What do you want to do with this session?',
unfinishedDescription: 'If the goal is not done yet, you can still close the session here.',
finishedAnswer: 'Yes, I finished it',
unfinishedAnswer: 'No, not yet',
nextBlockButton: 'Next block',
finishHereButton: 'Finish here',
endHereButton: 'End session',
backButton: 'Back',
nextGoalLabel: 'Next block',
nextGoalPlaceholder: 'e.g. Refine the travel budget',
nextGoalConfirmButton: 'Start next block',
},
quickNotes: {
...koSpace.quickNotes,
title: 'Park the thought for later',
placeholder: 'Drop the thought here…',
submit: 'Save',
hint: 'You can sort it in the inbox later.',
},
inbox: {
...koSpace.inbox,
empty: 'Nothing is parked yet. Thoughts that pop up during focus can be dropped here.',
complete: 'Done',
completed: 'Done',
delete: 'Delete',
readOnly: 'A read-only inbox for later review',
clearAll: 'Clear all',
clearConfirmTitle: 'Clear the inbox?',
clearConfirmDescription: 'If this was a mistake, you can undo it in the toast.',
clearButton: 'Clear',
openInboxAriaLabel: 'Open inbox',
openInboxTitle: 'Inbox',
},
workspace: {
...koSpace.workspace,
readyToStart: 'Ready. Press start and step into focus.',
startFailed: 'Could not start the session. Please try again in a moment.',
resumeFailed: 'Could not resume the session.',
abandonFailed: 'Could not close the session.',
pauseFailed: 'Could not pause the session.',
restartFailed: 'Could not restart the current phase.',
restarted: 'The current phase has been restarted.',
intentSyncFailed: 'Could not sync the session direction to the server.',
goalCompleteSyncFailed: 'Could not record the goal-complete finish on the server.',
timerCompleteSyncFailed: 'Could not finish the timer-complete session.',
timerExtendFailed: 'Could not add 10 more minutes.',
timerExtendConflict: 'This session was already extended in another window.',
timerExtended: (minutes: number) => `${minutes} more minutes added.`,
nextGoalStarted: 'The next block started right away.',
selectionPreferenceSaveFailed: 'Could not save the default background/sound selection.',
selectionSessionSyncFailed: 'Could not sync the current session background/sound selection.',
},
} as const;