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" ,
"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" ,
"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." ,
"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" ,
"addModelFirst" : "Add at least one model to validate"
2025-12-20 20:18:54 +05:30
}
}