export const enUS = { common: { search: "Search...", create: "New", new: "New", cancel: "Cancel", delete: "Delete", edit: "Edit", theme: "Theme", signOut: "Sign Out", noMatches: "No matches found", tryDifferentSearch: "Try using a different search term.", light: "Light", dark: "Dark", system: "System", loading: "Loading...", note: "Note", insight: "Insight", newSource: "New Source", newNotebook: "New Notebook", newPodcast: "New Podcast", language: "Language", english: "English", chinese: "简体中文", japanese: "日本語", source: "Source", notebook: "Notebook", podcast: "Podcast", quickActions: "Quick actions", quickActionsDesc: "Navigation, search, ask, theme", appName: "Open Notebook", add: "Add", remove: "Remove", confirm: "Confirm", warning: "Warning", error: "Error", success: "Success", sessions: "Sessions", model: "Model", send: "Send", back: "Back", next: "Next", done: "Done", processing: "Processing...", creating: "Creating...", tokenCount: "Tokens", charCount: "Chars", linked: "Linked", added: "Added on {date}", adding: "Adding...", addSelected: "Add Selected", customModel: "Custom Model", messages: "Messages", failed: "failed", current: "Current", save: "Save", writeNote: "Write Note", batchMode: "Batch Mode", optional: "Optional", type: "Type", title: "Title", created: "Created {time}", updated: "Updated {time}", actions: "Actions", noResults: "No results", references: "References", refreshPage: "Please try refreshing the page", refresh: "Refresh", aiGenerated: "AI Generated", human: "Human", unknown: "Unknown", notes: "Notes", chat: "Chat", details: "Details", deleteForever: "Delete Forever", connectionError: "Connection Error", unableToConnect: "Unable to connect to the API server", retryConnection: "Retry Connection", diagnosticInfo: "Diagnostic Information", version: "Version", built: "Built", apiUrl: "API URL", frontendUrl: "Frontend URL", checkConsoleLogs: "Check browser console for detailed logs (look for 🔧 [Config] messages)", yes: "Yes", no: "No", simple: "Simple", saving: "Saving...", description: "Description", saveToNote: "Save to note", copyToClipboard: "Copy to clipboard", close: "Close", insights: "Insights", progress: "Progress", deleting: "Deleting...", created_label: "Created", updated_label: "Updated", download: "Download", saveChanges: "Save Changes", name: "Name", default: "Default", nameRequired: "Name is required", modelConfiguration: "Model Configuration", resetToDefault: "Reset to Default", notFound: "Not found", reasoning: "Reasoning", searchTerms: "Search Terms", strategy: "Strategy", individualAnswers: "Individual Answers ({count})", finalAnswer: "Final Answer", notebookLabel: "Notebook: {name}", itemNotFound: "This {type} could not be found", accessibility: { navigation: "Navigation", transformationViews: "Transformation views", searchKB: "Ask or search your knowledge base", enterQuestion: "Enter your question to ask the knowledge base", enterSearch: "Enter search query", searchKBBtn: "Search knowledge base", podcastViews: "Podcast views", chatSessions: "Chat sessions", ytVideo: "YouTube video", askResponse: "Ask Response", searchNotebooks: "Search notebooks", }, url: "URL", errorDetails: "Error Details", editTransformation: "Edit Transformation", comingSoon: "Coming soon", retry: "Try Again", traditionalChinese: "繁體中文", portuguese: "Português", completed: "completed", saveSuccess: "Saved successfully", contextModes: { off: "Not included in chat", insights: "Insights only", full: "Full content", clickToCycle: "Click to cycle", }, clickToEdit: "Click to edit", }, apiErrors: { notebookNotFound: "Notebook not found", sourceNotFound: "Source not found", transformationNotFound: "Transformation not found", fileUploadFailed: "File upload failed", urlRequired: "URL is required for link type", contentRequired: "Content is required for text type", invalidSourceType: "Invalid source type", processingFailed: "Processing failed", failedToQueue: "Failed to queue processing", invalidSortBy: "Sort field must be 'created' or 'updated'", invalidSortOrder: "Sort order must be 'asc' or 'desc'", accessDenied: "Access to file denied", fileNotFoundOnServer: "File not found on server", searchFailed: "Search failed", askFailed: "Ask failed", pleaseEnterQuestion: "Please enter a question", pleaseConfigureModels: "Please configure all required models", failedToCreateSession: "Failed to create session", failedToUpdateSession: "Failed to update session", failedToDeleteSession: "Failed to delete session", failedToSendMessage: "Failed to send message", unauthorized: "Unauthorized access, please check your password", invalidPassword: "Invalid password", missingAuth: "Missing authorization", embeddingModelRequired: "This feature requires an embedding model. Please configure one in the Models section.", strategyModelNotFound: "Strategy model not found", answerModelNotFound: "Answer model not found", finalAnswerModelNotFound: "Final answer model not found", noAnswerGenerated: "No answer could be generated", genericError: "An unexpected error occurred", }, connectionErrors: { apiTitle: "Unable to Connect to API Server", apiDesc: "The Open Notebook API server could not be reached", dbTitle: "Database Connection Failed", dbDesc: "The API server is running, but the database is not accessible", troubleshooting: "This usually means:", apiUnreachable1: "The API server is not running", apiUnreachable2: "The API server is running on a different address", apiUnreachable3: "Network connectivity issues", dbFailed1: "SurrealDB is not running", dbFailed2: "Database connection settings are incorrect", dbFailed3: "Network issues between API and database", quickFixes: "Quick fixes:", setApiUrl: "Set the API_URL environment variable:", checkSurreal: "Check if SurrealDB is running:", seeDocumentation: "For detailed setup instructions, see:", docLink: "Open Notebook Documentation", showTechnical: "Show Technical Details", attemptedUrl: "Attempted URL", message: "Message", technicalDetails: "Technical Details", stackTrace: "Stack Trace", retryLabel: "Retry Connection", retryHint: "Press R or click the button to retry", dockerLabel: "For Docker", localDevLabel: "For local development", }, auth: { loginTitle: "Open Notebook", loginDesc: "Enter your password to access the application", passwordPlaceholder: "Password", signingIn: "Signing in...", signIn: "Sign In", unhandledError: "Unhandled error during login", connectErrorHint: "Unable to connect to server. Please check if the API is running.", }, navigation: { collect: "Collect", process: "Process", create: "Create", manage: "Manage", sources: "Sources", notebooks: "Notebooks", askAndSearch: "Ask and Search", podcasts: "Podcasts", models: "Models", transformations: "Transformations", transformation: "Transformation", settings: "Settings", advanced: "Advanced", nav: "Navigation", language: "Toggle language", theme: "Theme", search: "Search", ask: "Ask", }, notebooks: { title: "Notebooks", newNotebook: "New Notebook", searchPlaceholder: "Search notebooks...", archived: "Archived", archive: "Archive", unarchive: "Unarchive", deleteNotebook: "Delete Notebook", deleteNotebookDesc: "Are you sure you want to delete this notebook? This action cannot be undone.", activeNotebooks: "Active Notebooks", archivedNotebooks: "Archived Notebooks", emptyDescription: "Start by creating your first notebook to organize your research.", noActiveNotebooks: "No active notebooks", noArchivedNotebooks: "No archived notebooks", notFound: "Notebook not found", notFoundDesc: "The requested notebook does not exist.", noDescription: "No description...", updated: "Updated", namePlaceholder: "Notebook name", addDescription: "Add description...", noNotesYet: "No notes yet", deleteNote: "Delete Note", deleteNoteConfirm: "Are you sure you want to delete this note? This action cannot be undone.", noteCreatedSuccess: "Note created successfully", failedToCreateNote: "Failed to create note", noteUpdatedSuccess: "Note updated successfully", failedToUpdateNote: "Failed to update note", noteDeletedSuccess: "Note deleted successfully", failedToDeleteNote: "Failed to delete note", createNew: "Create New Notebook", createNewDesc: "Enter a name and optional description to get started.", descPlaceholder: "Add more info about this notebook here...", createSuccess: "Notebook created successfully", updateSuccess: "Notebook updated successfully", deleteSuccess: "Notebook deleted successfully", }, sources: { title: "Sources", add: "Add Source", addNew: "Add New Source", addExisting: "Add Existing Source", empty: "No sources yet", emptyDesc: "Add your first source to start building your knowledge base.", delete: "Delete Source", deleteMsg: "Are you sure you want to delete this source? This action cannot be undone.", statusPreparing: "Preparing", statusQueued: "Queued", statusProcessing: "Processing", statusCompleted: "Completed", statusFailed: "Failed", statusPreparingDesc: "Preparing to process", statusQueuedDesc: "Waiting to be processed", statusProcessingDesc: "Being processed", statusCompletedDesc: "Successfully processed", statusFailedDesc: "Processing failed", failedToLoad: "Failed to load sources", allSourcesDesc: "View all your sources here. You can add new sources or manage existing ones.", allSources: "All Sources", insights: "Insights", yes: "Yes", no: "No", loadingMore: "Loading more...", noSourcesYet: "No sources yet", allSourcesDescShort: "View all your sources here.", cannotSaveNoteNoNotebook: "Cannot save note: notebook ID not available", createFirstSource: "Add your first source to start building your knowledge base.", deleteSourceConfirm: "Are you sure you want to delete this source?", deleteConfirm: "Are you sure you want to delete this?", deleteConfirmWithTitle: "Are you sure you want to delete \"{title}\"?", deleteSuccess: "Source deleted successfully. Note: To delete the file from storage, you must enable checking the \"delete file\" option in the settings page.", failedToDelete: "Failed to delete source", sourceQueued: "Source Queued", sourceQueuedDesc: "Source submitted for background processing. You can monitor progress in the sources list.", sourceAddedSuccess: "Source added successfully", failedToAddSource: "Failed to add source", sourceUpdatedSuccess: "Source updated successfully", failedToUpdateSource: "Failed to update source", sourceDeletedSuccess: "Source deleted successfully", failedToDeleteSource: "Failed to delete source", fileUploadedSuccess: "File uploaded successfully", failedToUploadFile: "Failed to upload file", sourceRequeued: "Source Retry Queued", sourceRequeuedDesc: "The source has been requeued for processing.", failedToRetry: "Retry Failed", failedToRetryDesc: "Failed to retry source processing. Please try again.", sourcesAddedToNotebook: "{count} source(s) added to notebook", failedToAddSourcesToNotebook: "Failed to add sources to notebook", partialAddSuccess: "{success} source(s) added, {failed} failed", sourceRemovedFromNotebook: "Source removed from notebook successfully", failedToRemoveSourceFromNotebook: "Failed to remove source from notebook", removeConfirm: "Are you sure you want to remove this from the notebook?", checking: "Checking...", untitledSource: "Untitled Source", maxItems: "max {count}", insightsCount: "{count} insights", details: "Details", detailsTitle: "Source Details", content: "Content", metadata: "Metadata", type: { link: "Link", file: "File", text: "Text", }, id: "Source ID", topics: "Topics", embedded: "Embedded", notEmbedded: "Not Embedded", embedContent: "Embed Content", embedding: "Embedding...", alreadyEmbedded: "Already Embedded", downloadFile: "Download File", fileUnavailable: "File unavailable", preparing: "Preparing...", generateNewInsight: "Generate New Insight", selectTransformation: "Select a transformation...", noInsightsYet: "No insights yet", createFirstInsight: "Create your first insight using a transformation above", viewInsight: "View Insight", deleteInsight: "Delete Insight", deleteInsightConfirm: "Are you sure you want to delete this insight? This action cannot be undone.", deleteNoteConfirm: 'Are you sure you want to delete this note? This action cannot be undone.', editNote: 'Edit note', createNote: 'Create note', addTitle: 'Add a title...', untitledNote: 'Untitled Note', writeNotePlaceholder: 'Write your note content here...', saveNote: 'Save Note', createNoteBtn: 'Create Note', noNotesYet: "No notes yet", createFirstNote: "Create your first note to capture insights and observations.", deleteNote: "Delete Note", urlLabel: 'URL(s) *', fileLabel: 'File(s) *', textContentLabel: 'Text Content *', enterUrlsPlaceholder: 'Enter URLs, one per line\nhttps://example.com/article1\nhttps://example.com/article2', batchUrlHint: 'Paste multiple URLs (one per line) to batch import', invalidUrlsDetected: 'Invalid URLs detected:', lineLabel: 'Line {line}', fixInvalidUrls: 'Please fix or remove invalid URLs to continue', selectMultipleFilesHint: 'Select multiple files to batch import. Supported: Documents (PDF, DOC, DOCX, PPT, XLS, EPUB, TXT, MD), Media (MP4, MP3, WAV, M4A), Images (JPG, PNG), Archives (ZIP)', selectedFiles: 'Selected files:', textPlaceholder: 'Paste or type your content here...', titlePlaceholder: 'Give your source a descriptive title', batchTitlesAuto: 'Titles will be automatically generated for each source.', batchCommonSettings: 'The same notebooks and transformations will be applied to all items.', urlsCount: '{count} URL(s)', filesCount: '{count} file(s)', addSource: "Add Source", notEmbeddedAlert: "Content Not Embedded", notEmbeddedDesc: "This content hasn't been embedded for vector search. Embedding enables advanced search capabilities and better content discovery.", openOnYoutube: "Open on YouTube", urlCopied: "URL copied to clipboard", viewSource: "View Source", noInsightSelected: "No insight selected", sourceInsight: "Source Insight", manageNotebooks: "Manage Notebooks", manageNotebooksDesc: "Manage which notebooks contain this source", noNotebooksAvailable: "No notebooks available", loadFailed: "Failed to load source details", removeFromNotebook: "Remove from Notebook", retryProcessing: "Retry Processing", deleteSource: "Delete Source", retry: "Retry", progress: "Progress", addExistingTitle: "Add Existing Sources", addExistingDesc: "Select existing sources from across all your notebooks to add to the current one.", searchPlaceholder: "Search sources by name or URL...", noNotebooksFound: "No notebooks found.", showingFirst100: "Showing first 100 sources. Use search to find specific ones.", selectedCount: "{count} sources selected", added: "Added on {date}", addUrl: "Add URL", uploadFile: "Upload File", enterText: "Enter Text", processDescription: "Content will be processed and analyzed by AI.", processingFiles: "Processing your files...", titleRequired: "A title is required for text content", titleGenerated: "If left empty, a title will be generated from the content", batchCount: "{count} {type} will be processed", enableEmbedding: "Enable embedding for search", embeddingDesc: "Allows this source to be found in vector searches and AI queries", embeddingAlways: "Embedding enabled automatically", embeddingAlwaysDesc: "Your settings are configured to always embed content for vector search.", embeddingNever: "Embedding disabled", embeddingNeverDesc: "Your settings are configured to skip embedding. Vector search won't be available for this source.", changeInSettings: "You can change this in Settings", notFound: "Source not found", noContent: "No content available", insightsDesc: "Insights generated from model analysis", uploadedFile: "Uploaded file", fileUnavailableDesc: "This file is currently unavailable due to storage system reasons.", batchSuccess: "{count} source(s) created successfully", batchFailed: "Failed to create all {count} sources", batchPartial: "{success} succeeded, {failed} failed", submittingSource: "Submitting source for processing...", contentRequired: "Please provide the required content for the selected source type", titleRequiredForText: "Title is required for text sources", processingBatchSources: "Processing {count} sources. This may take a few moments.", processingSource: "Your source is being processed. This may take a few moments.", maxFilesAllowed: "Maximum {count} files allowed per batch", }, chat: { sessions: "Sessions", sessionTitlePlaceholder: "Type a title here...", noSessions: "No chat sessions yet", startChatting: "Start chatting about your sources.", deleteSession: "Delete Session", deleteSessionDesc: "Are you sure you want to delete this chat session? This action cannot be undone.", sendPlaceholder: "Ask anything about your sources...", newChat: "New Chat", sessionsTitle: "Chat Sessions", clearhistory: "Clear History", renameSession: "Rename Session", noSourcesLinked: "No sources linked", thinking: "AI is thinking...", chatWith: "Chat with {name}", startConversation: "Start a conversation about this {type}", askQuestions: "Ask questions to understand the content better", pressToSend: "Press {key} to send", model: "Model", createToStart: 'Create a session to start.', chatWithNotebook: 'Chat with Notebook', unableToLoadChat: 'Unable to load chat', noDescription: 'No description', startByCreating: 'Start by creating your first notebook to organize your research.', messagesCount: "{count} messages", sessionCreated: "Chat session created", sessionUpdated: "Session updated", sessionDeleted: "Session deleted", }, searchPage: { askAndSearch: "Ask and Search", chooseAMode: "Choose a mode", askBeta: "Ask (beta)", search: "Search", askYourKb: "Ask Your Knowledge Base (beta)", askYourKbDesc: "The LLM will answer your query based on the documents in your knowledge base.", question: "Question", enterQuestionPlaceholder: "Enter your question...", pressToSubmit: "Press Cmd/Ctrl+Enter to submit", noEmbeddingModel: "You can't use this feature because you have no embedding model selected. Please set one up in the Models page.", usingCustomModels: "Using Custom Models", usingDefaultModels: "Using Default Models", advanced: "Advanced", strategy: "Strategy", answer: "Answer", final: "Final", ask: "Ask", processing: "Processing...", saveToNotebooks: "Save to Notebooks", searchDesc: "Search your knowledge base for specific keywords or concepts", enterSearchPlaceholder: "Enter search query...", pressToSearch: "Press Enter to search", searchType: "Search Type", vectorSearchWarning: "Vector search requires an embedding model. Only text search is available.", textSearch: "Text Search", vectorSearch: "Vector Search", searchIn: "Search In", searchSources: "Search Sources", searchNotes: "Search Notes", resultsFound: "{count} results found", matches: "Matches ({count})", noResultsFor: "No results found for “{query}”", notSet: "Not set", saveToNotebook: "Save to Notebook", saveSuccess: "Successfully saved to notebook", saveError: "Failed to save to notebook", selectNotebook: "Select Notebook", createNewNotebook: "Create New Notebook", cancel: "Cancel", searchAndAsk: "Search & Ask", searchResultsFor: "Search results for “{query}”", askAbout: "Ask about “{query}”", orSearchKb: "Or search your knowledge base", saving: "Saving...", advancedModelTitle: "Advanced Model Selection", advancedModelDesc: "Choose specific models for each stage of the Ask process", strategyModel: "Strategy Model", answerModel: "Answer Model", finalAnswerModel: "Final Answer Model", selectStrategyPlaceholder: "Select strategy model", selectAnswerPlaceholder: "Select answer model", selectFinalPlaceholder: "Select final answer model", saveChanges: "Save Changes", processingQuestion: "Processing your question...", }, podcasts: { generateEpisode: "Generate Podcast Episode", generateEpisodeDesc: "Select the content to include and configure the episode details before generating a new podcast episode.", content: "Content", contentDesc: "Pick notebooks, sources, and notes to include in this episode.", itemsSelected: "{count} items selected", tokens: "{count} tokens", chars: "{count} chars", loadingNotebooks: "Loading notebooks...", noNotebooksFoundInPodcasts: "No notebooks found. Create a notebook and add content before generating a podcast.", noContentSelected: "No content selected", summary: "Summary", fullContent: "Full content", untitledSource: "Untitled source", untitledNote: "Untitled note", episodeSettings: "Episode Settings", episodeProfile: "Episode profile", episodeProfilePlaceholder: "Select an episode profile", episodeName: "Episode name", episodeNamePlaceholder: "e.g., AI and the Future of Work", additionalInstructions: "Additional instructions", instructionsPlaceholder: "Any supplementary advice to append to the episode briefing...", generating: "Generating...", generate: "Generate", hostPlaceholder: "Host {number}", profileRequired: "Episode Profile Required", profileRequiredDesc: "Select an episode profile before generating a podcast.", nameRequired: "Episode name required", nameRequiredDesc: "Provide a name for the episode.", addContext: "Add context", addContextDesc: "Select at least one source or note to include in the episode.", generationFailed: "Podcast generation failed", speakerProfile: "Speaker Profile", usesSpeakerProfile: "Uses speaker profile", sources: "Sources", notes: "Notes", noSources: "No sources available in this notebook.", noNotes: "No notes available in this notebook.", selectMode: "Select mode", buildContextFailed: "Failed to build context. Please review your selections.", podcastTaskStarted: "Podcast task started", loadingProfiles: "Loading episode profiles...", noProfilesFound: "No episode profiles found. Create an episode profile before generating a podcast.", listTitle: "Podcasts", listDesc: "Keep track of generated episodes and manage reusable templates.", chooseAView: "Choose a view", episodesTab: "Episodes", templatesTab: "Templates", overviewTitle: "Episodes overview", overviewDesc: "Monitor podcast generation jobs and review the final artefacts.", generateBtn: "Generate Podcast", total: "Total", processingLabel: "Processing", completedLabel: "Completed", failedLabel: "Failed", pendingLabel: "Pending", loadErrorTitle: "Failed to load episodes", loadErrorDesc: "We could not fetch the latest podcast episodes. Try again shortly.", loadingEpisodes: "Loading episodes…", noEpisodesYet: "No podcast episodes yet. Generate your first one from the notebook or source chat interfaces.", statusRunningTitle: "Currently Processing", statusRunningDesc: "Episodes that are actively generating assets.", statusPendingTitle: "Queued / Pending", statusPendingDesc: "Submitted episodes waiting to start processing.", statusCompletedTitle: "Completed Episodes", statusCompletedDesc: "Ready to review, download, or publish.", statusFailedTitle: "Failed Episodes", statusFailedDesc: "Episodes that encountered issues during generation.", templatesWorkspaceTitle: "Templates workspace", templatesWorkspaceDesc: "Build reusable episode and speaker configurations for fast podcast production.", howTemplatesPowerTitle: "How templates power podcast generation", howTemplatesPowerDesc: "Templates split the podcast workflow into two reusable building blocks. Mix and match them whenever you generate a new episode.", episodeProfilesSetFormat: "Episode profiles set the format", episodeProfilesList1: "Outline the number of segments and how the story flows", episodeProfilesList2: "Pick the language models used for briefing, outlining, and script writing", episodeProfilesList3: "Store default briefings so every episode starts with a consistent tone", speakerProfilesBringVoices: "Speaker profiles bring voices to life", speakerProfilesList1: "Choose the text-to-speech provider and model", speakerProfilesList2: "Capture personality, backstory, and pronunciation notes per speaker", speakerProfilesList3: "Reuse the same host or guest voices across different episode formats", recommendedWorkflow: "Recommended workflow", workflowStep1: "Create speaker profiles for each voice you need", workflowStep2: "Build episode profiles that reference those speakers by name", workflowStep3: "Generate podcasts by selecting the episode profile that fits the story", workflowHint: "Episode profiles reference speaker profiles by name, so starting with speakers avoids missing voice assignments later.", failedToLoadTemplates: "Failed to load templates data", failedToLoadTemplatesDesc: "Ensure the API is running and try again. Some sections may be incomplete.", loadingTemplates: "Loading templates…", speakerProfilesTitle: "Speaker profiles", speakerProfilesDesc: "Configure voices and personalities for generated episodes.", createSpeaker: "Create speaker", noSpeakerProfiles: "No speaker profiles yet. Create one to make episode templates available.", noDescription: "No description provided.", usedByCount_one: "Used by 1 episode", usedByCount_other: "Used by {count} episodes", usedByCount: "Used by {count} episodes", unused: "Unused", voiceId: "Voice ID", backstory: "Backstory", personality: "Personality", edit: "Edit", duplicate: "Duplicate", deleteSpeakerProfileTitle: "Delete speaker profile?", deleteSpeakerProfileDesc: "Deleting “{name}” cannot be undone.", deleteSpeakerDisabledHint: "Remove this speaker from episode profiles before deleting it.", deleting: "Deleting…", episodeProfilesTitle: "Episode profiles", episodeProfilesDesc: "Define reusable generation settings for your shows.", createProfile: "Create profile", createSpeakerFirst: "Create a speaker profile before adding an episode profile.", noEpisodeProfiles: "No episode profiles yet. Create one to kickstart podcast generation.", speakerCreated: "Speaker Created", speakerCreatedDesc: "The speaker \"{name}\" has been successfully added.", failedToCreateSpeaker: "Failed to create speaker profile", speakerUpdated: "Speaker Updated", speakerUpdatedDesc: "The speaker \"{name}\" has been successfully updated.", failedToUpdateSpeaker: "Failed to update speaker profile", speakerDeleted: "Speaker Deleted", speakerDeletedDesc: "The speaker \"{name}\" has been successfully removed.", failedToDeleteSpeaker: "Failed to delete speaker profile", speakerDuplicated: "Speaker Duplicated", speakerDuplicatedDesc: "The speaker \"{name}\" has been successfully duplicated.", failedToDuplicateSpeaker: "Failed to duplicate speaker profile", generationStarted: "Generation Started", generationStartedDesc: "Podcast generation has been queued.", failedToStartGeneration: "Failed to start generation", tryAgainMoment: "Please try again in a moment.", deleteProfileTitle: "Delete profile?", deleteProfileDesc: "This will remove “{name}”. Existing episodes keep their data, but new ones will no longer use this configuration.", profileCreated: "Profile Created", profileCreatedDesc: "The episode profile \"{name}\" has been successfully created.", failedToCreateProfile: "Failed to create profile", profileUpdated: "Profile Updated", profileUpdatedDesc: "The episode profile \"{name}\" has been successfully updated.", failedToUpdateProfile: "Failed to update profile", profileDeleted: "Profile Deleted", profileDeletedDesc: "The episode profile \"{name}\" has been successfully removed.", failedToDeleteProfile: "Failed to delete profile", failedToDeleteProfileDesc: "Failed to remove the episode profile.", profileDuplicated: "Profile Duplicated", profileDuplicatedDesc: "The episode profile \"{name}\" has been successfully duplicated.", failedToDuplicateProfile: "Failed to duplicate profile", episodeDeleted: "Episode Deleted", episodeDeletedDesc: "The episode has been successfully deleted.", failedToDeleteEpisode: "Failed to delete episode", failedToDeleteSpeakerDesc: "Failed to remove the speaker profile.", outlineModel: "Outline model", transcriptModel: "Transcript model", segments: "Segments", defaultBriefingTitle: "Default briefing", created: "Created at {time}", details: "Details", summaryTab: "Summary", outlineTab: "Outline", transcriptTab: "Transcript", briefing: "Briefing", noOutline: "No outline available.", noTranscript: "No transcript available.", deleteEpisodeTitle: "Delete episode?", deleteEpisodeDesc: "This will remove “{name}” and its audio file permanently.", audioUnavailable: "Audio unavailable", segment: "Segment", speaker: "Speaker", profile: "Profile", link: "Link", file: "File", embedded: "Embedded", notEmbedded: "Not embedded", noSpeakerProfilesAvailable: "No speaker profiles available", noLanguageModelsAvailable: "No language models available", editEpisodeProfile: "Edit Episode Profile", createEpisodeProfile: "Create Episode Profile", episodeProfileFormDesc: "Define how episodes should be generated and which speaker configuration they use by default.", noSpeakerProfilesDesc: "Create a speaker profile before configuring an episode profile.", noLanguageModelsDesc: "Add language models in the Models section to configure outline and transcript generation.", profileName: "Profile name", profileNamePlaceholder: "e.g., Tech discussion", descriptionPlaceholder: "Short summary of when to use this profile", speakerConfig: "Speaker configuration", selectSpeakerProfile: "Select a speaker profile", outlineGeneration: "Outline generation", transcriptGeneration: "Transcript generation", defaultBriefingPlaceholder: "Outline the structure, tone, and goals for this episode format", editSpeakerProfile: "Edit Speaker Profile", createSpeakerProfile: "Create Speaker Profile", speakerProfileFormDesc: "Configure text-to-speech settings and define up to four speakers.", noTtsModelsAvailable: "No text-to-speech models available", noTtsModelsDesc: "Add TTS models in the Models section before creating a speaker profile.", speakers: "Speakers", speakersDesc: "Configure between one and four voices for this profile.", addSpeaker: "Add speaker", speakerNumber: "Speaker {number}", backstoryPlaceholder: "Short biography or context for the speaker", personalityPlaceholder: "Describe style and tone", outlineProviderRequired: "Outline provider is required", outlineModelRequired: "Outline model is required", transcriptProviderRequired: "Transcript provider is required", transcriptModelRequired: "Transcript model is required", defaultBriefingRequired: "Default briefing is required", segmentsInteger: "Must be an integer", segmentsMin: "At least 3 segments", segmentsMax: "Maximum 20 segments", voiceIdRequired: "Voice ID is required", backstoryRequired: "Backstory is required", personalityRequired: "Personality is required", speakerCountMin: "At least one speaker is required", speakerCountMax: "You can configure up to 4 speakers", delete: "Delete", unknown: "Unknown", deleteSuccess: "Podcast deleted successfully", failedToDelete: "Failed to delete podcast", }, settings: { contentProcessing: "Content Processing", contentProcessingDesc: "Configure how documents and URLs are processed", docEngine: "Document Processing Engine", docEnginePlaceholder: "Select document processing engine", urlEngine: "URL Processing Engine", urlEnginePlaceholder: "Select URL processing engine", autoRecommended: "Auto (Recommended)", simple: "Simple", docling: "Docling", helpMeChoose: "Help me choose", docHelp: "· Docling is a little slower but more accurate, specially if the documents contain tables and images. · Simple will extract any content from the document without formatting it. · Auto (recommended) will try to process through docling and default to simple.", firecrawl: "Firecrawl", jina: "Jina", urlHelp: "· Firecrawl is a paid service (with a free tier), and very powerful. · Jina is a good option as well and also has a free tier. · Simple will use basic HTTP extraction and will miss content on javascript-based websites. · Auto (recommended) will try to use firecrawl then Jina, finally fallback to simple.", embeddingAndSearch: "Embedding and Search", embeddingAndSearchDesc: "Configure search and embedding options", defaultEmbeddingOption: "Default Embedding Option", embeddingOptionPlaceholder: "Select embedding option", ask: "Ask", always: "Always", never: "Never", embeddingHelp: "Embedding the content will make it easier to find by you and by your AI agents. If you are running a local embedding model (Ollama, for example), you shouldn't worry about cost and just embed everything.", fileManagement: "File Management", fileManagementDesc: "Configure file handling and storage options", autoDeleteFiles: "Auto Delete Files", autoDeletePlaceholder: "Select auto delete option", filesHelp: "Once your files are uploaded and processed, they are not required anymore. Most users should allow Open Notebook to delete uploaded files from the upload folder automatically.", loadFailed: "Failed to load settings", }, advanced: { title: "AdvancedTools", desc: "Advanced tools and utilities for power users", systemInfo: "System Info", systemInfoDesc: "View the status of underlying system components", rebuildEmbeddings: "Rebuild Embeddings", rebuildEmbeddingsDesc: "Rebuild vector search index for all sources", rebuildWarning: "This action can be very time-consuming depending on the number of sources you have. It will clear existing vector indices and re-generate embeddings for everything.", startRebuild: "Start Rebuild", rebuilding: "Rebuilding...", rebuildSuccess: "Embedding rebuild started successfully", currentVersion: "Current Version", latestVersion: "Latest Version", status: "Status", updateAvailable: "Version {version} Available", updateAvailableDesc: "A new version of Open Notebook is available.", upToDate: "Up to Date", unknown: "Unknown", viewOnGithub: "View on GitHub", updateCheckFailed: "Unable to check for updates. GitHub may be unreachable.", rebuild: { mode: "Rebuild Mode", existing: "Existing", all: "All", existingDesc: "Re-embed only items that already have embeddings (faster, for model switching)", allDesc: "Re-embed existing items + create embeddings for items without any (slower, comprehensive)", include: "Include in Rebuild", selectOneError: "Please select at least one item type to rebuild", starting: "Starting Rebuild...", startBtn: "🚀 Start Rebuild", queued: "Queued", running: "Running...", completed: "Completed!", failed: "Failed", leavePageHint: "You can leave this page as this will run in the background", startNew: "Start New Rebuild", itemsProcessed: "{processed}/{total} items ({percent}%)", failedItems: "{count} items failed to process", time: "Time", whenToRebuild: "When should I rebuild embeddings?", whenToRebuildAns: "You should rebuild when switching models, upgrading versions, fixing corruption, or after bulk imports.", howLong: "How long does rebuilding take?", howLongAns: "Processing time depends on item count, model speed, and API rate limits. Local models are usually very fast.", isSafe: "Is it safe to rebuild while using the app?", isSafeAns: "Yes, rebuilding is safe! It doesn't delete content, only replaces embeddings, and handles errors gracefully.", }, }, transformations: { title: "Transformations", desc: "Transformations are prompts that will be used by the LLM to process a source and extract insights, summaries, etc.", workspace: "Choose a workspace", playground: "Playground", defaultPrompt: "Default Transformation Prompt", defaultPromptDesc: "This will be added to all your transformation prompts", defaultPromptPlaceholder: "Enter your default transformation instructions...", saveDefault: "Save Default", listTitle: "Custom Transformations", createNew: "Create New", testInPlayground: "Test in Playground", inputLabel: "Input Text", inputPlaceholder: 'Enter some text to transform...', outputLabel: 'Output', runTest: 'Run Transformation', running: 'Running...', selectToStart: 'Select a transformation to start', name: 'Name', namePlaceholder: 'Unique identifier, e.g. key_topics', titlePlaceholder: 'Displayed title, defaults to name', promptPlaceholder: 'Write the prompt that will power this transformation...', descriptionPlaceholder: 'Describe what this transformation does.', suggestDefault: 'Suggest by default on new sources', promptHint: 'Prompts should be written with the source content in mind. You can ask the model to summarise, extract insights, or produce structured outputs such as tables.', createSuccess: 'Transformation created successfully', updateSuccess: 'Transformation updated successfully', deleteSuccess: 'Transformation deleted successfully', noTransformations: "No transformations yet", createOne: "Create a transformation to get started", deleteDesc: "Deleting this transformation cannot be undone.", selectModel: "Select a model", deleteConfirm: "Are you sure you want to delete this transformation?", model: "Model", systemPrompt: "System Prompt", type: "Type", extraction: "Extraction", summary: "Summary", custom: "Custom", saveChanges: "Save Changes", overrideModelDesc: "Override the default model for this chat session. Leave empty to use the system default.", sessionUseReplacement: "This session will use {name} instead of the default model.", systemDefault: "System Default", }, models: { title: "Model Management", desc: "Configure AI models for different purposes across Open Notebook", failedToLoad: "Failed to load models data", language: "Language Models", embedding: "Embedding Models", tts: "Text to Speech (TTS)", stt: "Speech to Text (STT)", providers: "Providers", defaultModels: "Default Models", status: "Status", notConfigured: "Not configured", active: "Active", inactive: "Inactive", configure: "Configure", saveChanges: "Save Changes", addModel: "Add Model", modelName: "Model Name", provider: "Provider", apiKey: "API Key", baseUrl: "Base URL", capabilities: "Capabilities", enabled: "Enabled", disabled: "Disabled", deleteConfirm: "Are you sure you want to delete this model?", deleteSuccess: "Model deleted successfully", saveSuccess: "Model saved successfully", providerStatus: "Provider Status", connectionOk: "Connection OK", connectionFailed: "Connection failed", changeEmbeddingWarning: "Changing the default embedding model will affect new sources. Existing sources might need to be re-indexed.", changeEmbeddingTitle: "Change Default Embedding Model?", aiProviders: "AI Providers", providerConfigDesc: "Configure providers through environment variables to enable their models.", configuredCount: "{count} of {total} configured", noModels: "No models", learnMore: "Learn how to configure providers →", seeLess: "See less", seeAll: "See all {count} providers", language_models: "Language Models", embedding_models: "Embedding Models", text_to_speech: "Text to Speech (TTS)", speech_to_text: "Speech to Text (STT)", languageDesc: "Chat, transformations, and text generation", embeddingDesc: "Semantic search and vector embeddings", ttsDesc: "Generate audio from text", sttDesc: "Transcribe audio to text", all: "All", noModelsConfigured: "No models configured", noProviderModelsConfigured: "No {provider} models configured", showMore: "Show {count} more", deleteModel: "Delete Model", deleteModelDesc: "Are you sure you want to delete \"{name}\"? This action cannot be undone.", defaultAssignments: "Default Model Assignments", defaultAssignmentsDesc: "Configure which models to use for different purposes across Open Notebook", missingRequiredModels: "Missing required models: {models}. Open Notebook may not function properly without these.", selectModelPlaceholder: "Select a model", requiredModelPlaceholder: "⚠️ Required - Select a model", whichModelToChoose: "Which model should I choose? →", chatModelLabel: "Chat Model", chatModelDesc: "Used for chat conversations", transformationModelLabel: "Transformation Model", transformationModelDesc: "Used for summaries, insights, and transformations", toolsModelLabel: "Tools Model", toolsModelDesc: "Used for function calling - OpenAI or Anthropic recommended", largeContextModelLabel: "Large Context Model", largeContextModelDesc: "Used for processing large documents - Gemini recommended", embeddingModelLabel: "Embedding Model", embeddingModelDesc: "Used for semantic search and vector embeddings", ttsModelLabel: "Text-to-Speech Model", ttsModelDesc: "Used for podcast generation", sttModelLabel: "Speech-to-Text Model", sttModelDesc: "Used for audio transcription", addSpecificModel: "Add {type} Model", addSpecificModelDesc: "Configure a new {type} model from available providers.", noProvidersForType: "No providers available for {type} models", selectProviderPlaceholder: "Select a provider", providerRequired: "Provider is required", modelNameRequired: "Model name is required", modelRequired: "Model is required", adding: "Adding...", azureHint: "For Azure, use the deployment name as the model name", enterModelName: "Enter model name", embeddingChangeTitle: "Embedding Model Change", embeddingChangeConfirm: "You are about to change your embedding model from {from} to {to}.", rebuildRequired: "Important: Rebuild Required", rebuildReason: "Changing your embedding model requires rebuilding all existing embeddings to maintain consistency. Without rebuilding, your searches may return incorrect or incomplete results.", whatHappensNext: "What happens next:", step1: "Your default embedding model will be updated", step2: "Existing embeddings will remain unchanged until rebuild", step3: "New content will use the new embedding model", step4: "You should rebuild embeddings as soon as possible", proceedToRebuildPrompt: "Would you like to proceed to the Advanced page to start the rebuild now?", changeModelOnly: "Change Model Only", changeAndRebuild: "Change & Go to Rebuild", } }