diff --git a/lib/features/chat/views/chat_page.dart b/lib/features/chat/views/chat_page.dart index c11fab0..8616466 100644 --- a/lib/features/chat/views/chat_page.dart +++ b/lib/features/chat/views/chat_page.dart @@ -802,7 +802,7 @@ class _ChatPageState extends ConsumerState { borderRadius: BorderRadius.circular(AppBorderRadius.dialog), ), title: Text( - 'Edit Message', + AppLocalizations.of(context)!.editMessage, style: TextStyle(color: context.conduitTheme.textPrimary), ), content: TextField( diff --git a/lib/features/chat/widgets/assistant_message_widget.dart b/lib/features/chat/widgets/assistant_message_widget.dart index 2bb93fc..ae09402 100644 --- a/lib/features/chat/widgets/assistant_message_widget.dart +++ b/lib/features/chat/widgets/assistant_message_widget.dart @@ -551,7 +551,7 @@ class _AssistantMessageWidgetState extends ConsumerState icon: Platform.isIOS ? CupertinoIcons.doc_on_clipboard : Icons.content_copy, - label: 'Copy', + label: AppLocalizations.of(context)!.copy, onTap: widget.onCopy, ), if (isErrorMessage) ...[ @@ -565,7 +565,7 @@ class _AssistantMessageWidgetState extends ConsumerState ] else ...[ _buildActionButton( icon: Platform.isIOS ? CupertinoIcons.refresh : Icons.refresh, - label: 'Regenerate', + label: AppLocalizations.of(context)!.regenerate, onTap: widget.onRegenerate, ), ], diff --git a/lib/features/chat/widgets/user_message_bubble.dart b/lib/features/chat/widgets/user_message_bubble.dart index 6cebd19..49a33b9 100644 --- a/lib/features/chat/widgets/user_message_bubble.dart +++ b/lib/features/chat/widgets/user_message_bubble.dart @@ -7,6 +7,7 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_animate/flutter_animate.dart'; import 'dart:io' show Platform; +import 'package:conduit/l10n/app_localizations.dart'; class UserMessageBubble extends ConsumerStatefulWidget { final dynamic message; @@ -581,14 +582,14 @@ class _UserMessageBubbleState extends ConsumerState children: [ _buildActionButton( icon: Platform.isIOS ? CupertinoIcons.pencil : Icons.edit_outlined, - label: 'Edit', + label: AppLocalizations.of(context)!.edit, onTap: widget.onEdit, ), _buildActionButton( icon: Platform.isIOS ? CupertinoIcons.doc_on_clipboard : Icons.content_copy, - label: 'Copy', + label: AppLocalizations.of(context)!.copy, onTap: widget.onCopy, ), ], diff --git a/lib/features/navigation/widgets/chats_drawer.dart b/lib/features/navigation/widgets/chats_drawer.dart index 093e398..040b5f2 100644 --- a/lib/features/navigation/widgets/chats_drawer.dart +++ b/lib/features/navigation/widgets/chats_drawer.dart @@ -255,7 +255,7 @@ class _ChatsDrawerState extends ConsumerState { child: Padding( padding: const EdgeInsets.all(Spacing.lg), child: Text( - 'No conversations yet', + AppLocalizations.of(context)!.noConversationsYet, style: AppTypography.bodyMediumStyle.copyWith( color: theme.textSecondary, ), diff --git a/lib/features/profile/views/profile_page.dart b/lib/features/profile/views/profile_page.dart index 4b6e01a..5908ca1 100644 --- a/lib/features/profile/views/profile_page.dart +++ b/lib/features/profile/views/profile_page.dart @@ -320,7 +320,7 @@ class ProfilePage extends ConsumerWidget { (m) => m.id == settings.defaultModel, orElse: () => models.isNotEmpty ? models.first - : const Model(id: 'none', name: 'No models available'), + : Model(id: 'none', name: AppLocalizations.of(context)!.noModelsAvailable), ); return ListTile( @@ -611,11 +611,14 @@ class ProfilePage extends ConsumerWidget { ), subtitle: Text( themeMode == ThemeMode.system - ? 'Following system: ' - '${platformBrightness == Brightness.dark ? 'Dark' : 'Light'}' + ? AppLocalizations.of(context)!.followingSystem( + platformBrightness == Brightness.dark + ? AppLocalizations.of(context)!.themeDark + : AppLocalizations.of(context)!.themeLight, + ) : (isDarkEffective - ? 'Currently using Dark theme' - : 'Currently using Light theme'), + ? AppLocalizations.of(context)!.currentlyUsingDarkTheme + : AppLocalizations.of(context)!.currentlyUsingLightTheme), style: context.conduitTheme.bodySmall?.copyWith( color: context.conduitTheme.textSecondary, ), @@ -663,7 +666,7 @@ class ProfilePage extends ConsumerWidget { return AlertDialog( backgroundColor: ctx.conduitTheme.surfaceBackground, title: Text( - 'About Conduit', + AppLocalizations.of(ctx)!.aboutConduit, style: ctx.conduitTheme.headingSmall?.copyWith( color: ctx.conduitTheme.textPrimary, ), @@ -673,7 +676,7 @@ class ProfilePage extends ConsumerWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - 'Version: ${info.version} (${info.buildNumber})', + AppLocalizations.of(ctx)!.versionLabel(info.version, info.buildNumber), style: ctx.conduitTheme.bodyMedium?.copyWith( color: ctx.conduitTheme.textSecondary, ), @@ -697,7 +700,7 @@ class ProfilePage extends ConsumerWidget { ), const SizedBox(width: Spacing.xs), Text( - 'GitHub Repository', + AppLocalizations.of(ctx)!.githubRepository, style: ctx.conduitTheme.bodyMedium?.copyWith( color: ctx.conduitTheme.buttonPrimary, fontWeight: FontWeight.w600, @@ -719,7 +722,7 @@ class ProfilePage extends ConsumerWidget { ); } catch (e) { if (!context.mounted) return; - UiUtils.showMessage(context, 'Unable to load app info'); + UiUtils.showMessage(context, AppLocalizations.of(context)!.unableToLoadAppInfo); } } diff --git a/lib/l10n/app_de.arb b/lib/l10n/app_de.arb index 95c0447..2d8f1be 100644 --- a/lib/l10n/app_de.arb +++ b/lib/l10n/app_de.arb @@ -212,5 +212,44 @@ "webSearch": "Websuche", "webSearchDescription": "Im Web suchen und Quellen zitieren.", "imageGeneration": "Bildgenerierung", - "imageGenerationDescription": "Bilder aus deinen Prompts erstellen." + "imageGenerationDescription": "Bilder aus deinen Prompts erstellen.", + "copy": "Kopieren", + "edit": "Bearbeiten", + "regenerate": "Neu generieren", + "noConversationsYet": "Noch keine Unterhaltungen" + , + "usernameOrEmailHint": "Gib deinen Benutzernamen oder deine E‑Mail ein", + "passwordHint": "Gib dein Passwort ein", + "enterApiKey": "Gib deinen API-Schlüssel ein", + "signingIn": "Anmeldung läuft...", + "advancedSettings": "Erweiterte Einstellungen", + "customHeaders": "Benutzerdefinierte Header", + "customHeadersDescription": "Füge benutzerdefinierte HTTP-Header für Authentifizierung, API-Schlüssel oder spezielle Serveranforderungen hinzu.", + "headerNameEmpty": "Header-Name darf nicht leer sein", + "headerNameTooLong": "Header-Name zu lang (max. 64 Zeichen)", + "headerNameInvalidChars": "Ungültiger Header-Name. Verwende nur Buchstaben, Zahlen und diese Zeichen: !#$&-^_`|~", + "headerNameReserved": "Reservierten Header \"{key}\" kann nicht überschrieben werden", + "@headerNameReserved": {"placeholders": {"key": {"type": "String"}}}, + "headerValueEmpty": "Header-Wert darf nicht leer sein", + "headerValueTooLong": "Header-Wert zu lang (max. 1024 Zeichen)", + "headerValueInvalidChars": "Header-Wert enthält ungültige Zeichen. Nur druckbare ASCII-Zeichen verwenden.", + "headerValueUnsafe": "Header-Wert scheint potenziell unsicheren Inhalt zu enthalten", + "headerAlreadyExists": "Header \"{key}\" existiert bereits. Zum Aktualisieren zuerst entfernen.", + "@headerAlreadyExists": {"placeholders": {"key": {"type": "String"}}}, + "maxHeadersReachedDetail": "Maximal 10 benutzerdefinierte Header zulässig. Einige entfernen, um mehr hinzuzufügen." + , + "editMessage": "Nachricht bearbeiten" + , + "noModelsAvailable": "Keine Modelle verfügbar", + "followingSystem": "Dem System folgen: {theme}", + "@followingSystem": {"placeholders": {"theme": {"type": "String"}}}, + "themeDark": "Dunkel", + "themeLight": "Hell", + "currentlyUsingDarkTheme": "Aktuell dunkles Thema", + "currentlyUsingLightTheme": "Aktuell helles Thema", + "aboutConduit": "Über Conduit", + "versionLabel": "Version: {version} ({build})", + "@versionLabel": {"placeholders": {"version": {"type": "String"}, "build": {"type": "String"}}}, + "githubRepository": "GitHub-Repository", + "unableToLoadAppInfo": "App-Informationen konnten nicht geladen werden" } diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index a2a3abf..2e5a9bc 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -236,5 +236,44 @@ "webSearch": "Web Search", "webSearchDescription": "Search the web and cite sources in replies.", "imageGeneration": "Image Generation", - "imageGenerationDescription": "Create images from your prompts." + "imageGenerationDescription": "Create images from your prompts.", + "copy": "Copy", + "edit": "Edit", + "regenerate": "Regenerate", + "noConversationsYet": "No conversations yet" + , + "usernameOrEmailHint": "Enter your username or email", + "passwordHint": "Enter your password", + "enterApiKey": "Enter your API key", + "signingIn": "Signing in...", + "advancedSettings": "Advanced Settings", + "customHeaders": "Custom Headers", + "customHeadersDescription": "Add custom HTTP headers for authentication, API keys, or special server requirements.", + "headerNameEmpty": "Header name cannot be empty", + "headerNameTooLong": "Header name too long (max 64 characters)", + "headerNameInvalidChars": "Invalid header name. Use only letters, numbers, and these symbols: !#$&-^_`|~", + "headerNameReserved": "Cannot override reserved header \"{key}\"", + "@headerNameReserved": {"placeholders": {"key": {"type": "String"}}}, + "headerValueEmpty": "Header value cannot be empty", + "headerValueTooLong": "Header value too long (max 1024 characters)", + "headerValueInvalidChars": "Header value contains invalid characters. Use only printable ASCII.", + "headerValueUnsafe": "Header value appears to contain potentially unsafe content", + "headerAlreadyExists": "Header \"{key}\" already exists. Remove it first to update.", + "@headerAlreadyExists": {"placeholders": {"key": {"type": "String"}}}, + "maxHeadersReachedDetail": "Maximum of 10 custom headers allowed. Remove some to add more." + , + "editMessage": "Edit Message" + , + "noModelsAvailable": "No models available", + "followingSystem": "Following system: {theme}", + "@followingSystem": {"placeholders": {"theme": {"type": "String"}}}, + "themeDark": "Dark", + "themeLight": "Light", + "currentlyUsingDarkTheme": "Currently using Dark theme", + "currentlyUsingLightTheme": "Currently using Light theme", + "aboutConduit": "About Conduit", + "versionLabel": "Version: {version} ({build})", + "@versionLabel": {"placeholders": {"version": {"type": "String"}, "build": {"type": "String"}}}, + "githubRepository": "GitHub Repository", + "unableToLoadAppInfo": "Unable to load app info" } diff --git a/lib/l10n/app_fr.arb b/lib/l10n/app_fr.arb index c842d83..58a33f7 100644 --- a/lib/l10n/app_fr.arb +++ b/lib/l10n/app_fr.arb @@ -212,5 +212,44 @@ "webSearch": "Recherche Web", "webSearchDescription": "Recherchez sur le web et citez les sources.", "imageGeneration": "Génération d'images", - "imageGenerationDescription": "Créez des images à partir de vos prompts." + "imageGenerationDescription": "Créez des images à partir de vos prompts.", + "copy": "Copier", + "edit": "Modifier", + "regenerate": "Régénérer", + "noConversationsYet": "Aucune conversation pour l'instant" + , + "usernameOrEmailHint": "Entrez votre nom d'utilisateur ou e‑mail", + "passwordHint": "Entrez votre mot de passe", + "enterApiKey": "Entrez votre clé API", + "signingIn": "Connexion en cours...", + "advancedSettings": "Paramètres avancés", + "customHeaders": "En-têtes personnalisés", + "customHeadersDescription": "Ajoutez des en-têtes HTTP personnalisés pour l'authentification, les clés API ou des exigences spécifiques du serveur.", + "headerNameEmpty": "Le nom de l'en-tête ne peut pas être vide", + "headerNameTooLong": "Nom d'en-tête trop long (max 64 caractères)", + "headerNameInvalidChars": "Nom d'en-tête invalide. Utilisez uniquement des lettres, des chiffres et ces symboles : !#$&-^_`|~", + "headerNameReserved": "Impossible d'écraser l'en-tête réservé « {key} »", + "@headerNameReserved": {"placeholders": {"key": {"type": "String"}}}, + "headerValueEmpty": "La valeur de l'en-tête ne peut pas être vide", + "headerValueTooLong": "Valeur d'en-tête trop longue (max 1024 caractères)", + "headerValueInvalidChars": "La valeur de l'en-tête contient des caractères invalides. Utilisez uniquement des caractères ASCII imprimables.", + "headerValueUnsafe": "La valeur de l'en-tête semble contenir du contenu potentiellement dangereux", + "headerAlreadyExists": "L'en-tête « {key} » existe déjà. Supprimez-le d'abord pour le modifier.", + "@headerAlreadyExists": {"placeholders": {"key": {"type": "String"}}}, + "maxHeadersReachedDetail": "Maximum 10 en-têtes personnalisés. Supprimez-en pour en ajouter." + , + "editMessage": "Modifier le message" + , + "noModelsAvailable": "Aucun modèle disponible", + "followingSystem": "Selon le système : {theme}", + "@followingSystem": {"placeholders": {"theme": {"type": "String"}}}, + "themeDark": "Sombre", + "themeLight": "Clair", + "currentlyUsingDarkTheme": "Thème sombre actuellement utilisé", + "currentlyUsingLightTheme": "Thème clair actuellement utilisé", + "aboutConduit": "À propos de Conduit", + "versionLabel": "Version : {version} ({build})", + "@versionLabel": {"placeholders": {"version": {"type": "String"}, "build": {"type": "String"}}}, + "githubRepository": "Dépôt GitHub", + "unableToLoadAppInfo": "Impossible de charger les informations de l'application" } diff --git a/lib/l10n/app_it.arb b/lib/l10n/app_it.arb index dd69877..3c5ea24 100644 --- a/lib/l10n/app_it.arb +++ b/lib/l10n/app_it.arb @@ -212,5 +212,44 @@ "webSearch": "Ricerca Web", "webSearchDescription": "Cerca sul web e cita le fonti.", "imageGeneration": "Generazione immagini", - "imageGenerationDescription": "Crea immagini dai tuoi prompt." + "imageGenerationDescription": "Crea immagini dai tuoi prompt.", + "copy": "Copia", + "edit": "Modifica", + "regenerate": "Rigenera", + "noConversationsYet": "Ancora nessuna conversazione" + , + "usernameOrEmailHint": "Inserisci il tuo username o e‑mail", + "passwordHint": "Inserisci la password", + "enterApiKey": "Inserisci la tua chiave API", + "signingIn": "Accesso in corso...", + "advancedSettings": "Impostazioni avanzate", + "customHeaders": "Header personalizzati", + "customHeadersDescription": "Aggiungi header HTTP personalizzati per autenticazione, chiavi API o requisiti speciali del server.", + "headerNameEmpty": "Il nome header non può essere vuoto", + "headerNameTooLong": "Nome header troppo lungo (max 64 caratteri)", + "headerNameInvalidChars": "Nome header non valido. Usa solo lettere, numeri e questi simboli: !#$&-^_`|~", + "headerNameReserved": "Impossibile sovrascrivere l'header riservato \"{key}\"", + "@headerNameReserved": {"placeholders": {"key": {"type": "String"}}}, + "headerValueEmpty": "Il valore dell'header non può essere vuoto", + "headerValueTooLong": "Valore header troppo lungo (max 1024 caratteri)", + "headerValueInvalidChars": "Il valore dell'header contiene caratteri non validi. Usa solo ASCII stampabile.", + "headerValueUnsafe": "Il valore dell'header sembra contenere contenuti potenzialmente non sicuri", + "headerAlreadyExists": "L'header \"{key}\" esiste già. Rimuovilo prima per aggiornarlo.", + "@headerAlreadyExists": {"placeholders": {"key": {"type": "String"}}}, + "maxHeadersReachedDetail": "Massimo 10 header personalizzati consentiti. Rimuovine alcuni per aggiungerne altri." + , + "editMessage": "Modifica messaggio" + , + "noModelsAvailable": "Nessun modello disponibile", + "followingSystem": "Segue il sistema: {theme}", + "@followingSystem": {"placeholders": {"theme": {"type": "String"}}}, + "themeDark": "Scuro", + "themeLight": "Chiaro", + "currentlyUsingDarkTheme": "Attualmente tema scuro", + "currentlyUsingLightTheme": "Attualmente tema chiaro", + "aboutConduit": "Informazioni su Conduit", + "versionLabel": "Versione: {version} ({build})", + "@versionLabel": {"placeholders": {"version": {"type": "String"}, "build": {"type": "String"}}}, + "githubRepository": "Repository GitHub", + "unableToLoadAppInfo": "Impossibile caricare le informazioni dell'app" } diff --git a/lib/l10n/app_localizations.dart b/lib/l10n/app_localizations.dart index 284e84a..493e092 100644 --- a/lib/l10n/app_localizations.dart +++ b/lib/l10n/app_localizations.dart @@ -404,43 +404,19 @@ abstract class AppLocalizations { /// In en, this message translates to: /// **'Username or Email'** String get usernameOrEmail; - + /// No description provided for @password. /// /// In en, this message translates to: /// **'Password'** String get password; - /// No description provided for @usernameOrEmailHint. - /// - /// In en, this message translates to: - /// **'Enter your username or email'** - String get usernameOrEmailHint; - - /// No description provided for @passwordHint. - /// - /// In en, this message translates to: - /// **'Enter your password'** - String get passwordHint; - /// No description provided for @signInWithApiKey. /// /// In en, this message translates to: /// **'Sign in with API Key'** String get signInWithApiKey; - /// No description provided for @enterApiKey. - /// - /// In en, this message translates to: - /// **'Enter your API key'** - String get enterApiKey; - - /// No description provided for @signingIn. - /// - /// In en, this message translates to: - /// **'Signing in...'** - String get signingIn; - /// No description provided for @connectToServer. /// /// In en, this message translates to: @@ -507,84 +483,6 @@ abstract class AppLocalizations { /// **'Remove header'** String get removeHeader; - /// No description provided for @advancedSettings. - /// - /// In en, this message translates to: - /// **'Advanced Settings'** - String get advancedSettings; - - /// No description provided for @customHeaders. - /// - /// In en, this message translates to: - /// **'Custom Headers'** - String get customHeaders; - - /// No description provided for @customHeadersDescription. - /// - /// In en, this message translates to: - /// **'Add custom HTTP headers for authentication, API keys, or special server requirements.'** - String get customHeadersDescription; - - /// No description provided for @headerNameEmpty. - /// - /// In en, this message translates to: - /// **'Header name cannot be empty'** - String get headerNameEmpty; - - /// No description provided for @headerNameTooLong. - /// - /// In en, this message translates to: - /// **'Header name too long (max 64 characters)'** - String get headerNameTooLong; - - /// No description provided for @headerNameInvalidChars. - /// - /// In en, this message translates to: - /// **'Invalid header name. Use only letters, numbers, and these symbols: !#\$&-^_`|~'** - String get headerNameInvalidChars; - - /// No description provided for @headerNameReserved. - /// - /// In en, this message translates to: - /// **'Cannot override reserved header "{key}"'** - String headerNameReserved(String key); - - /// No description provided for @headerValueEmpty. - /// - /// In en, this message translates to: - /// **'Header value cannot be empty'** - String get headerValueEmpty; - - /// No description provided for @headerValueTooLong. - /// - /// In en, this message translates to: - /// **'Header value too long (max 1024 characters)'** - String get headerValueTooLong; - - /// No description provided for @headerValueInvalidChars. - /// - /// In en, this message translates to: - /// **'Header value contains invalid characters. Use only printable ASCII.'** - String get headerValueInvalidChars; - - /// No description provided for @headerValueUnsafe. - /// - /// In en, this message translates to: - /// **'Header value appears to contain potentially unsafe content'** - String get headerValueUnsafe; - - /// No description provided for @headerAlreadyExists. - /// - /// In en, this message translates to: - /// **'Header "{key}" already exists. Remove it first to update.'** - String headerAlreadyExists(String key); - - /// No description provided for @maxHeadersReachedDetail. - /// - /// In en, this message translates to: - /// **'Maximum of 10 custom headers allowed. Remove some to add more.'** - String get maxHeadersReachedDetail; - /// No description provided for @connecting. /// /// In en, this message translates to: @@ -1364,6 +1262,198 @@ abstract class AppLocalizations { /// In en, this message translates to: /// **'Create images from your prompts.'** String get imageGenerationDescription; + + /// No description provided for @copy. + /// + /// In en, this message translates to: + /// **'Copy'** + String get copy; + + /// No description provided for @edit. + /// + /// In en, this message translates to: + /// **'Edit'** + String get edit; + + /// No description provided for @regenerate. + /// + /// In en, this message translates to: + /// **'Regenerate'** + String get regenerate; + + /// No description provided for @noConversationsYet. + /// + /// In en, this message translates to: + /// **'No conversations yet'** + String get noConversationsYet; + + /// No description provided for @usernameOrEmailHint. + /// + /// In en, this message translates to: + /// **'Enter your username or email'** + String get usernameOrEmailHint; + + /// No description provided for @passwordHint. + /// + /// In en, this message translates to: + /// **'Enter your password'** + String get passwordHint; + + /// No description provided for @enterApiKey. + /// + /// In en, this message translates to: + /// **'Enter your API key'** + String get enterApiKey; + + /// No description provided for @signingIn. + /// + /// In en, this message translates to: + /// **'Signing in...'** + String get signingIn; + + /// No description provided for @advancedSettings. + /// + /// In en, this message translates to: + /// **'Advanced Settings'** + String get advancedSettings; + + /// No description provided for @customHeaders. + /// + /// In en, this message translates to: + /// **'Custom Headers'** + String get customHeaders; + + /// No description provided for @customHeadersDescription. + /// + /// In en, this message translates to: + /// **'Add custom HTTP headers for authentication, API keys, or special server requirements.'** + String get customHeadersDescription; + + /// No description provided for @headerNameEmpty. + /// + /// In en, this message translates to: + /// **'Header name cannot be empty'** + String get headerNameEmpty; + + /// No description provided for @headerNameTooLong. + /// + /// In en, this message translates to: + /// **'Header name too long (max 64 characters)'** + String get headerNameTooLong; + + /// No description provided for @headerNameInvalidChars. + /// + /// In en, this message translates to: + /// **'Invalid header name. Use only letters, numbers, and these symbols: !#\$&-^_`|~'** + String get headerNameInvalidChars; + + /// No description provided for @headerNameReserved. + /// + /// In en, this message translates to: + /// **'Cannot override reserved header \"{key}\"'** + String headerNameReserved(String key); + + /// No description provided for @headerValueEmpty. + /// + /// In en, this message translates to: + /// **'Header value cannot be empty'** + String get headerValueEmpty; + + /// No description provided for @headerValueTooLong. + /// + /// In en, this message translates to: + /// **'Header value too long (max 1024 characters)'** + String get headerValueTooLong; + + /// No description provided for @headerValueInvalidChars. + /// + /// In en, this message translates to: + /// **'Header value contains invalid characters. Use only printable ASCII.'** + String get headerValueInvalidChars; + + /// No description provided for @headerValueUnsafe. + /// + /// In en, this message translates to: + /// **'Header value appears to contain potentially unsafe content'** + String get headerValueUnsafe; + + /// No description provided for @headerAlreadyExists. + /// + /// In en, this message translates to: + /// **'Header \"{key}\" already exists. Remove it first to update.'** + String headerAlreadyExists(String key); + + /// No description provided for @maxHeadersReachedDetail. + /// + /// In en, this message translates to: + /// **'Maximum of 10 custom headers allowed. Remove some to add more.'** + String get maxHeadersReachedDetail; + + /// No description provided for @editMessage. + /// + /// In en, this message translates to: + /// **'Edit Message'** + String get editMessage; + + /// No description provided for @noModelsAvailable. + /// + /// In en, this message translates to: + /// **'No models available'** + String get noModelsAvailable; + + /// No description provided for @followingSystem. + /// + /// In en, this message translates to: + /// **'Following system: {theme}'** + String followingSystem(String theme); + + /// No description provided for @themeDark. + /// + /// In en, this message translates to: + /// **'Dark'** + String get themeDark; + + /// No description provided for @themeLight. + /// + /// In en, this message translates to: + /// **'Light'** + String get themeLight; + + /// No description provided for @currentlyUsingDarkTheme. + /// + /// In en, this message translates to: + /// **'Currently using Dark theme'** + String get currentlyUsingDarkTheme; + + /// No description provided for @currentlyUsingLightTheme. + /// + /// In en, this message translates to: + /// **'Currently using Light theme'** + String get currentlyUsingLightTheme; + + /// No description provided for @aboutConduit. + /// + /// In en, this message translates to: + /// **'About Conduit'** + String get aboutConduit; + + /// No description provided for @versionLabel. + /// + /// In en, this message translates to: + /// **'Version: {version} ({build})'** + String versionLabel(String version, String build); + + /// No description provided for @githubRepository. + /// + /// In en, this message translates to: + /// **'GitHub Repository'** + String get githubRepository; + + /// No description provided for @unableToLoadAppInfo. + /// + /// In en, this message translates to: + /// **'Unable to load app info'** + String get unableToLoadAppInfo; } class _AppLocalizationsDelegate extends LocalizationsDelegate { diff --git a/lib/l10n/app_localizations_de.dart b/lib/l10n/app_localizations_de.dart index fa48259..5fd1a63 100644 --- a/lib/l10n/app_localizations_de.dart +++ b/lib/l10n/app_localizations_de.dart @@ -177,21 +177,9 @@ class AppLocalizationsDe extends AppLocalizations { @override String get password => 'Passwort'; - @override - String get usernameOrEmailHint => 'Gib deinen Benutzernamen oder deine E‑Mail ein'; - - @override - String get passwordHint => 'Gib dein Passwort ein'; - @override String get signInWithApiKey => 'Mit API-Schlüssel anmelden'; - @override - String get enterApiKey => 'Gib deinen API-Schlüssel ein'; - - @override - String get signingIn => 'Anmeldung läuft...'; - @override String get connectToServer => 'Mit Server verbinden'; @@ -225,51 +213,6 @@ class AppLocalizationsDe extends AppLocalizations { @override String get removeHeader => 'Header entfernen'; - @override - String get advancedSettings => 'Erweiterte Einstellungen'; - - @override - String get customHeaders => 'Benutzerdefinierte Header'; - - @override - String get customHeadersDescription => - 'Füge benutzerdefinierte HTTP-Header für Authentifizierung, API-Schlüssel oder spezielle Serveranforderungen hinzu.'; - - @override - String get headerNameEmpty => 'Header-Name darf nicht leer sein'; - - @override - String get headerNameTooLong => 'Header-Name zu lang (max. 64 Zeichen)'; - - @override - String get headerNameInvalidChars => - 'Ungültiger Header-Name. Verwende nur Buchstaben, Zahlen und diese Symbole: !#\$&-^_`|~'; - - @override - String headerNameReserved(String key) => 'Reservierter Header "$key" kann nicht überschrieben werden'; - - @override - String get headerValueEmpty => 'Header-Wert darf nicht leer sein'; - - @override - String get headerValueTooLong => 'Header-Wert zu lang (max. 1024 Zeichen)'; - - @override - String get headerValueInvalidChars => - 'Header-Wert enthält ungültige Zeichen. Verwende nur druckbare ASCII-Zeichen.'; - - @override - String get headerValueUnsafe => - 'Header-Wert scheint potenziell unsicheren Inhalt zu enthalten'; - - @override - String headerAlreadyExists(String key) => - 'Header "$key" existiert bereits. Entferne ihn zuerst, um ihn zu aktualisieren.'; - - @override - String get maxHeadersReachedDetail => - 'Maximal 10 benutzerdefinierte Header erlaubt. Entferne einige, um weitere hinzuzufügen.'; - @override String get connecting => 'Verbindung wird hergestellt...'; @@ -669,4 +612,108 @@ class AppLocalizationsDe extends AppLocalizations { @override String get imageGenerationDescription => 'Bilder aus deinen Prompts erstellen.'; + + @override + String get copy => 'Kopieren'; + + @override + String get edit => 'Bearbeiten'; + + @override + String get regenerate => 'Neu generieren'; + + @override + String get noConversationsYet => 'Noch keine Unterhaltungen'; + + @override + String get usernameOrEmailHint => 'Gib deinen Benutzernamen oder deine E‑Mail ein'; + + @override + String get passwordHint => 'Gib dein Passwort ein'; + + @override + String get enterApiKey => 'Gib deinen API-Schlüssel ein'; + + @override + String get signingIn => 'Anmeldung läuft...'; + + @override + String get advancedSettings => 'Erweiterte Einstellungen'; + + @override + String get customHeaders => 'Benutzerdefinierte Header'; + + @override + String get customHeadersDescription => 'Füge benutzerdefinierte HTTP-Header für Authentifizierung, API-Schlüssel oder spezielle Serveranforderungen hinzu.'; + + @override + String get headerNameEmpty => 'Header-Name darf nicht leer sein'; + + @override + String get headerNameTooLong => 'Header-Name zu lang (max. 64 Zeichen)'; + + @override + String get headerNameInvalidChars => 'Ungültiger Header-Name. Verwende nur Buchstaben, Zahlen und diese Zeichen: !#\$&-^_`|~'; + + @override + String headerNameReserved(String key) { + return 'Reservierten Header \"$key\" kann nicht überschrieben werden'; + } + + @override + String get headerValueEmpty => 'Header-Wert darf nicht leer sein'; + + @override + String get headerValueTooLong => 'Header-Wert zu lang (max. 1024 Zeichen)'; + + @override + String get headerValueInvalidChars => 'Header-Wert enthält ungültige Zeichen. Nur druckbare ASCII-Zeichen verwenden.'; + + @override + String get headerValueUnsafe => 'Header-Wert scheint potenziell unsicheren Inhalt zu enthalten'; + + @override + String headerAlreadyExists(String key) { + return 'Header \"$key\" existiert bereits. Zum Aktualisieren zuerst entfernen.'; + } + + @override + String get maxHeadersReachedDetail => 'Maximal 10 benutzerdefinierte Header zulässig. Einige entfernen, um mehr hinzuzufügen.'; + + @override + String get editMessage => 'Nachricht bearbeiten'; + + @override + String get noModelsAvailable => 'Keine Modelle verfügbar'; + + @override + String followingSystem(String theme) { + return 'Dem System folgen: $theme'; + } + + @override + String get themeDark => 'Dunkel'; + + @override + String get themeLight => 'Hell'; + + @override + String get currentlyUsingDarkTheme => 'Aktuell dunkles Thema'; + + @override + String get currentlyUsingLightTheme => 'Aktuell helles Thema'; + + @override + String get aboutConduit => 'Über Conduit'; + + @override + String versionLabel(String version, String build) { + return 'Version: $version ($build)'; + } + + @override + String get githubRepository => 'GitHub-Repository'; + + @override + String get unableToLoadAppInfo => 'App-Informationen konnten nicht geladen werden'; } diff --git a/lib/l10n/app_localizations_en.dart b/lib/l10n/app_localizations_en.dart index cd5a0b5..49ee730 100644 --- a/lib/l10n/app_localizations_en.dart +++ b/lib/l10n/app_localizations_en.dart @@ -177,21 +177,9 @@ class AppLocalizationsEn extends AppLocalizations { @override String get password => 'Password'; - @override - String get usernameOrEmailHint => 'Enter your username or email'; - - @override - String get passwordHint => 'Enter your password'; - @override String get signInWithApiKey => 'Sign in with API Key'; - @override - String get enterApiKey => 'Enter your API key'; - - @override - String get signingIn => 'Signing in...'; - @override String get connectToServer => 'Connect to Server'; @@ -225,51 +213,6 @@ class AppLocalizationsEn extends AppLocalizations { @override String get removeHeader => 'Remove header'; - @override - String get advancedSettings => 'Advanced Settings'; - - @override - String get customHeaders => 'Custom Headers'; - - @override - String get customHeadersDescription => - 'Add custom HTTP headers for authentication, API keys, or special server requirements.'; - - @override - String get headerNameEmpty => 'Header name cannot be empty'; - - @override - String get headerNameTooLong => 'Header name too long (max 64 characters)'; - - @override - String get headerNameInvalidChars => - 'Invalid header name. Use only letters, numbers, and these symbols: !#\$&-^_`|~'; - - @override - String headerNameReserved(String key) => 'Cannot override reserved header "$key"'; - - @override - String get headerValueEmpty => 'Header value cannot be empty'; - - @override - String get headerValueTooLong => 'Header value too long (max 1024 characters)'; - - @override - String get headerValueInvalidChars => - 'Header value contains invalid characters. Use only printable ASCII.'; - - @override - String get headerValueUnsafe => - 'Header value appears to contain potentially unsafe content'; - - @override - String headerAlreadyExists(String key) => - 'Header "$key" already exists. Remove it first to update.'; - - @override - String get maxHeadersReachedDetail => - 'Maximum of 10 custom headers allowed. Remove some to add more.'; - @override String get connecting => 'Connecting...'; @@ -669,4 +612,108 @@ class AppLocalizationsEn extends AppLocalizations { @override String get imageGenerationDescription => 'Create images from your prompts.'; + + @override + String get copy => 'Copy'; + + @override + String get edit => 'Edit'; + + @override + String get regenerate => 'Regenerate'; + + @override + String get noConversationsYet => 'No conversations yet'; + + @override + String get usernameOrEmailHint => 'Enter your username or email'; + + @override + String get passwordHint => 'Enter your password'; + + @override + String get enterApiKey => 'Enter your API key'; + + @override + String get signingIn => 'Signing in...'; + + @override + String get advancedSettings => 'Advanced Settings'; + + @override + String get customHeaders => 'Custom Headers'; + + @override + String get customHeadersDescription => 'Add custom HTTP headers for authentication, API keys, or special server requirements.'; + + @override + String get headerNameEmpty => 'Header name cannot be empty'; + + @override + String get headerNameTooLong => 'Header name too long (max 64 characters)'; + + @override + String get headerNameInvalidChars => 'Invalid header name. Use only letters, numbers, and these symbols: !#\$&-^_`|~'; + + @override + String headerNameReserved(String key) { + return 'Cannot override reserved header \"$key\"'; + } + + @override + String get headerValueEmpty => 'Header value cannot be empty'; + + @override + String get headerValueTooLong => 'Header value too long (max 1024 characters)'; + + @override + String get headerValueInvalidChars => 'Header value contains invalid characters. Use only printable ASCII.'; + + @override + String get headerValueUnsafe => 'Header value appears to contain potentially unsafe content'; + + @override + String headerAlreadyExists(String key) { + return 'Header \"$key\" already exists. Remove it first to update.'; + } + + @override + String get maxHeadersReachedDetail => 'Maximum of 10 custom headers allowed. Remove some to add more.'; + + @override + String get editMessage => 'Edit Message'; + + @override + String get noModelsAvailable => 'No models available'; + + @override + String followingSystem(String theme) { + return 'Following system: $theme'; + } + + @override + String get themeDark => 'Dark'; + + @override + String get themeLight => 'Light'; + + @override + String get currentlyUsingDarkTheme => 'Currently using Dark theme'; + + @override + String get currentlyUsingLightTheme => 'Currently using Light theme'; + + @override + String get aboutConduit => 'About Conduit'; + + @override + String versionLabel(String version, String build) { + return 'Version: $version ($build)'; + } + + @override + String get githubRepository => 'GitHub Repository'; + + @override + String get unableToLoadAppInfo => 'Unable to load app info'; } diff --git a/lib/l10n/app_localizations_fr.dart b/lib/l10n/app_localizations_fr.dart index 185db46..3634963 100644 --- a/lib/l10n/app_localizations_fr.dart +++ b/lib/l10n/app_localizations_fr.dart @@ -177,21 +177,9 @@ class AppLocalizationsFr extends AppLocalizations { @override String get password => 'Mot de passe'; - @override - String get usernameOrEmailHint => 'Entrez votre nom d\'utilisateur ou e‑mail'; - - @override - String get passwordHint => 'Entrez votre mot de passe'; - @override String get signInWithApiKey => 'Se connecter avec une clé API'; - @override - String get enterApiKey => 'Entrez votre clé API'; - - @override - String get signingIn => 'Connexion en cours...'; - @override String get connectToServer => 'Se connecter au serveur'; @@ -225,53 +213,6 @@ class AppLocalizationsFr extends AppLocalizations { @override String get removeHeader => 'Supprimer l\'en-tête'; - @override - String get advancedSettings => 'Paramètres avancés'; - - @override - String get customHeaders => 'En-têtes personnalisés'; - - @override - String get customHeadersDescription => - 'Ajoutez des en-têtes HTTP personnalisés pour l\'authentification, les clés API ou des exigences spécifiques du serveur.'; - - @override - String get headerNameEmpty => 'Le nom de l\'en-tête ne peut pas être vide'; - - @override - String get headerNameTooLong => 'Nom d\'en-tête trop long (max 64 caractères)'; - - @override - String get headerNameInvalidChars => - 'Nom d\'en-tête invalide. Utilisez uniquement des lettres, des chiffres et ces symboles : !#\$&-^_`|~'; - - @override - String headerNameReserved(String key) => - 'Impossible d\'écraser l\'en-tête réservé « $key »'; - - @override - String get headerValueEmpty => 'La valeur de l\'en-tête ne peut pas être vide'; - - @override - String get headerValueTooLong => - 'Valeur d\'en-tête trop longue (max 1024 caractères)'; - - @override - String get headerValueInvalidChars => - 'La valeur de l\'en-tête contient des caractères invalides. Utilisez uniquement des caractères ASCII imprimables.'; - - @override - String get headerValueUnsafe => - 'La valeur de l\'en-tête semble contenir du contenu potentiellement dangereux'; - - @override - String headerAlreadyExists(String key) => - 'L\'en-tête « $key » existe déjà. Supprimez-le d\'abord pour le modifier.'; - - @override - String get maxHeadersReachedDetail => - 'Maximum 10 en-têtes personnalisés. Supprimez-en pour en ajouter.'; - @override String get connecting => 'Connexion en cours...'; @@ -671,4 +612,108 @@ class AppLocalizationsFr extends AppLocalizations { @override String get imageGenerationDescription => 'Créez des images à partir de vos prompts.'; + + @override + String get copy => 'Copier'; + + @override + String get edit => 'Modifier'; + + @override + String get regenerate => 'Régénérer'; + + @override + String get noConversationsYet => 'Aucune conversation pour l\'instant'; + + @override + String get usernameOrEmailHint => 'Entrez votre nom d\'utilisateur ou e‑mail'; + + @override + String get passwordHint => 'Entrez votre mot de passe'; + + @override + String get enterApiKey => 'Entrez votre clé API'; + + @override + String get signingIn => 'Connexion en cours...'; + + @override + String get advancedSettings => 'Paramètres avancés'; + + @override + String get customHeaders => 'En-têtes personnalisés'; + + @override + String get customHeadersDescription => 'Ajoutez des en-têtes HTTP personnalisés pour l\'authentification, les clés API ou des exigences spécifiques du serveur.'; + + @override + String get headerNameEmpty => 'Le nom de l\'en-tête ne peut pas être vide'; + + @override + String get headerNameTooLong => 'Nom d\'en-tête trop long (max 64 caractères)'; + + @override + String get headerNameInvalidChars => 'Nom d\'en-tête invalide. Utilisez uniquement des lettres, des chiffres et ces symboles : !#\$&-^_`|~'; + + @override + String headerNameReserved(String key) { + return 'Impossible d\'écraser l\'en-tête réservé « $key »'; + } + + @override + String get headerValueEmpty => 'La valeur de l\'en-tête ne peut pas être vide'; + + @override + String get headerValueTooLong => 'Valeur d\'en-tête trop longue (max 1024 caractères)'; + + @override + String get headerValueInvalidChars => 'La valeur de l\'en-tête contient des caractères invalides. Utilisez uniquement des caractères ASCII imprimables.'; + + @override + String get headerValueUnsafe => 'La valeur de l\'en-tête semble contenir du contenu potentiellement dangereux'; + + @override + String headerAlreadyExists(String key) { + return 'L\'en-tête « $key » existe déjà. Supprimez-le d\'abord pour le modifier.'; + } + + @override + String get maxHeadersReachedDetail => 'Maximum 10 en-têtes personnalisés. Supprimez-en pour en ajouter.'; + + @override + String get editMessage => 'Modifier le message'; + + @override + String get noModelsAvailable => 'Aucun modèle disponible'; + + @override + String followingSystem(String theme) { + return 'Selon le système : $theme'; + } + + @override + String get themeDark => 'Sombre'; + + @override + String get themeLight => 'Clair'; + + @override + String get currentlyUsingDarkTheme => 'Thème sombre actuellement utilisé'; + + @override + String get currentlyUsingLightTheme => 'Thème clair actuellement utilisé'; + + @override + String get aboutConduit => 'À propos de Conduit'; + + @override + String versionLabel(String version, String build) { + return 'Version : $version ($build)'; + } + + @override + String get githubRepository => 'Dépôt GitHub'; + + @override + String get unableToLoadAppInfo => 'Impossible de charger les informations de l\'application'; } diff --git a/lib/l10n/app_localizations_it.dart b/lib/l10n/app_localizations_it.dart index 5dd5f6c..707074e 100644 --- a/lib/l10n/app_localizations_it.dart +++ b/lib/l10n/app_localizations_it.dart @@ -177,21 +177,9 @@ class AppLocalizationsIt extends AppLocalizations { @override String get password => 'Password'; - @override - String get usernameOrEmailHint => 'Inserisci il tuo username o e‑mail'; - - @override - String get passwordHint => 'Inserisci la password'; - @override String get signInWithApiKey => 'Accedi con chiave API'; - @override - String get enterApiKey => 'Inserisci la tua chiave API'; - - @override - String get signingIn => 'Accesso in corso...'; - @override String get connectToServer => 'Connetti al server'; @@ -225,52 +213,6 @@ class AppLocalizationsIt extends AppLocalizations { @override String get removeHeader => 'Rimuovi header'; - @override - String get advancedSettings => 'Impostazioni avanzate'; - - @override - String get customHeaders => 'Header personalizzati'; - - @override - String get customHeadersDescription => - 'Aggiungi header HTTP personalizzati per autenticazione, chiavi API o requisiti speciali del server.'; - - @override - String get headerNameEmpty => 'Il nome header non può essere vuoto'; - - @override - String get headerNameTooLong => 'Nome header troppo lungo (max 64 caratteri)'; - - @override - String get headerNameInvalidChars => - 'Nome header non valido. Usa solo lettere, numeri e questi simboli: !#\$&-^_`|~'; - - @override - String headerNameReserved(String key) => - 'Impossibile sovrascrivere l\'header riservato "$key"'; - - @override - String get headerValueEmpty => 'Il valore header non può essere vuoto'; - - @override - String get headerValueTooLong => 'Valore header troppo lungo (max 1024 caratteri)'; - - @override - String get headerValueInvalidChars => - 'Il valore header contiene caratteri non validi. Usa solo ASCII stampabile.'; - - @override - String get headerValueUnsafe => - 'Il valore header sembra contenere contenuto potenzialmente non sicuro'; - - @override - String headerAlreadyExists(String key) => - 'L\'header "$key" esiste già. Rimuovilo prima per aggiornarlo.'; - - @override - String get maxHeadersReachedDetail => - 'Massimo 10 header personalizzati consentiti. Rimuovine alcuni per aggiungerne altri.'; - @override String get connecting => 'Connessione in corso...'; @@ -670,4 +612,108 @@ class AppLocalizationsIt extends AppLocalizations { @override String get imageGenerationDescription => 'Crea immagini dai tuoi prompt.'; + + @override + String get copy => 'Copia'; + + @override + String get edit => 'Modifica'; + + @override + String get regenerate => 'Rigenera'; + + @override + String get noConversationsYet => 'Ancora nessuna conversazione'; + + @override + String get usernameOrEmailHint => 'Inserisci il tuo username o e‑mail'; + + @override + String get passwordHint => 'Inserisci la password'; + + @override + String get enterApiKey => 'Inserisci la tua chiave API'; + + @override + String get signingIn => 'Accesso in corso...'; + + @override + String get advancedSettings => 'Impostazioni avanzate'; + + @override + String get customHeaders => 'Header personalizzati'; + + @override + String get customHeadersDescription => 'Aggiungi header HTTP personalizzati per autenticazione, chiavi API o requisiti speciali del server.'; + + @override + String get headerNameEmpty => 'Il nome header non può essere vuoto'; + + @override + String get headerNameTooLong => 'Nome header troppo lungo (max 64 caratteri)'; + + @override + String get headerNameInvalidChars => 'Nome header non valido. Usa solo lettere, numeri e questi simboli: !#\$&-^_`|~'; + + @override + String headerNameReserved(String key) { + return 'Impossibile sovrascrivere l\'header riservato \"$key\"'; + } + + @override + String get headerValueEmpty => 'Il valore dell\'header non può essere vuoto'; + + @override + String get headerValueTooLong => 'Valore header troppo lungo (max 1024 caratteri)'; + + @override + String get headerValueInvalidChars => 'Il valore dell\'header contiene caratteri non validi. Usa solo ASCII stampabile.'; + + @override + String get headerValueUnsafe => 'Il valore dell\'header sembra contenere contenuti potenzialmente non sicuri'; + + @override + String headerAlreadyExists(String key) { + return 'L\'header \"$key\" esiste già. Rimuovilo prima per aggiornarlo.'; + } + + @override + String get maxHeadersReachedDetail => 'Massimo 10 header personalizzati consentiti. Rimuovine alcuni per aggiungerne altri.'; + + @override + String get editMessage => 'Modifica messaggio'; + + @override + String get noModelsAvailable => 'Nessun modello disponibile'; + + @override + String followingSystem(String theme) { + return 'Segue il sistema: $theme'; + } + + @override + String get themeDark => 'Scuro'; + + @override + String get themeLight => 'Chiaro'; + + @override + String get currentlyUsingDarkTheme => 'Attualmente tema scuro'; + + @override + String get currentlyUsingLightTheme => 'Attualmente tema chiaro'; + + @override + String get aboutConduit => 'Informazioni su Conduit'; + + @override + String versionLabel(String version, String build) { + return 'Versione: $version ($build)'; + } + + @override + String get githubRepository => 'Repository GitHub'; + + @override + String get unableToLoadAppInfo => 'Impossibile caricare le informazioni dell\'app'; }