| 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 | } |