mirror of
https://github.com/DayuanJiang/next-ai-draw-io.git
synced 2026-10-11 12:09:53 +08:00
Tabs Models, General, Drawing and About, each with a fixed title row. The models tab becomes three pages: the user's providers with one status each and the server's models; a searchable picker of all 24 providers in four groups; and a provider page in three steps (connection, models, test). A new provider gets its first suggested model, and a passing test offers to use the model in the chat. Bedrock asks for one way of signing in, with an optional session token for temporary access keys. The composer's model picker lists every model, marking untested and failed ones, and can open the provider picker. A chat error that offers model settings opens the provider the request went to.
705 lines
34 KiB
JSON
705 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 open instantly and don't use your model.",
|
|
"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 diagram always stays on a white sheet, the way it exports.",
|
|
"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": "Max output tokens",
|
|
"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 thrilled you're enjoying it, and while ByteDance Doubao generously sponsors this demo, we've had to set a few boundaries to keep things fair for everyone.",
|
|
"messageApiSelfHosted": null,
|
|
"messageToken": "Looks like you've reached today's token limit. We're thrilled you're enjoying it, and while ByteDance Doubao generously sponsors this demo, we've had to set a few boundaries to keep things 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.",
|
|
"doubaoSponsorship": "<a href=\"{link}\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"underline hover:text-foreground\">Register here</a> to get 500K free tokens per model (including Doubao, DeepSeek and Kimi), then configure your API key in model settings.",
|
|
"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 Default",
|
|
"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) to manage server settings.",
|
|
"password": "Password",
|
|
"signIn": "Sign In",
|
|
"signingIn": "Signing In…",
|
|
"loginFailed": "Login failed",
|
|
"precedence": "File overrides env · env overrides defaults",
|
|
"notWritable": "The settings file is not writable on this deployment (serverless platforms have no persistent disk). Settings are shown read-only — configure via environment variables instead.",
|
|
"settingGroups": "Setting groups",
|
|
"enabled": "Enabled",
|
|
"disabled": "Disabled",
|
|
"enableGroup": "Enable {group}",
|
|
"unsavedChanges": "Unsaved changes",
|
|
"saved": "Settings saved. Changes apply immediately.",
|
|
"saveFailed": "Save failed. Check your connection and try again.",
|
|
"invalidSettings": "Some settings are invalid.",
|
|
"discard": "Discard",
|
|
"saveChanges": "Save Changes",
|
|
"saving": "Saving…",
|
|
"sourceSaved": "Saved",
|
|
"sourceEnv": "Env",
|
|
"sourceSavedTitle": "Set in the admin settings file",
|
|
"sourceEnvTitle": "Set by an environment variable",
|
|
"restartRequired": "Restart Required",
|
|
"modified": "Modified",
|
|
"notSet": "Not set",
|
|
"savedReplace": "Saved ({hint}) — type to replace",
|
|
"showValue": "Show value",
|
|
"hideValue": "Hide value",
|
|
"removeValue": "Remove value",
|
|
"removeValueTitle": "Remove the stored value",
|
|
"resetToDefault": "Reset to default",
|
|
"models": "Models",
|
|
"modelsDescription": "Server-side providers and models available to all users — no personal API key needed. The default provider's first model is used when users don't pick one.",
|
|
"addProviderHint": "Add a provider to offer server-side models to all users.",
|
|
"selectProviderHint": "Select or add a provider to configure its credentials and models.",
|
|
"addProviderToOfferModels": "Add at least one model to expose this provider to users.",
|
|
"managedViaEnv": "(managed via env)",
|
|
"envReadOnly": "Defined in AI_MODELS_CONFIG / ai-models.json — read-only here. Edit the environment configuration to change it.",
|
|
"defaultModel": "Default Model",
|
|
"noModelsConfigured": "No models configured",
|
|
"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": "OK ({ms}ms)",
|
|
"testFailed": "Failed",
|
|
"removeModel": "Remove {model}",
|
|
"deleteProviderTitle": "Delete {name}?",
|
|
"deleteProviderDesc": "Its credentials and models will be removed from the server after you save.",
|
|
"cancel": "Cancel",
|
|
"delete": "Delete",
|
|
"groups": {
|
|
"generation": {
|
|
"title": "Generation",
|
|
"description": "Output parameters applied to all chat requests."
|
|
},
|
|
"access": {
|
|
"title": "Access Control",
|
|
"description": "Restrict who can use this deployment."
|
|
},
|
|
"features": {
|
|
"title": "Features",
|
|
"description": "Optional features and security toggles."
|
|
},
|
|
"observability": {
|
|
"title": "Observability",
|
|
"description": "Langfuse tracing for LLM calls."
|
|
},
|
|
"quota": {
|
|
"title": "Quota & Rate Limits",
|
|
"description": "Per-IP usage limits. Enforcement requires a DynamoDB table."
|
|
}
|
|
},
|
|
"settings": {
|
|
"TEMPERATURE": {
|
|
"label": "Temperature",
|
|
"description": "Leave unset for reasoning models that reject temperature."
|
|
},
|
|
"MAX_OUTPUT_TOKENS": {
|
|
"label": "Max Output Tokens"
|
|
},
|
|
"ACCESS_CODE_LIST": {
|
|
"label": "Access Codes",
|
|
"description": "Comma-separated list. Users must enter one to chat. Empty = open access."
|
|
},
|
|
"ENABLE_VLM_VALIDATION": {
|
|
"label": "VLM Diagram Validation",
|
|
"description": "Visually validate generated diagrams with a vision model."
|
|
},
|
|
"VALIDATION_MODEL": {
|
|
"label": "Validation Model",
|
|
"description": "Falls back to the default AI model when empty."
|
|
},
|
|
"VALIDATION_TIMEOUT": {
|
|
"label": "Validation Timeout (ms)"
|
|
},
|
|
"ENABLE_HISTORY_XML_REPLACE": {
|
|
"label": "History XML Compression",
|
|
"description": "Replace old diagram XML in history with placeholders."
|
|
},
|
|
"ALLOW_PRIVATE_URLS": {
|
|
"label": "Allow Private URLs",
|
|
"description": "Turn off to block requests to private IPs and internal hostnames (SSRF protection)."
|
|
},
|
|
"LANGFUSE_PUBLIC_KEY": {
|
|
"label": "Langfuse Public Key"
|
|
},
|
|
"LANGFUSE_SECRET_KEY": {
|
|
"label": "Langfuse Secret Key"
|
|
},
|
|
"LANGFUSE_BASEURL": {
|
|
"label": "Langfuse Base URL"
|
|
},
|
|
"DAILY_REQUEST_LIMIT": {
|
|
"label": "Daily Request Limit",
|
|
"description": "Per IP per day."
|
|
},
|
|
"DAILY_TOKEN_LIMIT": {
|
|
"label": "Daily Token Limit",
|
|
"description": "Per IP per day."
|
|
},
|
|
"TPM_LIMIT": {
|
|
"label": "Tokens Per Minute"
|
|
},
|
|
"DYNAMODB_QUOTA_TABLE": {
|
|
"label": "DynamoDB Table",
|
|
"description": "Quota enforcement is disabled when empty."
|
|
},
|
|
"DYNAMODB_REGION": {
|
|
"label": "DynamoDB Region"
|
|
},
|
|
"QUOTA_TIMEZONE": {
|
|
"label": "Quota Timezone",
|
|
"description": "Timezone for the daily reset boundary."
|
|
}
|
|
}
|
|
},
|
|
"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 regular draw.io diagram that 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"
|
|
}
|
|
}
|