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