const messages = { common: { cancel: "Cancel", create: "Create", save: "Save", saving: "Saving…", saveChanges: "Save changes", connected: "Connected", notConnected: "Not connected", disconnect: "Disconnect", disconnecting: "Disconnecting...", }, root: { commandActions: "Actions", commandSearch: "Search", openAgent: "Open Agent", commandAppearance: "Appearance", toggleTheme: "Toggle theme", extensionSignedInTitle: "Signed in", extensionSignedInDescription: "Open the Clips extension again to start recording.", gotIt: "Got it", }, builderCredits: { pausedTitle: "Builder.io credits paused", transcriptionDescription: "Upgrade Builder.io to resume backup transcription. Existing native transcripts stay visible.", cleanupDescription: "Upgrade Builder.io to resume transcript cleanup, summaries, and AI titles. The native transcript was kept.", settingsDescription: "Upgrade Builder.io to resume backup transcription, transcript cleanup, summaries, and AI titles. Existing native transcripts stay visible.", titleDescription: "AI title generation is paused. Your transcript still works.", upgrade: "Upgrade Builder.io", retryAfterUpgrade: "Retry after upgrade", openAiSetup: "AI setup", featureBackupTranscription: "Backup transcription", featureCleanup: "Transcript cleanup", featureSummaries: "Summaries", featureTitles: "AI titles", }, recorder: { cameraBlurTitle: "Blur background", cameraBlurDescription: "Keep yourself sharp, blur what's behind you", cameraBlurToggle: "Blur the camera background", cameraBlurIntensityLabel: "Intensity", cameraBlurIntensityAria: "Background blur intensity", }, navigation: { brand: "Clips", library: "Library", sharedWithMe: "Shared with me", spaces: "Spaces", meetings: "Meetings", dictate: "Dictate", archive: "Archive", trash: "Trash", agent: "Agent", settings: "Settings", notifications: "Notifications", insights: "Insights", space: "Space", folder: "Folder", extensions: "Extensions", newRecording: "New recording", folders: "Folders", newFolder: "New folder", noSpaces: "No spaces yet", desktopCta: "Get desktop app", desktopTitle: "Get the Clips desktop app.", desktopBody: "Record from the menu bar, global shortcut, auto-updates.", expandSidebar: "Expand sidebar", collapseSidebar: "Collapse sidebar", agentEmptyState: "How can I help with your recordings?", agentSuggestionSummary: "Summarize my last recording", agentSuggestionPricing: "Find where I mentioned pricing", agentSuggestionFiller: "Remove filler words from this clip", createFolderError: "Create failed", folderCreated: "Folder created", folderNamePlaceholder: "Folder name", }, empty: { library: { title: "Your library is empty", body: "Capture your first screen recording and it'll land here, ready to share.", cta: "Record your first Clip", }, shared: { title: "No clips shared with you yet", body: "Clips that teammates share with you will appear here.", }, folder: { title: "This folder is empty", body: "Drag recordings in, or hit record to start something new in this folder.", cta: "Record here", }, space: { title: "No recordings in this space yet", body: "Share a recording with the space or record something new — your team will see it here.", cta: "Record for this space", }, archive: { title: "Nothing archived", body: "Archived recordings are hidden from the library but kept safe. You can always restore them later.", }, trash: { title: "Trash is empty", body: "Deleted recordings appear here for 30 days before being permanently removed.", }, search: { title: "No matches", body: "Try a different search term or check your filters.", }, }, trashRoute: { title: "Trash", selected: "{{count}} selected", deselectAll: "Deselect all", selectAll: "Select all", restore: "Restore", deleteForever: "Delete forever", deleteForeverTitle: "Delete forever?", bulkDeleteDescription: "Recordings to permanently remove: {{count}}. This cannot be undone.", singleDeleteDescription: "This recording will be permanently removed. This cannot be undone.", restored: "Restored", restoreFailed: "Restore failed", permanentlyDeleted: "Permanently deleted", deleteFailed: "Delete failed", clipsRestored: "{{count}} clips restored", clipsRestoreFailed: "{{count}} clips could not be restored", clipsPermanentlyDeleted: "{{count}} clips permanently deleted", clipsDeleteFailed: "{{count}} clips could not be deleted", }, recordingRoute: { pageTitle: "Clip recording · Clips", }, meetingDetailRoute: { pageTitle: "Meeting · Clips", }, recordingPage: { untitledClip: "Untitled Clip", recordingNotFound: "Recording not found", noAccess: "You may not have access to this clip.", backToLibrary: "Back to library", storageStillDisconnected: "Storage still isn't connected", finishBuilderOrS3: "Finish the Builder.io popup or configure S3-compatible storage, then try again.", loomImportResumed: "Loom import resumed", clipUploadResumed: "Clip upload resumed", couldNotRetryLoom: "Couldn't retry Loom import", couldNotResumeUpload: "Couldn't resume upload", tryAgainMoment: "Try again in a moment.", aiRequestFailed: "AI request failed", titleUpdated: "Title updated", transcriptNotReady: "Transcript is not ready yet", tryAfterTranscription: "Try again after transcription finishes.", titleGenerationQueued: "Title generation queued", descriptionQueued: "Description request queued", chapterQueued: "Chapter request queued", fillerQueued: "Filler-word removal queued", silenceQueued: "Silence removal queued", silenceWorking: "Removing silences…", silenceCompleted: "Silence removal complete", silenceFailed: "Silence removal failed", workflowQueued: "Workflow request queued", pageTitle: "Clip recording · Clips", loomMissingUrl: "This Loom recording is missing its source URL.", finalizeFailed: "Finalize failed ({{status}})", uploadTooLarge: "Clips tried to compress this desktop recording, but it is still too large to upload. The original is saved locally and can be retried from the Clips menu.", desktopSavedUploadFailed: "The desktop recorder finished and saved a local copy, but Clips could not upload it. You can retry from the Clips menu without recording again.", retryLibrary: "You can retry from the library.", processingStuck: "Saving is taking longer than expected (status={{status}}). If you recorded in the desktop app, open Clips from the menu bar to retry or download a saved local copy, then check again.", uploadingAssembling: "Uploading and assembling your video — this usually takes just a few seconds.", connectStorageImportLoom: "Connect storage to import this Loom.", connectStorageFinishClip: "Connect storage to finish saving this clip.", uploadPausedSaved: "Upload paused; clip saved locally.", savingWentWrong: "Something went wrong while saving this clip.", finishingClip: "Finishing up your clip…", loomSourcePreserved: "The Loom source link is preserved. Connect storage with Builder.io (free tier storage + AI) or S3-compatible storage, and Clips will retry saving its own copy.", clipDataPreserved: "Your clip data is still preserved. Connect storage with Builder.io (free tier storage + AI) or S3-compatible storage, and Clips will upload it automatically.", details: "Details", importingLoom: "Importing Loom...", uploadingSavedClip: "Uploading saved clip…", storageConnectedSavingLoom: "Storage is connected. Clips is saving its own copy now.", storageConnectedFinishing: "Storage is connected. Clips is finishing the upload now.", connectStorageImportLoomTitle: "Connect storage to import Loom", connectStorageFinishSaving: "Connect storage to finish saving", chooseStorageRetryLoom: "Choose where Clips should store videos. After it connects, Clips will retry this Loom import.", chooseStorageUpload: "Choose where Clips should store videos. After it connects, this saved clip will upload automatically.", storageConnectedImporting: "Storage connected. Importing Loom...", storageConnectedUploading: "Storage connected. Uploading this clip...", retryImport: "Retry import", retryUpload: "Retry upload", checkAgain: "Check again", back: "Back", done: "Done", edit: "Edit", aiTools: "AI tools", enhanceRecording: "Enhance this recording", includeFullVideo: "Include full video", includeFullVideoDescription: "When on, AI tools watch the recording (Gemini only) for on-screen context — not just the audio transcript. Also applies to default title and description generation. Requires a Gemini model via Builder or GEMINI_API_KEY.", includeFullVideoOn: "AI tools will use the full video (Gemini)", includeFullVideoOff: "AI tools will use the transcript only", regenerateTitle: "Regenerate title", regenerateDescription: "Regenerate description", autoChapters: "Auto chapters", removeFillerWords: "Remove filler words", removeSilences: "Remove silences (>1.2s)", generatePrSummary: "Generate PR summary", generateSop: "Generate SOP", generateSopTooltip: "SOP means Standard Operating Procedure: a reusable step-by-step runbook generated from this clip.", generateTicket: "Generate ticket", generateEmail: "Generate email", share: "Share", fromMeeting: "From meeting:", untitled: "Untitled", agent: "Agent", activity: "Activity", transcript: "Transcript", insights: "Insights", settings: "Settings", askAboutClip: "Ask about this clip…", summarizeClip: "Summarize this clip", generateChapters: "Generate chapters from the transcript", findActionItems: "Find action items and follow-ups", draftRecap: "Draft a shareable recap", findKeyMoments: "Find the key moments", listFollowUpActions: "List follow-up actions", draftQuestions: "Draft questions for the author", retryFailed: "Retry failed: {{message}}", networkError: "network error", ownerInsights: "Owner insights", ownerInsightsDescription: "Views, completion, and viewer details are visible to editors of this clip.", }, sharePage: { agentReadableContext: "Agent-readable clip context", agentInstructions: "Fetch agentContextUrl for the transcript and JPEG frame URLs. Fetch the frame URLs to SEE the screen, not just read the transcript.", untitledClip: "Untitled Clip", incorrectPassword: "Incorrect password", passwordProtected: "This clip is password-protected", linkExpired: "Link expired", linkExpiredMessage: "The creator set an expiry on this share link.", clipUnavailable: "Clip unavailable", clipUnavailableMessage: "This recording isn't public, or the link is invalid. If it's your clip, sign in to check access.", signIn: "Sign in", somethingWentWrong: "Something went wrong", pleaseTryAgain: "Please try again.", connectStorageFinish: "Connect storage to finish this clip.", needsAttention: "This clip needs attention to finish.", savingWentWrong: "Something went wrong while saving this clip.", finishingClip: "Finishing up this clip...", loomPreservedManage: "The Loom source link is preserved. Connect storage with Builder.io (free tier storage + AI) or S3-compatible storage, then retry the import.", videoPreservedManage: "The video is preserved. Connect storage with Builder.io (free tier storage + AI) or S3-compatible storage, and Clips will finish uploading it.", creatorNeedsStorage: "The creator needs to connect storage before this clip can finish: Builder.io (free tier storage + AI) or S3-compatible storage.", signInStorage: "If this is your clip, sign in here to connect storage with Builder.io (free tier storage + AI) or S3-compatible storage and finish the upload.", uploadNotCompleteSession: "The upload has not completed yet. Open the dashboard for this clip or ask the creator to check storage.", uploadNotCompleteSignIn: "The upload has not completed yet. If this is your clip, sign in to open the owner controls and check storage.", creatorMayRetry: "The creator may need to retry.", uploadingAssembling: "Uploading and assembling the video. This page will update automatically.", details: "Details", connectStorageFinishSaving: "Connect storage to finish saving", chooseStorageCheck: "Choose where Clips should store videos. After it connects, this page will check again.", storageConnectedChecking: "Storage connected. Checking this clip...", signInToFinish: "Sign in to finish", signInIfYours: "Sign in if this is yours", checkAgain: "Check again", backToHome: "Back to home", generatingTitle: "Generating title", tryClips: "Try Clips", clipOptions: "Clip options", downloading: "Downloading...", downloadMp4: "Download MP4", share: "Share", agent: "Agent", comments: "Comments", transcript: "Transcript", insights: "Insights", downloadForMac: "Download for Mac", downloadForWindows: "Download for Windows", downloadForLinux: "Download for Linux", downloadDesktopApp: "Download desktop app", agentNativeClips: "Agent-Native Clips", agentNativeClipsIntro: "is a free,", openSource: "open-source", agentFriendly: "agent-friendly", loomAlternative: "Loom alternative", signUp: "Sign up", ownerInsights: "Owner insights", ownerInsightsDescription: "Views, completion, and viewer details are visible to editors of this clip.", }, meetingDetail: { untitledMeeting: "Untitled meeting", unassigned: "Unassigned", them: "Them", me: "Me", regeneratingNotes: "Regenerating summary", meetingRemoved: "Meeting removed", couldNotRemoveMeeting: "Couldn't remove meeting", couldNotLoadMeeting: "Couldn't load this meeting.", transcriptCopied: "Transcript copied", couldNotCopyTranscript: "Couldn't copy transcript", allMeetings: "All meetings", live: "Live", generatingNotesInline: "Generating summary…", regenerateNotes: "Regenerate summary", share: "Share", meetingOptions: "Meeting options", removeMeeting: "Remove meeting", removeThisMeeting: "Remove this meeting?", removeDescription: "This removes the meeting from Clips. It will not delete any linked transcript or change your Google Calendar.", cancel: "Cancel", removing: "Removing...", remove: "Remove", desktopHint: "To start notes, open Clips Desktop from the menu bar and choose Start Meeting Notes, or click Start notes when the reminder appears. Clips captures mic + system audio and writes the transcript here.", getDesktopApp: "Get desktop app", generateNotesFailed: "Couldn't generate summary. Try again.", attendee_one: "{{count}} attendee", attendee_other: "{{count}} attendees", joinCall: "Join call", myNotes: "My notes", aiNotes: "AI notes", summary: "Summary", actionItems: "Action items", working: "Working…", noActionItems: "No action items yet. They appear here after notes are generated from a transcript.", transcript: "Transcript", segments: "{{count}} segments", copyTranscript: "Copy transcript", copyFullTranscript: "Copy full transcript", timeRemaining_one: "{{count}} min left", timeRemaining_other: "{{count}} min left", endMeeting: "End meeting", endThisMeeting: "End this meeting?", endMeetingDescription: "This stops recording and transcription for this meeting. You can still generate notes from what was captured so far.", couldNotEndMeeting: "Couldn't end meeting", }, transcriptPanel: { transcribing: "Transcribing…", pendingDescription: "Live transcript appears as soon as speech is captured. Cleanup continues in the background.", noSpeechDetected: "No speech detected", noSpeechDescription: "We did not catch any speech in this recording. If that was intentional, you are all set. If not, check your microphone and speech permissions, then retry transcription.", retry: "Retry", transcriptUnavailable: "Transcript unavailable: {{reason}}", transcriptUnavailableTitle: "Transcript unavailable", providerNeedsAttention: "Provider needs attention", providerNeedsAttentionDescription: "The current provider paused this request. Switch to Builder.io or update the key, then retry.", enableTranscriptionTitle: "Enable transcription", enableTranscriptionDescription: "Unlock captions, transcript search, and summaries for this Clip.", searchPlaceholder: "Search transcript", copyTranscript: "Copy transcript", downloadSrt: "Download .srt", regenerate: "Regenerate transcript", cleanupRunning: "Cleaning up transcript in the background.", noMatches: "No matches.", noTranscript: "No transcript yet.", noTranscriptCaptured: "No transcript was captured.", backupFailed: "No speech was captured locally, and backup transcription did not finish. Retry or check microphone and speech permissions.", backupNotSetup: "No speech was captured locally, and backup transcription is not set up.", cleanupKept: "Cleanup could not finish. Native transcript was kept.", cleanupBuilderFailed: "Cleanup could not finish even though Builder.io is connected. Native transcript was kept.", cleanupPaused: "Cleanup is paused. Connect AI in Settings: Builder.io (free credits) or your own LLM key.", builderNoResponse: "Didn't hear back from Builder. Allow popups and try again.", saveFailed: "Save failed ({{status}})", savedRetrying: "Saved. Retrying transcription…", getGroqKey: "Get Groq key", groqKeysStart: "Groq keys start with", waiting: "Waiting…", nativeSpeechPrimary: "Native speech remains the primary transcript source.", }, thumbnailPicker: { failedCapture: "Failed to capture frame", failedGif: "Failed to generate GIF — try a shorter range", nothingToApply: "Nothing to apply yet", updated: "Thumbnail updated", failedUpdate: "Failed to update thumbnail", thumbnail: "Thumbnail", upload: "Upload", frame: "Frame", animatedGif: "Animated GIF", uploadImage: "Upload an image", uploadedPreview: "Uploaded preview", currentThumbnail: "Current thumbnail", frameAt: "Frame at {{time}}", captureFrame: "Capture frame", preview: "Preview", capturedFrame: "Captured frame", capturePreview: "Capture a frame to preview", start: "Start: {{time}}", duration: "Duration: {{time}}", generateGif: "Generate GIF", animatedPreview: "Animated thumbnail preview", generateGifPreview: "Generate a GIF to preview", cancel: "Cancel", saveThumbnail: "Save thumbnail", }, shareDialog: { publicDescription: "Anyone with the link can view — sign in to comment or react", shareRecording: "Share recording", sharePlainTitle: "Share {{title}}", shareTitle: 'Share "{{title}}"', link: "Link", invite: "Invite", embed: "Embed", shareLink: "Share link", shareWithHumans: "Share with humans", shareWithAgents: "Share with agents", copyAgentPrompt: "Copy agent prompt", agentPrompt: "Fetch this Clips agent context URL: {{agentContextUrl}}. Use transcript.segments for spoken context, fetch recommendedFrames or the frame API URLs to see the screen, and check browserDiagnostics if present for redacted console logs and fetch/XHR request metadata.", agentTokenDescription: "This temporary agent URL lets agents read the clip without making it public. It expires after two hours.", agentLinkUnavailable: "Couldn't create the agent link.", retryAgentLink: "Retry", gifPreview: "GIF preview", openPlayer: "Open player", chooseFile: "Choose file", remove: "Remove", downloadMp4: "Download MP4", embedsNeedPublic: "Embeds need a public clip", embedPublicDescription: "This clip is currently {{visibility}}. Embedded iframes load anonymously, so the clip must be public for viewers to watch.", makingPublic: "Making public…", makePublic: "Make public", askOwnerPublic: "Ask the owner to make it public.", responsive: "Responsive (16:9)", fixedSize: "Fixed size", embedIframeTitle: "Clips video", width: "Width", height: "Height", autoplay: "Autoplay", startAt: "Start at (seconds)", embedCode: "Embed code", }, shareUi: { owner: "Owner: {{email}}", generalAccess: "General access", restrictedLinkDescription: "This link will only work for people who already have access.", makingPublic: "Making public…", makePublicAndCopy: "Make public and copy", copy: "Copy", addPeopleByEmail: "Add people by email", invite: "Invite", notifyPeople: "Notify people", peopleWithAccess: "People with access", ownerRole: "Owner", remove: "Remove", noAccessYet: "No one has access yet.", visibility: { private: { label: "Private", description: "Only people with access can view", }, org: { label: "Organization", description: "Anyone in your organization can view", }, public: { label: "Public", description: "Anyone with the link can view", }, }, roles: { viewer: "Viewer", editor: "Editor", admin: "Admin", }, }, quickAsk: { title: "Ask about this meeting", toggleHint: "to toggle · Esc to close", quickPrompts: "Quick prompts", whatDidIMiss: "What did I miss?", whatDidIMissPrompt: "What did I miss?", suggestQuestions: "Suggest questions for me to ask", suggestQuestionsPrompt: "Suggest a few good questions I could ask next in this meeting, based on what's been discussed so far.", summarizeLastFive: "Summarize the last 5 minutes", summarizeLastFivePrompt: "Summarize the last 5 minutes of this meeting in 3-5 bullets.", makeMeSoundSmart: "Make me sound smart", makeMeSoundSmartPrompt: "Give me a sharp, insightful comment or question I could add right now, based on this meeting so far.", actionItemsForMe: "Action items for me", actionItemsForMePrompt: "List the action items from this meeting that are assigned to me. Use checkbox bullets.", history: "History", emptyDescription: "Ask anything. The agent has the full transcript and meeting context.", placeholder: "Ask anything…", send: "Send", sentToChat: "Sent to chat — see the agent sidebar for the reply.", }, brandingEditor: { title: "Branding", uploadImageFile: "Please upload an image file.", logoUploaded: "Logo uploaded", uploadFailed: "Upload failed", brandingUpdated: "Branding updated", saveFailed: "Failed to save", organizationName: "Organization name", defaultVisibility: "Default recording visibility", defaultVisibilityDescription: "Applied to new recordings unless you choose a different visibility.", brandColor: "Brand color", brandColorPicker: "Brand color picker", useColor: "Use {{color}}", logo: "Logo", logoPreview: "Logo preview", dropReplace: "Drop a new image to replace", dropHere: "Drop a PNG / JPG / SVG here", uploading: "Uploading…", chooseFile: "Choose file", remove: "Remove", preview: "Preview", organizationFallback: "Organization", saving: "Saving…", save: "Save", }, downloadRoute: { pageTitle: "Download Clips Desktop", description: "Record your screen from the system tray. Auto-updating desktop app for macOS, Windows, and Linux.", macSublabel: "Universal (Apple Silicon + Intel)", windowsSublabel: "64-bit MSI installer", downloadFor: "Download for {{platform}}", alsoFor: "Also available for {{platform}}", backToLibrary: "Back to library", clipsDesktop: "Clips Desktop", heroDescription: "A menu-bar recorder for screen, camera, and screen + camera. One-click start, draggable camera bubble, instant-share link when you stop.", versionReleased: "Version {{version}} — released {{date}}", version: "Version {{version}}", manifestError: "Could not load release manifest — pick an installer from the releases page.", loadingRelease: "Loading latest release…", chromeTitle: "Chrome extension for browser logs", chromeDescription: "Use the extension when you want a recording plus redacted console and fetch/XHR diagnostics from the tab you launch from. The desktop app is still the smoothest everyday recorder.", installChrome: "Install Chrome extension", chromePending: "Chrome Web Store URL pending", }, inviteRoute: { missingToken: "Missing invite token.", notFound: "Invite not found or expired.", loadFailed: "Failed to load invite", joined: "Joined {{team}}", theTeam: "the team", acceptFailed: "Failed to accept invite", declined: "Invite declined", declineFailed: "Failed to decline", signInRequired: "Sign in required", signInDescription: "You need to sign in before you can accept an invite.", signIn: "Sign in", invited: "You've been invited", loading: "Loading…", role: "Role:", invitedToJoin: "{{inviter}} invited you to join {{team}} on Clips.", emailMismatch: "Heads up: this invite was sent to {{inviteEmail}}. You are signed in as {{sessionEmail}}. Accepting will still work but your account email will be the one joining.", decline: "Decline", joining: "Joining…", acceptInvite: "Accept invite", declineInvite: "Decline this invite?", declineDescription: "The invite will be removed. The admin can always send you a new one.", cancel: "Cancel", pageTitle: "Join team · Clips", }, settings: { openAgentSettings: "Manage agent", agentDescription: "Manage the agent's model, API keys, automations, voice, and other controls.", agentTitle: "Manage agent", title: "Settings", pageTitle: "Settings · Clips", intro: "Preferences and connected services for this Clips workspace.", languageTitle: "Language", languageDescription: "Choose the interface language for this account. Clips remembers it across devices.", languageLabel: "Interface language", uploadWorkspaceTitle: "Active workspace", uploadWorkspaceDescription: "Choose the workspace Clips uses for new recordings, including desktop uploads.", uploadWorkspaceLabel: "Current workspace", uploadWorkspacePlaceholder: "Choose a workspace", uploadWorkspaceHint: "Switching this also updates workspace-scoped Clips views.", uploadWorkspaceSaving: "Saving workspace…", uploadWorkspaceSaved: "Active workspace updated", uploadWorkspaceSaveFailed: "Could not update active workspace", whatsNew: "What's new", changelogEmpty: "No updates yet.", viewAllUpdates: "View all updates", expand: "Expand", collapse: "Collapse", changelogMarkdown: `# Changelog All notable user-facing changes to Clips are documented here. Open it any time from the command menu (Cmd+K -> "What's new") or from Settings. ## 2026-06-23 ### Added - See what's new right inside Clips. A changelog now lives in the command menu (Cmd+K) and in Settings.`, profile: "Profile", email: "Email", displayName: "Display name", displayNamePlaceholder: "Your name", playback: "Playback", defaultPlaybackSpeed: "Default playback speed", playbackDescription: "Applied automatically when you open a recording.", transcript: "Transcript", transcriptCleanup: "Background cleanup", transcriptCleanupDescription: "Show the native transcript immediately, then clean it up in the background when available.", notifications: "Notifications", emailNotifications: "Email notifications", emailNotificationsDescription: "Get an email when someone comments, reacts, or shares a recording with you.", saved: "Settings saved", saveFailed: "Failed to save", builderConnectedToast: "Builder.io connected", videoStorage: "Video storage", videoStorageDescription: "Builder.io is the primary storage path for Clips uploads. S3 is available when you need to bring your own bucket.", checkingBuilder: "Checking Builder.io", builderConnected: "Builder.io connected", connectBuilder: "Use Builder.io (free)", builderConnectedFor: "Using Builder.io for {{orgName}}.", builderConnectedGeneric: "New clips use the connected Builder.io provider.", builderIncludes: "Includes object storage, uploads, and managed transcription for new clips.", s3Title: "S3-compatible storage", secondary: "Secondary", active: "Active", s3BuilderConnectedDescription: "Use this only if this workspace should upload to your own bucket instead of Builder.io.", s3CurrentProvider: "Currently using {{providerName}}.", s3OwnBucketDescription: "Use your own bucket if you do not want Builder.io storage.", configureS3: "Configure S3", hideS3: "Hide S3", saveStorage: "Save storage", storageSaved: "Storage settings saved", storageRequired: "Endpoint, bucket, access key, and secret are required.", s3EndpointLabel: "Endpoint URL", s3BucketLabel: "Bucket", s3AccessKeyLabel: "Access key ID", s3SecretAccessKeyLabel: "Secret access key", s3RegionLabel: "Region", s3PublicBaseUrlLabel: "Public base URL", s3UrlInvalid: "Must be a valid URL (e.g. https://s3.us-east-1.amazonaws.com)", s3BucketInvalid: "Bucket name must be 3–63 lowercase letters, numbers, or hyphens", s3RegionInvalid: 'Must be a valid region (e.g. us-east-1) or "auto"', apiSetup: "AI setup", apiSetupDescription: "Connect AI with Builder.io free credits or your own LLM keys.", builderEasySetup: "Builder.io free credits", builderAiAvailable: "Included AI credits and managed transcription are available for Clips.", builderAiDescription: "Use Builder.io first for included AI credits, object storage, uploads, and managed transcription.", providerKeyTitle: "Bring your own provider key", providerKeyDescription: "Add Anthropic, OpenAI, Gemini, Groq, or OpenRouter keys for provider-billed usage.", providerKeysSet: "{{count}} set", checkingProviderKeys: "Checking provider keys…", keySet: "Set", keyCleared: "Storage credentials cleared", clearAllS3: "Clear credentials", replaceKey: "Replace key…", pasteProviderKey: "Paste a provider key first.", apiKeySaved: "API key saved", apiKeyFailed: "Failed to save key", slackTitle: "Agent-Native Clips for Slack", slackDescription: "Share a public clip, paste the link in Slack, and it plays inline — no extra steps for viewers. Connect each workspace once.", checkingSlack: "Checking Slack", slackConnected_one: "{{count}} workspace connected", slackConnected_other: "{{count}} workspaces connected", slackOauthNeeded: "OAuth credentials needed", slackPreviewDescription: "Public Clips links can render as playable Slack previews.", connectSlack: "Connect Slack", slackClientMissing: "Set SLACK_CLIENT_ID and SLACK_CLIENT_SECRET for this deployment before connecting workspaces.", slackSigningMissing: "Set SLACK_SIGNING_SECRET so Slack event callbacks can be verified.", connectedBy: "Connected by {{email}}", disconnectSlackLabel: "Disconnect {{team}}", slackConnectedToast: "Slack connected", slackCheckedToast: "Slack connection checked", slackDisconnectedToast: "Slack disconnected", slackConnectFailed: "Failed to connect Slack", slackDisconnectFailed: "Failed to disconnect Slack", disconnectSlackTitle: "Disconnect Slack?", disconnectSlackDescription: "Clips will delete the stored bot token for {{team}} and stop sending playable Slack previews.", thisWorkspace: "this workspace", slackConnected: "Slack Connected", }, insightsHub: { title: "Insights", period: "Period", last7Days: "Last 7 days", last14Days: "Last 14 days", last30Days: "Last 30 days", last90Days: "Last 90 days", exportCsv: "Export CSV", description: "Engagement across your organization over the last {{days}} days.", views: "Views", reactions: "Reactions", comments: "Comments", recordings: "Recordings", engagementTrend: "Engagement trend", topVideos: "Top videos", topCreators: "Top creators", }, folderTree: { noFolders: "No folders yet", rename: "Rename", newSubfolder: "New subfolder", delete: "Delete", renameFolder: "Rename folder", renamed: "Folder renamed", renameFailed: "Rename failed", createInside: 'Create a folder inside "{{name}}".', folderName: "Folder name", created: "Folder created", createFailed: "Create failed", deleteFolder: "Delete folder?", deleteDescription: "Recordings inside will move to the parent scope (library root or the parent folder). Nested subfolders are removed. This cannot be undone.", deleted: "Folder deleted", deleteFailed: "Delete failed", }, organizationSettings: { pageTitle: "Organization settings · Clips", title: "Organization · Settings", namedTitle: "{{name}} · Settings", noOrganization: "No organization yet. Create one from the organization switcher to get started.", description: "Organization admin: branding, members, invites.", adminsOnlyBranding: "Only admins can edit branding.", members: "Members", pendingInvites: "Pending invites", noPendingInvites: "No pending invites.", email: "Email", role: "Role", sent: "Sent", }, recordingInsights: { loading: "Loading insights…", noData: "No data yet.", views: "Views", uniqueViewers: "Unique viewers", completion: "Completion", ctaConversion: "CTA conversion", dropOff: "Drop-off", viewersCount: "{{count}} viewers", watching: "Watching", recentViewers: "Recent viewers", noViewers: "No viewers yet.", anonymous: "Anonymous", moreViewers: "+{{count}} more", viewedBy: "Viewed by", someone: "Someone", noViewsYet: "No views yet.", viewsCount_one: "{{count}} view", viewsCount_other: "{{count}} views", totalViewsSummary: "{{total}} total views, {{unique}} unique viewers", viewsTab: "Views", insightsTab: "Insights", humanViews: "Human views", agentViews: "Agent views", noAgentViewsYet: "No agent views yet.", totalVideoViews: "Total video views", averageCompletionRate: "Average completion rate", moreInsights: "More insights", }, libraryGrid: { spaceRoot: "Space root", libraryRoot: "Library root", clipsMoved: "{{count}} clips moved", moveFailed: "Failed to move clips", titleRequired: "Title cannot be empty", clipRenamed: "Clip renamed", renameFailed: "Failed to rename clip", renameClip: "Rename clip", clipTitle: "Clip title", movedToTrash: "Moved to trash", restoredFromArchive: "Restored from archive", archived: "Archived", clipsArchived: "{{count}} clips archived", clipsArchiveFailed: "{{count}} clips could not be archived", clipsMovedToTrash: "{{count}} clips moved to trash", clipsTrashFailed: "{{count}} clips could not be moved to trash", loadFailedTitle: "Couldn't load your recordings", loadFailedBody: "Something went wrong while loading this list. Your recordings are safe — try again.", retry: "Retry", paginationRange: "{{start}}–{{end}} of {{total}}", paginationPrevious: "Previous", paginationNext: "Next", paginationPage: "Page {{page}} of {{totalPages}}", }, notificationsRoute: { pageTitle: "Notifications · Clips", title: "Notifications", description: "Comments, reactions, mentions, and shares on your recordings in the last 30 days.", replySent: "Reply sent", sendFailed: "Failed to send", all: "All", comments: "Comments", reactions: "Reactions", mentions: "Mentions", shares: "Shares", loading: "Loading…", replyTo: "Reply to {{email}} on", replyPlaceholder: "Write a reply…", }, stitchManager: { defaultTitle: "Stitched recording", title: "Stitch recordings", pickAtLeastTwo: "Pick at least 2 recordings to stitch together", videoUrlMissing: "One or more recordings don't have a ready video URL yet", connectStorage: "Connect storage before stitching recordings: Builder.io (free tier storage + AI) or S3-compatible storage.", created: "Stitched recording created", failed: "Failed to stitch recordings", noOtherRecordings: "No other recordings available.", combineOrder: "Combine order", emptyQueue: "Click recordings on the left to add them here. Drag to reorder.", titleLabel: "Title", combining: "Combining with ffmpeg.wasm — {{progress}}%. Large stitches may take a minute.", combine: "Combine", }, inviteDialog: { title: "Invite members", description: "Paste one or more emails separated by commas or new lines. Invites expire in 7 days.", enterEmail: "Enter at least one email address.", invalidEmails: "Invalid email(s): {{emails}}", emailFailed: "{{email}}: {{message}}", failed: "Failed", sent: "Sent {{count}} invites.", sentWithFailures: "Sent {{sent}} invites, {{failed}} failed.", emails: "Emails", memberRole: "Member — record, edit, share", adminRole: "Admin — full control", sending: "Sending…", sendInvites: "Send invites", }, membersList: { memberRole: "Member", adminRole: "Admin", roleUpdated: "Updated {{email}}'s role to {{role}}", updateFailed: "Failed to update role", removed: "Removed {{email}} from the organization", removeFailed: "Failed to remove member", noMembers: "No members yet.", member: "Member", joined: "Joined", you: "(you)", removeMemberLabel: "Remove {{email}}", removeTitle: "Remove member?", removeDescription: "{{email}} will lose access to this organization. You can always invite them back.", remove: "Remove", }, commentsPanel: { disabled: "Comments are disabled for this recording.", beFirst: "Be the first to comment", leaveNotePanel: "Leave a note at the top of this panel.", leaveNoteTimestamp: "Leave a note at the current timestamp.", leaveComment: "Leave a comment...", signInToComment: "Sign in to leave a comment.", signIn: "Sign in", replyingTo: "Replying to", commentAt: "Comment at", writeReply: "Write a reply...", commentButton: "Comment", composerPlaceholder: "Add a comment…", mentionSomeone: "Mention someone", addEmoji: "Add emoji", }, shareMeeting: { pageTitle: "Meeting notes · Clips", description: "AI meeting notes shared via Clips.", unavailable: "This meeting is private or no longer available.", tryClips: "Try Clips", attendees: "{{count}} attendees", noAiNotes: "A summary hasn't been generated yet for this meeting.", summary: "Summary", keyPoints: "Key points", actionItems: "Action items", sharedContent: "Shared content", summaryIncluded: "Summary, key points, and action items", includeTranscript: "Include full transcript", includeTranscriptDescription: "Anyone with access to this meeting can read the complete transcript.", transcriptUnavailable: "The transcript isn't ready yet.", transcript: "Transcript", copyTranscript: "Copy transcript", transcriptCopied: "Transcript copied", copyTranscriptFailed: "Couldn't copy the transcript", updateTranscriptSharingFailed: "Couldn't update transcript sharing", }, deleteRecordingMenu: { movedToTrash: "Clip moved to trash", deleteFailed: "Failed to delete clip", clipOptions: "Clip options", delete: "Delete", moveTitle: "Move this clip to trash?", moveDescription: "This removes the clip from your library. You can restore it from Trash or delete it forever later.", deleting: "Deleting...", moveToTrash: "Move to trash", }, recordingToolbar: { controls: "Recording controls", resumeRecording: "Resume recording", pauseRecording: "Pause recording", resumeShortcut: "Resume (⌥⇧P)", pauseShortcut: "Pause (⌥⇧P)", stop: "Stop recording", elapsed: "Elapsed time", cancel: "Cancel recording", cancelShortcut: "Cancel (⌥⇧C)", }, countdownOverlay: { startsIn: "Recording starts in {{count}}", cancel: "Cancel recording", skip: "Skip countdown and start recording now", hint: "Esc to cancel · Enter to start now", }, videoPlayer: { loomVideo: "Loom video", noVideo: "No video available", thanks: "Thanks for watching", playClip: "Play clip", unsupportedFormat: "This browser can't play this video. Try opening the link in Chrome, Edge, or Firefox.", }, searchBar: { placeholder: "Search recordings…", clear: "Clear search", searching: "Searching…", noMatchesFor: "No matches for", titleTranscript: "Title + transcript", titleComment: "Title + comment", transcript: "Transcript", comment: "Comment", titleOrDescription: "Title or description", }, organizationSwitcher: { noOrganization: "No organization", organizationCount: "{{count}} organizations", organizations: "Organizations", noOrganizations: "No organizations yet", switchFailed: "Failed to switch organization", newOrganization: "New organization", createOrganization: "Create organization", organizationName: "Organization name", created: 'Created "{{name}}"', createFailed: "Failed to create organization", creating: "Creating…", }, playerControls: { playbackSpeed: "Playback speed", }, autoRecordPrompt: { notesStarted: "Notes started.", cancelWithSeconds: "Cancel ({{count}}s)", startNotesQuestion: "It's time for this meeting — start notes?", autoStartsIn: "Auto-starts in {{count}}s", startNotes: "Start notes", dismiss: "Dismiss", }, meetingCanvas: { noAiNotes: "No AI notes yet. Generate notes from a finished transcript.", noNotes: "No notes.", yourNotes: "Your notes…", clickToEdit: "Click to edit", }, meetingCard: { live: "Live", transcript: "Transcript", aiNotesReady: "AI notes ready", noSummary: "No summary yet", transcriptSource: "Transcript source", now: "Now", started: "Started", inMinutes: "in {{count}} min", inHours: "in {{count}} hr", join: "Join", openNotes: "Open notes", open: "Open notes", startFromDesktopNow: "Start live notes from the desktop reminder or menu bar.", startFromDesktopLater: "Clips Desktop will show Start notes when it is time.", }, transcriptBubbles: { listening: "Listening…", noTranscript: "No transcript yet.", liveTranscriptDescription: "The live transcript will appear here once notes start.", me: "Me", them: "Them", searchTranscript: "Search transcript", searchPlaceholder: "Search transcript…", searchMatchCount: "{{current}} of {{total}}", searchNoMatches: "No matches", searchPrevMatch: "Previous match", searchNextMatch: "Next match", searchClose: "Close search", }, editorLayout: { trimmed: "Trimmed", trimFailed: "Trim failed", cut: "Cut", cutFailed: "Cut failed", split: "Split", splitFailed: "Split failed", loadingRecording: "Loading recording…", recordingNotFound: "Recording not found", noVideoYet: "No video available yet.", }, transcriptEditor: { transcript: "Transcript", selectionRange: "· selection {{start}} → {{end}}", selectTextToTrim: "· select text to trim", cutSelection: "Cut selection", noTranscript: "No transcript yet.", }, createSpaceDialog: { newSpace: "New space", description: "Create a space in the current organization.", name: "Name", color: "Color", useColor: "Use color {{color}}", spaceCreated: "Space created", createFailed: "Could not create space", }, signInPrompt: { title: "Sign in to {{intent}}", description: "Create an account or sign in to {{intent}} on this clip. We'll bring you right back here when you're done.", notNow: "Not now", signIn: "Sign in", }, embedRoute: { passwordRequired: "Password required", unavailable: "Clip unavailable.", }, cameraVisualizer: { bubble: "Bubble", live: "Live", waiting: "Waiting", opening: "Opening", stop: "Stop", openingEllipsis: "Opening...", test: "Test", selectedPreview: "Selected camera preview", preview: "Camera preview", setBubbleSize: "Set camera bubble size {{size}}", }, storageSetup: { builderTimeout: "Didn't hear back from Builder in 5 minutes. Check the popup and try again.", builderConnected: "Builder.io connected", waitingForBuilder: "Waiting for Builder...", connectBuilder: "Use Builder.io (free)", free: "Free", configureS3: "configure S3-compatible storage", whyPrompt: "Why am I seeing this?", whyDescription: "Clips is 100% free and open source, so you need to hook up a way to store clips. Connect storage with Builder.io for free-tier storage and AI, or use S3-compatible object storage and your own LLM keys.", }, captureInstall: { title: "Choose your recorder", description: "Use Chrome when you need browser logs, or desktop for the smoothest everyday capture.", chromeTitle: "Chrome extension", chromeDescription: "Best when you want redacted console and network diagnostics from the browser tab.", chromePendingDescription: "Browser logs option is ready, pending the Chrome Web Store URL.", desktopTitle: "Desktop app", desktopDescription: "Most seamless for global shortcuts, menu-bar recording, meetings, and repeat captures.", openDesktopApp: "Open desktop app", }, editableTitle: { untitled: "Untitled Clip", renameFailed: "Failed to rename clip", emptyTitle: "Title cannot be empty", generatingTitle: "Generating title", placeholder: "Clip title", editLabel: "Edit clip title", }, chapters: { title: "Chapters", addHere: "Add here", empty: "No chapters yet.", remove: "Remove chapter", saveFailed: "Failed to save chapters", duplicateAtPoint: "A chapter already exists at this point", defaultTitle: "Chapter {{count}}", seekTo: "Seek to {{time}}", }, editorToolbar: { undoTooltip: "Undo (Cmd/Ctrl+Z)", playPauseTooltip: "Play / Pause (Space)", sourceDuration: "({{duration}} src)", previewSpeed: "Preview speed", previewSpeedTooltip: "Preview speed while trimming", cutSelection: "Cut selection", cutSelectedRange: "Cut selected range", edit: "Edit", playheadEdits: "Playhead edits", splitAtPlayhead: "Split at playhead", cutBeforePlayhead: "Cut before playhead", cutAfterPlayhead: "Cut after playhead", panels: "Panels", hideChapters: "Hide chapters", showChapters: "Show chapters", thumbnail: "Thumbnail", stitchClips: "Stitch clips", zoom: "Zoom", zoomOut: "Zoom out", fitToWidth: "Fit to width", zoomIn: "Zoom in", clearAllEdits: "Clear all edits", loadingFfmpeg: "Loading ffmpeg…", exportMp4: "Export MP4", longExportTitle: "This export is long", longExportDescription: "The edited video is {{duration}}. ffmpeg.wasm runs in your browser and may run out of memory for very long exports. You can try anyway or download the original file instead.", downloadOriginal: "Download original", exportAnyway: "Export anyway", clearAllEditsTitle: "Clear all edits?", clearAllEditsDescription: "This removes every trim, blur, and the custom thumbnail from this recording. The original video is never modified.", clearEdits: "Clear edits", nothingToUndo: "Nothing to undo", undoFailed: "Undo failed", editsCleared: "Edits cleared", clearFailed: "Clear failed", selectRangeFirst: "Select a range on the waveform or transcript first", selectionCut: "Selection cut", trimFailed: "Trim failed", movePlayheadPastIntro: "Move the playhead past the intro you want to cut", startCut: "Start cut", movePlayheadBeforeEnding: "Move the playhead before the ending you want to cut", endCut: "End cut", splitAdded: "Split added", splitFailed: "Split failed", videoNotReady: "Video not ready yet", exportedMp4: "Exported MP4", exportFailed: "Export failed — ffmpeg.wasm can't always handle long videos. Try shorter edits or use the original file.", }, preRecord: { modeScreenCamera: "Screen + cam", modeScreenOnly: "Screen only", modeCameraOnly: "Camera only", surfaceWindow: "Window", surfaceWindowDescription: "Best for slides or one app", surfaceBrowser: "Browser tab", surfaceBrowserDescription: "Choose an open tab", surfaceScreen: "Screen", surfaceScreenDescription: "Capture everything", microphoneSelectionUnsupported: "This browser does not support microphone device selection.", enumerateFailed: "Could not enumerate devices", noMicrophone: "No microphone", defaultMicrophone: "Default microphone", shortMicLabel: "Mic {{id}}", defaultCamera: "Default camera", shortCameraLabel: "Camera {{id}}", noAudio: "No audio", noCamera: "No camera", loomImportFailed: "Could not import that Loom.", fixMicrophoneAccess: "Fix microphone access or turn audio off before recording.", fixCameraAccess: "Fix camera access or switch to Screen mode before recording.", captureSource: "Capture source", selectedSurface: "{{surface}} selected", change: "Change", audioAndCamera: "Audio & camera", audio: "Audio", check: "Check", choose: "Choose", defaultMicPlaceholder: "Default mic", openingMicrophone: "Opening microphone...", chooseMicrophone: "Choose microphone...", includeAudioAria: "Include audio in this recording", tryClipsDesktop: "Try Clips Desktop.", cameraOff: "Camera off", includeCameraAria: "Include camera in this recording", startRecording: "Start recording", uploadVideo: "Upload video", importLoom: "Import Loom", importing: "Importing...", import: "Import", }, playerSettings: { title: "Settings", privacy: "Privacy", visibility: "Visibility", visibilityPrivate: "Private", visibilityOrg: "Organization", visibilityPublic: "Public", passwordProtection: "Password protection", passwordSetPlaceholder: "Password is set — type to replace", noPasswordPlaceholder: "No password", passwordWhitespaceOnly: "Spaces alone aren't a valid password.", removePassword: "Remove", expiry: "Expiry", viewerOptions: "Viewer options", comments: "Comments", reactions: "Reactions", allowDownloads: "Allow downloads", animatedThumbnail: "Animated thumbnail", defaultPlaybackSpeed: "Default playback speed", callToAction: "Call to action", defaultCtaLabel: "Learn more", addCta: "+ Add", noCtas: "No CTAs yet. Add a button that appears during or after the video.", buttonLabelPlaceholder: "Button label", placementThroughout: "Throughout", placementEnd: "At end", delete: "Delete", }, recordRoute: { pageTitle: "New recording — Clips", uploadFailed: "Upload failed", uploadFailedAtChunk: "Upload failed at chunk {{chunk}}/{{total}}: {{message}}", couldNotStartRecording: "Could not start recording", couldNotStartRecorder: "Could not start recorder", openSettings: "Open settings", openedRecorderInNewTab: "Opened recorder in a new tab", videoReadyToUpload: "Video is ready to upload", videoUploaded: "Video uploaded", videoTooLarge: "Video is too large", storageNeededToFinishLoomImport: "Storage needed to finish Loom import", loomImported: "Loom imported", couldNotImportLoom: "Could not import that Loom.", recordingReadyToUpload: "Recording is ready to upload", recordingSaved: "Recording saved", linkCopied: "Link copied", copyLinkAction: "Copy link", noLocalRecordingData: "No local recording data is available to download.", recordingDownloadStarted: "Recording download started", backToLibrary: "Back to library", clipsRecorder: "Clips recorder", preparingSources: "Preparing sources…", recordingScreen: "Recording your screen — switch to the window you want to capture", largeClipsNeedReencode: "Large clips need a quick re-encode before upload.", savingRecording: "Saving your recording…", sessionExpired: "Session expired", sessionExpiredDescription: "Your login session has expired. Log in again to start recording.", logIn: "Log in", betterInDesktop: "Better in the desktop app", desktopAppDescription: "Menu-bar launch, global shortcuts, auto-updates, and smoother repeat recordings.", downloadDesktopApp: "Download desktop app", technicalDetails: "Technical details", whatToCheck: "What to check", downloadRecording: "Download recording", openRecorderInTab: "Open recorder in tab", connectStorageToFinish: "Connect storage on the next screen: Builder.io (free tier storage + AI) or S3-compatible storage. Clips will finish saving it.", connectStorageToRetryLoom: "Connect storage on the next screen: Builder.io (free tier storage + AI) or S3-compatible storage. Clips will retry the import.", }, dictateRoute: { pageTitle: "Dictate · Clips", howToUse: "How to use Dictate", browserDictation: "Browser dictation", browserDictationDescription: "Use the button on this page, or press the shortcut while this tab is focused. Browser dictation saves here for copy and cleanup.", browserDictationDescriptionDesktop: "Use the button below to capture a note right here on this page. It does not paste into other apps — for that, use the desktop shortcut on the right.", quickNoteTitle: "Quick dictation note", quickNoteHint: "Captures here without leaving this page — it does not paste into other apps. Use the button to start and stop.", desktopShortcuts: "Desktop shortcuts", desktopShortcutsDescriptionSuffix: ", in the desktop app.", holdFn: "Hold Fn", browserUnavailable: "Browser speech recognition is unavailable here. Use Chrome or the desktop app for global dictation.", browserUnavailableShort: "Browser speech recognition is unavailable here", startSpeaking: "Start speaking...", replacedOriginal: "Replaced original with cleaned text", noText: "No text", emptyTranscript: "Empty transcript", replaceOriginal: "Replace original with cleaned", cleanupWithAi: "Cleanup with AI", cleanupHint: 'Click "Cleanup with AI" to fix punctuation, casing, and filler words.', startFirst: "Start your first dictation", emptyDesktopDescription: "Hold {{fnKey}} anywhere on your Mac, or press {{modifierKey}} ⇧ Space. Your history will live here.", emptyWebDescription: "Dictation runs through the desktop app for global shortcuts that work in any app — Slack, your editor, anywhere.", downloadDesktopApp: "Download Clips desktop app", holdToDictate: "hold to dictate", toggle: "toggle", desktopCtaTitle: "Dictate from anywhere with the desktop app", desktopCtaDescription: "Press {{modifierKey}} ⇧ Space in any app. Browser dictation is unreliable — the desktop app is the way to use this.", noSpeechCaptured: "No speech captured", dictationSaved: "Dictation saved", voiceToTextDescription: "Voice-to-text dictation with AI cleanup. Get the desktop app to dictate from anywhere with a global shortcut.", loadFailed: "Couldn't load dictations.", noFilterMatches: "No dictations matching this filter.", dictionaryTitle: "Dictionary", dictionaryDescription: "Terms here bias speech recognition toward your preferred spellings — auto-learned from corrections, or add your own.", dictionaryTermPlaceholder: "Term", dictionaryReplacementPlaceholder: "Replacement (optional)", dictionaryAdd: "Add", dictionaryLoading: "Loading dictionary...", dictionaryEmpty: "No learned terms yet.", dictionaryUsesCount: "Used {{count}}x", dictionaryRemove: "Remove", vocabularyAddFailed: "Couldn't add term", vocabularyRemoveFailed: "Couldn't remove term", }, clipsFinalRaw: { splitAtPlayhead: "Split at playhead (S)", selectedCount: "{{count}} selected", selectAll: "Select all", deselectAll: "Deselect all", move: "Move", moveSelected: "Move {{count}} selected", current: "Current", clearSelection: "Clear selection", waitingForStorage: "Waiting for storage", savedLocally: "Saved locally", uploadFailed: "Upload failed", connectStorageToFinish: "Open to connect storage and finish saving.", retryFromClipsMenu: "Open Clips from the menu bar to retry this saved upload; no need to re-record.", removeFailedClip: "Remove this failed clip.", remove: "Remove", viewsCount: "{{count}} views", recordingMenu: "Recording menu", moveToFolder: "Move to folder", unarchive: "Unarchive", shareNamedMeeting: 'Share "{{title}}"', shareMeeting: "Share meeting", shareLink: "Share link", alreadyHaveIt: "I already have it", link: "Link", invite: "Invite", inviteFailed: "Couldn't invite person", removePersonFailed: "Couldn't remove person", passwordProtectedDescription: "This video is protected. Enter the password to watch.", password: "Password", unlock: "Unlock", noEngagementData: "No engagement data yet.", allCaughtUp: "You're all caught up.", someone: "Someone", view: "View", reply: "Reply", commentedOn: "commented on", reactedTo: "reacted to", mentionedYouIn: "mentioned you in", shared: "shared", noCreatorsYet: "No creators yet.", creator: "Creator", engagement: "Engagement", selectedMicrophoneWaveform: "Selected microphone waveform", goHome: "Go home", testMic: "Test mic", archivePageTitle: "Archive · Clips", insightsPageTitle: "Insights · Clips", folderPageTitle: "Folder · Clips", spacePageTitle: "Space · Clips", spacesPageTitle: "Spaces · Clips", trashPageTitle: "Trash · Clips", }, bugReportRoute: { pageTitle: "Bug report · Clips", donePageTitle: "Bug report submitted · Clips", eyebrow: "Bug report", title: "Record a bug report", description: "Capture a short repro with screen, voice, and redacted browser context for your team.", issueTitleLabel: "Issue title", issueTitlePlaceholder: "What went wrong?", detailsLabel: "Details", detailsPlaceholder: "What did you expect to happen?", emailLabel: "Your email", emailPlaceholder: "you@example.com", severityLabel: "Severity", severityLow: "Low", severityNormal: "Normal", severityHigh: "High", severityUrgent: "Urgent", sourceLabel: "Source", sourceUnknown: "Current product page", startRecording: "Record screen report", privacyNote: "Clips stores the recording with workspace access by default. URLs and metadata are redacted before they are saved.", doneTitle: "Bug report submitted", doneDescription: "The recording is saved in Clips and the host product has been notified.", openRecording: "Open recording", copyLink: "Copy link", copied: "Copied", returnToProduct: "Return to product", missingRecording: "Recording not found", }, meetingsRoute: { pageTitle: "Meetings · Clips", transcriptPending: "Transcript pending", notesPending: "Notes pending", pastRecordings: "Past recordings", calendarNeedsReconnect: "Google Calendar needs to be reconnected to keep showing your upcoming meetings.", connectGoogleCalendar: "Connect Google Calendar", desktopReminder: "Connect Google Calendar, keep Clips Desktop open, then click Start notes from the reminder or the menu bar when your meeting begins.", getDesktopApp: "Get desktop app", requiredForReminders: "Desktop captures mic + system audio for meeting transcription.", calendarConnected: "Calendar connected", calendarDisconnected: "Calendar disconnected", calendarSettings: "Calendar settings", connectCalendarReminder: "Connect Google Calendar for meeting reminders.", disconnectGoogleCalendarTitle: "Disconnect Google Calendar?", title: "Meetings", intro: "Upcoming calendar meetings and your recorded notes. Start live notes from Clips Desktop at meeting time.", searchPlaceholder: "Search meetings...", clearSearch: "Clear search", noMeetingsYet: "No meetings yet", noMeetingsDescription: "Connect your calendar and keep Clips Desktop open. When a meeting starts, use Start notes from the reminder or menu bar.", noMeetingsMatch: 'No meetings match "{{query}}"', refreshing: "Refreshing…", howToTriggerTitle: "How to trigger meeting notes", howToTriggerDescription: "Meeting notes are the Granola-style flow in Clips: calendar events appear here, the desktop app captures mic and system audio, and the transcript plus AI notes land back in this history.", guideCalendarTitle: "Connect Google Calendar", guideCalendarDescription: "Meetings are pulled from your calendar so Clips knows when to remind you.", guideDesktopTitle: "Keep Clips Desktop open", guideDesktopDescription: "Desktop capture is required for mic plus system-audio transcription.", guideStartTitle: "Click Start notes", guideStartDescription: "Use the desktop reminder or the menu-bar Start Meeting Notes item when the call begins.", }, rewindExtension: { title: "Add what happened before", description: "Pull a specific interval from local Rewind and add it to the start of this Clip. Nothing is added automatically.", progressLabel: "Rewind history processing progress", privateFirstTitle: "Make this Clip private first", privateFirstDescription: "Local Rewind history can contain context from before you chose to record. This changes the Clip to private. If anyone still has direct access, Clips will stop here so you can remove them in Share first.", makePrivateContinue: "Make private and continue", add30Seconds: "Add the previous 30 seconds", add5Minutes: "Add the previous 5 minutes", add5MinutesDescription: "Good for recovering the lead-in to a longer explanation.", privateReady: "This Clip is private. You can now add local Rewind history.", }, timeline: { clipStartedHere: "Clip started here", }, }; export default messages;