main
dart 3,230 lines 76.3 KB
Raw
1 // ignore: unused_import
2 import 'package:intl/intl.dart' as intl;
3 import 'app_localizations.dart';
4
5 // ignore_for_file: type=lint
6
7 /// The translations for English (`en`).
8 class AppLocalizationsEn extends AppLocalizations {
9 AppLocalizationsEn([String locale = 'en']) : super(locale);
10
11 @override
12 String get app_name => 'LocalMind';
13
14 @override
15 String get app_tagline => 'Your AI. Your Device. Your Rules.';
16
17 @override
18 String get app_version => '1.0.0';
19
20 @override
21 String get cancel => 'Cancel';
22
23 @override
24 String get confirm => 'Confirm';
25
26 @override
27 String get delete => 'Delete';
28
29 @override
30 String get save => 'Save';
31
32 @override
33 String get retry => 'Retry';
34
35 @override
36 String get close => 'Close';
37
38 @override
39 String get done => 'Done';
40
41 @override
42 String get continue_action => 'Continue';
43
44 @override
45 String get skip => 'Skip';
46
47 @override
48 String get install => 'Install';
49
50 @override
51 String get download => 'Download';
52
53 @override
54 String get resume => 'Resume';
55
56 @override
57 String get pause => 'Pause';
58
59 @override
60 String get stop => 'Stop';
61
62 @override
63 String get edit => 'Edit';
64
65 @override
66 String get preview => 'Preview';
67
68 @override
69 String get unload => 'Unload';
70
71 @override
72 String get load => 'Load';
73
74 @override
75 String get rename => 'Rename';
76
77 @override
78 String get pin => 'Pin';
79
80 @override
81 String get unpin => 'Unpin';
82
83 @override
84 String get share => 'Share';
85
86 @override
87 String get copy => 'Copy';
88
89 @override
90 String get copied => 'Copied!';
91
92 @override
93 String get copied_to_clipboard => 'Copied to clipboard';
94
95 @override
96 String get select => 'Select';
97
98 @override
99 String get active => 'Active';
100
101 @override
102 String get all => 'All';
103
104 @override
105 String get none => 'None';
106
107 @override
108 String get none_selected => 'None selected';
109
110 @override
111 String get online => 'Online';
112
113 @override
114 String get connected => 'Connected';
115
116 @override
117 String get checking => 'Checking';
118
119 @override
120 String get offline => 'Offline';
121
122 @override
123 String get error => 'Error';
124
125 @override
126 String get unknown_error => 'Unknown error';
127
128 @override
129 String get not_now => 'Not Now';
130
131 @override
132 String get enable => 'Enable';
133
134 @override
135 String get proceed_anyway => 'Proceed Anyway';
136
137 @override
138 String get test_connection => 'Test Connection';
139
140 @override
141 String get testing => 'Testing...';
142
143 @override
144 String get connection_successful => 'Connection successful!';
145
146 @override
147 String get connection_failed => 'Connection failed. Check your settings.';
148
149 @override
150 String get save_continue => 'Save & Continue';
151
152 @override
153 String get save_changes => 'Save Changes';
154
155 @override
156 String get finish_setup => 'Finish Setup';
157
158 @override
159 String get start_new_chat => 'Start New Chat';
160
161 @override
162 String get cannot_undo => 'This action cannot be undone.';
163
164 @override
165 String get ram_warning => 'RAM Warning';
166
167 @override
168 String get recommended => 'RECOMMENDED';
169
170 @override
171 String get may_be_large => 'May be too large for this device';
172
173 @override
174 String get calculating => 'Calculating...';
175
176 @override
177 String get download_failed => 'Download failed';
178
179 @override
180 String get downloaded => 'Downloaded';
181
182 @override
183 String get not_downloaded => 'Not downloaded';
184
185 @override
186 String get installed => 'Installed';
187
188 @override
189 String get not_installed => 'Not installed';
190
191 @override
192 String get loading => 'Loading...';
193
194 @override
195 String get thinking => 'Thinking';
196
197 @override
198 String get processing => 'Processing...';
199
200 @override
201 String get initializing => 'Initializing...';
202
203 @override
204 String get ready => 'Ready';
205
206 @override
207 String get preparing_app => 'Preparing app...';
208
209 @override
210 String get initializing_services => 'Initializing services...';
211
212 @override
213 String get configuring_server => 'Configuring server...';
214
215 @override
216 String get startup_failed => 'Startup failed';
217
218 @override
219 String get something_went_wrong => 'Something went wrong';
220
221 @override
222 String get delete_model_title => 'Delete Model';
223
224 @override
225 String delete_model_body(String name) {
226 return 'Are you sure you want to delete $name?';
227 }
228
229 @override
230 String delete_model_body_with_size(String name, String size) {
231 return '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.';
232 }
233
234 @override
235 String get delete_voice_title => 'Delete Voice';
236
237 @override
238 String delete_voice_body(String name, String size) {
239 return '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.';
240 }
241
242 @override
243 String get delete_server_title => 'Delete Server';
244
245 @override
246 String delete_server_body(String name) {
247 return 'Are you sure you want to delete \"$name\"? This cannot be undone.';
248 }
249
250 @override
251 String get delete_conversation_title => 'Delete conversation?';
252
253 @override
254 String delete_conversation_body(String title) {
255 return 'Are you sure you want to delete \"$title\"? This cannot be undone.';
256 }
257
258 @override
259 String get delete_message_title => 'Delete message?';
260
261 @override
262 String delete_persona_title(String name) {
263 return 'Delete \"$name\"?';
264 }
265
266 @override
267 String get delete_persona_body => 'This cannot be undone.';
268
269 @override
270 String get delete_builtin_persona_body =>
271 'This is a built-in persona. You can restore it later from Settings.';
272
273 @override
274 String get restore_builtin_personas => 'Restore default personas';
275
276 @override
277 String get restore_builtin_personas_desc =>
278 'Re-add any built-in personas you\'ve deleted';
279
280 @override
281 String get restore_builtin_personas_success => 'Default personas restored';
282
283 @override
284 String get clear_personas => 'Clear personas';
285
286 @override
287 String get enable_image_compression => 'Compress images before sending';
288
289 @override
290 String get enable_image_compression_desc =>
291 'Resize and compress attached images so uploads stay within server limits';
292
293 @override
294 String get image_compression_level => 'Compression aggressiveness';
295
296 @override
297 String get image_compression_level_desc =>
298 'Higher aggressiveness produces smaller uploads at lower quality';
299
300 @override
301 String get image_compression_level_low => 'Low';
302
303 @override
304 String get image_compression_level_medium => 'Medium';
305
306 @override
307 String get image_compression_level_high => 'High';
308
309 @override
310 String get sort_models_tooltip => 'Sort models';
311
312 @override
313 String get sort_by_favorites => 'Favorites first';
314
315 @override
316 String get sort_by_name => 'Name (A-Z)';
317
318 @override
319 String get sort_by_size_smallest => 'Size (smallest first)';
320
321 @override
322 String get sort_by_size_largest => 'Size (largest first)';
323
324 @override
325 String get sort_by_context_length => 'Context length';
326
327 @override
328 String bulk_ai_rename_progress(int done, int total) {
329 return 'Renaming $done/$total...';
330 }
331
332 @override
333 String selected_count(int count) {
334 return '$count selected';
335 }
336
337 @override
338 String get ai_rename_tooltip => 'Rename selected with AI';
339
340 @override
341 String get new_chat_in_folder_tooltip => 'New chat in this folder';
342
343 @override
344 String total_tokens_count(int count) {
345 return '$count tokens';
346 }
347
348 @override
349 String get smart_replies_use_persona => 'Use persona in smart replies';
350
351 @override
352 String get smart_replies_use_persona_desc =>
353 'Suggested replies match the tone of the active persona instead of a generic assistant';
354
355 @override
356 String get keep_persona_on_new_chat => 'Keep persona on new chat';
357
358 @override
359 String get keep_persona_on_new_chat_desc =>
360 'Don\'t clear the selected persona(s) after starting a new chat';
361
362 @override
363 String get role_swap_button_enabled => 'Show role-swap button';
364
365 @override
366 String get role_swap_button_enabled_desc =>
367 'Show a button in the chat input to send your message as the assistant instead of the user, without generating a response';
368
369 @override
370 String get send_as_user_tooltip => 'Send as user';
371
372 @override
373 String get send_as_assistant_tooltip => 'Send as assistant (no response)';
374
375 @override
376 String get insert_without_generating_tooltip => 'Insert without generating';
377
378 @override
379 String get token_usage_title => 'Token Usage';
380
381 @override
382 String get total_tokens_label => 'Tokens used';
383
384 @override
385 String get usage_percent_label => 'Context used';
386
387 @override
388 String get export_choice_title => 'Export';
389
390 @override
391 String get export_choice_body => 'How would you like to export this?';
392
393 @override
394 String get copy_to_clipboard => 'Copy to Clipboard';
395
396 @override
397 String bulk_export_conversations_success(int count) {
398 return 'Exported $count conversations';
399 }
400
401 @override
402 String get bulk_ai_rename_confirm_title => 'Rename with AI?';
403
404 @override
405 String bulk_ai_rename_confirm_body(int count) {
406 return '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.';
407 }
408
409 @override
410 String get sort_by_modified_date => 'Last modified';
411
412 @override
413 String get sort_by_created_date => 'Date created';
414
415 @override
416 String get sort_title => 'Sort';
417
418 @override
419 String get clear_conversation_title => 'Clear conversation?';
420
421 @override
422 String get clear_conversation_body =>
423 'This will delete all messages in this conversation.';
424
425 @override
426 String get clear => 'Clear';
427
428 @override
429 String label_completed(String label) {
430 return '$label completed';
431 }
432
433 @override
434 String error_with_message(String error) {
435 return 'Error: $error';
436 }
437
438 @override
439 String preview_failed(String error) {
440 return 'Preview failed: $error';
441 }
442
443 @override
444 String loading_model(String modelId) {
445 return 'Loading $modelId...';
446 }
447
448 @override
449 String model_loaded(String modelId, String backend) {
450 return 'Model loaded: $modelId ($backend)';
451 }
452
453 @override
454 String get no_model_loaded =>
455 'No model loaded. Tap \"Manage On-Device Models\" to download and load a model.';
456
457 @override
458 String loading_model_error(String error) {
459 return 'Error: $error';
460 }
461
462 @override
463 String get delete_conversation => 'Delete conversation?';
464
465 @override
466 String get nav_history => 'History';
467
468 @override
469 String get nav_servers => 'Servers';
470
471 @override
472 String get nav_local_models => 'Local Models';
473
474 @override
475 String get nav_tts => 'Text To Speech';
476
477 @override
478 String get nav_personas => 'Personas';
479
480 @override
481 String get nav_settings => 'Settings';
482
483 @override
484 String get nav_new_chat => 'New Chat';
485
486 @override
487 String get search_hint => 'Search conversations...';
488
489 @override
490 String get no_server_selected => 'No server selected';
491
492 @override
493 String get switch_server => 'Switch Server';
494
495 @override
496 String get switch_server_subtitle => 'Choose a server to connect to';
497
498 @override
499 String get manage_servers => 'Manage Servers';
500
501 @override
502 String get open_source => 'Open Source';
503
504 @override
505 String get open_source_desc =>
506 'LocalMind is open source. Follow our progress or contribute on GitHub.';
507
508 @override
509 String get star_on_github => 'Star on GitHub';
510
511 @override
512 String get add_more => 'Add more';
513
514 @override
515 String get on_github => 'on GitHub';
516
517 @override
518 String get could_not_open_github => 'Could not open GitHub.';
519
520 @override
521 String get settings_title => 'Settings';
522
523 @override
524 String get settings_appearance => 'Appearance';
525
526 @override
527 String get settings_language => 'Language';
528
529 @override
530 String get language_system_default => 'System Default';
531
532 @override
533 String get settings_tts => 'Text-to-Speech';
534
535 @override
536 String get settings_android_assistant => 'Android Assistant';
537
538 @override
539 String get assistant_default_title => 'Use LocalMind as your assistant';
540
541 @override
542 String get assistant_default_description =>
543 'Launch voice mode with Android\'s assistant gesture or power-button shortcut.';
544
545 @override
546 String get assistant_status_active => 'Active';
547
548 @override
549 String get assistant_status_available => 'Not active';
550
551 @override
552 String get assistant_status_manual => 'Check settings';
553
554 @override
555 String get assistant_status_unsupported => 'Unavailable';
556
557 @override
558 String get assistant_status_checking => 'Checking…';
559
560 @override
561 String get assistant_set_default => 'Set as default assistant';
562
563 @override
564 String get assistant_open_settings => 'Open Android assistant settings';
565
566 @override
567 String assistant_error(Object error) {
568 return 'Could not open Android assistant settings.';
569 }
570
571 @override
572 String get settings_behavior => 'Behavior';
573
574 @override
575 String get settings_on_device => 'On-Device Inference';
576
577 @override
578 String get settings_default_server => 'Default Server';
579
580 @override
581 String get settings_default_persona => 'Default Persona';
582
583 @override
584 String get settings_default_model => 'Default Model';
585
586 @override
587 String get settings_default_model_desc =>
588 'Automatically selected when you start a new chat.';
589
590 @override
591 String get settings_privacy => 'Privacy';
592
593 @override
594 String get settings_data_management => 'Data Management';
595
596 @override
597 String get settings_about => 'About';
598
599 @override
600 String get theme => 'Theme';
601
602 @override
603 String get theme_system => 'System';
604
605 @override
606 String get theme_light => 'Light';
607
608 @override
609 String get theme_dark => 'Dark';
610
611 @override
612 String get theme_claude => 'Claude';
613
614 @override
615 String get font_size => 'Font Size';
616
617 @override
618 String get font_size_desc => 'Adjust text size in chat.';
619
620 @override
621 String get font_preview => 'The quick brown fox jumps over the lazy dog.';
622
623 @override
624 String get code_theme_dark => 'Code Theme (Dark)';
625
626 @override
627 String get code_theme_light => 'Code Theme (Light)';
628
629 @override
630 String get code_theme_desc =>
631 'Choose syntax highlighting theme for code blocks.';
632
633 @override
634 String get tts_engine => 'TTS Engine';
635
636 @override
637 String get tts_engine_system => 'System TTS';
638
639 @override
640 String get tts_engine_kitten => 'Kitten TTS';
641
642 @override
643 String get voice => 'Voice';
644
645 @override
646 String get voice_female => 'Female';
647
648 @override
649 String get voice_male => 'Male';
650
651 @override
652 String get voice_other => 'Other';
653
654 @override
655 String get tts_speed => 'TTS Speed';
656
657 @override
658 String get tts_speed_desc => 'Adjust the playback rate.';
659
660 @override
661 String get manage_tts_models => 'Manage TTS Models';
662
663 @override
664 String get manage_on_device_models => 'Manage On-Device Models';
665
666 @override
667 String get enable_smart_reply => 'On-Device Smart Replies';
668
669 @override
670 String get ai_user_response_enabled => 'AI user message (hold send)';
671
672 @override
673 String get ai_user_response_enabled_desc =>
674 'Hold the send button for 3 seconds to have the AI write and send your next message';
675
676 @override
677 String get ai_user_response_tooltip => 'Generate user message with AI';
678
679 @override
680 String get streaming_responses => 'Streaming Responses';
681
682 @override
683 String get auto_generate_titles => 'Auto-generate Titles';
684
685 @override
686 String get send_on_enter => 'Send on Enter';
687
688 @override
689 String get show_system_messages => 'Send Default System Prompt';
690
691 @override
692 String get show_system_messages_desc =>
693 'When no persona is selected, send a default assistant system prompt with each request';
694
695 @override
696 String get show_system_messages_in_chat => 'Show System Messages in Chat';
697
698 @override
699 String get show_system_messages_in_chat_desc =>
700 'Display system messages (e.g. from an imported backup) as visible bubbles in the conversation';
701
702 @override
703 String get auto_collapse_thinking => 'Auto-collapse Thinking';
704
705 @override
706 String get auto_collapse_thinking_desc =>
707 'Automatically collapse reasoning process after response generation completes when a main answer is present';
708
709 @override
710 String get haptic_feedback => 'Haptic Feedback';
711
712 @override
713 String get enable_mcp => 'Enable MCP';
714
715 @override
716 String get new_chat_mcp_default => 'New Chat MCP Default';
717
718 @override
719 String get show_data_indicator => 'Show Data Indicator';
720
721 @override
722 String get privacy_info => '\"LocalMind never sees your data\"';
723
724 @override
725 String get delete_all_conversations => 'Delete All Conversations';
726
727 @override
728 String get reset_settings_defaults => 'Reset Settings to Defaults';
729
730 @override
731 String get chat_title => 'LocalMind';
732
733 @override
734 String get chat_parameters_tooltip => 'Chat Parameters';
735
736 @override
737 String get change_persona => 'Change Persona';
738
739 @override
740 String get set_persona => 'Set Persona';
741
742 @override
743 String get remove_persona => 'Remove Persona';
744
745 @override
746 String get clear_conversation => 'Clear Conversation';
747
748 @override
749 String get connection_error => 'Connection error. Check your server.';
750
751 @override
752 String get disconnected => 'Disconnected from server.';
753
754 @override
755 String get configure => 'Configure';
756
757 @override
758 String get select_model => 'Select Model';
759
760 @override
761 String get select_persona => 'Select Persona';
762
763 @override
764 String get manage_personas => 'Manage personas';
765
766 @override
767 String get personas_combine_hint =>
768 'Select multiple personas in chat to stack their system prompts.';
769
770 @override
771 String get start_conversation => 'Start a conversation';
772
773 @override
774 String get recent_chats => 'Recent chats';
775
776 @override
777 String get see_all => 'See all';
778
779 @override
780 String get quick_write => 'Help me write a function';
781
782 @override
783 String get quick_explain => 'Explain this code';
784
785 @override
786 String get quick_debug => 'Debug this for me';
787
788 @override
789 String get quick_async => 'How do I use async/await?';
790
791 @override
792 String get history_missing_title => 'History Missing';
793
794 @override
795 String get history_missing_desc =>
796 'Either the messages in this chat were deleted or the history record is corrupted.';
797
798 @override
799 String get technical_details => 'Technical Details';
800
801 @override
802 String get last_error => 'Last Error:';
803
804 @override
805 String get copy_info => 'Copy Info';
806
807 @override
808 String get conversation_id => 'Conversation ID';
809
810 @override
811 String get created_at => 'Created At';
812
813 @override
814 String get expected_messages => 'Expected Messages';
815
816 @override
817 String get debug_dialog_desc =>
818 'Diagnostic information to help identify synchronization issues.';
819
820 @override
821 String get chat_input_hint => 'Ask anything';
822
823 @override
824 String get send_message_tooltip => 'Send message';
825
826 @override
827 String get stop_generation_tooltip => 'Stop generation';
828
829 @override
830 String get attach_images_tooltip => 'Attach images or text';
831
832 @override
833 String get start_listening_tooltip => 'Start listening';
834
835 @override
836 String get stop_listening_tooltip => 'Stop listening';
837
838 @override
839 String tool_label(String toolCallId) {
840 return 'Tool: $toolCallId';
841 }
842
843 @override
844 String get tool_unknown => 'Tool: Unknown';
845
846 @override
847 String get message_options => 'Message options';
848
849 @override
850 String get copy_markdown => 'Copy as Markdown';
851
852 @override
853 String get copied_markdown => 'Copied as Markdown';
854
855 @override
856 String get read_aloud => 'Read Aloud';
857
858 @override
859 String get stop_reading => 'Stop Reading';
860
861 @override
862 String get more => 'More';
863
864 @override
865 String character_count(int length) {
866 return '$length characters';
867 }
868
869 @override
870 String get edit_message => 'Edit message';
871
872 @override
873 String get edit_message_desc =>
874 'Saving will remove the assistant response below and regenerate.';
875
876 @override
877 String get save_regenerate => 'Save & regenerate';
878
879 @override
880 String get chat_settings_title => 'Chat Settings';
881
882 @override
883 String get reset_defaults => 'Reset Defaults';
884
885 @override
886 String get parameters_tab => 'Parameters';
887
888 @override
889 String get mcp_tab => 'MCP';
890
891 @override
892 String get temperature => 'Temperature';
893
894 @override
895 String get temperature_desc =>
896 'Controls randomness: Higher = Creative, Lower = Focused';
897
898 @override
899 String get top_p => 'Top P';
900
901 @override
902 String get top_p_desc => 'Nucleus sampling threshold';
903
904 @override
905 String get max_tokens => 'Max Tokens';
906
907 @override
908 String get max_tokens_desc => 'Response limit';
909
910 @override
911 String get context_length => 'Context Length';
912
913 @override
914 String get context_length_desc => 'History window';
915
916 @override
917 String get mcp_disabled_warning =>
918 'MCP is disabled globally. Enable it in Settings to use these features.';
919
920 @override
921 String get mcp_enable_chat => 'Enable MCP for this chat';
922
923 @override
924 String get auto_execute_tools => 'Auto-execute tools';
925
926 @override
927 String get beta_label => 'Beta';
928
929 @override
930 String get experimental_label => 'Experimental';
931
932 @override
933 String get add_ephemeral_mcp => 'Add Ephemeral MCP Server';
934
935 @override
936 String get mcp_label_placeholder => 'Label';
937
938 @override
939 String get mcp_url_placeholder => 'URL (https://...)';
940
941 @override
942 String get active_integrations => 'Active Integrations';
943
944 @override
945 String get import_mcp_json => 'Import JSON';
946
947 @override
948 String get import_mcp_json_dialog_title => 'Import MCP Config JSON';
949
950 @override
951 String get import_mcp_json_instructions =>
952 'Copy your mcpServers JSON directly from LM Studio (mcp.json) or paste a plugin array below:';
953
954 @override
955 String get import_mcp_json_placeholder =>
956 'Paste mcpServers JSON or plugin list here...';
957
958 @override
959 String mcp_import_success(int count) {
960 return 'Successfully imported $count integration(s)';
961 }
962
963 @override
964 String get mcp_import_failed => 'No valid MCP integrations found in JSON';
965
966 @override
967 String get enable_notifications => 'Enable Notifications';
968
969 @override
970 String get enable_notifications_desc =>
971 'Get notified when models finish downloading.';
972
973 @override
974 String get chat_history_title => 'Chat History';
975
976 @override
977 String get conversation_just_now => 'Just now';
978
979 @override
980 String conversation_minutes_ago(int minutes) {
981 return '${minutes}m ago';
982 }
983
984 @override
985 String conversation_hours_ago(int hours) {
986 return '${hours}h ago';
987 }
988
989 @override
990 String get conversation_yesterday => 'Yesterday';
991
992 @override
993 String conversation_days_ago(int days) {
994 return '${days}d ago';
995 }
996
997 @override
998 String conversation_date(int month, int day, int year) {
999 return '$month/$day/$year';
1000 }
1001
1002 @override
1003 String get options_tooltip => 'Options';
1004
1005 @override
1006 String get no_results_found => 'No results found';
1007
1008 @override
1009 String get no_conversations_yet => 'No conversations yet';
1010
1011 @override
1012 String get try_different_search => 'Try a different search term';
1013
1014 @override
1015 String get start_new_conversation => 'Start a new conversation';
1016
1017 @override
1018 String get rename_conversation => 'Rename conversation';
1019
1020 @override
1021 String get enter_new_title => 'Enter new title';
1022
1023 @override
1024 String get pinned_section => 'PINNED';
1025
1026 @override
1027 String get today_section => 'TODAY';
1028
1029 @override
1030 String get yesterday_section => 'YESTERDAY';
1031
1032 @override
1033 String get previous_7_days => 'PREVIOUS 7 DAYS';
1034
1035 @override
1036 String get previous_30_days => 'PREVIOUS 30 DAYS';
1037
1038 @override
1039 String get older_section => 'OLDER';
1040
1041 @override
1042 String get onboarding_choose_language => 'Choose Language';
1043
1044 @override
1045 String get onboarding_choose_language_desc =>
1046 'Select your preferred language. You can change this anytime in settings.';
1047
1048 @override
1049 String get onboarding_localmind => 'LOCALMIND';
1050
1051 @override
1052 String get onboarding_connect_server => 'Connect Your\nServer';
1053
1054 @override
1055 String get onboarding_connect_desc =>
1056 'Connect to LM Studio, Ollama,\nOllama Cloud, or OpenRouter to\nstart your private AI experience.';
1057
1058 @override
1059 String get openai_compatible_api => 'OpenAI-compatible API';
1060
1061 @override
1062 String get https_requires_ssl => 'HTTPS requires SSL';
1063
1064 @override
1065 String get most_local_setups_use_http => 'Most local setups use http://';
1066
1067 @override
1068 String get onboarding_welcome => 'Welcome to LocalMind';
1069
1070 @override
1071 String get server_type_on_device => 'On-Device';
1072
1073 @override
1074 String get server_type_lm_studio => 'LM Studio';
1075
1076 @override
1077 String get server_type_ollama => 'Ollama';
1078
1079 @override
1080 String get server_type_ollama_cloud => 'Ollama Cloud';
1081
1082 @override
1083 String get server_type_ollama_cloud_sub => 'CLOUD MANAGED';
1084
1085 @override
1086 String get server_type_ollama_cloud_display => 'Ollama Cloud';
1087
1088 @override
1089 String get server_address_ollama_cloud => 'ollama.com';
1090
1091 @override
1092 String get ollama_cloud_disclosure =>
1093 '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.';
1094
1095 @override
1096 String get api_key_required_ollama_cloud =>
1097 'API Key required for Ollama Cloud';
1098
1099 @override
1100 String get api_key_hint_ollama_cloud => 'Paste your Ollama Cloud API key';
1101
1102 @override
1103 String get add_server_ollama_cloud_subtitle =>
1104 'Connect to Ollama Cloud with an API key from ollama.com/settings/keys to access managed cloud models.';
1105
1106 @override
1107 String get add_server_openrouter_subtitle =>
1108 'Connect through OpenRouter with a valid API key and keep this profile ready for model routing.';
1109
1110 @override
1111 String get add_server_requesty_subtitle =>
1112 'Connect through Requesty with a valid API key and keep this profile ready for model routing.';
1113
1114 @override
1115 String get add_server_endpoint_subtitle =>
1116 'Configure a local or self-hosted endpoint, then verify the connection before saving.';
1117
1118 @override
1119 String get server_type_openrouter => 'OpenRouter';
1120
1121 @override
1122 String get server_type_requesty => 'Requesty';
1123
1124 @override
1125 String get server_type_openrouter_sub => 'UNIFIED CLOUD';
1126
1127 @override
1128 String get server_type_requesty_sub => 'UNIFIED CLOUD';
1129
1130 @override
1131 String get ready_continue => 'READY TO CONTINUE';
1132
1133 @override
1134 String get waiting_selection => 'WAITING FOR SELECTION';
1135
1136 @override
1137 String get setup_connection => 'Setup Connection';
1138
1139 @override
1140 String setup_connection_desc(String server) {
1141 return 'Configure your $server server to start chatting.';
1142 }
1143
1144 @override
1145 String get server_name => 'Server Name';
1146
1147 @override
1148 String get name_required => 'Name required';
1149
1150 @override
1151 String get name_max_50 => 'Max 50 characters';
1152
1153 @override
1154 String get host_label => 'Host / IP Address';
1155
1156 @override
1157 String get host_required => 'Host required';
1158
1159 @override
1160 String get port_label => 'Port';
1161
1162 @override
1163 String get port_required => 'Port required';
1164
1165 @override
1166 String get port_invalid => 'Must be a number';
1167
1168 @override
1169 String get port_range => 'Enter a valid port (1-65535)';
1170
1171 @override
1172 String get api_key_required => 'API Key *';
1173
1174 @override
1175 String get api_key_optional => 'API Key (Optional)';
1176
1177 @override
1178 String get api_key_required_openrouter => 'API Key required for OpenRouter';
1179
1180 @override
1181 String get api_key_required_requesty => 'API Key required for Requesty';
1182
1183 @override
1184 String get api_key_format => 'OpenRouter API keys start with sk-';
1185
1186 @override
1187 String get my_server_hint => 'My Server';
1188
1189 @override
1190 String get name_length_validation => 'Name must be 50 characters or less';
1191
1192 @override
1193 String get host_valid => 'Enter a valid hostname or IP address';
1194
1195 @override
1196 String get api_key_hint_openrouter => 'sk-...';
1197
1198 @override
1199 String get api_key_hint_requesty => 'rqsty-...';
1200
1201 @override
1202 String get api_key_hint_generic => 'For authenticated servers';
1203
1204 @override
1205 String get update_server => 'Update Server';
1206
1207 @override
1208 String get save_server => 'Save Server';
1209
1210 @override
1211 String get server_updated => 'Server updated';
1212
1213 @override
1214 String get server_added => 'Server added';
1215
1216 @override
1217 String get download_model_title => 'Download a Model';
1218
1219 @override
1220 String get download_model_desc =>
1221 'Choose a model to download.\nIt will run locally on your device.';
1222
1223 @override
1224 String get on_device_android_only =>
1225 'On-device inference is currently available on Android only.';
1226
1227 @override
1228 String get total_ram => 'Total RAM';
1229
1230 @override
1231 String get available => 'Available';
1232
1233 @override
1234 String ram_min_required(String fileSize) {
1235 return '$fileSize GB RAM min';
1236 }
1237
1238 @override
1239 String download_progress(String percent, String speed) {
1240 return '$percent% • $speed';
1241 }
1242
1243 @override
1244 String eta_label(String eta) {
1245 return 'ETA: $eta';
1246 }
1247
1248 @override
1249 String paused_progress(String percent) {
1250 return 'Paused - $percent%';
1251 }
1252
1253 @override
1254 String ram_warning_body_download(String ram, String totalMemory) {
1255 return '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.';
1256 }
1257
1258 @override
1259 String ram_warning_body_load(String availableRAM, String ram) {
1260 return 'Your device has $availableRAM available RAM, but this model recommends at least $ram GB. Loading it might fail or cause instability.';
1261 }
1262
1263 @override
1264 String get choose_theme => 'Choose Theme';
1265
1266 @override
1267 String get choose_theme_desc =>
1268 'Personalize the app appearance. You can always change this later in settings.';
1269
1270 @override
1271 String get theme_card_system => 'System';
1272
1273 @override
1274 String get theme_card_system_sub => 'Matches your device settings';
1275
1276 @override
1277 String get theme_card_light => 'Light';
1278
1279 @override
1280 String get theme_card_light_sub => 'Clean and bright';
1281
1282 @override
1283 String get theme_card_dark => 'Dark';
1284
1285 @override
1286 String get theme_card_dark_sub => 'Easy on the eyes';
1287
1288 @override
1289 String get theme_card_claude => 'Claude';
1290
1291 @override
1292 String get theme_card_claude_sub => 'A warm, peach-tinted theme';
1293
1294 @override
1295 String get stay_updated => 'Stay Updated';
1296
1297 @override
1298 String get stay_updated_desc =>
1299 'Get notified when your AI models finish downloading or when long-running tasks complete.';
1300
1301 @override
1302 String get notification_benefit_downloads => 'Model download progress';
1303
1304 @override
1305 String get notification_benefit_completions => 'Generation completions';
1306
1307 @override
1308 String get notification_benefit_background => 'Background tasks status';
1309
1310 @override
1311 String get allow_notifications => 'Allow Notifications';
1312
1313 @override
1314 String get servers_title => 'Servers';
1315
1316 @override
1317 String get no_servers_yet => 'No Servers Yet';
1318
1319 @override
1320 String get no_servers_desc =>
1321 'Add your first server to start chatting with AI models.';
1322
1323 @override
1324 String get add_server => 'Add Server';
1325
1326 @override
1327 String switched_to_server(String name) {
1328 return 'Switched to $name';
1329 }
1330
1331 @override
1332 String get edit_server => 'Edit Server';
1333
1334 @override
1335 String get add_server_title => 'Add Server';
1336
1337 @override
1338 String get server_type_label => 'Server Type';
1339
1340 @override
1341 String get server_icon_label => 'Server Icon';
1342
1343 @override
1344 String get default_icon => 'Default icon';
1345
1346 @override
1347 String get server_type_lm_studio_display => 'LM Studio';
1348
1349 @override
1350 String get server_type_openai_display => 'OpenAI Compatible';
1351
1352 @override
1353 String get server_type_ollama_display => 'Ollama';
1354
1355 @override
1356 String get server_type_openrouter_display => 'OpenRouter';
1357
1358 @override
1359 String get server_type_requesty_display => 'Requesty';
1360
1361 @override
1362 String get server_type_on_device_display => 'On-Device';
1363
1364 @override
1365 String get server_address_openrouter => 'openrouter.ai';
1366
1367 @override
1368 String get server_address_requesty => 'router.requesty.ai';
1369
1370 @override
1371 String get server_address_on_device => 'Local inference';
1372
1373 @override
1374 String server_address_format(String host, String port) {
1375 return '$host:$port';
1376 }
1377
1378 @override
1379 String get default_badge => 'Default';
1380
1381 @override
1382 String get set_as_default => 'Set as Default';
1383
1384 @override
1385 String get select_icon => 'Select Icon';
1386
1387 @override
1388 String get select_icon_desc => 'Choose an icon for your server';
1389
1390 @override
1391 String get search_icons_hint => 'Search icons...';
1392
1393 @override
1394 String get server_icon_stack => 'Server Stack';
1395
1396 @override
1397 String get server_icon_stack2 => 'Server Stack 02';
1398
1399 @override
1400 String get server_icon_stack3 => 'Server Stack 03';
1401
1402 @override
1403 String get server_icon_cloud => 'Cloud';
1404
1405 @override
1406 String get server_icon_cloud_server => 'Cloud Server';
1407
1408 @override
1409 String get server_icon_mcp => 'MCP Server';
1410
1411 @override
1412 String get server_icon_database => 'Database';
1413
1414 @override
1415 String get server_icon_database1 => 'Database 01';
1416
1417 @override
1418 String get server_icon_database2 => 'Database 02';
1419
1420 @override
1421 String get server_icon_cpu => 'CPU';
1422
1423 @override
1424 String get server_icon_chip => 'Chip';
1425
1426 @override
1427 String get server_icon_chip2 => 'Chip 02';
1428
1429 @override
1430 String get server_icon_computer => 'Computer';
1431
1432 @override
1433 String get server_icon_laptop => 'Laptop';
1434
1435 @override
1436 String get server_icon_terminal => 'Computer Terminal';
1437
1438 @override
1439 String get server_icon_code => 'Code';
1440
1441 @override
1442 String get server_icon_ai_brain => 'AI Brain';
1443
1444 @override
1445 String get server_icon_ai_brain2 => 'AI Brain 02';
1446
1447 @override
1448 String get server_icon_ai_cloud => 'AI Cloud';
1449
1450 @override
1451 String get server_icon_ai_network => 'AI Network';
1452
1453 @override
1454 String get server_icon_ai_chat => 'AI Chat';
1455
1456 @override
1457 String get server_icon_cellular => 'Cellular Network';
1458
1459 @override
1460 String get server_icon_plug1 => 'Plug 01';
1461
1462 @override
1463 String get server_icon_plug2 => 'Plug 02';
1464
1465 @override
1466 String get server_icon_bot => 'Bot';
1467
1468 @override
1469 String get server_icon_bot2 => 'Bot 02';
1470
1471 @override
1472 String get server_icon_robotic => 'Robotic';
1473
1474 @override
1475 String get server_icon_rocket => 'Rocket';
1476
1477 @override
1478 String get server_icon_star => 'Star';
1479
1480 @override
1481 String get server_icon_settings1 => 'Settings 01';
1482
1483 @override
1484 String get server_icon_settings2 => 'Settings 02';
1485
1486 @override
1487 String get server_icon_home1 => 'Home 01';
1488
1489 @override
1490 String get server_icon_home2 => 'Home 02';
1491
1492 @override
1493 String get server_icon_folder1 => 'Folder 01';
1494
1495 @override
1496 String get server_icon_folder2 => 'Folder 02';
1497
1498 @override
1499 String get server_icon_file1 => 'File 01';
1500
1501 @override
1502 String get server_icon_lock => 'Lock';
1503
1504 @override
1505 String get server_icon_key => 'Key 01';
1506
1507 @override
1508 String get server_icon_link => 'Link 01';
1509
1510 @override
1511 String get server_icon_globe => 'Globe';
1512
1513 @override
1514 String get server_icon_api => 'API';
1515
1516 @override
1517 String get server_icon_arrow_right => 'Arrow Right 01';
1518
1519 @override
1520 String get server_icon_check => 'Check Circle';
1521
1522 @override
1523 String get server_icon_alert => 'Alert Circle';
1524
1525 @override
1526 String get server_icon_info => 'Info Circle';
1527
1528 @override
1529 String get server_icon_zap => 'Zap';
1530
1531 @override
1532 String get server_icon_cloud_upload => 'Cloud Upload';
1533
1534 @override
1535 String get server_icon_cloud_download => 'Cloud Download';
1536
1537 @override
1538 String get server_icon_refresh => 'Refresh';
1539
1540 @override
1541 String get server_icon_hard_drive => 'Hard Drive';
1542
1543 @override
1544 String get server_icon_drive => 'Drive';
1545
1546 @override
1547 String get personas_title => 'Personas';
1548
1549 @override
1550 String get persona_category_general => 'General';
1551
1552 @override
1553 String get persona_category_coding => 'Coding';
1554
1555 @override
1556 String get persona_category_education => 'Education';
1557
1558 @override
1559 String get persona_category_creative => 'Creative';
1560
1561 @override
1562 String get persona_builtin_section => 'BUILT-IN';
1563
1564 @override
1565 String get persona_my_section => 'MY PERSONAS';
1566
1567 @override
1568 String get clone_edit => 'Clone & Edit';
1569
1570 @override
1571 String get builtin_badge => 'Built-in';
1572
1573 @override
1574 String get no_personas_found => 'No personas found';
1575
1576 @override
1577 String get no_personas_desc =>
1578 'Create your first persona to customize AI behavior.';
1579
1580 @override
1581 String get edit_persona => 'Edit Persona';
1582
1583 @override
1584 String get create_persona => 'Create Persona';
1585
1586 @override
1587 String get create_persona_button => 'Create';
1588
1589 @override
1590 String get emoji_label => 'Emoji';
1591
1592 @override
1593 String get name_label => 'Name';
1594
1595 @override
1596 String get my_persona_hint => 'My Persona';
1597
1598 @override
1599 String get category_label => 'Category';
1600
1601 @override
1602 String get description_optional => 'Description (optional)';
1603
1604 @override
1605 String get description_hint => 'What this persona does...';
1606
1607 @override
1608 String get system_prompt => 'System Prompt';
1609
1610 @override
1611 String character_count_max(int currentLen) {
1612 return '$currentLen/4000';
1613 }
1614
1615 @override
1616 String get no_prompt_placeholder => 'No prompt yet...';
1617
1618 @override
1619 String get prompt_hint => 'You are a helpful assistant...';
1620
1621 @override
1622 String get prompt_required => 'System prompt is required';
1623
1624 @override
1625 String get prompt_max_chars => 'Max 4000 characters';
1626
1627 @override
1628 String get advanced_settings => 'Advanced Settings';
1629
1630 @override
1631 String get temperature_label => 'Temperature (0.0-2.0)';
1632
1633 @override
1634 String get top_p_label => 'Top P (0.0-1.0)';
1635
1636 @override
1637 String get temp_hint => '0.7';
1638
1639 @override
1640 String get top_p_hint => '0.9';
1641
1642 @override
1643 String get range_0_2 => '0.0-2.0';
1644
1645 @override
1646 String get range_0_1 => '0.0-1.0';
1647
1648 @override
1649 String get persona_updated => 'Persona updated';
1650
1651 @override
1652 String get persona_created => 'Persona created';
1653
1654 @override
1655 String get tts_models_title => 'Text To Speech Models';
1656
1657 @override
1658 String get always_available => 'Always available';
1659
1660 @override
1661 String get tts_system_desc =>
1662 'Uses your device\'s built-in text-to-speech engine.\nNo downloads required. Voice selection uses your device\'s system settings.';
1663
1664 @override
1665 String get downloading_status => 'Downloading...';
1666
1667 @override
1668 String tts_kitten_desc(String size) {
1669 return 'Lightning-fast neural TTS with 8 expressive voices.\nRequires $size download.';
1670 }
1671
1672 @override
1673 String tts_piper_desc(String size) {
1674 return 'Fast offline Piper voices with 2 expressive voices.\nRequires $size download per voice.';
1675 }
1676
1677 @override
1678 String engine_spec(String sizeMb, String ramMb, int voiceCount) {
1679 return '$sizeMb MB · $ramMb MB RAM · $voiceCount voices';
1680 }
1681
1682 @override
1683 String get on_device_models_title => 'On-Device Models';
1684
1685 @override
1686 String get settings_huggingface_token => 'Hugging Face Token (Optional)';
1687
1688 @override
1689 String get settings_huggingface_token_desc =>
1690 'Required only for gated models (e.g. Gemma). Get a token at huggingface.co/settings/tokens.';
1691
1692 @override
1693 String get settings_huggingface_token_set => 'Token saved';
1694
1695 @override
1696 String get settings_huggingface_token_cleared => 'Token cleared';
1697
1698 @override
1699 String get model_requires_huggingface_token =>
1700 'Requires a Hugging Face token';
1701
1702 @override
1703 String get model_missing_huggingface_token =>
1704 'This model is gated on Hugging Face. Add a token in Settings → On-Device Inference to download it.';
1705
1706 @override
1707 String get set_huggingface_token => 'Set token';
1708
1709 @override
1710 String get clear_huggingface_token => 'Clear';
1711
1712 @override
1713 String get edit_huggingface_token_dialog_title => 'Hugging Face Access Token';
1714
1715 @override
1716 String get huggingface_token_dialog_hint => 'hf_…';
1717
1718 @override
1719 String get server_type_ollama_desc => 'Local AI engine. No API key required.';
1720
1721 @override
1722 String get server_type_on_device_desc =>
1723 'Runs on your phone. Some models need a Hugging Face token.';
1724
1725 @override
1726 String get server_type_lm_studio_desc =>
1727 'Local API server. No API key required.';
1728
1729 @override
1730 String get available_models => 'Available Models';
1731
1732 @override
1733 String get device_memory => 'Device Memory';
1734
1735 @override
1736 String get ram_usage => 'RAM Usage';
1737
1738 @override
1739 String get memory_healthy => 'Healthy';
1740
1741 @override
1742 String get memory_critical => 'Critical';
1743
1744 @override
1745 String get memory_low => 'Low';
1746
1747 @override
1748 String ram_used(String percent) {
1749 return '$percent% used';
1750 }
1751
1752 @override
1753 String get available_ram => 'Available RAM';
1754
1755 @override
1756 String get total_capacity => 'Total Capacity';
1757
1758 @override
1759 String get loaded_status => 'Loaded';
1760
1761 @override
1762 String get inference_backend => 'Inference Backend';
1763
1764 @override
1765 String get backend_ios_notice => 'Only CPU backend is available on iOS.';
1766
1767 @override
1768 String get backend_cpu_desc => 'Works on all devices. Most compatible.';
1769
1770 @override
1771 String get backend_gpu_desc =>
1772 'OpenCL acceleration. Faster on supported devices.';
1773
1774 @override
1775 String get backend_npu_desc =>
1776 'Vendor NPU (Qualcomm/MediaTek). Fastest inference.';
1777
1778 @override
1779 String get select_model_title => 'Select Model';
1780
1781 @override
1782 String get refresh_models => 'Refresh models';
1783
1784 @override
1785 String get search_models_hint => 'Search models...';
1786
1787 @override
1788 String get no_server_connected => 'No server connected';
1789
1790 @override
1791 String get add_server_first => 'Add a server first to see available models.';
1792
1793 @override
1794 String get failed_load_models => 'Failed to load models';
1795
1796 @override
1797 String get no_models_available => 'No models available';
1798
1799 @override
1800 String no_models_match(String searchQuery) {
1801 return 'No models match \"$searchQuery\"';
1802 }
1803
1804 @override
1805 String model_load_failed(String error) {
1806 return 'Failed to load model: $error';
1807 }
1808
1809 @override
1810 String model_unloaded_ollama(String name) {
1811 return 'Unload requested for $name. If Ollama is reachable, the model is released immediately.';
1812 }
1813
1814 @override
1815 String model_unloaded_success(String name) {
1816 return '$name unloaded successfully';
1817 }
1818
1819 @override
1820 String model_unload_failed(String error) {
1821 return 'Failed to unload model: $error';
1822 }
1823
1824 @override
1825 String get unload_from_server => 'Unload from server';
1826
1827 @override
1828 String context_chip(String ctx) {
1829 return '$ctx ctx';
1830 }
1831
1832 @override
1833 String get unload_all_models => 'Unload all';
1834
1835 @override
1836 String loaded_models_count(int count) {
1837 return '$count loaded';
1838 }
1839
1840 @override
1841 String get all_models_unloaded => 'All models unloaded';
1842
1843 @override
1844 String get branch_chat => 'Branch chat';
1845
1846 @override
1847 String get branch_chat_desc => 'Start a new conversation from this message';
1848
1849 @override
1850 String get edit_assistant_message_desc => 'Edit the assistant response text.';
1851
1852 @override
1853 String switch_to_model(String modelName, Object model) {
1854 return 'Switch to $modelName';
1855 }
1856
1857 @override
1858 String download_notification_title(String modelName) {
1859 return 'Downloading $modelName...';
1860 }
1861
1862 @override
1863 String get download_complete_notification => 'Download complete!';
1864
1865 @override
1866 String download_complete_body(String modelName) {
1867 return '$modelName has been downloaded successfully.';
1868 }
1869
1870 @override
1871 String download_failed_notification(String error) {
1872 return 'Download failed: $error';
1873 }
1874
1875 @override
1876 String download_failed_body(String modelName) {
1877 return 'Failed to download $modelName.';
1878 }
1879
1880 @override
1881 String get engine_name_system => 'System TTS';
1882
1883 @override
1884 String get engine_tagline_system => 'Built-in device engine';
1885
1886 @override
1887 String get engine_name_kitten => 'Kitten TTS';
1888
1889 @override
1890 String get engine_tagline_kitten => 'High-speed neural TTS';
1891
1892 @override
1893 String get engine_name_sherpa => 'Sherpa ONNX VITS';
1894
1895 @override
1896 String get engine_tagline_sherpa => 'Offline Piper voices';
1897
1898 @override
1899 String get voice_jasper => 'Jasper';
1900
1901 @override
1902 String get voice_bella => 'Bella';
1903
1904 @override
1905 String get voice_bruno => 'Bruno';
1906
1907 @override
1908 String get voice_luna => 'Luna';
1909
1910 @override
1911 String get voice_hugo => 'Hugo';
1912
1913 @override
1914 String get voice_rosie => 'Rosie';
1915
1916 @override
1917 String get voice_leo => 'Leo';
1918
1919 @override
1920 String get voice_kiki => 'Kiki';
1921
1922 @override
1923 String get voice_lessac => 'Lessac (US)';
1924
1925 @override
1926 String get voice_ryan => 'Ryan (US)';
1927
1928 @override
1929 String get model_qwen_3 => 'Qwen 3 0.6B';
1930
1931 @override
1932 String get model_qwen_3_desc =>
1933 'Smallest general-purpose chat model. Fast responses, low memory usage.';
1934
1935 @override
1936 String get model_license_apache => 'Apache-2.0';
1937
1938 @override
1939 String get model_qwen_25 => 'Qwen 2.5 1.5B Instruct';
1940
1941 @override
1942 String get model_qwen_25_desc =>
1943 'Balanced quality and size. Good for general conversation.';
1944
1945 @override
1946 String get model_deepseek => 'DeepSeek R1 Distill Qwen 1.5B';
1947
1948 @override
1949 String get model_deepseek_desc =>
1950 'Reasoning and chain-of-thought model. Best for logical tasks.';
1951
1952 @override
1953 String get model_license_mit => 'MIT';
1954
1955 @override
1956 String get model_gemma => 'Gemma 4 E2B Instruct';
1957
1958 @override
1959 String get model_gemma_desc =>
1960 'Google flagship model. Highest quality, requires more RAM.';
1961
1962 @override
1963 String export_header(String date) {
1964 return '*Exported from LocalMind — $date*';
1965 }
1966
1967 @override
1968 String get export_role_user => '## 👤 User';
1969
1970 @override
1971 String get export_role_assistant => '## 🤖 Assistant';
1972
1973 @override
1974 String get export_role_system => '## ⚙️ System';
1975
1976 @override
1977 String get export_role_tool => '## 🔧 Tool';
1978
1979 @override
1980 String get export_text_user => '[USER]';
1981
1982 @override
1983 String get export_text_assistant => '[ASSISTANT]';
1984
1985 @override
1986 String get export_text_system => '[SYSTEM]';
1987
1988 @override
1989 String get export_text_tool => '[TOOL]';
1990
1991 @override
1992 String get export_label_user => 'USER';
1993
1994 @override
1995 String get export_label_assistant => 'ASSISTANT';
1996
1997 @override
1998 String get export_label_system => 'SYSTEM';
1999
2000 @override
2001 String get export_label_tool => 'TOOL';
2002
2003 @override
2004 String get select_model_hint => 'Select a model to start chatting';
2005
2006 @override
2007 String get test_notification_title => 'Test notification';
2008
2009 @override
2010 String get test_notification_body =>
2011 'This is a test notification for model download progress.';
2012
2013 @override
2014 String get tts_supports_background =>
2015 'Supports background playback as native audio';
2016
2017 @override
2018 String get tts_other_services_background_note =>
2019 'Note: The other TTS services support background playback as native audio.';
2020
2021 @override
2022 String get gguf_imported_models_title => 'Imported GGUF models';
2023
2024 @override
2025 String get gguf_imported_models_empty_subtitle =>
2026 'Import a GGUF from your device or add one from Hugging Face. Imported models run locally with llama.cpp.';
2027
2028 @override
2029 String get gguf_imported_models_ready =>
2030 'imported models ready for local inference.';
2031
2032 @override
2033 String get gguf_curated_models_subtitle =>
2034 'Curated on-device models you can download and manage inside LocalMind.';
2035
2036 @override
2037 String get gguf_only_supported =>
2038 'Only GGUF models are supported for this import.';
2039
2040 @override
2041 String get gguf_imported_from_local_file => 'imported from local file.';
2042
2043 @override
2044 String get gguf_import_failed => 'Failed to import GGUF model';
2045
2046 @override
2047 String get gguf_imported_from_huggingface => 'imported from Hugging Face.';
2048
2049 @override
2050 String get gguf_import_canceled => 'GGUF import canceled.';
2051
2052 @override
2053 String get gguf_enter_huggingface_url => 'Enter a Hugging Face GGUF URL.';
2054
2055 @override
2056 String get gguf_only_official_huggingface_urls =>
2057 'Only official Hugging Face GGUF URLs are supported.';
2058
2059 @override
2060 String get gguf_use_https_url =>
2061 'Use an HTTPS Hugging Face URL for GGUF import.';
2062
2063 @override
2064 String get gguf_url_must_point_to_file =>
2065 'The Hugging Face URL must point directly to a .gguf file.';
2066
2067 @override
2068 String get gguf_unable_to_detect_file_name =>
2069 'Unable to determine the GGUF file name.';
2070
2071 @override
2072 String get gguf_download_empty =>
2073 'The downloaded GGUF file was empty or missing.';
2074
2075 @override
2076 String get gguf_selected_file_missing =>
2077 'Selected model file does not exist.';
2078
2079 @override
2080 String get gguf_import_action => 'Import GGUF';
2081
2082 @override
2083 String get gguf_overview_title => 'Bring your own GGUF models';
2084
2085 @override
2086 String get gguf_overview_subtitle =>
2087 'Import a .gguf from local storage or download one straight from Hugging Face. Imported models stay on this device and load with llama.cpp.';
2088
2089 @override
2090 String get gguf_imported_count_label => 'imported';
2091
2092 @override
2093 String get gguf_local_files_label => 'local files';
2094
2095 @override
2096 String get gguf_huggingface_label => 'Hugging Face';
2097
2098 @override
2099 String get gguf_import_local_title => 'Import local GGUF';
2100
2101 @override
2102 String get gguf_import_local_subtitle => 'Copy a .gguf file from this device';
2103
2104 @override
2105 String get gguf_import_huggingface_title => 'Import from Hugging Face';
2106
2107 @override
2108 String get gguf_import_huggingface_subtitle =>
2109 'Paste a GGUF URL or repo path';
2110
2111 @override
2112 String get gguf_no_imported_title => 'No imported GGUF models yet';
2113
2114 @override
2115 String get gguf_no_imported_subtitle =>
2116 '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.';
2117
2118 @override
2119 String get gguf_import_huggingface_dialog_title =>
2120 'Import GGUF from Hugging Face';
2121
2122 @override
2123 String get gguf_import_huggingface_dialog_subtitle =>
2124 'Paste a direct GGUF URL or a Hugging Face repo path like `owner/repo/blob/main/model.gguf`. Blob links are converted automatically.';
2125
2126 @override
2127 String get gguf_url_or_repo_path => 'GGUF URL or repo path';
2128
2129 @override
2130 String get paste => 'Paste';
2131
2132 @override
2133 String get gguf_browse => 'Browse GGUFs';
2134
2135 @override
2136 String get gguf_huggingface_token_ready => 'Hugging Face token ready';
2137
2138 @override
2139 String get gguf_huggingface_token_optional =>
2140 'Token optional but recommended';
2141
2142 @override
2143 String get gguf_huggingface_token_ready_desc =>
2144 'Your saved token will be used automatically for gated or private repositories.';
2145
2146 @override
2147 String get gguf_huggingface_token_optional_desc =>
2148 'Requires a Hugging Face token. Add one in Settings if this GGUF is gated or private.';
2149
2150 @override
2151 String get gguf_downloading => 'Downloading GGUF';
2152
2153 @override
2154 String get gguf_preparing => 'Preparing';
2155
2156 @override
2157 String get gguf_preparing_download => 'Preparing download...';
2158
2159 @override
2160 String get gguf_cancel_import => 'Cancel import';
2161
2162 @override
2163 String get clipboard_empty => 'Clipboard is empty.';
2164
2165 @override
2166 String get could_not_open_huggingface => 'Could not open Hugging Face.';
2167
2168 @override
2169 String get gguf_paste_url_error =>
2170 'Paste a Hugging Face GGUF URL or repo path.';
2171
2172 @override
2173 String get gguf_blob_link => 'Blob link';
2174
2175 @override
2176 String get gguf_repository_label => 'Repository';
2177
2178 @override
2179 String get gguf_detected_path_label => 'Detected path';
2180
2181 @override
2182 String get gguf_imported_section_label => 'Imported GGUF';
2183
2184 @override
2185 String get gguf_already_available => 'Already available on this device';
2186
2187 @override
2188 String get gguf_curated_models_short => 'Curated on-device models';
2189
2190 @override
2191 String get gguf_vision_projector => 'Vision Projector';
2192
2193 @override
2194 String get gguf_attach_projector => 'Attach Vision Projector';
2195
2196 @override
2197 String get gguf_change_projector => 'Change Vision Projector';
2198
2199 @override
2200 String get gguf_remove_projector => 'Remove Projector';
2201
2202 @override
2203 String get gguf_projector_attached =>
2204 'Vision projector attached successfully';
2205
2206 @override
2207 String get gguf_projector_removed => 'Vision projector removed';
2208
2209 @override
2210 String gguf_projector_auto_detected(String name) {
2211 return 'Auto-detected and linked vision projector: $name';
2212 }
2213
2214 @override
2215 String get gguf_is_projector_file =>
2216 'The selected file is a vision projector (mmproj), not a standalone model.';
2217
2218 @override
2219 String get gguf_projector_url_label =>
2220 'Vision Projector URL (optional mmproj)';
2221
2222 @override
2223 String get gguf_projector_url_hint =>
2224 'https://huggingface.co/.../mmproj-...gguf';
2225
2226 @override
2227 String get gguf_vision_not_supported_error =>
2228 'The active model does not support image attachments. Please attach a vision projector (mmproj) or select a vision-supported model.';
2229
2230 @override
2231 String get execute_tool_title => 'Execute Tool';
2232
2233 @override
2234 String get execute_tool_request_desc =>
2235 'The model is requesting to execute the following tool:';
2236
2237 @override
2238 String get reject => 'Reject';
2239
2240 @override
2241 String get approve => 'Approve';
2242
2243 @override
2244 String get server_type_help =>
2245 'Pick the provider before filling connection details.';
2246
2247 @override
2248 String get server_identity_title => 'Identity';
2249
2250 @override
2251 String get server_identity_desc =>
2252 'Name this server and choose how it appears in the list.';
2253
2254 @override
2255 String get server_connection_title => 'Connection';
2256
2257 @override
2258 String get server_connection_desc =>
2259 'Use the address and port exposed by your server.';
2260
2261 @override
2262 String get server_authentication_title => 'Authentication';
2263
2264 @override
2265 String get server_authentication_required_desc =>
2266 'OpenRouter requires an API key before testing.';
2267
2268 @override
2269 String get server_authentication_required_desc_requesty =>
2270 'Requesty requires an API key before testing.';
2271
2272 @override
2273 String get server_authentication_optional_desc =>
2274 'Leave the API key empty if this server does not require one.';
2275
2276 @override
2277 String get mcp_tools_title => 'MCP Tools';
2278
2279 @override
2280 String get available_tools => 'Available tools';
2281
2282 @override
2283 String get unable_load_tools => 'Unable to load tools';
2284
2285 @override
2286 String get no_tools_registered => 'No tools registered';
2287
2288 @override
2289 String get no_tools_registered_desc =>
2290 'Enable the example MCP server or add MCP integrations from chat settings.';
2291
2292 @override
2293 String get example_mcp_server_title => 'Example MCP server';
2294
2295 @override
2296 String get example_mcp_server_desc =>
2297 'Registers example.echo and example.word_count through the same MCP tool provider used by external servers.';
2298
2299 @override
2300 String get disable_example_server => 'Disable example server';
2301
2302 @override
2303 String get enable_example_server => 'Enable example server';
2304
2305 @override
2306 String get built_in_label => 'Built-in';
2307
2308 @override
2309 String get highlights_label => 'Highlights';
2310
2311 @override
2312 String get built_with_label => 'Built with';
2313
2314 @override
2315 String get local_label => 'Local';
2316
2317 @override
2318 String get gguf_format_label => 'GGUF';
2319
2320 @override
2321 String get tool_status_requested => 'Requested';
2322
2323 @override
2324 String get tool_status_approved => 'Approved';
2325
2326 @override
2327 String get tool_status_rejected => 'Rejected';
2328
2329 @override
2330 String get tool_status_running => 'Running';
2331
2332 @override
2333 String get tool_status_done => 'Done';
2334
2335 @override
2336 String get tool_status_failed => 'Failed';
2337
2338 @override
2339 String get model_favorite_toggle => 'Toggle favorite';
2340
2341 @override
2342 String get model_set_default => 'Set as default model';
2343
2344 @override
2345 String get model_clear_default => 'Remove as default model';
2346
2347 @override
2348 String get model_default_badge => 'Default';
2349
2350 @override
2351 String get model_note_label => 'Note';
2352
2353 @override
2354 String get model_note_hint => 'Add a note about this model…';
2355
2356 @override
2357 String get unload_models_before_load =>
2358 'Unload all models before loading a new one';
2359
2360 @override
2361 String get temp_chat_keyboard_incognito =>
2362 'Incognito keyboard in temporary chat';
2363
2364 @override
2365 String get temp_chat_keyboard_incognito_desc =>
2366 'Disables keyboard learning and suggestions in temporary chats (e.g. SwiftKey incognito).';
2367
2368 @override
2369 String get resume_last_chat => 'Resume last chat on launch';
2370
2371 @override
2372 String get resume_last_chat_desc =>
2373 'Restore your last open conversation when reopening the app.';
2374
2375 @override
2376 String get export_all_data => 'Export all data';
2377
2378 @override
2379 String get import_all_data => 'Import all data';
2380
2381 @override
2382 String get export_data_success => 'Backup exported successfully';
2383
2384 @override
2385 String get import_data_success => 'Backup imported successfully';
2386
2387 @override
2388 String import_data_failed(String error) {
2389 return 'Failed to import backup: $error';
2390 }
2391
2392 @override
2393 String get import_data_confirm =>
2394 'Import conversations and custom personas from this backup? Existing items with the same IDs will be updated.';
2395
2396 @override
2397 String get import_settings_confirm =>
2398 'Replace current settings with the imported backup?';
2399
2400 @override
2401 String get export_conversations => 'Export conversations';
2402
2403 @override
2404 String get import_conversations => 'Import conversations';
2405
2406 @override
2407 String get export_personas => 'Export personas';
2408
2409 @override
2410 String get import_personas => 'Import personas';
2411
2412 @override
2413 String get export_settings => 'Export settings';
2414
2415 @override
2416 String get import_settings => 'Import settings';
2417
2418 @override
2419 String get export_all_zip => 'Export all (ZIP)';
2420
2421 @override
2422 String get import_all_zip => 'Import all (ZIP)';
2423
2424 @override
2425 String get duplicate_chat => 'Duplicate chat';
2426
2427 @override
2428 String get duplicate_chat_success => 'Chat duplicated';
2429
2430 @override
2431 String get move_to_folder => 'Move to folder';
2432
2433 @override
2434 String get remove_from_folder => 'Remove from folder';
2435
2436 @override
2437 String get create_folder => 'Create folder';
2438
2439 @override
2440 String get new_folder => 'New folder';
2441
2442 @override
2443 String get folder_name_hint => 'Folder name';
2444
2445 @override
2446 String get all_chats => 'All';
2447
2448 @override
2449 String get unfiled_chats => 'Unfiled';
2450
2451 @override
2452 String get create => 'Create';
2453
2454 @override
2455 String get server_path_prefix_label => 'API path prefix';
2456
2457 @override
2458 String get server_path_prefix_hint => '/your-secret-token';
2459
2460 @override
2461 String get search_message_contents => 'Search message contents';
2462
2463 @override
2464 String get message_search_results => 'Message matches';
2465
2466 @override
2467 String get saved_messages_title => 'Saved Messages';
2468
2469 @override
2470 String get nav_saved_messages => 'Saved Messages';
2471
2472 @override
2473 String get saved_messages_empty =>
2474 'No saved messages yet. Bookmark a message from its options menu.';
2475
2476 @override
2477 String get save_message => 'Save message';
2478
2479 @override
2480 String get message_saved => 'Message saved';
2481
2482 @override
2483 String token_count(int count) {
2484 return '$count tokens';
2485 }
2486
2487 @override
2488 String estimated_token_count(int count) {
2489 return '~$count tokens (estimated)';
2490 }
2491
2492 @override
2493 String get test_tts_section_title => 'Test voice';
2494
2495 @override
2496 String get test_tts_hint => 'Enter text to hear the current TTS engine…';
2497
2498 @override
2499 String get test_speak_button => 'Speak';
2500
2501 @override
2502 String get scroll_to_bottom => 'Scroll to bottom';
2503
2504 @override
2505 String get generate_ai_response => 'Generate AI response';
2506
2507 @override
2508 String get no_response => 'No response';
2509
2510 @override
2511 String get export => 'Export';
2512
2513 @override
2514 String get import => 'Import';
2515
2516 @override
2517 String get conversations_label => 'Conversations';
2518
2519 @override
2520 String get personas_label => 'Personas';
2521
2522 @override
2523 String get settings_label => 'Settings';
2524
2525 @override
2526 String get export_conversation => 'Export conversation';
2527
2528 @override
2529 String get tts_process_markdown => 'Process markdown for speech';
2530
2531 @override
2532 String get tts_process_markdown_desc =>
2533 'Strip formatting like **bold** before reading aloud';
2534
2535 @override
2536 String get tts_skip_seconds => 'Skip interval';
2537
2538 @override
2539 String get tts_skip_seconds_desc =>
2540 'Forward and rewind jump size during playback';
2541
2542 @override
2543 String tts_skip_seconds_value(int seconds) {
2544 return '${seconds}s';
2545 }
2546
2547 @override
2548 String get preview_system_prompts => 'Preview system prompts';
2549
2550 @override
2551 String get welcome_message_1 => 'What can I help you with today?';
2552
2553 @override
2554 String get welcome_message_2 => 'Ask me anything — I\'m ready when you are.';
2555
2556 @override
2557 String get welcome_message_3 =>
2558 'Your data is processed locally and never leaves your device.';
2559
2560 @override
2561 String get welcome_message_4 => 'Need ideas? Try one of the quick prompts.';
2562
2563 @override
2564 String get temporary_chat => 'Temporary chat';
2565
2566 @override
2567 String get temporary_chat_desc => 'Chats aren\'t saved to history.';
2568
2569 @override
2570 String get temporary_chat_banner => 'Temporary chat — not saved to history';
2571
2572 @override
2573 String get temporary_chat_save_warning_title =>
2574 'Save message in temporary chat?';
2575
2576 @override
2577 String get temporary_chat_save_warning_body =>
2578 'This chat is temporary and hidden from history. The saved message will still appear in Saved Messages.';
2579
2580 @override
2581 String get save_to_history => 'Save to history';
2582
2583 @override
2584 String get share_conversation => 'Share conversation';
2585
2586 @override
2587 String get download_tts_audio => 'Download audio';
2588
2589 @override
2590 String get tts_download_unavailable =>
2591 'Download is only available for Piper and Kitten TTS';
2592
2593 @override
2594 String get tts_download_no_audio => 'No audio available to download yet';
2595
2596 @override
2597 String get tts_download_success => 'Audio saved';
2598
2599 @override
2600 String get return_to_chat => 'Return to chat';
2601
2602 @override
2603 String get return_to_temp_chat => 'Return to temporary chat';
2604
2605 @override
2606 String get insert_saved_message => 'Insert saved message';
2607
2608 @override
2609 String get insert_saved_message_desc =>
2610 'Choose a saved message to add to your input';
2611
2612 @override
2613 String get model_info => 'Model info';
2614
2615 @override
2616 String get model_name => 'Model name';
2617
2618 @override
2619 String get model_identifier => 'Identifier';
2620
2621 @override
2622 String get model_capabilities => 'Capabilities';
2623
2624 @override
2625 String get model_api_pricing => 'API pricing (per 1M tokens)';
2626
2627 @override
2628 String get not_available => 'Not available';
2629
2630 @override
2631 String get save_message_folders => 'Save message';
2632
2633 @override
2634 String get remove_from_saved => 'Remove from saved';
2635
2636 @override
2637 String get message_already_saved => 'Saved';
2638
2639 @override
2640 String get stream_ttft => 'Time to first token';
2641
2642 @override
2643 String get stream_tokens_per_sec => 'Tokens per second';
2644
2645 @override
2646 String get stream_stop_reason => 'Stop reason';
2647
2648 @override
2649 String get stream_input_tokens => 'Input tokens';
2650
2651 @override
2652 String get stream_output_tokens => 'Output tokens';
2653
2654 @override
2655 String get stream_generation_time => 'Generation time';
2656
2657 @override
2658 String get attach_image => 'Photos';
2659
2660 @override
2661 String get attach_text_document => 'Documents';
2662
2663 @override
2664 String get attach_shortcut_images => 'Photos';
2665
2666 @override
2667 String get attach_shortcut_documents => 'Files';
2668
2669 @override
2670 String get attach_shortcut_saved => 'Saved';
2671
2672 @override
2673 String get add_attachment => 'Add attachment';
2674
2675 @override
2676 String get add_to_chat => 'Add to chat';
2677
2678 @override
2679 String get choose_what_to_attach => 'What would you like to add?';
2680
2681 @override
2682 String get choose_attachment_subtitle =>
2683 'Pick a source to attach to your message';
2684
2685 @override
2686 String get photo_permission_denied =>
2687 'Photo access is required to attach images';
2688
2689 @override
2690 String get select_model_prompt => 'Select model';
2691
2692 @override
2693 String get characters_label => 'Characters';
2694
2695 @override
2696 String get exit_temporary_chat_title => 'Exit temporary chat?';
2697
2698 @override
2699 String get exit_temporary_chat_body =>
2700 'This will discard the current temporary chat and return to a new chat.';
2701
2702 @override
2703 String get saved_message_temp_snap_unavailable =>
2704 'This message was saved from a temporary chat and can\'t be opened in its original conversation.';
2705
2706 @override
2707 String get filter_title => 'Filter';
2708
2709 @override
2710 String get filter_pinned => 'Pinned';
2711
2712 @override
2713 String get filter_archived => 'Archived';
2714
2715 @override
2716 String get filter_temp_chats => 'Temporary chats';
2717
2718 @override
2719 String get filter_user_messages => 'User messages';
2720
2721 @override
2722 String get filter_assistant_messages => 'Assistant messages';
2723
2724 @override
2725 String get archive_chat => 'Archive';
2726
2727 @override
2728 String get unarchive_chat => 'Unarchive';
2729
2730 @override
2731 String conversation_message_count(int count) {
2732 String _temp0 = intl.Intl.pluralLogic(
2733 count,
2734 locale: localeName,
2735 other: '$count messages',
2736 one: '1 message',
2737 );
2738 return '$_temp0';
2739 }
2740
2741 @override
2742 String conversation_character_count(int count) {
2743 return '$count chars';
2744 }
2745
2746 @override
2747 String get generate_title_with_ai => 'Generate with AI';
2748
2749 @override
2750 String get generating_title => 'Generating...';
2751
2752 @override
2753 String get generate_title_failed => 'Could not generate a title';
2754
2755 @override
2756 String get lm_studio_model_browser_title => 'Browse models';
2757
2758 @override
2759 String get lm_studio_model_search_hint => 'Search models by name or author…';
2760
2761 @override
2762 String get lm_studio_staff_picks => 'Staff picks';
2763
2764 @override
2765 String get lm_studio_community_models => 'Community models';
2766
2767 @override
2768 String get lm_studio_no_models => 'No models found';
2769
2770 @override
2771 String lm_studio_models_count(int count) {
2772 return '$count models';
2773 }
2774
2775 @override
2776 String get lm_studio_browse_models => 'Browse & download';
2777
2778 @override
2779 String get lm_studio_model_search => 'LMS Model Search';
2780
2781 @override
2782 String get lm_studio_downloads_title => 'Downloads';
2783
2784 @override
2785 String get lm_studio_choose_quant => 'Choose a download option';
2786
2787 @override
2788 String get lm_studio_use_default_quant => 'Use default';
2789
2790 @override
2791 String get lm_studio_recommended => 'Recommended';
2792
2793 @override
2794 String get lm_studio_clear_downloads => 'Clear finished';
2795
2796 @override
2797 String get lm_studio_no_downloads => 'No downloads yet';
2798
2799 @override
2800 String get lm_studio_downloads_disclaimer =>
2801 'Downloads run on the LM Studio host. Pausing, stopping, and deleting models must be done on that computer — not from this app.';
2802
2803 @override
2804 String get lm_studio_staff_pick => 'Staff pick';
2805
2806 @override
2807 String get lm_studio_params => 'PARAMS';
2808
2809 @override
2810 String get lm_studio_arch => 'ARCH';
2811
2812 @override
2813 String get lm_studio_domain => 'DOMAIN';
2814
2815 @override
2816 String get lm_studio_format => 'FORMAT';
2817
2818 @override
2819 String get lm_studio_vision => 'Vision';
2820
2821 @override
2822 String get lm_studio_tool_use => 'Tool use';
2823
2824 @override
2825 String get lm_studio_reasoning => 'Reasoning';
2826
2827 @override
2828 String get openrouter_pricing_free => 'Free';
2829
2830 @override
2831 String openrouter_pricing_tooltip(String input, String output) {
2832 return 'Input $input / Output $output per 1M tokens';
2833 }
2834
2835 @override
2836 String get lm_studio_download_options => 'Download options';
2837
2838 @override
2839 String get lm_studio_download => 'Download';
2840
2841 @override
2842 String lm_studio_download_size(String size) {
2843 return 'Download $size';
2844 }
2845
2846 @override
2847 String lm_studio_downloading_percent(int percent) {
2848 return 'Downloading $percent%';
2849 }
2850
2851 @override
2852 String get lm_studio_readme_unavailable =>
2853 'README not available for this model.';
2854
2855 @override
2856 String get lm_studio_full_gpu_offload => 'Full GPU offload possible';
2857
2858 @override
2859 String get lm_studio_partial_gpu_offload => 'Partial GPU offload possible';
2860
2861 @override
2862 String get lm_studio_likely_too_large => 'Likely too large';
2863
2864 @override
2865 String get lm_studio_available_ram_gb => 'Available RAM (GB, optional)';
2866
2867 @override
2868 String get lm_studio_available_vram_gb => 'Available VRAM (GB, optional)';
2869
2870 @override
2871 String get lm_studio_memory_settings_title => 'Memory for recommendations';
2872
2873 @override
2874 String get lm_studio_memory_settings_desc =>
2875 'Used to estimate whether models fit on your machine in the model browser.';
2876
2877 @override
2878 String get think_button_label => 'Think';
2879
2880 @override
2881 String get thinking_mode_title => 'Thinking mode';
2882
2883 @override
2884 String get reasoning_effort_low => 'Low';
2885
2886 @override
2887 String get reasoning_effort_medium => 'Medium';
2888
2889 @override
2890 String get reasoning_effort_high => 'High';
2891
2892 @override
2893 String get reasoning_effort_minimal => 'Minimal';
2894
2895 @override
2896 String get reasoning_effort_xhigh => 'X-High';
2897
2898 @override
2899 String get reasoning_effort_max => 'Max';
2900
2901 @override
2902 String get reasoning_effort_off => 'Off';
2903
2904 @override
2905 String get could_not_read_file => 'Could not read file';
2906
2907 @override
2908 String get server_offline => 'Server Offline';
2909
2910 @override
2911 String get could_not_establish_connection =>
2912 'Could not establish a connection to the server. Please check if your server is running and the host/port settings are correct.';
2913
2914 @override
2915 String get retry_connection => 'Retry Connection';
2916
2917 @override
2918 String get tokens_label => 'Tokens';
2919
2920 @override
2921 String get enter_context_length => 'Enter context length...';
2922
2923 @override
2924 String get openrouter_disclosure =>
2925 'By connecting this provider, your chat messages and inputs will be sent to their servers. LocalMind does not track or store your conversations.';
2926
2927 @override
2928 String get requesty_disclosure =>
2929 'By connecting this provider, your chat messages and inputs will be sent to their servers. LocalMind does not track or store your conversations.';
2930
2931 @override
2932 String get welcome_message_cloud =>
2933 'Your messages are sent to your connected provider.';
2934
2935 @override
2936 String get privacy_policy => 'Privacy Policy';
2937
2938 @override
2939 String get cloud_sync => 'S3 Cloud Sync';
2940
2941 @override
2942 String get cloud_sync_description =>
2943 'End-to-end encrypted sync to your own S3-compatible server';
2944
2945 @override
2946 String get cloud_sync_endpoint => 'Endpoint URL';
2947
2948 @override
2949 String get cloud_sync_bucket => 'Bucket';
2950
2951 @override
2952 String get cloud_sync_region => 'Region';
2953
2954 @override
2955 String get cloud_sync_prefix => 'Prefix';
2956
2957 @override
2958 String get cloud_sync_access_key => 'Access key ID';
2959
2960 @override
2961 String get cloud_sync_secret_key => 'Secret access key';
2962
2963 @override
2964 String get cloud_sync_session_token => 'Session token (optional)';
2965
2966 @override
2967 String get cloud_sync_passphrase => 'Encryption passphrase';
2968
2969 @override
2970 String get cloud_sync_confirm_passphrase => 'Confirm passphrase';
2971
2972 @override
2973 String get cloud_sync_path_style => 'Use path-style addressing';
2974
2975 @override
2976 String get cloud_sync_allow_http => 'Allow insecure HTTP';
2977
2978 @override
2979 String get cloud_sync_http_warning =>
2980 'HTTP exposes request metadata and credentials to the network. Use it only for a trusted local S3 server.';
2981
2982 @override
2983 String get cloud_sync_test => 'Test connection';
2984
2985 @override
2986 String get cloud_sync_enable => 'Enable encrypted sync';
2987
2988 @override
2989 String get cloud_sync_now => 'Sync now';
2990
2991 @override
2992 String get cloud_sync_disconnect => 'Disconnect this device';
2993
2994 @override
2995 String get cloud_sync_last_synced => 'Last synced';
2996
2997 @override
2998 String get cloud_sync_never => 'Never';
2999
3000 @override
3001 String get cloud_sync_conflicts => 'Conflicts preserved';
3002
3003 @override
3004 String get cloud_sync_passphrase_mismatch => 'Passphrases do not match';
3005
3006 @override
3007 String get crash_report_title => 'Something went wrong';
3008
3009 @override
3010 String get crash_report_stack_trace => 'Stack trace';
3011
3012 @override
3013 String get crash_report_tap_to_expand => 'Tap to expand';
3014
3015 @override
3016 String get crash_report_button => 'Report this crash';
3017
3018 @override
3019 String get crash_try_again => 'Try again';
3020
3021 @override
3022 String get crash_report_empty_stack => '<empty>';
3023
3024 @override
3025 String get crash_report_disclaimer =>
3026 'Reporting opens GitHub with diagnostics prefilled. You stay in control — nothing is submitted automatically. Please review and remove any sensitive content before submitting.';
3027
3028 @override
3029 String get crash_report_copied => 'Copied to clipboard';
3030
3031 @override
3032 String get report_a_problem => 'Report a problem';
3033
3034 @override
3035 String get rename_folder => 'Rename folder';
3036
3037 @override
3038 String get delete_folder => 'Delete folder';
3039
3040 @override
3041 String get delete_folder_title => 'Delete folder?';
3042
3043 @override
3044 String delete_folder_body(String name) {
3045 return 'Are you sure you want to delete \"$name\"? Conversations or saved messages inside will be moved back to \"Unfiled\". This cannot be undone.';
3046 }
3047
3048 @override
3049 String get folder_name_required => 'Please enter a folder name';
3050
3051 @override
3052 String get model_required_toast => 'You need to select a model first';
3053
3054 @override
3055 String get settings_concise_voice_responses => 'Concise Voice Mode Responses';
3056
3057 @override
3058 String get settings_concise_voice_responses_desc =>
3059 'Keep LLM responses brief (1 short paragraph) and ask follow-up questions in voice mode.';
3060
3061 @override
3062 String get s3_connection_succeeded => 'S3 connection succeeded.';
3063
3064 @override
3065 String failed_to_open_url(String error) {
3066 return 'Failed to open URL: $error';
3067 }
3068
3069 @override
3070 String failed_to_copy(String error) {
3071 return 'Failed to copy: $error';
3072 }
3073
3074 @override
3075 String get file_explorer_not_found =>
3076 'No file explorer found. Please make sure a file manager app is installed and enabled on your device.';
3077
3078 @override
3079 String export_data_failed(String error) {
3080 return 'Failed to export backup: $error';
3081 }
3082
3083 @override
3084 String file_pick_failed(String error) {
3085 return 'Failed to select file: $error';
3086 }
3087
3088 @override
3089 String image_pick_failed(String error) {
3090 return 'Failed to select image: $error';
3091 }
3092
3093 @override
3094 String get calendar_access => 'Calendar Access';
3095
3096 @override
3097 String get calendar_access_desc =>
3098 'Allow AI to read and create calendar events';
3099
3100 @override
3101 String get calendar_permission_denied =>
3102 'Calendar permission denied. Please grant calendar access in your device settings.';
3103
3104 @override
3105 String get location_access => 'Location Access';
3106
3107 @override
3108 String get location_access_desc =>
3109 'Allow AI to get your current location with place name';
3110
3111 @override
3112 String get location_permission_denied =>
3113 'Location permission denied. Please grant location access in your device settings.';
3114
3115 @override
3116 String get builtin_ai_not_supported =>
3117 'Built-in AI is not supported on this device.';
3118
3119 @override
3120 String get builtin_ai_unsupported_desc =>
3121 'Your device hardware or OS does not support on-device system AI (e.g. Gemini Nano / Apple Intelligence). Please choose a downloadable model instead.';
3122
3123 @override
3124 String get builtin_ai_unsupported_chip => 'Not Supported';
3125
3126 @override
3127 String get builtin_ai_enable => 'Enable';
3128
3129 @override
3130 String get model_reasoning_default => 'Model default';
3131
3132 @override
3133 String get model_reasoning_on => 'On';
3134
3135 @override
3136 String get model_reasoning_help =>
3137 'Applies to the next response. Off disables thinking when supported by the model’s chat template.';
3138
3139 @override
3140 String get model_reasoning_save_error =>
3141 'Could not save thinking mode. Please try again.';
3142
3143 @override
3144 String get on_device_engine_failed_error =>
3145 'The on-device model stopped responding, usually because the conversation grew past its context window. The model is being reloaded. Try again, start a new chat, or increase the context length in settings.';
3146
3147 @override
3148 String get stt_error_no_match => 'No speech recognized. Tap to try again.';
3149
3150 @override
3151 String get stt_error_speech_timeout =>
3152 'No speech detected. Tap to try again.';
3153
3154 @override
3155 String get stt_error_permission => 'Microphone permission denied.';
3156
3157 @override
3158 String get stt_error_busy => 'Speech recognition is busy. Please try again.';
3159
3160 @override
3161 String get stt_error_network =>
3162 'Network error. Please check your connection and try again.';
3163
3164 @override
3165 String get stt_error_audio =>
3166 'Audio recording error. Please check your microphone.';
3167
3168 @override
3169 String get stt_error_client =>
3170 'The speech recognition service failed to start. Make sure a voice input app is installed and set as the default speech recognizer, then try again.';
3171
3172 @override
3173 String get stt_error_language =>
3174 'The speech recognizer on this device doesn\'t support your language.';
3175
3176 @override
3177 String get stt_error_unavailable =>
3178 'No speech recognition service found on this device. Install a voice input app (for example FUTO Voice Input) and set it as the default speech recognizer.';
3179
3180 @override
3181 String stt_error_generic(String code) {
3182 return 'Speech recognition error: $code';
3183 }
3184
3185 @override
3186 String get send_temperature_to_api => 'Send temperature';
3187
3188 @override
3189 String get send_top_p_to_api => 'Send Top P';
3190
3191 @override
3192 String get send_sampling_params_desc =>
3193 'Turn off for providers or models that reject this parameter (for example some reasoning models). Applies to all chats with remote servers.';
3194
3195 @override
3196 String get default_system_prompt => 'Default system prompt';
3197
3198 @override
3199 String get default_system_prompt_desc =>
3200 'Used for chats that have no persona and no chat-specific system prompt.';
3201
3202 @override
3203 String get default_system_prompt_hint => 'You are a helpful assistant…';
3204
3205 @override
3206 String background_generation_notice(String title) {
3207 return 'Still replying in \"$title\". You can send here once it finishes. Tap to open.';
3208 }
3209
3210 @override
3211 String get background_generation_notice_untitled =>
3212 'Another chat is still replying. You can send here once it finishes. Tap to open.';
3213
3214 @override
3215 String background_generation_notice_info(String title) {
3216 return 'Replying in \"$title\" in the background. Tap to open.';
3217 }
3218
3219 @override
3220 String get background_generation_notice_info_untitled =>
3221 'Another chat is replying in the background. Tap to open.';
3222
3223 @override
3224 String background_generation_notice_multiple(int count) {
3225 return '$count chats are replying in the background.';
3226 }
3227
3228 @override
3229 String get background_generation_chat_untitled => 'Untitled chat';
3230 }