Files
iiEsaywebUIapp/lib/l10n/app_en.arb
cogwheel0 ea14ea6f09 feat: Add Spanish, Dutch, Russian, and Chinese languages
Adds support for Spanish, Dutch, Russian, and Chinese to the language selection menu. This includes adding the necessary translation strings and updating the app customization page to display these new language options.
2025-10-12 20:59:05 +05:30

673 lines
37 KiB
Plaintext

{
"@@locale": "en",
"appTitle": "Conduit",
"@appTitle": {"description": "Application name displayed in the app and OS UI."},
"initializationFailed": "Initialization Failed",
"@initializationFailed": {"description": "Shown if the app fails to initialize critical services."},
"retry": "Retry",
"@retry": {"description": "Button label to try an action again."},
"back": "Back",
"@back": {"description": "Back navigation label/tooltip."},
"you": "You",
"@you": {"description": "Profile tab title."},
"loadingProfile": "Loading profile...",
"@loadingProfile": {"description": "Progress message while fetching profile data."},
"unableToLoadProfile": "Unable to load profile",
"@unableToLoadProfile": {"description": "Error title shown when profile request fails."},
"pleaseCheckConnection": "Please check your connection and try again",
"connectionIssueTitle": "Can't reach your server",
"@connectionIssueTitle": {
"description": "Title shown when the configured server is unreachable"
},
"connectionIssueSubtitle": "Reconnect to continue or sign out to choose a different server.",
"@connectionIssueSubtitle": {
"description": "Subtitle explaining available actions when the server cannot be reached"
},
"stillOfflineMessage": "We still can't reach the server. Double-check your connection and try again.",
"@stillOfflineMessage": {
"description": "Status message after a retry when connectivity has not been restored"
},
"@pleaseCheckConnection": {"description": "Generic connectivity hint after an error."},
"account": "Account",
"@account": {"description": "Section header for account-related options."},
"supportConduit": "Support Conduit",
"@supportConduit": {
"description": "Section header inviting the user to financially support the project."
},
"supportConduitSubtitle": "Keep Conduit independent by funding ongoing development.",
"@supportConduitSubtitle": {
"description": "Subtitle explaining why donations are helpful."
},
"githubSponsorsTitle": "GitHub Sponsors",
"@githubSponsorsTitle": {
"description": "Tile title linking to the GitHub Sponsors page."
},
"githubSponsorsSubtitle": "Become a recurring sponsor to fund roadmap items.",
"@githubSponsorsSubtitle": {
"description": "Subtitle explaining the impact of recurring sponsorship."
},
"buyMeACoffeeTitle": "Buy Me a Coffee",
"@buyMeACoffeeTitle": {
"description": "Tile title linking to the Buy Me a Coffee page."
},
"buyMeACoffeeSubtitle": "Make a one-time donation to say thanks.",
"@buyMeACoffeeSubtitle": {
"description": "Subtitle encouraging one-time donations via Buy Me a Coffee."
},
"signOut": "Sign Out",
"@signOut": {"description": "Button/title for signing out of the app."},
"endYourSession": "End your session",
"@endYourSession": {"description": "Subtitle explaining the sign-out action."},
"defaultModel": "Default Model",
"@defaultModel": {"description": "Label for choosing a default AI model."},
"autoSelect": "Auto-select",
"@autoSelect": {"description": "Option to let the app pick a suitable model automatically."},
"loadingModels": "Loading models...",
"@loadingModels": {"description": "Progress message while fetching model list."},
"failedToLoadModels": "Failed to load models",
"@failedToLoadModels": {"description": "Error message shown when model list cannot be retrieved."},
"availableModels": "Available Models",
"@availableModels": {"description": "Header above a list of models to select from."},
"noResults": "No results",
"@noResults": {"description": "Shown when a search returns no matches."},
"searchModels": "Search models...",
"@searchModels": {"description": "Hint text for model search input."},
"errorMessage": "Something went wrong. Please try again.",
"@errorMessage": {"description": "Generic error message for unexpected failures."},
"loginButton": "Login",
"@loginButton": {"description": "Button text for the login action."},
"menuItem": "Settings",
"@menuItem": {"description": "Generic settings menu item label."},
"dynamicContentWithPlaceholder": "Welcome, {name}!",
"@dynamicContentWithPlaceholder": {
"description": "Greeting message with a dynamic user name.",
"placeholders": {
"name": {
"type": "String",
"example": "Alex"
}
}
},
"itemsCount": "{count, plural, =0{No items} one{1 item} other{{count} items}}",
"@itemsCount": {
"description": "Pluralized count of items.",
"placeholders": {
"count": {
"type": "int",
"example": "3"
}
}
},
"closeButtonSemantic": "Close",
"@closeButtonSemantic": {"description": "Accessible label for a generic Close button."},
"loadingContent": "Loading content",
"@loadingContent": {"description": "Shown while loading page content."},
"noItems": "No items",
"@noItems": {"description": "Placeholder text when a list is empty."},
"noItemsToDisplay": "No items to display",
"@noItemsToDisplay": {"description": "Alternative empty-state description."},
"loadMore": "Load More",
"@loadMore": {"description": "Button label to load additional items in a paged list."},
"workspace": "Workspace",
"@workspace": {"description": "Section/tab label for documents and files."},
"recentFiles": "Recent Files",
"@recentFiles": {"description": "Header for recently accessed files."},
"knowledgeBase": "Knowledge Base",
"@knowledgeBase": {"description": "Section for knowledge base content."},
"noFilesYet": "No files yet",
"@noFilesYet": {"description": "Empty state when no files are present."},
"uploadDocsPrompt": "Upload documents to reference in your conversations with Conduit",
"@uploadDocsPrompt": {"description": "Prompt encouraging users to upload documents."},
"uploadFirstFile": "Upload your first file",
"@uploadFirstFile": {"description": "CTA to add the first file."},
"attachments": "Attachments",
"@attachments": {"description": "Header above list of attached files in compose area."},
"knowledgeBaseEmpty": "Knowledge base is empty",
"@knowledgeBaseEmpty": {"description": "Empty state title for the knowledge base section."},
"createCollectionsPrompt": "Create collections of related documents for easy reference",
"@createCollectionsPrompt": {"description": "Prompt describing the benefit of creating collections."},
"chooseSourcePhoto": "Choose your source",
"@chooseSourcePhoto": {"description": "Sheet title to pick camera or photo library."},
"takePhoto": "Take a photo",
"@takePhoto": {"description": "Action to open camera and capture a new photo."},
"chooseFromGallery": "Choose from your photos",
"@chooseFromGallery": {"description": "Action to pick an existing photo from library."},
"document": "Document",
"@document": {"description": "Generic document label used in UI."},
"documentHint": "PDF, Word, or text file",
"@documentHint": {"description": "Helper hint listing supported document types."},
"uploadFileTitle": "Upload File",
"@uploadFileTitle": {"description": "Dialog/sheet title for file upload."},
"fileUploadComingSoon": "File upload for {type} is coming soon!",
"@fileUploadComingSoon": {
"placeholders": {"type": {"type": "String", "example": "gallery"}},
"description": "Temporary message for upcoming upload feature by type"
},
"kbCreationComingSoon": "Knowledge base creation is coming soon!",
"@kbCreationComingSoon": {"description": "Temporary message indicating KB creation feature is not yet available."},
"backToServerSetup": "Back to server setup",
"@backToServerSetup": {"description": "Button/back label to return to server configuration flow."},
"connectedToServer": "Connected to Server",
"@connectedToServer": {"description": "Status label indicating a successful server connection."},
"signIn": "Sign In",
"@signIn": {"description": "Button/heading for sign-in flows."},
"enterCredentials": "Enter your credentials to access your AI conversations",
"@enterCredentials": {"description": "Instructional text on the sign-in screen."},
"credentials": "Credentials",
"@credentials": {"description": "Header for credential input section."},
"apiKey": "API Key",
"@apiKey": {"description": "Label for API key input field."},
"usernameOrEmail": "Username or Email",
"@usernameOrEmail": {"description": "Label for username/email input field."},
"password": "Password",
"@password": {"description": "Label for password input field."},
"signInWithApiKey": "Sign in with API Key",
"@signInWithApiKey": {"description": "Alternative sign-in method using an API key."},
"connectToServer": "Connect to Server",
"@connectToServer": {"description": "Call-to-action button for server connection."},
"enterServerAddress": "Enter your Open-WebUI server address to get started",
"@enterServerAddress": {"description": "Instruction telling user to provide server URL to begin."},
"serverUrl": "Server URL",
"@serverUrl": {"description": "Label for server URL field."},
"serverUrlHint": "https://your-server.com",
"@serverUrlHint": {"description": "Hint text showing example server URL format."},
"enterServerUrlSemantic": "Enter your server URL or IP address",
"@enterServerUrlSemantic": {"description": "Semantic/ARIA label instructing to enter server URL or IP."},
"headerName": "Header Name",
"@headerName": {"description": "Label for custom header key."},
"headerValue": "Header Value",
"@headerValue": {"description": "Label for custom header value."},
"headerValueHint": "api-key-123 or Bearer token",
"@headerValueHint": {"description": "Hint text with example header values, including API key or Bearer token."},
"addHeader": "Add header",
"@addHeader": {"description": "Button to add a new custom header row."},
"maximumHeadersReached": "Maximum headers reached",
"@maximumHeadersReached": {"description": "Warning when custom header limit is reached."},
"removeHeader": "Remove header",
"@removeHeader": {"description": "Action to remove a custom header row."},
"connecting": "Connecting...",
"@connecting": {"description": "Status while attempting to connect to server."},
"connectToServerButton": "Connect to Server",
"@connectToServerButton": {"description": "Primary action button to initiate server connection."},
"demoModeActive": "Demo Mode Active",
"@demoModeActive": {"description": "Banner/text indicating the app runs in demo mode."},
"skipServerSetupTryDemo": "Skip server setup and try the demo",
"@skipServerSetupTryDemo": {"description": "CTA to bypass server configuration and enter demo mode."},
"enterDemo": "Enter Demo",
"@enterDemo": {"description": "Button to enter demo mode."},
"demoBadge": "Demo",
"@demoBadge": {"description": "Small badge label for demo content."},
"serverNotOpenWebUI": "This does not appear to be an Open-WebUI server.",
"@serverNotOpenWebUI": {"description": "Validation error when the server does not resemble Open-WebUI."},
"serverUrlEmpty": "Server URL cannot be empty",
"@serverUrlEmpty": {"description": "Validation message for empty server URL."},
"invalidUrlFormat": "Invalid URL format. Please check your input.",
"@invalidUrlFormat": {"description": "Validation message when URL format is incorrect."},
"onlyHttpHttps": "Only HTTP and HTTPS protocols are supported.",
"@onlyHttpHttps": {"description": "Validation note restricting protocols to HTTP/HTTPS."},
"serverAddressRequired": "Server address is required (e.g., 192.168.1.10 or example.com).",
"@serverAddressRequired": {"description": "Validation hint providing examples for server addresses."},
"portRange": "Port must be between 1 and 65535.",
"@portRange": {"description": "Validation message for allowed port range."},
"invalidIpFormat": "Invalid IP address format. Use format like 192.168.1.10.",
"@invalidIpFormat": {"description": "Validation message for IP addresses with example."},
"couldNotConnectGeneric": "Couldn't connect. Double-check the address and try again.",
"@couldNotConnectGeneric": {"description": "Generic failure when connecting to the server."},
"weCouldntReachServer": "We couldn't reach the server. Check your connection and that the server is running.",
"@weCouldntReachServer": {"description": "Connectivity error with hints to verify server status."},
"connectionTimedOut": "Connection timed out. The server might be busy or blocked by a firewall.",
"@connectionTimedOut": {"description": "Timeout error while connecting to server."},
"useHttpOrHttpsOnly": "Use http:// or https:// only.",
"@useHttpOrHttpsOnly": {"description": "Note instructing the user to include protocol in URL."},
"loginFailed": "Login failed",
"@loginFailed": {"description": "Title for failed login attempts."},
"invalidCredentials": "Invalid username or password. Please try again.",
"@invalidCredentials": {"description": "Detailed message when authentication fails."},
"serverRedirectingHttps": "The server is redirecting requests. Check your server's HTTPS configuration.",
"@serverRedirectingHttps": {"description": "Warning about HTTP→HTTPS redirect issues."},
"unableToConnectServer": "Unable to connect to server. Please check your connection.",
"@unableToConnectServer": {"description": "Generic server connection failure message."},
"requestTimedOut": "The request timed out. Please try again.",
"@requestTimedOut": {"description": "Timeout while waiting for a server response."},
"genericSignInFailed": "We couldn't sign you in. Check your credentials and server settings.",
"@genericSignInFailed": {"description": "Fallback sign-in error when no specific cause is known."}
,
"skip": "Skip",
"@skip": {"description": "Onboarding: skip current step."},
"next": "Next",
"@next": {"description": "Onboarding: go to the next step."},
"done": "Done",
"@done": {"description": "Onboarding: finish the flow."},
"onboardStartTitle": "Hello, {username}",
"@onboardStartTitle": {"description": "Onboarding card: start chatting title.", "placeholders": {"username": {"type": "String", "example": "Alex"}}},
"onboardStartSubtitle": "Choose a model to get started. Tap New Chat anytime.",
"@onboardStartSubtitle": {"description": "Onboarding card: brief guidance to begin a chat."},
"onboardStartBullet1": "Tap the model name in the top bar to switch models",
"@onboardStartBullet1": {"description": "Bullet: how to switch models."},
"onboardStartBullet2": "Use New Chat to reset context",
"@onboardStartBullet2": {"description": "Bullet: how to reset context."},
"onboardAttachTitle": "Add context",
"@onboardAttachTitle": {"description": "Onboarding card: attach context title."},
"onboardAttachSubtitle": "Ground replies with content from Workspace or photos.",
"@onboardAttachSubtitle": {"description": "Onboarding card: why attaching context helps."},
"onboardAttachBullet1": "Workspace: PDFs, docs, datasets",
"@onboardAttachBullet1": {"description": "Bullet: types of workspace files."},
"onboardAttachBullet2": "Photos: camera or library",
"@onboardAttachBullet2": {"description": "Bullet: photo sources supported."},
"onboardSpeakTitle": "Speak naturally",
"@onboardSpeakTitle": {"description": "Onboarding card: voice input title."},
"onboardSpeakSubtitle": "Tap the mic to dictate with live waveform feedback.",
"@onboardSpeakSubtitle": {"description": "Onboarding card: how voice input works."},
"onboardSpeakBullet1": "Stop anytime; partial text is preserved",
"@onboardSpeakBullet1": {"description": "Bullet: stop dictation preserves text."},
"onboardSpeakBullet2": "Great for quick notes or long prompts",
"@onboardSpeakBullet2": {"description": "Bullet: benefits of voice input."},
"onboardQuickTitle": "Quick actions",
"@onboardQuickTitle": {"description": "Onboarding card: quick actions title."},
"onboardQuickSubtitle": "Open the menu to switch between Chats, Workspace, and Profile.",
"@onboardQuickSubtitle": {"description": "Onboarding card: how to use the app menu."},
"onboardQuickBullet1": "Tap the menu to access Chats, Workspace, Profile",
"@onboardQuickBullet1": {"description": "Bullet: menu access to sections."},
"onboardQuickBullet2": "Start New Chat or manage models from the top bar",
"@onboardQuickBullet2": {"description": "Bullet: actions available in the top bar."}
,
"addAttachment": "Add attachment",
"@addAttachment": {"description": "Button to add an attachment (file/photo)."},
"attachmentLabel": "Attachment",
"@attachmentLabel": {
"description": "Label shown beside attachment chips in messages."
},
"tools": "Tools",
"@tools": {"description": "Header for a tools/actions section."},
"voiceInput": "Voice input",
"@voiceInput": {"description": "Label for voice input feature."},
"voice": "Voice",
"@voice": {"description": "Title for the voice input bottom sheet."},
"voiceStatusListening": "Listening…",
"@voiceStatusListening": {
"description": "Indicates the app is actively listening during voice input."
},
"voiceStatusRecording": "Recording…",
"@voiceStatusRecording": {
"description": "Indicates the app is recording audio for speech recognition."
},
"voiceHoldToTalk": "Hold to talk",
"@voiceHoldToTalk": {
"description": "Toggle label for hold-to-talk mode in voice input."
},
"voiceAutoSend": "Auto-send",
"@voiceAutoSend": {
"description": "Toggle label for automatically sending the final transcript."
},
"voiceTranscript": "Transcript",
"@voiceTranscript": {
"description": "Label above the transcribed voice input text."
},
"voicePromptSpeakNow": "Speak now…",
"@voicePromptSpeakNow": {
"description": "Placeholder prompting the user to start speaking."
},
"voicePromptTapStart": "Tap Start to begin",
"@voicePromptTapStart": {
"description": "Placeholder instructing the user to tap Start to begin recording."
},
"voiceActionStop": "Stop",
"@voiceActionStop": {
"description": "Button label to stop voice recording."
},
"voiceActionStart": "Start",
"@voiceActionStart": {
"description": "Button label to start voice recording."
},
"messageInputLabel": "Message input",
"@messageInputLabel": {"description": "Accessibility label for the message input."},
"messageInputHint": "Type your message",
"@messageInputHint": {"description": "Hint shown in the message input field."},
"messageHintText": "Message...",
"@messageHintText": {"description": "Short placeholder text in the message input."},
"stopGenerating": "Stop generating",
"@stopGenerating": {"description": "Action to stop the assistant's response generation."},
"send": "Send",
"@send": {"description": "Primary action to send a message."},
"codeCopiedToClipboard": "Code copied to clipboard.",
"@codeCopiedToClipboard": {
"description": "Snack bar message confirming code was copied."
},
"sendMessage": "Send message",
"@sendMessage": {"description": "Semantic label for sending a message."},
"file": "File",
"@file": {"description": "A file item or attachment type label."},
"photo": "Photo",
"@photo": {"description": "A photo item or attachment type label."},
"camera": "Camera",
"@camera": {"description": "Camera source label."},
"apiUnavailable": "API service not available",
"@apiUnavailable": {"description": "Shown when backend API service is unavailable."},
"unableToLoadImage": "Unable to load image",
"@unableToLoadImage": {"description": "General failure to load an image."},
"notAnImageFile": "Not an image file: {fileName}",
"@notAnImageFile": {
"description": "Error when a referenced file is not an image.",
"placeholders": {"fileName": {"type": "String", "example": "image.txt"}}
},
"failedToLoadImage": "Failed to load image: {error}",
"@failedToLoadImage": {
"description": "Error including the underlying reason when image loading fails.",
"placeholders": {"error": {"type": "String", "example": "Network error"}}
},
"invalidDataUrl": "Invalid data URL format",
"@invalidDataUrl": {"description": "Error for malformed data: URLs."},
"failedToDecodeImage": "Failed to decode image",
"@failedToDecodeImage": {"description": "Error when decoding image bytes/base64."},
"invalidImageFormat": "Invalid image format",
"@invalidImageFormat": {"description": "Error when image type/format is not supported."},
"emptyImageData": "Empty image data",
"@emptyImageData": {"description": "Error when image data buffer is empty."}
,
"featureRequiresInternet": "This feature requires an internet connection",
"@featureRequiresInternet": {"description": "Informational text explaining internet requirement."},
"messagesWillSendWhenOnline": "Messages will be sent when you're back online",
"@messagesWillSendWhenOnline": {"description": "Queue behavior notice while offline."},
"confirm": "Confirm",
"@confirm": {"description": "Confirmation button label."},
"cancel": "Cancel",
"@cancel": {"description": "Cancel button label."}
,
"ok": "OK",
"@ok": {"description": "Generic OK button label."},
"inputField": "Input field",
"@inputField": {"description": "Accessibility label describing an input field."},
"captureDocumentOrImage": "Capture a document or image",
"@captureDocumentOrImage": {"description": "Action to capture a document or image using camera."},
"checkConnection": "Check Connection",
"@checkConnection": {"description": "CTA to verify network connectivity."},
"openSettings": "Open Settings",
"@openSettings": {"description": "CTA to open device or app settings."},
"chooseDifferentFile": "Choose Different File",
"@chooseDifferentFile": {"description": "CTA to pick an alternative file."},
"goBack": "Go Back",
"@goBack": {"description": "CTA to navigate back."},
"technicalDetails": "Technical Details",
"@technicalDetails": {"description": "Expandable section label to show error details or logs."},
"save": "Save",
"@save": {"description": "Primary action to save changes."},
"chooseModel": "Choose Model",
"@chooseModel": {"description": "Button/label to choose a model."},
"reviewerMode": "REVIEWER MODE",
"@reviewerMode": {"description": "Developer/reviewer mode indicator."},
"selectLanguage": "Select Language",
"@selectLanguage": {"description": "Dialog title to pick application language."},
"newFolder": "New Folder",
"@newFolder": {"description": "Action to create a new folder."},
"folderName": "Folder name",
"@folderName": {"description": "Label for entering a folder's name."},
"newChat": "New Chat",
"@newChat": {"description": "Action to start a new chat."},
"more": "More",
"@more": {"description": "Opens additional actions or content."},
"clear": "Clear",
"@clear": {"description": "Action to clear input or selection."},
"searchHint": "Search...",
"@searchHint": {"description": "Generic search input hint."},
"searchConversations": "Search conversations...",
"@searchConversations": {"description": "Search input hint scoped to conversations."},
"create": "Create",
"@create": {"description": "Primary action to create a resource."},
"folderCreated": "Folder created",
"@folderCreated": {"description": "Toast/notice after successfully creating a folder."},
"failedToCreateFolder": "Failed to create folder",
"@failedToCreateFolder": {"description": "Error notice when folder creation fails."},
"movedChatToFolder": "Moved \"{title}\" to \"{folder}\"",
"@movedChatToFolder": {
"description": "Toast indicating a chat titled {title} was moved to folder {folder}.",
"placeholders": {
"title": {"type": "String"},
"folder": {"type": "String"}
}
},
"failedToMoveChat": "Failed to move chat",
"@failedToMoveChat": {"description": "Error notice when moving a chat fails."},
"failedToLoadChats": "Failed to load chats",
"@failedToLoadChats": {"description": "Error notice when fetching chat list fails."},
"failedToUpdatePin": "Failed to update pin",
"@failedToUpdatePin": {"description": "Error notice when updating pin star/flag fails."},
"failedToDeleteChat": "Failed to delete chat",
"@failedToDeleteChat": {"description": "Error notice when deleting a chat fails."},
"manage": "Manage",
"@manage": {"description": "Context action to manage an item."},
"rename": "Rename",
"@rename": {"description": "Context action to rename an item."},
"delete": "Delete",
"@delete": {"description": "Context action to delete an item."},
"renameChat": "Rename Chat",
"@renameChat": {"description": "Dialog title to rename a chat."},
"enterChatName": "Enter chat name",
"@enterChatName": {"description": "Input hint/label for new chat name."},
"failedToRenameChat": "Failed to rename chat",
"@failedToRenameChat": {"description": "Error notice when renaming chat fails."},
"failedToUpdateArchive": "Failed to update archive",
"@failedToUpdateArchive": {"description": "Error notice when archiving/unarchiving fails."},
"unarchive": "Unarchive",
"@unarchive": {"description": "Action to unarchive an item."},
"archive": "Archive",
"@archive": {"description": "Action to archive an item."},
"pin": "Pin",
"@pin": {"description": "Action to pin/star an item."},
"unpin": "Unpin",
"@unpin": {"description": "Action to remove pin from an item."},
"recent": "Recent",
"@recent": {"description": "List filter for recently used items."},
"system": "System",
"@system": {"description": "Option indicating the device/system default."},
"english": "English",
"@english": {"description": "Language name: English."},
"deutsch": "Deutsch",
"@deutsch": {"description": "Language name: German."},
"francais": "Français",
"@francais": {"description": "Language name: French."},
"italiano": "Italiano",
"@italiano": {"description": "Language name: Italian."},
"espanol": "Español",
"@espanol": {"description": "Language name: Spanish."},
"nederlands": "Nederlands",
"@nederlands": {"description": "Language name: Dutch."},
"russian": "Русский",
"@russian": {"description": "Language name: Russian."},
"chinese": "中文",
"@chinese": {"description": "Language name: Chinese."},
"deleteMessagesTitle": "Delete Messages",
"@deleteMessagesTitle": {"description": "Dialog title asking to confirm deletion of messages."},
"deleteMessagesMessage": "Delete {count} messages?",
"@deleteMessagesMessage": {
"description": "Confirmation prompt asking to delete a number of messages.",
"placeholders": {
"count": {"type": "int"}
}
},
"routeNotFound": "Route not found: {routeName}",
"@routeNotFound": {
"description": "Displayed when navigation fails to find a route name.",
"placeholders": {
"routeName": {"type": "String"}
}
},
"deleteChatTitle": "Delete Chat",
"@deleteChatTitle": {"description": "Dialog title asking to confirm deletion of a chat."},
"deleteChatMessage": "This chat will be permanently deleted.",
"@deleteChatMessage": {"description": "Warning that deleting a chat cannot be undone."},
"deleteFolderTitle": "Delete Folder",
"@deleteFolderTitle": {"description": "Dialog title asking to confirm deletion of a folder."},
"deleteFolderMessage": "This folder and its assignment references will be removed.",
"@deleteFolderMessage": {"description": "Warning that deleting a folder will remove it and its associations."},
"failedToDeleteFolder": "Failed to delete folder",
"@failedToDeleteFolder": {"description": "Error notice when deleting a folder fails."},
"aboutApp": "About App",
"@aboutApp": {"description": "Settings tile title to view app information."},
"aboutAppSubtitle": "Conduit information and links",
"@aboutAppSubtitle": {"description": "Subtitle/description for the About section."},
"web": "Web",
"@web": {"description": "Tab/section label for web features."},
"imageGen": "Image Gen",
"@imageGen": {"description": "Short label for image generation section/tab."},
"pinned": "Pinned",
"@pinned": {"description": "Filter/tab for pinned items."},
"folders": "Folders",
"@folders": {"description": "Tab listing chat folders."},
"archived": "Archived",
"@archived": {"description": "Filter/tab for archived chats."},
"appLanguage": "App Language",
"@appLanguage": {"description": "Label for choosing the app's display language."},
"darkMode": "Dark Mode",
"@darkMode": {"description": "Label for toggling dark theme."},
"webSearch": "Web Search",
"@webSearch": {"description": "Feature toggle/section for web search."},
"webSearchDescription": "Search the web and cite sources in replies.",
"@webSearchDescription": {"description": "Explains that responses can include citations from the web."},
"imageGeneration": "Image Generation",
"@imageGeneration": {"description": "Feature toggle/section for image generation."},
"imageGenerationDescription": "Create images from your prompts.",
"@imageGenerationDescription": {"description": "Explains creating images via model prompts."},
"copy": "Copy",
"@copy": {"description": "Action to copy text to clipboard."},
"ttsListen": "Listen",
"@ttsListen": {
"description": "Action to play the assistant message using text to speech"
},
"ttsStop": "Stop",
"@ttsStop": {
"description": "Action to stop text to speech playback"
},
"edit": "Edit",
"@edit": {"description": "Action to edit an item/message."},
"regenerate": "Regenerate",
"@regenerate": {"description": "Action to request a new assistant response."},
"noConversationsYet": "No conversations yet",
"@noConversationsYet": {"description": "Empty state when the user has no chats."}
,
"usernameOrEmailHint": "Enter your username or email",
"@usernameOrEmailHint": {"description": "Hint text for username/email input."},
"passwordHint": "Enter your password",
"@passwordHint": {"description": "Hint text for password input."},
"enterApiKey": "Enter your API key",
"@enterApiKey": {"description": "Hint text for API key input."},
"signingIn": "Signing in...",
"@signingIn": {"description": "Status message shown while signing in."},
"advancedSettings": "Advanced Settings",
"@advancedSettings": {"description": "Section that contains additional/optional configuration."},
"customHeaders": "Custom Headers",
"@customHeaders": {"description": "Section title for adding custom HTTP headers."},
"customHeadersDescription": "Add custom HTTP headers for authentication, API keys, or special server requirements.",
"@customHeadersDescription": {"description": "Helper text explaining use-cases for custom headers."},
"allowSelfSignedCertificates": "Trust self-signed certificates",
"@allowSelfSignedCertificates": {
"description": "Toggle label that allows trusting self-signed TLS certificates for the configured server."
},
"allowSelfSignedCertificatesDescription": "Accept this server's TLS certificate even if it is self-signed. Enable only for servers you trust.",
"@allowSelfSignedCertificatesDescription": {
"description": "Helper text clarifying the risks of enabling the self-signed certificate toggle."
},
"headerNameEmpty": "Header name cannot be empty",
"@headerNameEmpty": {"description": "Validation message for empty header name."},
"headerNameTooLong": "Header name too long (max 64 characters)",
"@headerNameTooLong": {"description": "Validation message for header name length."},
"headerNameInvalidChars": "Invalid header name. Use only letters, numbers, and these symbols: !#$&-^_`|~",
"@headerNameInvalidChars": {"description": "Validation message for invalid characters in header name."},
"headerNameReserved": "Cannot override reserved header \"{key}\"",
"@headerNameReserved": {
"description": "Error when attempting to override a reserved HTTP header {key}.",
"placeholders": {"key": {"type": "String"}}
},
"headerValueEmpty": "Header value cannot be empty",
"@headerValueEmpty": {"description": "Validation message for empty header value."},
"headerValueTooLong": "Header value too long (max 1024 characters)",
"@headerValueTooLong": {"description": "Validation message for header value length."},
"headerValueInvalidChars": "Header value contains invalid characters. Use only printable ASCII.",
"@headerValueInvalidChars": {"description": "Validation message for invalid characters in header value."},
"headerValueUnsafe": "Header value appears to contain potentially unsafe content",
"@headerValueUnsafe": {"description": "Security warning for suspicious header values."},
"headerAlreadyExists": "Header \"{key}\" already exists. Remove it first to update.",
"@headerAlreadyExists": {
"description": "Error when a custom header with key {key} already exists.",
"placeholders": {"key": {"type": "String"}}
},
"maxHeadersReachedDetail": "Maximum of 10 custom headers allowed. Remove some to add more.",
"@maxHeadersReachedDetail": {"description": "Explains the upper limit of custom headers."}
,
"editMessage": "Edit Message",
"@editMessage": {"description": "Action to edit a previously sent message."}
,
"noModelsAvailable": "No models available",
"@noModelsAvailable": {"description": "Shown when model list is empty or failed to load."},
"followingSystem": "Following system: {theme}",
"@followingSystem": {
"description": "Indicates the app is following the system theme (\"Dark\"/\"Light\").",
"placeholders": {"theme": {"type": "String"}}
},
"themeDark": "Dark",
"@themeDark": {"description": "Theme label for dark appearance."},
"themePalette": "Accent palette",
"@themePalette": {"description": "Title for selecting the app color palette."},
"themePaletteDescription": "Choose the accent colors used for buttons, cards, and chat bubbles.",
"@themePaletteDescription": {"description": "Helper text explaining palette selection."},
"themeLight": "Light",
"@themeLight": {"description": "Theme label for light appearance."},
"currentlyUsingDarkTheme": "Currently using Dark theme",
"@currentlyUsingDarkTheme": {"description": "Status text indicating dark theme is active."},
"currentlyUsingLightTheme": "Currently using Light theme",
"@currentlyUsingLightTheme": {"description": "Status text indicating light theme is active."},
"aboutConduit": "About Conduit",
"@aboutConduit": {"description": "Dialog title for app information."},
"versionLabel": "Version: {version} ({build})",
"@versionLabel": {
"description": "Displays version and build number in the About dialog.",
"placeholders": {"version": {"type": "String"}, "build": {"type": "String"}}
},
"githubRepository": "GitHub Repository",
"@githubRepository": {"description": "Link label pointing to the app repository."},
"unableToLoadAppInfo": "Unable to load app info",
"@unableToLoadAppInfo": {"description": "Error text when package info cannot be retrieved."},
"thinking": "Thinking…",
"@thinking": {"description": "Label shown while the assistant is reasoning."},
"thoughts": "Thoughts",
"@thoughts": {"description": "Section title for showing reasoning content."},
"thoughtForDuration": "Thought for {duration}",
"@thoughtForDuration": {
"description": "Shows how long the assistant thought before replying.",
"placeholders": {"duration": {"type": "String", "example": "3s"}}
}
,
"appCustomization": "App Customization",
"@appCustomization": {"description": "Title of the customization settings page."},
"appCustomizationSubtitle": "Personalize how names and UI display",
"@appCustomizationSubtitle": {"description": "Subtitle shown under App Customization tile and page header."},
"quickActionsDescription": "Pick up to two shortcuts to pin near the composer",
"@quickActionsDescription": {"description": "Helper text explaining quick action pill selection in customization."},
"chatSettings": "Chat",
"@chatSettings": {"description": "Section header for chat-related customization options."},
"sendOnEnter": "Send on Enter",
"@sendOnEnter": {"description": "Toggle title for sending messages when pressing Enter."},
"sendOnEnterDescription": "Enter sends (soft keyboard). Cmd/Ctrl+Enter also available",
"@sendOnEnterDescription": {
"description": "Explanation of how the Send on Enter toggle behaves."
},
"display": "Display",
"@display": {"description": "Section header for visual and layout related settings."},
"realtime": "Realtime",
"@realtime": {"description": "Section header for realtime/transport settings."},
"transportMode": "Transport mode",
"@transportMode": {"description": "Title for selecting the networking transport used for realtime."},
"transportModeDescription": "Choose how the app connects for realtime updates.",
"@transportModeDescription": {"description": "Helper text explaining the transport setting."},
"mode": "Mode",
"@mode": {"description": "Form field label for transport mode dropdown."},
"transportModeAuto": "Auto (Polling + WebSocket)",
"@transportModeAuto": {"description": "Dropdown option label for automatic transport selection."},
"transportModeWs": "WebSocket only",
"@transportModeWs": {"description": "Dropdown option label for WebSocket-only transport."},
"transportModeAutoInfo": "More robust on restrictive networks. Upgrades to WebSocket when possible.",
"@transportModeAutoInfo": {"description": "Footnote text for the Auto transport mode."},
"transportModeWsInfo": "Lower overhead, but may fail behind strict proxies/firewalls."
,
"@transportModeWsInfo": {"description": "Footnote text for the WebSocket-only transport mode."}
}