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: "日本語",
    french: "Français",
    russian: "Русский",
    bengali: "বাংলা",
    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",
    model: "Model",
    back: "Back",
    next: "Next",
    done: "Done",
    processing: "Processing...",
    creating: "Creating...",
    linked: "Linked",
    adding: "Adding...",
    addSelected: "Add Selected",
    customModel: "Custom Model",
    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",
    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",
    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",
    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: {
      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",
      ytVideo: "YouTube video",
      askResponse: "Ask Response",
      searchNotebooks: "Search notebooks",
    },
    url: "URL",
    errorDetails: "Error Details",
    editTransformation: "Edit Transformation",
    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",
    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",
    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",
    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 \"{name}\"? This action cannot be undone.",
    deleteNotebookLoading: "Loading deletion preview...",
    deleteNotebookNotes: "{count} note(s) will be permanently deleted.",
    deleteNotebookNoNotes: "No notes to delete.",
    deleteNotebookExclusiveSources: "{count} source(s) exist only in this notebook.",
    deleteNotebookSharedSources: "{count} source(s) are shared with other notebooks and will be unlinked.",
    deleteNotebookNoSources: "No sources in this notebook.",
    deleteExclusiveSourcesLabel: "Delete exclusive sources",
    keepExclusiveSourcesLabel: "Unlink and keep them",
    activeNotebooks: "Active Notebooks",
    archivedNotebooks: "Archived Notebooks",
    notFound: "Notebook not found",
    notFoundDesc: "The requested notebook does not exist.",
    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",
    delete: "Delete Source",
    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",
    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.",
    insightGenerationStarted: "Insight generation started. It will appear shortly.",
    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",
    createFirstNote: "Create your first note to capture insights and observations.",
    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...",
    htmlDetected: "HTML content detected. It will be converted to Markdown after processing.",
    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",
    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...",
    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",
    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...",
    sessionsTitle: "Chat Sessions",
    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",
    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 profiles.",
    chooseAView: "Choose a view",
    episodesTab: "Episodes",
    templatesTab: "Profiles",
    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: "Profiles workspace",
    templatesWorkspaceDesc: "Build reusable episode and speaker configurations for fast podcast production.",
    howTemplatesPowerTitle: "How profiles power podcast generation",
    howTemplatesPowerDesc: "Profiles 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 profiles data",
    failedToLoadTemplatesDesc: "Ensure the API is running and try again. Some sections may be incomplete.",
    loadingTemplates: "Loading profiles…",
    speakerProfilesTitle: "Speaker profiles",
    speakerProfilesDesc: "Configure voices and personalities for generated episodes.",
    createSpeaker: "Create speaker",
    noSpeakerProfiles: "No speaker profiles yet. Create one to make episode profiles 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",
    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.",
    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.",
    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",
    outlineModelRequired: "Outline model 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",
    failedToDelete: "Failed to delete podcast",
    retry: "Retry",
    retrying: "Retrying…",
    retryStarted: "Retry Started",
    retryStartedDesc: "A new podcast generation job has been submitted.",
    failedToRetry: "Failed to retry episode",
    errorDetails: "Error details",
    language: "Language",
    languagePlaceholder: "Select a language (optional)",
    podcastLanguage: "Podcast language",
    selectOutlineModel: "Select outline model",
    selectTranscriptModel: "Select transcript model",
    voiceModel: "Voice model",
    voiceModelRequired: "Voice model is required",
    selectVoiceModel: "Select voice model",
    perSpeakerTtsOverride: "Per-speaker TTS override (optional)",
    useProfileDefault: "Use profile default",
    setupRequired: "Setup required",
    setupRequiredDesc:
      "Some profiles don't have models configured yet. Edit them to select models before generating podcasts.",
    notConfigured: "Not configured",
  },
  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",
    rebuildEmbeddings: "Rebuild Embeddings",
    rebuildEmbeddingsDesc: "Rebuild vector search index for all sources",
    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: "Submitting jobs...",
      completed: "Jobs Submitted!",
      failed: "Failed",
      leavePageHint: "You can leave this page as this will run in the background",
      startNew: "Start New Rebuild",
      itemsProcessed: "{processed}/{total} jobs submitted ({percent}%)",
      failedItems: "{count} jobs failed to submit",
      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...",
    listTitle: "Custom Transformations",
    createNew: "Create New",
    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",
    selectModel: "Select a model",
    deleteConfirm: "Are you sure you want to delete this transformation?",
    model: "Model",
    systemPrompt: "System Prompt",
    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: {
    embedding: "Embedding Models",
    tts: "Text to Speech (TTS)",
    stt: "Speech to Text (STT)",
    apiKey: "API Key",
    deleteSuccess: "Model deleted successfully",
    saveSuccess: "Model saved successfully",
    noModels: "No models",
    discoverModels: "Discover Models",
    noModelsFound: "No models found from this provider",
    modelType: "Model Type",
    modelTypeHint: "Select the type for the models you want to add. If you need different types, add them in separate batches.",
    deleteModel: "Delete Model",
    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",
    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",
    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",
    autoAssign: "Auto-assign Defaults",
    autoAssigning: "Assigning...",
    autoAssignSuccess: "{count} default models automatically assigned",
    autoAssignNoModels: "No models available to assign. Please sync models first.",
    autoAssignAlreadySet: "All default models are already configured",
    testModel: "Test Model",
    testModelSuccess: "Model Test Passed",
    testModelFailed: "Model Test Failed",
    searchOrAddModel: "Search or type a model name...",
    addCustomModel: "Add \"{name}\"",
  },
  apiKeys: {
    title: "Configure your AI with your own API keys",
    description: "Store API keys securely in the database to enable AI providers in Open Notebook.",
    encryptionRequired: "Encryption key not configured",
    encryptionRequiredDescription: "Set the OPEN_NOTEBOOK_ENCRYPTION_KEY environment variable to any secret string to enable storing API keys in the database.",
    configured: "Configured",
    notConfigured: "Not configured",
    migrationAvailable: "Environment Variables Detected",
    migrationDescription: "{count} API key(s) are configured via environment variables and can be migrated to the database for easier management.",
    migrateToDatabase: "Migrate to Database",
    migrating: "Migrating...",
    migrationSuccess: "{count} API key(s) migrated successfully",
    migrationErrors: "{count} key(s) failed to migrate",
    migrationNothingToMigrate: "All keys are already in the database",
    learnMore: "Learn how to configure API keys →",
    testConnection: "Test Connection",
    testSuccess: "Connection successful",
    testFailed: "Connection test failed",
    syncModels: "Sync Models",
    syncSuccess: "Discovered {discovered} models, added {new} new",
    syncNoNew: "Discovered {count} models, all already registered",
    syncFailed: "Failed to sync models",
    getApiKey: "Get API Key",
    vertexProject: "GCP Project ID",
    vertexLocation: "Region",
    vertexCredentials: "Service Account JSON Path",
    addConfig: "Add Configuration",
    editConfig: "Edit Configuration",
    deleteConfig: "Delete Configuration",
    configName: "Configuration Name",
    configNameHint: "A descriptive name for this configuration (e.g., 'Production', 'Development')",
    baseUrl: "Base URL",
    baseUrlOverrideHint: "Only change this if you need to override the provider's default API endpoint.",
    deleteConfigConfirm: "Are you sure you want to delete '{name}'? This cannot be undone.",
    configSaveSuccess: "Configuration saved successfully",
    configUpdateSuccess: "Configuration updated successfully",
    configDeleteSuccess: "Configuration deleted successfully",
    apiKeyEditHint: "Leave blank to keep the existing API key",
  },
  setupBanner: {
    encryptionRequired: "Encryption key not configured",
    encryptionRequiredDescription: "Set the OPEN_NOTEBOOK_ENCRYPTION_KEY environment variable to enable secure credential storage.",
    migrationAvailable: "API key migration available",
    migrationDescription: "{count} provider(s) have API keys set via environment variables. Migrate them to the database for easier management.",
    goToSettings: "Go to Settings",
    viewDocs: "View docs",
  },
}
