{ "common": { "save": "Save", "cancel": "Cancel", "close": "Close", "confirm": "Confirm", "clear": "Clear", "edit": "Edit", "delete": "Delete", "loading": "Loading..", "new": "NEW" }, "nav": { "about": "About", "editor": "Editor", "newChat": "Start fresh chat", "github": "GitHub", "settings": "Settings", "hidePanel": "Hide chat panel (Ctrl+B)", "showPanel": "Show chat panel (Ctrl+B)", "aiChat": "AI Chat" }, "providers": { "useServerDefault": "Use Server Default", "openai": "OpenAI", "anthropic": "Anthropic", "google": "Google", "azure": "Azure OpenAI", "openrouter": "OpenRouter", "deepseek": "DeepSeek", "siliconflow": "SiliconFlow" }, "chat": { "placeholder": "Describe your diagram or upload a file...", "send": "Send", "sending": "Sending...", "sendMessage": "Send message", "clearConversation": "Clear conversation", "diagramHistory": "Diagram history", "saveDiagram": "Save diagram", "uploadFile": "Upload file (image, PDF, text)", "minimalStyle": "Minimal", "styledMode": "Styled", "minimalTooltip": "Use minimal for faster generation (no colors)", "regenerate": "Regenerate response", "copyResponse": "Copy response", "copied": "Copied!", "failedToCopy": "Failed to copy", "goodResponse": "Good response", "badResponse": "Bad response", "clickToEdit": "Click to edit", "editMessage": "Edit message", "saveAndSubmit": "Save & Submit" }, "examples": { "title": "Create diagrams with AI", "subtitle": "Describe what you want to create or upload an image to replicate", "quickExamples": "Quick Examples", "paperToDiagram": "Paper to Diagram", "paperDescription": "Upload .pdf, .txt, .md, .json, .csv, .py, .js, .ts and more", "animatedDiagram": "Animated Diagram", "animatedDescription": "Draw a transformer architecture with animated connectors", "awsArchitecture": "AWS Architecture", "awsDescription": "Create a cloud architecture diagram with AWS icons", "replicateFlowchart": "Replicate Flowchart", "replicateDescription": "Upload and replicate an existing flowchart", "creativeDrawing": "Creative Drawing", "creativeDescription": "Draw something fun and creative", "cachedNote": "Examples are cached for instant response", "mcpServer": "MCP Server", "mcpDescription": "Use in Claude Desktop, VS Code & Cursor", "preview": "PREVIEW" }, "settings": { "title": "Settings", "description": "Configure your application settings.", "accessCode": "Access Code", "accessCodePlaceholder": "Enter access code", "accessCodeDescription": "Required to use this application.", "aiProvider": "AI Provider Settings", "aiProviderDescription": "Use your own API key to bypass usage limits. Your key is stored locally in your browser and is never stored on the server.", "provider": "Provider", "modelId": "Model ID", "apiKey": "API Key", "apiKeyPlaceholder": "Your API key", "baseUrl": "Base URL (optional)", "customEndpoint": "Custom endpoint URL", "overrides": "Overrides", "clearSettings": "Clear Settings", "useServerDefault": "Use Server Default", "language": "Language", "languageDescription": "Choose your interface language.", "theme": "Theme", "themeDescription": "Dark/Light mode for interface and DrawIO canvas.", "drawioStyle": "DrawIO Style", "drawioStyleDescription": "Canvas style:", "switchTo": "Switch to", "minimal": "Minimal", "sketch": "Sketch", "closeProtection": "Close Protection", "closeProtectionDescription": "Show confirmation when leaving the page." }, "save": { "title": "Save Diagram", "description": "Choose a format and filename to save your diagram.", "format": "Format", "filename": "Filename", "filenamePlaceholder": "Enter filename", "formats": { "drawio": "Draw.io XML", "png": "PNG Image", "svg": "SVG Image" } }, "history": { "title": "Diagram History", "description": "Here saved each diagram before AI modification.\nClick on a diagram to restore it", "noHistory": "No history available yet. Send messages to create diagram history.", "version": "Version", "restoreTo": "Restore to Version {version}?" }, "dialogs": { "clearTitle": "Clear Everything?", "clearDescription": "This will clear the current conversation and reset the diagram. This action cannot be undone.", "clearEverything": "Clear Everything", "clearSuccess": "Started a fresh chat" }, "errors": { "maxFiles": "Too many files. Maximum {max} allowed.", "onlyMoreAllowed": "Only {slots} more file(s) allowed", "fileExceeds": "\"{name}\" is {size} (exceeds {max}MB)", "unsupportedType": "\"{name}\" is not a supported file type", "filesRejected": "{count} files rejected:", "andMore": "...and {count} more", "invalidAccessCode": "Invalid or missing access code. Please configure it in Settings.", "networkError": "Network error. Please check your connection.", "retryLimit": "Auto-retry limit reached ({max}). Please try again manually.", "validationFailed": "Diagram validation failed. Please try regenerating.", "malformedXml": "AI generated invalid diagram XML. Please try regenerating.", "failedToProcess": "Failed to process diagram. Please try regenerating.", "sessionCorrupted": "Session data was corrupted. Starting fresh.", "failedToSave": "Failed to save messages to localStorage", "failedToRestore": "Failed to restore from localStorage", "failedToPersist": "Failed to persist state before unload", "failedToExport": "Error fetching chart data", "failedToLoadExample": "Error loading example image" }, "quota": { "dailyLimit": "Daily Quota Reached", "tokenLimit": "Daily Token Limit Reached", "tpmLimit": "Rate Limit", "tpmMessage": "Too many requests. Please wait a moment.", "tpmMessageDetailed": "Rate limit reached ({limit} tokens/min). Please wait {seconds} seconds before sending another request.", "messageApi": "Oops — you've reached the daily API limit for this demo! As an indie developer covering all the API costs myself, I have to set these limits to keep things sustainable.", "messageToken": "Oops — you've reached the daily token limit for this demo! As an indie developer covering all the API costs myself, I have to set these limits to keep things sustainable.", "tip": "Tip: You can use your own API key (click the Settings icon) or self-host the project to bypass these limits.", "reset": "Your limit resets tomorrow. Thanks for understanding!", "selfHost": "Self-host", "sponsor": "Sponsor", "learnMore": "Learn more →", "usedOf": "{used}/{limit}" }, "tools": { "generateDiagram": "Generate Diagram", "editDiagram": "Edit Diagram", "appendDiagram": "Continue Diagram", "complete": "Complete", "error": "Error", "truncated": "Truncated" }, "file": { "reading": "Reading...", "chars": "chars", "removeFile": "Remove file" }, "reasoning": { "thinking": "Thinking...", "thoughtFor": "Thought for {duration} seconds", "thoughtBrief": "Thought for a few seconds" }, "about": { "modelChange": "Model Change & Usage Limits", "walletCrying": "(Or: Why My Wallet is Crying)", "seekingSponsorship": "Call for Sponsorship", "contactMe": "Contact Me", "usageNotice": "Due to high usage, I have changed the model from Claude to minimax-m2 and added some usage limits. See About page for details." }, "modelConfig": { "title": "AI Model Configuration", "description": "Configure multiple AI providers and models", "configure": "Configure", "addProvider": "Add Provider", "addModel": "Add Model", "modelId": "Model ID", "modelLabel": "Display Label", "streaming": "Enable Streaming", "deleteProvider": "Delete Provider", "deleteModel": "Delete Model", "noModels": "No models configured. Add a model to get started.", "selectProvider": "Select a provider or add a new one", "configureMultiple": "Configure multiple AI providers and switch between them easily", "apiKeyStored": "API keys are stored locally in your browser", "test": "Test", "validationError": "Validation failed", "addModelFirst": "Add at least one model to validate", "providers": "Providers", "addProviderHint": "Add a provider to get started", "verified": "Verified", "configuration": "Configuration", "displayName": "Display Name", "awsAccessKeyId": "AWS Access Key ID", "awsSecretAccessKey": "AWS Secret Access Key", "awsRegion": "AWS Region", "selectRegion": "Select region", "apiKey": "API Key", "enterApiKey": "Enter your API key", "enterSecretKey": "Enter your secret access key", "baseUrl": "Base URL", "optional": "(optional)", "customEndpoint": "Custom endpoint URL", "models": "Models", "customModelId": "Custom model ID...", "allAdded": "All added", "suggested": "Suggested", "noModelsConfigured": "No models configured", "modelIdEmpty": "Model ID cannot be empty", "modelIdExists": "This model ID already exists", "configureProviders": "Configure AI Providers", "selectProviderHint": "Select a provider from the list or add a new one to configure API keys and models", "deleteConfirmDesc": "Are you sure you want to delete {name}? This will remove all configured models and cannot be undone.", "typeToConfirm": "Type \"{name}\" to confirm", "typeProviderName": "Type provider name...", "modelsConfiguredCount": "{count} model(s) configured", "validationFailedCount": "{count} model(s) failed validation", "cancel": "Cancel", "delete": "Delete", "clickToChange": "(click to change)", "usingServerDefault": "Using server default model", "selectModel": "Select Model", "searchModels": "Search models...", "noVerifiedModels": "No verified models. Test your models first.", "noModelsFound": "No models found.", "default": "Default", "serverDefault": "Server Default", "configureModels": "Configure Models...", "onlyVerifiedShown": "Only verified models are shown" } }