export default {
  'page.title': 'Chronicle',
  'page.description': 'Record your work context and organize it into searchable memory.',
  'accessibility.elementCount': '{{count}} UI elements',
  'accessibility.notification.focusedElementChanged': 'Focused element changed',
  'accessibility.notification.focusedWindowChanged': 'Focused window changed',
  'accessibility.notification.windowCreated': 'Window created',
  'accessibility.notification.windowMoved': 'Window moved',
  'accessibility.notification.windowResized': 'Window resized',
  'accessibility.snapshotFallback.text': 'This record did not capture readable window text.',
  'accessibility.snapshotFallback.title': 'Window clue',
  'accessibility.snapshotLinked': 'Screen snapshot linked',
  'accessibility.snapshotNotLinked': 'No screen snapshot linked',
  'accessibility.status.permissionDenied': 'Permission required',
  'accessibility.unknownProcess': 'Unknown process',
  'accessibility.windowClueLinked': 'Window clue linked',
  'accessibility.windowClueNotLinked': 'No window clue linked',
  'activitySegment.action.crystallize': 'Crystallize',
  'activitySegment.action.summarize': 'Summarize',
  'activitySegment.action.triage': 'Judge value',
  'activitySegment.fallback.summary': 'This segment is still collecting source clues.',
  'activitySegment.fallback.title': 'Activity segment',
  'activitySegment.pipelineStatus.collecting': 'Collecting',
  'activitySegment.pipelineStatus.crystallized': 'Crystallized',
  'activitySegment.pipelineStatus.summarized': 'Summarized',
  'activitySegment.pipelineStatus.triaged': 'Triaged',
  'activitySegment.source.audio': 'Audio',
  'activitySegment.source.memory': 'Memory',
  'activitySegment.source.screen': 'Screen',
  'activitySegment.source.transcript': 'Transcript',
  'activitySegment.type.audio': 'Audio',
  'activitySegment.type.browsing': 'Browsing',
  'activitySegment.type.chat': 'Chat',
  'activitySegment.type.idle': 'Idle',
  'activitySegment.type.meeting': 'Meeting',
  'activitySegment.type.work': 'Work',
  'advanced.accessibilityEvents.description': 'Native UI change events captured by AXObserver.',
  'advanced.accessibilityEvents.empty': 'No window events yet',
  'advanced.accessibilityEvents.loading': 'Loading window events',
  'advanced.accessibilityEvents.title': 'Window Events',
  'advanced.accessibilitySnapshots.description': 'Recent raw clues captured from local windows and UI structure.',
  'advanced.accessibilitySnapshots.empty': 'No window clues yet',
  'advanced.accessibilitySnapshots.loading': 'Loading window clues',
  'advanced.accessibilitySnapshots.title': 'Window Clues',
  'advanced.activitySegments.description': 'Segments aggregated from window, message, and audio clues, plus automatic processing records.',
  'advanced.activitySegments.empty': 'No activity segments yet',
  'advanced.activitySegments.loading': 'Organizing activity segments',
  'advanced.activitySegments.title': 'Activity Segments',
  'advanced.audioSegments.description': 'Recently captured raw audio segments and their VAD, ASR, and speaker processing states.',
  'advanced.audioSegments.empty': 'No audio segments yet',
  'advanced.audioSegments.loading': 'Loading audio segments',
  'advanced.audioSegments.title': 'Audio Segments',
  'advanced.dreamRuns.description': 'Preview which knowledge cards may be merged; this only shows candidates and does not change existing memories.',
  'advanced.dreamRuns.title': 'Memory Maintenance Preview',
  'advanced.messageSources.description': 'Connect Slack channels so important discussions become part of activity memory.',
  'advanced.messageSources.title': 'Message Sources',
  'advanced.privacy.description': 'Configure apps, window titles, and URLs that should not be captured or written to records.',
  'advanced.privacy.title': 'Privacy Rules',
  'advanced.resources.description': 'Local resources required for screen recognition, audio processing, speaker separation, and semantic search.',
  'advanced.resources.title': 'Local Capabilities',
  'advanced.summary.description': 'Model resources, raw clues, processing records, and import sources',
  'advanced.summary.title': 'Advanced & Diagnostics',
  'advanced.transcripts.description': 'Meeting text that has been imported or generated and can later become search and summary context.',
  'advanced.transcripts.empty': 'No meeting transcripts yet',
  'advanced.transcripts.loading': 'Loading meeting transcripts',
  'advanced.transcripts.title': 'Meeting Transcripts',
  'audioRaw.active': 'Voice',
  'audioRaw.channels': 'channels',
  'audioRaw.processing.notConnected': 'Not connected',
  'audioRaw.quiet': 'Quiet',
  'audioRaw.speaker': 'Speaker',
  'audioRaw.title.microphone': 'Microphone segment',
  'audioRaw.title.mixed': 'Mixed audio segment',
  'audioRaw.title.system': 'System audio segment',
  'audioTranscript.asrTranscript': 'ASR transcript',
  'audioTranscript.emptyPreview': 'This transcript has no preview text yet.',
  'audioTranscript.segmentCount': '{{count}} segments',
  'common.action.download': 'Download',
  'common.action.refresh': 'Refresh',
  'common.action.save': 'Save',
  'common.action.sync': 'Sync',
  'common.action.verify': 'Verify',
  'common.error.saveFailed': 'Save failed',
  'common.status.armed': 'Armed',
  'common.status.completed': 'Completed',
  'common.status.disabled': 'Disabled',
  'common.status.disconnected': 'Disconnected',
  'common.status.enabled': 'Enabled',
  'common.status.error': 'Error',
  'common.status.imported': 'Imported',
  'common.status.notConfigured': 'Not configured',
  'common.status.notEnabled': 'Not enabled',
  'common.status.pending': 'Pending',
  'common.status.queued': 'Queued',
  'common.status.ready': 'Ready',
  'common.status.recording': 'Recording',
  'common.status.running': 'Running',
  'common.status.saved': 'Saved',
  'common.status.savingSettings': 'Saving settings',
  'common.status.skipped': 'Skipped',
  'common.status.stopped': 'Stopped',
  'common.status.unavailable': 'Unavailable',
  'common.status.unknown': 'Unknown',
  'common.status.unknownApp': 'Unknown app',
  'control.activity.description.blocked': 'Automatic organization becomes available after activity recording is enabled.',
  'control.activity.description.enabled': 'Classify and summarize scattered activity, then turn it into long-term memory.',
  'control.activity.title': 'Automatic Organization',
  'control.audio.description.blocked': 'Meetings and audio become available after activity recording is enabled.',
  'control.audio.description.enabled': 'Capture meeting audio and transcribe it into meeting clues when models are available.',
  'control.audio.source.microphone': 'Microphone',
  'control.audio.source.mixed': 'Microphone and system audio',
  'control.audio.source.system': 'System audio',
  'control.audio.title': 'Meetings & Audio',
  'control.capture.description.blocked': 'Choose a model for organizing memory before enabling recording.',
  'control.capture.description.enabled': 'Cradle will continuously organize your activity clues on this device.',
  'control.capture.title': 'Record Activity',
  'control.description': 'Decide whether Cradle records activity and how it organizes records into memory.',
  'control.dream.description.blocked': 'Memory maintenance becomes available after activity recording is enabled.',
  'control.dream.description.enabled': 'Periodically preview similar knowledge and merge automatically only when explicitly allowed.',
  'control.dream.title': 'Memory Maintenance',
  'control.model.description': 'This model understands activity, generates summaries, and distills memory.',
  'control.model.emptyProfiles': 'No model providers configured',
  'control.model.emptySelection': 'Choose model',
  'control.model.title': 'Organization Model',
  'control.reason.enableAudioFirst': 'Enable meetings and audio first',
  'control.reason.enableCaptureFirst': 'Enable activity recording first',
  'control.reason.selectModelAndEnableCapture': 'Choose an organization model, then enable activity recording',
  'control.reason.selectModelFirst': 'Choose an organization model first',
  'control.status.autoMerge': 'Auto merge',
  'control.status.notSelected': 'Not selected',
  'control.status.previewOnly': 'Preview only',
  'control.status.selected': 'Selected',
  'control.status.waitingForCapture': 'Waiting for recording',
  'control.status.waitingForModel': 'Waiting for model',
  'control.title': 'Start Recording',
  'dependencyNotice.description': 'Automatic organization and meetings/audio depend on Record Activity. Enable activity recording first, then these controls become available.',
  'dependencyNotice.title': 'Some switches will stay unavailable for now',
  'dreamRun.applyMerge': 'Apply merge',
  'dreamRun.candidateCount': 'Candidates {{count}}',
  'dreamRun.candidatesTitle': 'Merge candidates',
  'dreamRun.empty': 'No maintenance previews yet',
  'dreamRun.generatePreview': 'Generate preview',
  'dreamRun.inputCount': 'Input {{count}}',
  'dreamRun.loading': 'Loading maintenance previews',
  'dreamRun.mergedCount': 'Merged {{count}}',
  'dreamRun.type.archive': 'Archive',
  'dreamRun.type.dryRun': 'Preview',
  'dreamRun.type.merge': 'Merge',
  'dreamRun.type.prune': 'Prune',
  'dreamRun.type.restore': 'Restore',
  'duration.hours': '{{count}} hours',
  'duration.hoursMinutes': '{{hours}} hours {{minutes}} minutes',
  'duration.minutes': '{{count}} minutes',
  'duration.seconds': '{{count}} seconds',
  'hero.metric.activitySegments': 'Activity segments',
  'hero.metric.knowledgeCards': 'Knowledge cards',
  'hero.metric.memories': 'Organized memories',
  'memorySection.title': 'Memory & Knowledge',
  'memorySection.description': 'Search organized memories and review distilled knowledge cards.',
  'knowledge.description': 'When Cradle believes an activity is worth retaining, it organizes it into decisions, tasks, insights, or patterns.',
  'knowledge.empty': 'No knowledge cards yet',
  'knowledge.loading': 'Loading knowledge cards',
  'knowledge.title': 'Distilled Knowledge',
  'knowledgeCard.dimension.business': 'Business',
  'knowledgeCard.dimension.general': 'General',
  'knowledgeCard.dimension.personal': 'Personal',
  'knowledgeCard.dimension.project': 'Project',
  'knowledgeCard.dimension.technical': 'Technical',
  'knowledgeCard.sourceSegments': '{{count}} source segments',
  'knowledgeCard.status.active': 'Active',
  'knowledgeCard.status.archived': 'Archived',
  'knowledgeCard.status.deleted': 'Deleted',
  'knowledgeCard.status.merged': 'Merged',
  'knowledgeCard.type.decision': 'Decision',
  'knowledgeCard.type.fact': 'Fact',
  'knowledgeCard.type.insight': 'Insight',
  'knowledgeCard.type.pattern': 'Pattern',
  'knowledgeCard.type.task': 'Task',
  'memory.fallbackTitle': 'Activity memory',
  'memory.match.hybrid': 'Hybrid match',
  'memory.match.keyword': 'Keyword',
  'memory.match.semantic': 'Semantic',
  'memory.match.semanticScore': 'Semantic {{score}}',
  'memory.sourceCount': '{{count}} sources',
  'memory.type.long': 'Long-term memory',
  'memory.type.short': 'Short-term memory',
  'memorySearch.description': 'Search organized activity memories to recover recent work, discussions, and related context.',
  'memorySearch.empty': 'No memories yet',
  'memorySearch.loading': 'Searching memories',
  'memorySearch.noMatches': 'No matching memories',
  'memorySearch.placeholder': 'Search memories',
  'memorySearch.title': 'Search Memory',
  'pipeline.runs.empty': 'No processing records yet.',
  'pipeline.runs.runNow': 'Organize now',
  'pipeline.runs.title': 'Processing Records',
  'pipeline.stage.collection': 'Collect clues',
  'pipeline.stage.crystallization': 'Distill memory',
  'pipeline.stage.segmentation': 'Split segments',
  'pipeline.stage.summarization': 'Generate summary',
  'pipeline.stage.triage': 'Judge value',
  'pipeline.trigger.audioRaw': 'Raw audio',
  'pipeline.trigger.audioTranscript': 'Meeting transcript',
  'pipeline.trigger.manual': 'Manual trigger',
  'pipeline.trigger.memory': 'Memory',
  'pipeline.trigger.message': 'Slack message',
  'pipeline.trigger.snapshot': 'Screen record',
  'pipeline.trigger.summarize': 'Summary',
  'privacySection.title': 'Privacy',
  'privacySection.description': 'Control what Chronicle captures and which content to exclude.',
  'privacy.appBundle.placeholder': 'com.apple.Terminal',
  'privacy.closedEyes.description': 'Temporarily unavailable. The runtime detector/manual pause flow is not connected yet, so the server keeps recording frames and ignores this discard setting.',
  'privacy.closedEyes.mode.alwaysPause': 'Always pause',
  'privacy.closedEyes.mode.alwaysPause.ariaLabel': 'Always pause',
  'privacy.closedEyes.mode.alwaysRecord': 'Always record',
  'privacy.closedEyes.mode.alwaysRecord.ariaLabel': 'Always record',
  'privacy.closedEyes.mode.auto': 'Auto',
  'privacy.closedEyes.mode.auto.ariaLabel': 'Automatic closed-eye discard',
  'privacy.closedEyes.title': 'Closed-eye and away discard',
  'privacy.closedEyes.toggle': 'Closed-eye discard',
  'privacy.help': 'One rule per line. After saving, the daemon restarts and excludes matching windows before screenshots; it filters again before persistence.',
  'privacy.ruleCount': '{{count}} rules',
  'privacy.saveRules': 'Save rules',
  'privacy.title': 'Sensitive Content Exclusion',
  'privacy.titlePattern.label': 'Window title fragment',
  'privacy.titlePattern.placeholder': 'Bank Dashboard',
  'privacy.urlPattern.label': 'URL fragment',
  'privacy.urlPattern.placeholder': 'admin.example.com',
  'recentActivity.description': 'See the screens, messages, or audio clues Cradle recently observed, and confirm what context it is understanding.',
  'recentActivity.empty': 'No activity records yet',
  'recentActivity.loading': 'Loading activity timeline',
  'recentActivity.title': 'Recent Records',
  'resource.state.available': 'Available',
  'resource.state.installing': 'Installing',
  'resource.state.missing': 'Missing',
  'resource.state.optional': 'Optional',
  'resources.defaultMessage': 'The recording service provides the current status for this local capability.',
  'resources.downloadProgress': 'Download progress: {{progress}}%',
  'resources.downloaded': 'Resource downloaded',
  'resources.installAll': 'Install all',
  'resources.loading': 'Loading local capabilities',
  'resources.recheck': 'Recheck',
  'resources.verified': 'Resource verified',
  'setup.loadingModels.description': 'Chronicle needs a model to understand activity and generate memory. Once models finish loading, choose an organization model.',
  'setup.loadingModels.title': 'Loading available models',
  'setup.missingModel.action': 'Choose organization model',
  'setup.missingModel.description': 'No organization model is selected yet. Cradle needs to know which model should understand activity, generate summaries, and distill memory.',
  'setup.missingModel.title': 'Chronicle cannot be enabled yet',
  'setup.missingProvider.action': 'Configure model providers',
  'setup.missingProvider.description': 'No model provider is configured yet. Add an available model under Model Providers, then return here to choose an organization model.',
  'setup.missingProvider.title': 'Chronicle cannot be enabled yet',
  'slack.empty': 'No Slack source connected yet',
  'slack.lastMessage': 'Last message',
  'slack.lastSync': 'Last sync',
  'slack.loading': 'Loading Slack sources',
  'slack.mode.eventsDescription': 'Receive events in real time and keep polling as a fallback',
  'slack.mode.label': 'Mode',
  'slack.mode.polling': 'Polling',
  'slack.mode.pollingAriaLabel': 'Slack polling',
  'slack.mode.pollingDescription': 'Only sync periodically in the background',
  'slack.noChannels': 'No channels yet',
  'slack.placeholder.channelIds': 'Channel IDs, separated by commas',
  'slack.placeholder.label': 'Source name',
  'slack.pollingEnabled': 'Polling sync enabled',
  'slack.secretHelp': 'Token and signing secret are stored in Cradle secrets; Chronicle only saves secret references and the channel allowlist.',
  'slack.sourceCount': '{{count}} sources',
  'slack.title': 'Slack Source',
  'sources.title': 'Data Sources',
  'sources.description': 'Cradle puts different sources on one timeline instead of making you search them separately.',
  'sources.metric.total': '{{screen}} clues · {{messages}} messages · {{audio}} transcripts',
  'sources.screen.title': 'Screen & Windows',
  'sources.screen.description': 'Understand the current app, window title, and readable text.',
  'sources.screen.active': 'Capturing',
  'sources.slack.title': 'Slack Messages',
  'sources.slack.description': 'Put channel discussions into the same work context.',
  'sources.audio.title': 'Meetings & Audio',
  'sources.audio.description': 'Record meeting clues and generate transcripts when available.',
  'speaker.aliasCount': '{{count}} aliases',
  'speaker.embeddingDimensions': '{{count}} dimensions',
  'speaker.labelFallback': 'Speaker label',
  'speaker.lastSeen': 'Last seen',
  'speaker.noVoiceprint': 'No voiceprint yet',
  'speaker.sampleCount': '{{count}} samples',
  'speakers.description': 'If you import meeting transcripts, Cradle gradually learns speaker labels so later reviews can show who said what.',
  'speakers.empty': 'No speaker records yet',
  'speakers.loading': 'Loading speakers',
  'speakers.title': 'Meeting Speakers',
  'status.dreamDisabled': 'Memory maintenance disabled',
  'status.dreamSummary': 'Memory maintenance {{state}} · {{mode}} · {{hours}} hours',
  'status.item.activities': 'Activity',
  'status.item.audio': 'Audio',
  'status.item.events': 'Events',
  'status.item.knowledge': 'Knowledge',
  'status.item.lastMemory': 'Last memory',
  'status.item.memories': 'Memories',
  'status.item.pipeline': 'Pipeline',
  'status.item.preview': 'Preview',
  'status.item.service': 'Recording service',
  'status.item.transcripts': 'Transcripts',
  'status.item.windows': 'Windows',
  'status.lastExit': 'Last exit code {{code}}, at {{time}}',
  'status.loading': 'Loading status',
  'status.noExitRecord': 'No abnormal exit records',
  'status.noModel': 'No model selected yet',
  'status.pipelineDisabled': 'Automatic organization disabled',
  'status.pipelineSummary': 'Automatic organization {{state}} · {{seconds}} seconds · {{count}} segments per run',
  'status.service.running': 'Running {{pid}}',
  'status.storageUnavailable': 'Storage location unavailable',
  'status.title': 'Current Status',
  'time.daysAgo': '{{count}} days ago',
  'time.hoursAgo': '{{count}} hours ago',
  'time.justNow': 'Just now',
  'time.minutesAgo': '{{count}} minutes ago',
  'time.never': 'Never',
  'timeline.fallback.audioTranscript': 'Audio transcript',
  'timeline.fallback.screenRecord': 'Screen record',
  'timeline.fallback.slackMessage': 'Slack message',
  'timeline.fallback.unknownUser': 'Unknown user',
  'timeline.displayLabel': 'Display {{displayId}}',
  'timeline.filter.all': 'All',
  'timeline.filter.allDisplays': 'All displays',
  'timeline.filter.display.ariaLabel': 'Filter records by display',
  'timeline.filter.source.ariaLabel': 'Filter records by source',
  'timeline.filteredEmpty': 'No records match these filters',
  'timeline.frameAlt': 'Activity record at {{time}}',
  'timeline.frameUnavailable': 'Frame unavailable',
  'timeline.source.audio': 'Audio',
  'timeline.source.message': 'Message',
  'timeline.source.snapshot': 'Screen',
} as const
