- Added support for self-signed TLS certificates in the ApiService, allowing configuration based on server settings. - Introduced a toggle in the ServerConnectionPage to enable or disable trusting self-signed certificates. - Updated localization files to include new strings for self-signed certificate settings in multiple languages. - Enhanced the OptimizedStorageService to manage trusted servers based on user preferences for self-signed certificates. - Improved error handling and logging throughout the affected services to ensure clarity and maintainability.
665 lines
36 KiB
Plaintext
665 lines
36 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."},
|
|
"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."}
|
|
}
|