feat: i18n support with first translations
This commit is contained in:
320
src/renderer/i18n/locales/en.json
Normal file
320
src/renderer/i18n/locales/en.json
Normal file
@@ -0,0 +1,320 @@
|
||||
{
|
||||
"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.tags": "Tags",
|
||||
"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.databaseRebuildFailed": "Database rebuild failed",
|
||||
"app.textReindexFailed": "Text reindex failed",
|
||||
"app.sitemapGenerationFailed": "Sitemap generation failed",
|
||||
"app.previewOpenFailed": "Failed to open selected post preview",
|
||||
"app.metadataDiff": "Metadata Diff",
|
||||
"app.importComplete": "Import complete: {posts} posts, {media} media files",
|
||||
"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.publishing.ftpTitle": "FTP Publishing",
|
||||
"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.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.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": "OpenCode Zen API Key Required",
|
||||
"chat.apiKeyRequiredDescription": "Enter your OpenCode API key to enable AI chat.",
|
||||
"chat.apiKeyPlaceholder": "Enter your API key...",
|
||||
"chat.apiKeySave": "Save Key",
|
||||
"chat.apiKeyValidating": "Validating...",
|
||||
"chat.apiKeyInvalid": "Invalid API key. Please check and try again.",
|
||||
"chat.apiKeyValidationFailed": "Failed to validate API key.",
|
||||
"chat.newChat": "New Chat",
|
||||
"chat.welcomeTitle": "Welcome to the AI Assistant",
|
||||
"chat.welcomeDescription": "I can help you manage your posts and media. Try asking me to:",
|
||||
"chat.welcomeTipSearch": "Search for posts about a specific topic",
|
||||
"chat.welcomeTipDetails": "Get details about a specific post",
|
||||
"chat.welcomeTipTags": "List all tags or categories in your blog",
|
||||
"chat.welcomeTipMetadata": "Update metadata for posts or media",
|
||||
"chat.welcomeTipImages": "List all images in your media library",
|
||||
"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",
|
||||
"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.",
|
||||
"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.ftp": "FTP",
|
||||
"credentials.tab.ssh": "SSH",
|
||||
"credentials.ftp.title": "FTP Publishing",
|
||||
"credentials.ftp.description": "Configure FTP for publishing your blog to a web server.",
|
||||
"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.password": "Password",
|
||||
"credentials.field.sshKeyPath": "SSH Key Path",
|
||||
"credentials.action.testConnection": "Test Connection",
|
||||
"credentials.ftp.placeholder.host": "ftp.example.com",
|
||||
"credentials.ftp.placeholder.username": "ftp-user",
|
||||
"credentials.ftp.placeholder.password": "Password",
|
||||
"credentials.ssh.placeholder.host": "server.example.com",
|
||||
"credentials.ssh.placeholder.username": "ssh-user",
|
||||
"credentials.ssh.placeholder.keyPath": "~/.ssh/id_rsa",
|
||||
"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.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.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.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."
|
||||
}
|
||||
Reference in New Issue
Block a user