main
dart 6,071 lines 163 KB
Raw
1 import 'dart:async';
2
3 import 'package:flutter/foundation.dart';
4 import 'package:flutter/widgets.dart';
5 import 'package:flutter_localizations/flutter_localizations.dart';
6 import 'package:intl/intl.dart' as intl;
7
8 import 'app_localizations_ar.dart';
9 import 'app_localizations_bn.dart';
10 import 'app_localizations_de.dart';
11 import 'app_localizations_en.dart';
12 import 'app_localizations_es.dart';
13 import 'app_localizations_fr.dart';
14 import 'app_localizations_hi.dart';
15 import 'app_localizations_it.dart';
16 import 'app_localizations_ja.dart';
17 import 'app_localizations_ko.dart';
18 import 'app_localizations_pt.dart';
19 import 'app_localizations_ru.dart';
20 import 'app_localizations_tr.dart';
21 import 'app_localizations_zh.dart';
22
23 // ignore_for_file: type=lint
24
25 /// Callers can lookup localized strings with an instance of AppLocalizations
26 /// returned by `AppLocalizations.of(context)`.
27 ///
28 /// Applications need to include `AppLocalizations.delegate()` in their app's
29 /// `localizationDelegates` list, and the locales they support in the app's
30 /// `supportedLocales` list. For example:
31 ///
32 /// ```dart
33 /// import 'l10n/app_localizations.dart';
34 ///
35 /// return MaterialApp(
36 /// localizationsDelegates: AppLocalizations.localizationsDelegates,
37 /// supportedLocales: AppLocalizations.supportedLocales,
38 /// home: MyApplicationHome(),
39 /// );
40 /// ```
41 ///
42 /// ## Update pubspec.yaml
43 ///
44 /// Please make sure to update your pubspec.yaml to include the following
45 /// packages:
46 ///
47 /// ```yaml
48 /// dependencies:
49 /// # Internationalization support.
50 /// flutter_localizations:
51 /// sdk: flutter
52 /// intl: any # Use the pinned version from flutter_localizations
53 ///
54 /// # Rest of dependencies
55 /// ```
56 ///
57 /// ## iOS Applications
58 ///
59 /// iOS applications define key application metadata, including supported
60 /// locales, in an Info.plist file that is built into the application bundle.
61 /// To configure the locales supported by your app, you’ll need to edit this
62 /// file.
63 ///
64 /// First, open your project’s ios/Runner.xcworkspace Xcode workspace file.
65 /// Then, in the Project Navigator, open the Info.plist file under the Runner
66 /// project’s Runner folder.
67 ///
68 /// Next, select the Information Property List item, select Add Item from the
69 /// Editor menu, then select Localizations from the pop-up menu.
70 ///
71 /// Select and expand the newly-created Localizations item then, for each
72 /// locale your application supports, add a new item and select the locale
73 /// you wish to add from the pop-up menu in the Value field. This list should
74 /// be consistent with the languages listed in the AppLocalizations.supportedLocales
75 /// property.
76 abstract class AppLocalizations {
77 AppLocalizations(String locale)
78 : localeName = intl.Intl.canonicalizedLocale(locale.toString());
79
80 final String localeName;
81
82 static AppLocalizations? of(BuildContext context) {
83 return Localizations.of<AppLocalizations>(context, AppLocalizations);
84 }
85
86 static const LocalizationsDelegate<AppLocalizations> delegate =
87 _AppLocalizationsDelegate();
88
89 /// A list of this localizations delegate along with the default localizations
90 /// delegates.
91 ///
92 /// Returns a list of localizations delegates containing this delegate along with
93 /// GlobalMaterialLocalizations.delegate, GlobalCupertinoLocalizations.delegate,
94 /// and GlobalWidgetsLocalizations.delegate.
95 ///
96 /// Additional delegates can be added by appending to this list in
97 /// MaterialApp. This list does not have to be used at all if a custom list
98 /// of delegates is preferred or required.
99 static const List<LocalizationsDelegate<dynamic>> localizationsDelegates =
100 <LocalizationsDelegate<dynamic>>[
101 delegate,
102 GlobalMaterialLocalizations.delegate,
103 GlobalCupertinoLocalizations.delegate,
104 GlobalWidgetsLocalizations.delegate,
105 ];
106
107 /// A list of this localizations delegate's supported locales.
108 static const List<Locale> supportedLocales = <Locale>[
109 Locale('ar'),
110 Locale('bn'),
111 Locale('de'),
112 Locale('en'),
113 Locale('es'),
114 Locale('fr'),
115 Locale('hi'),
116 Locale('it'),
117 Locale('ja'),
118 Locale('ko'),
119 Locale('pt'),
120 Locale('ru'),
121 Locale('tr'),
122 Locale('zh'),
123 Locale('zh', 'TW'),
124 ];
125
126 /// Application display name
127 ///
128 /// In en, this message translates to:
129 /// **'LocalMind'**
130 String get app_name;
131
132 /// Application tagline shown in settings and splash
133 ///
134 /// In en, this message translates to:
135 /// **'Your AI. Your Device. Your Rules.'**
136 String get app_tagline;
137
138 /// Application version number
139 ///
140 /// In en, this message translates to:
141 /// **'1.0.0'**
142 String get app_version;
143
144 /// Generic cancel button label
145 ///
146 /// In en, this message translates to:
147 /// **'Cancel'**
148 String get cancel;
149
150 /// Generic confirm button label
151 ///
152 /// In en, this message translates to:
153 /// **'Confirm'**
154 String get confirm;
155
156 /// Generic delete button label
157 ///
158 /// In en, this message translates to:
159 /// **'Delete'**
160 String get delete;
161
162 /// Generic save button label
163 ///
164 /// In en, this message translates to:
165 /// **'Save'**
166 String get save;
167
168 /// Generic retry button label
169 ///
170 /// In en, this message translates to:
171 /// **'Retry'**
172 String get retry;
173
174 /// Generic close button label
175 ///
176 /// In en, this message translates to:
177 /// **'Close'**
178 String get close;
179
180 /// Generic done button label
181 ///
182 /// In en, this message translates to:
183 /// **'Done'**
184 String get done;
185
186 /// Generic continue button label
187 ///
188 /// In en, this message translates to:
189 /// **'Continue'**
190 String get continue_action;
191
192 /// Generic skip button label
193 ///
194 /// In en, this message translates to:
195 /// **'Skip'**
196 String get skip;
197
198 /// Install action button
199 ///
200 /// In en, this message translates to:
201 /// **'Install'**
202 String get install;
203
204 /// Download action button
205 ///
206 /// In en, this message translates to:
207 /// **'Download'**
208 String get download;
209
210 /// Resume download button
211 ///
212 /// In en, this message translates to:
213 /// **'Resume'**
214 String get resume;
215
216 /// Pause download button
217 ///
218 /// In en, this message translates to:
219 /// **'Pause'**
220 String get pause;
221
222 /// Stop action button
223 ///
224 /// In en, this message translates to:
225 /// **'Stop'**
226 String get stop;
227
228 /// Edit action label
229 ///
230 /// In en, this message translates to:
231 /// **'Edit'**
232 String get edit;
233
234 /// Preview action label
235 ///
236 /// In en, this message translates to:
237 /// **'Preview'**
238 String get preview;
239
240 /// Unload model action
241 ///
242 /// In en, this message translates to:
243 /// **'Unload'**
244 String get unload;
245
246 /// Load model action
247 ///
248 /// In en, this message translates to:
249 /// **'Load'**
250 String get load;
251
252 /// Rename action label
253 ///
254 /// In en, this message translates to:
255 /// **'Rename'**
256 String get rename;
257
258 /// Pin conversation action
259 ///
260 /// In en, this message translates to:
261 /// **'Pin'**
262 String get pin;
263
264 /// Unpin conversation action
265 ///
266 /// In en, this message translates to:
267 /// **'Unpin'**
268 String get unpin;
269
270 /// Share action label
271 ///
272 /// In en, this message translates to:
273 /// **'Share'**
274 String get share;
275
276 /// Copy action label
277 ///
278 /// In en, this message translates to:
279 /// **'Copy'**
280 String get copy;
281
282 /// Copied confirmation text
283 ///
284 /// In en, this message translates to:
285 /// **'Copied!'**
286 String get copied;
287
288 /// Snackbar message after copy
289 ///
290 /// In en, this message translates to:
291 /// **'Copied to clipboard'**
292 String get copied_to_clipboard;
293
294 /// Select action button
295 ///
296 /// In en, this message translates to:
297 /// **'Select'**
298 String get select;
299
300 /// Active status badge
301 ///
302 /// In en, this message translates to:
303 /// **'Active'**
304 String get active;
305
306 /// All filter label
307 ///
308 /// In en, this message translates to:
309 /// **'All'**
310 String get all;
311
312 /// No selection label
313 ///
314 /// In en, this message translates to:
315 /// **'None'**
316 String get none;
317
318 /// Dropdown placeholder when nothing selected
319 ///
320 /// In en, this message translates to:
321 /// **'None selected'**
322 String get none_selected;
323
324 /// Connection status online
325 ///
326 /// In en, this message translates to:
327 /// **'Online'**
328 String get online;
329
330 /// Server connection status when actively connected
331 ///
332 /// In en, this message translates to:
333 /// **'Connected'**
334 String get connected;
335
336 /// Server connection status while being tested
337 ///
338 /// In en, this message translates to:
339 /// **'Checking'**
340 String get checking;
341
342 /// Connection status offline
343 ///
344 /// In en, this message translates to:
345 /// **'Offline'**
346 String get offline;
347
348 /// Error status text
349 ///
350 /// In en, this message translates to:
351 /// **'Error'**
352 String get error;
353
354 /// Fallback unknown error message
355 ///
356 /// In en, this message translates to:
357 /// **'Unknown error'**
358 String get unknown_error;
359
360 /// Dismiss action for notifications
361 ///
362 /// In en, this message translates to:
363 /// **'Not Now'**
364 String get not_now;
365
366 /// Enable action button
367 ///
368 /// In en, this message translates to:
369 /// **'Enable'**
370 String get enable;
371
372 /// Proceed despite warning
373 ///
374 /// In en, this message translates to:
375 /// **'Proceed Anyway'**
376 String get proceed_anyway;
377
378 /// Button to test server connection
379 ///
380 /// In en, this message translates to:
381 /// **'Test Connection'**
382 String get test_connection;
383
384 /// Button label while testing connection
385 ///
386 /// In en, this message translates to:
387 /// **'Testing...'**
388 String get testing;
389
390 /// Connection test success message
391 ///
392 /// In en, this message translates to:
393 /// **'Connection successful!'**
394 String get connection_successful;
395
396 /// Connection test failure message
397 ///
398 /// In en, this message translates to:
399 /// **'Connection failed. Check your settings.'**
400 String get connection_failed;
401
402 /// Save and proceed button
403 ///
404 /// In en, this message translates to:
405 /// **'Save & Continue'**
406 String get save_continue;
407
408 /// Save changes button
409 ///
410 /// In en, this message translates to:
411 /// **'Save Changes'**
412 String get save_changes;
413
414 /// Complete onboarding button
415 ///
416 /// In en, this message translates to:
417 /// **'Finish Setup'**
418 String get finish_setup;
419
420 /// Button to start a new chat
421 ///
422 /// In en, this message translates to:
423 /// **'Start New Chat'**
424 String get start_new_chat;
425
426 /// Warning for destructive actions
427 ///
428 /// In en, this message translates to:
429 /// **'This action cannot be undone.'**
430 String get cannot_undo;
431
432 /// RAM warning dialog title
433 ///
434 /// In en, this message translates to:
435 /// **'RAM Warning'**
436 String get ram_warning;
437
438 /// Recommended badge on model cards
439 ///
440 /// In en, this message translates to:
441 /// **'RECOMMENDED'**
442 String get recommended;
443
444 /// Warning when model may exceed device RAM
445 ///
446 /// In en, this message translates to:
447 /// **'May be too large for this device'**
448 String get may_be_large;
449
450 /// ETA placeholder during download
451 ///
452 /// In en, this message translates to:
453 /// **'Calculating...'**
454 String get calculating;
455
456 /// Download failure status
457 ///
458 /// In en, this message translates to:
459 /// **'Download failed'**
460 String get download_failed;
461
462 /// Download completed status
463 ///
464 /// In en, this message translates to:
465 /// **'Downloaded'**
466 String get downloaded;
467
468 /// Model not yet downloaded
469 ///
470 /// In en, this message translates to:
471 /// **'Not downloaded'**
472 String get not_downloaded;
473
474 /// Installed status
475 ///
476 /// In en, this message translates to:
477 /// **'Installed'**
478 String get installed;
479
480 /// Not installed status
481 ///
482 /// In en, this message translates to:
483 /// **'Not installed'**
484 String get not_installed;
485
486 /// Generic loading indicator text
487 ///
488 /// In en, this message translates to:
489 /// **'Loading...'**
490 String get loading;
491
492 /// Model thinking indicator
493 ///
494 /// In en, this message translates to:
495 /// **'Thinking'**
496 String get thinking;
497
498 /// Processing indicator text
499 ///
500 /// In en, this message translates to:
501 /// **'Processing...'**
502 String get processing;
503
504 /// Initializing status
505 ///
506 /// In en, this message translates to:
507 /// **'Initializing...'**
508 String get initializing;
509
510 /// Ready status text
511 ///
512 /// In en, this message translates to:
513 /// **'Ready'**
514 String get ready;
515
516 /// Bootstrap stage message
517 ///
518 /// In en, this message translates to:
519 /// **'Preparing app...'**
520 String get preparing_app;
521
522 /// Bootstrap stage message
523 ///
524 /// In en, this message translates to:
525 /// **'Initializing services...'**
526 String get initializing_services;
527
528 /// Bootstrap stage message
529 ///
530 /// In en, this message translates to:
531 /// **'Configuring server...'**
532 String get configuring_server;
533
534 /// Bootstrap error message
535 ///
536 /// In en, this message translates to:
537 /// **'Startup failed'**
538 String get startup_failed;
539
540 /// Generic error heading on bootstrap screen
541 ///
542 /// In en, this message translates to:
543 /// **'Something went wrong'**
544 String get something_went_wrong;
545
546 /// Delete model dialog title
547 ///
548 /// In en, this message translates to:
549 /// **'Delete Model'**
550 String get delete_model_title;
551
552 /// Delete model confirmation dialog body
553 ///
554 /// In en, this message translates to:
555 /// **'Are you sure you want to delete {name}?'**
556 String delete_model_body(String name);
557
558 /// Delete model dialog body with size info
559 ///
560 /// In en, this message translates to:
561 /// **'Are you sure you want to delete {name}? This will free up approximately {size} of space.\n\nYou can download this model again later if needed.'**
562 String delete_model_body_with_size(String name, String size);
563
564 /// Delete voice confirmation dialog title
565 ///
566 /// In en, this message translates to:
567 /// **'Delete Voice'**
568 String get delete_voice_title;
569
570 /// Delete voice confirmation dialog body
571 ///
572 /// In en, this message translates to:
573 /// **'Are you sure you want to delete {name}? This will free up approximately {size} of space.\n\nYou can download this voice again later if needed.'**
574 String delete_voice_body(String name, String size);
575
576 /// Delete server confirmation dialog title
577 ///
578 /// In en, this message translates to:
579 /// **'Delete Server'**
580 String get delete_server_title;
581
582 /// Delete server confirmation body
583 ///
584 /// In en, this message translates to:
585 /// **'Are you sure you want to delete \"{name}\"? This cannot be undone.'**
586 String delete_server_body(String name);
587
588 /// Delete conversation dialog title
589 ///
590 /// In en, this message translates to:
591 /// **'Delete conversation?'**
592 String get delete_conversation_title;
593
594 /// Delete conversation dialog body
595 ///
596 /// In en, this message translates to:
597 /// **'Are you sure you want to delete \"{title}\"? This cannot be undone.'**
598 String delete_conversation_body(String title);
599
600 /// Delete message dialog title
601 ///
602 /// In en, this message translates to:
603 /// **'Delete message?'**
604 String get delete_message_title;
605
606 /// Delete persona dialog title
607 ///
608 /// In en, this message translates to:
609 /// **'Delete \"{name}\"?'**
610 String delete_persona_title(String name);
611
612 /// Delete persona dialog body
613 ///
614 /// In en, this message translates to:
615 /// **'This cannot be undone.'**
616 String get delete_persona_body;
617
618 /// Delete built-in persona dialog body
619 ///
620 /// In en, this message translates to:
621 /// **'This is a built-in persona. You can restore it later from Settings.'**
622 String get delete_builtin_persona_body;
623
624 /// Settings action to re-add any deleted built-in personas
625 ///
626 /// In en, this message translates to:
627 /// **'Restore default personas'**
628 String get restore_builtin_personas;
629
630 /// Settings description for restore built-in personas
631 ///
632 /// In en, this message translates to:
633 /// **'Re-add any built-in personas you\'ve deleted'**
634 String get restore_builtin_personas_desc;
635
636 /// Snackbar after restoring built-in personas
637 ///
638 /// In en, this message translates to:
639 /// **'Default personas restored'**
640 String get restore_builtin_personas_success;
641
642 /// Button to clear all selected personas in the picker
643 ///
644 /// In en, this message translates to:
645 /// **'Clear personas'**
646 String get clear_personas;
647
648 /// Settings toggle to enable/disable automatic image compression
649 ///
650 /// In en, this message translates to:
651 /// **'Compress images before sending'**
652 String get enable_image_compression;
653
654 /// Description for the image compression toggle
655 ///
656 /// In en, this message translates to:
657 /// **'Resize and compress attached images so uploads stay within server limits'**
658 String get enable_image_compression_desc;
659
660 /// Label for the image compression level selector
661 ///
662 /// In en, this message translates to:
663 /// **'Compression aggressiveness'**
664 String get image_compression_level;
665
666 /// Description for the image compression level selector
667 ///
668 /// In en, this message translates to:
669 /// **'Higher aggressiveness produces smaller uploads at lower quality'**
670 String get image_compression_level_desc;
671
672 /// Low image compression aggressiveness
673 ///
674 /// In en, this message translates to:
675 /// **'Low'**
676 String get image_compression_level_low;
677
678 /// Medium image compression aggressiveness
679 ///
680 /// In en, this message translates to:
681 /// **'Medium'**
682 String get image_compression_level_medium;
683
684 /// High image compression aggressiveness
685 ///
686 /// In en, this message translates to:
687 /// **'High'**
688 String get image_compression_level_high;
689
690 /// Tooltip for the model list sort button
691 ///
692 /// In en, this message translates to:
693 /// **'Sort models'**
694 String get sort_models_tooltip;
695
696 /// Sort models with favorites first, then alphabetically
697 ///
698 /// In en, this message translates to:
699 /// **'Favorites first'**
700 String get sort_by_favorites;
701
702 /// Sort models alphabetically by name
703 ///
704 /// In en, this message translates to:
705 /// **'Name (A-Z)'**
706 String get sort_by_name;
707
708 /// Sort models by file size, smallest first
709 ///
710 /// In en, this message translates to:
711 /// **'Size (smallest first)'**
712 String get sort_by_size_smallest;
713
714 /// Sort models by file size, largest first
715 ///
716 /// In en, this message translates to:
717 /// **'Size (largest first)'**
718 String get sort_by_size_largest;
719
720 /// Sort models by max context length, largest first
721 ///
722 /// In en, this message translates to:
723 /// **'Context length'**
724 String get sort_by_context_length;
725
726 /// Progress text while AI-renaming multiple conversations
727 ///
728 /// In en, this message translates to:
729 /// **'Renaming {done}/{total}...'**
730 String bulk_ai_rename_progress(int done, int total);
731
732 /// Header shown in selection mode
733 ///
734 /// In en, this message translates to:
735 /// **'{count} selected'**
736 String selected_count(int count);
737
738 /// Tooltip for bulk AI rename button
739 ///
740 /// In en, this message translates to:
741 /// **'Rename selected with AI'**
742 String get ai_rename_tooltip;
743
744 /// Tooltip for the history screen new-chat FAB
745 ///
746 /// In en, this message translates to:
747 /// **'New chat in this folder'**
748 String get new_chat_in_folder_tooltip;
749
750 /// Total token count shown under the chat text field
751 ///
752 /// In en, this message translates to:
753 /// **'{count} tokens'**
754 String total_tokens_count(int count);
755
756 /// Settings toggle to include persona system prompt when generating smart reply suggestions
757 ///
758 /// In en, this message translates to:
759 /// **'Use persona in smart replies'**
760 String get smart_replies_use_persona;
761
762 /// Description for the smart-replies-use-persona toggle
763 ///
764 /// In en, this message translates to:
765 /// **'Suggested replies match the tone of the active persona instead of a generic assistant'**
766 String get smart_replies_use_persona_desc;
767
768 /// Settings toggle to not clear persona selection when starting a new chat
769 ///
770 /// In en, this message translates to:
771 /// **'Keep persona on new chat'**
772 String get keep_persona_on_new_chat;
773
774 /// Description for the keep-persona-on-new-chat toggle
775 ///
776 /// In en, this message translates to:
777 /// **'Don\'t clear the selected persona(s) after starting a new chat'**
778 String get keep_persona_on_new_chat_desc;
779
780 /// Settings toggle to show a button that lets the user send a message as the assistant role
781 ///
782 /// In en, this message translates to:
783 /// **'Show role-swap button'**
784 String get role_swap_button_enabled;
785
786 /// Description for the role-swap-button-enabled toggle
787 ///
788 /// In en, this message translates to:
789 /// **'Show a button in the chat input to send your message as the assistant instead of the user, without generating a response'**
790 String get role_swap_button_enabled_desc;
791
792 /// Tooltip for the role-swap button when it will send as the user role
793 ///
794 /// In en, this message translates to:
795 /// **'Send as user'**
796 String get send_as_user_tooltip;
797
798 /// Tooltip for the role-swap button when it will send as the assistant role
799 ///
800 /// In en, this message translates to:
801 /// **'Send as assistant (no response)'**
802 String get send_as_assistant_tooltip;
803
804 /// Tooltip shown for long-pressing the send button to insert a message without generating a response
805 ///
806 /// In en, this message translates to:
807 /// **'Insert without generating'**
808 String get insert_without_generating_tooltip;
809
810 /// Title of the sheet shown when tapping the token usage indicator
811 ///
812 /// In en, this message translates to:
813 /// **'Token Usage'**
814 String get token_usage_title;
815
816 /// Label for the total token count row in the token usage sheet
817 ///
818 /// In en, this message translates to:
819 /// **'Tokens used'**
820 String get total_tokens_label;
821
822 /// Label for the percentage-of-context-length row in the token usage sheet
823 ///
824 /// In en, this message translates to:
825 /// **'Context used'**
826 String get usage_percent_label;
827
828 /// Title for the copy-vs-share export choice dialog
829 ///
830 /// In en, this message translates to:
831 /// **'Export'**
832 String get export_choice_title;
833
834 /// Body text for the copy-vs-share export choice dialog
835 ///
836 /// In en, this message translates to:
837 /// **'How would you like to export this?'**
838 String get export_choice_body;
839
840 /// Button to copy export content to the clipboard
841 ///
842 /// In en, this message translates to:
843 /// **'Copy to Clipboard'**
844 String get copy_to_clipboard;
845
846 /// Success message after bulk-exporting conversations
847 ///
848 /// In en, this message translates to:
849 /// **'Exported {count} conversations'**
850 String bulk_export_conversations_success(int count);
851
852 /// Title for the bulk AI rename confirmation dialog
853 ///
854 /// In en, this message translates to:
855 /// **'Rename with AI?'**
856 String get bulk_ai_rename_confirm_title;
857
858 /// Body text for the bulk AI rename confirmation dialog
859 ///
860 /// In en, this message translates to:
861 /// **'This will ask the AI to generate a new title for each of the {count} selected conversations, replacing their current titles. This can take a while and cannot be undone.'**
862 String bulk_ai_rename_confirm_body(int count);
863
864 /// Sort history by last modified date
865 ///
866 /// In en, this message translates to:
867 /// **'Last modified'**
868 String get sort_by_modified_date;
869
870 /// Sort history by creation date
871 ///
872 /// In en, this message translates to:
873 /// **'Date created'**
874 String get sort_by_created_date;
875
876 /// Tooltip for the history sort button
877 ///
878 /// In en, this message translates to:
879 /// **'Sort'**
880 String get sort_title;
881
882 /// Clear conversation dialog title
883 ///
884 /// In en, this message translates to:
885 /// **'Clear conversation?'**
886 String get clear_conversation_title;
887
888 /// Clear conversation confirmation body
889 ///
890 /// In en, this message translates to:
891 /// **'This will delete all messages in this conversation.'**
892 String get clear_conversation_body;
893
894 /// Clear action button
895 ///
896 /// In en, this message translates to:
897 /// **'Clear'**
898 String get clear;
899
900 /// Completion status message
901 ///
902 /// In en, this message translates to:
903 /// **'{label} completed'**
904 String label_completed(String label);
905
906 /// Error display with message
907 ///
908 /// In en, this message translates to:
909 /// **'Error: {error}'**
910 String error_with_message(String error);
911
912 /// Audio preview failed message
913 ///
914 /// In en, this message translates to:
915 /// **'Preview failed: {error}'**
916 String preview_failed(String error);
917
918 /// Model loading status
919 ///
920 /// In en, this message translates to:
921 /// **'Loading {modelId}...'**
922 String loading_model(String modelId);
923
924 /// Model loaded status in settings
925 ///
926 /// In en, this message translates to:
927 /// **'Model loaded: {modelId} ({backend})'**
928 String model_loaded(String modelId, String backend);
929
930 /// Status when no on-device model is loaded
931 ///
932 /// In en, this message translates to:
933 /// **'No model loaded. Tap \"Manage On-Device Models\" to download and load a model.'**
934 String get no_model_loaded;
935
936 /// Model loading error status
937 ///
938 /// In en, this message translates to:
939 /// **'Error: {error}'**
940 String loading_model_error(String error);
941
942 /// Delete conversation dialog title
943 ///
944 /// In en, this message translates to:
945 /// **'Delete conversation?'**
946 String get delete_conversation;
947
948 /// Navigation item for chat history
949 ///
950 /// In en, this message translates to:
951 /// **'History'**
952 String get nav_history;
953
954 /// Navigation item for servers
955 ///
956 /// In en, this message translates to:
957 /// **'Servers'**
958 String get nav_servers;
959
960 /// Navigation item for local on-device models
961 ///
962 /// In en, this message translates to:
963 /// **'Local Models'**
964 String get nav_local_models;
965
966 /// Navigation item for TTS models
967 ///
968 /// In en, this message translates to:
969 /// **'Text To Speech'**
970 String get nav_tts;
971
972 /// Navigation item for personas
973 ///
974 /// In en, this message translates to:
975 /// **'Personas'**
976 String get nav_personas;
977
978 /// Navigation item for settings
979 ///
980 /// In en, this message translates to:
981 /// **'Settings'**
982 String get nav_settings;
983
984 /// Button to start a new chat
985 ///
986 /// In en, this message translates to:
987 /// **'New Chat'**
988 String get nav_new_chat;
989
990 /// Search field placeholder for conversations
991 ///
992 /// In en, this message translates to:
993 /// **'Search conversations...'**
994 String get search_hint;
995
996 /// Placeholder when no server is selected
997 ///
998 /// In en, this message translates to:
999 /// **'No server selected'**
1000 String get no_server_selected;
1001
1002 /// Switch server sheet title
1003 ///
1004 /// In en, this message translates to:
1005 /// **'Switch Server'**
1006 String get switch_server;
1007
1008 /// Switch server sheet subtitle
1009 ///
1010 /// In en, this message translates to:
1011 /// **'Choose a server to connect to'**
1012 String get switch_server_subtitle;
1013
1014 /// Button to manage servers list
1015 ///
1016 /// In en, this message translates to:
1017 /// **'Manage Servers'**
1018 String get manage_servers;
1019
1020 /// GitHub repo card title
1021 ///
1022 /// In en, this message translates to:
1023 /// **'Open Source'**
1024 String get open_source;
1025
1026 /// GitHub repo card description
1027 ///
1028 /// In en, this message translates to:
1029 /// **'LocalMind is open source. Follow our progress or contribute on GitHub.'**
1030 String get open_source_desc;
1031
1032 /// Button to star repo on GitHub
1033 ///
1034 /// In en, this message translates to:
1035 /// **'Star on GitHub'**
1036 String get star_on_github;
1037
1038 /// Label for the decorative GitHub tile on onboarding
1039 ///
1040 /// In en, this message translates to:
1041 /// **'Add more'**
1042 String get add_more;
1043
1044 /// Secondary label for the decorative GitHub tile on onboarding
1045 ///
1046 /// In en, this message translates to:
1047 /// **'on GitHub'**
1048 String get on_github;
1049
1050 /// Snackbar text shown when opening the GitHub repo fails
1051 ///
1052 /// In en, this message translates to:
1053 /// **'Could not open GitHub.'**
1054 String get could_not_open_github;
1055
1056 /// Settings screen title
1057 ///
1058 /// In en, this message translates to:
1059 /// **'Settings'**
1060 String get settings_title;
1061
1062 /// Settings section header for appearance
1063 ///
1064 /// In en, this message translates to:
1065 /// **'Appearance'**
1066 String get settings_appearance;
1067
1068 /// Settings section label for language selection
1069 ///
1070 /// In en, this message translates to:
1071 /// **'Language'**
1072 String get settings_language;
1073
1074 /// Option to use the device's system language
1075 ///
1076 /// In en, this message translates to:
1077 /// **'System Default'**
1078 String get language_system_default;
1079
1080 /// Settings section header for TTS
1081 ///
1082 /// In en, this message translates to:
1083 /// **'Text-to-Speech'**
1084 String get settings_tts;
1085
1086 /// Settings section header for Android default assistant integration
1087 ///
1088 /// In en, this message translates to:
1089 /// **'Android Assistant'**
1090 String get settings_android_assistant;
1091
1092 /// Title for the Android default assistant setting
1093 ///
1094 /// In en, this message translates to:
1095 /// **'Use LocalMind as your assistant'**
1096 String get assistant_default_title;
1097
1098 /// Description for the Android default assistant setting
1099 ///
1100 /// In en, this message translates to:
1101 /// **'Launch voice mode with Android\'s assistant gesture or power-button shortcut.'**
1102 String get assistant_default_description;
1103
1104 /// Status shown when LocalMind is the default Android assistant
1105 ///
1106 /// In en, this message translates to:
1107 /// **'Active'**
1108 String get assistant_status_active;
1109
1110 /// Status shown when LocalMind can request the Android assistant role
1111 ///
1112 /// In en, this message translates to:
1113 /// **'Not active'**
1114 String get assistant_status_available;
1115
1116 /// Status shown when assistant selection must be checked in Android settings
1117 ///
1118 /// In en, this message translates to:
1119 /// **'Check settings'**
1120 String get assistant_status_manual;
1121
1122 /// Status shown when the Android assistant role is unavailable
1123 ///
1124 /// In en, this message translates to:
1125 /// **'Unavailable'**
1126 String get assistant_status_unsupported;
1127
1128 /// Status shown while checking the Android assistant role
1129 ///
1130 /// In en, this message translates to:
1131 /// **'Checking…'**
1132 String get assistant_status_checking;
1133
1134 /// Button that requests the Android default assistant role
1135 ///
1136 /// In en, this message translates to:
1137 /// **'Set as default assistant'**
1138 String get assistant_set_default;
1139
1140 /// Button that opens Android assistant settings
1141 ///
1142 /// In en, this message translates to:
1143 /// **'Open Android assistant settings'**
1144 String get assistant_open_settings;
1145
1146 /// Error shown when Android assistant settings cannot be opened
1147 ///
1148 /// In en, this message translates to:
1149 /// **'Could not open Android assistant settings.'**
1150 String assistant_error(Object error);
1151
1152 /// Settings section header for behavior
1153 ///
1154 /// In en, this message translates to:
1155 /// **'Behavior'**
1156 String get settings_behavior;
1157
1158 /// Settings section header for on-device
1159 ///
1160 /// In en, this message translates to:
1161 /// **'On-Device Inference'**
1162 String get settings_on_device;
1163
1164 /// Settings section header for default server
1165 ///
1166 /// In en, this message translates to:
1167 /// **'Default Server'**
1168 String get settings_default_server;
1169
1170 /// Settings section header for default persona
1171 ///
1172 /// In en, this message translates to:
1173 /// **'Default Persona'**
1174 String get settings_default_persona;
1175
1176 /// Settings label for the default model used in new chats
1177 ///
1178 /// In en, this message translates to:
1179 /// **'Default Model'**
1180 String get settings_default_model;
1181
1182 /// Helper text for the default model setting
1183 ///
1184 /// In en, this message translates to:
1185 /// **'Automatically selected when you start a new chat.'**
1186 String get settings_default_model_desc;
1187
1188 /// Settings section header for privacy
1189 ///
1190 /// In en, this message translates to:
1191 /// **'Privacy'**
1192 String get settings_privacy;
1193
1194 /// Settings section header for data management
1195 ///
1196 /// In en, this message translates to:
1197 /// **'Data Management'**
1198 String get settings_data_management;
1199
1200 /// Settings section header for about
1201 ///
1202 /// In en, this message translates to:
1203 /// **'About'**
1204 String get settings_about;
1205
1206 /// Theme selection label
1207 ///
1208 /// In en, this message translates to:
1209 /// **'Theme'**
1210 String get theme;
1211
1212 /// System theme option
1213 ///
1214 /// In en, this message translates to:
1215 /// **'System'**
1216 String get theme_system;
1217
1218 /// Light theme option
1219 ///
1220 /// In en, this message translates to:
1221 /// **'Light'**
1222 String get theme_light;
1223
1224 /// Dark theme option
1225 ///
1226 /// In en, this message translates to:
1227 /// **'Dark'**
1228 String get theme_dark;
1229
1230 /// Claude theme option
1231 ///
1232 /// In en, this message translates to:
1233 /// **'Claude'**
1234 String get theme_claude;
1235
1236 /// Font size slider label
1237 ///
1238 /// In en, this message translates to:
1239 /// **'Font Size'**
1240 String get font_size;
1241
1242 /// Font size setting description
1243 ///
1244 /// In en, this message translates to:
1245 /// **'Adjust text size in chat.'**
1246 String get font_size_desc;
1247
1248 /// Font preview sample text
1249 ///
1250 /// In en, this message translates to:
1251 /// **'The quick brown fox jumps over the lazy dog.'**
1252 String get font_preview;
1253
1254 /// Dark code theme dropdown label
1255 ///
1256 /// In en, this message translates to:
1257 /// **'Code Theme (Dark)'**
1258 String get code_theme_dark;
1259
1260 /// Light code theme dropdown label
1261 ///
1262 /// In en, this message translates to:
1263 /// **'Code Theme (Light)'**
1264 String get code_theme_light;
1265
1266 /// Code theme setting description
1267 ///
1268 /// In en, this message translates to:
1269 /// **'Choose syntax highlighting theme for code blocks.'**
1270 String get code_theme_desc;
1271
1272 /// TTS engine dropdown label
1273 ///
1274 /// In en, this message translates to:
1275 /// **'TTS Engine'**
1276 String get tts_engine;
1277
1278 /// System TTS engine option
1279 ///
1280 /// In en, this message translates to:
1281 /// **'System TTS'**
1282 String get tts_engine_system;
1283
1284 /// Kitten TTS engine option
1285 ///
1286 /// In en, this message translates to:
1287 /// **'Kitten TTS'**
1288 String get tts_engine_kitten;
1289
1290 /// Voice selection label
1291 ///
1292 /// In en, this message translates to:
1293 /// **'Voice'**
1294 String get voice;
1295
1296 /// Female voice gender label
1297 ///
1298 /// In en, this message translates to:
1299 /// **'Female'**
1300 String get voice_female;
1301
1302 /// Male voice gender label
1303 ///
1304 /// In en, this message translates to:
1305 /// **'Male'**
1306 String get voice_male;
1307
1308 /// Other voice gender label
1309 ///
1310 /// In en, this message translates to:
1311 /// **'Other'**
1312 String get voice_other;
1313
1314 /// TTS speed slider label
1315 ///
1316 /// In en, this message translates to:
1317 /// **'TTS Speed'**
1318 String get tts_speed;
1319
1320 /// TTS speed setting description
1321 ///
1322 /// In en, this message translates to:
1323 /// **'Adjust the playback rate.'**
1324 String get tts_speed_desc;
1325
1326 /// Button to manage TTS models
1327 ///
1328 /// In en, this message translates to:
1329 /// **'Manage TTS Models'**
1330 String get manage_tts_models;
1331
1332 /// Button to manage on-device models
1333 ///
1334 /// In en, this message translates to:
1335 /// **'Manage On-Device Models'**
1336 String get manage_on_device_models;
1337
1338 /// Toggle for on-device smart reply suggestions
1339 ///
1340 /// In en, this message translates to:
1341 /// **'On-Device Smart Replies'**
1342 String get enable_smart_reply;
1343
1344 /// Settings toggle for AI-generated user message triggered by holding the send button
1345 ///
1346 /// In en, this message translates to:
1347 /// **'AI user message (hold send)'**
1348 String get ai_user_response_enabled;
1349
1350 /// Description for the hold-to-generate-AI-user-message toggle
1351 ///
1352 /// In en, this message translates to:
1353 /// **'Hold the send button for 3 seconds to have the AI write and send your next message'**
1354 String get ai_user_response_enabled_desc;
1355
1356 /// Tooltip for the AI user message button next to send
1357 ///
1358 /// In en, this message translates to:
1359 /// **'Generate user message with AI'**
1360 String get ai_user_response_tooltip;
1361
1362 /// Toggle for streaming responses
1363 ///
1364 /// In en, this message translates to:
1365 /// **'Streaming Responses'**
1366 String get streaming_responses;
1367
1368 /// Toggle for auto-generating conversation titles
1369 ///
1370 /// In en, this message translates to:
1371 /// **'Auto-generate Titles'**
1372 String get auto_generate_titles;
1373
1374 /// Toggle for send on enter behavior
1375 ///
1376 /// In en, this message translates to:
1377 /// **'Send on Enter'**
1378 String get send_on_enter;
1379
1380 /// Toggle for sending a default 'You are LocalMind' system prompt to the model when no persona is selected
1381 ///
1382 /// In en, this message translates to:
1383 /// **'Send Default System Prompt'**
1384 String get show_system_messages;
1385
1386 /// Description for the send-default-system-prompt toggle
1387 ///
1388 /// In en, this message translates to:
1389 /// **'When no persona is selected, send a default assistant system prompt with each request'**
1390 String get show_system_messages_desc;
1391
1392 /// Toggle for whether system-role messages are displayed as bubbles in the chat transcript
1393 ///
1394 /// In en, this message translates to:
1395 /// **'Show System Messages in Chat'**
1396 String get show_system_messages_in_chat;
1397
1398 /// Description for the show-system-messages-in-chat toggle
1399 ///
1400 /// In en, this message translates to:
1401 /// **'Display system messages (e.g. from an imported backup) as visible bubbles in the conversation'**
1402 String get show_system_messages_in_chat_desc;
1403
1404 /// Toggle for automatically collapsing reasoning bubbles after generation completes
1405 ///
1406 /// In en, this message translates to:
1407 /// **'Auto-collapse Thinking'**
1408 String get auto_collapse_thinking;
1409
1410 /// Description for the auto-collapse thinking toggle
1411 ///
1412 /// In en, this message translates to:
1413 /// **'Automatically collapse reasoning process after response generation completes when a main answer is present'**
1414 String get auto_collapse_thinking_desc;
1415
1416 /// Toggle for haptic feedback
1417 ///
1418 /// In en, this message translates to:
1419 /// **'Haptic Feedback'**
1420 String get haptic_feedback;
1421
1422 /// Toggle for MCP feature
1423 ///
1424 /// In en, this message translates to:
1425 /// **'Enable MCP'**
1426 String get enable_mcp;
1427
1428 /// Toggle for MCP default in new chats
1429 ///
1430 /// In en, this message translates to:
1431 /// **'New Chat MCP Default'**
1432 String get new_chat_mcp_default;
1433
1434 /// Toggle for data indicator visibility
1435 ///
1436 /// In en, this message translates to:
1437 /// **'Show Data Indicator'**
1438 String get show_data_indicator;
1439
1440 /// Privacy information text
1441 ///
1442 /// In en, this message translates to:
1443 /// **'\"LocalMind never sees your data\"'**
1444 String get privacy_info;
1445
1446 /// Dangerous action button to clear all conversations
1447 ///
1448 /// In en, this message translates to:
1449 /// **'Delete All Conversations'**
1450 String get delete_all_conversations;
1451
1452 /// Button to reset all settings
1453 ///
1454 /// In en, this message translates to:
1455 /// **'Reset Settings to Defaults'**
1456 String get reset_settings_defaults;
1457
1458 /// Fallback chat screen title
1459 ///
1460 /// In en, this message translates to:
1461 /// **'LocalMind'**
1462 String get chat_title;
1463
1464 /// Tooltip for chat parameters button
1465 ///
1466 /// In en, this message translates to:
1467 /// **'Chat Parameters'**
1468 String get chat_parameters_tooltip;
1469
1470 /// Menu item to change persona
1471 ///
1472 /// In en, this message translates to:
1473 /// **'Change Persona'**
1474 String get change_persona;
1475
1476 /// Menu item to set persona
1477 ///
1478 /// In en, this message translates to:
1479 /// **'Set Persona'**
1480 String get set_persona;
1481
1482 /// Menu item to remove persona
1483 ///
1484 /// In en, this message translates to:
1485 /// **'Remove Persona'**
1486 String get remove_persona;
1487
1488 /// Menu item to clear conversation
1489 ///
1490 /// In en, this message translates to:
1491 /// **'Clear Conversation'**
1492 String get clear_conversation;
1493
1494 /// Connection error banner text
1495 ///
1496 /// In en, this message translates to:
1497 /// **'Connection error. Check your server.'**
1498 String get connection_error;
1499
1500 /// Disconnected banner text
1501 ///
1502 /// In en, this message translates to:
1503 /// **'Disconnected from server.'**
1504 String get disconnected;
1505
1506 /// Configure action button
1507 ///
1508 /// In en, this message translates to:
1509 /// **'Configure'**
1510 String get configure;
1511
1512 /// Model selection placeholder
1513 ///
1514 /// In en, this message translates to:
1515 /// **'Select Model'**
1516 String get select_model;
1517
1518 /// Persona selection sheet title
1519 ///
1520 /// In en, this message translates to:
1521 /// **'Select Persona'**
1522 String get select_persona;
1523
1524 /// No description provided for @manage_personas.
1525 ///
1526 /// In en, this message translates to:
1527 /// **'Manage personas'**
1528 String get manage_personas;
1529
1530 /// Hint in persona manager about combining personas
1531 ///
1532 /// In en, this message translates to:
1533 /// **'Select multiple personas in chat to stack their system prompts.'**
1534 String get personas_combine_hint;
1535
1536 /// Empty state heading
1537 ///
1538 /// In en, this message translates to:
1539 /// **'Start a conversation'**
1540 String get start_conversation;
1541
1542 /// Recent chats section label
1543 ///
1544 /// In en, this message translates to:
1545 /// **'Recent chats'**
1546 String get recent_chats;
1547
1548 /// See all link text
1549 ///
1550 /// In en, this message translates to:
1551 /// **'See all'**
1552 String get see_all;
1553
1554 /// Quick prompt chip text
1555 ///
1556 /// In en, this message translates to:
1557 /// **'Help me write a function'**
1558 String get quick_write;
1559
1560 /// Quick prompt chip text
1561 ///
1562 /// In en, this message translates to:
1563 /// **'Explain this code'**
1564 String get quick_explain;
1565
1566 /// Quick prompt chip text
1567 ///
1568 /// In en, this message translates to:
1569 /// **'Debug this for me'**
1570 String get quick_debug;
1571
1572 /// Quick prompt chip text
1573 ///
1574 /// In en, this message translates to:
1575 /// **'How do I use async/await?'**
1576 String get quick_async;
1577
1578 /// Corrupted chat error title
1579 ///
1580 /// In en, this message translates to:
1581 /// **'History Missing'**
1582 String get history_missing_title;
1583
1584 /// Corrupted chat error description
1585 ///
1586 /// In en, this message translates to:
1587 /// **'Either the messages in this chat were deleted or the history record is corrupted.'**
1588 String get history_missing_desc;
1589
1590 /// Button for debug details
1591 ///
1592 /// In en, this message translates to:
1593 /// **'Technical Details'**
1594 String get technical_details;
1595
1596 /// Diagnostic label
1597 ///
1598 /// In en, this message translates to:
1599 /// **'Last Error:'**
1600 String get last_error;
1601
1602 /// Button to copy debug info
1603 ///
1604 /// In en, this message translates to:
1605 /// **'Copy Info'**
1606 String get copy_info;
1607
1608 /// Debug row label
1609 ///
1610 /// In en, this message translates to:
1611 /// **'Conversation ID'**
1612 String get conversation_id;
1613
1614 /// Debug row label
1615 ///
1616 /// In en, this message translates to:
1617 /// **'Created At'**
1618 String get created_at;
1619
1620 /// Debug row label
1621 ///
1622 /// In en, this message translates to:
1623 /// **'Expected Messages'**
1624 String get expected_messages;
1625
1626 /// Debug dialog description
1627 ///
1628 /// In en, this message translates to:
1629 /// **'Diagnostic information to help identify synchronization issues.'**
1630 String get debug_dialog_desc;
1631
1632 /// Chat input field hint
1633 ///
1634 /// In en, this message translates to:
1635 /// **'Ask anything'**
1636 String get chat_input_hint;
1637
1638 /// Tooltip for send button
1639 ///
1640 /// In en, this message translates to:
1641 /// **'Send message'**
1642 String get send_message_tooltip;
1643
1644 /// Tooltip for stop button
1645 ///
1646 /// In en, this message translates to:
1647 /// **'Stop generation'**
1648 String get stop_generation_tooltip;
1649
1650 /// Tooltip for attach button
1651 ///
1652 /// In en, this message translates to:
1653 /// **'Attach images or text'**
1654 String get attach_images_tooltip;
1655
1656 /// Tooltip for start listening button
1657 ///
1658 /// In en, this message translates to:
1659 /// **'Start listening'**
1660 String get start_listening_tooltip;
1661
1662 /// Tooltip for stop listening button
1663 ///
1664 /// In en, this message translates to:
1665 /// **'Stop listening'**
1666 String get stop_listening_tooltip;
1667
1668 /// Tool call label in chat bubble
1669 ///
1670 /// In en, this message translates to:
1671 /// **'Tool: {toolCallId}'**
1672 String tool_label(String toolCallId);
1673
1674 /// Unknown tool call fallback
1675 ///
1676 /// In en, this message translates to:
1677 /// **'Tool: Unknown'**
1678 String get tool_unknown;
1679
1680 /// Message actions sheet title
1681 ///
1682 /// In en, this message translates to:
1683 /// **'Message options'**
1684 String get message_options;
1685
1686 /// Copy as markdown option
1687 ///
1688 /// In en, this message translates to:
1689 /// **'Copy as Markdown'**
1690 String get copy_markdown;
1691
1692 /// Copied as markdown snackbar
1693 ///
1694 /// In en, this message translates to:
1695 /// **'Copied as Markdown'**
1696 String get copied_markdown;
1697
1698 /// Read aloud action
1699 ///
1700 /// In en, this message translates to:
1701 /// **'Read Aloud'**
1702 String get read_aloud;
1703
1704 /// Stop reading action
1705 ///
1706 /// In en, this message translates to:
1707 /// **'Stop Reading'**
1708 String get stop_reading;
1709
1710 /// More actions label
1711 ///
1712 /// In en, this message translates to:
1713 /// **'More'**
1714 String get more;
1715
1716 /// Character count display
1717 ///
1718 /// In en, this message translates to:
1719 /// **'{length} characters'**
1720 String character_count(int length);
1721
1722 /// Edit message dialog title
1723 ///
1724 /// In en, this message translates to:
1725 /// **'Edit message'**
1726 String get edit_message;
1727
1728 /// Edit message dialog description
1729 ///
1730 /// In en, this message translates to:
1731 /// **'Saving will remove the assistant response below and regenerate.'**
1732 String get edit_message_desc;
1733
1734 /// Save and regenerate button
1735 ///
1736 /// In en, this message translates to:
1737 /// **'Save & regenerate'**
1738 String get save_regenerate;
1739
1740 /// Chat settings sheet title
1741 ///
1742 /// In en, this message translates to:
1743 /// **'Chat Settings'**
1744 String get chat_settings_title;
1745
1746 /// Reset to defaults button
1747 ///
1748 /// In en, this message translates to:
1749 /// **'Reset Defaults'**
1750 String get reset_defaults;
1751
1752 /// Chat settings parameters tab
1753 ///
1754 /// In en, this message translates to:
1755 /// **'Parameters'**
1756 String get parameters_tab;
1757
1758 /// Chat settings MCP tab
1759 ///
1760 /// In en, this message translates to:
1761 /// **'MCP'**
1762 String get mcp_tab;
1763
1764 /// Temperature slider label
1765 ///
1766 /// In en, this message translates to:
1767 /// **'Temperature'**
1768 String get temperature;
1769
1770 /// Temperature description
1771 ///
1772 /// In en, this message translates to:
1773 /// **'Controls randomness: Higher = Creative, Lower = Focused'**
1774 String get temperature_desc;
1775
1776 /// Top P slider label
1777 ///
1778 /// In en, this message translates to:
1779 /// **'Top P'**
1780 String get top_p;
1781
1782 /// Top P description
1783 ///
1784 /// In en, this message translates to:
1785 /// **'Nucleus sampling threshold'**
1786 String get top_p_desc;
1787
1788 /// Max tokens input label
1789 ///
1790 /// In en, this message translates to:
1791 /// **'Max Tokens'**
1792 String get max_tokens;
1793
1794 /// Max tokens description
1795 ///
1796 /// In en, this message translates to:
1797 /// **'Response limit'**
1798 String get max_tokens_desc;
1799
1800 /// Context length input label
1801 ///
1802 /// In en, this message translates to:
1803 /// **'Context Length'**
1804 String get context_length;
1805
1806 /// Context length description
1807 ///
1808 /// In en, this message translates to:
1809 /// **'History window'**
1810 String get context_length_desc;
1811
1812 /// Warning when MCP is disabled
1813 ///
1814 /// In en, this message translates to:
1815 /// **'MCP is disabled globally. Enable it in Settings to use these features.'**
1816 String get mcp_disabled_warning;
1817
1818 /// Toggle to enable MCP for current chat
1819 ///
1820 /// In en, this message translates to:
1821 /// **'Enable MCP for this chat'**
1822 String get mcp_enable_chat;
1823
1824 /// Toggle for auto-executing tools
1825 ///
1826 /// In en, this message translates to:
1827 /// **'Auto-execute tools'**
1828 String get auto_execute_tools;
1829
1830 /// Badge label for beta features
1831 ///
1832 /// In en, this message translates to:
1833 /// **'Beta'**
1834 String get beta_label;
1835
1836 /// Badge label for experimental features
1837 ///
1838 /// In en, this message translates to:
1839 /// **'Experimental'**
1840 String get experimental_label;
1841
1842 /// Section label for adding temp MCP server
1843 ///
1844 /// In en, this message translates to:
1845 /// **'Add Ephemeral MCP Server'**
1846 String get add_ephemeral_mcp;
1847
1848 /// MCP label field placeholder
1849 ///
1850 /// In en, this message translates to:
1851 /// **'Label'**
1852 String get mcp_label_placeholder;
1853
1854 /// MCP URL field placeholder
1855 ///
1856 /// In en, this message translates to:
1857 /// **'URL (https://...)'**
1858 String get mcp_url_placeholder;
1859
1860 /// Active MCP integrations section
1861 ///
1862 /// In en, this message translates to:
1863 /// **'Active Integrations'**
1864 String get active_integrations;
1865
1866 /// Button label to import MCP servers from JSON
1867 ///
1868 /// In en, this message translates to:
1869 /// **'Import JSON'**
1870 String get import_mcp_json;
1871
1872 /// Dialog title for importing MCP JSON
1873 ///
1874 /// In en, this message translates to:
1875 /// **'Import MCP Config JSON'**
1876 String get import_mcp_json_dialog_title;
1877
1878 /// Instructions for importing MCP JSON
1879 ///
1880 /// In en, this message translates to:
1881 /// **'Copy your mcpServers JSON directly from LM Studio (mcp.json) or paste a plugin array below:'**
1882 String get import_mcp_json_instructions;
1883
1884 /// Placeholder for MCP JSON import field
1885 ///
1886 /// In en, this message translates to:
1887 /// **'Paste mcpServers JSON or plugin list here...'**
1888 String get import_mcp_json_placeholder;
1889
1890 /// Toast message on successful MCP import
1891 ///
1892 /// In en, this message translates to:
1893 /// **'Successfully imported {count} integration(s)'**
1894 String mcp_import_success(int count);
1895
1896 /// Toast message on failed MCP import
1897 ///
1898 /// In en, this message translates to:
1899 /// **'No valid MCP integrations found in JSON'**
1900 String get mcp_import_failed;
1901
1902 /// Notification banner title
1903 ///
1904 /// In en, this message translates to:
1905 /// **'Enable Notifications'**
1906 String get enable_notifications;
1907
1908 /// Notification banner subtitle
1909 ///
1910 /// In en, this message translates to:
1911 /// **'Get notified when models finish downloading.'**
1912 String get enable_notifications_desc;
1913
1914 /// Chat history screen title
1915 ///
1916 /// In en, this message translates to:
1917 /// **'Chat History'**
1918 String get chat_history_title;
1919
1920 /// Recent conversation timestamp
1921 ///
1922 /// In en, this message translates to:
1923 /// **'Just now'**
1924 String get conversation_just_now;
1925
1926 /// Minutes ago timestamp
1927 ///
1928 /// In en, this message translates to:
1929 /// **'{minutes}m ago'**
1930 String conversation_minutes_ago(int minutes);
1931
1932 /// Hours ago timestamp
1933 ///
1934 /// In en, this message translates to:
1935 /// **'{hours}h ago'**
1936 String conversation_hours_ago(int hours);
1937
1938 /// Yesterday timestamp
1939 ///
1940 /// In en, this message translates to:
1941 /// **'Yesterday'**
1942 String get conversation_yesterday;
1943
1944 /// Days ago timestamp
1945 ///
1946 /// In en, this message translates to:
1947 /// **'{days}d ago'**
1948 String conversation_days_ago(int days);
1949
1950 /// Full date timestamp
1951 ///
1952 /// In en, this message translates to:
1953 /// **'{month}/{day}/{year}'**
1954 String conversation_date(int month, int day, int year);
1955
1956 /// Options menu tooltip
1957 ///
1958 /// In en, this message translates to:
1959 /// **'Options'**
1960 String get options_tooltip;
1961
1962 /// Search empty state
1963 ///
1964 /// In en, this message translates to:
1965 /// **'No results found'**
1966 String get no_results_found;
1967
1968 /// Empty conversations state
1969 ///
1970 /// In en, this message translates to:
1971 /// **'No conversations yet'**
1972 String get no_conversations_yet;
1973
1974 /// Search empty state subtitle
1975 ///
1976 /// In en, this message translates to:
1977 /// **'Try a different search term'**
1978 String get try_different_search;
1979
1980 /// Empty state subtitle when no conversations
1981 ///
1982 /// In en, this message translates to:
1983 /// **'Start a new conversation'**
1984 String get start_new_conversation;
1985
1986 /// Rename dialog title
1987 ///
1988 /// In en, this message translates to:
1989 /// **'Rename conversation'**
1990 String get rename_conversation;
1991
1992 /// Rename text field hint
1993 ///
1994 /// In en, this message translates to:
1995 /// **'Enter new title'**
1996 String get enter_new_title;
1997
1998 /// Pinned conversations section header
1999 ///
2000 /// In en, this message translates to:
2001 /// **'PINNED'**
2002 String get pinned_section;
2003
2004 /// Today section header
2005 ///
2006 /// In en, this message translates to:
2007 /// **'TODAY'**
2008 String get today_section;
2009
2010 /// Yesterday section header
2011 ///
2012 /// In en, this message translates to:
2013 /// **'YESTERDAY'**
2014 String get yesterday_section;
2015
2016 /// Previous 7 days section header
2017 ///
2018 /// In en, this message translates to:
2019 /// **'PREVIOUS 7 DAYS'**
2020 String get previous_7_days;
2021
2022 /// Previous 30 days section header
2023 ///
2024 /// In en, this message translates to:
2025 /// **'PREVIOUS 30 DAYS'**
2026 String get previous_30_days;
2027
2028 /// Older conversations section header
2029 ///
2030 /// In en, this message translates to:
2031 /// **'OLDER'**
2032 String get older_section;
2033
2034 /// Onboarding title to select application language
2035 ///
2036 /// In en, this message translates to:
2037 /// **'Choose Language'**
2038 String get onboarding_choose_language;
2039
2040 /// Onboarding description for language selection
2041 ///
2042 /// In en, this message translates to:
2043 /// **'Select your preferred language. You can change this anytime in settings.'**
2044 String get onboarding_choose_language_desc;
2045
2046 /// Onboarding screen branding text
2047 ///
2048 /// In en, this message translates to:
2049 /// **'LOCALMIND'**
2050 String get onboarding_localmind;
2051
2052 /// Onboarding heading for server connection
2053 ///
2054 /// In en, this message translates to:
2055 /// **'Connect Your\nServer'**
2056 String get onboarding_connect_server;
2057
2058 /// Onboarding server connection description
2059 ///
2060 /// In en, this message translates to:
2061 /// **'Connect to LM Studio, Ollama,\nOllama Cloud, or OpenRouter to\nstart your private AI experience.'**
2062 String get onboarding_connect_desc;
2063
2064 /// Subtitle for the OpenAI compatible server card in onboarding
2065 ///
2066 /// In en, this message translates to:
2067 /// **'OpenAI-compatible API'**
2068 String get openai_compatible_api;
2069
2070 /// Hint shown when a user enters an https URL for a local server
2071 ///
2072 /// In en, this message translates to:
2073 /// **'HTTPS requires SSL'**
2074 String get https_requires_ssl;
2075
2076 /// Hint shown with the HTTPS warning chip
2077 ///
2078 /// In en, this message translates to:
2079 /// **'Most local setups use http://'**
2080 String get most_local_setups_use_http;
2081
2082 /// Onboarding welcome message
2083 ///
2084 /// In en, this message translates to:
2085 /// **'Welcome to LocalMind'**
2086 String get onboarding_welcome;
2087
2088 /// On-device server type card title
2089 ///
2090 /// In en, this message translates to:
2091 /// **'On-Device'**
2092 String get server_type_on_device;
2093
2094 /// LM Studio server type card title
2095 ///
2096 /// In en, this message translates to:
2097 /// **'LM Studio'**
2098 String get server_type_lm_studio;
2099
2100 /// Ollama server type card title
2101 ///
2102 /// In en, this message translates to:
2103 /// **'Ollama'**
2104 String get server_type_ollama;
2105
2106 /// Ollama Cloud server type card title
2107 ///
2108 /// In en, this message translates to:
2109 /// **'Ollama Cloud'**
2110 String get server_type_ollama_cloud;
2111
2112 /// Ollama Cloud server type card subtitle
2113 ///
2114 /// In en, this message translates to:
2115 /// **'CLOUD MANAGED'**
2116 String get server_type_ollama_cloud_sub;
2117
2118 /// Ollama Cloud server type display
2119 ///
2120 /// In en, this message translates to:
2121 /// **'Ollama Cloud'**
2122 String get server_type_ollama_cloud_display;
2123
2124 /// Ollama Cloud default address
2125 ///
2126 /// In en, this message translates to:
2127 /// **'ollama.com'**
2128 String get server_address_ollama_cloud;
2129
2130 /// Disclosure shown when connecting to Ollama Cloud about data being sent to their servers
2131 ///
2132 /// In en, this message translates to:
2133 /// **'By connecting Ollama Cloud, your chat messages and inputs are sent to Ollama\'s managed servers for inference. LocalMind does not track or store your conversations. You can revoke this key any time at ollama.com/settings/keys.'**
2134 String get ollama_cloud_disclosure;
2135
2136 /// Validation: API key required for Ollama Cloud
2137 ///
2138 /// In en, this message translates to:
2139 /// **'API Key required for Ollama Cloud'**
2140 String get api_key_required_ollama_cloud;
2141
2142 /// Hint for the Ollama Cloud API key input
2143 ///
2144 /// In en, this message translates to:
2145 /// **'Paste your Ollama Cloud API key'**
2146 String get api_key_hint_ollama_cloud;
2147
2148 /// Add server screen subtitle for Ollama Cloud
2149 ///
2150 /// In en, this message translates to:
2151 /// **'Connect to Ollama Cloud with an API key from ollama.com/settings/keys to access managed cloud models.'**
2152 String get add_server_ollama_cloud_subtitle;
2153
2154 /// Add server screen subtitle for OpenRouter
2155 ///
2156 /// In en, this message translates to:
2157 /// **'Connect through OpenRouter with a valid API key and keep this profile ready for model routing.'**
2158 String get add_server_openrouter_subtitle;
2159
2160 /// Add server screen subtitle for Requesty
2161 ///
2162 /// In en, this message translates to:
2163 /// **'Connect through Requesty with a valid API key and keep this profile ready for model routing.'**
2164 String get add_server_requesty_subtitle;
2165
2166 /// Add server screen subtitle for endpoint-based servers
2167 ///
2168 /// In en, this message translates to:
2169 /// **'Configure a local or self-hosted endpoint, then verify the connection before saving.'**
2170 String get add_server_endpoint_subtitle;
2171
2172 /// OpenRouter server type card title
2173 ///
2174 /// In en, this message translates to:
2175 /// **'OpenRouter'**
2176 String get server_type_openrouter;
2177
2178 /// Requesty server type card title
2179 ///
2180 /// In en, this message translates to:
2181 /// **'Requesty'**
2182 String get server_type_requesty;
2183
2184 /// OpenRouter server type card subtitle
2185 ///
2186 /// In en, this message translates to:
2187 /// **'UNIFIED CLOUD'**
2188 String get server_type_openrouter_sub;
2189
2190 /// Requesty server type card subtitle
2191 ///
2192 /// In en, this message translates to:
2193 /// **'UNIFIED CLOUD'**
2194 String get server_type_requesty_sub;
2195
2196 /// Onboarding ready status
2197 ///
2198 /// In en, this message translates to:
2199 /// **'READY TO CONTINUE'**
2200 String get ready_continue;
2201
2202 /// Onboarding waiting status
2203 ///
2204 /// In en, this message translates to:
2205 /// **'WAITING FOR SELECTION'**
2206 String get waiting_selection;
2207
2208 /// Onboarding setup screen title
2209 ///
2210 /// In en, this message translates to:
2211 /// **'Setup Connection'**
2212 String get setup_connection;
2213
2214 /// Onboarding setup description
2215 ///
2216 /// In en, this message translates to:
2217 /// **'Configure your {server} server to start chatting.'**
2218 String setup_connection_desc(String server);
2219
2220 /// Server name field label
2221 ///
2222 /// In en, this message translates to:
2223 /// **'Server Name'**
2224 String get server_name;
2225
2226 /// Validation: name required
2227 ///
2228 /// In en, this message translates to:
2229 /// **'Name required'**
2230 String get name_required;
2231
2232 /// Validation: max 50 chars
2233 ///
2234 /// In en, this message translates to:
2235 /// **'Max 50 characters'**
2236 String get name_max_50;
2237
2238 /// Host field label
2239 ///
2240 /// In en, this message translates to:
2241 /// **'Host / IP Address'**
2242 String get host_label;
2243
2244 /// Validation: host required
2245 ///
2246 /// In en, this message translates to:
2247 /// **'Host required'**
2248 String get host_required;
2249
2250 /// Port field label
2251 ///
2252 /// In en, this message translates to:
2253 /// **'Port'**
2254 String get port_label;
2255
2256 /// Validation: port required
2257 ///
2258 /// In en, this message translates to:
2259 /// **'Port required'**
2260 String get port_required;
2261
2262 /// Validation: invalid port number
2263 ///
2264 /// In en, this message translates to:
2265 /// **'Must be a number'**
2266 String get port_invalid;
2267
2268 /// Validation: port range
2269 ///
2270 /// In en, this message translates to:
2271 /// **'Enter a valid port (1-65535)'**
2272 String get port_range;
2273
2274 /// Required API key label
2275 ///
2276 /// In en, this message translates to:
2277 /// **'API Key *'**
2278 String get api_key_required;
2279
2280 /// Optional API key label
2281 ///
2282 /// In en, this message translates to:
2283 /// **'API Key (Optional)'**
2284 String get api_key_optional;
2285
2286 /// Validation: API key for OpenRouter
2287 ///
2288 /// In en, this message translates to:
2289 /// **'API Key required for OpenRouter'**
2290 String get api_key_required_openrouter;
2291
2292 /// Validation: API key for Requesty
2293 ///
2294 /// In en, this message translates to:
2295 /// **'API Key required for Requesty'**
2296 String get api_key_required_requesty;
2297
2298 /// Validation: API key format
2299 ///
2300 /// In en, this message translates to:
2301 /// **'OpenRouter API keys start with sk-'**
2302 String get api_key_format;
2303
2304 /// Server name field hint
2305 ///
2306 /// In en, this message translates to:
2307 /// **'My Server'**
2308 String get my_server_hint;
2309
2310 /// Validation: name too long
2311 ///
2312 /// In en, this message translates to:
2313 /// **'Name must be 50 characters or less'**
2314 String get name_length_validation;
2315
2316 /// Validation: invalid host
2317 ///
2318 /// In en, this message translates to:
2319 /// **'Enter a valid hostname or IP address'**
2320 String get host_valid;
2321
2322 /// OpenRouter API key hint
2323 ///
2324 /// In en, this message translates to:
2325 /// **'sk-...'**
2326 String get api_key_hint_openrouter;
2327
2328 /// Requesty API key hint
2329 ///
2330 /// In en, this message translates to:
2331 /// **'rqsty-...'**
2332 String get api_key_hint_requesty;
2333
2334 /// Generic API key hint
2335 ///
2336 /// In en, this message translates to:
2337 /// **'For authenticated servers'**
2338 String get api_key_hint_generic;
2339
2340 /// Update server button
2341 ///
2342 /// In en, this message translates to:
2343 /// **'Update Server'**
2344 String get update_server;
2345
2346 /// Save server button
2347 ///
2348 /// In en, this message translates to:
2349 /// **'Save Server'**
2350 String get save_server;
2351
2352 /// Server update snackbar
2353 ///
2354 /// In en, this message translates to:
2355 /// **'Server updated'**
2356 String get server_updated;
2357
2358 /// Server added snackbar
2359 ///
2360 /// In en, this message translates to:
2361 /// **'Server added'**
2362 String get server_added;
2363
2364 /// Onboarding download model screen title
2365 ///
2366 /// In en, this message translates to:
2367 /// **'Download a Model'**
2368 String get download_model_title;
2369
2370 /// Onboarding download model description
2371 ///
2372 /// In en, this message translates to:
2373 /// **'Choose a model to download.\nIt will run locally on your device.'**
2374 String get download_model_desc;
2375
2376 /// Platform limitation notice
2377 ///
2378 /// In en, this message translates to:
2379 /// **'On-device inference is currently available on Android only.'**
2380 String get on_device_android_only;
2381
2382 /// Total RAM label
2383 ///
2384 /// In en, this message translates to:
2385 /// **'Total RAM'**
2386 String get total_ram;
2387
2388 /// Available label
2389 ///
2390 /// In en, this message translates to:
2391 /// **'Available'**
2392 String get available;
2393
2394 /// Minimum RAM requirement label
2395 ///
2396 /// In en, this message translates to:
2397 /// **'{fileSize} GB RAM min'**
2398 String ram_min_required(String fileSize);
2399
2400 /// Download progress display
2401 ///
2402 /// In en, this message translates to:
2403 /// **'{percent}% • {speed}'**
2404 String download_progress(String percent, String speed);
2405
2406 /// Estimated time remaining label
2407 ///
2408 /// In en, this message translates to:
2409 /// **'ETA: {eta}'**
2410 String eta_label(String eta);
2411
2412 /// Paused download status with progress
2413 ///
2414 /// In en, this message translates to:
2415 /// **'Paused - {percent}%'**
2416 String paused_progress(String percent);
2417
2418 /// RAM warning during download
2419 ///
2420 /// In en, this message translates to:
2421 /// **'This model requires at least {ram} GB RAM, but your device has {totalMemory}. It may not run correctly or could cause the app to crash.'**
2422 String ram_warning_body_download(String ram, String totalMemory);
2423
2424 /// RAM warning during model load
2425 ///
2426 /// In en, this message translates to:
2427 /// **'Your device has {availableRAM} available RAM, but this model recommends at least {ram} GB. Loading it might fail or cause instability.'**
2428 String ram_warning_body_load(String availableRAM, String ram);
2429
2430 /// Onboarding theme selection title
2431 ///
2432 /// In en, this message translates to:
2433 /// **'Choose Theme'**
2434 String get choose_theme;
2435
2436 /// Onboarding theme selection description
2437 ///
2438 /// In en, this message translates to:
2439 /// **'Personalize the app appearance. You can always change this later in settings.'**
2440 String get choose_theme_desc;
2441
2442 /// System theme card title
2443 ///
2444 /// In en, this message translates to:
2445 /// **'System'**
2446 String get theme_card_system;
2447
2448 /// System theme card subtitle
2449 ///
2450 /// In en, this message translates to:
2451 /// **'Matches your device settings'**
2452 String get theme_card_system_sub;
2453
2454 /// Light theme card title
2455 ///
2456 /// In en, this message translates to:
2457 /// **'Light'**
2458 String get theme_card_light;
2459
2460 /// Light theme card subtitle
2461 ///
2462 /// In en, this message translates to:
2463 /// **'Clean and bright'**
2464 String get theme_card_light_sub;
2465
2466 /// Dark theme card title
2467 ///
2468 /// In en, this message translates to:
2469 /// **'Dark'**
2470 String get theme_card_dark;
2471
2472 /// Dark theme card subtitle
2473 ///
2474 /// In en, this message translates to:
2475 /// **'Easy on the eyes'**
2476 String get theme_card_dark_sub;
2477
2478 /// Claude theme card title
2479 ///
2480 /// In en, this message translates to:
2481 /// **'Claude'**
2482 String get theme_card_claude;
2483
2484 /// Claude theme card subtitle
2485 ///
2486 /// In en, this message translates to:
2487 /// **'A warm, peach-tinted theme'**
2488 String get theme_card_claude_sub;
2489
2490 /// Onboarding notification screen heading
2491 ///
2492 /// In en, this message translates to:
2493 /// **'Stay Updated'**
2494 String get stay_updated;
2495
2496 /// Onboarding notification screen description
2497 ///
2498 /// In en, this message translates to:
2499 /// **'Get notified when your AI models finish downloading or when long-running tasks complete.'**
2500 String get stay_updated_desc;
2501
2502 /// Notification benefit list item
2503 ///
2504 /// In en, this message translates to:
2505 /// **'Model download progress'**
2506 String get notification_benefit_downloads;
2507
2508 /// Notification benefit list item
2509 ///
2510 /// In en, this message translates to:
2511 /// **'Generation completions'**
2512 String get notification_benefit_completions;
2513
2514 /// Notification benefit list item
2515 ///
2516 /// In en, this message translates to:
2517 /// **'Background tasks status'**
2518 String get notification_benefit_background;
2519
2520 /// Allow notifications button
2521 ///
2522 /// In en, this message translates to:
2523 /// **'Allow Notifications'**
2524 String get allow_notifications;
2525
2526 /// Server list screen title
2527 ///
2528 /// In en, this message translates to:
2529 /// **'Servers'**
2530 String get servers_title;
2531
2532 /// Empty server list title
2533 ///
2534 /// In en, this message translates to:
2535 /// **'No Servers Yet'**
2536 String get no_servers_yet;
2537
2538 /// Empty server list description
2539 ///
2540 /// In en, this message translates to:
2541 /// **'Add your first server to start chatting with AI models.'**
2542 String get no_servers_desc;
2543
2544 /// Add server button
2545 ///
2546 /// In en, this message translates to:
2547 /// **'Add Server'**
2548 String get add_server;
2549
2550 /// Server switch snackbar
2551 ///
2552 /// In en, this message translates to:
2553 /// **'Switched to {name}'**
2554 String switched_to_server(String name);
2555
2556 /// Edit server screen title
2557 ///
2558 /// In en, this message translates to:
2559 /// **'Edit Server'**
2560 String get edit_server;
2561
2562 /// Add server screen title
2563 ///
2564 /// In en, this message translates to:
2565 /// **'Add Server'**
2566 String get add_server_title;
2567
2568 /// Server type section label
2569 ///
2570 /// In en, this message translates to:
2571 /// **'Server Type'**
2572 String get server_type_label;
2573
2574 /// Server icon section label
2575 ///
2576 /// In en, this message translates to:
2577 /// **'Server Icon'**
2578 String get server_icon_label;
2579
2580 /// Default icon fallback text
2581 ///
2582 /// In en, this message translates to:
2583 /// **'Default icon'**
2584 String get default_icon;
2585
2586 /// LM Studio server type display
2587 ///
2588 /// In en, this message translates to:
2589 /// **'LM Studio'**
2590 String get server_type_lm_studio_display;
2591
2592 /// OpenAI compatible server type display
2593 ///
2594 /// In en, this message translates to:
2595 /// **'OpenAI Compatible'**
2596 String get server_type_openai_display;
2597
2598 /// Ollama server type display
2599 ///
2600 /// In en, this message translates to:
2601 /// **'Ollama'**
2602 String get server_type_ollama_display;
2603
2604 /// OpenRouter server type display
2605 ///
2606 /// In en, this message translates to:
2607 /// **'OpenRouter'**
2608 String get server_type_openrouter_display;
2609
2610 /// Requesty server type display
2611 ///
2612 /// In en, this message translates to:
2613 /// **'Requesty'**
2614 String get server_type_requesty_display;
2615
2616 /// On-device server type display
2617 ///
2618 /// In en, this message translates to:
2619 /// **'On-Device'**
2620 String get server_type_on_device_display;
2621
2622 /// OpenRouter default address
2623 ///
2624 /// In en, this message translates to:
2625 /// **'openrouter.ai'**
2626 String get server_address_openrouter;
2627
2628 /// Requesty default address
2629 ///
2630 /// In en, this message translates to:
2631 /// **'router.requesty.ai'**
2632 String get server_address_requesty;
2633
2634 /// On-device server address
2635 ///
2636 /// In en, this message translates to:
2637 /// **'Local inference'**
2638 String get server_address_on_device;
2639
2640 /// Server address display format
2641 ///
2642 /// In en, this message translates to:
2643 /// **'{host}:{port}'**
2644 String server_address_format(String host, String port);
2645
2646 /// Default server badge
2647 ///
2648 /// In en, this message translates to:
2649 /// **'Default'**
2650 String get default_badge;
2651
2652 /// Set as default menu item
2653 ///
2654 /// In en, this message translates to:
2655 /// **'Set as Default'**
2656 String get set_as_default;
2657
2658 /// Icon picker sheet title
2659 ///
2660 /// In en, this message translates to:
2661 /// **'Select Icon'**
2662 String get select_icon;
2663
2664 /// Icon picker sheet description
2665 ///
2666 /// In en, this message translates to:
2667 /// **'Choose an icon for your server'**
2668 String get select_icon_desc;
2669
2670 /// Icon search field placeholder
2671 ///
2672 /// In en, this message translates to:
2673 /// **'Search icons...'**
2674 String get search_icons_hint;
2675
2676 /// Server icon name
2677 ///
2678 /// In en, this message translates to:
2679 /// **'Server Stack'**
2680 String get server_icon_stack;
2681
2682 /// Server icon name
2683 ///
2684 /// In en, this message translates to:
2685 /// **'Server Stack 02'**
2686 String get server_icon_stack2;
2687
2688 /// Server icon name
2689 ///
2690 /// In en, this message translates to:
2691 /// **'Server Stack 03'**
2692 String get server_icon_stack3;
2693
2694 /// Server icon name
2695 ///
2696 /// In en, this message translates to:
2697 /// **'Cloud'**
2698 String get server_icon_cloud;
2699
2700 /// Server icon name
2701 ///
2702 /// In en, this message translates to:
2703 /// **'Cloud Server'**
2704 String get server_icon_cloud_server;
2705
2706 /// Server icon name
2707 ///
2708 /// In en, this message translates to:
2709 /// **'MCP Server'**
2710 String get server_icon_mcp;
2711
2712 /// Server icon name
2713 ///
2714 /// In en, this message translates to:
2715 /// **'Database'**
2716 String get server_icon_database;
2717
2718 /// Server icon name
2719 ///
2720 /// In en, this message translates to:
2721 /// **'Database 01'**
2722 String get server_icon_database1;
2723
2724 /// Server icon name
2725 ///
2726 /// In en, this message translates to:
2727 /// **'Database 02'**
2728 String get server_icon_database2;
2729
2730 /// Server icon name
2731 ///
2732 /// In en, this message translates to:
2733 /// **'CPU'**
2734 String get server_icon_cpu;
2735
2736 /// Server icon name
2737 ///
2738 /// In en, this message translates to:
2739 /// **'Chip'**
2740 String get server_icon_chip;
2741
2742 /// Server icon name
2743 ///
2744 /// In en, this message translates to:
2745 /// **'Chip 02'**
2746 String get server_icon_chip2;
2747
2748 /// Server icon name
2749 ///
2750 /// In en, this message translates to:
2751 /// **'Computer'**
2752 String get server_icon_computer;
2753
2754 /// Server icon name
2755 ///
2756 /// In en, this message translates to:
2757 /// **'Laptop'**
2758 String get server_icon_laptop;
2759
2760 /// Server icon name
2761 ///
2762 /// In en, this message translates to:
2763 /// **'Computer Terminal'**
2764 String get server_icon_terminal;
2765
2766 /// Server icon name
2767 ///
2768 /// In en, this message translates to:
2769 /// **'Code'**
2770 String get server_icon_code;
2771
2772 /// Server icon name
2773 ///
2774 /// In en, this message translates to:
2775 /// **'AI Brain'**
2776 String get server_icon_ai_brain;
2777
2778 /// Server icon name
2779 ///
2780 /// In en, this message translates to:
2781 /// **'AI Brain 02'**
2782 String get server_icon_ai_brain2;
2783
2784 /// Server icon name
2785 ///
2786 /// In en, this message translates to:
2787 /// **'AI Cloud'**
2788 String get server_icon_ai_cloud;
2789
2790 /// Server icon name
2791 ///
2792 /// In en, this message translates to:
2793 /// **'AI Network'**
2794 String get server_icon_ai_network;
2795
2796 /// Server icon name
2797 ///
2798 /// In en, this message translates to:
2799 /// **'AI Chat'**
2800 String get server_icon_ai_chat;
2801
2802 /// Server icon name
2803 ///
2804 /// In en, this message translates to:
2805 /// **'Cellular Network'**
2806 String get server_icon_cellular;
2807
2808 /// Server icon name
2809 ///
2810 /// In en, this message translates to:
2811 /// **'Plug 01'**
2812 String get server_icon_plug1;
2813
2814 /// Server icon name
2815 ///
2816 /// In en, this message translates to:
2817 /// **'Plug 02'**
2818 String get server_icon_plug2;
2819
2820 /// Server icon name
2821 ///
2822 /// In en, this message translates to:
2823 /// **'Bot'**
2824 String get server_icon_bot;
2825
2826 /// Server icon name
2827 ///
2828 /// In en, this message translates to:
2829 /// **'Bot 02'**
2830 String get server_icon_bot2;
2831
2832 /// Server icon name
2833 ///
2834 /// In en, this message translates to:
2835 /// **'Robotic'**
2836 String get server_icon_robotic;
2837
2838 /// Server icon name
2839 ///
2840 /// In en, this message translates to:
2841 /// **'Rocket'**
2842 String get server_icon_rocket;
2843
2844 /// Server icon name
2845 ///
2846 /// In en, this message translates to:
2847 /// **'Star'**
2848 String get server_icon_star;
2849
2850 /// Server icon name
2851 ///
2852 /// In en, this message translates to:
2853 /// **'Settings 01'**
2854 String get server_icon_settings1;
2855
2856 /// Server icon name
2857 ///
2858 /// In en, this message translates to:
2859 /// **'Settings 02'**
2860 String get server_icon_settings2;
2861
2862 /// Server icon name
2863 ///
2864 /// In en, this message translates to:
2865 /// **'Home 01'**
2866 String get server_icon_home1;
2867
2868 /// Server icon name
2869 ///
2870 /// In en, this message translates to:
2871 /// **'Home 02'**
2872 String get server_icon_home2;
2873
2874 /// Server icon name
2875 ///
2876 /// In en, this message translates to:
2877 /// **'Folder 01'**
2878 String get server_icon_folder1;
2879
2880 /// Server icon name
2881 ///
2882 /// In en, this message translates to:
2883 /// **'Folder 02'**
2884 String get server_icon_folder2;
2885
2886 /// Server icon name
2887 ///
2888 /// In en, this message translates to:
2889 /// **'File 01'**
2890 String get server_icon_file1;
2891
2892 /// Server icon name
2893 ///
2894 /// In en, this message translates to:
2895 /// **'Lock'**
2896 String get server_icon_lock;
2897
2898 /// Server icon name
2899 ///
2900 /// In en, this message translates to:
2901 /// **'Key 01'**
2902 String get server_icon_key;
2903
2904 /// Server icon name
2905 ///
2906 /// In en, this message translates to:
2907 /// **'Link 01'**
2908 String get server_icon_link;
2909
2910 /// Server icon name
2911 ///
2912 /// In en, this message translates to:
2913 /// **'Globe'**
2914 String get server_icon_globe;
2915
2916 /// Server icon name
2917 ///
2918 /// In en, this message translates to:
2919 /// **'API'**
2920 String get server_icon_api;
2921
2922 /// Server icon name
2923 ///
2924 /// In en, this message translates to:
2925 /// **'Arrow Right 01'**
2926 String get server_icon_arrow_right;
2927
2928 /// Server icon name
2929 ///
2930 /// In en, this message translates to:
2931 /// **'Check Circle'**
2932 String get server_icon_check;
2933
2934 /// Server icon name
2935 ///
2936 /// In en, this message translates to:
2937 /// **'Alert Circle'**
2938 String get server_icon_alert;
2939
2940 /// Server icon name
2941 ///
2942 /// In en, this message translates to:
2943 /// **'Info Circle'**
2944 String get server_icon_info;
2945
2946 /// Server icon name
2947 ///
2948 /// In en, this message translates to:
2949 /// **'Zap'**
2950 String get server_icon_zap;
2951
2952 /// Server icon name
2953 ///
2954 /// In en, this message translates to:
2955 /// **'Cloud Upload'**
2956 String get server_icon_cloud_upload;
2957
2958 /// Server icon name
2959 ///
2960 /// In en, this message translates to:
2961 /// **'Cloud Download'**
2962 String get server_icon_cloud_download;
2963
2964 /// Server icon name
2965 ///
2966 /// In en, this message translates to:
2967 /// **'Refresh'**
2968 String get server_icon_refresh;
2969
2970 /// Server icon name
2971 ///
2972 /// In en, this message translates to:
2973 /// **'Hard Drive'**
2974 String get server_icon_hard_drive;
2975
2976 /// Server icon name
2977 ///
2978 /// In en, this message translates to:
2979 /// **'Drive'**
2980 String get server_icon_drive;
2981
2982 /// Persona list screen title
2983 ///
2984 /// In en, this message translates to:
2985 /// **'Personas'**
2986 String get personas_title;
2987
2988 /// General persona category
2989 ///
2990 /// In en, this message translates to:
2991 /// **'General'**
2992 String get persona_category_general;
2993
2994 /// Coding persona category
2995 ///
2996 /// In en, this message translates to:
2997 /// **'Coding'**
2998 String get persona_category_coding;
2999
3000 /// Education persona category
3001 ///
3002 /// In en, this message translates to:
3003 /// **'Education'**
3004 String get persona_category_education;
3005
3006 /// Creative persona category
3007 ///
3008 /// In en, this message translates to:
3009 /// **'Creative'**
3010 String get persona_category_creative;
3011
3012 /// Built-in personas section label
3013 ///
3014 /// In en, this message translates to:
3015 /// **'BUILT-IN'**
3016 String get persona_builtin_section;
3017
3018 /// My personas section label
3019 ///
3020 /// In en, this message translates to:
3021 /// **'MY PERSONAS'**
3022 String get persona_my_section;
3023
3024 /// Clone and edit persona action
3025 ///
3026 /// In en, this message translates to:
3027 /// **'Clone & Edit'**
3028 String get clone_edit;
3029
3030 /// Built-in persona badge
3031 ///
3032 /// In en, this message translates to:
3033 /// **'Built-in'**
3034 String get builtin_badge;
3035
3036 /// Empty persona list title
3037 ///
3038 /// In en, this message translates to:
3039 /// **'No personas found'**
3040 String get no_personas_found;
3041
3042 /// Empty persona list subtitle
3043 ///
3044 /// In en, this message translates to:
3045 /// **'Create your first persona to customize AI behavior.'**
3046 String get no_personas_desc;
3047
3048 /// Edit persona screen title
3049 ///
3050 /// In en, this message translates to:
3051 /// **'Edit Persona'**
3052 String get edit_persona;
3053
3054 /// Create persona screen title
3055 ///
3056 /// In en, this message translates to:
3057 /// **'Create Persona'**
3058 String get create_persona;
3059
3060 /// Create persona action button
3061 ///
3062 /// In en, this message translates to:
3063 /// **'Create'**
3064 String get create_persona_button;
3065
3066 /// Emoji selection label
3067 ///
3068 /// In en, this message translates to:
3069 /// **'Emoji'**
3070 String get emoji_label;
3071
3072 /// Name field label
3073 ///
3074 /// In en, this message translates to:
3075 /// **'Name'**
3076 String get name_label;
3077
3078 /// Persona name hint
3079 ///
3080 /// In en, this message translates to:
3081 /// **'My Persona'**
3082 String get my_persona_hint;
3083
3084 /// Category field label
3085 ///
3086 /// In en, this message translates to:
3087 /// **'Category'**
3088 String get category_label;
3089
3090 /// Optional description label
3091 ///
3092 /// In en, this message translates to:
3093 /// **'Description (optional)'**
3094 String get description_optional;
3095
3096 /// Description field hint
3097 ///
3098 /// In en, this message translates to:
3099 /// **'What this persona does...'**
3100 String get description_hint;
3101
3102 /// System prompt section label
3103 ///
3104 /// In en, this message translates to:
3105 /// **'System Prompt'**
3106 String get system_prompt;
3107
3108 /// Character counter for system prompt
3109 ///
3110 /// In en, this message translates to:
3111 /// **'{currentLen}/4000'**
3112 String character_count_max(int currentLen);
3113
3114 /// Preview placeholder when no prompt
3115 ///
3116 /// In en, this message translates to:
3117 /// **'No prompt yet...'**
3118 String get no_prompt_placeholder;
3119
3120 /// System prompt text field hint
3121 ///
3122 /// In en, this message translates to:
3123 /// **'You are a helpful assistant...'**
3124 String get prompt_hint;
3125
3126 /// Validation: prompt required
3127 ///
3128 /// In en, this message translates to:
3129 /// **'System prompt is required'**
3130 String get prompt_required;
3131
3132 /// Validation: prompt max chars
3133 ///
3134 /// In en, this message translates to:
3135 /// **'Max 4000 characters'**
3136 String get prompt_max_chars;
3137
3138 /// Expandable advanced settings section
3139 ///
3140 /// In en, this message translates to:
3141 /// **'Advanced Settings'**
3142 String get advanced_settings;
3143
3144 /// Temperature field label in personas
3145 ///
3146 /// In en, this message translates to:
3147 /// **'Temperature (0.0-2.0)'**
3148 String get temperature_label;
3149
3150 /// Top P field label in personas
3151 ///
3152 /// In en, this message translates to:
3153 /// **'Top P (0.0-1.0)'**
3154 String get top_p_label;
3155
3156 /// Temperature field hint
3157 ///
3158 /// In en, this message translates to:
3159 /// **'0.7'**
3160 String get temp_hint;
3161
3162 /// Top P field hint
3163 ///
3164 /// In en, this message translates to:
3165 /// **'0.9'**
3166 String get top_p_hint;
3167
3168 /// Range validation error (temperature)
3169 ///
3170 /// In en, this message translates to:
3171 /// **'0.0-2.0'**
3172 String get range_0_2;
3173
3174 /// Range validation error (top P)
3175 ///
3176 /// In en, this message translates to:
3177 /// **'0.0-1.0'**
3178 String get range_0_1;
3179
3180 /// Persona update snackbar
3181 ///
3182 /// In en, this message translates to:
3183 /// **'Persona updated'**
3184 String get persona_updated;
3185
3186 /// Persona creation snackbar
3187 ///
3188 /// In en, this message translates to:
3189 /// **'Persona created'**
3190 String get persona_created;
3191
3192 /// TTS model manager screen title
3193 ///
3194 /// In en, this message translates to:
3195 /// **'Text To Speech Models'**
3196 String get tts_models_title;
3197
3198 /// Always available status
3199 ///
3200 /// In en, this message translates to:
3201 /// **'Always available'**
3202 String get always_available;
3203
3204 /// System TTS engine description
3205 ///
3206 /// In en, this message translates to:
3207 /// **'Uses your device\'s built-in text-to-speech engine.\nNo downloads required. Voice selection uses your device\'s system settings.'**
3208 String get tts_system_desc;
3209
3210 /// Downloading status text
3211 ///
3212 /// In en, this message translates to:
3213 /// **'Downloading...'**
3214 String get downloading_status;
3215
3216 /// Kitten TTS engine description
3217 ///
3218 /// In en, this message translates to:
3219 /// **'Lightning-fast neural TTS with 8 expressive voices.\nRequires {size} download.'**
3220 String tts_kitten_desc(String size);
3221
3222 /// Piper TTS engine description
3223 ///
3224 /// In en, this message translates to:
3225 /// **'Fast offline Piper voices with 2 expressive voices.\nRequires {size} download per voice.'**
3226 String tts_piper_desc(String size);
3227
3228 /// Engine specification display
3229 ///
3230 /// In en, this message translates to:
3231 /// **'{sizeMb} MB · {ramMb} MB RAM · {voiceCount} voices'**
3232 String engine_spec(String sizeMb, String ramMb, int voiceCount);
3233
3234 /// On-device model manager screen title
3235 ///
3236 /// In en, this message translates to:
3237 /// **'On-Device Models'**
3238 String get on_device_models_title;
3239
3240 /// Settings field label for an optional Hugging Face access token
3241 ///
3242 /// In en, this message translates to:
3243 /// **'Hugging Face Token (Optional)'**
3244 String get settings_huggingface_token;
3245
3246 /// Description for the Hugging Face token setting
3247 ///
3248 /// In en, this message translates to:
3249 /// **'Required only for gated models (e.g. Gemma). Get a token at huggingface.co/settings/tokens.'**
3250 String get settings_huggingface_token_desc;
3251
3252 /// Toast text after a Hugging Face token is saved
3253 ///
3254 /// In en, this message translates to:
3255 /// **'Token saved'**
3256 String get settings_huggingface_token_set;
3257
3258 /// Toast text after a Hugging Face token is cleared
3259 ///
3260 /// In en, this message translates to:
3261 /// **'Token cleared'**
3262 String get settings_huggingface_token_cleared;
3263
3264 /// Badge on a model that is gated on Hugging Face
3265 ///
3266 /// In en, this message translates to:
3267 /// **'Requires a Hugging Face token'**
3268 String get model_requires_huggingface_token;
3269
3270 /// Inline warning shown when a gated model download is attempted without a token
3271 ///
3272 /// In en, this message translates to:
3273 /// **'This model is gated on Hugging Face. Add a token in Settings → On-Device Inference to download it.'**
3274 String get model_missing_huggingface_token;
3275
3276 /// Button label to set/edit a Hugging Face token
3277 ///
3278 /// In en, this message translates to:
3279 /// **'Set token'**
3280 String get set_huggingface_token;
3281
3282 /// Button label to clear a saved Hugging Face token
3283 ///
3284 /// In en, this message translates to:
3285 /// **'Clear'**
3286 String get clear_huggingface_token;
3287
3288 /// Title of the dialog for entering a Hugging Face token
3289 ///
3290 /// In en, this message translates to:
3291 /// **'Hugging Face Access Token'**
3292 String get edit_huggingface_token_dialog_title;
3293
3294 /// Placeholder for the Hugging Face token input field
3295 ///
3296 /// In en, this message translates to:
3297 /// **'hf_…'**
3298 String get huggingface_token_dialog_hint;
3299
3300 /// Short description for the Ollama server type
3301 ///
3302 /// In en, this message translates to:
3303 /// **'Local AI engine. No API key required.'**
3304 String get server_type_ollama_desc;
3305
3306 /// Short description for the On-Device server type
3307 ///
3308 /// In en, this message translates to:
3309 /// **'Runs on your phone. Some models need a Hugging Face token.'**
3310 String get server_type_on_device_desc;
3311
3312 /// Short description for the LM Studio server type
3313 ///
3314 /// In en, this message translates to:
3315 /// **'Local API server. No API key required.'**
3316 String get server_type_lm_studio_desc;
3317
3318 /// Available models section title
3319 ///
3320 /// In en, this message translates to:
3321 /// **'Available Models'**
3322 String get available_models;
3323
3324 /// Device memory card title
3325 ///
3326 /// In en, this message translates to:
3327 /// **'Device Memory'**
3328 String get device_memory;
3329
3330 /// RAM usage label
3331 ///
3332 /// In en, this message translates to:
3333 /// **'RAM Usage'**
3334 String get ram_usage;
3335
3336 /// Memory status healthy
3337 ///
3338 /// In en, this message translates to:
3339 /// **'Healthy'**
3340 String get memory_healthy;
3341
3342 /// Memory status critical
3343 ///
3344 /// In en, this message translates to:
3345 /// **'Critical'**
3346 String get memory_critical;
3347
3348 /// Memory status low
3349 ///
3350 /// In en, this message translates to:
3351 /// **'Low'**
3352 String get memory_low;
3353
3354 /// RAM usage percentage
3355 ///
3356 /// In en, this message translates to:
3357 /// **'{percent}% used'**
3358 String ram_used(String percent);
3359
3360 /// Available RAM stat label
3361 ///
3362 /// In en, this message translates to:
3363 /// **'Available RAM'**
3364 String get available_ram;
3365
3366 /// Total capacity stat label
3367 ///
3368 /// In en, this message translates to:
3369 /// **'Total Capacity'**
3370 String get total_capacity;
3371
3372 /// Model loaded status
3373 ///
3374 /// In en, this message translates to:
3375 /// **'Loaded'**
3376 String get loaded_status;
3377
3378 /// Backend selector section title
3379 ///
3380 /// In en, this message translates to:
3381 /// **'Inference Backend'**
3382 String get inference_backend;
3383
3384 /// iOS backend limitation notice
3385 ///
3386 /// In en, this message translates to:
3387 /// **'Only CPU backend is available on iOS.'**
3388 String get backend_ios_notice;
3389
3390 /// CPU backend description
3391 ///
3392 /// In en, this message translates to:
3393 /// **'Works on all devices. Most compatible.'**
3394 String get backend_cpu_desc;
3395
3396 /// GPU backend description
3397 ///
3398 /// In en, this message translates to:
3399 /// **'OpenCL acceleration. Faster on supported devices.'**
3400 String get backend_gpu_desc;
3401
3402 /// NPU backend description
3403 ///
3404 /// In en, this message translates to:
3405 /// **'Vendor NPU (Qualcomm/MediaTek). Fastest inference.'**
3406 String get backend_npu_desc;
3407
3408 /// Model picker sheet title
3409 ///
3410 /// In en, this message translates to:
3411 /// **'Select Model'**
3412 String get select_model_title;
3413
3414 /// Refresh models tooltip
3415 ///
3416 /// In en, this message translates to:
3417 /// **'Refresh models'**
3418 String get refresh_models;
3419
3420 /// Model search field hint
3421 ///
3422 /// In en, this message translates to:
3423 /// **'Search models...'**
3424 String get search_models_hint;
3425
3426 /// Model picker empty state title
3427 ///
3428 /// In en, this message translates to:
3429 /// **'No server connected'**
3430 String get no_server_connected;
3431
3432 /// Model picker empty state subtitle
3433 ///
3434 /// In en, this message translates to:
3435 /// **'Add a server first to see available models.'**
3436 String get add_server_first;
3437
3438 /// Model load error title
3439 ///
3440 /// In en, this message translates to:
3441 /// **'Failed to load models'**
3442 String get failed_load_models;
3443
3444 /// Empty models state
3445 ///
3446 /// In en, this message translates to:
3447 /// **'No models available'**
3448 String get no_models_available;
3449
3450 /// No search results for models
3451 ///
3452 /// In en, this message translates to:
3453 /// **'No models match \"{searchQuery}\"'**
3454 String no_models_match(String searchQuery);
3455
3456 /// Model load failure snackbar
3457 ///
3458 /// In en, this message translates to:
3459 /// **'Failed to load model: {error}'**
3460 String model_load_failed(String error);
3461
3462 /// Ollama model unloaded status
3463 ///
3464 /// In en, this message translates to:
3465 /// **'Unload requested for {name}. If Ollama is reachable, the model is released immediately.'**
3466 String model_unloaded_ollama(String name);
3467
3468 /// Model unloaded success snackbar
3469 ///
3470 /// In en, this message translates to:
3471 /// **'{name} unloaded successfully'**
3472 String model_unloaded_success(String name);
3473
3474 /// Model unload failure snackbar
3475 ///
3476 /// In en, this message translates to:
3477 /// **'Failed to unload model: {error}'**
3478 String model_unload_failed(String error);
3479
3480 /// Unload model tooltip
3481 ///
3482 /// In en, this message translates to:
3483 /// **'Unload from server'**
3484 String get unload_from_server;
3485
3486 /// Context length chip
3487 ///
3488 /// In en, this message translates to:
3489 /// **'{ctx} ctx'**
3490 String context_chip(String ctx);
3491
3492 /// Button to unload all loaded models
3493 ///
3494 /// In en, this message translates to:
3495 /// **'Unload all'**
3496 String get unload_all_models;
3497
3498 /// Count of currently loaded models
3499 ///
3500 /// In en, this message translates to:
3501 /// **'{count} loaded'**
3502 String loaded_models_count(int count);
3503
3504 /// Snackbar after unloading all models
3505 ///
3506 /// In en, this message translates to:
3507 /// **'All models unloaded'**
3508 String get all_models_unloaded;
3509
3510 /// Branch conversation from a message
3511 ///
3512 /// In en, this message translates to:
3513 /// **'Branch chat'**
3514 String get branch_chat;
3515
3516 /// Branch chat option description
3517 ///
3518 /// In en, this message translates to:
3519 /// **'Start a new conversation from this message'**
3520 String get branch_chat_desc;
3521
3522 /// Description shown when editing an assistant message
3523 ///
3524 /// In en, this message translates to:
3525 /// **'Edit the assistant response text.'**
3526 String get edit_assistant_message_desc;
3527
3528 /// Tooltip for switching to the model used in a message
3529 ///
3530 /// In en, this message translates to:
3531 /// **'Switch to {modelName}'**
3532 String switch_to_model(String modelName, Object model);
3533
3534 /// Download notification title
3535 ///
3536 /// In en, this message translates to:
3537 /// **'Downloading {modelName}...'**
3538 String download_notification_title(String modelName);
3539
3540 /// Download complete notification title
3541 ///
3542 /// In en, this message translates to:
3543 /// **'Download complete!'**
3544 String get download_complete_notification;
3545
3546 /// Download complete notification body
3547 ///
3548 /// In en, this message translates to:
3549 /// **'{modelName} has been downloaded successfully.'**
3550 String download_complete_body(String modelName);
3551
3552 /// Download failed notification title
3553 ///
3554 /// In en, this message translates to:
3555 /// **'Download failed: {error}'**
3556 String download_failed_notification(String error);
3557
3558 /// Download failed notification body
3559 ///
3560 /// In en, this message translates to:
3561 /// **'Failed to download {modelName}.'**
3562 String download_failed_body(String modelName);
3563
3564 /// System TTS engine display name
3565 ///
3566 /// In en, this message translates to:
3567 /// **'System TTS'**
3568 String get engine_name_system;
3569
3570 /// System TTS engine tagline
3571 ///
3572 /// In en, this message translates to:
3573 /// **'Built-in device engine'**
3574 String get engine_tagline_system;
3575
3576 /// Kitten TTS engine display name
3577 ///
3578 /// In en, this message translates to:
3579 /// **'Kitten TTS'**
3580 String get engine_name_kitten;
3581
3582 /// Kitten TTS engine tagline
3583 ///
3584 /// In en, this message translates to:
3585 /// **'High-speed neural TTS'**
3586 String get engine_tagline_kitten;
3587
3588 /// Sherpa ONNX engine display name
3589 ///
3590 /// In en, this message translates to:
3591 /// **'Sherpa ONNX VITS'**
3592 String get engine_name_sherpa;
3593
3594 /// Sherpa ONNX engine tagline
3595 ///
3596 /// In en, this message translates to:
3597 /// **'Offline Piper voices'**
3598 String get engine_tagline_sherpa;
3599
3600 /// Kitten TTS voice name
3601 ///
3602 /// In en, this message translates to:
3603 /// **'Jasper'**
3604 String get voice_jasper;
3605
3606 /// Kitten TTS voice name
3607 ///
3608 /// In en, this message translates to:
3609 /// **'Bella'**
3610 String get voice_bella;
3611
3612 /// Kitten TTS voice name
3613 ///
3614 /// In en, this message translates to:
3615 /// **'Bruno'**
3616 String get voice_bruno;
3617
3618 /// Kitten TTS voice name
3619 ///
3620 /// In en, this message translates to:
3621 /// **'Luna'**
3622 String get voice_luna;
3623
3624 /// Kitten TTS voice name
3625 ///
3626 /// In en, this message translates to:
3627 /// **'Hugo'**
3628 String get voice_hugo;
3629
3630 /// Kitten TTS voice name
3631 ///
3632 /// In en, this message translates to:
3633 /// **'Rosie'**
3634 String get voice_rosie;
3635
3636 /// Kitten TTS voice name
3637 ///
3638 /// In en, this message translates to:
3639 /// **'Leo'**
3640 String get voice_leo;
3641
3642 /// Kitten TTS voice name
3643 ///
3644 /// In en, this message translates to:
3645 /// **'Kiki'**
3646 String get voice_kiki;
3647
3648 /// Piper voice name
3649 ///
3650 /// In en, this message translates to:
3651 /// **'Lessac (US)'**
3652 String get voice_lessac;
3653
3654 /// Piper voice name
3655 ///
3656 /// In en, this message translates to:
3657 /// **'Ryan (US)'**
3658 String get voice_ryan;
3659
3660 /// On-device model name
3661 ///
3662 /// In en, this message translates to:
3663 /// **'Qwen 3 0.6B'**
3664 String get model_qwen_3;
3665
3666 /// Qwen 3 model description
3667 ///
3668 /// In en, this message translates to:
3669 /// **'Smallest general-purpose chat model. Fast responses, low memory usage.'**
3670 String get model_qwen_3_desc;
3671
3672 /// Apache license label
3673 ///
3674 /// In en, this message translates to:
3675 /// **'Apache-2.0'**
3676 String get model_license_apache;
3677
3678 /// On-device model name
3679 ///
3680 /// In en, this message translates to:
3681 /// **'Qwen 2.5 1.5B Instruct'**
3682 String get model_qwen_25;
3683
3684 /// Qwen 2.5 model description
3685 ///
3686 /// In en, this message translates to:
3687 /// **'Balanced quality and size. Good for general conversation.'**
3688 String get model_qwen_25_desc;
3689
3690 /// On-device model name
3691 ///
3692 /// In en, this message translates to:
3693 /// **'DeepSeek R1 Distill Qwen 1.5B'**
3694 String get model_deepseek;
3695
3696 /// DeepSeek model description
3697 ///
3698 /// In en, this message translates to:
3699 /// **'Reasoning and chain-of-thought model. Best for logical tasks.'**
3700 String get model_deepseek_desc;
3701
3702 /// MIT license label
3703 ///
3704 /// In en, this message translates to:
3705 /// **'MIT'**
3706 String get model_license_mit;
3707
3708 /// On-device model name
3709 ///
3710 /// In en, this message translates to:
3711 /// **'Gemma 4 E2B Instruct'**
3712 String get model_gemma;
3713
3714 /// Gemma model description
3715 ///
3716 /// In en, this message translates to:
3717 /// **'Google flagship model. Highest quality, requires more RAM.'**
3718 String get model_gemma_desc;
3719
3720 /// Markdown export header
3721 ///
3722 /// In en, this message translates to:
3723 /// **'*Exported from LocalMind — {date}*'**
3724 String export_header(String date);
3725
3726 /// Markdown export user role label
3727 ///
3728 /// In en, this message translates to:
3729 /// **'## 👤 User'**
3730 String get export_role_user;
3731
3732 /// Markdown export assistant role label
3733 ///
3734 /// In en, this message translates to:
3735 /// **'## 🤖 Assistant'**
3736 String get export_role_assistant;
3737
3738 /// Markdown export system role label
3739 ///
3740 /// In en, this message translates to:
3741 /// **'## ⚙️ System'**
3742 String get export_role_system;
3743
3744 /// Markdown export tool role label
3745 ///
3746 /// In en, this message translates to:
3747 /// **'## 🔧 Tool'**
3748 String get export_role_tool;
3749
3750 /// Text export user role prefix
3751 ///
3752 /// In en, this message translates to:
3753 /// **'[USER]'**
3754 String get export_text_user;
3755
3756 /// Text export assistant role prefix
3757 ///
3758 /// In en, this message translates to:
3759 /// **'[ASSISTANT]'**
3760 String get export_text_assistant;
3761
3762 /// Text export system role prefix
3763 ///
3764 /// In en, this message translates to:
3765 /// **'[SYSTEM]'**
3766 String get export_text_system;
3767
3768 /// Text export tool role prefix
3769 ///
3770 /// In en, this message translates to:
3771 /// **'[TOOL]'**
3772 String get export_text_tool;
3773
3774 /// Export user role label
3775 ///
3776 /// In en, this message translates to:
3777 /// **'USER'**
3778 String get export_label_user;
3779
3780 /// Export assistant role label
3781 ///
3782 /// In en, this message translates to:
3783 /// **'ASSISTANT'**
3784 String get export_label_assistant;
3785
3786 /// Export system role label
3787 ///
3788 /// In en, this message translates to:
3789 /// **'SYSTEM'**
3790 String get export_label_system;
3791
3792 /// Export tool role label
3793 ///
3794 /// In en, this message translates to:
3795 /// **'TOOL'**
3796 String get export_label_tool;
3797
3798 /// Fallback text when no model is selected
3799 ///
3800 /// In en, this message translates to:
3801 /// **'Select a model to start chatting'**
3802 String get select_model_hint;
3803
3804 /// Test notification title
3805 ///
3806 /// In en, this message translates to:
3807 /// **'Test notification'**
3808 String get test_notification_title;
3809
3810 /// Test notification body
3811 ///
3812 /// In en, this message translates to:
3813 /// **'This is a test notification for model download progress.'**
3814 String get test_notification_body;
3815
3816 /// TTS background playback support status
3817 ///
3818 /// In en, this message translates to:
3819 /// **'Supports background playback as native audio'**
3820 String get tts_supports_background;
3821
3822 /// TTS background playback support status
3823 ///
3824 /// In en, this message translates to:
3825 /// **'Note: The other TTS services support background playback as native audio.'**
3826 String get tts_other_services_background_note;
3827
3828 /// No description provided for @gguf_imported_models_title.
3829 ///
3830 /// In en, this message translates to:
3831 /// **'Imported GGUF models'**
3832 String get gguf_imported_models_title;
3833
3834 /// No description provided for @gguf_imported_models_empty_subtitle.
3835 ///
3836 /// In en, this message translates to:
3837 /// **'Import a GGUF from your device or add one from Hugging Face. Imported models run locally with llama.cpp.'**
3838 String get gguf_imported_models_empty_subtitle;
3839
3840 /// No description provided for @gguf_imported_models_ready.
3841 ///
3842 /// In en, this message translates to:
3843 /// **'imported models ready for local inference.'**
3844 String get gguf_imported_models_ready;
3845
3846 /// No description provided for @gguf_curated_models_subtitle.
3847 ///
3848 /// In en, this message translates to:
3849 /// **'Curated on-device models you can download and manage inside LocalMind.'**
3850 String get gguf_curated_models_subtitle;
3851
3852 /// No description provided for @gguf_only_supported.
3853 ///
3854 /// In en, this message translates to:
3855 /// **'Only GGUF models are supported for this import.'**
3856 String get gguf_only_supported;
3857
3858 /// No description provided for @gguf_imported_from_local_file.
3859 ///
3860 /// In en, this message translates to:
3861 /// **'imported from local file.'**
3862 String get gguf_imported_from_local_file;
3863
3864 /// No description provided for @gguf_import_failed.
3865 ///
3866 /// In en, this message translates to:
3867 /// **'Failed to import GGUF model'**
3868 String get gguf_import_failed;
3869
3870 /// No description provided for @gguf_imported_from_huggingface.
3871 ///
3872 /// In en, this message translates to:
3873 /// **'imported from Hugging Face.'**
3874 String get gguf_imported_from_huggingface;
3875
3876 /// No description provided for @gguf_import_canceled.
3877 ///
3878 /// In en, this message translates to:
3879 /// **'GGUF import canceled.'**
3880 String get gguf_import_canceled;
3881
3882 /// No description provided for @gguf_enter_huggingface_url.
3883 ///
3884 /// In en, this message translates to:
3885 /// **'Enter a Hugging Face GGUF URL.'**
3886 String get gguf_enter_huggingface_url;
3887
3888 /// No description provided for @gguf_only_official_huggingface_urls.
3889 ///
3890 /// In en, this message translates to:
3891 /// **'Only official Hugging Face GGUF URLs are supported.'**
3892 String get gguf_only_official_huggingface_urls;
3893
3894 /// No description provided for @gguf_use_https_url.
3895 ///
3896 /// In en, this message translates to:
3897 /// **'Use an HTTPS Hugging Face URL for GGUF import.'**
3898 String get gguf_use_https_url;
3899
3900 /// No description provided for @gguf_url_must_point_to_file.
3901 ///
3902 /// In en, this message translates to:
3903 /// **'The Hugging Face URL must point directly to a .gguf file.'**
3904 String get gguf_url_must_point_to_file;
3905
3906 /// No description provided for @gguf_unable_to_detect_file_name.
3907 ///
3908 /// In en, this message translates to:
3909 /// **'Unable to determine the GGUF file name.'**
3910 String get gguf_unable_to_detect_file_name;
3911
3912 /// No description provided for @gguf_download_empty.
3913 ///
3914 /// In en, this message translates to:
3915 /// **'The downloaded GGUF file was empty or missing.'**
3916 String get gguf_download_empty;
3917
3918 /// No description provided for @gguf_selected_file_missing.
3919 ///
3920 /// In en, this message translates to:
3921 /// **'Selected model file does not exist.'**
3922 String get gguf_selected_file_missing;
3923
3924 /// No description provided for @gguf_import_action.
3925 ///
3926 /// In en, this message translates to:
3927 /// **'Import GGUF'**
3928 String get gguf_import_action;
3929
3930 /// No description provided for @gguf_overview_title.
3931 ///
3932 /// In en, this message translates to:
3933 /// **'Bring your own GGUF models'**
3934 String get gguf_overview_title;
3935
3936 /// No description provided for @gguf_overview_subtitle.
3937 ///
3938 /// In en, this message translates to:
3939 /// **'Import a .gguf from local storage or download one straight from Hugging Face. Imported models stay on this device and load with llama.cpp.'**
3940 String get gguf_overview_subtitle;
3941
3942 /// No description provided for @gguf_imported_count_label.
3943 ///
3944 /// In en, this message translates to:
3945 /// **'imported'**
3946 String get gguf_imported_count_label;
3947
3948 /// No description provided for @gguf_local_files_label.
3949 ///
3950 /// In en, this message translates to:
3951 /// **'local files'**
3952 String get gguf_local_files_label;
3953
3954 /// No description provided for @gguf_huggingface_label.
3955 ///
3956 /// In en, this message translates to:
3957 /// **'Hugging Face'**
3958 String get gguf_huggingface_label;
3959
3960 /// No description provided for @gguf_import_local_title.
3961 ///
3962 /// In en, this message translates to:
3963 /// **'Import local GGUF'**
3964 String get gguf_import_local_title;
3965
3966 /// No description provided for @gguf_import_local_subtitle.
3967 ///
3968 /// In en, this message translates to:
3969 /// **'Copy a .gguf file from this device'**
3970 String get gguf_import_local_subtitle;
3971
3972 /// No description provided for @gguf_import_huggingface_title.
3973 ///
3974 /// In en, this message translates to:
3975 /// **'Import from Hugging Face'**
3976 String get gguf_import_huggingface_title;
3977
3978 /// No description provided for @gguf_import_huggingface_subtitle.
3979 ///
3980 /// In en, this message translates to:
3981 /// **'Paste a GGUF URL or repo path'**
3982 String get gguf_import_huggingface_subtitle;
3983
3984 /// No description provided for @gguf_no_imported_title.
3985 ///
3986 /// In en, this message translates to:
3987 /// **'No imported GGUF models yet'**
3988 String get gguf_no_imported_title;
3989
3990 /// No description provided for @gguf_no_imported_subtitle.
3991 ///
3992 /// In en, this message translates to:
3993 /// **'You can bring your own GGUF file from device storage or paste a Hugging Face URL or repo path that points to a .gguf file.'**
3994 String get gguf_no_imported_subtitle;
3995
3996 /// No description provided for @gguf_import_huggingface_dialog_title.
3997 ///
3998 /// In en, this message translates to:
3999 /// **'Import GGUF from Hugging Face'**
4000 String get gguf_import_huggingface_dialog_title;
4001
4002 /// No description provided for @gguf_import_huggingface_dialog_subtitle.
4003 ///
4004 /// In en, this message translates to:
4005 /// **'Paste a direct GGUF URL or a Hugging Face repo path like `owner/repo/blob/main/model.gguf`. Blob links are converted automatically.'**
4006 String get gguf_import_huggingface_dialog_subtitle;
4007
4008 /// No description provided for @gguf_url_or_repo_path.
4009 ///
4010 /// In en, this message translates to:
4011 /// **'GGUF URL or repo path'**
4012 String get gguf_url_or_repo_path;
4013
4014 /// No description provided for @paste.
4015 ///
4016 /// In en, this message translates to:
4017 /// **'Paste'**
4018 String get paste;
4019
4020 /// No description provided for @gguf_browse.
4021 ///
4022 /// In en, this message translates to:
4023 /// **'Browse GGUFs'**
4024 String get gguf_browse;
4025
4026 /// No description provided for @gguf_huggingface_token_ready.
4027 ///
4028 /// In en, this message translates to:
4029 /// **'Hugging Face token ready'**
4030 String get gguf_huggingface_token_ready;
4031
4032 /// No description provided for @gguf_huggingface_token_optional.
4033 ///
4034 /// In en, this message translates to:
4035 /// **'Token optional but recommended'**
4036 String get gguf_huggingface_token_optional;
4037
4038 /// No description provided for @gguf_huggingface_token_ready_desc.
4039 ///
4040 /// In en, this message translates to:
4041 /// **'Your saved token will be used automatically for gated or private repositories.'**
4042 String get gguf_huggingface_token_ready_desc;
4043
4044 /// No description provided for @gguf_huggingface_token_optional_desc.
4045 ///
4046 /// In en, this message translates to:
4047 /// **'Requires a Hugging Face token. Add one in Settings if this GGUF is gated or private.'**
4048 String get gguf_huggingface_token_optional_desc;
4049
4050 /// No description provided for @gguf_downloading.
4051 ///
4052 /// In en, this message translates to:
4053 /// **'Downloading GGUF'**
4054 String get gguf_downloading;
4055
4056 /// No description provided for @gguf_preparing.
4057 ///
4058 /// In en, this message translates to:
4059 /// **'Preparing'**
4060 String get gguf_preparing;
4061
4062 /// No description provided for @gguf_preparing_download.
4063 ///
4064 /// In en, this message translates to:
4065 /// **'Preparing download...'**
4066 String get gguf_preparing_download;
4067
4068 /// No description provided for @gguf_cancel_import.
4069 ///
4070 /// In en, this message translates to:
4071 /// **'Cancel import'**
4072 String get gguf_cancel_import;
4073
4074 /// No description provided for @clipboard_empty.
4075 ///
4076 /// In en, this message translates to:
4077 /// **'Clipboard is empty.'**
4078 String get clipboard_empty;
4079
4080 /// No description provided for @could_not_open_huggingface.
4081 ///
4082 /// In en, this message translates to:
4083 /// **'Could not open Hugging Face.'**
4084 String get could_not_open_huggingface;
4085
4086 /// No description provided for @gguf_paste_url_error.
4087 ///
4088 /// In en, this message translates to:
4089 /// **'Paste a Hugging Face GGUF URL or repo path.'**
4090 String get gguf_paste_url_error;
4091
4092 /// No description provided for @gguf_blob_link.
4093 ///
4094 /// In en, this message translates to:
4095 /// **'Blob link'**
4096 String get gguf_blob_link;
4097
4098 /// No description provided for @gguf_repository_label.
4099 ///
4100 /// In en, this message translates to:
4101 /// **'Repository'**
4102 String get gguf_repository_label;
4103
4104 /// No description provided for @gguf_detected_path_label.
4105 ///
4106 /// In en, this message translates to:
4107 /// **'Detected path'**
4108 String get gguf_detected_path_label;
4109
4110 /// No description provided for @gguf_imported_section_label.
4111 ///
4112 /// In en, this message translates to:
4113 /// **'Imported GGUF'**
4114 String get gguf_imported_section_label;
4115
4116 /// No description provided for @gguf_already_available.
4117 ///
4118 /// In en, this message translates to:
4119 /// **'Already available on this device'**
4120 String get gguf_already_available;
4121
4122 /// No description provided for @gguf_curated_models_short.
4123 ///
4124 /// In en, this message translates to:
4125 /// **'Curated on-device models'**
4126 String get gguf_curated_models_short;
4127
4128 /// No description provided for @gguf_vision_projector.
4129 ///
4130 /// In en, this message translates to:
4131 /// **'Vision Projector'**
4132 String get gguf_vision_projector;
4133
4134 /// No description provided for @gguf_attach_projector.
4135 ///
4136 /// In en, this message translates to:
4137 /// **'Attach Vision Projector'**
4138 String get gguf_attach_projector;
4139
4140 /// No description provided for @gguf_change_projector.
4141 ///
4142 /// In en, this message translates to:
4143 /// **'Change Vision Projector'**
4144 String get gguf_change_projector;
4145
4146 /// No description provided for @gguf_remove_projector.
4147 ///
4148 /// In en, this message translates to:
4149 /// **'Remove Projector'**
4150 String get gguf_remove_projector;
4151
4152 /// No description provided for @gguf_projector_attached.
4153 ///
4154 /// In en, this message translates to:
4155 /// **'Vision projector attached successfully'**
4156 String get gguf_projector_attached;
4157
4158 /// No description provided for @gguf_projector_removed.
4159 ///
4160 /// In en, this message translates to:
4161 /// **'Vision projector removed'**
4162 String get gguf_projector_removed;
4163
4164 /// No description provided for @gguf_projector_auto_detected.
4165 ///
4166 /// In en, this message translates to:
4167 /// **'Auto-detected and linked vision projector: {name}'**
4168 String gguf_projector_auto_detected(String name);
4169
4170 /// No description provided for @gguf_is_projector_file.
4171 ///
4172 /// In en, this message translates to:
4173 /// **'The selected file is a vision projector (mmproj), not a standalone model.'**
4174 String get gguf_is_projector_file;
4175
4176 /// No description provided for @gguf_projector_url_label.
4177 ///
4178 /// In en, this message translates to:
4179 /// **'Vision Projector URL (optional mmproj)'**
4180 String get gguf_projector_url_label;
4181
4182 /// No description provided for @gguf_projector_url_hint.
4183 ///
4184 /// In en, this message translates to:
4185 /// **'https://huggingface.co/.../mmproj-...gguf'**
4186 String get gguf_projector_url_hint;
4187
4188 /// No description provided for @gguf_vision_not_supported_error.
4189 ///
4190 /// In en, this message translates to:
4191 /// **'The active model does not support image attachments. Please attach a vision projector (mmproj) or select a vision-supported model.'**
4192 String get gguf_vision_not_supported_error;
4193
4194 /// No description provided for @execute_tool_title.
4195 ///
4196 /// In en, this message translates to:
4197 /// **'Execute Tool'**
4198 String get execute_tool_title;
4199
4200 /// No description provided for @execute_tool_request_desc.
4201 ///
4202 /// In en, this message translates to:
4203 /// **'The model is requesting to execute the following tool:'**
4204 String get execute_tool_request_desc;
4205
4206 /// No description provided for @reject.
4207 ///
4208 /// In en, this message translates to:
4209 /// **'Reject'**
4210 String get reject;
4211
4212 /// No description provided for @approve.
4213 ///
4214 /// In en, this message translates to:
4215 /// **'Approve'**
4216 String get approve;
4217
4218 /// No description provided for @server_type_help.
4219 ///
4220 /// In en, this message translates to:
4221 /// **'Pick the provider before filling connection details.'**
4222 String get server_type_help;
4223
4224 /// No description provided for @server_identity_title.
4225 ///
4226 /// In en, this message translates to:
4227 /// **'Identity'**
4228 String get server_identity_title;
4229
4230 /// No description provided for @server_identity_desc.
4231 ///
4232 /// In en, this message translates to:
4233 /// **'Name this server and choose how it appears in the list.'**
4234 String get server_identity_desc;
4235
4236 /// No description provided for @server_connection_title.
4237 ///
4238 /// In en, this message translates to:
4239 /// **'Connection'**
4240 String get server_connection_title;
4241
4242 /// No description provided for @server_connection_desc.
4243 ///
4244 /// In en, this message translates to:
4245 /// **'Use the address and port exposed by your server.'**
4246 String get server_connection_desc;
4247
4248 /// No description provided for @server_authentication_title.
4249 ///
4250 /// In en, this message translates to:
4251 /// **'Authentication'**
4252 String get server_authentication_title;
4253
4254 /// No description provided for @server_authentication_required_desc.
4255 ///
4256 /// In en, this message translates to:
4257 /// **'OpenRouter requires an API key before testing.'**
4258 String get server_authentication_required_desc;
4259
4260 /// No description provided for @server_authentication_required_desc_requesty.
4261 ///
4262 /// In en, this message translates to:
4263 /// **'Requesty requires an API key before testing.'**
4264 String get server_authentication_required_desc_requesty;
4265
4266 /// No description provided for @server_authentication_optional_desc.
4267 ///
4268 /// In en, this message translates to:
4269 /// **'Leave the API key empty if this server does not require one.'**
4270 String get server_authentication_optional_desc;
4271
4272 /// No description provided for @mcp_tools_title.
4273 ///
4274 /// In en, this message translates to:
4275 /// **'MCP Tools'**
4276 String get mcp_tools_title;
4277
4278 /// No description provided for @available_tools.
4279 ///
4280 /// In en, this message translates to:
4281 /// **'Available tools'**
4282 String get available_tools;
4283
4284 /// No description provided for @unable_load_tools.
4285 ///
4286 /// In en, this message translates to:
4287 /// **'Unable to load tools'**
4288 String get unable_load_tools;
4289
4290 /// No description provided for @no_tools_registered.
4291 ///
4292 /// In en, this message translates to:
4293 /// **'No tools registered'**
4294 String get no_tools_registered;
4295
4296 /// No description provided for @no_tools_registered_desc.
4297 ///
4298 /// In en, this message translates to:
4299 /// **'Enable the example MCP server or add MCP integrations from chat settings.'**
4300 String get no_tools_registered_desc;
4301
4302 /// No description provided for @example_mcp_server_title.
4303 ///
4304 /// In en, this message translates to:
4305 /// **'Example MCP server'**
4306 String get example_mcp_server_title;
4307
4308 /// No description provided for @example_mcp_server_desc.
4309 ///
4310 /// In en, this message translates to:
4311 /// **'Registers example.echo and example.word_count through the same MCP tool provider used by external servers.'**
4312 String get example_mcp_server_desc;
4313
4314 /// No description provided for @disable_example_server.
4315 ///
4316 /// In en, this message translates to:
4317 /// **'Disable example server'**
4318 String get disable_example_server;
4319
4320 /// No description provided for @enable_example_server.
4321 ///
4322 /// In en, this message translates to:
4323 /// **'Enable example server'**
4324 String get enable_example_server;
4325
4326 /// No description provided for @built_in_label.
4327 ///
4328 /// In en, this message translates to:
4329 /// **'Built-in'**
4330 String get built_in_label;
4331
4332 /// No description provided for @highlights_label.
4333 ///
4334 /// In en, this message translates to:
4335 /// **'Highlights'**
4336 String get highlights_label;
4337
4338 /// No description provided for @built_with_label.
4339 ///
4340 /// In en, this message translates to:
4341 /// **'Built with'**
4342 String get built_with_label;
4343
4344 /// No description provided for @local_label.
4345 ///
4346 /// In en, this message translates to:
4347 /// **'Local'**
4348 String get local_label;
4349
4350 /// No description provided for @gguf_format_label.
4351 ///
4352 /// In en, this message translates to:
4353 /// **'GGUF'**
4354 String get gguf_format_label;
4355
4356 /// No description provided for @tool_status_requested.
4357 ///
4358 /// In en, this message translates to:
4359 /// **'Requested'**
4360 String get tool_status_requested;
4361
4362 /// No description provided for @tool_status_approved.
4363 ///
4364 /// In en, this message translates to:
4365 /// **'Approved'**
4366 String get tool_status_approved;
4367
4368 /// No description provided for @tool_status_rejected.
4369 ///
4370 /// In en, this message translates to:
4371 /// **'Rejected'**
4372 String get tool_status_rejected;
4373
4374 /// No description provided for @tool_status_running.
4375 ///
4376 /// In en, this message translates to:
4377 /// **'Running'**
4378 String get tool_status_running;
4379
4380 /// No description provided for @tool_status_done.
4381 ///
4382 /// In en, this message translates to:
4383 /// **'Done'**
4384 String get tool_status_done;
4385
4386 /// No description provided for @tool_status_failed.
4387 ///
4388 /// In en, this message translates to:
4389 /// **'Failed'**
4390 String get tool_status_failed;
4391
4392 /// Long-press menu option to favorite a model
4393 ///
4394 /// In en, this message translates to:
4395 /// **'Toggle favorite'**
4396 String get model_favorite_toggle;
4397
4398 /// Long-press menu option to make a model the default for new chats
4399 ///
4400 /// In en, this message translates to:
4401 /// **'Set as default model'**
4402 String get model_set_default;
4403
4404 /// Long-press menu option to clear the default model
4405 ///
4406 /// In en, this message translates to:
4407 /// **'Remove as default model'**
4408 String get model_clear_default;
4409
4410 /// Badge shown on a model that is set as the default for new chats
4411 ///
4412 /// In en, this message translates to:
4413 /// **'Default'**
4414 String get model_default_badge;
4415
4416 /// Label for model note text field
4417 ///
4418 /// In en, this message translates to:
4419 /// **'Note'**
4420 String get model_note_label;
4421
4422 /// Hint for model note text field
4423 ///
4424 /// In en, this message translates to:
4425 /// **'Add a note about this model…'**
4426 String get model_note_hint;
4427
4428 /// Setting to unload every loaded model instance before loading another
4429 ///
4430 /// In en, this message translates to:
4431 /// **'Unload all models before loading a new one'**
4432 String get unload_models_before_load;
4433
4434 /// Use private/incognito keyboard mode while in a temporary chat
4435 ///
4436 /// In en, this message translates to:
4437 /// **'Incognito keyboard in temporary chat'**
4438 String get temp_chat_keyboard_incognito;
4439
4440 /// Description for temporary chat incognito keyboard setting
4441 ///
4442 /// In en, this message translates to:
4443 /// **'Disables keyboard learning and suggestions in temporary chats (e.g. SwiftKey incognito).'**
4444 String get temp_chat_keyboard_incognito_desc;
4445
4446 /// Reopen the most recently active conversation when the app starts
4447 ///
4448 /// In en, this message translates to:
4449 /// **'Resume last chat on launch'**
4450 String get resume_last_chat;
4451
4452 /// Description for resume last chat setting
4453 ///
4454 /// In en, this message translates to:
4455 /// **'Restore your last open conversation when reopening the app.'**
4456 String get resume_last_chat_desc;
4457
4458 /// Export conversations and personas to a JSON file
4459 ///
4460 /// In en, this message translates to:
4461 /// **'Export all data'**
4462 String get export_all_data;
4463
4464 /// Import conversations and personas from a JSON backup
4465 ///
4466 /// In en, this message translates to:
4467 /// **'Import all data'**
4468 String get import_all_data;
4469
4470 /// Snackbar after exporting backup
4471 ///
4472 /// In en, this message translates to:
4473 /// **'Backup exported successfully'**
4474 String get export_data_success;
4475
4476 /// Snackbar after importing backup
4477 ///
4478 /// In en, this message translates to:
4479 /// **'Backup imported successfully'**
4480 String get import_data_success;
4481
4482 /// Snackbar when import fails
4483 ///
4484 /// In en, this message translates to:
4485 /// **'Failed to import backup: {error}'**
4486 String import_data_failed(String error);
4487
4488 /// No description provided for @import_data_confirm.
4489 ///
4490 /// In en, this message translates to:
4491 /// **'Import conversations and custom personas from this backup? Existing items with the same IDs will be updated.'**
4492 String get import_data_confirm;
4493
4494 /// No description provided for @import_settings_confirm.
4495 ///
4496 /// In en, this message translates to:
4497 /// **'Replace current settings with the imported backup?'**
4498 String get import_settings_confirm;
4499
4500 /// No description provided for @export_conversations.
4501 ///
4502 /// In en, this message translates to:
4503 /// **'Export conversations'**
4504 String get export_conversations;
4505
4506 /// No description provided for @import_conversations.
4507 ///
4508 /// In en, this message translates to:
4509 /// **'Import conversations'**
4510 String get import_conversations;
4511
4512 /// No description provided for @export_personas.
4513 ///
4514 /// In en, this message translates to:
4515 /// **'Export personas'**
4516 String get export_personas;
4517
4518 /// No description provided for @import_personas.
4519 ///
4520 /// In en, this message translates to:
4521 /// **'Import personas'**
4522 String get import_personas;
4523
4524 /// No description provided for @export_settings.
4525 ///
4526 /// In en, this message translates to:
4527 /// **'Export settings'**
4528 String get export_settings;
4529
4530 /// No description provided for @import_settings.
4531 ///
4532 /// In en, this message translates to:
4533 /// **'Import settings'**
4534 String get import_settings;
4535
4536 /// No description provided for @export_all_zip.
4537 ///
4538 /// In en, this message translates to:
4539 /// **'Export all (ZIP)'**
4540 String get export_all_zip;
4541
4542 /// No description provided for @import_all_zip.
4543 ///
4544 /// In en, this message translates to:
4545 /// **'Import all (ZIP)'**
4546 String get import_all_zip;
4547
4548 /// No description provided for @duplicate_chat.
4549 ///
4550 /// In en, this message translates to:
4551 /// **'Duplicate chat'**
4552 String get duplicate_chat;
4553
4554 /// No description provided for @duplicate_chat_success.
4555 ///
4556 /// In en, this message translates to:
4557 /// **'Chat duplicated'**
4558 String get duplicate_chat_success;
4559
4560 /// No description provided for @move_to_folder.
4561 ///
4562 /// In en, this message translates to:
4563 /// **'Move to folder'**
4564 String get move_to_folder;
4565
4566 /// No description provided for @remove_from_folder.
4567 ///
4568 /// In en, this message translates to:
4569 /// **'Remove from folder'**
4570 String get remove_from_folder;
4571
4572 /// No description provided for @create_folder.
4573 ///
4574 /// In en, this message translates to:
4575 /// **'Create folder'**
4576 String get create_folder;
4577
4578 /// No description provided for @new_folder.
4579 ///
4580 /// In en, this message translates to:
4581 /// **'New folder'**
4582 String get new_folder;
4583
4584 /// No description provided for @folder_name_hint.
4585 ///
4586 /// In en, this message translates to:
4587 /// **'Folder name'**
4588 String get folder_name_hint;
4589
4590 /// No description provided for @all_chats.
4591 ///
4592 /// In en, this message translates to:
4593 /// **'All'**
4594 String get all_chats;
4595
4596 /// No description provided for @unfiled_chats.
4597 ///
4598 /// In en, this message translates to:
4599 /// **'Unfiled'**
4600 String get unfiled_chats;
4601
4602 /// No description provided for @create.
4603 ///
4604 /// In en, this message translates to:
4605 /// **'Create'**
4606 String get create;
4607
4608 /// No description provided for @server_path_prefix_label.
4609 ///
4610 /// In en, this message translates to:
4611 /// **'API path prefix'**
4612 String get server_path_prefix_label;
4613
4614 /// No description provided for @server_path_prefix_hint.
4615 ///
4616 /// In en, this message translates to:
4617 /// **'/your-secret-token'**
4618 String get server_path_prefix_hint;
4619
4620 /// No description provided for @search_message_contents.
4621 ///
4622 /// In en, this message translates to:
4623 /// **'Search message contents'**
4624 String get search_message_contents;
4625
4626 /// No description provided for @message_search_results.
4627 ///
4628 /// In en, this message translates to:
4629 /// **'Message matches'**
4630 String get message_search_results;
4631
4632 /// No description provided for @saved_messages_title.
4633 ///
4634 /// In en, this message translates to:
4635 /// **'Saved Messages'**
4636 String get saved_messages_title;
4637
4638 /// No description provided for @nav_saved_messages.
4639 ///
4640 /// In en, this message translates to:
4641 /// **'Saved Messages'**
4642 String get nav_saved_messages;
4643
4644 /// No description provided for @saved_messages_empty.
4645 ///
4646 /// In en, this message translates to:
4647 /// **'No saved messages yet. Bookmark a message from its options menu.'**
4648 String get saved_messages_empty;
4649
4650 /// No description provided for @save_message.
4651 ///
4652 /// In en, this message translates to:
4653 /// **'Save message'**
4654 String get save_message;
4655
4656 /// No description provided for @message_saved.
4657 ///
4658 /// In en, this message translates to:
4659 /// **'Message saved'**
4660 String get message_saved;
4661
4662 /// No description provided for @token_count.
4663 ///
4664 /// In en, this message translates to:
4665 /// **'{count} tokens'**
4666 String token_count(int count);
4667
4668 /// No description provided for @estimated_token_count.
4669 ///
4670 /// In en, this message translates to:
4671 /// **'~{count} tokens (estimated)'**
4672 String estimated_token_count(int count);
4673
4674 /// No description provided for @test_tts_section_title.
4675 ///
4676 /// In en, this message translates to:
4677 /// **'Test voice'**
4678 String get test_tts_section_title;
4679
4680 /// No description provided for @test_tts_hint.
4681 ///
4682 /// In en, this message translates to:
4683 /// **'Enter text to hear the current TTS engine…'**
4684 String get test_tts_hint;
4685
4686 /// No description provided for @test_speak_button.
4687 ///
4688 /// In en, this message translates to:
4689 /// **'Speak'**
4690 String get test_speak_button;
4691
4692 /// No description provided for @scroll_to_bottom.
4693 ///
4694 /// In en, this message translates to:
4695 /// **'Scroll to bottom'**
4696 String get scroll_to_bottom;
4697
4698 /// No description provided for @generate_ai_response.
4699 ///
4700 /// In en, this message translates to:
4701 /// **'Generate AI response'**
4702 String get generate_ai_response;
4703
4704 /// No description provided for @no_response.
4705 ///
4706 /// In en, this message translates to:
4707 /// **'No response'**
4708 String get no_response;
4709
4710 /// No description provided for @export.
4711 ///
4712 /// In en, this message translates to:
4713 /// **'Export'**
4714 String get export;
4715
4716 /// No description provided for @import.
4717 ///
4718 /// In en, this message translates to:
4719 /// **'Import'**
4720 String get import;
4721
4722 /// No description provided for @conversations_label.
4723 ///
4724 /// In en, this message translates to:
4725 /// **'Conversations'**
4726 String get conversations_label;
4727
4728 /// No description provided for @personas_label.
4729 ///
4730 /// In en, this message translates to:
4731 /// **'Personas'**
4732 String get personas_label;
4733
4734 /// No description provided for @settings_label.
4735 ///
4736 /// In en, this message translates to:
4737 /// **'Settings'**
4738 String get settings_label;
4739
4740 /// No description provided for @export_conversation.
4741 ///
4742 /// In en, this message translates to:
4743 /// **'Export conversation'**
4744 String get export_conversation;
4745
4746 /// No description provided for @tts_process_markdown.
4747 ///
4748 /// In en, this message translates to:
4749 /// **'Process markdown for speech'**
4750 String get tts_process_markdown;
4751
4752 /// No description provided for @tts_process_markdown_desc.
4753 ///
4754 /// In en, this message translates to:
4755 /// **'Strip formatting like **bold** before reading aloud'**
4756 String get tts_process_markdown_desc;
4757
4758 /// No description provided for @tts_skip_seconds.
4759 ///
4760 /// In en, this message translates to:
4761 /// **'Skip interval'**
4762 String get tts_skip_seconds;
4763
4764 /// No description provided for @tts_skip_seconds_desc.
4765 ///
4766 /// In en, this message translates to:
4767 /// **'Forward and rewind jump size during playback'**
4768 String get tts_skip_seconds_desc;
4769
4770 /// No description provided for @tts_skip_seconds_value.
4771 ///
4772 /// In en, this message translates to:
4773 /// **'{seconds}s'**
4774 String tts_skip_seconds_value(int seconds);
4775
4776 /// No description provided for @preview_system_prompts.
4777 ///
4778 /// In en, this message translates to:
4779 /// **'Preview system prompts'**
4780 String get preview_system_prompts;
4781
4782 /// No description provided for @welcome_message_1.
4783 ///
4784 /// In en, this message translates to:
4785 /// **'What can I help you with today?'**
4786 String get welcome_message_1;
4787
4788 /// No description provided for @welcome_message_2.
4789 ///
4790 /// In en, this message translates to:
4791 /// **'Ask me anything — I\'m ready when you are.'**
4792 String get welcome_message_2;
4793
4794 /// No description provided for @welcome_message_3.
4795 ///
4796 /// In en, this message translates to:
4797 /// **'Your data is processed locally and never leaves your device.'**
4798 String get welcome_message_3;
4799
4800 /// No description provided for @welcome_message_4.
4801 ///
4802 /// In en, this message translates to:
4803 /// **'Need ideas? Try one of the quick prompts.'**
4804 String get welcome_message_4;
4805
4806 /// No description provided for @temporary_chat.
4807 ///
4808 /// In en, this message translates to:
4809 /// **'Temporary chat'**
4810 String get temporary_chat;
4811
4812 /// No description provided for @temporary_chat_desc.
4813 ///
4814 /// In en, this message translates to:
4815 /// **'Chats aren\'t saved to history.'**
4816 String get temporary_chat_desc;
4817
4818 /// No description provided for @temporary_chat_banner.
4819 ///
4820 /// In en, this message translates to:
4821 /// **'Temporary chat — not saved to history'**
4822 String get temporary_chat_banner;
4823
4824 /// No description provided for @temporary_chat_save_warning_title.
4825 ///
4826 /// In en, this message translates to:
4827 /// **'Save message in temporary chat?'**
4828 String get temporary_chat_save_warning_title;
4829
4830 /// No description provided for @temporary_chat_save_warning_body.
4831 ///
4832 /// In en, this message translates to:
4833 /// **'This chat is temporary and hidden from history. The saved message will still appear in Saved Messages.'**
4834 String get temporary_chat_save_warning_body;
4835
4836 /// No description provided for @save_to_history.
4837 ///
4838 /// In en, this message translates to:
4839 /// **'Save to history'**
4840 String get save_to_history;
4841
4842 /// No description provided for @share_conversation.
4843 ///
4844 /// In en, this message translates to:
4845 /// **'Share conversation'**
4846 String get share_conversation;
4847
4848 /// No description provided for @download_tts_audio.
4849 ///
4850 /// In en, this message translates to:
4851 /// **'Download audio'**
4852 String get download_tts_audio;
4853
4854 /// No description provided for @tts_download_unavailable.
4855 ///
4856 /// In en, this message translates to:
4857 /// **'Download is only available for Piper and Kitten TTS'**
4858 String get tts_download_unavailable;
4859
4860 /// No description provided for @tts_download_no_audio.
4861 ///
4862 /// In en, this message translates to:
4863 /// **'No audio available to download yet'**
4864 String get tts_download_no_audio;
4865
4866 /// No description provided for @tts_download_success.
4867 ///
4868 /// In en, this message translates to:
4869 /// **'Audio saved'**
4870 String get tts_download_success;
4871
4872 /// No description provided for @return_to_chat.
4873 ///
4874 /// In en, this message translates to:
4875 /// **'Return to chat'**
4876 String get return_to_chat;
4877
4878 /// No description provided for @return_to_temp_chat.
4879 ///
4880 /// In en, this message translates to:
4881 /// **'Return to temporary chat'**
4882 String get return_to_temp_chat;
4883
4884 /// No description provided for @insert_saved_message.
4885 ///
4886 /// In en, this message translates to:
4887 /// **'Insert saved message'**
4888 String get insert_saved_message;
4889
4890 /// No description provided for @insert_saved_message_desc.
4891 ///
4892 /// In en, this message translates to:
4893 /// **'Choose a saved message to add to your input'**
4894 String get insert_saved_message_desc;
4895
4896 /// No description provided for @model_info.
4897 ///
4898 /// In en, this message translates to:
4899 /// **'Model info'**
4900 String get model_info;
4901
4902 /// No description provided for @model_name.
4903 ///
4904 /// In en, this message translates to:
4905 /// **'Model name'**
4906 String get model_name;
4907
4908 /// No description provided for @model_identifier.
4909 ///
4910 /// In en, this message translates to:
4911 /// **'Identifier'**
4912 String get model_identifier;
4913
4914 /// No description provided for @model_capabilities.
4915 ///
4916 /// In en, this message translates to:
4917 /// **'Capabilities'**
4918 String get model_capabilities;
4919
4920 /// No description provided for @model_api_pricing.
4921 ///
4922 /// In en, this message translates to:
4923 /// **'API pricing (per 1M tokens)'**
4924 String get model_api_pricing;
4925
4926 /// No description provided for @not_available.
4927 ///
4928 /// In en, this message translates to:
4929 /// **'Not available'**
4930 String get not_available;
4931
4932 /// No description provided for @save_message_folders.
4933 ///
4934 /// In en, this message translates to:
4935 /// **'Save message'**
4936 String get save_message_folders;
4937
4938 /// No description provided for @remove_from_saved.
4939 ///
4940 /// In en, this message translates to:
4941 /// **'Remove from saved'**
4942 String get remove_from_saved;
4943
4944 /// No description provided for @message_already_saved.
4945 ///
4946 /// In en, this message translates to:
4947 /// **'Saved'**
4948 String get message_already_saved;
4949
4950 /// No description provided for @stream_ttft.
4951 ///
4952 /// In en, this message translates to:
4953 /// **'Time to first token'**
4954 String get stream_ttft;
4955
4956 /// No description provided for @stream_tokens_per_sec.
4957 ///
4958 /// In en, this message translates to:
4959 /// **'Tokens per second'**
4960 String get stream_tokens_per_sec;
4961
4962 /// No description provided for @stream_stop_reason.
4963 ///
4964 /// In en, this message translates to:
4965 /// **'Stop reason'**
4966 String get stream_stop_reason;
4967
4968 /// No description provided for @stream_input_tokens.
4969 ///
4970 /// In en, this message translates to:
4971 /// **'Input tokens'**
4972 String get stream_input_tokens;
4973
4974 /// No description provided for @stream_output_tokens.
4975 ///
4976 /// In en, this message translates to:
4977 /// **'Output tokens'**
4978 String get stream_output_tokens;
4979
4980 /// No description provided for @stream_generation_time.
4981 ///
4982 /// In en, this message translates to:
4983 /// **'Generation time'**
4984 String get stream_generation_time;
4985
4986 /// No description provided for @attach_image.
4987 ///
4988 /// In en, this message translates to:
4989 /// **'Photos'**
4990 String get attach_image;
4991
4992 /// No description provided for @attach_text_document.
4993 ///
4994 /// In en, this message translates to:
4995 /// **'Documents'**
4996 String get attach_text_document;
4997
4998 /// No description provided for @attach_shortcut_images.
4999 ///
5000 /// In en, this message translates to:
Showing first 5,000 of 6,071 lines. View raw