mirror of
https://github.com/DayuanJiang/next-ai-draw-io.git
synced 2026-10-11 03:59:58 +08:00
Labels are two to four words, descriptions one short line, and the
wording follows the reader rather than the implementation: "服务商"
instead of "provider", "本页设置" instead of "后台设置" for the source
chip (it shared its name with the page title), "需重启" as a badge, a
verb on every switch ("访问内网"), "Langfuse 密钥" instead of "私钥".
Descriptions keep the facts the old ones had (where to change an
env-managed provider, that users must enter an access code), and the
same style is applied to the English, Japanese and Traditional Chinese
dictionaries. Five user-facing strings in the same files are aligned
with the new terms (服务商, token).
704 lines
33 KiB
JSON
704 lines
33 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"
|
|
}
|
|
}
|