open-notebook/frontend/src/lib/locales/en-US/index.ts

947 lines
44 KiB
TypeScript

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",
}
}