mirror of
https://github.com/DayuanJiang/next-ai-draw-io.git
synced 2026-10-12 04:29:51 +08:00
The shell's VersionsSource (shell/node-versions-source.ts) reads GET /api/history through the sync and shows one version per distinct content (a restore's copy folds into the entry it copies; the blank page is none), numbered as they first appeared, with what changed since the one before. The entry the server says is on the canvas marks the version; undo and redo of the newest version restore the one before it, or it again, through POST /api/restore, so hand edits stay as versions of their own. The cards sit in a panel beside the canvas (toggle in the header); the strip and Compare come from the shared canvas components. The sync tells listeners once per server version, and when History changed without one, so the list is read again only then.
719 lines
34 KiB
JSON
719 lines
34 KiB
JSON
{
|
|
"common": {
|
|
"save": "Save",
|
|
"cancel": "Cancel",
|
|
"close": "Close",
|
|
"clear": "Clear",
|
|
"edit": "Edit",
|
|
"delete": "Delete",
|
|
"loading": "Loading.."
|
|
},
|
|
"nav": {
|
|
"editor": "Editor",
|
|
"newChat": "New diagram",
|
|
"github": "GitHub",
|
|
"settings": "Settings",
|
|
"hidePanel": "Hide chat panel",
|
|
"showPanel": "Show chat panel",
|
|
"aiChat": "AI chat"
|
|
},
|
|
"providers": {
|
|
"useServerDefault": "Use Server Default",
|
|
"openai": "OpenAI",
|
|
"anthropic": "Anthropic",
|
|
"google": "Google",
|
|
"azure": "Azure OpenAI",
|
|
"openrouter": "OpenRouter",
|
|
"deepseek": "DeepSeek",
|
|
"siliconflow": "SiliconFlow",
|
|
"modelscope": "ModelScope",
|
|
"minimax": "MiniMax",
|
|
"glm": "GLM",
|
|
"qwen": "Qwen",
|
|
"kimi": "Kimi",
|
|
"qiniu": "Qiniu",
|
|
"mimo": "MiMo (Xiaomi)"
|
|
},
|
|
"chat": {
|
|
"placeholder": "Describe your diagram or upload a file...",
|
|
"inputLabel": "Chat input",
|
|
"send": "Send",
|
|
"stopGeneration": "Stop generation",
|
|
"sendMessage": "Send message",
|
|
"clearConversation": "Clear conversation",
|
|
"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!",
|
|
"failedToCopyDetail": "Failed to copy message. Please copy manually or check clipboard permissions.",
|
|
"goodResponse": "Good response",
|
|
"badResponse": "Bad response",
|
|
"clickToEdit": "Click to edit",
|
|
"editMessage": "Edit message",
|
|
"saveAndSubmit": "Save & submit",
|
|
"ExtractURL": "Extract from URL",
|
|
"attach": "Add",
|
|
"placeholderFollowUp": "Ask for a change, or select shapes to edit them",
|
|
"emptyThread": "Draw on the canvas, or describe what you want below.",
|
|
"attachedImage": "Attached image",
|
|
"retry": "Retry"
|
|
},
|
|
"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 a flowchart",
|
|
"replicateDescription": "Upload and replicate an existing flowchart",
|
|
"creativeDrawing": "Creative drawing",
|
|
"creativeDescription": "Draw something fun and creative",
|
|
"cachedNote": "Examples use saved answers: they appear instantly and don't call the AI.",
|
|
"mcpServer": "MCP Server",
|
|
"mcpDescription": "Use in Claude Desktop, VS Code & Cursor"
|
|
},
|
|
"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": "Light or dark interface. The canvas follows the same theme.",
|
|
"diagramStyle": "Diagram style",
|
|
"diagramStyleDescription": "How the AI draws new diagrams: Styled uses colors and icons, Minimal keeps shapes plain.",
|
|
"sendShortcut": "Send shortcut",
|
|
"sendShortcutDescription": "Choose how to send messages.",
|
|
"enterToSend": "Enter to send",
|
|
"ctrlEnterToSend": "Cmd/Ctrl+Enter to send",
|
|
"diagramActions": "Diagram Actions",
|
|
"diagramActionsDescription": "Manage diagram history and exports",
|
|
"history": "History",
|
|
"download": "Download",
|
|
"proxy": "Proxy settings",
|
|
"proxyDescription": "Configure HTTP/HTTPS proxy for API requests (Desktop only)",
|
|
"httpProxy": "HTTP proxy",
|
|
"httpsProxy": "HTTPS proxy",
|
|
"applyProxy": "Apply",
|
|
"proxyApplied": "Proxy settings applied",
|
|
"diagramValidation": "Check diagrams with a screenshot (experimental)",
|
|
"diagramValidationDescription": "After each drawing, a model that can read images looks at a screenshot and asks for fixes. Needs a model that can read images.",
|
|
"customSystemMessage": "Custom instructions",
|
|
"customSystemMessageDescription": "Add custom instructions appended to the AI's system prompt.",
|
|
"customSystemMessagePlaceholder": "e.g., Always use blue color scheme for diagrams...",
|
|
"maxOutputTokens": "Output token limit",
|
|
"maxOutputTokensDescription": "Budget for one reply, shared by thinking and the diagram XML. Raise it if the AI keeps thinking and no diagram appears. Leave empty for the default.",
|
|
"tabModels": "Models",
|
|
"tabAbout": "About",
|
|
"themeLight": "Light",
|
|
"themeDarkMode": "Dark",
|
|
"themeSystem": "System",
|
|
"accessCodeSaved": "Access code saved",
|
|
"proxyInvalid": "Proxy addresses must start with http:// or https://",
|
|
"proxyFailed": "Couldn't apply the proxy settings",
|
|
"appVersion": "Version",
|
|
"projectWebsite": "Project website",
|
|
"tabGeneral": "General",
|
|
"tabDrawing": "Drawing",
|
|
"sectionInterface": "Interface",
|
|
"sectionAccess": "Access"
|
|
},
|
|
"save": {
|
|
"title": "Export diagram",
|
|
"description": "Pick a format and a file name.",
|
|
"format": "Format",
|
|
"filename": "Filename",
|
|
"filenamePlaceholder": "Enter filename",
|
|
"formats": {
|
|
"drawio": "draw.io file",
|
|
"png": "PNG image",
|
|
"svg": "SVG image",
|
|
"xmlsvg": "Editable SVG"
|
|
},
|
|
"savedSuccessfully": "Diagram exported",
|
|
"hints": {
|
|
"drawio": "Keeps everything editable",
|
|
"png": "A picture for slides and documents",
|
|
"svg": "A picture that scales without blur",
|
|
"xmlsvg": "A picture that still opens in draw.io"
|
|
}
|
|
},
|
|
"dialogs": {
|
|
"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.",
|
|
"continuationRetryLimit": "Continuation retry limit reached ({max}). The diagram may be too complex.",
|
|
"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",
|
|
"failedToRecordFeedback": "Failed to record your feedback. Please try again.",
|
|
"storageUpdateFailed": "Chat cleared but browser storage could not be updated",
|
|
"sessionSaveFailed": "Could not save this chat. Browser storage may be full: delete old chats from history and try again.",
|
|
"sessionSaveFailedLeave": "Could not save this chat. Browser storage may be full. You can go on without saving it, then delete old chats from the list in the new chat.",
|
|
"continueWithoutSaving": "Continue without saving",
|
|
"notADiagramFile": "{name} isn't a draw.io diagram.",
|
|
"fileTooLong": "{name}: Content exceeds {limit}k character limit ({size}k chars)",
|
|
"fileReadFailed": "Failed to read file: {name}",
|
|
"answerEndedEarly": "The answer ended before the diagram was finished.",
|
|
"attachmentsStillReading": "Attachments are still being read. Send again when they are ready.",
|
|
"sendInProgress": "The last message is still being sent. Try again in a moment.",
|
|
"answerInProgress": "An answer is still coming. Send again when it is done.",
|
|
"cannotResend": "This message can't be sent again: the diagram from when it was sent wasn't saved.",
|
|
"llm": {
|
|
"invalid_api_key": "The provider rejected the API key. Check it in model settings.",
|
|
"forbidden": "The provider refused the request. The key may not have access to this model or region.",
|
|
"server_key_forbidden": "Today's free quota is used up. It resets tomorrow. You can also add your own API key in model settings to keep going.",
|
|
"model_not_found": "The provider does not know this model. Check the model ID in model settings.",
|
|
"insufficient_quota": "The provider account has no credit or quota left.",
|
|
"rate_limited": "The provider is limiting requests. Wait a moment and try again.",
|
|
"context_too_long": "The conversation is too long for this model. Start a new chat or pick a model with a larger context.",
|
|
"images_unsupported": "This model doesn't support image input.",
|
|
"tools_unsupported": "This model doesn't support tool calls, which drawing needs. Pick another model.",
|
|
"output_truncated": "The output was cut off before the diagram was complete. Try a simpler request or raise the output limit in settings.",
|
|
"provider_unavailable": "The provider is having problems. Try again later.",
|
|
"cannot_connect": "Could not reach the provider. Check the base URL and your network.",
|
|
"timeout": "The provider did not answer in time.",
|
|
"openModelSettings": "Open model settings"
|
|
}
|
|
},
|
|
"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": "Looks like you've reached today's demo limit. We're glad you're enjoying it; the limit keeps the demo fair for everyone.",
|
|
"messageApiSelfHosted": null,
|
|
"messageToken": "Looks like you've reached today's token limit. We're glad you're enjoying it; the limit keeps the demo fair for everyone.",
|
|
"messageTokenSelfHosted": null,
|
|
"tip": "<strong>Tip:</strong> You can use your own API key (click the Settings icon) or self-host the project to bypass these limits.",
|
|
"tipSelfHosted": "<strong>Tip:</strong> You can configure your own API key in the settings to continue using the service.",
|
|
"reset": "Your limit resets tomorrow. Thanks for understanding.",
|
|
"configModel": "Use Your API Key",
|
|
"selfHost": "Self-host",
|
|
"sponsor": "Sponsor",
|
|
"learnMore": "Learn more →",
|
|
"usedOf": "{used}/{limit}"
|
|
},
|
|
"tools": {
|
|
"truncated": "Truncated"
|
|
},
|
|
"file": {
|
|
"reading": "Reading...",
|
|
"chars": "chars",
|
|
"removeFile": "Remove file"
|
|
},
|
|
"url": {
|
|
"title": "Extract Content from URL",
|
|
"description": "Paste a URL to extract and analyze its content",
|
|
"Extracting": "Extracting...",
|
|
"extract": "Extract",
|
|
"Cancel": "Cancel",
|
|
"enterUrl": "Please enter a URL",
|
|
"invalidFormat": "Invalid URL format",
|
|
"failed": "Couldn't read that page"
|
|
},
|
|
"reasoning": {
|
|
"thinking": "Thinking...",
|
|
"thoughtFor": "Thought for {duration} seconds",
|
|
"thoughtForOne": "Thought for 1 second",
|
|
"thoughtBrief": "Thought for a few seconds"
|
|
},
|
|
"dev": {
|
|
"title": "Dev: XML Streaming Simulator",
|
|
"preset": "Preset:",
|
|
"selectPreset": "Select a preset...",
|
|
"clear": "Clear",
|
|
"placeholder": "Paste mxCell XML here or select a preset...",
|
|
"interval": "Interval:",
|
|
"chars": "Chars:",
|
|
"streaming": "Streaming...",
|
|
"simulate": "Simulate",
|
|
"stop": "Stop",
|
|
"testQuotaToast": "Test Quota Toast",
|
|
"simulatingMessage": "[Dev] Simulating XML streaming",
|
|
"successMessage": "Successfully displayed the diagram."
|
|
},
|
|
"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."
|
|
},
|
|
"sessionHistory": {
|
|
"tooltip": "Chat History",
|
|
"newChat": "New Chat",
|
|
"empty": "No diagrams yet",
|
|
"emptyHint": "Start a conversation to begin",
|
|
"today": "Today",
|
|
"yesterday": "Yesterday",
|
|
"thisWeek": "This Week",
|
|
"earlier": "Earlier",
|
|
"deleteTitle": "Delete this diagram?",
|
|
"deleteDescription": "The diagram and its conversation are deleted for good.",
|
|
"justNow": "Just now",
|
|
"searchPlaceholder": "Search diagrams…",
|
|
"noResults": "No chats found",
|
|
"rename": "Rename",
|
|
"busyHint": "Available when the answer is finished"
|
|
},
|
|
"templates": {
|
|
"emptyTitle": "No saved prompts yet",
|
|
"emptyDescription": "Save a prompt you reuse, for example \"Draw an AWS architecture for…\". It shows up here.",
|
|
"createFirst": "Save your first prompt",
|
|
"neverUsed": "Not used yet",
|
|
"usedCount": "{count} uses",
|
|
"myTemplates": "Saved prompts",
|
|
"createTitle": "Save a prompt",
|
|
"createDescription": "Save a prompt to use again later.",
|
|
"promptLabel": "Prompt",
|
|
"promptPlaceholder": "Describe the diagram you want to create...",
|
|
"promptRequired": "Prompt is required",
|
|
"titleLabel": "Title",
|
|
"titlePlaceholder": "Enter a title",
|
|
"titleHint": "Leave empty to use the first 20 characters of prompt",
|
|
"descriptionLabel": "Description",
|
|
"descriptionPlaceholder": "What this prompt is for",
|
|
"pinnedLabel": "Pin to top",
|
|
"pinnedHint": "Pinned prompts appear at the top of the list",
|
|
"createButton": "Save prompt",
|
|
"createFailed": "Couldn't save the prompt. Try again.",
|
|
"editTitle": "Edit saved prompt",
|
|
"editDescription": "Change the prompt and its settings.",
|
|
"updateFailed": "Couldn't update the prompt. Try again.",
|
|
"duplicate": "Duplicate",
|
|
"copySuffix": "(copy)",
|
|
"deleteTitle": "Delete this saved prompt?",
|
|
"deleteDescription": "The prompt is deleted for good.",
|
|
"confirmSendTitle": "Replace current input?",
|
|
"confirmSendDescription": "You have unsent text in the message box. Sending this prompt replaces it.",
|
|
"confirmSendButton": "Send prompt",
|
|
"searchPlaceholder": "Search saved prompts…",
|
|
"searchNoResults": "No saved prompts match",
|
|
"pin": "Pin to top",
|
|
"unpin": "Unpin from top",
|
|
"saveAsTemplate": "Save this prompt",
|
|
"exportTemplates": "Export saved prompts",
|
|
"importTemplates": "Import saved prompts",
|
|
"exportEmpty": "No saved prompts to export",
|
|
"exportSuccess": "Exported {count} saved prompt(s)",
|
|
"importNoFile": "Please select a JSON file",
|
|
"importFailed": "Import failed: {error}",
|
|
"importSuccess": "Imported {imported} saved prompt(s), skipped {skipped} duplicate(s)",
|
|
"saveDisabledHint": "Type a prompt first"
|
|
},
|
|
"validation": {
|
|
"title": "Validate Diagram",
|
|
"capturing": "Capturing",
|
|
"validating": "Validating",
|
|
"validatingWithAttempt": "Validating ({attempt}/{max})",
|
|
"valid": "Valid",
|
|
"validWithWarnings": "Valid with Warnings",
|
|
"issuesFound": "Issues Found",
|
|
"error": "Error",
|
|
"skipped": "Skipped",
|
|
"capturedScreenshot": "Captured Screenshot:",
|
|
"issuesFoundLabel": "Issues Found:",
|
|
"suggestions": "Suggestions:",
|
|
"passedValidation": "Diagram passed visual validation - no issues detected.",
|
|
"improvementRequested": "Improvement requested - check the new diagram below",
|
|
"improveWithSuggestions": "Improve with Suggestions",
|
|
"regenerateWithFeedback": "Regenerate the diagram using the validation feedback"
|
|
},
|
|
"modelConfig": {
|
|
"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.",
|
|
"validationError": "The test failed",
|
|
"addModelFirst": "Add a model first.",
|
|
"displayName": "Display Name",
|
|
"bedrockApiKey": "Bedrock API key",
|
|
"bedrockApiKeyHint": "With an API key, the access keys below are not needed.",
|
|
"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)",
|
|
"getApiKey": "Get API key",
|
|
"noTools": "no tool calls",
|
|
"mayNotDraw": "models.dev lists no tool call support for this model, so it may not be able to draw.",
|
|
"requestUrl": "Requests go to {url}",
|
|
"baseUrlWithExample": "Base URL (optional, e.g. {example})",
|
|
"customEndpoint": "Custom endpoint URL",
|
|
"minimaxBaseUrlHint": "Use /anthropic for Anthropic-compatible API (recommended), or /v1 for OpenAI-compatible API",
|
|
"mimoBaseUrlHint": "Default works with pay-as-you-go keys (sk-...). Token Plan subscribers (tp-... keys) must set https://token-plan-cn.xiaomimimo.com/v1",
|
|
"models": "Models",
|
|
"customModelId": "Custom model ID...",
|
|
"allAdded": "All added",
|
|
"modelIdEmpty": "Model ID cannot be empty",
|
|
"modelIdExists": "This model ID already exists",
|
|
"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 the provider name...",
|
|
"requestFailed": "Request failed ({status})",
|
|
"cancel": "Cancel",
|
|
"delete": "Delete",
|
|
"clickToChange": "(click to change)",
|
|
"usingServerDefault": "Using server default model",
|
|
"selectModel": "Select Model",
|
|
"searchModels": "Search models...",
|
|
"noModelsFound": "No models found.",
|
|
"default": "Default",
|
|
"serverDefault": "Server model",
|
|
"serverModels": "Server Models",
|
|
"userModels": "User Models",
|
|
"configureModels": "Configure Models...",
|
|
"serverDefaultModel": "Server default model",
|
|
"showValue": "Show value",
|
|
"hideValue": "Hide value",
|
|
"myProviders": "My providers",
|
|
"inUse": "In use",
|
|
"listSeparator": ", ",
|
|
"serverModelsTitle": "Models from this server",
|
|
"serverDefaultSummary": "No API key needed: the server's default model.",
|
|
"statusError": "{count} failed",
|
|
"statusIncomplete": "Not set up yet",
|
|
"statusUntested": "{count} untested",
|
|
"statusOk": "{count} working",
|
|
"noModelsYet": "No models yet",
|
|
"keysStayLocal": "API keys stay in this browser on this device and go to the server only with your requests.",
|
|
"useOwnKey": "Use your own API key",
|
|
"useOwnKeyHint": "Add a provider to use its models from the chat's model picker. Pick one to start:",
|
|
"viewAllProviders": "See all {count} providers",
|
|
"searchProviders": "Search providers, e.g. DeepSeek, Qwen, Ollama",
|
|
"noProvidersFound": "No provider matches.",
|
|
"groupVendors": "Model makers",
|
|
"groupAggregators": "Aggregators",
|
|
"groupCloud": "Cloud platforms",
|
|
"groupSelfHosted": "Self-hosted",
|
|
"noteBedrock": "AWS credentials",
|
|
"noteVertex": "Express mode key",
|
|
"noteAzure": "Key and resource URL",
|
|
"noteEdgeone": "No key needed",
|
|
"noteOllama": "Key optional",
|
|
"noteSglang": "Your server's URL",
|
|
"added": "Added",
|
|
"awsCredentials": "AWS credentials",
|
|
"bedrockAuthApiKey": "Bedrock API key",
|
|
"bedrockAuthAccessKey": "Access keys",
|
|
"moreOptions": "More options: base URL, display name",
|
|
"moreOptionsName": "More options: display name",
|
|
"keyRejected": "The provider rejected this API key. Check that the key above was copied in full.",
|
|
"modelNotFound": "The provider can't find this model ID. Check its spelling.",
|
|
"modelWorks": "Works",
|
|
"modelWorksTime": "Works · {seconds} s",
|
|
"modelFailed": "Failed",
|
|
"modelUntested": "Untested",
|
|
"needKey": "Fill in the API key first.",
|
|
"needAws": "Fill in the AWS credentials and region first.",
|
|
"needModel": "Add a model first.",
|
|
"stepConnect": "Connection",
|
|
"edgeoneNoKey": "EdgeOne Pages uses the model service that comes with this site's deployment: no API key needed.",
|
|
"stepModels": "Models",
|
|
"fetchAllModels": "Get all models from {name}",
|
|
"suggestedLabel": "Suggested:",
|
|
"orTypeModelId": "Or type another model ID",
|
|
"add": "Add",
|
|
"browseModels": "Browse models",
|
|
"stepTest": "Test",
|
|
"testHint": "Sends each model a very short message to check that the key and the model work.",
|
|
"testOne": "Test {model}",
|
|
"testAll": "Test all {count} models",
|
|
"testPassedOne": "{model} works",
|
|
"testPassedAll": "All {count} models work",
|
|
"answeredIn": "(answered in {seconds} s)",
|
|
"useInChat": "Use {model} in the chat",
|
|
"backToProviders": "Back to providers",
|
|
"deleteProviderOnly": "Delete {name}",
|
|
"addProviderEntry": "Add a provider…",
|
|
"awsKeysRejected": "AWS rejected these access keys. Check that both were copied in full.",
|
|
"needAzure": "Fill in the API key and your Azure resource's base URL first.",
|
|
"validationFailedCountOne": "{count} model failed the test",
|
|
"validationFailedCountOther": "{count} models failed the test",
|
|
"deleteProviderNamedOne": "Delete {name} and its model",
|
|
"deleteProviderNamedOther": "Delete {name} and its {count} models",
|
|
"serverModelsSummaryOne": "No API key needed. {count} model: {names}",
|
|
"serverModelsSummaryOther": "No API key needed. {count} models: {names}",
|
|
"noModelsReturned": "The provider returned no models.",
|
|
"awsSessionToken": "AWS session token (optional)",
|
|
"awsSessionTokenHint": "Only for temporary credentials: access keys that start with ASIA.",
|
|
"bedrockBothSaved": "This provider also keeps an access key pair, unused while there is an API key.",
|
|
"removeAccessKeys": "Remove the access keys"
|
|
},
|
|
"admin": {
|
|
"title": "Admin Settings",
|
|
"loginPrompt": "Enter the admin password (the ADMIN_PASSWORD environment variable)",
|
|
"password": "Password",
|
|
"signIn": "Sign In",
|
|
"signingIn": "Signing in…",
|
|
"loginFailed": "Login failed",
|
|
"precedence": "Priority: this page > environment variables > defaults",
|
|
"notWritable": "Settings can't be saved on this deployment, only viewed; use environment variables instead",
|
|
"settingGroups": "Setting groups",
|
|
"enabled": "On",
|
|
"disabled": "Off",
|
|
"enableGroup": "Turn on {group}",
|
|
"unsavedChanges": "Unsaved changes",
|
|
"saved": "Saved. Changes apply right away, except items marked \"Needs restart\"",
|
|
"saveFailed": "Save failed. Check your connection and try again",
|
|
"invalidSettings": "Some settings are invalid; see the notes under them",
|
|
"discard": "Discard changes",
|
|
"saveChanges": "Save changes",
|
|
"saving": "Saving…",
|
|
"sourceSaved": "This page",
|
|
"sourceEnv": "Env",
|
|
"sourceSavedTitle": "Set on this page",
|
|
"sourceEnvTitle": "From an environment variable",
|
|
"restartRequired": "Needs restart",
|
|
"modified": "Modified",
|
|
"notSet": "Not set",
|
|
"savedReplace": "Saved ({hint}); type a new value to replace it",
|
|
"showValue": "Show",
|
|
"hideValue": "Hide",
|
|
"removeValue": "Clear",
|
|
"removeValueTitle": "Clear the saved value",
|
|
"resetToDefault": "Reset to default",
|
|
"models": "Models",
|
|
"modelsDescription": "Models every user can use, no personal API key needed",
|
|
"addProviderHint": "Add a provider to offer models to all users",
|
|
"selectProviderHint": "Select or add a provider, then enter its key and models",
|
|
"addProviderToOfferModels": "Add at least one model before users can see this provider",
|
|
"managedViaEnv": "(environment variables)",
|
|
"envReadOnly": "Defined in AI_MODELS_CONFIG / ai-models.json; view only here, edit it there",
|
|
"defaultModel": "Default Model",
|
|
"noModelsConfigured": "No models yet",
|
|
"modelCount": "{count} model",
|
|
"modelCountPlural": "{count} models",
|
|
"default": "Default",
|
|
"setAsDefault": "Set as default provider",
|
|
"defaultProvider": "Default provider",
|
|
"modelIdPlaceholder": "Model ID…",
|
|
"addModel": "Add model",
|
|
"suggested": "Suggested",
|
|
"test": "Test",
|
|
"testOk": "Passed ({ms} ms)",
|
|
"testFailed": "Failed",
|
|
"removeModel": "Delete {model}",
|
|
"deleteProviderTitle": "Delete {name}?",
|
|
"deleteProviderDesc": "After you save, its key and models are deleted from the server",
|
|
"cancel": "Cancel",
|
|
"delete": "Delete",
|
|
"groups": {
|
|
"generation": {
|
|
"title": "Replies",
|
|
"description": "How the AI replies, for every conversation"
|
|
},
|
|
"access": {
|
|
"title": "Access",
|
|
"description": "Limit who can use this site"
|
|
},
|
|
"features": {
|
|
"title": "Optional Features",
|
|
"description": "Extra features and safety options"
|
|
},
|
|
"observability": {
|
|
"title": "Call Logs",
|
|
"description": "Record model calls with Langfuse"
|
|
},
|
|
"quota": {
|
|
"title": "Usage Limits",
|
|
"description": "Per-IP limits; they take effect only with a DynamoDB table"
|
|
}
|
|
},
|
|
"settings": {
|
|
"TEMPERATURE": {
|
|
"label": "Temperature",
|
|
"description": "Higher is more random; leave empty for reasoning models that don't support it"
|
|
},
|
|
"MAX_OUTPUT_TOKENS": {
|
|
"label": "Output Token Limit"
|
|
},
|
|
"ACCESS_CODE_LIST": {
|
|
"label": "Access Codes",
|
|
"description": "Separate several with commas; users must enter one to chat; empty means no limit"
|
|
},
|
|
"ENABLE_VLM_VALIDATION": {
|
|
"label": "Diagram Check",
|
|
"description": "After drawing, a model that can see images checks a screenshot"
|
|
},
|
|
"VALIDATION_MODEL": {
|
|
"label": "Check Model",
|
|
"description": "Empty means the default model"
|
|
},
|
|
"VALIDATION_TIMEOUT": {
|
|
"label": "Check Timeout (ms)"
|
|
},
|
|
"ENABLE_HISTORY_XML_REPLACE": {
|
|
"label": "Trim Old Diagrams",
|
|
"description": "Old diagrams in the chat history are kept as a short marker"
|
|
},
|
|
"ALLOW_PRIVATE_URLS": {
|
|
"label": "Allow Private URLs",
|
|
"description": "When off, custom model URLs can't point to private networks; safer"
|
|
},
|
|
"LANGFUSE_PUBLIC_KEY": {
|
|
"label": "Langfuse Public Key"
|
|
},
|
|
"LANGFUSE_SECRET_KEY": {
|
|
"label": "Langfuse Secret Key"
|
|
},
|
|
"LANGFUSE_BASEURL": {
|
|
"label": "Langfuse URL"
|
|
},
|
|
"DAILY_REQUEST_LIMIT": {
|
|
"label": "Daily Requests",
|
|
"description": "Requests per IP per day"
|
|
},
|
|
"DAILY_TOKEN_LIMIT": {
|
|
"label": "Daily Tokens",
|
|
"description": "Tokens per IP per day"
|
|
},
|
|
"TPM_LIMIT": {
|
|
"label": "Tokens Per Minute"
|
|
},
|
|
"DYNAMODB_QUOTA_TABLE": {
|
|
"label": "DynamoDB Table Name",
|
|
"description": "Empty means no usage limits"
|
|
},
|
|
"DYNAMODB_REGION": {
|
|
"label": "DynamoDB Region"
|
|
},
|
|
"QUOTA_TIMEZONE": {
|
|
"label": "Time Zone",
|
|
"description": "Daily usage resets at midnight in this time zone"
|
|
}
|
|
}
|
|
},
|
|
"workspace": {
|
|
"export": "Export",
|
|
"openFile": "Open .drawio file",
|
|
"canvasLoading": "Loading the canvas…",
|
|
"askAi": "Ask AI to change this",
|
|
"untitled": "Untitled diagram",
|
|
"mobileCanvas": "Canvas",
|
|
"mobileChat": "Chat"
|
|
},
|
|
"selection": {
|
|
"one": "Selected: {label}",
|
|
"many": "{count} shapes selected",
|
|
"shape": "shape",
|
|
"connector": "connector",
|
|
"remove": "Don't send the selection",
|
|
"placeholder": "Describe how to change the selected shapes"
|
|
},
|
|
"versions": {
|
|
"strip": "Versions",
|
|
"created": "Drew the diagram",
|
|
"edited": "Changed the diagram",
|
|
"undone": "Change undone",
|
|
"undo": "Undo change",
|
|
"redo": "Redo change",
|
|
"compare": "Compare",
|
|
"compareTitle": "Compare versions",
|
|
"currentCanvas": "Canvas now",
|
|
"versionLabel": "Version {n}",
|
|
"previous": "Previous version",
|
|
"next": "Next version",
|
|
"rendering": "Rendering preview…",
|
|
"showCode": "Show XML",
|
|
"hideCode": "Hide XML",
|
|
"drawing": "Drawing the diagram…",
|
|
"editing": "Changing the diagram…",
|
|
"loadingLibrary": "Loading a shape library…",
|
|
"libraryLoaded": "Loaded a shape library",
|
|
"failed": "This attempt failed",
|
|
"failedRetrying": "This attempt failed, trying again",
|
|
"stopped": "Stopped",
|
|
"truncatedHint": "The reply hit the output limit before the diagram was complete. Ask for a simpler diagram, or raise Max output tokens in Settings > Drawing.",
|
|
"noChanges": "No visible changes",
|
|
"listSeparator": ", ",
|
|
"shapesAddedOne": "added 1 shape",
|
|
"shapesAddedOther": "added {count} shapes",
|
|
"edgesAddedOne": "added 1 connector",
|
|
"edgesAddedOther": "added {count} connectors",
|
|
"shapesChangedOne": "changed 1 shape",
|
|
"shapesChangedOther": "changed {count} shapes",
|
|
"edgesChangedOne": "changed 1 connector",
|
|
"edgesChangedOther": "changed {count} connectors",
|
|
"shapesRemovedOne": "removed 1 shape",
|
|
"shapesRemovedOther": "removed {count} shapes",
|
|
"edgesRemovedOne": "removed 1 connector",
|
|
"edgesRemovedOther": "removed {count} connectors",
|
|
"totals": "{shapes}, {edges}",
|
|
"shapesTotalOne": "1 shape",
|
|
"shapesTotalOther": "{count} shapes",
|
|
"edgesTotalOne": "1 connector",
|
|
"edgesTotalOther": "{count} connectors",
|
|
"restoreVersion": "Restore v{n}",
|
|
"restoredVersion": "Restored v{n}",
|
|
"undoRestore": "Undo",
|
|
"noPreview": "No preview",
|
|
"compareSince": "Since version {n}, the canvas has changed:",
|
|
"isOnCanvas": "This version is what the canvas shows now.",
|
|
"differsElsewhere": "The shapes and connectors on the first page are the same as in version {n}; their order, other pages or the page settings differ."
|
|
},
|
|
"lobby": {
|
|
"title": "What would you like to draw?",
|
|
"lede": "Describe a diagram or upload a screenshot or PDF. You get a draw.io diagram you can keep editing and export.",
|
|
"placeholder": "For example: a login sequence diagram with SMS codes and retries",
|
|
"recent": "Recent diagrams",
|
|
"drawYourself": "Start with a blank canvas",
|
|
"openFileHint": "Keep working on a diagram you have"
|
|
},
|
|
"shell": {
|
|
"waiting": "Waiting for the MCP server…",
|
|
"toggleTheme": "Switch between light and dark",
|
|
"connected": "Connected to the MCP server",
|
|
"offline": "Can't reach the MCP server",
|
|
"tooLarge": "This diagram is too large to save to the MCP server (over 10 MB).",
|
|
"unreachable": "Can't reach the MCP server. Your changes are only in this tab for now.",
|
|
"restoredFromFile": "The diagram was restored from its saved file. What this tab showed before is in History.",
|
|
"aiChanged": "The AI changed the diagram while you were editing. Your last change was saved in History.",
|
|
"historyChanged": "History changed on the server. Please open it again.",
|
|
"restoreFailed": "Restore failed. Please try again.",
|
|
"userEdit": "Changed by hand",
|
|
"showVersions": "Show the versions",
|
|
"hideVersions": "Hide the versions"
|
|
}
|
|
}
|