2025-12-20 20:18:54 +05:30
{
"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" ,
2025-12-22 21:54:25 +08:00
"github" : "GitHub" ,
2025-12-20 20:18:54 +05:30
"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" ,
2025-12-22 21:54:25 +08:00
"language" : "Language" ,
"languageDescription" : "Choose your interface language." ,
2025-12-20 20:18:54 +05:30
"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." ,
2025-12-22 19:30:20 +05:30
"tpmMessageDetailed" : "Rate limit reached ({limit} tokens/min). Please wait {seconds} seconds before sending another request." ,
2025-12-20 20:18:54 +05:30
"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" : "<strong>Tip:</strong> 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."
feat: multi-provider model configuration with UI/UX improvements (#355)
* feat: add multi-provider model configuration
- Add model config dialog for managing multiple AI providers
- Support for OpenAI, Anthropic, Google, Azure, Bedrock, OpenRouter, DeepSeek, SiliconFlow, Ollama, and AI Gateway
- Add model selector dropdown in chat panel header
- Add API key validation endpoint
- Add custom model ID input with keyboard navigation
- Fix hover highlight in Command component
- Add suggested models for each provider including latest Claude 4.5 series
- Store configuration locally in browser
* feat: improve model config UI and move selector to chat input
- Move model selector from header to chat input (left of send button)
- Add per-model validation status (queued, running, valid, invalid)
- Filter model selector to only show verified models
- Add editable model IDs in config dialog
- Add custom model input field alongside suggested models dropdown
- Fix hover states on provider buttons and select triggers
- Update OpenAI suggested models with GPT-5 series
- Add alert-dialog component for delete confirmation
* refactor: revert shadcn component changes, apply hover fix at usage site
* feat: add AWS credentials support for Bedrock provider
- Add AWS Access Key ID, Secret Access Key, Region fields for Bedrock
- Show different credential fields based on provider type
- Update validation API to handle Bedrock with AWS credentials
- Add region selector with common AWS regions
* fix: reset Test button after validation completes
* fix: reset validation button to Test after success
* fix: complete bedrock support and UI/UX improvements
- Add bedrock to ALLOWED_CLIENT_PROVIDERS for client credentials
- Pass AWS credentials through full chain (headers → API → provider)
- Replace non-existent GPT-5 models with real ones (o1, o3-mini)
- Add accessibility: aria-labels, focus-visible rings, inline errors
- Add more AWS regions (Ohio, London, Paris, Mumbai, Seoul, São Paulo)
- Fix setTimeout cleanup with useRef on component unmount
- Fix TypeScript type consistency in getSelectedAIConfig fallback
* chore: remove unused code
- Remove unused setAccessCodeRequired state in chat-panel.tsx
- Remove unused getSelectedModel export in model-config.ts
* fix: UI/UX improvements for model configuration dialog
- Add gradient header styling with icon badge
- Change Configuration section icon from Key to Settings2
- Add duplicate model detection with warning banner and inline removal
- Filter out already-added models from suggestions dropdown
- Add type-to-confirm for deleting providers with 3+ models
- Enhance delete confirmation dialog with warning icon
- Improve model selector discoverability (show model name + chevron)
- Add truncation for long model names with title tooltip
- Remove AI provider settings from Settings dialog (now in Model Config)
- Extract ValidationButton into reusable component
* fix: prevent duplicate model IDs within same provider
- Block adding model if ID already exists in provider
- Block editing model ID to match existing model in provider
* fix: improve duplicate model ID notifications
- Add toast notification when trying to add duplicate model
- Allow free typing when editing model ID, validate on blur
- Show warning toast instead of blocking input
* fix: improve duplicate model validation UX in config dialog
- Add inline error display for duplicate model IDs
- Show red border on input when error exists
- Validate on blur with shake animation for edit errors
- Prevent saving empty model names
- Clear errors when user starts typing
- Simplify error styling (small red text, no heavy chips)
2025-12-22 22:36:36 +09:00
} ,
"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" ,
2025-12-23 11:42:27 +09:00
"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"
2025-12-20 20:18:54 +05:30
}
}