1020 lines
57 KiB
JSON
1020 lines
57 KiB
JSON
{
|
|
"common.save": "Save",
|
|
"common.cancel": "Cancel",
|
|
"common.clear": "Clear",
|
|
"common.settings": "Settings",
|
|
"common.tasks": "Tasks",
|
|
"common.running": "running",
|
|
"common.pending": "pending",
|
|
"activity.posts": "Posts",
|
|
"activity.pages": "Pages",
|
|
"activity.media": "Media",
|
|
"activity.scripts": "Scripts",
|
|
"activity.tags": "Tags",
|
|
"activity.templates": "Templates",
|
|
"activity.aiAssistant": "AI Assistant",
|
|
"activity.import": "Import",
|
|
"activity.sourceControl": "Source Control",
|
|
"activity.toggleHint": "(click again to toggle sidebar)",
|
|
"tasks.backgroundTasks": "Background Tasks",
|
|
"tasks.clearCompleted": "Clear completed",
|
|
"tasks.recent": "Recent",
|
|
"tasks.noActive": "No active tasks",
|
|
"tasks.cancelTask": "Cancel task",
|
|
"tasks.triggerTitle": "{running} running, {pending} pending",
|
|
"app.taskCompleted": "Task completed: {message}",
|
|
"app.taskFailed": "Task failed: {message}",
|
|
"app.blogmark.transforms.summary": "Blogmark transforms: {applied} applied, {failed} failed",
|
|
"app.blogmark.transforms.appliedList": "Applied scripts: {scripts}",
|
|
"app.blogmark.transforms.failed": "Transform failed ({script}): {message}",
|
|
"app.blogmark.transforms.toast": "Script toast: {message}",
|
|
"app.blogmark.transforms.errorToast": "Blogmark transform errors: {count}",
|
|
"app.databaseRebuildFailed": "Database rebuild failed",
|
|
"app.textReindexFailed": "Text reindex failed",
|
|
"app.sitemapGenerationFailed": "Sitemap generation failed",
|
|
"app.calendarRegenerationFailed": "Calendar regeneration failed",
|
|
"app.uploadSiteFailed": "Site upload failed",
|
|
"app.uploadSiteNoCredentials": "Please configure SSH publishing credentials in Settings first.",
|
|
"app.previewOpenFailed": "Failed to open selected post preview",
|
|
"app.metadataDiff": "Metadata Diff",
|
|
"app.importComplete": "Import complete: {posts} posts, {media} media files",
|
|
"siteValidation.tabTitle": "Site Validation",
|
|
"siteValidation.title": "Validate Site",
|
|
"siteValidation.summary": "Expected URLs: {expected} · Existing HTML URLs: {existing} · Missing: {missing} · Extra: {extra} · Updated posts: {updated}",
|
|
"siteValidation.loading": "Validating site...",
|
|
"siteValidation.missingTitle": "Missing HTML URLs (to render)",
|
|
"siteValidation.extraTitle": "Unreferenced HTML URLs (to delete)",
|
|
"siteValidation.updatedTitle": "Updated post URLs (to rerender)",
|
|
"siteValidation.noneMissing": "No missing URLs found.",
|
|
"siteValidation.noneExtra": "No extra URLs found.",
|
|
"siteValidation.noneUpdated": "No updated post URLs found.",
|
|
"siteValidation.apply": "Apply",
|
|
"siteValidation.applying": "Applying...",
|
|
"siteValidation.error.validate": "Site validation failed",
|
|
"siteValidation.error.apply": "Applying validation failed",
|
|
"siteValidation.toast.applySuccess": "Validation applied: {rendered} rendered, {deleted} deleted",
|
|
"menuEditor.tabTitle": "Blog Menu",
|
|
"menuEditor.title": "Blog Menu Editor",
|
|
"menuEditor.description": "Manage the central blog navigation outline and save it to meta/menu.opml.",
|
|
"menuEditor.loading": "Loading menu...",
|
|
"menuEditor.loadError": "Failed to load blog menu",
|
|
"menuEditor.save": "Save Menu",
|
|
"menuEditor.saving": "Saving...",
|
|
"menuEditor.saved": "Blog menu saved",
|
|
"menuEditor.saveFailed": "Failed to save blog menu",
|
|
"menuEditor.addEntry": "Add Entry",
|
|
"menuEditor.newEntryPlaceholder": "Type a page title or submenu label",
|
|
"menuEditor.createHint": "Select a page below or press Enter to create a submenu",
|
|
"menuEditor.pagePicker.title": "Select Page",
|
|
"menuEditor.pagePicker.searchPlaceholder": "Search pages by title or slug...",
|
|
"menuEditor.pagePicker.loading": "Loading pages...",
|
|
"menuEditor.pagePicker.empty": "No matching pages found.",
|
|
"menuEditor.pagePicker.loadError": "Failed to load pages",
|
|
"menuEditor.addPage": "Add Page",
|
|
"menuEditor.addCategoryArchive": "Add Category Archive",
|
|
"menuEditor.addCategoryArchiveShort": "C+",
|
|
"menuEditor.addSubmenu": "Add Submenu",
|
|
"menuEditor.addChildPage": "Add Child Page",
|
|
"menuEditor.addChildSubmenu": "Add Child Submenu",
|
|
"menuEditor.moveUp": "Move Up",
|
|
"menuEditor.moveDown": "Move Down",
|
|
"menuEditor.indent": "Indent",
|
|
"menuEditor.unindent": "Unindent",
|
|
"menuEditor.delete": "Delete",
|
|
"menuEditor.details": "Entry Details",
|
|
"menuEditor.selectItem": "Select an entry to edit details.",
|
|
"menuEditor.field.title": "Title",
|
|
"menuEditor.field.type": "Type",
|
|
"menuEditor.field.pageSlug": "Page Slug",
|
|
"menuEditor.field.pageId": "Page ID",
|
|
"menuEditor.type.page": "Page",
|
|
"menuEditor.type.home": "Home",
|
|
"menuEditor.type.submenu": "Submenu",
|
|
"menuEditor.type.categoryArchive": "Category Archive",
|
|
"menuEditor.empty": "No menu entries yet. Add a page or submenu to start.",
|
|
"menuEditor.newPage": "New Page",
|
|
"menuEditor.newSubmenu": "New Submenu",
|
|
"menuEditor.newCategoryPlaceholder": "Type a category name",
|
|
"menuEditor.categoryPicker.loadError": "Failed to load categories",
|
|
"settings.language.english": "English",
|
|
"settings.language.german": "German",
|
|
"settings.language.french": "French",
|
|
"settings.language.italian": "Italian",
|
|
"settings.language.spanish": "Spanish",
|
|
"settings.language.portuguese": "Portuguese (Português)",
|
|
"settings.language.dutch": "Dutch (Nederlands)",
|
|
"settings.language.polish": "Polish (Polski)",
|
|
"settings.language.russian": "Russian (Русский)",
|
|
"settings.language.japanese": "Japanese (日本語)",
|
|
"settings.language.chinese": "Chinese (中文)",
|
|
"settings.language.korean": "Korean (한국어)",
|
|
"settings.language.arabic": "Arabic (العربية)",
|
|
"settings.language.hindi": "Hindi (हिन्दी)",
|
|
"settings.language.turkish": "Turkish (Türkçe)",
|
|
"settings.language.swedish": "Swedish (Svenska)",
|
|
"settings.language.danish": "Danish (Dansk)",
|
|
"settings.language.norwegian": "Norwegian (Norsk)",
|
|
"settings.language.finnish": "Finnish (Suomi)",
|
|
"settings.language.czech": "Czech (Čeština)",
|
|
"settings.project.title": "Project",
|
|
"settings.project.browse": "Browse",
|
|
"settings.project.reset": "Reset",
|
|
"settings.project.resetDefault": "Reset to default",
|
|
"settings.project.selectDataFolder": "Select Project Data Folder",
|
|
"settings.editor.title": "Editor",
|
|
"settings.editor.mode.wysiwyg": "WYSIWYG (Visual Editor)",
|
|
"settings.editor.mode.markdown": "Markdown (Source)",
|
|
"settings.editor.mode.preview": "Preview (Read-only)",
|
|
"settings.editor.diff.inline": "Inline",
|
|
"settings.editor.diff.sideBySide": "Side by Side",
|
|
"settings.content.title": "Post Categories",
|
|
"settings.content.renderInLists": "Render in lists",
|
|
"settings.content.showTitles": "Show titles",
|
|
"settings.ai.title": "AI Assistant",
|
|
"settings.ai.noModels": "No models available",
|
|
"settings.technology.title": "Technology",
|
|
"settings.technology.description": "Configure runtime behavior for Python script execution.",
|
|
"settings.technology.pythonRuntimeModeLabel": "Python Runtime Mode",
|
|
"settings.technology.pythonRuntimeModeDescription": "Choose where Python scripts execute for transform pipelines.",
|
|
"settings.technology.pythonRuntimeMode.webworker": "Web Worker (Recommended)",
|
|
"settings.technology.pythonRuntimeMode.mainThread": "Main Thread (Legacy)",
|
|
"settings.publishing.sshTitle": "SSH Publishing",
|
|
"settings.data.title": "Database Maintenance",
|
|
"settings.data.fileSystemTitle": "File System",
|
|
"settings.search.placeholder": "Search settings...",
|
|
"settings.search.noResults": "No settings found matching \"{query}\"",
|
|
"settings.search.clear": "Clear search",
|
|
"settings.toast.publishingSaved": "Publishing credentials saved",
|
|
"settings.toast.saveCredentialsFailed": "Failed to save credentials",
|
|
"settings.toast.credentialsCleared": "{type} credentials cleared",
|
|
"settings.toast.projectSaved": "Project settings saved",
|
|
"settings.toast.projectSaveFailed": "Failed to save project settings",
|
|
"settings.toast.blogmarkBookmarkletCopied": "Blogmark bookmarklet copied to clipboard",
|
|
"settings.toast.blogmarkBookmarkletCopyFailed": "Failed to copy blogmark bookmarklet",
|
|
"settings.toast.blogmarkBookmarkletGenerateFailed": "Failed to generate blogmark bookmarklet",
|
|
"settings.toast.categoryAdded": "Category \"{category}\" added",
|
|
"settings.toast.categoryAddFailed": "Failed to add category",
|
|
"settings.toast.categoryExists": "Category already exists",
|
|
"settings.toast.categoryProtected": "Cannot delete standard category \"{category}\"",
|
|
"settings.toast.categoryAtLeastOne": "Must have at least one category",
|
|
"settings.toast.categoryRemoved": "Category \"{category}\" removed",
|
|
"settings.toast.categoryRemoveFailed": "Failed to remove category",
|
|
"settings.toast.categoriesReset": "Categories reset to defaults",
|
|
"settings.toast.categoriesResetFailed": "Failed to reset categories",
|
|
"settings.toast.categorySettingsUpdateFailed": "Failed to update category settings",
|
|
"settings.toast.systemPromptSaved": "System prompt saved",
|
|
"settings.toast.systemPromptSaveFailed": "Failed to save system prompt",
|
|
"settings.toast.systemPromptReset": "System prompt reset to default",
|
|
"settings.toast.systemPromptResetFailed": "Failed to reset system prompt",
|
|
"settings.toast.apiKeySaved": "API key saved and validated",
|
|
"settings.toast.apiKeyInvalid": "Invalid API key",
|
|
"settings.toast.apiKeySaveFailed": "Failed to save API key",
|
|
"settings.toast.defaultModelUpdated": "Default model updated",
|
|
"settings.toast.defaultModelUpdateFailed": "Failed to set default model",
|
|
"settings.toast.rebuildPostsLoading": "Rebuilding posts database...",
|
|
"settings.toast.rebuildPostsSuccess": "Posts database rebuilt",
|
|
"settings.toast.rebuildPostsFailed": "Failed to rebuild posts database",
|
|
"settings.toast.rebuildMediaLoading": "Rebuilding media database...",
|
|
"settings.toast.rebuildMediaSuccess": "Media database rebuilt",
|
|
"settings.toast.rebuildMediaFailed": "Failed to rebuild media database",
|
|
"settings.toast.rebuildScriptsLoading": "Rebuilding scripts database...",
|
|
"settings.toast.rebuildScriptsSuccess": "Scripts database rebuilt",
|
|
"settings.toast.rebuildScriptsFailed": "Failed to rebuild scripts database",
|
|
"settings.toast.rebuildTemplatesLoading": "Rebuilding templates database...",
|
|
"settings.toast.rebuildTemplatesSuccess": "Templates database rebuilt",
|
|
"settings.toast.rebuildTemplatesFailed": "Failed to rebuild templates database",
|
|
"settings.toast.rebuildLinksLoading": "Rebuilding post links...",
|
|
"settings.toast.rebuildLinksSuccess": "Post links rebuilt",
|
|
"settings.toast.rebuildLinksFailed": "Failed to rebuild post links",
|
|
"settings.toast.thumbnailsLoading": "Generating thumbnails...",
|
|
"settings.toast.thumbnailsGenerated": "Generated {count} thumbnails",
|
|
"settings.toast.thumbnailsAlreadyExist": "All thumbnails already exist",
|
|
"settings.toast.thumbnailsComplete": "Thumbnail generation complete",
|
|
"settings.toast.thumbnailsFailed": "Failed to generate thumbnails",
|
|
"chat.setupTitle": "AI Chat Setup",
|
|
"chat.apiKeyRequiredTitle": "API Key Required",
|
|
"chat.apiKeyRequiredDescription": "Configure an API key in Settings to enable AI chat.",
|
|
"chat.openSettings": "Open Settings",
|
|
"chat.apiKeyPlaceholder": "Enter your API key...",
|
|
"chat.apiKeySave": "Save Key",
|
|
"chat.newChat": "New Chat",
|
|
"chat.welcomeTitle": "Welcome to the AI Assistant",
|
|
"chat.welcomeDescription": "I can help you manage your blog with rich visualizations. Try asking me to:",
|
|
"chat.welcomeTipSearch": "Search for posts about a specific topic",
|
|
"chat.welcomeTipChart": "Show a chart of posts published per month",
|
|
"chat.welcomeTipTable": "Compare my recent posts in a table",
|
|
"chat.welcomeTipMetadata": "Update metadata for posts or media",
|
|
"chat.welcomeTipTabs": "Show post statistics by year in tabs with charts",
|
|
"chat.role.you": "You",
|
|
"chat.role.assistant": "Assistant",
|
|
"chat.stop": "Stop",
|
|
"chat.inputPlaceholder": "Type a message...",
|
|
"chat.errorPrefix": "Error: {error}",
|
|
"chat.errorNoResponse": "Failed to get a response. Please try again.",
|
|
"chat.errorEmptyResponse": "The model returned an empty response. Try a different model or rephrase your question.",
|
|
"chat.errorGeneric": "Sorry, an error occurred while processing your message.",
|
|
"chat.cancelledSuffix": "(cancelled)",
|
|
"aiSuggestions.title": "AI Image Analysis",
|
|
"aiSuggestions.close": "Close",
|
|
"aiSuggestions.analyzing": "Analyzing image...",
|
|
"aiSuggestions.titleField": "Title",
|
|
"aiSuggestions.altField": "Alt Text",
|
|
"aiSuggestions.captionField": "Caption",
|
|
"aiSuggestions.hasExisting": "(has existing value)",
|
|
"aiSuggestions.current": "Current",
|
|
"aiSuggestions.intro": "Select which AI-generated values to apply. Existing values are preserved by default.",
|
|
"aiSuggestions.empty": "No suggestions were generated for this image.",
|
|
"aiSuggestions.wait": "Please wait...",
|
|
"aiSuggestions.applySelected": "Apply Selected",
|
|
"insert.title.link": "Insert Link",
|
|
"insert.title.image": "Insert Image",
|
|
"insert.tab.linkInternal": "Link to Post",
|
|
"insert.tab.imageInternal": "Media Library",
|
|
"insert.tab.linkExternal": "External URL",
|
|
"insert.tab.imageExternal": "External Image",
|
|
"insert.searchPlaceholder.link": "Search posts by title or content...",
|
|
"insert.searchPlaceholder.image": "Search media by name, title, or alt text...",
|
|
"insert.status.searching": "Searching...",
|
|
"insert.status.typeMore": "Type at least 2 characters to search",
|
|
"insert.status.noResults": "No {kind} found for \"{query}\"",
|
|
"insert.label.url": "URL",
|
|
"insert.label.linkTextOptional": "Link Text (optional)",
|
|
"insert.label.altText": "Alt Text",
|
|
"insert.placeholder.linkUrl": "https://example.com",
|
|
"insert.placeholder.imageUrl": "https://example.com/image.jpg",
|
|
"insert.placeholder.linkText": "Click here",
|
|
"insert.placeholder.imageAlt": "Description of the image",
|
|
"insert.submit.link": "Insert Link",
|
|
"insert.submit.image": "Insert Image",
|
|
"insert.hint.internal": "Use ↑↓ to navigate, Enter to select, Esc to close",
|
|
"insert.hint.external": "Enter URL and press Enter or click button, Esc to close",
|
|
"insert.hint.canonicalPost": "Canonical: /YYYY/MM/DD/slug",
|
|
"insert.hint.canonicalMedia": "Canonical: /media/YYYY/MM/file.ext",
|
|
"insert.createPost": "Create post \"{title}\"",
|
|
"insert.createdPost": "Post \"{title}\" created",
|
|
"postLinks.loading": "Loading links...",
|
|
"postLinks.link": "link",
|
|
"postLinks.links": "links",
|
|
"postLinks.linksTo": "Links to ({count})",
|
|
"postLinks.linkedBy": "Linked by ({count})",
|
|
"postLinks.openTitle": "Open: {title}",
|
|
"docs.title": "Documentation",
|
|
"docs.subtitle": "User guide for this installed bDS version.",
|
|
"docs.apiTitle": "API Documentation",
|
|
"docs.apiSubtitle": "Complete reference of Python runtime API calls.",
|
|
"docs.copyCode": "Copy code",
|
|
"gitDiff.header": "Diff: {target}",
|
|
"gitDiff.noProject": "No active project selected.",
|
|
"gitDiff.noProjectPath": "Unable to resolve project path.",
|
|
"gitDiff.loadFailed": "Failed to load diff.",
|
|
"gitDiff.loading": "Loading diff...",
|
|
"gitDiff.changedFiles": "Changed files",
|
|
"gitDiff.previousFile": "Previous file",
|
|
"gitDiff.nextFile": "Next file",
|
|
"errorModal.error": "Error",
|
|
"errorModal.stackTrace": "Stack Trace",
|
|
"errorModal.copyClipboard": "Copy to clipboard",
|
|
"errorModal.copy": "Copy",
|
|
"errorModal.noStack": "No stack trace available",
|
|
"confirmDelete.title": "Confirm Deletion",
|
|
"confirmDelete.promptPost": "Are you sure you want to delete the post",
|
|
"confirmDelete.promptMedia": "Are you sure you want to delete the media file",
|
|
"confirmDelete.warning": "Warning:",
|
|
"confirmDelete.referencedBy": "This {itemType} is referenced by the following items:",
|
|
"confirmDelete.note": "Deleting this {itemType} will remove all these references.",
|
|
"confirmDelete.cancel": "Cancel",
|
|
"confirmDelete.deletePost": "Delete Post",
|
|
"confirmDelete.deleteMedia": "Delete Media",
|
|
"confirmDelete.itemType.post": "post",
|
|
"confirmDelete.itemType.media": "media",
|
|
"lightbox.close": "Close (Esc)",
|
|
"lightbox.previous": "Previous (←)",
|
|
"lightbox.next": "Next (→)",
|
|
"credentials.error.load": "Failed to load credentials:",
|
|
"credentials.error.save": "Failed to save credentials:",
|
|
"credentials.toast.saved": "Credentials saved",
|
|
"credentials.toast.saveFailed": "Failed to save credentials",
|
|
"credentials.toast.testing": "Testing {type} connection...",
|
|
"credentials.toast.connectionFailed": "Connection failed - check credentials",
|
|
"credentials.tab.ssh": "SSH",
|
|
"credentials.ssh.title": "SSH Publishing",
|
|
"credentials.ssh.description": "Configure SSH for secure publishing to your server.",
|
|
"credentials.field.host": "Host",
|
|
"credentials.field.username": "Username",
|
|
"credentials.field.sshRemotePath": "Remote Path",
|
|
"credentials.ssh.placeholder.host": "server.example.com",
|
|
"credentials.ssh.placeholder.username": "ssh-user",
|
|
"credentials.ssh.placeholder.remotePath": "/var/www/html",
|
|
"gitSidebar.header": "SOURCE CONTROL",
|
|
"gitSidebar.loading": "Loading...",
|
|
"gitSidebar.error.fetchRemoteUpdates": "Failed to fetch remote updates.",
|
|
"gitSidebar.error.refreshRemoteState": "Unable to refresh remote tracking state.",
|
|
"gitSidebar.error.gitMissing": "Git executable not found. Please install Git and restart the app.",
|
|
"gitSidebar.error.noActiveProject": "No active project selected.",
|
|
"gitSidebar.error.loadRepoStatus": "Unable to load repository status.",
|
|
"gitSidebar.error.initFailed": "Failed to initialize git repository.",
|
|
"gitSidebar.error.actionFailed": "Failed to {action}.",
|
|
"gitSidebar.error.commitFailed": "Failed to commit changes.",
|
|
"gitSidebar.progress.preparingInit": "Preparing repository initialization...",
|
|
"gitSidebar.progress.pushingRemote": "Pushing commits to remote... this can take a while for large uploads.",
|
|
"gitSidebar.progress.fetching": "Fetching remote updates...",
|
|
"gitSidebar.progress.pulling": "Pulling latest changes...",
|
|
"gitSidebar.progress.pruningLfs": "Pruning local Git LFS cache...",
|
|
"gitSidebar.progress.committing": "Creating commit...",
|
|
"gitSidebar.progress.initializingRepo": "Initializing repository...",
|
|
"gitSidebar.history.synced": "Synced",
|
|
"gitSidebar.history.localOnly": "Local only",
|
|
"gitSidebar.history.remoteOnly": "Remote only",
|
|
"gitSidebar.init.transcript": "Initialization transcript",
|
|
"gitSidebar.aria.repoActions": "Repository actions",
|
|
"gitSidebar.aria.openChanges": "Open Changes",
|
|
"gitSidebar.aria.commitStatusLegend": "Commit status legend",
|
|
"gitSidebar.aria.versionHistory": "Version History",
|
|
"gitSidebar.action.fetch": "Fetch",
|
|
"gitSidebar.action.fetching": "Fetching...",
|
|
"gitSidebar.action.pull": "Pull",
|
|
"gitSidebar.action.pulling": "Pulling...",
|
|
"gitSidebar.action.push": "Push",
|
|
"gitSidebar.action.pushing": "Pushing...",
|
|
"gitSidebar.action.pruneLfs": "Prune LFS",
|
|
"gitSidebar.action.pruning": "Pruning...",
|
|
"gitSidebar.action.commit": "Commit",
|
|
"gitSidebar.action.committing": "Committing...",
|
|
"gitSidebar.action.loadMoreHistory": "Load more",
|
|
"gitSidebar.action.initializeGit": "Initialize Git",
|
|
"gitSidebar.action.initializing": "Initializing...",
|
|
"gitSidebar.openChanges": "Open changes ({count})",
|
|
"gitSidebar.versionHistory": "Version History ({count})",
|
|
"gitSidebar.loadingChanges": "Loading changes...",
|
|
"gitSidebar.noChanges": "No changes",
|
|
"gitSidebar.loadingHistory": "Loading history...",
|
|
"gitSidebar.noCommits": "No commits yet",
|
|
"gitSidebar.branch": "Branch: {branch}",
|
|
"gitSidebar.aheadBehind": "ahead {ahead} / behind {behind}",
|
|
"gitSidebar.notRepo": "This project is not a git repository.",
|
|
"gitSidebar.placeholder.remoteUrl": "Optional remote repository URL",
|
|
"gitSidebar.placeholder.commitMessage": "Commit message",
|
|
"editor.untitled": "Untitled",
|
|
"tabBar.style": "Style",
|
|
"tabBar.scripts": "Scripts",
|
|
"tabBar.loading": "Loading...",
|
|
"tabBar.unknown": "Unknown",
|
|
"tabBar.preview": "Preview",
|
|
"tabBar.modified": "Modified",
|
|
"tabBar.closeHint": "Close (Ctrl+W)",
|
|
"tabBar.scrollLeft": "Scroll tabs left",
|
|
"tabBar.scrollRight": "Scroll tabs right",
|
|
"tabBar.commitTitle": "Commit {hash}",
|
|
"tabBar.error.fetchPostTitle": "Failed to fetch post title:",
|
|
"tabBar.error.fetchChatTitle": "Failed to fetch chat title:",
|
|
"tabBar.error.fetchImportTitle": "Failed to fetch import definition title:",
|
|
"tabBar.error.fetchScriptTitle": "Failed to fetch script title:",
|
|
"tabBar.error.fetchTemplateTitle": "Failed to fetch template title:",
|
|
"tabBar.error.fetchCommitTitle": "Failed to fetch commit titles:",
|
|
"metadataDiff.title": "Metadata Diff Tool",
|
|
"metadataDiff.description": "Compare post metadata between database and markdown files. Fix inconsistencies caused by bugs or manual edits.",
|
|
"metadataDiff.error.loadStats": "Failed to load database statistics",
|
|
"metadataDiff.error.scan": "Failed to scan for differences",
|
|
"metadataDiff.progress.starting": "Starting scan...",
|
|
"metadataDiff.progress.scanningPublished": "Scanning published posts...",
|
|
"metadataDiff.progress.scanning": "Scanning...",
|
|
"metadataDiff.action.scan": "Scan for Differences",
|
|
"metadataDiff.action.rescan": "Re-scan",
|
|
"metadataDiff.stats.totalPosts": "Total Posts",
|
|
"metadataDiff.stats.published": "Published",
|
|
"metadataDiff.stats.drafts": "Drafts",
|
|
"metadataDiff.stats.mediaFiles": "Media Files",
|
|
"metadataDiff.summary.noDiffs": "✅ No differences found! All {total} published posts are in sync.",
|
|
"metadataDiff.summary.withDiffs": "⚠️ Found {count} posts with differences out of {total} published posts.",
|
|
"metadataDiff.group.differences": "{label} Differences",
|
|
"metadataDiff.group.postsCount": "{count} posts",
|
|
"metadataDiff.sync.failed": "failed",
|
|
"metadataDiff.sync.dbToFile.title": "Update files with database values",
|
|
"metadataDiff.sync.dbToFile.success": "Synced {success} posts to files{failed}",
|
|
"metadataDiff.sync.dbToFile.error": "Failed to sync to files",
|
|
"metadataDiff.sync.fileToDb.title": "Update database with file values",
|
|
"metadataDiff.sync.fileToDb.success": "Synced {success} files to database{failed}",
|
|
"metadataDiff.sync.fileToDb.error": "Failed to sync to database",
|
|
"metadataDiff.value.database": "Database",
|
|
"metadataDiff.value.file": "File",
|
|
"metadataDiff.empty": "Click \"Scan for Differences\" to compare database metadata with file metadata.",
|
|
"sidebar.archive": "Archive",
|
|
"sidebar.clearFilter": "Clear filter",
|
|
"sidebar.tags": "Tags",
|
|
"sidebar.categories": "Categories",
|
|
"sidebar.clearTags": "Clear tags",
|
|
"sidebar.clearCategories": "Clear categories",
|
|
"sidebar.noPostsYet": "No posts yet",
|
|
"sidebar.noPagesYet": "No pages yet",
|
|
"sidebar.noMediaYet": "No media yet",
|
|
"sidebar.search": "Search",
|
|
"sidebar.searchPostsPlaceholder": "Search posts...",
|
|
"sidebar.searchPagesPlaceholder": "Search pages...",
|
|
"sidebar.searchMediaPlaceholder": "Search media...",
|
|
"sidebar.toggleFilters": "Toggle Filters",
|
|
"sidebar.newPost": "New Post",
|
|
"sidebar.importMedia": "Import media",
|
|
"sidebar.results": "{count} results",
|
|
"sidebar.resultsFor": "{count} results for \"{query}\"",
|
|
"sidebar.clearFilters": "Clear filters",
|
|
"sidebar.drafts": "Drafts",
|
|
"sidebar.published": "Published",
|
|
"sidebar.archived": "Archived",
|
|
"sidebar.untitled": "Untitled",
|
|
"sidebar.noMatchingPosts": "No matching posts",
|
|
"sidebar.createFirstPost": "Create your first post",
|
|
"sidebar.loadMore": "Load more ({loaded} of {total})",
|
|
"sidebar.loading": "Loading...",
|
|
"sidebar.noMediaFiles": "No media files",
|
|
"sidebar.settingsHeader": "Settings",
|
|
"sidebar.tagsHeader": "Tags",
|
|
"sidebar.nav.project": "Project",
|
|
"sidebar.nav.editor": "Editor",
|
|
"sidebar.nav.content": "Content",
|
|
"sidebar.nav.ai": "AI Assistant",
|
|
"sidebar.nav.technology": "Technology",
|
|
"sidebar.nav.publishing": "Publishing",
|
|
"sidebar.nav.data": "Data",
|
|
"sidebar.nav.style": "Style",
|
|
"sidebar.nav.scripts": "Scripts",
|
|
"scripts.run": "Run Script",
|
|
"scripts.save": "Save Script",
|
|
"scripts.delete": "Delete Script",
|
|
"scripts.content": "Script Content",
|
|
"scripts.field.kind": "Kind",
|
|
"scripts.field.entrypoint": "Entrypoint",
|
|
"scripts.entrypoint.main": "main",
|
|
"scripts.entrypoint.none": "No functions found",
|
|
"scripts.field.enabled": "Enabled",
|
|
"scripts.syntax.check": "Check Syntax",
|
|
"scripts.syntax.checking": "Checking...",
|
|
"scripts.syntax.valid": "Python syntax is valid",
|
|
"scripts.syntax.invalid": "Python syntax errors: {count}",
|
|
"scripts.syntax.checkFailed": "Python syntax check failed",
|
|
"scripts.kind.utility": "utility",
|
|
"scripts.kind.macro": "macro",
|
|
"scripts.kind.transform": "transform",
|
|
"templates.save": "Save Template",
|
|
"templates.delete": "Delete Template",
|
|
"templates.content": "Template Content",
|
|
"templates.field.kind": "Kind",
|
|
"templates.field.enabled": "Enabled",
|
|
"templates.validate": "Validate",
|
|
"templates.validate.valid": "Template syntax is valid",
|
|
"templates.validate.invalid": "Template syntax errors: {count}",
|
|
"templates.validate.checking": "Validating...",
|
|
"templates.kind.post": "post",
|
|
"templates.kind.list": "list",
|
|
"templates.kind.not_found": "not found",
|
|
"templates.kind.partial": "partial",
|
|
"sidebar.tagCloud": "Tag Cloud",
|
|
"sidebar.createEdit": "Create & Edit",
|
|
"sidebar.mergeTags": "Merge Tags",
|
|
"settings.project.descriptionGeneral": "General settings for the active blog project.",
|
|
"settings.project.nameLabel": "Project Name",
|
|
"settings.project.nameDescription": "The display name of your blog project.",
|
|
"settings.project.namePlaceholder": "My Blog",
|
|
"settings.project.descriptionLabel": "Description",
|
|
"settings.project.descriptionDescription": "A short description of your blog. This can be used in templates and metadata.",
|
|
"settings.project.descriptionPlaceholder": "A blog about...",
|
|
"settings.project.dataPathLabel": "Project Data Path",
|
|
"settings.project.dataPathDescription": "Custom folder for storing posts, media, and metadata. Leave empty to use the default location: {path}",
|
|
"settings.project.defaultLocation": "Default location",
|
|
"settings.project.publicUrlLabel": "Public URL",
|
|
"settings.project.publicUrlDescription": "The public base URL of your published blog (used for sitemap generation).",
|
|
"settings.project.publicUrlPlaceholder": "https://example.com",
|
|
"settings.project.mainLanguageLabel": "Main Language",
|
|
"settings.project.mainLanguageDescription": "The primary language for your blog content. AI-generated titles, alt text, and captions will use this language.",
|
|
"settings.project.defaultAuthorLabel": "Default Author",
|
|
"settings.project.defaultAuthorDescription": "The default author name for new posts and media. Can be overridden per item.",
|
|
"settings.project.defaultAuthorPlaceholder": "Author Name",
|
|
"settings.project.maxPostsPerPageLabel": "Max Posts Per Page",
|
|
"settings.project.maxPostsPerPageDescription": "Maximum number of posts shown per preview route page.",
|
|
"settings.project.blogmarkCategoryLabel": "Blogmark Category",
|
|
"settings.project.blogmarkCategoryDescription": "Category assigned to posts created via bookmarklet deep links.",
|
|
"settings.project.blogmarkBookmarkletLabel": "Browser Bookmarklet",
|
|
"settings.project.blogmarkBookmarkletDescription": "Copy a bookmarklet you can paste into your browser bookmarks bar to send page links into bDS.",
|
|
"settings.project.blogmarkBookmarkletCopyButton": "Copy Blogmark Bookmarklet",
|
|
"settings.project.saveButton": "Save Project Settings",
|
|
"editor.loadingPost": "Loading post...",
|
|
"editor.unsavedChanges": "Unsaved changes (auto-saves on switch)",
|
|
"editor.saving": "Saving...",
|
|
"editor.publish": "Publish",
|
|
"editor.publishTitle": "Save and make this post public",
|
|
"editor.discardChanges": "Discard Changes",
|
|
"editor.discardDraft": "Discard Draft",
|
|
"editor.discardChangesTitle": "Revert to last published version",
|
|
"editor.discardDraftTitle": "Delete this draft permanently",
|
|
"editor.delete": "Delete",
|
|
"editor.deleteTitle": "Delete this post permanently",
|
|
"editor.field.title": "Title",
|
|
"editor.field.tags": "Tags",
|
|
"editor.field.author": "Author",
|
|
"editor.field.slug": "Slug",
|
|
"editor.field.categories": "Categories",
|
|
"editor.field.content": "Content",
|
|
"editor.field.template": "Template",
|
|
"editor.field.templateDefault": "Default",
|
|
"editor.placeholder.tags": "Add tags...",
|
|
"editor.placeholder.author": "Author name",
|
|
"editor.placeholder.categories": "Add categories...",
|
|
"editor.placeholder.startWriting": "Start writing...",
|
|
"editor.mode.visual": "Visual",
|
|
"editor.mode.visualTitle": "Visual editor",
|
|
"editor.mode.markdownTitle": "Markdown source",
|
|
"editor.mode.previewTitle": "Read-only preview",
|
|
"editor.galleryTitle": "View {count} image(s)",
|
|
"editor.insertPostLinkTitle": "Link to post (Ctrl+K)",
|
|
"editor.insertMediaTitle": "Insert image from media library",
|
|
"editor.previewFrameTitle": "Post preview",
|
|
"editor.previewLoading": "Loading preview...",
|
|
"editor.metadata.toggle": "Metadata",
|
|
"editor.footer.created": "Created",
|
|
"editor.footer.updated": "Updated",
|
|
"editor.footer.published": "Published",
|
|
"dashboard.title": "Dashboard",
|
|
"dashboard.subtitle": "Overview of your blog database",
|
|
"dashboard.stats.totalPosts": "Total Posts",
|
|
"dashboard.stats.published": "{count} published",
|
|
"dashboard.stats.drafts": "{count} drafts",
|
|
"dashboard.stats.archived": "{count} archived",
|
|
"dashboard.stats.mediaFiles": "Media Files",
|
|
"dashboard.stats.images": "{count} images",
|
|
"dashboard.stats.tags": "Tags",
|
|
"dashboard.stats.categories": "{count} categories",
|
|
"dashboard.stats.protocolHealth": "Protocol Health",
|
|
"dashboard.stats.blockedActions": "{count} blocked actions",
|
|
"dashboard.stats.fallbackTurns": "{count} fallback turns",
|
|
"dashboard.section.postsOverTime": "Posts Over Time",
|
|
"dashboard.section.tags": "Tags",
|
|
"dashboard.section.categories": "Categories",
|
|
"dashboard.section.recentlyUpdated": "Recently Updated",
|
|
"dashboard.tagCloud.more": "+{count} more",
|
|
"dashboard.postCount.one": "{count} post",
|
|
"dashboard.postCount.other": "{count} posts",
|
|
"dashboard.status.draft": "Draft",
|
|
"dashboard.status.published": "Published",
|
|
"dashboard.status.archived": "Archived",
|
|
"projectSelector.switchProject": "Switch project",
|
|
"projectSelector.selectProject": "Select project",
|
|
"projectSelector.projectsHeader": "Projects",
|
|
"projectSelector.noProjectsYet": "No projects yet",
|
|
"projectSelector.newProject": "New project",
|
|
"projectSelector.createNewProject": "Create new project",
|
|
"projectSelector.projectName": "Project name",
|
|
"projectSelector.projectNamePlaceholder": "My Blog",
|
|
"projectSelector.descriptionOptional": "Description (optional)",
|
|
"projectSelector.descriptionPlaceholder": "A brief description of this project...",
|
|
"projectSelector.projectLocation": "Project location",
|
|
"projectSelector.useDefaultLocation": "Use default location",
|
|
"projectSelector.defaultInternalStorage": "Default (internal storage)",
|
|
"projectSelector.chooseFolder": "Choose folder...",
|
|
"projectSelector.projectLocationHint": "Choose a custom folder for cloud storage backup, or use the default internal storage.",
|
|
"projectSelector.createProject": "Create project",
|
|
"projectSelector.deleteProject": "Delete project",
|
|
"projectSelector.deleteWarning": "This will permanently delete the project \"{name}\" and all its data including:",
|
|
"projectSelector.deleteItemPosts": "All blog posts",
|
|
"projectSelector.deleteItemMedia": "All media files",
|
|
"projectSelector.deleteItemSettings": "All project settings",
|
|
"projectSelector.typeToConfirm": "Type {name} to confirm deletion:",
|
|
"projectSelector.selectProjectLocation": "Select project location",
|
|
"projectSelector.deleteProjectTitle": "Delete {name}",
|
|
"projectSelector.toast.switched": "Switched to {name}",
|
|
"projectSelector.toast.switchFailed": "Failed to switch project",
|
|
"projectSelector.toast.created": "Created project \"{name}\"",
|
|
"projectSelector.toast.createFailed": "Failed to create project",
|
|
"projectSelector.toast.existingSettingsFound": "Found existing project settings",
|
|
"projectSelector.toast.selectFolderFailed": "Failed to select folder",
|
|
"projectSelector.toast.deletedWithData": "Deleted project \"{name}\" and all its data",
|
|
"projectSelector.toast.deleteFailed": "Failed to delete project",
|
|
"tagsView.title": "Tag Management",
|
|
"tagsView.subtitle": "Manage your blog's tags, assign colors, and perform bulk operations.",
|
|
"tagsView.loadingTags": "Loading tags...",
|
|
"tagsView.noTagsFound": "No tags found",
|
|
"tagsView.discoverFromPosts": "Discover tags from posts",
|
|
"tagsView.selectedCount": "{count} tag(s) selected",
|
|
"tagsView.clearSelection": "Clear selection",
|
|
"tagsView.cloud.title": "Tag Cloud",
|
|
"tagsView.cloud.description": "Click tags to select them for bulk operations. Hover to see post counts.",
|
|
"tagsView.manage.title": "Create & Edit Tags",
|
|
"tagsView.manage.description": "Create new tags or edit existing ones. Assign colors to make tags visually distinct.",
|
|
"tagsView.create.title": "Create New Tag",
|
|
"tagsView.create.action": "Create",
|
|
"tagsView.tagNamePlaceholder": "Tag name",
|
|
"tagsView.chooseColor": "Choose color",
|
|
"tagsView.removeColor": "Remove color",
|
|
"tagsView.edit.title": "Edit Tag: {name}",
|
|
"tagsView.edit.action": "Edit",
|
|
"tagsView.edit.postTemplate": "Post Template",
|
|
"tagsView.deleteAction": "Delete",
|
|
"tagsView.merge.title": "Merge Tags",
|
|
"tagsView.merge.description": "Select multiple tags above, then merge them into a single tag. All posts will be updated.",
|
|
"tagsView.merge.selectAtLeastTwo": "Select 2 or more tags from the cloud above to merge them.",
|
|
"tagsView.merge.countInto": "Merge {count} tags into:",
|
|
"tagsView.merge.selectTarget": "Select target tag...",
|
|
"tagsView.merge.action": "Merge Tags",
|
|
"tagsView.merge.tagsToDelete": "Tags to be deleted: {tags}",
|
|
"tagsView.sync.title": "Sync Tags",
|
|
"tagsView.sync.description": "Discover tags that exist in posts but not in the tag database.",
|
|
"tagsView.sync.action": "Sync Tags from Posts",
|
|
"tagsView.confirmDelete.title": "Delete Tag",
|
|
"tagsView.confirmDelete.message": "Are you sure you want to delete the tag \"{tagName}\"? This will remove it from all posts. This action runs as a background task.",
|
|
"tagsView.confirmDelete.action": "Delete Tag",
|
|
"tagsView.confirmMerge.title": "Merge Tags",
|
|
"tagsView.confirmMerge.message": "Are you sure you want to merge {count} tag(s) into \"{target}\"? The source tags will be deleted and all posts will be updated. This runs as a background task.",
|
|
"tagsView.confirmMerge.action": "Merge Tags",
|
|
"tagsView.none": "(none)",
|
|
"tagsView.tagCountTitle": "{count} {item}",
|
|
"tagsView.postsSingular": "post",
|
|
"tagsView.postsPlural": "posts",
|
|
"tagsView.toast.tagNameRequired": "Tag name is required",
|
|
"tagsView.toast.tagCreated": "Tag created",
|
|
"tagsView.toast.tagDeleted": "Tag deleted. {postsUpdated} post(s) updated.",
|
|
"tagsView.toast.tagUpdated": "Tag updated",
|
|
"tagsView.toast.targetTagNotFound": "Target tag not found",
|
|
"tagsView.toast.noSourceTagsToMerge": "No source tags to merge",
|
|
"tagsView.toast.tagsMerged": "Merged {tagsDeleted} tag(s) into \"{targetTag}\". {postsUpdated} post(s) updated.",
|
|
"tagsView.toast.discoveredTags": "Discovered {count} new tag(s)",
|
|
"tagsView.toast.alreadySynced": "All tags are already synced",
|
|
"tagsView.error.deleteFailedTitle": "Delete Failed",
|
|
"tagsView.error.mergeFailedTitle": "Merge Failed",
|
|
"linkedMediaPanel.title": "📷 Linked Media",
|
|
"linkedMediaPanel.collapsedTitle": "📷 Media ({count})",
|
|
"linkedMediaPanel.importAndLink": "Import and link media",
|
|
"linkedMediaPanel.linkExisting": "Link existing media",
|
|
"linkedMediaPanel.selectMediaToLink": "Select media to link",
|
|
"linkedMediaPanel.searchPlaceholder": "Search media...",
|
|
"linkedMediaPanel.noUnlinkedMedia": "No unlinked media available",
|
|
"linkedMediaPanel.noMediaLinked": "No media linked to this post",
|
|
"linkedMediaPanel.importMedia": "Import Media",
|
|
"linkedMediaPanel.unlinkFromPost": "Unlink from post",
|
|
"linkedMediaPanel.toast.importedLinked": "Imported and linked {count} file(s)",
|
|
"linkedMediaPanel.toast.importFailed": "Failed to import media",
|
|
"linkedMediaPanel.toast.unlinked": "Media unlinked from post",
|
|
"linkedMediaPanel.toast.unlinkFailed": "Failed to unlink media",
|
|
"linkedMediaPanel.toast.linked": "Media linked to post",
|
|
"linkedMediaPanel.toast.linkFailed": "Failed to link media",
|
|
"styleView.title": "Style",
|
|
"styleView.subtitle": "Select a Pico CSS theme and preview the top posts before applying.",
|
|
"styleView.themePickerAria": "Pico theme picker",
|
|
"styleView.previewMode": "Preview mode",
|
|
"styleView.mode.auto": "Auto",
|
|
"styleView.mode.light": "Light",
|
|
"styleView.mode.dark": "Dark",
|
|
"styleView.applyTheme": "Apply Theme",
|
|
"styleView.themePreviewTitle": "Theme preview",
|
|
"styleView.toast.appliedTheme": "Applied theme: {theme}",
|
|
"styleView.toast.applyThemeFailed": "Failed to apply theme",
|
|
"panel.tabsAria": "Panel tabs",
|
|
"panel.output": "Output",
|
|
"panel.postLinks": "Post Links",
|
|
"panel.gitLog": "Git Log",
|
|
"panel.closeTitle": "Close panel",
|
|
"panel.noRecentTasks": "No recent tasks",
|
|
"panel.noOutput": "No output",
|
|
"panel.copyOutput": "Copy Output",
|
|
"panel.openPostEditor": "Open a post editor to view post links",
|
|
"panel.loadingPostLinks": "Loading post links...",
|
|
"panel.noPostLinks": "No post links for this post",
|
|
"panel.openPostOrMediaEditor": "Open a post or media editor to view git log",
|
|
"panel.loadingGitLog": "Loading git log...",
|
|
"panel.noCommits": "No commits found for this item",
|
|
"panel.error.loadPostLinks": "Failed to load post links.",
|
|
"panel.error.loadGitLog": "Failed to load git log.",
|
|
"panel.direction.from": "from",
|
|
"panel.direction.to": "to",
|
|
"settings.editor.description": "Configure the blog post editor behavior and appearance.",
|
|
"settings.editor.defaultModeLabel": "Default Editor Mode",
|
|
"settings.editor.defaultModeDescription": "Choose the default mode when opening posts. You can switch modes at any time using the editor toolbar.",
|
|
"settings.editor.diffViewStyleLabel": "Diff View Style",
|
|
"settings.editor.diffViewStyleDescription": "Choose how Git diffs are shown by default.",
|
|
"settings.editor.wrapLongLinesLabel": "Wrap Long Lines in Diff",
|
|
"settings.editor.wrapLongLinesDescription": "Enable word wrapping for long lines in Git diffs.",
|
|
"settings.editor.wrapLongLinesAria": "Wrap long lines in diff",
|
|
"settings.editor.hideUnchangedRegionsLabel": "Hide Unchanged Regions",
|
|
"settings.editor.hideUnchangedRegionsDescription": "Collapse unchanged regions in Git diffs.",
|
|
"settings.editor.hideUnchangedRegionsAria": "Hide unchanged regions",
|
|
"settings.content.newCategoryPlaceholder": "New category name...",
|
|
"settings.content.addCategory": "Add Category",
|
|
"settings.content.resetDefaults": "Reset to Defaults",
|
|
"settings.content.description": "Manage the available categories for blog posts. Each post can have one category that determines its display template.",
|
|
"settings.content.standardSuffix": " (standard)",
|
|
"settings.content.categoryColumn": "Category",
|
|
"settings.content.titleColumn": "Title",
|
|
"settings.content.actionsColumn": "Actions",
|
|
"settings.content.postTemplateColumn": "Post Template",
|
|
"settings.content.listTemplateColumn": "List Template",
|
|
"settings.content.postTemplateAria": "{category} post template",
|
|
"settings.content.listTemplateAria": "{category} list template",
|
|
"settings.content.renderInListsAria": "{category} render in lists",
|
|
"settings.content.showTitlesAria": "{category} show titles",
|
|
"settings.content.categoryTitleAria": "{category} display title",
|
|
"settings.content.removeCategoryTitle": "Remove \"{category}\" category",
|
|
"settings.ai.description": "Configure the AI chat assistant that helps you manage your blog content.",
|
|
"settings.ai.apiKeyLabel": "OpenCode API Key",
|
|
"settings.ai.apiKeyDescription": "Your API key for the OpenCode Zen gateway. Required to use AI features.",
|
|
"settings.ai.apiKeyConfigured": "API key configured",
|
|
"settings.ai.configured": "✓ Configured",
|
|
"settings.ai.changeApiKey": "Change API Key",
|
|
"settings.ai.defaultModelLabel": "Default Model",
|
|
"settings.ai.defaultModelDescription": "The AI model to use for new chat conversations.",
|
|
"settings.ai.systemPromptLabel": "System Prompt",
|
|
"settings.ai.systemPromptDescription": "Instructions given to the AI at the start of each conversation. This defines how the assistant behaves and what tools it knows about.",
|
|
"settings.ai.systemPromptPlaceholder": "Enter system instructions for the AI assistant...",
|
|
"settings.ai.savePrompt": "Save Prompt",
|
|
"settings.ai.resetPrompt": "Reset to Default",
|
|
"settings.ai.refreshModelCatalog": "Refresh Model Catalog",
|
|
"settings.ai.refreshing": "Refreshing…",
|
|
"settings.ai.modelInfoMaxOutput": "Max output",
|
|
"settings.ai.modelInfoContext": "Context",
|
|
"settings.ai.modelInfoInputPrice": "Input",
|
|
"settings.ai.modelInfoOutputPrice": "Output",
|
|
"settings.ai.modelInfoTokens": "tokens",
|
|
"settings.ai.modelInfoPerMTok": "/MTok",
|
|
"settings.ai.mistralApiKeyLabel": "Mistral API Key",
|
|
"settings.ai.mistralApiKeyDescription": "Your API key from Mistral AI. Enables Mistral models as an alternative to OpenCode.",
|
|
"settings.ai.mistralApiKeyConfigured": "Mistral API key configured",
|
|
"settings.ai.changeMistralApiKey": "Change Mistral API Key",
|
|
"settings.ai.titleModelLabel": "Title Generation Model",
|
|
"settings.ai.titleModelDescription": "Model used to generate conversation titles automatically.",
|
|
"settings.ai.imageAnalysisModelLabel": "Image Analysis Model",
|
|
"settings.ai.imageAnalysisModelDescription": "Model used for automatic image analysis (title, alt text, caption).",
|
|
"settings.ai.providerOpenCode": "OpenCode",
|
|
"settings.ai.providerMistral": "Mistral",
|
|
"settings.ai.providerOther": "Other",
|
|
"chat.providerKeyMissing": "The model '{{model}}' requires a {{provider}} API key. Configure it in Settings.",
|
|
"settings.toast.modelCatalogRefreshed": "Model catalog updated ({{count}} models)",
|
|
"settings.toast.modelCatalogUpToDate": "Model catalog already up to date",
|
|
"settings.toast.modelCatalogRefreshFailed": "Failed to refresh model catalog",
|
|
"settings.publishing.sshHostDescription": "The SSH server hostname or IP address.",
|
|
"settings.publishing.sshUsernameDescription": "Your SSH account username.",
|
|
"settings.publishing.sshRemotePathDescription": "The destination directory on the remote server where your blog will be published.",
|
|
"settings.publishing.sshModeLabel": "Transfer Mode",
|
|
"settings.publishing.sshModeDescription": "Select the file transfer method to use when publishing via SSH.",
|
|
"settings.publishing.sshMode.scp": "SCP",
|
|
"settings.publishing.sshMode.rsync": "rsync",
|
|
"settings.publishing.sshKeyAuthNotice": "SSH key authentication must be configured on your system before using this publishing method. Ensure your public key is added to the remote server's authorized_keys file.",
|
|
"settings.data.description": "Rebuild the local database index from source files. Useful if post or media files were edited externally.",
|
|
"settings.data.rebuildPostsLabel": "Rebuild Posts Database",
|
|
"settings.data.rebuildPostsDescription": "Re-scan all post markdown files and rebuild the database index.",
|
|
"settings.data.rebuildPostsAction": "Rebuild Posts",
|
|
"settings.data.rebuildMediaLabel": "Rebuild Media Database",
|
|
"settings.data.rebuildMediaDescription": "Re-scan all media files and sidecar metadata. Regenerates missing entries.",
|
|
"settings.data.rebuildMediaAction": "Rebuild Media",
|
|
"settings.data.rebuildScriptsLabel": "Rebuild Scripts Database",
|
|
"settings.data.rebuildScriptsDescription": "Re-scan all Python scripts and rebuild the scripts metadata index.",
|
|
"settings.data.rebuildScriptsAction": "Rebuild Scripts",
|
|
"settings.data.rebuildTemplatesLabel": "Rebuild Templates Database",
|
|
"settings.data.rebuildTemplatesDescription": "Re-scan all Liquid templates and rebuild the templates metadata index.",
|
|
"settings.data.rebuildTemplatesAction": "Rebuild Templates",
|
|
"settings.data.rebuildLinksLabel": "Rebuild Post Links",
|
|
"settings.data.rebuildLinksDescription": "Re-scan all posts and rebuild the internal link graph between posts.",
|
|
"settings.data.rebuildLinksAction": "Rebuild Links",
|
|
"settings.data.regenerateThumbnailsLabel": "Regenerate Thumbnails",
|
|
"settings.data.regenerateThumbnailsDescription": "Generate missing thumbnails for all images. Useful after importing media externally.",
|
|
"settings.data.regenerateThumbnailsAction": "Generate Thumbnails",
|
|
"settings.data.fileSystemDescription": "Access project data files and directories.",
|
|
"settings.data.openDataFolderLabel": "Open Data Folder",
|
|
"settings.data.openDataFolderDescription": "Open the project data folder containing posts, media, and database files.",
|
|
"settings.data.openFolderAction": "Open Folder",
|
|
"sidebar.chat.header": "AI ASSISTANT",
|
|
"sidebar.chat.newChat": "New Chat",
|
|
"sidebar.chat.apiKeyNeeded": "API key needed. Open a chat to configure.",
|
|
"sidebar.chat.noConversations": "No conversations yet",
|
|
"sidebar.chat.startNew": "Start a new chat",
|
|
"sidebar.chat.deleteConversation": "Delete conversation",
|
|
"sidebar.chat.createFailed": "Failed to create new chat",
|
|
"sidebar.chat.deleteFailed": "Failed to delete chat",
|
|
"sidebar.chat.yesterday": "Yesterday",
|
|
"sidebar.import.header": "IMPORTS",
|
|
"sidebar.import.newDefinition": "New Import Definition",
|
|
"sidebar.scripts.header": "SCRIPTS",
|
|
"sidebar.scripts.newScript": "New Script",
|
|
"sidebar.scripts.none": "No scripts yet",
|
|
"sidebar.scripts.createScript": "Create a script",
|
|
"sidebar.scripts.createFailed": "Failed to create script",
|
|
"sidebar.scripts.deleteScript": "Delete script",
|
|
"sidebar.scripts.deleteFailed": "Failed to delete script",
|
|
"sidebar.templates.header": "TEMPLATES",
|
|
"sidebar.templates.newTemplate": "New Template",
|
|
"sidebar.templates.none": "No templates yet",
|
|
"sidebar.templates.createTemplate": "Create a template",
|
|
"sidebar.templates.createFailed": "Failed to create template",
|
|
"sidebar.templates.deleteTemplate": "Delete template",
|
|
"sidebar.templates.deleteFailed": "Failed to delete template",
|
|
"sidebar.templates.deleteConfirmWithRefs": "This template is referenced by {postCount} post(s) and {tagCount} tag(s). Delete anyway? References will be cleared.",
|
|
"sidebar.import.none": "No import definitions yet",
|
|
"sidebar.import.createDefinition": "Create an import definition",
|
|
"sidebar.import.deleteDefinition": "Delete import definition",
|
|
"sidebar.import.createFailed": "Failed to create import definition",
|
|
"sidebar.import.deleteFailed": "Failed to delete import definition",
|
|
"editor.error.saveTitle": "Save Failed",
|
|
"editor.error.saveMessage": "Failed to save post",
|
|
"editor.error.publishTitle": "Publish Failed",
|
|
"editor.error.publishMessage": "Failed to publish post",
|
|
"editor.error.discardTitle": "Discard Failed",
|
|
"editor.error.deleteTitle": "Delete Failed",
|
|
"editor.error.operationMessage": "Operation failed",
|
|
"editor.error.deletePostMessage": "Failed to delete post",
|
|
"editor.error.fetchPostReferencesMessage": "Failed to fetch post references",
|
|
"editor.confirm.discardChanges": "Discard all changes since last publish? This cannot be undone.",
|
|
"editor.confirm.deleteDraft": "Delete this draft? This cannot be undone.",
|
|
"editor.toast.published": "Post published",
|
|
"editor.toast.reverted": "Reverted to last published version",
|
|
"editor.toast.draftDeleted": "Draft deleted",
|
|
"editor.toast.postDeleted": "Post deleted",
|
|
"editor.media.notFound": "Media not found",
|
|
"editor.media.error.analyzeImage": "Failed to analyze image",
|
|
"editor.media.error.updateTitle": "Update Failed",
|
|
"editor.media.error.updateMessage": "Failed to update media",
|
|
"editor.media.error.replaceTitle": "Replace Failed",
|
|
"editor.media.error.replaceMessage": "Failed to replace media file",
|
|
"editor.media.error.deleteMessage": "Failed to delete media",
|
|
"editor.media.error.fetchReferencesMessage": "Failed to fetch media references",
|
|
"editor.media.toast.aiApplied": "AI suggestions applied",
|
|
"editor.media.toast.linkedToPost": "Linked to post",
|
|
"editor.media.toast.linkFailed": "Failed to link to post",
|
|
"editor.media.toast.unlinkedFromPost": "Unlinked from post",
|
|
"editor.media.toast.unlinkFailed": "Failed to unlink from post",
|
|
"editor.media.toast.updated": "Media updated",
|
|
"editor.media.toast.fileReplaced": "File replaced (thumbnails regenerated)",
|
|
"editor.media.toast.deleted": "Media deleted",
|
|
"editor.media.quickActions.title": "Quick Actions",
|
|
"editor.media.quickActions.analyzing": "⏳ Analyzing...",
|
|
"editor.media.quickActions.button": "⚡ Quick Actions",
|
|
"editor.media.quickActions.aiTitle": "AI: Generate Title, Alt & Caption",
|
|
"editor.media.quickActions.aiDescription": "Analyzes the image to suggest metadata",
|
|
"editor.media.replaceFile": "Replace File",
|
|
"editor.media.field.fileName": "File Name",
|
|
"editor.media.field.type": "Type",
|
|
"editor.media.field.size": "Size",
|
|
"editor.media.field.dimensions": "Dimensions",
|
|
"editor.media.field.title": "Title",
|
|
"editor.media.field.altText": "Alt Text",
|
|
"editor.media.field.caption": "Caption",
|
|
"editor.media.field.tags": "Tags (comma-separated)",
|
|
"editor.media.field.author": "Author",
|
|
"editor.media.placeholder.title": "Title for lists and search results",
|
|
"editor.media.placeholder.altText": "Describe the image for accessibility",
|
|
"editor.media.placeholder.caption": "Image caption",
|
|
"editor.media.placeholder.tags": "tag1, tag2, tag3",
|
|
"editor.media.placeholder.author": "Author name",
|
|
"editor.media.linkedPosts": "Linked Posts",
|
|
"editor.media.linkToPostTitle": "Link to a post",
|
|
"editor.media.linkAction": "+ Link",
|
|
"editor.media.searchPosts": "Search posts...",
|
|
"editor.media.noMatchingPosts": "No matching posts",
|
|
"editor.media.noPostsToLink": "No posts available to link",
|
|
"editor.media.morePosts": "+{count} more posts",
|
|
"editor.media.notLinked": "Not linked to any posts",
|
|
"editor.media.openPost": "Open post",
|
|
"editor.media.unlinkFromPost": "Unlink from post",
|
|
"postSearch.placeholder": "Search posts by title or content...",
|
|
"postSearch.searching": "Searching...",
|
|
"postSearch.typeMore": "Type at least 2 characters to search",
|
|
"postSearch.noResults": "No posts found for \"{query}\"",
|
|
"postSearch.hint": "Use ↑↓ to navigate, Enter to select, Esc to close",
|
|
"statusBar.posts": "{count} posts",
|
|
"statusBar.media": "{count} media",
|
|
"statusBar.more": "+{count} more",
|
|
"statusBar.tokens": "Tokens: {input} in / {output} out ({cached} cached)",
|
|
"statusBar.theme": "Theme: {theme}",
|
|
"statusBar.ui": "UI",
|
|
"statusBar.uiLanguage": "UI language",
|
|
"windowTitleBar.toggleSidebar": "Toggle Sidebar",
|
|
"windowTitleBar.hideSidebar": "Hide Sidebar (Ctrl+B)",
|
|
"windowTitleBar.showSidebar": "Show Sidebar (Ctrl+B)",
|
|
"windowTitleBar.togglePanel": "Toggle Panel",
|
|
"windowTitleBar.hidePanel": "Hide Panel (Ctrl+J)",
|
|
"windowTitleBar.showPanel": "Show Panel (Ctrl+J)",
|
|
"windowTitleBar.toggleAssistantSidebar": "Toggle Assistant Sidebar",
|
|
"windowTitleBar.hideAssistantSidebar": "Hide Assistant Sidebar (Ctrl+\\)",
|
|
"windowTitleBar.showAssistantSidebar": "Show Assistant Sidebar (Ctrl+\\)",
|
|
"assistantSidebar.title": "AI Assistant",
|
|
"assistantSidebar.description": "Start with a focused prompt and include your current editor context.",
|
|
"assistantSidebar.context.label": "Current context",
|
|
"assistantSidebar.context.none": "No active editor context",
|
|
"assistantSidebar.prompt.placeholder": "Ask the assistant to analyze or query your current work…",
|
|
"assistantSidebar.button.start": "Start with context",
|
|
"assistantSidebar.button.starting": "Starting…",
|
|
"assistantSidebar.conversationTitle": "Assistant Session",
|
|
"assistantSidebar.error.startFailed": "Failed to start assistant session",
|
|
"assistantSidebar.error.actionFailed": "Assistant action could not be executed",
|
|
"tagInput.alreadyAdded": "Tag already added",
|
|
"tagInput.remove": "Remove {tag}",
|
|
"tagInput.createdTag": "Tag \"{name}\" created",
|
|
"tagInput.createdCategory": "Category \"{name}\" created",
|
|
"tagInput.createTag": "Create tag \"{name}\"",
|
|
"tagInput.createCategory": "Create category \"{name}\"",
|
|
"importAnalysis.loadingDefinition": "Loading import definition...",
|
|
"importAnalysis.namePlaceholder": "Import name...",
|
|
"importAnalysis.headerDescription": "Select a WordPress export file (WXR) and an uploads folder to analyze what would be imported.",
|
|
"importAnalysis.uploadsFolder": "Uploads Folder",
|
|
"importAnalysis.noFolderSelected": "No folder selected",
|
|
"importAnalysis.wxrFile": "WXR File",
|
|
"importAnalysis.selectFileToAnalyze": "Select a file to analyze",
|
|
"importAnalysis.analyzing": "Analyzing...",
|
|
"importAnalysis.selectAndAnalyze": "Select & Analyze",
|
|
"importAnalysis.analyzingWxr": "Analyzing WXR file...",
|
|
"importAnalysis.emptyState": "Select a WordPress export file to begin analysis.",
|
|
"importAnalysis.importing": "Importing...",
|
|
"importAnalysis.importComplete": "Import completed successfully!",
|
|
"importAnalysis.importFailed": "Import failed: {error}",
|
|
"importAnalysis.untitledImport": "Untitled Import",
|
|
"importAnalysis.executionStarting": "Starting...",
|
|
"importAnalysis.unknownError": "Unknown error",
|
|
"importAnalysis.readyToImport": "Ready to import:",
|
|
"importAnalysis.tagsCategories": "tags/categories",
|
|
"importAnalysis.posts": "posts",
|
|
"importAnalysis.media": "media",
|
|
"importAnalysis.pages": "pages",
|
|
"importAnalysis.nothingToImport": "Nothing to Import",
|
|
"importAnalysis.importItems": "Import {count} Items",
|
|
"importAnalysis.postSlugConflicts": "Post Slug Conflicts",
|
|
"importAnalysis.pageSlugConflicts": "Page Slug Conflicts",
|
|
"importAnalysis.postsWithCount": "Posts ({count})",
|
|
"importAnalysis.otherWithCount": "Other ({count})",
|
|
"importAnalysis.pagesWithCount": "Pages ({count})",
|
|
"importAnalysis.mediaWithCount": "Media ({count})",
|
|
"importAnalysis.site": "Site",
|
|
"importAnalysis.untitled": "Untitled",
|
|
"importAnalysis.url": "URL",
|
|
"importAnalysis.language": "Language",
|
|
"importAnalysis.file": "File",
|
|
"importAnalysis.notAvailable": "N/A",
|
|
"importAnalysis.new": "new",
|
|
"importAnalysis.update": "update",
|
|
"importAnalysis.conflict": "conflict",
|
|
"importAnalysis.duplicate": "duplicate",
|
|
"importAnalysis.missing": "missing",
|
|
"importAnalysis.categories": "Categories",
|
|
"importAnalysis.existing": "existing",
|
|
"importAnalysis.mapped": "mapped",
|
|
"importAnalysis.tags": "Tags",
|
|
"importAnalysis.dateDistribution": "Date Distribution",
|
|
"importAnalysis.postsPages": "Posts/Pages",
|
|
"importAnalysis.total": "total",
|
|
"importAnalysis.wordpressId": "WordPress ID",
|
|
"importAnalysis.type": "Type",
|
|
"importAnalysis.author": "Author",
|
|
"importAnalysis.unknown": "Unknown",
|
|
"importAnalysis.published": "Published",
|
|
"importAnalysis.excerpt": "Excerpt",
|
|
"importAnalysis.content": "Content",
|
|
"importAnalysis.loading": "Loading...",
|
|
"importAnalysis.mimeType": "MIME Type",
|
|
"importAnalysis.uploaded": "Uploaded",
|
|
"importAnalysis.parentPostId": "Parent Post ID",
|
|
"importAnalysis.description": "Description",
|
|
"importAnalysis.slug": "Slug",
|
|
"importAnalysis.newEntryWxr": "New Entry (WXR)",
|
|
"importAnalysis.existingEntry": "Existing Entry",
|
|
"importAnalysis.resolution": "Resolution",
|
|
"importAnalysis.ignore": "Ignore",
|
|
"importAnalysis.overwrite": "Overwrite",
|
|
"importAnalysis.importNewSlug": "Import (new slug)",
|
|
"importAnalysis.status": "Status",
|
|
"importAnalysis.title": "Title",
|
|
"importAnalysis.wpStatus": "WP Status",
|
|
"importAnalysis.existingMatch": "Existing Match",
|
|
"importAnalysis.none": "--",
|
|
"importAnalysis.filename": "Filename",
|
|
"importAnalysis.path": "Path",
|
|
"importAnalysis.taxonomyTitle": "Categories & Tags",
|
|
"importAnalysis.mappedCount": "{count} mapped",
|
|
"importAnalysis.analyzeWith": "Analyze with...",
|
|
"importAnalysis.aiMappingHint": "AI will suggest mappings from new to existing items to avoid duplicates",
|
|
"importAnalysis.mapToPlaceholder": "Map to...",
|
|
"importAnalysis.mappingTooltip": "Click to {action} mapping",
|
|
"importAnalysis.mappingActionEdit": "edit",
|
|
"importAnalysis.mappingActionAdd": "add",
|
|
"importAnalysis.clearMapping": "Clear mapping",
|
|
"importAnalysis.macrosWithCount": "Macros ({count})",
|
|
"importAnalysis.unmappedCount": "{count} unmapped",
|
|
"importAnalysis.macroStatusMapped": "Mapped",
|
|
"importAnalysis.macroStatusUnknown": "Unknown",
|
|
"importAnalysis.macroUses": "{count} uses",
|
|
"importAnalysis.usedIn": "Used in: {items}{more}",
|
|
"importAnalysis.moreSuffix": ", +{count} more",
|
|
"importAnalysis.noParameters": "(no parameters)",
|
|
|
|
"sidebar.nav.mcp": "MCP Server",
|
|
|
|
"settings.mcp.title": "MCP Server",
|
|
"settings.mcp.description": "Configure the Model Context Protocol server that allows AI coding agents to interact with your blog.",
|
|
"settings.mcp.statusLabel": "Server Status",
|
|
"settings.mcp.statusDescription": "Current status of the MCP server.",
|
|
"settings.mcp.portRunning": "Running on port {port}",
|
|
"settings.mcp.portStopped": "Not running",
|
|
"settings.mcp.agentsTitle": "Agent Configuration",
|
|
"settings.mcp.agentsDescription": "Add the bDS MCP server to your coding agent's configuration. Existing settings are preserved.",
|
|
"settings.mcp.addToAgent": "Add to {agent}",
|
|
"settings.mcp.removeFromAgent": "Remove from {agent}",
|
|
"settings.mcp.alreadyConfigured": "Configured",
|
|
"settings.toast.mcpConfigSuccess": "bDS MCP server added to {agent} configuration",
|
|
"settings.toast.mcpConfigRemoveSuccess": "bDS MCP server removed from {agent} configuration",
|
|
"settings.toast.mcpConfigFailed": "Failed to configure {agent}: {error}",
|
|
"settings.toast.mcpConfigRemoveFailed": "Failed to remove from {agent}: {error}",
|
|
"settings.toast.mcpConfigPath": "Config written to {path}"
|
|
}
|