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';
|
2025-10-10 21:38:19 +05:30
|
|
|
|
import 'app_localizations_es.dart';
|
2025-08-23 20:09:43 +05:30
|
|
|
|
import 'app_localizations_fr.dart';
|
|
|
|
|
|
import 'app_localizations_it.dart';
|
2025-11-12 22:12:51 +05:30
|
|
|
|
import 'app_localizations_ko.dart';
|
2025-10-10 21:38:19 +05:30
|
|
|
|
import 'app_localizations_nl.dart';
|
|
|
|
|
|
import 'app_localizations_ru.dart';
|
|
|
|
|
|
import 'app_localizations_zh.dart';
|
2025-08-23 20:09:43 +05:30
|
|
|
|
|
|
|
|
|
|
// 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-10-10 21:38:19 +05:30
|
|
|
|
Locale('zh'),
|
|
|
|
|
|
Locale('ru'),
|
|
|
|
|
|
Locale('nl'),
|
|
|
|
|
|
Locale('es'),
|
2025-11-12 22:12:51 +05:30
|
|
|
|
Locale('ko'),
|
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
|
|
|
|
/// 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-10-01 23:26:12 +05:30
|
|
|
|
/// 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;
|
|
|
|
|
|
|
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-10-02 15:14:34 +05:30
|
|
|
|
/// Section header inviting the user to financially support the project.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Support Conduit'**
|
|
|
|
|
|
String get supportConduit;
|
|
|
|
|
|
|
|
|
|
|
|
/// Subtitle explaining why donations are helpful.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Keep Conduit independent by funding ongoing development.'**
|
|
|
|
|
|
String get supportConduitSubtitle;
|
|
|
|
|
|
|
|
|
|
|
|
/// Tile title linking to the GitHub Sponsors page.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'GitHub Sponsors'**
|
|
|
|
|
|
String get githubSponsorsTitle;
|
|
|
|
|
|
|
|
|
|
|
|
/// Subtitle explaining the impact of recurring sponsorship.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Become a recurring sponsor to fund roadmap items.'**
|
|
|
|
|
|
String get githubSponsorsSubtitle;
|
|
|
|
|
|
|
|
|
|
|
|
/// Tile title linking to the Buy Me a Coffee page.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Buy Me a Coffee'**
|
|
|
|
|
|
String get buyMeACoffeeTitle;
|
|
|
|
|
|
|
|
|
|
|
|
/// Subtitle encouraging one-time donations via Buy Me a Coffee.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Make a one-time donation to say thanks.'**
|
|
|
|
|
|
String get buyMeACoffeeSubtitle;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Button/title for signing out of the app.
|
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-11-02 17:44:23 +05:30
|
|
|
|
/// Capability chip label for models that support multimodal input.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Multimodal'**
|
|
|
|
|
|
String get modelCapabilityMultimodal;
|
|
|
|
|
|
|
|
|
|
|
|
/// Capability chip label for models that support reasoning features.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Reasoning'**
|
|
|
|
|
|
String get modelCapabilityReasoning;
|
|
|
|
|
|
|
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
|
|
|
|
/// 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-11-02 17:44:23 +05:30
|
|
|
|
/// Short loading label used for accessibility.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
2025-11-02 17:44:23 +05:30
|
|
|
|
/// **'Loading'**
|
|
|
|
|
|
String get loadingShort;
|
2025-08-23 20:09:43 +05:30
|
|
|
|
|
2025-11-02 17:44:23 +05:30
|
|
|
|
/// Screen reader announcement when loading a resource.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
2025-11-02 17:44:23 +05:30
|
|
|
|
/// **'Loading: {message}'**
|
|
|
|
|
|
String loadingAnnouncement(String message);
|
2025-08-23 20:09:43 +05:30
|
|
|
|
|
2025-11-02 17:44:23 +05:30
|
|
|
|
/// Screen reader announcement for an error.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
2025-11-02 17:44:23 +05:30
|
|
|
|
/// **'Error: {error}'**
|
|
|
|
|
|
String errorAnnouncement(String error);
|
2025-08-23 20:09:43 +05:30
|
|
|
|
|
2025-11-02 17:44:23 +05:30
|
|
|
|
/// Screen reader announcement for an error with a follow-up suggestion.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
2025-11-02 17:44:23 +05:30
|
|
|
|
/// **'Error: {error}. {suggestion}'**
|
|
|
|
|
|
String errorAnnouncementWithSuggestion(String error, String suggestion);
|
2025-08-23 20:09:43 +05:30
|
|
|
|
|
2025-11-02 17:44:23 +05:30
|
|
|
|
/// Screen reader announcement for successful actions.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
2025-11-02 17:44:23 +05:30
|
|
|
|
/// **'Success: {message}'**
|
|
|
|
|
|
String successAnnouncement(String message);
|
2025-08-23 20:09:43 +05:30
|
|
|
|
|
2025-11-02 17:44:23 +05:30
|
|
|
|
/// Placeholder text when a list is empty.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
2025-11-02 17:44:23 +05:30
|
|
|
|
/// **'No items'**
|
|
|
|
|
|
String get noItems;
|
2025-08-23 20:09:43 +05:30
|
|
|
|
|
2025-11-02 17:44:23 +05:30
|
|
|
|
/// Alternative empty-state description.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
2025-11-02 17:44:23 +05:30
|
|
|
|
/// **'No items to display'**
|
|
|
|
|
|
String get noItemsToDisplay;
|
2025-08-23 20:09:43 +05:30
|
|
|
|
|
2025-11-02 17:44:23 +05:30
|
|
|
|
/// Section for knowledge base content.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
2025-11-02 17:44:23 +05:30
|
|
|
|
/// **'Knowledge Base'**
|
|
|
|
|
|
String get knowledgeBase;
|
2025-08-23 20:09:43 +05:30
|
|
|
|
|
2025-09-13 10:16:58 +05:30
|
|
|
|
/// Header above list of attached files in compose area.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Attachments'**
|
|
|
|
|
|
String get attachments;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// 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
|
|
|
|
/// 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
|
|
|
|
/// 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:
|
2025-09-16 16:24:45 +05:30
|
|
|
|
/// **'Hello, {username}'**
|
|
|
|
|
|
String onboardStartTitle(String username);
|
2025-08-23 20:09:43 +05:30
|
|
|
|
|
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:
|
2025-09-16 20:10:53 +05:30
|
|
|
|
/// **'Choose a model to get started. Tap New Chat anytime.'**
|
2025-08-23 20:09:43 +05:30
|
|
|
|
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-10-05 00:05:58 +05:30
|
|
|
|
/// Label shown beside attachment chips in messages.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Attachment'**
|
|
|
|
|
|
String get attachmentLabel;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Header for a tools/actions section.
|
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-10-05 00:05:58 +05:30
|
|
|
|
/// Title for the voice input bottom sheet.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Voice'**
|
|
|
|
|
|
String get voice;
|
|
|
|
|
|
|
|
|
|
|
|
/// Indicates the app is actively listening during voice input.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Listening…'**
|
|
|
|
|
|
String get voiceStatusListening;
|
|
|
|
|
|
|
|
|
|
|
|
/// Indicates the app is recording audio for speech recognition.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Recording…'**
|
|
|
|
|
|
String get voiceStatusRecording;
|
|
|
|
|
|
|
|
|
|
|
|
/// Toggle label for hold-to-talk mode in voice input.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Hold to talk'**
|
|
|
|
|
|
String get voiceHoldToTalk;
|
|
|
|
|
|
|
|
|
|
|
|
/// Toggle label for automatically sending the final transcript.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Auto-send'**
|
|
|
|
|
|
String get voiceAutoSend;
|
|
|
|
|
|
|
|
|
|
|
|
/// Label above the transcribed voice input text.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Transcript'**
|
|
|
|
|
|
String get voiceTranscript;
|
|
|
|
|
|
|
|
|
|
|
|
/// Placeholder prompting the user to start speaking.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Speak now…'**
|
|
|
|
|
|
String get voicePromptSpeakNow;
|
|
|
|
|
|
|
|
|
|
|
|
/// Placeholder instructing the user to tap Start to begin recording.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Tap Start to begin'**
|
|
|
|
|
|
String get voicePromptTapStart;
|
|
|
|
|
|
|
|
|
|
|
|
/// Button label to stop voice recording.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Stop'**
|
|
|
|
|
|
String get voiceActionStop;
|
|
|
|
|
|
|
|
|
|
|
|
/// Button label to start voice recording.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Start'**
|
|
|
|
|
|
String get voiceActionStart;
|
|
|
|
|
|
|
2025-11-02 17:44:23 +05:30
|
|
|
|
/// Title displayed on the voice call screen.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Voice Call'**
|
|
|
|
|
|
String get voiceCallTitle;
|
|
|
|
|
|
|
|
|
|
|
|
/// Button label to pause a voice call.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Pause'**
|
|
|
|
|
|
String get voiceCallPause;
|
|
|
|
|
|
|
|
|
|
|
|
/// Button label to resume a paused voice call.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Resume'**
|
|
|
|
|
|
String get voiceCallResume;
|
|
|
|
|
|
|
|
|
|
|
|
/// Button label to stop the active voice call.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Stop'**
|
|
|
|
|
|
String get voiceCallStop;
|
|
|
|
|
|
|
|
|
|
|
|
/// Button label to end the voice call session.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'End Call'**
|
|
|
|
|
|
String get voiceCallEnd;
|
|
|
|
|
|
|
|
|
|
|
|
/// Status label shown when the voice call is ready to start.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Ready'**
|
|
|
|
|
|
String get voiceCallReady;
|
|
|
|
|
|
|
|
|
|
|
|
/// Status label shown while the voice call is connecting.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Connecting...'**
|
|
|
|
|
|
String get voiceCallConnecting;
|
|
|
|
|
|
|
|
|
|
|
|
/// Status label shown while the call is listening for input.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Listening'**
|
|
|
|
|
|
String get voiceCallListening;
|
|
|
|
|
|
|
|
|
|
|
|
/// Status label shown when the call is paused.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Paused'**
|
|
|
|
|
|
String get voiceCallPaused;
|
|
|
|
|
|
|
|
|
|
|
|
/// Status label shown while the call processes a response.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Thinking...'**
|
|
|
|
|
|
String get voiceCallProcessing;
|
|
|
|
|
|
|
|
|
|
|
|
/// Status label shown while the assistant is speaking.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Speaking'**
|
|
|
|
|
|
String get voiceCallSpeaking;
|
|
|
|
|
|
|
|
|
|
|
|
/// Status label shown when the voice call has ended or disconnected.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Disconnected'**
|
|
|
|
|
|
String get voiceCallDisconnected;
|
|
|
|
|
|
|
|
|
|
|
|
/// Guidance shown when the voice call encounters an error.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Please check:\n• Microphone permissions are granted\n• Speech recognition is available on your device\n• You are connected to the server'**
|
|
|
|
|
|
String get voiceCallErrorHelp;
|
|
|
|
|
|
|
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:
|
2025-10-18 19:08:21 +05:30
|
|
|
|
/// **'Ask Conduit'**
|
2025-08-23 20:09:43 +05:30
|
|
|
|
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-10-05 00:05:58 +05:30
|
|
|
|
/// Snack bar message confirming code was copied.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Code copied to clipboard.'**
|
|
|
|
|
|
String get codeCopiedToClipboard;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Semantic label for sending a message.
|
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-11-02 17:44:23 +05:30
|
|
|
|
/// Action label prompting the user to pick another file.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Choose Different File'**
|
|
|
|
|
|
String get chooseDifferentFile;
|
|
|
|
|
|
|
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
|
|
|
|
/// Confirmation button label.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Confirm'**
|
|
|
|
|
|
String get confirm;
|
|
|
|
|
|
|
2025-11-02 17:44:23 +05:30
|
|
|
|
/// Button label to continue an action or flow.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Continue'**
|
|
|
|
|
|
String get continueAction;
|
|
|
|
|
|
|
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-11-02 17:44:23 +05:30
|
|
|
|
/// Label for navigating to the previous item.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
2025-11-02 17:44:23 +05:30
|
|
|
|
/// **'Prev'**
|
|
|
|
|
|
String get previousLabel;
|
|
|
|
|
|
|
|
|
|
|
|
/// Label for navigating to the next item.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Next'**
|
|
|
|
|
|
String get nextLabel;
|
2025-08-23 20:09:43 +05:30
|
|
|
|
|
2025-11-02 17:44:23 +05:30
|
|
|
|
/// Accessibility label describing an input field.
|
2025-08-23 20:09:43 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
2025-11-02 17:44:23 +05:30
|
|
|
|
/// **'Input field'**
|
|
|
|
|
|
String get inputField;
|
2025-08-23 20:09:43 +05:30
|
|
|
|
|
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 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-11-02 17:44:23 +05:30
|
|
|
|
/// Label text indicating a required field.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'{label} *'**
|
|
|
|
|
|
String requiredFieldLabel(String label);
|
|
|
|
|
|
|
|
|
|
|
|
/// Helper text indicating that the field is required.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Required field'**
|
|
|
|
|
|
String get requiredFieldHelper;
|
|
|
|
|
|
|
|
|
|
|
|
/// Semantic label when a switch is enabled.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'On'**
|
|
|
|
|
|
String get switchOnLabel;
|
|
|
|
|
|
|
|
|
|
|
|
/// Semantic label when a switch is disabled.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Off'**
|
|
|
|
|
|
String get switchOffLabel;
|
|
|
|
|
|
|
|
|
|
|
|
/// Semantic label describing the dialog title.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Dialog: {title}'**
|
|
|
|
|
|
String dialogSemanticLabel(String title);
|
|
|
|
|
|
|
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
|
|
|
|
/// 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
|
|
|
|
/// 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
|
|
|
|
/// 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-10-12 20:59:05 +05:30
|
|
|
|
/// Language name: Spanish.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Español'**
|
|
|
|
|
|
String get espanol;
|
|
|
|
|
|
|
|
|
|
|
|
/// Language name: Dutch.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Nederlands'**
|
|
|
|
|
|
String get nederlands;
|
|
|
|
|
|
|
|
|
|
|
|
/// Language name: Russian.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Русский'**
|
|
|
|
|
|
String get russian;
|
|
|
|
|
|
|
|
|
|
|
|
/// Language name: Chinese.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'中文'**
|
|
|
|
|
|
String get chinese;
|
|
|
|
|
|
|
2025-11-05 14:00:10 +05:30
|
|
|
|
/// Language name: Korean.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'한국어'**
|
|
|
|
|
|
String get korean;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Dialog title asking to confirm deletion of messages.
|
2025-08-23 23:56:53 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Delete Messages'**
|
|
|
|
|
|
String get deleteMessagesTitle;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Confirmation prompt asking to delete a number of messages.
|
2025-08-23 23:56:53 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Delete {count} messages?'**
|
|
|
|
|
|
String deleteMessagesMessage(int count);
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Displayed when navigation fails to find a route name.
|
2025-08-23 23:56:53 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Route not found: {routeName}'**
|
|
|
|
|
|
String routeNotFound(String routeName);
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Dialog title asking to confirm deletion of a chat.
|
2025-08-23 23:56:53 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Delete Chat'**
|
|
|
|
|
|
String get deleteChatTitle;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Warning that deleting a chat cannot be undone.
|
2025-08-23 23:56:53 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'This chat will be permanently deleted.'**
|
|
|
|
|
|
String get deleteChatMessage;
|
|
|
|
|
|
|
2025-09-07 23:48:47 +05:30
|
|
|
|
/// Dialog title asking to confirm deletion of a folder.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Delete Folder'**
|
|
|
|
|
|
String get deleteFolderTitle;
|
|
|
|
|
|
|
|
|
|
|
|
/// Warning that deleting a folder will remove it and its associations.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'This folder and its assignment references will be removed.'**
|
|
|
|
|
|
String get deleteFolderMessage;
|
|
|
|
|
|
|
|
|
|
|
|
/// Error notice when deleting a folder fails.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Failed to delete folder'**
|
|
|
|
|
|
String get failedToDeleteFolder;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Settings tile title to view app information.
|
2025-08-23 23:56:53 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
2025-10-17 15:09:37 +05:30
|
|
|
|
/// **'About'**
|
2025-08-23 23:56:53 +05:30
|
|
|
|
String get aboutApp;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Subtitle/description for the About section.
|
2025-08-23 23:56:53 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Conduit information and links'**
|
|
|
|
|
|
String get aboutAppSubtitle;
|
2025-08-26 17:11:10 +05:30
|
|
|
|
|
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-20 23:58:18 +05:30
|
|
|
|
/// Action to play the assistant message using text to speech
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Listen'**
|
|
|
|
|
|
String get ttsListen;
|
|
|
|
|
|
|
|
|
|
|
|
/// Action to stop text to speech playback
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Stop'**
|
|
|
|
|
|
String get ttsStop;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Action to edit an item/message.
|
2025-08-28 23:46:32 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Edit'**
|
|
|
|
|
|
String get edit;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Action to request a new assistant response.
|
2025-08-28 23:46:32 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Regenerate'**
|
|
|
|
|
|
String get regenerate;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Empty state when the user has no chats.
|
2025-08-28 23:46:32 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'No conversations yet'**
|
|
|
|
|
|
String get noConversationsYet;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Hint text for username/email input.
|
2025-08-28 23:46:32 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Enter your username or email'**
|
|
|
|
|
|
String get usernameOrEmailHint;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Hint text for password input.
|
2025-08-28 23:46:32 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Enter your password'**
|
|
|
|
|
|
String get passwordHint;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Hint text for API key input.
|
2025-08-28 23:46:32 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Enter your API key'**
|
|
|
|
|
|
String get enterApiKey;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Status message shown while signing in.
|
2025-08-28 23:46:32 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Signing in...'**
|
|
|
|
|
|
String get signingIn;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Section that contains additional/optional configuration.
|
2025-08-28 23:46:32 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Advanced Settings'**
|
|
|
|
|
|
String get advancedSettings;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Section title for adding custom HTTP headers.
|
2025-08-28 23:46:32 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Custom Headers'**
|
|
|
|
|
|
String get customHeaders;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Helper text explaining use-cases for custom headers.
|
2025-08-28 23:46:32 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Add custom HTTP headers for authentication, API keys, or special server requirements.'**
|
|
|
|
|
|
String get customHeadersDescription;
|
|
|
|
|
|
|
2025-10-09 01:49:56 +05:30
|
|
|
|
/// Toggle label that allows trusting self-signed TLS certificates for the configured server.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Trust self-signed certificates'**
|
|
|
|
|
|
String get allowSelfSignedCertificates;
|
|
|
|
|
|
|
|
|
|
|
|
/// Helper text clarifying the risks of enabling the self-signed certificate toggle.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Accept this server\'s TLS certificate even if it is self-signed. Enable only for servers you trust.'**
|
|
|
|
|
|
String get allowSelfSignedCertificatesDescription;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Validation message for empty header name.
|
2025-08-28 23:46:32 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Header name cannot be empty'**
|
|
|
|
|
|
String get headerNameEmpty;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Validation message for header name length.
|
2025-08-28 23:46:32 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Header name too long (max 64 characters)'**
|
|
|
|
|
|
String get headerNameTooLong;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Validation message for invalid characters in header name.
|
2025-08-28 23:46:32 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Invalid header name. Use only letters, numbers, and these symbols: !#\$&-^_`|~'**
|
|
|
|
|
|
String get headerNameInvalidChars;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Error when attempting to override a reserved HTTP header {key}.
|
2025-08-28 23:46:32 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Cannot override reserved header \"{key}\"'**
|
|
|
|
|
|
String headerNameReserved(String key);
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Validation message for empty header value.
|
2025-08-28 23:46:32 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Header value cannot be empty'**
|
|
|
|
|
|
String get headerValueEmpty;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Validation message for header value length.
|
2025-08-28 23:46:32 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Header value too long (max 1024 characters)'**
|
|
|
|
|
|
String get headerValueTooLong;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Validation message for invalid characters in header value.
|
2025-08-28 23:46:32 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Header value contains invalid characters. Use only printable ASCII.'**
|
|
|
|
|
|
String get headerValueInvalidChars;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Security warning for suspicious header values.
|
2025-08-28 23:46:32 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Header value appears to contain potentially unsafe content'**
|
|
|
|
|
|
String get headerValueUnsafe;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Error when a custom header with key {key} already exists.
|
2025-08-28 23:46:32 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Header \"{key}\" already exists. Remove it first to update.'**
|
|
|
|
|
|
String headerAlreadyExists(String key);
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Explains the upper limit of custom headers.
|
2025-08-28 23:46:32 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Maximum of 10 custom headers allowed. Remove some to add more.'**
|
|
|
|
|
|
String get maxHeadersReachedDetail;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// 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-10-02 01:58:12 +05:30
|
|
|
|
/// Title for selecting the app color palette.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Accent palette'**
|
|
|
|
|
|
String get themePalette;
|
|
|
|
|
|
|
2025-11-02 17:44:23 +05:30
|
|
|
|
/// Palette name for the default Conduit theme.
|
2025-10-02 01:58:12 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
2025-11-02 17:44:23 +05:30
|
|
|
|
/// **'Conduit'**
|
|
|
|
|
|
String get themePaletteConduitLabel;
|
|
|
|
|
|
|
|
|
|
|
|
/// Description of the Conduit palette.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Clean neutral theme designed for Conduit.'**
|
|
|
|
|
|
String get themePaletteConduitDescription;
|
|
|
|
|
|
|
|
|
|
|
|
/// Palette name inspired by the Claude web client.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Claude'**
|
|
|
|
|
|
String get themePaletteClaudeLabel;
|
|
|
|
|
|
|
|
|
|
|
|
/// Description of the Claude palette.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Warm, tactile palette lifted from the Claude web client.'**
|
|
|
|
|
|
String get themePaletteClaudeDescription;
|
|
|
|
|
|
|
|
|
|
|
|
/// Palette name inspired by the T3 Stack brand.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'T3 Chat'**
|
|
|
|
|
|
String get themePaletteT3ChatLabel;
|
|
|
|
|
|
|
|
|
|
|
|
/// Description of the T3 Chat palette.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Playful gradients inspired by the T3 Stack brand.'**
|
|
|
|
|
|
String get themePaletteT3ChatDescription;
|
|
|
|
|
|
|
|
|
|
|
|
/// Palette name for Catppuccin colors.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Catppuccin'**
|
|
|
|
|
|
String get themePaletteCatppuccinLabel;
|
|
|
|
|
|
|
|
|
|
|
|
/// Description of the Catppuccin palette.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Soft pastel palette.'**
|
|
|
|
|
|
String get themePaletteCatppuccinDescription;
|
|
|
|
|
|
|
|
|
|
|
|
/// Palette name for Tangerine colors.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Tangerine'**
|
|
|
|
|
|
String get themePaletteTangerineLabel;
|
|
|
|
|
|
|
|
|
|
|
|
/// Description of the Tangerine palette.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Warm orange-and-slate palette.'**
|
|
|
|
|
|
String get themePaletteTangerineDescription;
|
2025-10-02 01:58:12 +05:30
|
|
|
|
|
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:
|
2025-10-17 15:09:37 +05:30
|
|
|
|
/// **'Customization'**
|
2025-09-07 11:29:29 +05:30
|
|
|
|
String get appCustomization;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Subtitle shown under App Customization tile and page header.
|
2025-09-07 11:29:29 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
2025-10-17 15:09:37 +05:30
|
|
|
|
/// **'Theme, language, voice, and quickpills'**
|
2025-09-07 11:29:29 +05:30
|
|
|
|
String get appCustomizationSubtitle;
|
|
|
|
|
|
|
2025-09-20 23:02:59 +05:30
|
|
|
|
/// Helper text explaining quick action pill selection in customization.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
2025-10-19 16:06:20 +05:30
|
|
|
|
/// **'Quickpills in chat'**
|
2025-09-20 23:02:59 +05:30
|
|
|
|
String get quickActionsDescription;
|
|
|
|
|
|
|
2025-11-02 17:44:23 +05:30
|
|
|
|
/// Subtitle indicating how many quick actions are selected.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'{count, plural, =0{No actions selected} one{1 action selected} other{{count} actions selected}}'**
|
|
|
|
|
|
String quickActionsSelectedCount(int count);
|
|
|
|
|
|
|
|
|
|
|
|
/// Explains what the auto-select model setting does.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Let the app choose the best model'**
|
|
|
|
|
|
String get autoSelectDescription;
|
|
|
|
|
|
|
2025-10-05 00:05:58 +05:30
|
|
|
|
/// Section header for chat-related customization options.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Chat'**
|
|
|
|
|
|
String get chatSettings;
|
|
|
|
|
|
|
|
|
|
|
|
/// Toggle title for sending messages when pressing Enter.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Send on Enter'**
|
|
|
|
|
|
String get sendOnEnter;
|
|
|
|
|
|
|
|
|
|
|
|
/// Explanation of how the Send on Enter toggle behaves.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Enter sends (soft keyboard). Cmd/Ctrl+Enter also available'**
|
|
|
|
|
|
String get sendOnEnterDescription;
|
|
|
|
|
|
|
2025-11-02 19:03:58 +05:30
|
|
|
|
/// Section header for speech-to-text settings.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Speech to Text'**
|
|
|
|
|
|
String get sttSettings;
|
|
|
|
|
|
|
|
|
|
|
|
/// Label shown above the speech-to-text engine chips.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Recognition engine'**
|
|
|
|
|
|
String get sttEngineLabel;
|
|
|
|
|
|
|
|
|
|
|
|
/// Chip label for automatic speech-to-text selection.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Auto'**
|
|
|
|
|
|
String get sttEngineAuto;
|
|
|
|
|
|
|
|
|
|
|
|
/// Chip label for on-device speech recognition.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'On device'**
|
|
|
|
|
|
String get sttEngineDevice;
|
|
|
|
|
|
|
|
|
|
|
|
/// Chip label for server speech recognition.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Server'**
|
|
|
|
|
|
String get sttEngineServer;
|
|
|
|
|
|
|
|
|
|
|
|
/// Description shown when automatic speech-to-text preference is active.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Use on-device recognition when available and fall back to your server.'**
|
|
|
|
|
|
String get sttEngineAutoDescription;
|
|
|
|
|
|
|
|
|
|
|
|
/// Description shown when on-device speech-to-text preference is active.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Keep audio on this device. Voice input stops working if on-device speech recognition isn’t supported.'**
|
|
|
|
|
|
String get sttEngineDeviceDescription;
|
|
|
|
|
|
|
|
|
|
|
|
/// Description shown when server speech-to-text preference is active.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
2025-11-02 21:31:13 +05:30
|
|
|
|
/// **'Always send recordings to your OpenWebUI server for transcription.'**
|
2025-11-02 19:03:58 +05:30
|
|
|
|
String get sttEngineServerDescription;
|
|
|
|
|
|
|
|
|
|
|
|
/// Warning shown when the user selects on-device speech recognition but it is unavailable.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'On-device speech recognition isn’t available on this device.'**
|
|
|
|
|
|
String get sttDeviceUnavailableWarning;
|
|
|
|
|
|
|
|
|
|
|
|
/// Warning shown when the user selects server speech recognition but no server is available.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Connect to a server with transcription enabled to use this option.'**
|
|
|
|
|
|
String get sttServerUnavailableWarning;
|
|
|
|
|
|
|
2025-11-05 00:48:20 +05:30
|
|
|
|
/// Label for the silence duration setting in server speech-to-text.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Silence Duration'**
|
|
|
|
|
|
String get sttSilenceDuration;
|
|
|
|
|
|
|
|
|
|
|
|
/// Description for the silence duration slider in server speech-to-text settings.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Time to wait after silence before auto-stopping recording'**
|
|
|
|
|
|
String get sttSilenceDurationDescription;
|
|
|
|
|
|
|
2025-11-02 17:44:23 +05:30
|
|
|
|
/// Label for selecting the text-to-speech engine.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Engine'**
|
|
|
|
|
|
String get ttsEngineLabel;
|
|
|
|
|
|
|
2025-11-02 21:31:13 +05:30
|
|
|
|
/// Chip label for automatically selecting the text-to-speech engine.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Auto'**
|
|
|
|
|
|
String get ttsEngineAuto;
|
|
|
|
|
|
|
2025-11-02 17:44:23 +05:30
|
|
|
|
/// Chip label for using on-device text-to-speech.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'On device'**
|
|
|
|
|
|
String get ttsEngineDevice;
|
|
|
|
|
|
|
|
|
|
|
|
/// Chip label for using server-side text-to-speech.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Server'**
|
|
|
|
|
|
String get ttsEngineServer;
|
|
|
|
|
|
|
2025-11-02 21:31:13 +05:30
|
|
|
|
/// Description shown when automatic text-to-speech preference is active.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Use on-device speech when available and fall back to your server.'**
|
|
|
|
|
|
String get ttsEngineAutoDescription;
|
|
|
|
|
|
|
|
|
|
|
|
/// Description shown when on-device text-to-speech preference is active.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Keep synthesis on this device. Voice playback stops working if on-device TTS isn’t supported.'**
|
|
|
|
|
|
String get ttsEngineDeviceDescription;
|
|
|
|
|
|
|
|
|
|
|
|
/// Description shown when server text-to-speech preference is active.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Always request audio from your OpenWebUI server.'**
|
|
|
|
|
|
String get ttsEngineServerDescription;
|
|
|
|
|
|
|
|
|
|
|
|
/// Warning shown when on-device text-to-speech is unavailable.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'On-device text-to-speech isn’t available on this device.'**
|
|
|
|
|
|
String get ttsDeviceUnavailableWarning;
|
|
|
|
|
|
|
|
|
|
|
|
/// Warning shown when server text-to-speech is unavailable.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Connect to a server with text-to-speech enabled to use this option.'**
|
|
|
|
|
|
String get ttsServerUnavailableWarning;
|
|
|
|
|
|
|
2025-10-17 14:40:44 +05:30
|
|
|
|
/// Section header for TTS-related customization options.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Text to Speech'**
|
|
|
|
|
|
String get ttsSettings;
|
|
|
|
|
|
|
|
|
|
|
|
/// Title for voice selection tile.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Voice'**
|
|
|
|
|
|
String get ttsVoice;
|
|
|
|
|
|
|
|
|
|
|
|
/// Title for speech rate slider.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Speech Rate'**
|
|
|
|
|
|
String get ttsSpeechRate;
|
|
|
|
|
|
|
|
|
|
|
|
/// Title for pitch slider.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Pitch'**
|
|
|
|
|
|
String get ttsPitch;
|
|
|
|
|
|
|
|
|
|
|
|
/// Title for volume slider.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Volume'**
|
|
|
|
|
|
String get ttsVolume;
|
|
|
|
|
|
|
|
|
|
|
|
/// Title for preview button.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Preview Voice'**
|
|
|
|
|
|
String get ttsPreview;
|
|
|
|
|
|
|
|
|
|
|
|
/// Label for system default voice option.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'System Default'**
|
|
|
|
|
|
String get ttsSystemDefault;
|
|
|
|
|
|
|
|
|
|
|
|
/// Title for voice picker bottom sheet.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Select Voice'**
|
|
|
|
|
|
String get ttsSelectVoice;
|
|
|
|
|
|
|
|
|
|
|
|
/// Sample text spoken during voice preview.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'This is a preview of the selected voice.'**
|
|
|
|
|
|
String get ttsPreviewText;
|
|
|
|
|
|
|
|
|
|
|
|
/// Error message when no TTS voices can be found.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'No voices available'**
|
|
|
|
|
|
String get ttsNoVoicesAvailable;
|
|
|
|
|
|
|
|
|
|
|
|
/// Section header for voices matching the app language
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'{language} Voices'**
|
|
|
|
|
|
String ttsVoicesForLanguage(String language);
|
|
|
|
|
|
|
|
|
|
|
|
/// Section header for voices in other languages.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Other Languages'**
|
|
|
|
|
|
String get ttsOtherVoices;
|
|
|
|
|
|
|
|
|
|
|
|
/// Generic error label.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Error'**
|
|
|
|
|
|
String get error;
|
|
|
|
|
|
|
2025-11-02 17:44:23 +05:30
|
|
|
|
/// Error label with appended message text.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Error: {message}'**
|
|
|
|
|
|
String errorWithMessage(String message);
|
|
|
|
|
|
|
|
|
|
|
|
/// User-facing message when a network request times out.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Connection timed out. Please check your internet connection and try again.'**
|
|
|
|
|
|
String get networkTimeoutError;
|
|
|
|
|
|
|
|
|
|
|
|
/// User-facing message when the server cannot be reached.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Cannot reach the server. Please check your server URL and internet connection.'**
|
|
|
|
|
|
String get networkUnreachableError;
|
|
|
|
|
|
|
|
|
|
|
|
/// User-facing message when the server does not respond to a request.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Server is not responding. Please verify the server is running and accessible.'**
|
|
|
|
|
|
String get networkServerNotResponding;
|
|
|
|
|
|
|
|
|
|
|
|
/// Fallback message for generic network errors.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Network connection problem. Please check your internet connection.'**
|
|
|
|
|
|
String get networkGenericError;
|
|
|
|
|
|
|
|
|
|
|
|
/// Message when a 500 error is encountered.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Server is experiencing issues. This is usually temporary.'**
|
|
|
|
|
|
String get serverError500;
|
|
|
|
|
|
|
|
|
|
|
|
/// Message when a 502/503 error is encountered.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Server is temporarily unavailable. Please try again in a moment.'**
|
|
|
|
|
|
String get serverErrorUnavailable;
|
|
|
|
|
|
|
|
|
|
|
|
/// Message when the server times out.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Server took too long to respond. Please try again.'**
|
|
|
|
|
|
String get serverErrorTimeout;
|
|
|
|
|
|
|
|
|
|
|
|
/// Fallback server error message.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Server is having problems. Please try again later.'**
|
|
|
|
|
|
String get serverErrorGeneric;
|
|
|
|
|
|
|
|
|
|
|
|
/// Message when an authentication session expires.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Your session has expired. Please sign in again.'**
|
|
|
|
|
|
String get authSessionExpired;
|
|
|
|
|
|
|
|
|
|
|
|
/// Message when the user lacks required permissions.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'You don\'t have permission to perform this action.'**
|
|
|
|
|
|
String get authForbidden;
|
|
|
|
|
|
|
|
|
|
|
|
/// Message when the authentication token is invalid.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Authentication token is invalid. Please sign in again.'**
|
|
|
|
|
|
String get authInvalidToken;
|
|
|
|
|
|
|
|
|
|
|
|
/// Fallback authentication error message.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Authentication problem. Please sign in again.'**
|
|
|
|
|
|
String get authGenericError;
|
|
|
|
|
|
|
|
|
|
|
|
/// Validation message for invalid email input.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Please enter a valid email address.'**
|
|
|
|
|
|
String get validationInvalidEmail;
|
|
|
|
|
|
|
|
|
|
|
|
/// Validation message for weak passwords.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Password doesn\'t meet requirements. Please check and try again.'**
|
|
|
|
|
|
String get validationWeakPassword;
|
|
|
|
|
|
|
|
|
|
|
|
/// Validation message when required fields are missing.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Please fill in all required fields.'**
|
|
|
|
|
|
String get validationMissingRequired;
|
|
|
|
|
|
|
|
|
|
|
|
/// Validation message for generic formatting issues.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Some information is in the wrong format. Please check and try again.'**
|
|
|
|
|
|
String get validationFormatError;
|
|
|
|
|
|
|
|
|
|
|
|
/// Fallback validation message.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Please check your input and try again.'**
|
|
|
|
|
|
String get validationGenericError;
|
|
|
|
|
|
|
|
|
|
|
|
/// Message when a file cannot be located.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'File not found. It may have been moved or deleted.'**
|
|
|
|
|
|
String get fileNotFound;
|
|
|
|
|
|
|
|
|
|
|
|
/// Message when file access is denied.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Cannot access the file. Please check permissions.'**
|
|
|
|
|
|
String get fileAccessDenied;
|
|
|
|
|
|
|
|
|
|
|
|
/// Message when a file exceeds size limits.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'File is too large. Please choose a smaller file.'**
|
|
|
|
|
|
String get fileTooLarge;
|
|
|
|
|
|
|
|
|
|
|
|
/// Fallback file error message.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Problem with the file. Please try a different file.'**
|
|
|
|
|
|
String get fileGenericError;
|
|
|
|
|
|
|
|
|
|
|
|
/// Message when camera permission is missing.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Camera permission is required. Please enable it in settings.'**
|
|
|
|
|
|
String get permissionCameraRequired;
|
|
|
|
|
|
|
|
|
|
|
|
/// Message when storage permission is missing.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Storage permission is required. Please enable it in settings.'**
|
|
|
|
|
|
String get permissionStorageRequired;
|
|
|
|
|
|
|
|
|
|
|
|
/// Message when microphone permission is missing.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Microphone permission is required. Please enable it in settings.'**
|
|
|
|
|
|
String get permissionMicrophoneRequired;
|
|
|
|
|
|
|
|
|
|
|
|
/// Fallback permission error message.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Permission required. Please check app permissions in settings.'**
|
|
|
|
|
|
String get permissionGenericError;
|
|
|
|
|
|
|
|
|
|
|
|
/// Description for retrying a failed request.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Try the request again.'**
|
|
|
|
|
|
String get actionRetryRequest;
|
|
|
|
|
|
|
|
|
|
|
|
/// Description for checking internet connectivity.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Verify your internet connection.'**
|
|
|
|
|
|
String get actionVerifyConnection;
|
|
|
|
|
|
|
|
|
|
|
|
/// Description for retrying the same operation.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Retry the operation.'**
|
|
|
|
|
|
String get actionRetryOperation;
|
|
|
|
|
|
|
|
|
|
|
|
/// Description suggesting a short delay before retrying.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Wait a moment then try again.'**
|
|
|
|
|
|
String get actionRetryAfterDelay;
|
|
|
|
|
|
|
|
|
|
|
|
/// Description for signing back into the app.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Sign in to your account.'**
|
|
|
|
|
|
String get actionSignInToAccount;
|
|
|
|
|
|
|
|
|
|
|
|
/// Description for choosing a different file.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Select another file.'**
|
|
|
|
|
|
String get actionSelectAnotherFile;
|
|
|
|
|
|
|
|
|
|
|
|
/// Description for opening system or app settings.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Open app settings to grant permissions.'**
|
|
|
|
|
|
String get actionOpenAppSettings;
|
|
|
|
|
|
|
|
|
|
|
|
/// Description for retrying once permissions are granted.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Retry after granting permission.'**
|
|
|
|
|
|
String get actionRetryAfterPermission;
|
|
|
|
|
|
|
|
|
|
|
|
/// Description for navigating back to the prior screen.
|
|
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Return to previous screen.'**
|
|
|
|
|
|
String get actionReturnToPrevious;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Section header for visual and layout related settings.
|
2025-09-07 11:29:29 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Display'**
|
|
|
|
|
|
String get display;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Section header for realtime/transport settings.
|
2025-09-07 11:29:29 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Realtime'**
|
|
|
|
|
|
String get realtime;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// Title for selecting the networking transport used for realtime.
|
2025-09-07 11:29:29 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
|
|
|
|
|
/// **'Transport mode'**
|
|
|
|
|
|
String get transportMode;
|
|
|
|
|
|
|
2025-09-07 12:22:02 +05:30
|
|
|
|
/// 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-10-30 22:32:59 +05:30
|
|
|
|
/// Dropdown option label for HTTP polling fallback transport.
|
2025-09-07 11:29:29 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
2025-10-30 22:32:59 +05:30
|
|
|
|
/// **'Polling fallback'**
|
|
|
|
|
|
String get transportModePolling;
|
2025-09-07 11:29:29 +05:30
|
|
|
|
|
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-10-30 22:32:59 +05:30
|
|
|
|
/// Footnote text for the polling fallback transport mode.
|
2025-09-07 11:29:29 +05:30
|
|
|
|
///
|
|
|
|
|
|
/// In en, this message translates to:
|
2025-10-30 22:32:59 +05:30
|
|
|
|
/// **'Falls back to HTTP polling when WebSocket is blocked. Upgrades to WebSocket when possible.'**
|
|
|
|
|
|
String get transportModePollingInfo;
|
2025-09-07 11:29:29 +05:30
|
|
|
|
|
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-10-10 21:38:19 +05:30
|
|
|
|
bool isSupported(Locale locale) => <String>[
|
|
|
|
|
|
'de',
|
|
|
|
|
|
'en',
|
|
|
|
|
|
'es',
|
|
|
|
|
|
'fr',
|
|
|
|
|
|
'it',
|
2025-11-12 22:12:51 +05:30
|
|
|
|
'ko',
|
2025-10-10 21:38:19 +05:30
|
|
|
|
'nl',
|
|
|
|
|
|
'ru',
|
|
|
|
|
|
'zh',
|
|
|
|
|
|
].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();
|
2025-10-10 21:38:19 +05:30
|
|
|
|
case 'es':
|
|
|
|
|
|
return AppLocalizationsEs();
|
2025-09-07 12:22:02 +05:30
|
|
|
|
case 'fr':
|
|
|
|
|
|
return AppLocalizationsFr();
|
|
|
|
|
|
case 'it':
|
|
|
|
|
|
return AppLocalizationsIt();
|
2025-11-12 22:12:51 +05:30
|
|
|
|
case 'ko':
|
|
|
|
|
|
return AppLocalizationsKo();
|
2025-10-10 21:38:19 +05:30
|
|
|
|
case 'nl':
|
|
|
|
|
|
return AppLocalizationsNl();
|
|
|
|
|
|
case 'ru':
|
|
|
|
|
|
return AppLocalizationsRu();
|
|
|
|
|
|
case 'zh':
|
|
|
|
|
|
return AppLocalizationsZh();
|
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
|
|
|
|
);
|
|
|
|
|
|
}
|