Files
iiEsaywebUIapp/lib/l10n/app_localizations.dart

1919 lines
52 KiB
Dart
Raw Normal View History

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