Files
iiEsaywebUIapp/lib/l10n/app_localizations.dart
cogwheel0 072453d588 refactor: remove omitProviderInModelName functionality and related localization
- Removed the omitProviderInModelName key from PreferenceKeys and its associated logic throughout the codebase.
- Updated SettingsService and AppSettings to eliminate references to the omitted provider functionality.
- Cleaned up related localization strings in multiple languages to reflect the removal of this feature.
- Enhanced code clarity and maintainability by streamlining settings management.
2025-10-04 23:43:35 +05:30

1679 lines
45 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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_fr.dart';
import 'app_localizations_it.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 {
AppLocalizations(String locale)
: localeName = intl.Intl.canonicalizedLocale(locale.toString());
final String localeName;
static AppLocalizations? of(BuildContext context) {
return Localizations.of<AppLocalizations>(context, AppLocalizations);
}
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.
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'),
Locale('de'),
Locale('fr'),
Locale('it'),
];
/// Application name displayed in the app and OS UI.
///
/// In en, this message translates to:
/// **'Conduit'**
String get appTitle;
/// Shown if the app fails to initialize critical services.
///
/// In en, this message translates to:
/// **'Initialization Failed'**
String get initializationFailed;
/// Button label to try an action again.
///
/// In en, this message translates to:
/// **'Retry'**
String get retry;
/// Back navigation label/tooltip.
///
/// In en, this message translates to:
/// **'Back'**
String get back;
/// Profile tab title.
///
/// In en, this message translates to:
/// **'You'**
String get you;
/// Progress message while fetching profile data.
///
/// In en, this message translates to:
/// **'Loading profile...'**
String get loadingProfile;
/// Error title shown when profile request fails.
///
/// In en, this message translates to:
/// **'Unable to load profile'**
String get unableToLoadProfile;
/// 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;
/// Section header for account-related options.
///
/// In en, this message translates to:
/// **'Account'**
String get account;
/// 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;
/// Button/title for signing out of the app.
///
/// In en, this message translates to:
/// **'Sign Out'**
String get signOut;
/// Subtitle explaining the sign-out action.
///
/// In en, this message translates to:
/// **'End your session'**
String get endYourSession;
/// Label for choosing a default AI model.
///
/// In en, this message translates to:
/// **'Default Model'**
String get defaultModel;
/// Option to let the app pick a suitable model automatically.
///
/// In en, this message translates to:
/// **'Auto-select'**
String get autoSelect;
/// Progress message while fetching model list.
///
/// In en, this message translates to:
/// **'Loading models...'**
String get loadingModels;
/// Error message shown when model list cannot be retrieved.
///
/// In en, this message translates to:
/// **'Failed to load models'**
String get failedToLoadModels;
/// Header above a list of models to select from.
///
/// In en, this message translates to:
/// **'Available Models'**
String get availableModels;
/// Shown when a search returns no matches.
///
/// In en, this message translates to:
/// **'No results'**
String get noResults;
/// Hint text for model search input.
///
/// In en, this message translates to:
/// **'Search models...'**
String get searchModels;
/// Generic error message for unexpected failures.
///
/// In en, this message translates to:
/// **'Something went wrong. Please try again.'**
String get errorMessage;
/// Button text for the login action.
///
/// In en, this message translates to:
/// **'Login'**
String get loginButton;
/// 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);
/// Accessible label for a generic Close button.
///
/// In en, this message translates to:
/// **'Close'**
String get closeButtonSemantic;
/// Shown while loading page content.
///
/// In en, this message translates to:
/// **'Loading content'**
String get loadingContent;
/// Placeholder text when a list is empty.
///
/// In en, this message translates to:
/// **'No items'**
String get noItems;
/// Alternative empty-state description.
///
/// In en, this message translates to:
/// **'No items to display'**
String get noItemsToDisplay;
/// Button label to load additional items in a paged list.
///
/// In en, this message translates to:
/// **'Load More'**
String get loadMore;
/// Section/tab label for documents and files.
///
/// In en, this message translates to:
/// **'Workspace'**
String get workspace;
/// Header for recently accessed files.
///
/// In en, this message translates to:
/// **'Recent Files'**
String get recentFiles;
/// Section for knowledge base content.
///
/// In en, this message translates to:
/// **'Knowledge Base'**
String get knowledgeBase;
/// Empty state when no files are present.
///
/// In en, this message translates to:
/// **'No files yet'**
String get noFilesYet;
/// Prompt encouraging users to upload documents.
///
/// In en, this message translates to:
/// **'Upload documents to reference in your conversations with Conduit'**
String get uploadDocsPrompt;
/// CTA to add the first file.
///
/// In en, this message translates to:
/// **'Upload your first file'**
String get uploadFirstFile;
/// Header above list of attached files in compose area.
///
/// In en, this message translates to:
/// **'Attachments'**
String get attachments;
/// Empty state title for the knowledge base section.
///
/// In en, this message translates to:
/// **'Knowledge base is empty'**
String get knowledgeBaseEmpty;
/// Prompt describing the benefit of creating collections.
///
/// In en, this message translates to:
/// **'Create collections of related documents for easy reference'**
String get createCollectionsPrompt;
/// Sheet title to pick camera or photo library.
///
/// In en, this message translates to:
/// **'Choose your source'**
String get chooseSourcePhoto;
/// Action to open camera and capture a new photo.
///
/// In en, this message translates to:
/// **'Take a photo'**
String get takePhoto;
/// Action to pick an existing photo from library.
///
/// In en, this message translates to:
/// **'Choose from your photos'**
String get chooseFromGallery;
/// Generic document label used in UI.
///
/// In en, this message translates to:
/// **'Document'**
String get document;
/// Helper hint listing supported document types.
///
/// In en, this message translates to:
/// **'PDF, Word, or text file'**
String get documentHint;
/// 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);
/// 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;
/// Button/back label to return to server configuration flow.
///
/// In en, this message translates to:
/// **'Back to server setup'**
String get backToServerSetup;
/// Status label indicating a successful server connection.
///
/// In en, this message translates to:
/// **'Connected to Server'**
String get connectedToServer;
/// Button/heading for sign-in flows.
///
/// In en, this message translates to:
/// **'Sign In'**
String get signIn;
/// Instructional text on the sign-in screen.
///
/// In en, this message translates to:
/// **'Enter your credentials to access your AI conversations'**
String get enterCredentials;
/// Header for credential input section.
///
/// In en, this message translates to:
/// **'Credentials'**
String get credentials;
/// Label for API key input field.
///
/// In en, this message translates to:
/// **'API Key'**
String get apiKey;
/// Label for username/email input field.
///
/// In en, this message translates to:
/// **'Username or Email'**
String get usernameOrEmail;
/// Label for password input field.
///
/// In en, this message translates to:
/// **'Password'**
String get password;
/// Alternative sign-in method using an API key.
///
/// In en, this message translates to:
/// **'Sign in with API Key'**
String get signInWithApiKey;
/// Call-to-action button for server connection.
///
/// In en, this message translates to:
/// **'Connect to Server'**
String get connectToServer;
/// 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;
/// Label for server URL field.
///
/// In en, this message translates to:
/// **'Server URL'**
String get serverUrl;
/// Hint text showing example server URL format.
///
/// In en, this message translates to:
/// **'https://your-server.com'**
String get serverUrlHint;
/// 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;
/// Label for custom header key.
///
/// In en, this message translates to:
/// **'Header Name'**
String get headerName;
/// Label for custom header value.
///
/// In en, this message translates to:
/// **'Header Value'**
String get headerValue;
/// 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;
/// Button to add a new custom header row.
///
/// In en, this message translates to:
/// **'Add header'**
String get addHeader;
/// Warning when custom header limit is reached.
///
/// In en, this message translates to:
/// **'Maximum headers reached'**
String get maximumHeadersReached;
/// Action to remove a custom header row.
///
/// In en, this message translates to:
/// **'Remove header'**
String get removeHeader;
/// Status while attempting to connect to server.
///
/// In en, this message translates to:
/// **'Connecting...'**
String get connecting;
/// Primary action button to initiate server connection.
///
/// In en, this message translates to:
/// **'Connect to Server'**
String get connectToServerButton;
/// Banner/text indicating the app runs in demo mode.
///
/// In en, this message translates to:
/// **'Demo Mode Active'**
String get demoModeActive;
/// 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;
/// Button to enter demo mode.
///
/// In en, this message translates to:
/// **'Enter Demo'**
String get enterDemo;
/// Small badge label for demo content.
///
/// In en, this message translates to:
/// **'Demo'**
String get demoBadge;
/// 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;
/// Validation message for empty server URL.
///
/// In en, this message translates to:
/// **'Server URL cannot be empty'**
String get serverUrlEmpty;
/// Validation message when URL format is incorrect.
///
/// In en, this message translates to:
/// **'Invalid URL format. Please check your input.'**
String get invalidUrlFormat;
/// Validation note restricting protocols to HTTP/HTTPS.
///
/// In en, this message translates to:
/// **'Only HTTP and HTTPS protocols are supported.'**
String get onlyHttpHttps;
/// 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;
/// Validation message for allowed port range.
///
/// In en, this message translates to:
/// **'Port must be between 1 and 65535.'**
String get portRange;
/// 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;
/// 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;
/// 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;
/// 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;
/// Note instructing the user to include protocol in URL.
///
/// In en, this message translates to:
/// **'Use http:// or https:// only.'**
String get useHttpOrHttpsOnly;
/// Title for failed login attempts.
///
/// In en, this message translates to:
/// **'Login failed'**
String get loginFailed;
/// Detailed message when authentication fails.
///
/// In en, this message translates to:
/// **'Invalid username or password. Please try again.'**
String get invalidCredentials;
/// 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;
/// Generic server connection failure message.
///
/// In en, this message translates to:
/// **'Unable to connect to server. Please check your connection.'**
String get unableToConnectServer;
/// Timeout while waiting for a server response.
///
/// In en, this message translates to:
/// **'The request timed out. Please try again.'**
String get requestTimedOut;
/// 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;
/// Onboarding: skip current step.
///
/// In en, this message translates to:
/// **'Skip'**
String get skip;
/// Onboarding: go to the next step.
///
/// In en, this message translates to:
/// **'Next'**
String get next;
/// Onboarding: finish the flow.
///
/// In en, this message translates to:
/// **'Done'**
String get done;
/// Onboarding card: start chatting title.
///
/// In en, this message translates to:
/// **'Hello, {username}'**
String onboardStartTitle(String username);
/// Onboarding card: brief guidance to begin a chat.
///
/// In en, this message translates to:
/// **'Choose a model to get started. Tap New Chat anytime.'**
String get onboardStartSubtitle;
/// 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;
/// Bullet: how to reset context.
///
/// In en, this message translates to:
/// **'Use New Chat to reset context'**
String get onboardStartBullet2;
/// Onboarding card: attach context title.
///
/// In en, this message translates to:
/// **'Add context'**
String get onboardAttachTitle;
/// Onboarding card: why attaching context helps.
///
/// In en, this message translates to:
/// **'Ground replies with content from Workspace or photos.'**
String get onboardAttachSubtitle;
/// Bullet: types of workspace files.
///
/// In en, this message translates to:
/// **'Workspace: PDFs, docs, datasets'**
String get onboardAttachBullet1;
/// Bullet: photo sources supported.
///
/// In en, this message translates to:
/// **'Photos: camera or library'**
String get onboardAttachBullet2;
/// Onboarding card: voice input title.
///
/// In en, this message translates to:
/// **'Speak naturally'**
String get onboardSpeakTitle;
/// Onboarding card: how voice input works.
///
/// In en, this message translates to:
/// **'Tap the mic to dictate with live waveform feedback.'**
String get onboardSpeakSubtitle;
/// Bullet: stop dictation preserves text.
///
/// In en, this message translates to:
/// **'Stop anytime; partial text is preserved'**
String get onboardSpeakBullet1;
/// Bullet: benefits of voice input.
///
/// In en, this message translates to:
/// **'Great for quick notes or long prompts'**
String get onboardSpeakBullet2;
/// Onboarding card: quick actions title.
///
/// In en, this message translates to:
/// **'Quick actions'**
String get onboardQuickTitle;
/// 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;
/// Bullet: menu access to sections.
///
/// In en, this message translates to:
/// **'Tap the menu to access Chats, Workspace, Profile'**
String get onboardQuickBullet1;
/// 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;
/// Button to add an attachment (file/photo).
///
/// In en, this message translates to:
/// **'Add attachment'**
String get addAttachment;
/// Header for a tools/actions section.
///
/// In en, this message translates to:
/// **'Tools'**
String get tools;
/// Label for voice input feature.
///
/// In en, this message translates to:
/// **'Voice input'**
String get voiceInput;
/// Accessibility label for the message input.
///
/// In en, this message translates to:
/// **'Message input'**
String get messageInputLabel;
/// Hint shown in the message input field.
///
/// In en, this message translates to:
/// **'Type your message'**
String get messageInputHint;
/// Short placeholder text in the message input.
///
/// In en, this message translates to:
/// **'Message...'**
String get messageHintText;
/// Action to stop the assistant's response generation.
///
/// In en, this message translates to:
/// **'Stop generating'**
String get stopGenerating;
/// Primary action to send a message.
///
/// In en, this message translates to:
/// **'Send'**
String get send;
/// Semantic label for sending a message.
///
/// In en, this message translates to:
/// **'Send message'**
String get sendMessage;
/// A file item or attachment type label.
///
/// In en, this message translates to:
/// **'File'**
String get file;
/// A photo item or attachment type label.
///
/// In en, this message translates to:
/// **'Photo'**
String get photo;
/// Camera source label.
///
/// In en, this message translates to:
/// **'Camera'**
String get camera;
/// Shown when backend API service is unavailable.
///
/// In en, this message translates to:
/// **'API service not available'**
String get apiUnavailable;
/// General failure to load an image.
///
/// In en, this message translates to:
/// **'Unable to load image'**
String get unableToLoadImage;
/// Error when a referenced file is not an image.
///
/// In en, this message translates to:
/// **'Not an image file: {fileName}'**
String notAnImageFile(String fileName);
/// Error including the underlying reason when image loading fails.
///
/// In en, this message translates to:
/// **'Failed to load image: {error}'**
String failedToLoadImage(String error);
/// Error for malformed data: URLs.
///
/// In en, this message translates to:
/// **'Invalid data URL format'**
String get invalidDataUrl;
/// Error when decoding image bytes/base64.
///
/// In en, this message translates to:
/// **'Failed to decode image'**
String get failedToDecodeImage;
/// Error when image type/format is not supported.
///
/// In en, this message translates to:
/// **'Invalid image format'**
String get invalidImageFormat;
/// Error when image data buffer is empty.
///
/// In en, this message translates to:
/// **'Empty image data'**
String get emptyImageData;
/// Informational text explaining internet requirement.
///
/// In en, this message translates to:
/// **'This feature requires an internet connection'**
String get featureRequiresInternet;
/// Queue behavior notice while offline.
///
/// In en, this message translates to:
/// **'Messages will be sent when you\'re back online'**
String get messagesWillSendWhenOnline;
/// Confirmation button label.
///
/// In en, this message translates to:
/// **'Confirm'**
String get confirm;
/// Cancel button label.
///
/// In en, this message translates to:
/// **'Cancel'**
String get cancel;
/// Generic OK button label.
///
/// In en, this message translates to:
/// **'OK'**
String get ok;
/// Accessibility label describing an input field.
///
/// In en, this message translates to:
/// **'Input field'**
String get inputField;
/// Action to capture a document or image using camera.
///
/// In en, this message translates to:
/// **'Capture a document or image'**
String get captureDocumentOrImage;
/// CTA to verify network connectivity.
///
/// In en, this message translates to:
/// **'Check Connection'**
String get checkConnection;
/// CTA to open device or app settings.
///
/// In en, this message translates to:
/// **'Open Settings'**
String get openSettings;
/// CTA to pick an alternative file.
///
/// In en, this message translates to:
/// **'Choose Different File'**
String get chooseDifferentFile;
/// CTA to navigate back.
///
/// In en, this message translates to:
/// **'Go Back'**
String get goBack;
/// Expandable section label to show error details or logs.
///
/// In en, this message translates to:
/// **'Technical Details'**
String get technicalDetails;
/// Primary action to save changes.
///
/// In en, this message translates to:
/// **'Save'**
String get save;
/// Button/label to choose a model.
///
/// In en, this message translates to:
/// **'Choose Model'**
String get chooseModel;
/// Developer/reviewer mode indicator.
///
/// In en, this message translates to:
/// **'REVIEWER MODE'**
String get reviewerMode;
/// Dialog title to pick application language.
///
/// In en, this message translates to:
/// **'Select Language'**
String get selectLanguage;
/// Action to create a new folder.
///
/// In en, this message translates to:
/// **'New Folder'**
String get newFolder;
/// Label for entering a folder's name.
///
/// In en, this message translates to:
/// **'Folder name'**
String get folderName;
/// Action to start a new chat.
///
/// In en, this message translates to:
/// **'New Chat'**
String get newChat;
/// Opens additional actions or content.
///
/// In en, this message translates to:
/// **'More'**
String get more;
/// Action to clear input or selection.
///
/// In en, this message translates to:
/// **'Clear'**
String get clear;
/// Generic search input hint.
///
/// In en, this message translates to:
/// **'Search...'**
String get searchHint;
/// Search input hint scoped to conversations.
///
/// In en, this message translates to:
/// **'Search conversations...'**
String get searchConversations;
/// Primary action to create a resource.
///
/// In en, this message translates to:
/// **'Create'**
String get create;
/// Toast/notice after successfully creating a folder.
///
/// In en, this message translates to:
/// **'Folder created'**
String get folderCreated;
/// Error notice when folder creation fails.
///
/// In en, this message translates to:
/// **'Failed to create folder'**
String get failedToCreateFolder;
/// Toast indicating a chat titled {title} was moved to folder {folder}.
///
/// In en, this message translates to:
/// **'Moved \"{title}\" to \"{folder}\"'**
String movedChatToFolder(String title, String folder);
/// Error notice when moving a chat fails.
///
/// In en, this message translates to:
/// **'Failed to move chat'**
String get failedToMoveChat;
/// Error notice when fetching chat list fails.
///
/// In en, this message translates to:
/// **'Failed to load chats'**
String get failedToLoadChats;
/// Error notice when updating pin star/flag fails.
///
/// In en, this message translates to:
/// **'Failed to update pin'**
String get failedToUpdatePin;
/// Error notice when deleting a chat fails.
///
/// In en, this message translates to:
/// **'Failed to delete chat'**
String get failedToDeleteChat;
/// Context action to manage an item.
///
/// In en, this message translates to:
/// **'Manage'**
String get manage;
/// Context action to rename an item.
///
/// In en, this message translates to:
/// **'Rename'**
String get rename;
/// Context action to delete an item.
///
/// In en, this message translates to:
/// **'Delete'**
String get delete;
/// Dialog title to rename a chat.
///
/// In en, this message translates to:
/// **'Rename Chat'**
String get renameChat;
/// Input hint/label for new chat name.
///
/// In en, this message translates to:
/// **'Enter chat name'**
String get enterChatName;
/// Error notice when renaming chat fails.
///
/// In en, this message translates to:
/// **'Failed to rename chat'**
String get failedToRenameChat;
/// Error notice when archiving/unarchiving fails.
///
/// In en, this message translates to:
/// **'Failed to update archive'**
String get failedToUpdateArchive;
/// Action to unarchive an item.
///
/// In en, this message translates to:
/// **'Unarchive'**
String get unarchive;
/// Action to archive an item.
///
/// In en, this message translates to:
/// **'Archive'**
String get archive;
/// Action to pin/star an item.
///
/// In en, this message translates to:
/// **'Pin'**
String get pin;
/// Action to remove pin from an item.
///
/// In en, this message translates to:
/// **'Unpin'**
String get unpin;
/// List filter for recently used items.
///
/// In en, this message translates to:
/// **'Recent'**
String get recent;
/// Option indicating the device/system default.
///
/// In en, this message translates to:
/// **'System'**
String get system;
/// Language name: English.
///
/// In en, this message translates to:
/// **'English'**
String get english;
/// Language name: German.
///
/// In en, this message translates to:
/// **'Deutsch'**
String get deutsch;
/// Language name: French.
///
/// In en, this message translates to:
/// **'Français'**
String get francais;
/// Language name: Italian.
///
/// In en, this message translates to:
/// **'Italiano'**
String get italiano;
/// Dialog title asking to confirm deletion of messages.
///
/// In en, this message translates to:
/// **'Delete Messages'**
String get deleteMessagesTitle;
/// Confirmation prompt asking to delete a number of messages.
///
/// In en, this message translates to:
/// **'Delete {count} messages?'**
String deleteMessagesMessage(int count);
/// Displayed when navigation fails to find a route name.
///
/// In en, this message translates to:
/// **'Route not found: {routeName}'**
String routeNotFound(String routeName);
/// Dialog title asking to confirm deletion of a chat.
///
/// In en, this message translates to:
/// **'Delete Chat'**
String get deleteChatTitle;
/// Warning that deleting a chat cannot be undone.
///
/// In en, this message translates to:
/// **'This chat will be permanently deleted.'**
String get deleteChatMessage;
/// 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;
/// Settings tile title to view app information.
///
/// In en, this message translates to:
/// **'About App'**
String get aboutApp;
/// Subtitle/description for the About section.
///
/// In en, this message translates to:
/// **'Conduit information and links'**
String get aboutAppSubtitle;
/// Tab/section label for web features.
///
/// In en, this message translates to:
/// **'Web'**
String get web;
/// Short label for image generation section/tab.
///
/// In en, this message translates to:
/// **'Image Gen'**
String get imageGen;
/// Filter/tab for pinned items.
///
/// In en, this message translates to:
/// **'Pinned'**
String get pinned;
/// Tab listing chat folders.
///
/// In en, this message translates to:
/// **'Folders'**
String get folders;
/// Filter/tab for archived chats.
///
/// In en, this message translates to:
/// **'Archived'**
String get archived;
/// Label for choosing the app's display language.
///
/// In en, this message translates to:
/// **'App Language'**
String get appLanguage;
/// Label for toggling dark theme.
///
/// In en, this message translates to:
/// **'Dark Mode'**
String get darkMode;
/// Feature toggle/section for web search.
///
/// In en, this message translates to:
/// **'Web Search'**
String get webSearch;
/// 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;
/// Feature toggle/section for image generation.
///
/// In en, this message translates to:
/// **'Image Generation'**
String get imageGeneration;
/// Explains creating images via model prompts.
///
/// In en, this message translates to:
/// **'Create images from your prompts.'**
String get imageGenerationDescription;
/// Action to copy text to clipboard.
///
/// In en, this message translates to:
/// **'Copy'**
String get copy;
/// 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;
/// Action to edit an item/message.
///
/// In en, this message translates to:
/// **'Edit'**
String get edit;
/// Action to request a new assistant response.
///
/// In en, this message translates to:
/// **'Regenerate'**
String get regenerate;
/// Empty state when the user has no chats.
///
/// In en, this message translates to:
/// **'No conversations yet'**
String get noConversationsYet;
/// Hint text for username/email input.
///
/// In en, this message translates to:
/// **'Enter your username or email'**
String get usernameOrEmailHint;
/// Hint text for password input.
///
/// In en, this message translates to:
/// **'Enter your password'**
String get passwordHint;
/// Hint text for API key input.
///
/// In en, this message translates to:
/// **'Enter your API key'**
String get enterApiKey;
/// Status message shown while signing in.
///
/// In en, this message translates to:
/// **'Signing in...'**
String get signingIn;
/// Section that contains additional/optional configuration.
///
/// In en, this message translates to:
/// **'Advanced Settings'**
String get advancedSettings;
/// Section title for adding custom HTTP headers.
///
/// In en, this message translates to:
/// **'Custom Headers'**
String get customHeaders;
/// Helper text explaining use-cases for custom headers.
///
/// In en, this message translates to:
/// **'Add custom HTTP headers for authentication, API keys, or special server requirements.'**
String get customHeadersDescription;
/// Validation message for empty header name.
///
/// In en, this message translates to:
/// **'Header name cannot be empty'**
String get headerNameEmpty;
/// Validation message for header name length.
///
/// In en, this message translates to:
/// **'Header name too long (max 64 characters)'**
String get headerNameTooLong;
/// Validation message for invalid characters in header name.
///
/// In en, this message translates to:
/// **'Invalid header name. Use only letters, numbers, and these symbols: !#\$&-^_`|~'**
String get headerNameInvalidChars;
/// Error when attempting to override a reserved HTTP header {key}.
///
/// In en, this message translates to:
/// **'Cannot override reserved header \"{key}\"'**
String headerNameReserved(String key);
/// Validation message for empty header value.
///
/// In en, this message translates to:
/// **'Header value cannot be empty'**
String get headerValueEmpty;
/// Validation message for header value length.
///
/// In en, this message translates to:
/// **'Header value too long (max 1024 characters)'**
String get headerValueTooLong;
/// Validation message for invalid characters in header value.
///
/// In en, this message translates to:
/// **'Header value contains invalid characters. Use only printable ASCII.'**
String get headerValueInvalidChars;
/// Security warning for suspicious header values.
///
/// In en, this message translates to:
/// **'Header value appears to contain potentially unsafe content'**
String get headerValueUnsafe;
/// Error when a custom header with key {key} already exists.
///
/// In en, this message translates to:
/// **'Header \"{key}\" already exists. Remove it first to update.'**
String headerAlreadyExists(String key);
/// Explains the upper limit of custom headers.
///
/// In en, this message translates to:
/// **'Maximum of 10 custom headers allowed. Remove some to add more.'**
String get maxHeadersReachedDetail;
/// Action to edit a previously sent message.
///
/// In en, this message translates to:
/// **'Edit Message'**
String get editMessage;
/// Shown when model list is empty or failed to load.
///
/// In en, this message translates to:
/// **'No models available'**
String get noModelsAvailable;
/// Indicates the app is following the system theme ("Dark"/"Light").
///
/// In en, this message translates to:
/// **'Following system: {theme}'**
String followingSystem(String theme);
/// Theme label for dark appearance.
///
/// 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;
/// Theme label for light appearance.
///
/// In en, this message translates to:
/// **'Light'**
String get themeLight;
/// Status text indicating dark theme is active.
///
/// In en, this message translates to:
/// **'Currently using Dark theme'**
String get currentlyUsingDarkTheme;
/// Status text indicating light theme is active.
///
/// In en, this message translates to:
/// **'Currently using Light theme'**
String get currentlyUsingLightTheme;
/// Dialog title for app information.
///
/// In en, this message translates to:
/// **'About Conduit'**
String get aboutConduit;
/// Displays version and build number in the About dialog.
///
/// In en, this message translates to:
/// **'Version: {version} ({build})'**
String versionLabel(String version, String build);
/// Link label pointing to the app repository.
///
/// In en, this message translates to:
/// **'GitHub Repository'**
String get githubRepository;
/// Error text when package info cannot be retrieved.
///
/// In en, this message translates to:
/// **'Unable to load app info'**
String get unableToLoadAppInfo;
/// Label shown while the assistant is reasoning.
///
/// In en, this message translates to:
/// **'Thinking…'**
String get thinking;
/// Section title for showing reasoning content.
///
/// 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);
/// Title of the customization settings page.
///
/// In en, this message translates to:
/// **'App Customization'**
String get appCustomization;
/// Subtitle shown under App Customization tile and page header.
///
/// In en, this message translates to:
/// **'Personalize how names and UI display'**
String get appCustomizationSubtitle;
/// Helper text explaining quick action pill selection in customization.
///
/// In en, this message translates to:
/// **'Pick up to two shortcuts to pin near the composer'**
String get quickActionsDescription;
/// Section header for visual and layout related settings.
///
/// In en, this message translates to:
/// **'Display'**
String get display;
/// Section header for realtime/transport settings.
///
/// In en, this message translates to:
/// **'Realtime'**
String get realtime;
/// Title for selecting the networking transport used for realtime.
///
/// In en, this message translates to:
/// **'Transport mode'**
String get transportMode;
/// Helper text explaining the transport setting.
///
/// In en, this message translates to:
/// **'Choose how the app connects for realtime updates.'**
String get transportModeDescription;
/// Form field label for transport mode dropdown.
///
/// In en, this message translates to:
/// **'Mode'**
String get mode;
/// Dropdown option label for automatic transport selection.
///
/// In en, this message translates to:
/// **'Auto (Polling + WebSocket)'**
String get transportModeAuto;
/// Dropdown option label for WebSocket-only transport.
///
/// In en, this message translates to:
/// **'WebSocket only'**
String get transportModeWs;
/// Footnote text for the Auto transport mode.
///
/// In en, this message translates to:
/// **'More robust on restrictive networks. Upgrades to WebSocket when possible.'**
String get transportModeAutoInfo;
/// Footnote text for the WebSocket-only transport mode.
///
/// In en, this message translates to:
/// **'Lower overhead, but may fail behind strict proxies/firewalls.'**
String get transportModeWsInfo;
}
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', 'fr', 'it'].contains(locale.languageCode);
@override
bool shouldReload(_AppLocalizationsDelegate old) => false;
}
AppLocalizations lookupAppLocalizations(Locale locale) {
// Lookup logic when only language code is specified.
switch (locale.languageCode) {
case 'de':
return AppLocalizationsDe();
case 'en':
return AppLocalizationsEn();
case 'fr':
return AppLocalizationsFr();
case 'it':
return AppLocalizationsIt();
}
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 '
'that was used.',
);
}