2025-08-23 20:09:43 +05:30
|
|
|
|
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, you’ll need to edit this
|
|
|
|
|
|
/// file.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// First, open your project’s ios/Runner.xcworkspace Xcode workspace file.
|
|
|
|
|
|
/// Then, in the Project Navigator, open the Info.plist file under the Runner
|
|
|
|
|
|
/// project’s 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());
|
2025-08-23 20:09:43 +05:30
|
|
|
|
|
|
|
|
|
|
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();
|
2025-08-23 20:09:43 +05:30
|
|
|
|
|
|
|
|
|
|
/// 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,
|
|
|
|
|
|
];
|
2025-08-23 20:09:43 +05:30
|
|
|
|
|
|
|
|
|
|
/// 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'),
|
2025-08-23 20:09:43 +05:30
|
|
|
|
Locale('fr'),
|
2025-09-07 12:22:02 +05:30
|
|
|
|
Locale('it'),
|
2025-08-23 20:09:43 +05:30
|
|
|
|
];
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Application name displayed in the app and OS UI.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Retry'**
|
|
|
|
|
|
String get retry;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Back navigation label/tooltip.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Back'**
|
|
|
|
|
|
String get back;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Profile tab title.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'You'**
|
|
|
|
|
|
String get you;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Progress message while fetching profile data.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Please check your connection and try again'**
|
|
|
|
|
|
String get pleaseCheckConnection;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Section header for account-related options.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Account'**
|
|
|
|
|
|
String get account;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Button/title for signing out of the app.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Login'**
|
|
|
|
|
|
String get loginButton;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Generic settings menu item label.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Close'**
|
|
|
|
|
|
String get closeButtonSemantic;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Shown while loading page content.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'No items'**
|
|
|
|
|
|
String get noItems;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Alternative empty-state description.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Workspace'**
|
|
|
|
|
|
String get workspace;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Header for recently accessed files.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Recent Files'**
|
|
|
|
|
|
String get recentFiles;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Section for knowledge base content.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Upload your first file'**
|
|
|
|
|
|
String get uploadFirstFile;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Empty state title for the knowledge base section.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Document'**
|
|
|
|
|
|
String get document;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Helper hint listing supported document types.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Credentials'**
|
|
|
|
|
|
String get credentials;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Label for API key input field.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Header Name'**
|
|
|
|
|
|
String get headerName;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Label for custom header value.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Login failed'**
|
|
|
|
|
|
String get loginFailed;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Detailed message when authentication fails.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Skip'**
|
|
|
|
|
|
String get skip;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Onboarding: go to the next step.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Next'**
|
|
|
|
|
|
String get next;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Onboarding: finish the flow.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Done'**
|
|
|
|
|
|
String get done;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Onboarding card: start chatting title.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Start a conversation'**
|
|
|
|
|
|
String get onboardStartTitle;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Onboarding card: brief guidance to begin a chat.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Choose a model, then type below to begin. Tap New Chat anytime.'**
|
|
|
|
|
|
String get onboardStartSubtitle;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Bullet: how to switch models.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
2025-08-26 17:01:46 +05:30
|
|
|
|
/// **'Add context'**
|
2025-08-23 20:09:43 +05:30
|
|
|
|
String get onboardAttachTitle;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Onboarding card: why attaching context helps.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
2025-08-26 17:01:46 +05:30
|
|
|
|
/// **'Ground replies with content from Workspace or photos.'**
|
2025-08-23 20:09:43 +05:30
|
|
|
|
String get onboardAttachSubtitle;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Bullet: types of workspace files.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
2025-08-26 17:01:46 +05:30
|
|
|
|
/// **'Workspace: PDFs, docs, datasets'**
|
2025-08-23 20:09:43 +05:30
|
|
|
|
String get onboardAttachBullet1;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Bullet: photo sources supported.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
2025-08-26 17:01:46 +05:30
|
|
|
|
/// **'Photos: camera or library'**
|
2025-08-23 20:09:43 +05:30
|
|
|
|
String get onboardAttachBullet2;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Onboarding card: voice input title.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
2025-08-26 17:01:46 +05:30
|
|
|
|
/// **'Open the menu to switch between Chats, Workspace, and Profile.'**
|
2025-08-23 20:09:43 +05:30
|
|
|
|
String get onboardQuickSubtitle;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Bullet: menu access to sections.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
2025-08-26 17:01:46 +05:30
|
|
|
|
/// **'Tap the menu to access Chats, Workspace, Profile'**
|
2025-08-23 20:09:43 +05:30
|
|
|
|
String get onboardQuickBullet1;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Bullet: actions available in the top bar.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
2025-08-26 17:01:46 +05:30
|
|
|
|
/// **'Start New Chat or manage models from the top bar'**
|
2025-08-23 20:09:43 +05:30
|
|
|
|
String get onboardQuickBullet2;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Button to add an attachment (file/photo).
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Add attachment'**
|
|
|
|
|
|
String get addAttachment;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Header for a tools/actions section.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Tools'**
|
|
|
|
|
|
String get tools;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Label for voice input feature.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Voice input'**
|
|
|
|
|
|
String get voiceInput;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Accessibility label for the message input.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Message...'**
|
|
|
|
|
|
String get messageHintText;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Action to stop the assistant's response generation.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Send'**
|
|
|
|
|
|
String get send;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Semantic label for sending a message.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Photo'**
|
|
|
|
|
|
String get photo;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Camera source label.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Empty image data'**
|
|
|
|
|
|
String get emptyImageData;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Banner warning when device is offline.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'You\'re offline. Some features may be limited.'**
|
|
|
|
|
|
String get offlineBanner;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Informational text explaining internet requirement.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Confirm'**
|
|
|
|
|
|
String get confirm;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Cancel button label.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Cancel'**
|
|
|
|
|
|
String get cancel;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Generic OK button label.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'OK'**
|
|
|
|
|
|
String get ok;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Accessibility label describing an input field.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Choose Different File'**
|
|
|
|
|
|
String get chooseDifferentFile;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// CTA to navigate back.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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;
|
|
|
|
|
|
|
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 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 App'**
|
|
|
|
|
|
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-08-26 17:11:10 +05:30
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Hint shown in empty chat input area.
|
2025-08-26 17:11:10 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Type below to begin'**
|
|
|
|
|
|
String get typeBelowToBegin;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Tab/section label for web features.
|
2025-08-26 17:11:10 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-26 17:11:10 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Image Gen'**
|
|
|
|
|
|
String get imageGen;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Filter/tab for pinned items.
|
2025-08-26 17:11:10 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Pinned'**
|
|
|
|
|
|
String get pinned;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Tab listing chat folders.
|
2025-08-26 17:11:10 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Folders'**
|
|
|
|
|
|
String get folders;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Filter/tab for archived chats.
|
2025-08-26 17:11:10 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-26 17:11:10 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
2025-09-07 11:29:29 +05:30
|
|
|
|
/// **'App Language'**
|
2025-08-26 17:11:10 +05:30
|
|
|
|
String get appLanguage;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Label for toggling dark theme.
|
2025-08-26 17:11:10 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
2025-09-07 11:29:29 +05:30
|
|
|
|
/// **'Dark Mode'**
|
2025-08-26 17:11:10 +05:30
|
|
|
|
String get darkMode;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Feature toggle/section for web search.
|
2025-08-26 17:11:10 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-26 17:11:10 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-26 17:11:10 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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.
|
2025-08-26 17:11:10 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// 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-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;
|
|
|
|
|
|
|
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;
|
|
|
|
|
|
|
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:
|
|
|
|
|
|
/// **'App Customization'**
|
|
|
|
|
|
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:
|
|
|
|
|
|
/// **'Personalize how names and UI display'**
|
|
|
|
|
|
String get appCustomizationSubtitle;
|
|
|
|
|
|
|
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
|
|
|
|
/// Toggle label to hide the provider prefix in model names (e.g., show gpt-4o instead of openai/gpt-4o).
|
2025-09-07 11:29:29 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Hide provider in model names'**
|
|
|
|
|
|
String get hideProviderInModelNames;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Helper text for provider hiding toggle.
|
2025-09-07 11:29:29 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Show names like \"gpt-4o\" instead of \"openai/gpt-4o\".'**
|
|
|
|
|
|
String get hideProviderInModelNamesDescription;
|
|
|
|
|
|
|
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;
|
2025-08-23 20:09:43 +05:30
|
|
|
|
}
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
class _AppLocalizationsDelegate
|
|
|
|
|
|
extends LocalizationsDelegate<AppLocalizations> {
|
2025-08-23 20:09:43 +05:30
|
|
|
|
const _AppLocalizationsDelegate();
|
|
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
|
Future<AppLocalizations> load(Locale locale) {
|
|
|
|
|
|
return SynchronousFuture<AppLocalizations>(lookupAppLocalizations(locale));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@override
|
2025-09-07 12:22:02 +05:30
|
|
|
|
bool isSupported(Locale locale) =>
|
|
|
|
|
|
<String>['de', 'en', 'fr', 'it'].contains(locale.languageCode);
|
2025-08-23 20:09:43 +05:30
|
|
|
|
|
|
|
|
|
|
@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 'fr':
|
|
|
|
|
|
return AppLocalizationsFr();
|
|
|
|
|
|
case 'it':
|
|
|
|
|
|
return AppLocalizationsIt();
|
2025-08-23 20:09:43 +05:30
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
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.',
|
2025-08-23 20:09:43 +05:30
|
|
|
|
);
|
|
|
|
|
|
}
|