From 8f9798a69bfc3c3bf2dc08e58164a665b8585b61 Mon Sep 17 00:00:00 2001 From: Kayvan Sylvan Date: Thu, 19 Feb 2026 14:00:23 -0800 Subject: [PATCH 1/2] chore: implement comprehensive i18n support across all plugins and tools ### CHANGES - Implement internationalization support for all AI vendor plugins - Update localization files for multiple languages with new keys - Replace hardcoded strings in Spotify and YouTube tools - Add unit tests for localized error handling in Ollama - Refactor template plugins to use localized system error messages - Standardize setup questions using the new i18n translation framework --- internal/i18n/locales/de.json | 1046 +++++++++-------- internal/i18n/locales/en.json | 1046 +++++++++-------- internal/i18n/locales/es.json | 1046 +++++++++-------- internal/i18n/locales/fa.json | 1038 ++++++++-------- internal/i18n/locales/fr.json | 1046 +++++++++-------- internal/i18n/locales/it.json | 1046 +++++++++-------- internal/i18n/locales/ja.json | 1046 +++++++++-------- internal/i18n/locales/pt-BR.json | 1046 +++++++++-------- internal/i18n/locales/pt-PT.json | 1046 +++++++++-------- internal/i18n/locales/zh.json | 1046 +++++++++-------- internal/plugins/ai/anthropic/anthropic.go | 3 +- internal/plugins/ai/azure/azure.go | 15 +- internal/plugins/ai/ollama/ollama.go | 17 +- internal/plugins/ai/ollama/ollama_test.go | 62 + internal/plugins/ai/openai/openai_audio.go | 19 +- .../plugins/ai/openai/openai_audio_test.go | 64 + internal/plugins/ai/openai/openai_image.go | 9 +- internal/plugins/ai/perplexity/perplexity.go | 18 +- internal/plugins/ai/vendors.go | 10 +- internal/plugins/template/datetime.go | 12 +- internal/plugins/template/sys.go | 14 +- internal/tools/jina/jina.go | 6 +- internal/tools/spotify/spotify.go | 50 +- internal/tools/youtube/youtube.go | 10 +- internal/util/groups_items.go | 3 +- 25 files changed, 5814 insertions(+), 4950 deletions(-) create mode 100644 internal/plugins/ai/ollama/ollama_test.go create mode 100644 internal/plugins/ai/openai/openai_audio_test.go diff --git a/internal/i18n/locales/de.json b/internal/i18n/locales/de.json index 0bbab897..769b0983 100644 --- a/internal/i18n/locales/de.json +++ b/internal/i18n/locales/de.json @@ -1,520 +1,592 @@ { - "html_readability_error": "verwende ursprüngliche Eingabe, da HTML-Lesbarkeit nicht angewendet werden kann", - "vendor_not_configured": "Anbieter %s ist nicht konfiguriert", - "vendor_no_transcription_support": "Anbieter %s unterstützt keine Audio-Transkription", - "transcription_model_required": "Transkriptionsmodell ist erforderlich (verwende --transcribe-model)", - "youtube_not_configured": "YouTube ist nicht konfiguriert, bitte führen Sie die Einrichtung durch", - "spotify_not_configured": "Spotify ist nicht konfiguriert, bitte führen Sie die Einrichtung durch", - "spotify_label": "Spotify", - "spotify_setup_description": "Spotify - um Podcast-/Show-Metadaten von Spotify abzurufen", - "spotify_invalid_url": "Ungültige Spotify-URL, kann Show- oder Episoden-ID nicht abrufen: '%s'", - "spotify_error_getting_metadata": "Fehler beim Abrufen der Spotify-Metadaten: %v", - "spotify_no_show_found": "Keine Show mit ID gefunden: %s", - "spotify_no_episode_found": "Keine Episode mit ID gefunden: %s", - "spotify_url_help": "Spotify-Podcast- oder Episoden-URL zum Abrufen von Metadaten und Senden an den Chat", - "youtube_api_key_required": "YouTube API-Schlüssel erforderlich für Kommentare und Metadaten. Führen Sie 'fabric --setup' zur Konfiguration aus", - "youtube_ytdlp_not_found": "yt-dlp wurde nicht in PATH gefunden. Bitte installiere yt-dlp, um die YouTube-Transkript-Funktionalität zu nutzen", - "youtube_invalid_url": "ungültige YouTube-URL, kann keine Video- oder Playlist-ID abrufen: '%s'", - "youtube_url_is_playlist_not_video": "URL ist eine Playlist, kein Video", - "youtube_no_video_id_found": "keine Video-ID in URL gefunden", - "youtube_rate_limit_exceeded": "YouTube-Ratenlimit überschritten. Versuche es später erneut oder verwende andere yt-dlp-Argumente wie '--sleep-requests 1', um Anfragen zu verlangsamen.", - "youtube_auth_required_bot_detection": "YouTube erfordert Authentifizierung (Bot-Erkennung). Verwende --yt-dlp-args='--cookies-from-browser BROWSER' wobei BROWSER chrome, firefox, brave usw. sein kann.", - "youtube_ytdlp_stderr_error": "Fehler beim Lesen von yt-dlp stderr", - "youtube_invalid_ytdlp_arguments": "ungültige yt-dlp-Argumente: %v", - "youtube_failed_create_temp_dir": "temporäres Verzeichnis konnte nicht erstellt werden: %v", - "youtube_no_transcript_content": "kein Transkriptinhalt in VTT-Datei gefunden", - "youtube_no_vtt_files_found": "keine VTT-Dateien im Verzeichnis gefunden", - "youtube_failed_walk_directory": "Verzeichnis konnte nicht durchlaufen werden: %v", - "youtube_error_getting_video_details": "Fehler beim Abrufen der Videodetails: %v", - "youtube_invalid_duration_string": "ungültige Dauer-Zeichenfolge: %s", - "youtube_error_getting_metadata": "Fehler beim Abrufen der Video-Metadaten: %v", - "youtube_error_parsing_duration": "Fehler beim Parsen der Videodauer: %v", - "youtube_error_getting_comments": "Fehler beim Abrufen der Kommentare: %v", - "youtube_error_saving_csv": "Fehler beim Speichern der Videos in CSV: %v", - "youtube_no_video_found_with_id": "kein Video mit ID gefunden: %s", - "youtube_invalid_timestamp_format": "ungültiges Zeitstempel-Format: %s", - "youtube_empty_seconds_string": "leere Sekunden-Zeichenfolge", - "youtube_invalid_seconds_format": "ungültiges Sekundenformat %q: %w", - "error_fetching_playlist_videos": "Fehler beim Abrufen der Playlist-Videos: %w", - "openai_api_base_url_not_configured": "API-Basis-URL für Anbieter %s nicht konfiguriert", - "openai_failed_to_create_models_url": "Modell-URL konnte nicht erstellt werden: %w", - "openai_unexpected_status_code_with_body": "unerwarteter Statuscode: %d von Anbieter %s, Antwort: %s", - "openai_unexpected_status_code_read_error_partial": "unerwarteter Statuscode: %d von Anbieter %s (Fehler beim Lesen: %v), teilweise Antwort: %s", - "openai_unexpected_status_code_read_error": "unerwarteter Statuscode: %d von Anbieter %s (Fehler beim Lesen der Antwort: %v)", - "openai_unable_to_parse_models_response": "Modell-Antwort konnte nicht geparst werden; rohe Antwort: %s", - "openai_warning_model_no_image_generation": "Warnung: Modell '%s' unterstützt keine Bildgenerierung. Unterstützte Modelle: %s. Erwägen Sie die Verwendung von -m gpt-5.2 für Bildgenerierung.\n", - "openai_model_no_image_generation": "Modell '%s' unterstützt keine Bildgenerierung. Unterstützte Modelle: %s", - "scraping_not_configured": "Scraping-Funktionalität ist nicht konfiguriert. Bitte richte Jina ein, um Scraping zu aktivieren", - "could_not_determine_home_dir": "konnte Benutzer-Home-Verzeichnis nicht bestimmen: %w", - "could_not_stat_env_file": "konnte .env-Datei nicht überprüfen: %w", + "additional_yt_dlp_args": "Zusätzliche Argumente für yt-dlp (z.B. '--cookies-from-browser brave')", + "address_to_bind_rest_api": "Adresse zum Binden der REST API", + "anthropic_stream_error": "Stream-Fehler: %v", + "api_key_secure_server_routes": "API-Schlüssel zum Sichern der Server-Routen", + "application_options_header": "Anwendungsoptionen:", + "apply_variables_to_input": "Variablen auf Benutzereingabe anwenden", + "attachment_path_or_url_help": "Anhangspfad oder URL (z.B. für OpenAI-Bilderkennungsnachrichten)", + "audio_output_file_specified_but_not_tts_model": "Audio-Ausgabedatei '%s' angegeben, aber Modell '%s' ist kein TTS-Modell. Bitte verwende ein TTS-Modell wie gemini-2.5-flash-preview-tts", + "audio_video_file_transcribe": "Audio- oder Video-Datei zum Transkribieren", + "available_models_header": "Verfügbare Modelle", + "available_transcription_models": "Verfügbare Transkriptionsmodelle:", + "available_vendors_header": "Verfügbare Anbieter:", + "azure_api_key_required": "Azure API-Schlüssel ist erforderlich", + "azure_api_version_question": "Geben Sie die Azure API-Version ein (leer lassen für Standard)", + "azure_base_url_required": "Azure Basis-URL ist erforderlich", + "azure_deployments_question": "Geben Sie Ihre Azure-Bereitstellungsnamen ein (kommagetrennt)", + "azure_failed_extract_deployment": "Bereitstellungsname konnte nicht aus der Anfrage extrahiert werden", + "azure_model_field_empty": "Modellfeld ist im Anfragekörper leer", + "azure_request_body_nil": "Anfragekörper ist nil", + "background_type_help": "Hintergrundtyp: opaque, transparent (Standard: opaque, nur für PNG/WebP)", + "bedrock_aws_region_label": "AWS-Region", + "bedrock_converse_failed": "Bedrock Converse für Modell %s fehlgeschlagen: %w", + "bedrock_conversestream_failed": "Bedrock ConverseStream für Modell %s fehlgeschlagen: %w", + "bedrock_empty_response_content": "leerer Antwortinhalt", + "bedrock_failed_list_foundation_models": "Foundation-Modelle konnten nicht aufgelistet werden: %w", + "bedrock_failed_list_inference_profiles": "Inferenz-Profile konnten nicht aufgelistet werden: %w", + "bedrock_invalid_aws_region": "ungültige AWS-Region: %s", + "bedrock_panic_sendstream": "Panic in SendStream: %v", + "bedrock_unable_load_aws_config": "AWS-Konfiguration konnte nicht geladen werden: %w", + "bedrock_unable_load_aws_config_with_region": "AWS-Konfiguration konnte mit Region %s nicht geladen werden: %w", + "bedrock_unexpected_content_block_type": "unerwarteter Inhaltsblocktyp: %T", + "bedrock_unexpected_response_type": "unerwarteter Antworttyp: %T", + "bedrock_unknown_stream_event_type": "unbekannter Stream-Event-Typ: %T", + "cannot_convert_string": "kann String %q nicht zu %v konvertieren", + "change_default_model": "Standardmodell ändern", + "chatter_error_empty_response": "leere Antwort", + "chatter_error_find_context": "Kontext %s konnte nicht gefunden werden: %v", + "chatter_error_find_session": "Sitzung %s konnte nicht gefunden werden: %v", + "chatter_error_get_pattern": "Pattern %s konnte nicht geladen werden: %v", + "chatter_error_load_strategy": "Strategie %s konnte nicht geladen werden: %v", + "chatter_error_no_messages_provided": "keine Nachrichten angegeben", + "chatter_error_no_session_pattern_user_messages": "keine Sitzung, kein Pattern oder keine Benutzernachrichten angegeben", + "chatter_error_stream_update": "Fehler: %s", + "chatter_help_review_changes_with_git_diff": "Sie koennen die Aenderungen mit 'git diff' pruefen, wenn Sie git verwenden.", + "chatter_info_file_changes_applied_successfully": "Dateiaenderungen wurden erfolgreich angewendet.", + "chatter_log_stream_usage_metadata": "[Metadaten] Eingabe: %d | Ausgabe: %d | Gesamt: %d", + "chatter_prompt_enforce_response_language": "%s\n\nWICHTIG: Fuehren Sie zuerst die in diesem Prompt bereitgestellten Anweisungen mit der Eingabe des Benutzers aus. Stellen Sie zweitens sicher, dass Ihre gesamte endgueltige Antwort, einschliesslich aller Abschnittsueberschriften oder Titel, die bei der Ausfuehrung der Anweisungen erzeugt werden, AUSSCHLIESSLICH in der Sprache %s verfasst ist.", + "chatter_warning_apply_file_changes_failed": "Warnung: Dateiaenderungen konnten nicht angewendet werden: %v", + "chatter_warning_get_current_directory_failed": "Warnung: Aktuelles Verzeichnis konnte nicht ermittelt werden: %v", + "chatter_warning_parse_file_changes_failed": "Warnung: Dateiaenderungen konnten nicht geparst werden: %v", + "choose_context_from_available": "Wähle einen Kontext aus den verfügbaren Kontexten", + "choose_model": "Modell wählen", + "choose_pattern_from_available": "Wähle ein Muster aus den verfügbaren Mustern", + "choose_session_from_available": "Wähle eine Sitzung aus den verfügbaren Sitzungen", + "choose_strategy_from_available": "Strategie aus den verfügbaren Strategien wählen", + "command_completed_successfully": "Befehl erfolgreich abgeschlossen", + "compression_level_jpeg_webp": "Komprimierungslevel 0-100 für JPEG/WebP-Formate (Standard: nicht gesetzt)", + "config_file_not_found": "Konfigurationsdatei nicht gefunden: %s", + "convert_html_readability": "HTML-Eingabe in eine saubere, lesbare Ansicht konvertieren", + "copilot_debug_created_conversation": "Copilot-Konversation erstellt: %s", + "copilot_debug_failed_parse_sse_event": "SSE-Ereignis konnte nicht geparst werden: %v", + "copilot_error_chat_request": "Chat-Anfrage fehlgeschlagen: %s - %s", + "copilot_error_create_conversation": "Konversation konnte nicht erstellt werden: %s - %s", + "copilot_error_reading_stream": "Fehler beim Lesen des Streams: %w", + "copilot_error_stream_request": "Stream-Anforderung fehlgeschlagen: %s - %s", + "copilot_failed_create_conversation": "Konversation konnte nicht erstellt werden: %w", + "copilot_failed_send_message": "Nachricht konnte nicht gesendet werden: %w", + "copilot_failed_stream_message": "Nachricht konnte nicht gestreamt werden: %w", + "copilot_tenant_client_id_required": "Mandanten-ID und Client-ID sind erforderlich", + "copy_to_clipboard": "In Zwischenablage kopieren", + "could_not_copy_to_clipboard": "konnte nicht in die Zwischenablage kopieren: %v", "could_not_create_config_dir": "konnte Konfigurationsverzeichnis nicht erstellen: %w", "could_not_create_env_file": "konnte .env-Datei nicht erstellen: %w", - "could_not_copy_to_clipboard": "konnte nicht in die Zwischenablage kopieren: %v", - "file_already_exists_not_overwriting": "Datei %s existiert bereits, wird nicht überschrieben. Benenne die vorhandene Datei um oder wähle einen anderen Namen", - "error_creating_file": "Fehler beim Erstellen der Datei: %v", - "error_writing_to_file": "Fehler beim Schreiben in die Datei: %v", - "error_creating_audio_file": "Fehler beim Erstellen der Audio-Datei: %v", - "error_writing_audio_data": "Fehler beim Schreiben von Audio-Daten in die Datei: %v", - "tts_model_requires_audio_output": "TTS-Modell '%s' benötigt Audio-Ausgabe. Bitte gib eine Audio-Ausgabedatei mit dem -o Flag an (z.B., -o output.wav)", - "audio_output_file_specified_but_not_tts_model": "Audio-Ausgabedatei '%s' angegeben, aber Modell '%s' ist kein TTS-Modell. Bitte verwende ein TTS-Modell wie gemini-2.5-flash-preview-tts", - "file_already_exists_choose_different": "Datei %s existiert bereits. Bitte wähle einen anderen Dateinamen oder entferne die vorhandene Datei", - "no_notification_system_available": "kein Benachrichtigungssystem verfügbar", - "cannot_convert_string": "kann String %q nicht zu %v konvertieren", - "unsupported_conversion": "nicht unterstützte Konvertierung von %v zu %v", - "invalid_config_path": "ungültiger Konfigurationspfad: %w", - "config_file_not_found": "Konfigurationsdatei nicht gefunden: %s", - "error_reading_config_file": "Fehler beim Lesen der Konfigurationsdatei: %w", - "error_parsing_config_file": "Fehler beim Parsen der Konfigurationsdatei: %w", - "error_reading_piped_message": "Fehler beim Lesen der weitergeleiteten Nachricht von stdin: %w", - "image_file_already_exists": "Bilddatei existiert bereits: %s", - "invalid_image_file_extension": "ungültige Bilddatei-Erweiterung '%s'. Unterstützte Formate: .png, .jpeg, .jpg, .webp", - "image_parameters_require_image_file": "Bildparameter (--image-size, --image-quality, --image-background, --image-compression) können nur mit --image-file verwendet werden", - "invalid_image_size": "ungültige Bildgröße '%s'. Unterstützte Größen: 1024x1024, 1536x1024, 1024x1536, auto", - "invalid_image_quality": "ungültige Bildqualität '%s'. Unterstützte Qualitäten: low, medium, high, auto", - "invalid_image_background": "ungültiger Bildhintergrund '%s'. Unterstützte Hintergründe: opaque, transparent", - "image_compression_jpeg_webp_only": "Bildkomprimierung kann nur mit JPEG- und WebP-Formaten verwendet werden, nicht %s", - "image_compression_range_error": "Bildkomprimierung muss zwischen 0 und 100 liegen, erhalten: %d", - "transparent_background_png_webp_only": "transparenter Hintergrund kann nur mit PNG- und WebP-Formaten verwendet werden, nicht %s", - "available_transcription_models": "Verfügbare Transkriptionsmodelle:", - "tts_audio_generated_successfully": "TTS-Audio erfolgreich generiert und gespeichert unter: %s\n", - "fabric_command_complete": "Fabric-Befehl abgeschlossen", - "fabric_command_complete_with_pattern": "Fabric: %s abgeschlossen", - "command_completed_successfully": "Befehl erfolgreich abgeschlossen", - "output_truncated": "Ausgabe: %s...", - "output_full": "Ausgabe: %s", - "choose_pattern_from_available": "Wähle ein Muster aus den verfügbaren Mustern", - "pattern_variables_help": "Werte für Mustervariablen, z.B. -v=#role:expert -v=#points:30", - "choose_context_from_available": "Wähle einen Kontext aus den verfügbaren Kontexten", - "choose_session_from_available": "Wähle eine Sitzung aus den verfügbaren Sitzungen", - "attachment_path_or_url_help": "Anhangspfad oder URL (z.B. für OpenAI-Bilderkennungsnachrichten)", - "run_setup_for_reconfigurable_parts": "Setup für alle rekonfigurierbaren Teile von Fabric ausführen", - "set_temperature": "Temperatur festlegen", - "set_top_p": "Top P festlegen", - "stream_help": "Streaming", - "set_presence_penalty": "Präsenzstrafe festlegen", - "use_model_defaults_raw_help": "Verwende die Standardwerte des Modells, ohne Chat-Optionen (temperature, top_p usw.) zu senden. Gilt nur für OpenAI-kompatible Anbieter. Anthropic-Modelle verwenden stets eine intelligente Parameterauswahl, um modell-spezifische Anforderungen einzuhalten.", - "set_frequency_penalty": "Häufigkeitsstrafe festlegen", - "list_all_patterns": "Alle Muster auflisten", - "list_all_available_models": "Alle verfügbaren Modelle auflisten", - "list_all_contexts": "Alle Kontexte auflisten", - "list_all_sessions": "Alle Sitzungen auflisten", - "update_patterns": "Muster aktualisieren", - "messages_to_send_to_chat": "Nachrichten zum Senden an den Chat", - "copy_to_clipboard": "In Zwischenablage kopieren", - "choose_model": "Modell wählen", - "specify_vendor_for_model": "Anbieter für das ausgewählte Modell angeben (z.B., -V \"LM Studio\" -m openai/gpt-oss-20b)", - "model_context_length_ollama": "Modell-Kontextlänge (betrifft nur ollama)", - "output_to_file": "Ausgabe in Datei", - "output_entire_session": "Gesamte Sitzung (auch eine temporäre) in die Ausgabedatei ausgeben", - "number_of_latest_patterns": "Anzahl der neuesten Muster zum Auflisten", - "change_default_model": "Standardmodell ändern", - "youtube_url_help": "YouTube-Video oder Playlist-\"URL\" zum Abrufen von Transkript und Kommentaren und Senden an Chat oder Ausgabe in Konsole und Speichern in Ausgabedatei", - "prefer_playlist_over_video": "Playlist gegenüber Video bevorzugen, wenn beide IDs in der URL vorhanden sind", - "grab_transcript_from_youtube": "Transkript von YouTube-Video abrufen und an Chat senden (wird standardmäßig verwendet).", - "grab_transcript_with_timestamps": "Transkript von YouTube-Video mit Zeitstempeln abrufen und an Chat senden", - "grab_comments_from_youtube": "Kommentare von YouTube-Video abrufen und an Chat senden", - "output_video_metadata": "Video-Metadaten ausgeben", - "additional_yt_dlp_args": "Zusätzliche Argumente für yt-dlp (z.B. '--cookies-from-browser brave')", - "specify_language_code": "Sprachencode für den Chat angeben, z.B. -g=en -g=zh -g=pt-BR -g=pt-PT", - "scrape_website_url": "Website-URL zu Markdown mit Jina AI scrapen", - "search_question_jina": "Suchanfrage mit Jina AI", - "seed_for_lmm_generation": "Seed für LMM-Generierung", - "wipe_context": "Kontext löschen", - "wipe_session": "Sitzung löschen", - "print_context": "Kontext ausgeben", - "print_session": "Sitzung ausgeben", - "convert_html_readability": "HTML-Eingabe in eine saubere, lesbare Ansicht konvertieren", - "apply_variables_to_input": "Variablen auf Benutzereingabe anwenden", - "disable_pattern_variable_replacement": "Mustervariablenersetzung deaktivieren", - "show_dry_run": "Zeige, was an das Modell gesendet würde, ohne es tatsächlich zu senden", - "serve_fabric_rest_api": "Fabric REST API bereitstellen", - "serve_fabric_api_ollama_endpoints": "Fabric REST API mit ollama-Endpunkten bereitstellen", - "address_to_bind_rest_api": "Adresse zum Binden der REST API", - "api_key_secure_server_routes": "API-Schlüssel zum Sichern der Server-Routen", - "path_to_yaml_config": "Pfad zur YAML-Konfigurationsdatei", - "print_current_version": "Aktuelle Version ausgeben", - "list_all_registered_extensions": "Alle registrierten Erweiterungen auflisten", - "register_new_extension": "Neue Erweiterung aus Konfigurationsdateipfad registrieren", - "remove_registered_extension": "Registrierte Erweiterung nach Name entfernen", - "choose_strategy_from_available": "Strategie aus den verfügbaren Strategien wählen", - "list_all_strategies": "Alle Strategien auflisten", - "list_all_vendors": "Alle Anbieter auflisten", - "output_raw_list_shell_completion": "Rohe Liste ohne Kopfzeilen/Formatierung ausgeben (für Shell-Vervollständigung)", - "enable_web_search_tool": "Web-Such-Tool für unterstützte Modelle aktivieren (Anthropic, OpenAI, Gemini)", - "set_location_web_search": "Standort für Web-Suchergebnisse festlegen (z.B., 'America/Los_Angeles')", - "save_generated_image_to_file": "Generiertes Bild in angegebenem Dateipfad speichern (z.B., 'output.png')", - "image_dimensions_help": "Bildabmessungen: 1024x1024, 1536x1024, 1024x1536, auto (Standard: auto)", - "image_quality_help": "Bildqualität: low, medium, high, auto (Standard: auto)", - "compression_level_jpeg_webp": "Komprimierungslevel 0-100 für JPEG/WebP-Formate (Standard: nicht gesetzt)", - "background_type_help": "Hintergrundtyp: opaque, transparent (Standard: opaque, nur für PNG/WebP)", - "suppress_thinking_tags": "In Denk-Tags eingeschlossenen Text unterdrücken", - "start_tag_thinking_sections": "Start-Tag für Denk-Abschnitte", - "end_tag_thinking_sections": "End-Tag für Denk-Abschnitte", - "disable_openai_responses_api": "OpenAI Responses API deaktivieren (Standard: false)", - "audio_video_file_transcribe": "Audio- oder Video-Datei zum Transkribieren", - "model_for_transcription": "Modell für Transkription (getrennt vom Chat-Modell)", - "split_media_files_ffmpeg": "Audio/Video-Dateien größer als 25MB mit ffmpeg aufteilen", - "tts_voice_name": "TTS-Stimmenname für unterstützte Modelle (z.B., Kore, Charon, Puck)", - "list_gemini_tts_voices": "Alle verfügbaren Gemini TTS-Stimmen auflisten", - "list_transcription_models": "Alle verfügbaren Transkriptionsmodelle auflisten", - "send_desktop_notification": "Desktop-Benachrichtigung senden, wenn Befehl abgeschlossen ist", + "could_not_determine_home_dir": "konnte Benutzer-Home-Verzeichnis nicht bestimmen: %w", + "could_not_stat_env_file": "konnte .env-Datei nicht überprüfen: %w", "custom_notification_command": "Benutzerdefinierter Befehl für Benachrichtigungen (überschreibt eingebaute Benachrichtigungen)", - "set_reasoning_thinking_level": "Reasoning/Thinking-Level festlegen (z.B., off, low, medium, high, oder numerische Token für Anthropic oder Google Gemini)", - "set_debug_level": "Debug-Level festlegen (0=aus, 1=grundlegend, 2=detailliert, 3=Trace)", - "usage_header": "Verwendung:", - "application_options_header": "Anwendungsoptionen:", - "help_options_header": "Hilfe-Optionen:", - "help_message": "Diese Hilfenachricht anzeigen", - "options_placeholder": "[OPTIONEN]", - "available_vendors_header": "Verfügbare Anbieter:", - "available_models_header": "Verfügbare Modelle", - "no_items_found": "Keine %s", - "no_description_available": "Keine Beschreibung verfügbar", - "i18n_download_failed": "Fehler beim Herunterladen der Übersetzung für Sprache '%s': %v", - "i18n_load_failed": "Fehler beim Laden der Übersetzungsdatei: %v", - "setup_welcome_header": "🎉 Willkommen bei Fabric! Lass uns mit der Einrichtung beginnen.", - "setup_step_downloading_patterns": "📥 Schritt 1: Patterns werden heruntergeladen (erforderlich für Fabric)...", - "setup_step_downloading_strategies": "📥 Schritt 2: Strategien werden heruntergeladen (erforderlich für Fabric)...", - "setup_step_configure_ai_provider": "🤖 Schritt 3: KI-Anbieter konfigurieren", - "setup_ai_provider_required": "Fabric benötigt mindestens einen KI-Anbieter.", - "setup_add_more_providers_later": "Sie können später weitere Anbieter mit 'fabric --setup' hinzufügen", - "setup_step_setting_defaults": "⚙️ Schritt 4: Standard-Anbieter und -Modell werden festgelegt...", - "setup_complete_header": "✅ Einrichtung abgeschlossen! Sie können Fabric jetzt verwenden.", - "setup_next_steps": "Nächste Schritte:", - "setup_list_patterns": "• Verfügbare Patterns auflisten: fabric -l", - "setup_try_pattern": "• Ein Pattern ausprobieren: echo 'Ihr Text' | fabric --pattern summarize", - "setup_configure_more": "• Weitere Einstellungen konfigurieren: fabric --setup", - "setup_failed_download_patterns": "Fehler beim Herunterladen der Patterns: %w", - "setup_failed_download_strategies": "Fehler beim Herunterladen der Strategien: %w", - "setup_failed_set_defaults": "Fehler beim Festlegen des Standard-Anbieters und -Modells: %w", - "setup_no_ai_provider_selected": "Kein KI-Anbieter ausgewählt - mindestens einer ist erforderlich", - "setup_invalid_selection": "Ungültige Auswahl: %s", - "setup_available_ai_providers": "Verfügbare KI-Anbieter:", - "setup_enter_ai_provider_number": "KI-Anbieter-Nummer", - "setup_available_plugins": "Verfügbare Plugins:", - "setup_plugin_number": "Plugin-Nummer", - "setup_plugin_prompt": "Geben Sie die Nummer des Plugins ein, das eingerichtet werden soll", - "setup_required_configuration_header": "━━━ ERFORDERLICHE KONFIGURATION ━━━\n\nKI-Anbieter [mindestens einer erforderlich]", - "setup_required_tools": "Erforderliche Werkzeuge", - "setup_optional_configuration_header": "━━━ OPTIONALE KONFIGURATION ━━━\n\nOptionale Werkzeuge", - "setup_validation_header": "Konfigurationsstatus:", - "setup_validation_ai_provider_configured": "✓ KI-Anbieter konfiguriert", - "setup_validation_ai_provider_missing": "✗ KI-Anbieter nicht konfiguriert - Erforderlich für Fabric", - "setup_validation_defaults_configured": "✓ Standard-Anbieter/-Modell festgelegt: %s/%s", - "setup_validation_defaults_missing": "✗ Standard-Anbieter/-Modell nicht festgelegt - Erforderlich für Fabric", - "setup_validation_patterns_configured": "✓ Patterns heruntergeladen", - "setup_validation_patterns_missing": "✗ Patterns nicht gefunden - Erforderlich für Fabric", - "setup_validation_strategies_configured": "✓ Strategien heruntergeladen", - "setup_validation_strategies_missing": "✗ Strategien nicht gefunden - Erforderlich für Fabric", - "setup_validation_incomplete_warning": "⚠️ Einrichtung unvollständig! Erforderliche Komponenten fehlen.", - "setup_validation_incomplete_help": "Führen Sie 'fabric --setup' erneut aus, um fehlende Elemente zu konfigurieren,\noder 'fabric -U', um Patterns und Strategien herunterzuladen.", - "setup_validation_complete": "✓ Alle erforderlichen Komponenten konfiguriert!", - "patterns_not_found_header": "⚠️ Keine Patterns gefunden!", - "patterns_required_to_work": "Patterns sind erforderlich, damit Fabric funktioniert. Um dies zu beheben:", - "patterns_option_run_setup": "Option 1 (Empfohlen): Setup ausführen, um Patterns herunterzuladen", - "patterns_option_run_setup_command": "fabric --setup", - "patterns_option_run_update": "Option 2: Patterns direkt herunterladen/aktualisieren", - "patterns_option_run_update_command": "fabric -U", - "pattern_not_found_no_patterns": "Pattern '%s' nicht gefunden.\n\nKeine Patterns installiert! Um dies zu beheben:\n • Führen Sie 'fabric --setup' aus, um Patterns zu konfigurieren und herunterzuladen\n • Oder führen Sie 'fabric -U' aus, um Patterns direkt herunterzuladen/zu aktualisieren", - "pattern_not_found_list_available": "Pattern '%s' nicht gefunden. Führen Sie 'fabric -l' aus, um verfügbare Patterns anzuzeigen", - "plugin_configured": " ✓", - "plugin_not_configured": " ⚠️ NICHT KONFIGURIERT", - "defaults_setup_description": "Standard-KI-Anbieter und -Modell", - "defaults_model_question": "Geben Sie den Index oder den Namen Ihres Standardmodells ein", - "defaults_model_context_length_question": "Geben Sie die Kontextlänge des Modells ein", + "custom_patterns_directory_question": "Geben Sie den Pfad zu Ihrem benutzerdefinierten Pattern-Verzeichnis ein", "custom_patterns_label": "Benutzerdefinierte Patterns", "custom_patterns_setup_description": "Benutzerdefinierte Patterns - Verzeichnis für Ihre benutzerdefinierten Patterns festlegen", - "custom_patterns_directory_question": "Geben Sie den Pfad zu Ihrem benutzerdefinierten Pattern-Verzeichnis ein", + "defaults_model_context_length_question": "Geben Sie die Kontextlänge des Modells ein", + "defaults_model_question": "Geben Sie den Index oder den Namen Ihres Standardmodells ein", + "defaults_setup_description": "Standard-KI-Anbieter und -Modell", + "disable_openai_responses_api": "OpenAI Responses API deaktivieren (Standard: false)", + "disable_pattern_variable_replacement": "Mustervariablenersetzung deaktivieren", + "enable_web_search_tool": "Web-Such-Tool für unterstützte Modelle aktivieren (Anthropic, OpenAI, Gemini)", + "end_tag_thinking_sections": "End-Tag für Denk-Abschnitte", + "error_creating_audio_file": "Fehler beim Erstellen der Audio-Datei: %v", + "error_creating_file": "Fehler beim Erstellen der Datei: %v", + "error_fetching_playlist_videos": "Fehler beim Abrufen der Playlist-Videos: %w", + "error_parsing_config_file": "Fehler beim Parsen der Konfigurationsdatei: %w", + "error_reading_config_file": "Fehler beim Lesen der Konfigurationsdatei: %w", + "error_reading_piped_message": "Fehler beim Lesen der weitergeleiteten Nachricht von stdin: %w", + "error_writing_audio_data": "Fehler beim Schreiben von Audio-Daten in die Datei: %v", + "error_writing_to_file": "Fehler beim Schreiben in die Datei: %v", + "extension_cmd_template_required": "Befehlsvorlage ist für Operation %s erforderlich", + "extension_command_template_label": " Befehlsvorlage: %s\n", + "extension_config_hash_mismatch": "Hash-Abweichung der Konfigurationsdatei für %s", + "extension_config_path_label": " Konfigurationspfad: %s\n\n", + "extension_description_label": " Beschreibung: %s\n", + "extension_empty_command": "Leerer Befehl nach Formatierung", + "extension_executable_hash_mismatch": "Hash-Abweichung der Programmdatei für %s", + "extension_executable_label": " Programmdatei: %s\n", + "extension_executable_not_found": "Programmdatei nicht gefunden: %w", + "extension_executable_required": "Pfad zur Programmdatei ist erforderlich", + "extension_executing_command": "Befehl wird ausgeführt: %s\n", + "extension_execution_failed_err": "Ausführung fehlgeschlagen: %w\nerr: %s", + "extension_execution_failed_stderr": "Ausführung fehlgeschlagen: %w\nstderr: %s", + "extension_execution_timed_out": "Ausführung nach %v abgelaufen", + "extension_failed_format_command": "Befehl konnte nicht formatiert werden: %w", + "extension_failed_get_absolute_path": "absoluter Pfad konnte nicht ermittelt werden: %w", + "extension_failed_get_extension": "Erweiterung konnte nicht abgerufen werden: %w", + "extension_failed_get_output_path": "Ausgabepfad konnte nicht ermittelt werden: %w\nerr: %s", + "extension_failed_hash_executable": "Programmdatei-Hash konnte nicht berechnet werden: %w", + "extension_failed_marshal_registry": "Erweiterungsregistrierung konnte nicht serialisiert werden: %w", + "extension_failed_parse_config": "Konfigurationsdatei konnte nicht geparst werden: %w", + "extension_failed_parse_registry": "Erweiterungsregistrierung konnte nicht geparst werden: %w", + "extension_failed_read_config": "Konfigurationsdatei konnte nicht gelesen werden: %w", + "extension_failed_read_output_file": "Ausgabedatei konnte nicht gelesen werden: %w", + "extension_failed_read_registry": "Erweiterungsregistrierung konnte nicht gelesen werden: %w", + "extension_failed_register": "Erweiterung konnte nicht registriert werden: %w", + "extension_failed_remove": "Erweiterung konnte nicht entfernt werden: %w", + "extension_failed_verify_executable": "Programmdatei konnte nicht verifiziert werden: %w", + "extension_file_config_label": " Dateikonfiguration:\n", + "extension_invalid_config_path": "ungültiger Konfigurationspfad: %w", + "extension_invalid_definition": "ungültige Erweiterungsdefinition: %w", + "extension_invalid_timeout": "ungültiger Zeitlimit-Wert '%s': muss eine Dauer wie '30s' oder '1m' sein: %w", + "extension_invalid_timeout_format": "ungültiges Zeitlimit-Format: %w", + "extension_name_contains_spaces": "Erweiterungsname '%s' enthält Leerzeichen - Namen dürfen keine Leerzeichen enthalten", + "extension_name_detail_label": "Name: %s\n", + "extension_name_empty": "Erweiterungsname darf nicht leer sein", + "extension_name_label": "Erweiterung: %s\n", + "extension_name_required": "Erweiterungsname ist erforderlich", + "extension_no_file_config": "Keine Dateikonfiguration gefunden", + "extension_no_output_file": "Keine Ausgabedatei in der Konfiguration angegeben", + "extension_not_found": "Erweiterung %s nicht gefunden", + "extension_operation_not_found": "Operation %s für Erweiterung %s nicht gefunden", + "extension_operation_required": "mindestens eine Operation muss definiert sein", + "extension_operations_label": " Operationen:\n", + "extension_registered_success": "Erweiterung erfolgreich registriert:\n", + "extension_registry_not_initialized": "Erweiterungsregistrierung nicht initialisiert", + "extension_status_disabled": " Status: DEAKTIVIERT - Hash-Überprüfung fehlgeschlagen: %v\n", + "extension_status_enabled": " Status: AKTIVIERT\n", + "extension_timeout_label": " Zeitlimit: %s\n", + "extension_type_label": " Typ: %s\n", + "extension_type_required": "Erweiterungstyp ist erforderlich", + "extension_version_label": " Version: %s\n", + "extension_warning_load_registry": "Warnung: Erweiterungsregistrierung konnte nicht geladen werden: %v\n", + "fabric_command_complete": "Fabric-Befehl abgeschlossen", + "fabric_command_complete_with_pattern": "Fabric: %s abgeschlossen", + "fetch_content_exceeds_limit": "fetch: Inhalt zu groß: überschreitet %d Bytes", + "fetch_content_not_utf8": "fetch: Inhalt ist kein gültiger UTF-8-Text", + "fetch_content_null_bytes": "fetch: Inhalt enthält Null-Bytes", + "fetch_content_too_large": "fetch: Inhalt zu groß: %d Bytes (max %d Bytes)", + "fetch_error_create_request": "fetch: Fehler beim Erstellen der Anfrage: %v", + "fetch_error_fetching_url": "fetch: Fehler beim Abrufen der URL: %v", + "fetch_error_reading_response": "fetch: Fehler beim Lesen der Antwort: %v", + "fetch_http_error": "fetch: HTTP-Fehler: %d - %s", + "fetch_unknown_operation": "fetch: unbekannte Operation %q (unterstützt: get)", + "fetch_unsupported_content_type": "fetch: nicht unterstützter Inhaltstyp %q - nur Textinhalt erlaubt", + "file_already_exists_choose_different": "Datei %s existiert bereits. Bitte wähle einen anderen Dateinamen oder entferne die vorhandene Datei", + "file_already_exists_not_overwriting": "Datei %s existiert bereits, wird nicht überschrieben. Benenne die vorhandene Datei um oder wähle einen anderen Namen", + "file_manager_applied_operation": "Operation %s auf %s angewendet", + "file_manager_empty_path": "leerer Pfad für Dateiänderung %d", + "file_manager_failed_create_directory": "Verzeichnis %s konnte nicht für Dateiänderung %d erstellt werden: %w", + "file_manager_failed_parse_json": "%s JSON konnte nicht geparst werden: %w", + "file_manager_failed_write_file": "Datei %s konnte nicht für Dateiänderung %d geschrieben werden: %w", + "file_manager_file_content_too_large": "Dateiinhalt zu groß für Dateiänderung %d: %d Bytes", + "file_manager_invalid_format_no_json_array": "ungültiges %s-Format: kein JSON-Array gefunden", + "file_manager_invalid_format_unbalanced_brackets": "ungültiges %s-Format: unausgewogene Klammern", + "file_manager_invalid_operation": "ungültige Operation für Dateiänderung %d: %s", + "file_manager_suspicious_path": "verdächtiger Pfad für Dateiänderung %d: %s", + "gemini_audio_data_too_small": "Audiodaten zu klein: %d Bytes, mindestens erforderlich: %d", + "gemini_empty_pcm_data": "leere PCM-Daten bereitgestellt", + "gemini_invalid_location_format": "ungültiges Suchstandortformat %q: muss eine Zeitzone (z.B. 'America/Los_Angeles') oder ein Sprachcode (z.B. 'en-US') sein", + "gemini_invalid_voice": "ungültige Stimme '%s'. Gültige Stimmen sind: %v", + "gemini_no_audio_data": "keine Audiodaten vom TTS-Modell erhalten", + "gemini_no_text_for_tts": "kein Textinhalt für TTS-Generierung gefunden", + "gemini_pcm_data_too_large": "PCM-Daten zu groß: %d Bytes, maximal erlaubt: %d", + "gemini_stream_error": "Fehler: %v", + "gemini_tts_failed": "TTS-Generierung fehlgeschlagen: %w", + "gemini_unexpected_data_type": "unerwarteter Datentyp: %s, Audiodaten erwartet", + "gemini_wav_data_invalid": "generierte WAV-Daten sind ungültig: %d Bytes, mindestens erforderlich: %d", + "gemini_wav_generation_failed": "WAV-Datei konnte nicht generiert werden: %w", + "grab_comments_from_youtube": "Kommentare von YouTube-Video abrufen und an Chat senden", + "grab_transcript_from_youtube": "Transkript von YouTube-Video abrufen und an Chat senden (wird standardmäßig verwendet).", + "grab_transcript_with_timestamps": "Transkript von YouTube-Video mit Zeitstempeln abrufen und an Chat senden", + "groups_items_number_out_of_range": "Nummer %d liegt außerhalb des Bereichs", + "help_message": "Diese Hilfenachricht anzeigen", + "help_options_header": "Hilfe-Optionen:", + "html_readability_error": "verwende ursprüngliche Eingabe, da HTML-Lesbarkeit nicht angewendet werden kann", + "i18n_download_failed": "Fehler beim Herunterladen der Übersetzung für Sprache '%s': %v", + "i18n_load_failed": "Fehler beim Laden der Übersetzungsdatei: %v", + "image_compression_jpeg_webp_only": "Bildkomprimierung kann nur mit JPEG- und WebP-Formaten verwendet werden, nicht %s", + "image_compression_range_error": "Bildkomprimierung muss zwischen 0 und 100 liegen, erhalten: %d", + "image_dimensions_help": "Bildabmessungen: 1024x1024, 1536x1024, 1024x1536, auto (Standard: auto)", + "image_file_already_exists": "Bilddatei existiert bereits: %s", + "image_parameters_require_image_file": "Bildparameter (--image-size, --image-quality, --image-background, --image-compression) können nur mit --image-file verwendet werden", + "image_quality_help": "Bildqualität: low, medium, high, auto (Standard: auto)", + "invalid_config_path": "ungültiger Konfigurationspfad: %w", + "invalid_image_background": "ungültiger Bildhintergrund '%s'. Unterstützte Hintergründe: opaque, transparent", + "invalid_image_file_extension": "ungültige Bilddatei-Erweiterung '%s'. Unterstützte Formate: .png, .jpeg, .jpg, .webp", + "invalid_image_quality": "ungültige Bildqualität '%s'. Unterstützte Qualitäten: low, medium, high, auto", + "invalid_image_size": "ungültige Bildgröße '%s'. Unterstützte Größen: 1024x1024, 1536x1024, 1024x1536, auto", + "jina_error_creating_request": "Fehler beim Erstellen der Anfrage: %v", + "jina_error_reading_response_body": "Fehler beim Lesen des Antwortkörpers: %v", + "jina_error_sending_request": "Fehler beim Senden der Anfrage: %v", "jina_label": "Jina AI", "jina_setup_description": "Jina AI Service - zum Erfassen einer Webseite als sauberer, LLM-freundlicher Text", - "youtube_label": "YouTube", - "youtube_setup_description": "YouTube - zum Erfassen von Video-Transkripten (via yt-dlp) und Kommentaren/Metadaten (via YouTube API)", "language_label": "Sprache", - "language_setup_description": "Sprache - Standard-Ausgabesprache des AI-Anbieters", "language_output_question": "Geben Sie Ihre Standard-Ausgabesprache ein (zum Beispiel: zh_CN)", - "optional_marker": "(optional)", - "required_marker": "[erforderlich]", - "patterns_loader_label": "Pattern-Loader", - "patterns_setup_description": "Patterns – lädt Patterns herunter", - "patterns_git_repo_url_label": "Git Repo URL", - "patterns_git_repo_url_question": "Geben Sie die Standard-Git-Repository-URL für die Patterns ein", - "patterns_git_repo_folder_label": "Git Repo Patterns Ordner", - "patterns_git_repo_folder_question": "Geben Sie den Standardordner im Git-Repository an, in dem die Patterns gespeichert sind", - "patterns_failed_create_temp_folder": "Fehler beim Erstellen des temporären Pattern-Ordners: %w", - "patterns_downloading": "Lade Patterns herunter und befülle %s...\\n", - "patterns_failed_download_from_git": "Fehler beim Herunterladen der Patterns aus dem Git-Repository: %w", - "patterns_saving_updated_configuration": "💾 Aktualisierte Konfiguration wird gespeichert (Pfad geändert von '%s' zu '%s')...\\n", - "patterns_failed_move_patterns": "Fehler beim Verschieben der Patterns in das Konfigurationsverzeichnis: %w", - "patterns_download_success": "✅ Patterns erfolgreich nach %s heruntergeladen und installiert\\n", - "patterns_failed_unique_file": "Fehler beim Erstellen der Datei mit eindeutigen Patterns: %w", - "patterns_failed_access_directory": "Fehler beim Zugriff auf den Pattern-Ordner '%s': %w", - "patterns_preserve_warning": "Warnung: Benutzerdefiniertes Pattern '%s' konnte nicht erhalten werden: %v\\n", - "patterns_preserved_custom_pattern": "Benutzerdefiniertes Pattern beibehalten: %s\\n", - "patterns_failed_create_temp_dir": "Fehler beim Erstellen des temporären Verzeichnisses: %w", - "patterns_cloning_repository": "Repository %s wird geklont (Pfad: %s)...\\n", - "patterns_failed_download_from_repo": "Fehler beim Herunterladen der Patterns von %s: %w", - "patterns_failed_read_temp_directory": "Fehler beim Lesen des temporären Pattern-Verzeichnisses: %w", - "patterns_no_patterns_migration_failed": "Keine Patterns im Repository unter Pfad %s gefunden und Migration fehlgeschlagen: %w", - "patterns_downloaded_temp": "%d Patterns in temporäres Verzeichnis heruntergeladen\\n", - "patterns_detected_old_path": "🔄 Alter Pattern-Pfad 'patterns' erkannt, versuche Migration zu 'data/patterns'...", - "patterns_warning_remove_test_folder": "Warnung: Der temporäre Testordner '%s' konnte nicht entfernt werden: %v\\n", - "patterns_found_new_path": "✅ %d Patterns im neuen Pfad '%s' gefunden, Konfiguration wird aktualisiert...\\n", - "patterns_failed_move_test_patterns": "Fehler beim Verschieben der Test-Patterns in den temporären Ordner: %w", - "patterns_unable_to_find_or_migrate": "Keine Patterns im aktuellen Pfad '%s' gefunden oder Migration auf neue Struktur fehlgeschlagen", - "patterns_failed_read_directory": "Fehler beim Lesen des Pattern-Verzeichnisses: %w", - "patterns_debug_included_custom_directory": "📂 Auch Patterns aus dem benutzerdefinierten Verzeichnis aufgenommen: %s\\n", - "patterns_warning_custom_directory": "Warnung: Benutzerdefiniertes Pattern-Verzeichnis %s konnte nicht gelesen werden: %v\\n", - "patterns_no_patterns_found_in_directories": "Keine Patterns in den Verzeichnissen %s und %s gefunden", - "patterns_no_patterns_found_in_directory": "Keine Patterns im Verzeichnis %s gefunden", - "patterns_failed_write_unique_file": "Fehler beim Schreiben der Datei mit eindeutigen Patterns: %w", - "patterns_unique_file_created": "📝 Datei mit eindeutigen Patterns mit %d Einträgen erstellt\\n", - "patterns_no_patterns_copied": "Keine Patterns wurden erfolgreich nach %s kopiert", - "patterns_failed_loaded_marker": "Marker-Datei '%s' konnte nicht erstellt werden: %w", - "strategies_label": "Prompt-Strategien", - "strategies_setup_description": "Strategien – lädt Prompt-Strategien herunter (z. B. Chain of Thought)", - "strategies_git_repo_url_label": "Git Repo URL", - "strategies_git_repo_url_question": "Geben Sie die Standard-Git-Repository-URL für die Strategien ein", - "strategies_git_repo_folder_label": "Git Repo Strategien Ordner", - "strategies_git_repo_folder_question": "Geben Sie den Standardordner im Git-Repository an, in dem Strategien gespeichert sind", - "strategies_downloading": "Lade Strategien herunter und befülle %s...\\n", - "strategies_download_success": "✅ Strategien erfolgreich nach %s heruntergeladen und installiert\\n", - "strategies_home_dir_error": "Startverzeichnis konnte nicht ermittelt werden: %v", - "strategies_failed_create_directory": "Strategie-Verzeichnis konnte nicht erstellt werden: %w", - "strategies_cloning_repository": "Repository %s wird geklont (Pfad: %s)...\\n", - "strategies_failed_download": "Fehler beim Herunterladen der Strategien: %w", - "strategies_downloaded_count": "%d Strategien heruntergeladen\\n", - "strategies_home_dir_fallback": "Startverzeichnis konnte nicht ermittelt werden: %v, verwende stattdessen aktuelles Verzeichnis", - "strategy_not_found": "Strategie %s nicht gefunden. Führen Sie 'fabric --liststrategies' aus, um eine Liste zu erhalten", - "strategies_none_found": "Keine Strategien gefunden. Führen Sie 'fabric --setup' aus, um Strategien herunterzuladen", - "strategies_available_header": "Verfügbare Strategien:", - "plugin_enter_value": "Geben Sie Ihren %v %v ein", - "plugin_enable_bool_question": "%v %v aktivieren (true/false)", - "plugin_setup_skipped": "[%v] übersprungen\\n", - "plugin_question_bool": "%v%v (true/false, leer lassen für '%s' oder '%v' eingeben, um den Wert zu entfernen):", - "plugin_question_with_default": "%v%v (leer lassen für '%s' oder '%v' eingeben, um den Wert zu entfernen):", - "plugin_question_optional": "%v%v (leer lassen zum Überspringen):", - "plugin_invalid_boolean_value": "Ungültiger Boolescher Wert: %v", - "plugin_setting_not_valid": "%v=%v ist nicht gültig", - "plugin_invalid_bool": "Ungültiger boolescher Wert: %q", - "ollama_num_ctx_must_be_finite": "num_ctx muss eine endliche Zahl sein", - "ollama_num_ctx_must_be_integer": "num_ctx muss eine Ganzzahl sein, erhielt Float mit Nachkommastellen", - "ollama_num_ctx_value_out_of_range": "num_ctx Wert außerhalb des Bereichs", - "ollama_num_ctx_must_be_positive": "num_ctx muss positiv sein, erhalten: %d", - "ollama_num_ctx_value_too_large": "num_ctx Wert zu groß: %d", - "ollama_num_ctx_must_be_valid_number": "num_ctx muss eine gültige Zahl sein", - "ollama_num_ctx_must_be_valid_number_got": "num_ctx muss eine gültige Zahl sein, erhalten: %s", - "ollama_num_ctx_invalid_type": "num_ctx muss eine Zahl sein, ungültiger Typ erhalten", - "ollama_num_ctx_exceeds_maximum": "num_ctx überschreitet den maximal zulässigen Wert von %d", - "ollama_error_reading_body": "Fehler beim Lesen des Bodys: %v", - "ollama_error_endpoint": "Endpunkt wird getestet", - "ollama_error_unmarshalling_body": "Fehler beim Unmarshalling des Bodys: %v", - "ollama_invalid_num_ctx_in_request": "Ungültiger num_ctx in Anfrage: %v", - "ollama_warning_parse_variables": "Warnung: Fehler beim Parsen von options.variables als JSON: %v", - "ollama_error_marshalling_body": "Fehler beim Marshalling des Bodys: %v", + "language_setup_description": "Sprache - Standard-Ausgabesprache des AI-Anbieters", + "list_all_available_models": "Alle verfügbaren Modelle auflisten", + "list_all_contexts": "Alle Kontexte auflisten", + "list_all_patterns": "Alle Muster auflisten", + "list_all_registered_extensions": "Alle registrierten Erweiterungen auflisten", + "list_all_sessions": "Alle Sitzungen auflisten", + "list_all_strategies": "Alle Strategien auflisten", + "list_all_vendors": "Alle Anbieter auflisten", + "list_gemini_tts_voices": "Alle verfügbaren Gemini TTS-Stimmen auflisten", + "list_transcription_models": "Alle verfügbaren Transkriptionsmodelle auflisten", + "lmstudio_api_url_question": "Geben Sie Ihre %v URL ein (zur Erinnerung, sie ist normalerweise %v)", + "lmstudio_error_reading_response": "Fehler beim Lesen der Antwort: %w", + "lmstudio_failed_create_request": "Anfrage konnte nicht erstellt werden: %w", + "lmstudio_failed_decode_response": "Antwort konnte nicht dekodiert werden: %w", + "lmstudio_failed_marshal_payload": "Nutzlast konnte nicht serialisiert werden: %w", + "lmstudio_failed_send_request": "Anfrage konnte nicht gesendet werden: %w", + "lmstudio_invalid_response_missing_choices": "Ungültiges Antwortformat: Auswahlmöglichkeiten fehlen oder sind leer", + "lmstudio_invalid_response_missing_content": "Ungültiges Antwortformat: Inhalt in der Nachricht fehlt oder ist kein String", + "lmstudio_invalid_response_missing_message": "Ungültiges Antwortformat: Nachricht in der ersten Auswahl fehlt", + "lmstudio_invalid_response_missing_text": "Ungültiges Antwortformat: Text in der ersten Auswahl fehlt oder ist kein String", + "lmstudio_no_embeddings_returned": "Keine Einbettungen zurückgegeben", + "lmstudio_unexpected_status_code": "Unerwarteter Statuscode: %d", + "model_context_length_ollama": "Modell-Kontextlänge (betrifft nur ollama)", + "model_for_transcription": "Modell für Transkription (getrennt vom Chat-Modell)", + "no_description_available": "Keine Beschreibung verfügbar", + "no_items_found": "Keine %s", + "no_notification_system_available": "kein Benachrichtigungssystem verfügbar", + "number_of_latest_patterns": "Anzahl der neuesten Muster zum Auflisten", + "ollama_cannot_parse_url": "URL '%s' kann nicht geparst werden: %v", + "ollama_chat_request_failed": "Chat-Anfrage fehlgeschlagen: %v", + "ollama_empty_address": "Leere Adresse", "ollama_error_building_chat_url": "Fehler beim Erstellen der /chat URL: %v", "ollama_error_creating_chat_request": "Fehler beim Erstellen der /chat Anfrage: %v", - "ollama_failed_create_request": "Fehler beim Erstellen der Anfrage", + "ollama_error_endpoint": "Endpunkt wird getestet", "ollama_error_getting_chat_body": "Fehler beim Abrufen des /chat Bodys: %v", - "ollama_upstream_non_2xx_body_unreadable": "Upstream Fabric Server hat nicht-2xx Status %d zurückgegeben und Body konnte nicht gelesen werden: %v", - "ollama_upstream_non_2xx": "Upstream Fabric Server hat nicht-2xx Status %d zurückgegeben: %s", - "ollama_upstream_returned_status": "Upstream Fabric Server hat Status %d zurückgegeben", - "ollama_error_prefix": "Fehler: %s", + "ollama_error_marshalling_body": "Fehler beim Marshalling des Bodys: %v", "ollama_error_parse_upstream_response": "Fehler: Upstream-Antwort konnte nicht geparst werden", - "ollama_failed_unmarshal_fabric_response": "Fehler beim Unmarshalling der Fabric Antwort", - "ollama_error_writing_response": "Fehler beim Schreiben der Antwort: %v", + "ollama_error_prefix": "Fehler: %s", + "ollama_error_reading_body": "Fehler beim Lesen des Bodys: %v", "ollama_error_scanning_body": "Fehler beim Scannen des Bodys: %v", + "ollama_error_unmarshalling_body": "Fehler beim Unmarshalling des Bodys: %v", + "ollama_error_writing_response": "Fehler beim Schreiben der Antwort: %v", + "ollama_failed_create_request": "Fehler beim Erstellen der Anfrage", + "ollama_failed_decode_data_url": "Data-URL konnte nicht dekodiert werden: %v", + "ollama_failed_fetch_image": "Bild konnte nicht von %s abgerufen werden: %s", "ollama_failed_scan_sse_stream": "Fehler beim Scannen des SSE Response Streams: %v", - "ollama_sse_buffer_limit": "SSE Zeile überschreitet 1MB Puffer-Limit - Datenzeile zu groß", - "ollama_warning_no_content": "Warnung: Kein Inhalt vom Upstream Fabric Server erhalten", - "ollama_no_content_from_upstream": "Kein Inhalt vom Upstream Fabric Server erhalten", - "ollama_empty_address": "Leere Adresse", + "ollama_failed_unmarshal_fabric_response": "Fehler beim Unmarshalling der Fabric Antwort", + "ollama_http_timeout_question": "Geben Sie das HTTP-Zeitlimit ein (z.B. 20m, 60s)", "ollama_invalid_address": "Ungültige Adresse: %w", "ollama_invalid_address_missing_host": "Ungültige Adresse: Host fehlt", "ollama_invalid_address_missing_hostname": "Ungültige Adresse: Hostname fehlt", "ollama_invalid_address_path_not_allowed": "Ungültige Adresse: Pfadkomponente in bloßer Adresse nicht zulässig", - "extension_registry_not_initialized": "Erweiterungsregistrierung nicht initialisiert", - "extension_name_label": "Erweiterung: %s\n", - "extension_status_disabled": " Status: DEAKTIVIERT - Hash-Überprüfung fehlgeschlagen: %v\n", - "extension_config_path_label": " Konfigurationspfad: %s\n\n", - "extension_status_enabled": " Status: AKTIVIERT\n", - "extension_executable_label": " Programmdatei: %s\n", - "extension_type_label": " Typ: %s\n", - "extension_timeout_label": " Zeitlimit: %s\n", - "extension_description_label": " Beschreibung: %s\n", - "extension_version_label": " Version: %s\n", - "extension_operations_label": " Operationen:\n", - "extension_command_template_label": " Befehlsvorlage: %s\n", - "extension_file_config_label": " Dateikonfiguration:\n", - "extension_invalid_config_path": "ungültiger Konfigurationspfad: %w", - "extension_failed_read_config": "Konfigurationsdatei konnte nicht gelesen werden: %w", - "extension_failed_parse_config": "Konfigurationsdatei konnte nicht geparst werden: %w", - "extension_failed_register": "Erweiterung konnte nicht registriert werden: %w", - "extension_invalid_timeout": "ungültiger Zeitlimit-Wert '%s': muss eine Dauer wie '30s' oder '1m' sein: %w", - "extension_registered_success": "Erweiterung erfolgreich registriert:\n", - "extension_name_detail_label": "Name: %s\n", - "extension_failed_remove": "Erweiterung konnte nicht entfernt werden: %w", - "lmstudio_api_url_question": "Geben Sie Ihre %v URL ein (zur Erinnerung, sie ist normalerweise %v)", - "lmstudio_failed_create_request": "Anfrage konnte nicht erstellt werden: %w", - "lmstudio_failed_send_request": "Anfrage konnte nicht gesendet werden: %w", - "lmstudio_unexpected_status_code": "Unerwarteter Statuscode: %d", - "lmstudio_failed_decode_response": "Antwort konnte nicht dekodiert werden: %w", - "lmstudio_failed_marshal_payload": "Nutzlast konnte nicht serialisiert werden: %w", - "lmstudio_error_reading_response": "Fehler beim Lesen der Antwort: %w", - "lmstudio_invalid_response_missing_choices": "Ungültiges Antwortformat: Auswahlmöglichkeiten fehlen oder sind leer", - "lmstudio_invalid_response_missing_message": "Ungültiges Antwortformat: Nachricht in der ersten Auswahl fehlt", - "lmstudio_invalid_response_missing_content": "Ungültiges Antwortformat: Inhalt in der Nachricht fehlt oder ist kein String", - "lmstudio_invalid_response_missing_text": "Ungültiges Antwortformat: Text in der ersten Auswahl fehlt oder ist kein String", - "lmstudio_no_embeddings_returned": "Keine Einbettungen zurückgegeben", - "extension_warning_load_registry": "Warnung: Erweiterungsregistrierung konnte nicht geladen werden: %v\n", - "extension_name_empty": "Erweiterungsname darf nicht leer sein", - "extension_name_contains_spaces": "Erweiterungsname '%s' enthält Leerzeichen - Namen dürfen keine Leerzeichen enthalten", - "extension_executable_not_found": "Programmdatei nicht gefunden: %w", - "extension_failed_get_absolute_path": "absoluter Pfad konnte nicht ermittelt werden: %w", - "extension_failed_hash_executable": "Programmdatei-Hash konnte nicht berechnet werden: %w", - "extension_invalid_definition": "ungültige Erweiterungsdefinition: %w", - "extension_name_required": "Erweiterungsname ist erforderlich", - "extension_executable_required": "Pfad zur Programmdatei ist erforderlich", - "extension_type_required": "Erweiterungstyp ist erforderlich", - "extension_invalid_timeout_format": "ungültiges Zeitlimit-Format: %w", - "extension_operation_required": "mindestens eine Operation muss definiert sein", - "extension_cmd_template_required": "Befehlsvorlage ist für Operation %s erforderlich", - "extension_not_found": "Erweiterung %s nicht gefunden", - "extension_config_hash_mismatch": "Hash-Abweichung der Konfigurationsdatei für %s", - "extension_failed_verify_executable": "Programmdatei konnte nicht verifiziert werden: %w", - "extension_executable_hash_mismatch": "Hash-Abweichung der Programmdatei für %s", - "extension_failed_marshal_registry": "Erweiterungsregistrierung konnte nicht serialisiert werden: %w", - "extension_failed_read_registry": "Erweiterungsregistrierung konnte nicht gelesen werden: %w", - "extension_failed_parse_registry": "Erweiterungsregistrierung konnte nicht geparst werden: %w", - "extension_failed_get_extension": "Erweiterung konnte nicht abgerufen werden: %w", - "extension_failed_format_command": "Befehl konnte nicht formatiert werden: %w", - "extension_empty_command": "Leerer Befehl nach Formatierung", - "extension_operation_not_found": "Operation %s für Erweiterung %s nicht gefunden", - "extension_executing_command": "Befehl wird ausgeführt: %s\n", - "extension_execution_failed_stderr": "Ausführung fehlgeschlagen: %w\nstderr: %s", - "extension_no_file_config": "Keine Dateikonfiguration gefunden", - "extension_no_output_file": "Keine Ausgabedatei in der Konfiguration angegeben", - "extension_execution_timed_out": "Ausführung nach %v abgelaufen", - "extension_execution_failed_err": "Ausführung fehlgeschlagen: %w\nerr: %s", - "extension_failed_read_output_file": "Ausgabedatei konnte nicht gelesen werden: %w", - "extension_failed_get_output_path": "Ausgabepfad konnte nicht ermittelt werden: %w\nerr: %s", - "spotify_failed_create_token_request": "Token-Anfrage konnte nicht erstellt werden: %w", - "spotify_failed_request_access_token": "Zugriffstoken konnte nicht angefordert werden: %w", - "spotify_failed_get_access_token": "Zugriffstoken konnte nicht abgerufen werden: Status %d, Antwort: %s", - "spotify_failed_decode_token_response": "Token-Antwort konnte nicht dekodiert werden: %w", - "spotify_failed_create_request": "Anfrage konnte nicht erstellt werden: %w", - "spotify_failed_execute_request": "Anfrage konnte nicht ausgeführt werden: %w", - "spotify_failed_read_response_body": "Antwortinhalt konnte nicht gelesen werden: %w", + "ollama_invalid_data_url_format": "ungültiges Data-URL-Format", + "ollama_invalid_http_timeout_using_default": "Ungültiges HTTP-Zeitlimit '%s': %v, verwende Standardwert", + "ollama_invalid_num_ctx_in_request": "Ungültiger num_ctx in Anfrage: %v", + "ollama_no_content_from_upstream": "Kein Inhalt vom Upstream Fabric Server erhalten", + "ollama_num_ctx_exceeds_maximum": "num_ctx überschreitet den maximal zulässigen Wert von %d", + "ollama_num_ctx_invalid_type": "num_ctx muss eine Zahl sein, ungültiger Typ erhalten", + "ollama_num_ctx_must_be_finite": "num_ctx muss eine endliche Zahl sein", + "ollama_num_ctx_must_be_integer": "num_ctx muss eine Ganzzahl sein, erhielt Float mit Nachkommastellen", + "ollama_num_ctx_must_be_positive": "num_ctx muss positiv sein, erhalten: %d", + "ollama_num_ctx_must_be_valid_number": "num_ctx muss eine gültige Zahl sein", + "ollama_num_ctx_must_be_valid_number_got": "num_ctx muss eine gültige Zahl sein, erhalten: %s", + "ollama_num_ctx_value_out_of_range": "num_ctx Wert außerhalb des Bereichs", + "ollama_num_ctx_value_too_large": "num_ctx Wert zu groß: %d", + "ollama_sse_buffer_limit": "SSE Zeile überschreitet 1MB Puffer-Limit - Datenzeile zu groß", + "ollama_upstream_non_2xx": "Upstream Fabric Server hat nicht-2xx Status %d zurückgegeben: %s", + "ollama_upstream_non_2xx_body_unreadable": "Upstream Fabric Server hat nicht-2xx Status %d zurückgegeben und Body konnte nicht gelesen werden: %v", + "ollama_upstream_returned_status": "Upstream Fabric Server hat Status %d zurückgegeben", + "ollama_warning_no_content": "Warnung: Kein Inhalt vom Upstream Fabric Server erhalten", + "ollama_warning_parse_variables": "Warnung: Fehler beim Parsen von options.variables als JSON: %v", + "openai_api_base_url_not_configured": "API-Basis-URL für Anbieter %s nicht konfiguriert", + "openai_audio_ffmpeg_failed": "ffmpeg fehlgeschlagen: %v: %s", + "openai_audio_ffmpeg_not_found_install": "ffmpeg nicht gefunden: bitte installieren", + "openai_audio_file_exceeds_limit_enable_split": "Datei %s überschreitet das 25-MB-Limit; verwenden Sie --split-media-file, um automatisches Aufteilen zu aktivieren", + "openai_audio_file_exceeds_limit_splitting": "Datei %s ist größer als das Größenlimit... wird in Teile aufgeteilt...", + "openai_audio_model_not_supported_for_transcription": "Modell '%s' wird für die Transkription nicht unterstützt", + "openai_audio_running_ffmpeg_split_chunks": "ffmpeg wird ausgeführt, um Audio in %d-Sekunden-Teile aufzuteilen...", + "openai_audio_unable_to_split_acceptable_size_chunks": "Datei konnte nicht in akzeptable Teile aufgeteilt werden", + "openai_audio_unsupported_audio_format": "nicht unterstütztes Audioformat '%s'", + "openai_audio_using_model_to_transcribe_part": "Verwende Modell %s zur Transkription von Teil %d (Dateiname: %s)...", + "openai_failed_to_create_models_url": "Modell-URL konnte nicht erstellt werden: %w", + "openai_image_failed_to_create_directory": "Verzeichnis %s konnte nicht erstellt werden: %w", + "openai_image_failed_to_decode_image_data": "Bilddaten konnten nicht dekodiert werden: %w", + "openai_image_failed_to_save_image": "Bild konnte nicht in %s gespeichert werden: %w", + "openai_image_saved_to": "Bild gespeichert unter: %s", + "openai_model_no_image_generation": "Modell '%s' unterstützt keine Bildgenerierung. Unterstützte Modelle: %s", + "openai_models_response_too_large": "Modell-Antwort zu groß von Anbieter %s (>%d Bytes)", + "openai_unable_to_parse_models_response": "Modell-Antwort konnte nicht geparst werden; rohe Antwort: %s", + "openai_unexpected_status_code_read_error": "unerwarteter Statuscode: %d von Anbieter %s (Fehler beim Lesen der Antwort: %v)", + "openai_unexpected_status_code_with_body": "unerwarteter Statuscode: %d von Anbieter %s, Antwort: %s", + "openai_warning_model_no_image_generation": "Warnung: Modell '%s' unterstützt keine Bildgenerierung. Unterstützte Modelle: %s. Erwägen Sie die Verwendung von -m gpt-5.2 für Bildgenerierung.\n", + "optional_marker": "(optional)", + "options_placeholder": "[OPTIONEN]", + "output_entire_session": "Gesamte Sitzung (auch eine temporäre) in die Ausgabedatei ausgeben", + "output_full": "Ausgabe: %s", + "output_raw_list_shell_completion": "Rohe Liste ohne Kopfzeilen/Formatierung ausgeben (für Shell-Vervollständigung)", + "output_to_file": "Ausgabe in Datei", + "output_truncated": "Ausgabe: %s...", + "output_video_metadata": "Video-Metadaten ausgeben", + "path_to_yaml_config": "Pfad zur YAML-Konfigurationsdatei", + "pattern_not_found_list_available": "Pattern '%s' nicht gefunden. Führen Sie 'fabric -l' aus, um verfügbare Patterns anzuzeigen", + "pattern_not_found_no_patterns": "Pattern '%s' nicht gefunden.\n\nKeine Patterns installiert! Um dies zu beheben:\n • Führen Sie 'fabric --setup' aus, um Patterns zu konfigurieren und herunterzuladen\n • Oder führen Sie 'fabric -U' aus, um Patterns direkt herunterzuladen/zu aktualisieren", + "pattern_variables_help": "Werte für Mustervariablen, z.B. -v=#role:expert -v=#points:30", + "patterns_cloning_repository": "Repository %s wird geklont (Pfad: %s)...\\n", + "patterns_debug_included_custom_directory": "📂 Auch Patterns aus dem benutzerdefinierten Verzeichnis aufgenommen: %s\\n", + "patterns_detected_old_path": "🔄 Alter Pattern-Pfad 'patterns' erkannt, versuche Migration zu 'data/patterns'...", + "patterns_download_success": "✅ Patterns erfolgreich nach %s heruntergeladen und installiert\\n", + "patterns_downloaded_temp": "%d Patterns in temporäres Verzeichnis heruntergeladen\\n", + "patterns_downloading": "Lade Patterns herunter und befülle %s...\\n", + "patterns_failed_access_directory": "Fehler beim Zugriff auf den Pattern-Ordner '%s': %w", + "patterns_failed_create_temp_dir": "Fehler beim Erstellen des temporären Verzeichnisses: %w", + "patterns_failed_create_temp_folder": "Fehler beim Erstellen des temporären Pattern-Ordners: %w", + "patterns_failed_download_from_git": "Fehler beim Herunterladen der Patterns aus dem Git-Repository: %w", + "patterns_failed_download_from_repo": "Fehler beim Herunterladen der Patterns von %s: %w", + "patterns_failed_loaded_marker": "Marker-Datei '%s' konnte nicht erstellt werden: %w", + "patterns_failed_move_patterns": "Fehler beim Verschieben der Patterns in das Konfigurationsverzeichnis: %w", + "patterns_failed_move_test_patterns": "Fehler beim Verschieben der Test-Patterns in den temporären Ordner: %w", + "patterns_failed_read_directory": "Fehler beim Lesen des Pattern-Verzeichnisses: %w", + "patterns_failed_read_temp_directory": "Fehler beim Lesen des temporären Pattern-Verzeichnisses: %w", + "patterns_failed_unique_file": "Fehler beim Erstellen der Datei mit eindeutigen Patterns: %w", + "patterns_failed_write_unique_file": "Fehler beim Schreiben der Datei mit eindeutigen Patterns: %w", + "patterns_found_new_path": "✅ %d Patterns im neuen Pfad '%s' gefunden, Konfiguration wird aktualisiert...\\n", + "patterns_git_repo_folder_question": "Geben Sie den Standardordner im Git-Repository an, in dem die Patterns gespeichert sind", + "patterns_git_repo_url_question": "Geben Sie die Standard-Git-Repository-URL für die Patterns ein", + "patterns_loader_label": "Pattern-Loader", + "patterns_no_patterns_copied": "Keine Patterns wurden erfolgreich nach %s kopiert", + "patterns_no_patterns_found_in_directories": "Keine Patterns in den Verzeichnissen %s und %s gefunden", + "patterns_no_patterns_found_in_directory": "Keine Patterns im Verzeichnis %s gefunden", + "patterns_no_patterns_migration_failed": "Keine Patterns im Repository unter Pfad %s gefunden und Migration fehlgeschlagen: %w", + "patterns_not_found_header": "⚠️ Keine Patterns gefunden!", + "patterns_option_run_setup": "Option 1 (Empfohlen): Setup ausführen, um Patterns herunterzuladen", + "patterns_option_run_setup_command": "fabric --setup", + "patterns_option_run_update": "Option 2: Patterns direkt herunterladen/aktualisieren", + "patterns_option_run_update_command": "fabric -U", + "patterns_preserve_warning": "Warnung: Benutzerdefiniertes Pattern '%s' konnte nicht erhalten werden: %v\\n", + "patterns_preserved_custom_pattern": "Benutzerdefiniertes Pattern beibehalten: %s\\n", + "patterns_required_to_work": "Patterns sind erforderlich, damit Fabric funktioniert. Um dies zu beheben:", + "patterns_saving_updated_configuration": "💾 Aktualisierte Konfiguration wird gespeichert (Pfad geändert von '%s' zu '%s')...\\n", + "patterns_setup_description": "Patterns – lädt Patterns herunter", + "patterns_unable_to_find_or_migrate": "Keine Patterns im aktuellen Pfad '%s' gefunden oder Migration auf neue Struktur fehlgeschlagen", + "patterns_unique_file_created": "📝 Datei mit eindeutigen Patterns mit %d Einträgen erstellt\\n", + "patterns_warning_custom_directory": "Warnung: Benutzerdefiniertes Pattern-Verzeichnis %s konnte nicht gelesen werden: %v\\n", + "patterns_warning_remove_test_folder": "Warnung: Der temporäre Testordner '%s' konnte nicht entfernt werden: %v\\n", + "perplexity_api_key_not_configured": "API-Schlüssel für %s nicht konfiguriert. Setzen Sie die Umgebungsvariable %s oder führen Sie 'fabric --setup' aus, um %s zu konfigurieren", + "perplexity_api_request_failed": "Perplexity API-Anfrage fehlgeschlagen: %w", + "perplexity_citations_header": "\n\n**Quellen:**\n", + "perplexity_failed_configure": "Perplexity konnte nicht konfiguriert werden: %w", + "perplexity_streaming_error": "Perplexity Streaming-Fehler: %v", + "plugin_configured": " ✓", + "plugin_enable_bool_question": "%v %v aktivieren (true/false)", + "plugin_enter_value": "Geben Sie Ihren %v %v ein", + "plugin_invalid_bool": "Ungültiger boolescher Wert: %q", + "plugin_invalid_boolean_value": "Ungültiger Boolescher Wert: %v", + "plugin_not_configured": " ⚠️ NICHT KONFIGURIERT", + "plugin_question_bool": "%v%v (true/false, leer lassen für '%s' oder '%v' eingeben, um den Wert zu entfernen):", + "plugin_question_optional": "%v%v (leer lassen zum Überspringen):", + "plugin_question_with_default": "%v%v (leer lassen für '%s' oder '%v' eingeben, um den Wert zu entfernen):", + "plugin_setting_not_valid": "%v=%v ist nicht gültig", + "plugin_setup_configured": "[%v] konfiguriert", + "plugin_setup_skipped": "[%v] übersprungen\\n", + "prefer_playlist_over_video": "Playlist gegenüber Video bevorzugen, wenn beide IDs in der URL vorhanden sind", + "print_context": "Kontext ausgeben", + "print_current_version": "Aktuelle Version ausgeben", + "print_session": "Sitzung ausgeben", + "register_new_extension": "Neue Erweiterung aus Konfigurationsdateipfad registrieren", + "remove_registered_extension": "Registrierte Erweiterung nach Name entfernen", + "required_marker": "[erforderlich]", + "run_setup_for_reconfigurable_parts": "Setup für alle rekonfigurierbaren Teile von Fabric ausführen", + "save_generated_image_to_file": "Generiertes Bild in angegebenem Dateipfad speichern (z.B., 'output.png')", + "scrape_website_url": "Website-URL zu Markdown mit Jina AI scrapen", + "scraping_not_configured": "Scraping-Funktionalität ist nicht konfiguriert. Bitte richte Jina ein, um Scraping zu aktivieren", + "search_question_jina": "Suchanfrage mit Jina AI", + "seed_for_lmm_generation": "Seed für LMM-Generierung", + "send_desktop_notification": "Desktop-Benachrichtigung senden, wenn Befehl abgeschlossen ist", + "serve_fabric_api_ollama_endpoints": "Fabric REST API mit ollama-Endpunkten bereitstellen", + "serve_fabric_rest_api": "Fabric REST API bereitstellen", + "set_debug_level": "Debug-Level festlegen (0=aus, 1=grundlegend, 2=detailliert, 3=Trace)", + "set_frequency_penalty": "Häufigkeitsstrafe festlegen", + "set_location_web_search": "Standort für Web-Suchergebnisse festlegen (z.B., 'America/Los_Angeles')", + "set_presence_penalty": "Präsenzstrafe festlegen", + "set_reasoning_thinking_level": "Reasoning/Thinking-Level festlegen (z.B., off, low, medium, high, oder numerische Token für Anthropic oder Google Gemini)", + "set_temperature": "Temperatur festlegen", + "set_top_p": "Top P festlegen", + "setup_add_more_providers_later": "Sie können später weitere Anbieter mit 'fabric --setup' hinzufügen", + "setup_ai_provider_required": "Fabric benötigt mindestens einen KI-Anbieter.", + "setup_available_ai_providers": "Verfügbare KI-Anbieter:", + "setup_available_plugins": "Verfügbare Plugins:", + "setup_complete_header": "✅ Einrichtung abgeschlossen! Sie können Fabric jetzt verwenden.", + "setup_configure_more": "• Weitere Einstellungen konfigurieren: fabric --setup", + "setup_enter_ai_provider_number": "KI-Anbieter-Nummer", + "setup_failed_download_patterns": "Fehler beim Herunterladen der Patterns: %w", + "setup_failed_download_strategies": "Fehler beim Herunterladen der Strategien: %w", + "setup_failed_set_defaults": "Fehler beim Festlegen des Standard-Anbieters und -Modells: %w", + "setup_invalid_selection": "Ungültige Auswahl: %s", + "setup_list_patterns": "• Verfügbare Patterns auflisten: fabric -l", + "setup_next_steps": "Nächste Schritte:", + "setup_no_ai_provider_selected": "Kein KI-Anbieter ausgewählt - mindestens einer ist erforderlich", + "setup_optional_configuration_header": "━━━ OPTIONALE KONFIGURATION ━━━\n\nOptionale Werkzeuge", + "setup_plugin_number": "Plugin-Nummer", + "setup_plugin_prompt": "Geben Sie die Nummer des Plugins ein, das eingerichtet werden soll", + "setup_required_configuration_header": "━━━ ERFORDERLICHE KONFIGURATION ━━━\n\nKI-Anbieter [mindestens einer erforderlich]", + "setup_required_tools": "Erforderliche Werkzeuge", + "setup_step_configure_ai_provider": "🤖 Schritt 3: KI-Anbieter konfigurieren", + "setup_step_downloading_patterns": "📥 Schritt 1: Patterns werden heruntergeladen (erforderlich für Fabric)...", + "setup_step_downloading_strategies": "📥 Schritt 2: Strategien werden heruntergeladen (erforderlich für Fabric)...", + "setup_step_setting_defaults": "⚙️ Schritt 4: Standard-Anbieter und -Modell werden festgelegt...", + "setup_try_pattern": "• Ein Pattern ausprobieren: echo 'Ihr Text' | fabric --pattern summarize", + "setup_validation_ai_provider_configured": "✓ KI-Anbieter konfiguriert", + "setup_validation_ai_provider_missing": "✗ KI-Anbieter nicht konfiguriert - Erforderlich für Fabric", + "setup_validation_complete": "✓ Alle erforderlichen Komponenten konfiguriert!", + "setup_validation_defaults_configured": "✓ Standard-Anbieter/-Modell festgelegt: %s/%s", + "setup_validation_defaults_missing": "✗ Standard-Anbieter/-Modell nicht festgelegt - Erforderlich für Fabric", + "setup_validation_header": "Konfigurationsstatus:", + "setup_validation_incomplete_help": "Führen Sie 'fabric --setup' erneut aus, um fehlende Elemente zu konfigurieren,\noder 'fabric -U', um Patterns und Strategien herunterzuladen.", + "setup_validation_incomplete_warning": "⚠️ Einrichtung unvollständig! Erforderliche Komponenten fehlen.", + "setup_validation_patterns_configured": "✓ Patterns heruntergeladen", + "setup_validation_patterns_missing": "✗ Patterns nicht gefunden - Erforderlich für Fabric", + "setup_validation_strategies_configured": "✓ Strategien heruntergeladen", + "setup_validation_strategies_missing": "✗ Strategien nicht gefunden - Erforderlich für Fabric", + "setup_welcome_header": "🎉 Willkommen bei Fabric! Lass uns mit der Einrichtung beginnen.", + "show_dry_run": "Zeige, was an das Modell gesendet würde, ohne es tatsächlich zu senden", + "specify_language_code": "Sprachencode für den Chat angeben, z.B. -g=en -g=zh -g=pt-BR -g=pt-PT", + "specify_vendor_for_model": "Anbieter für das ausgewählte Modell angeben (z.B., -V \"LM Studio\" -m openai/gpt-oss-20b)", + "split_media_files_ffmpeg": "Audio/Video-Dateien größer als 25MB mit ffmpeg aufteilen", "spotify_api_request_failed": "API-Anfrage fehlgeschlagen: Status %d, Antwort: %s", - "spotify_failed_parse_show_metadata": "Show-Metadaten konnten nicht analysiert werden: %w", - "spotify_failed_parse_episode_metadata": "Episoden-Metadaten konnten nicht analysiert werden: %w", - "spotify_search_failed": "Suche fehlgeschlagen: %w", - "spotify_failed_parse_search_results": "Suchergebnisse konnten nicht analysiert werden: %w", + "spotify_audio_preview_label": "**Audio-Vorschau**: %s", + "spotify_client_id_question": "Geben Sie Ihre Spotify CLIENT ID ein", + "spotify_client_secret_question": "Geben Sie Ihr Spotify CLIENT SECRET ein", + "spotify_description_header": "## Beschreibung", + "spotify_duration_label": "**Dauer**: %d Minuten", + "spotify_episode_header": "# Spotify-Episode", + "spotify_error_getting_metadata": "Fehler beim Abrufen der Spotify-Metadaten: %v", + "spotify_explicit_label": "**Explizit**: %v", + "spotify_failed_create_request": "Anfrage konnte nicht erstellt werden: %w", + "spotify_failed_create_token_request": "Token-Anfrage konnte nicht erstellt werden: %w", + "spotify_failed_decode_token_response": "Token-Antwort konnte nicht dekodiert werden: %w", + "spotify_failed_execute_request": "Anfrage konnte nicht ausgeführt werden: %w", + "spotify_failed_get_access_token": "Zugriffstoken konnte nicht abgerufen werden: Status %d, Antwort: %s", "spotify_failed_get_show_episodes": "Show-Episoden konnten nicht abgerufen werden: %w", + "spotify_failed_parse_episode_metadata": "Episoden-Metadaten konnten nicht analysiert werden: %w", "spotify_failed_parse_episodes": "Episoden konnten nicht analysiert werden: %w", - "template_file_log_validating_path": "Datei: Pfad %q wird validiert", - "template_file_error_path_contains_parent_ref": "datei: pfad darf '..' nicht enthalten", + "spotify_failed_parse_search_results": "Suchergebnisse konnten nicht analysiert werden: %w", + "spotify_failed_parse_show_metadata": "Show-Metadaten konnten nicht analysiert werden: %w", + "spotify_failed_read_response_body": "Antwortinhalt konnte nicht gelesen werden: %w", + "spotify_failed_request_access_token": "Zugriffstoken konnte nicht angefordert werden: %w", + "spotify_invalid_url": "Ungültige Spotify-URL, kann Show- oder Episoden-ID nicht abrufen: '%s'", + "spotify_label": "Spotify", + "spotify_language_field_label": "**Sprache**: %s", + "spotify_languages_label": "**Sprachen**: %s", + "spotify_media_type_label": "**Medientyp**: %s", + "spotify_no_episode_found": "Keine Episode mit ID gefunden: %s", + "spotify_no_show_found": "Keine Show mit ID gefunden: %s", + "spotify_not_configured": "Spotify ist nicht konfiguriert, bitte führen Sie die Einrichtung durch", + "spotify_publisher_label": "**Herausgeber**: %s", + "spotify_release_date_label": "**Veröffentlichungsdatum**: %s", + "spotify_search_description_label": "- **Beschreibung**: %s", + "spotify_search_episodes_label": "- **Episoden**: %d", + "spotify_search_failed": "Suche fehlgeschlagen: %w", + "spotify_search_publisher_label": "- **Herausgeber**: %s", + "spotify_search_results_header": "# Spotify-Suchergebnisse", + "spotify_search_url_label": "- **URL**: %s", + "spotify_setup_description": "Spotify - um Podcast-/Show-Metadaten von Spotify abzurufen", + "spotify_show_header": "# Spotify-Podcast/Sendung", + "spotify_show_name_label": "**Sendung**: %s", + "spotify_title_label": "**Titel**: %s", + "spotify_total_episodes_label": "**Episoden insgesamt**: %d", + "spotify_url_label": "**URL**: %s", + "start_tag_thinking_sections": "Start-Tag für Denk-Abschnitte", + "strategies_available_header": "Verfügbare Strategien:", + "strategies_cloning_repository": "Repository %s wird geklont (Pfad: %s)...\\n", + "strategies_download_success": "✅ Strategien erfolgreich nach %s heruntergeladen und installiert\\n", + "strategies_downloaded_count": "%d Strategien heruntergeladen\\n", + "strategies_downloading": "Lade Strategien herunter und befülle %s...\\n", + "strategies_failed_create_directory": "Strategie-Verzeichnis konnte nicht erstellt werden: %w", + "strategies_failed_download": "Fehler beim Herunterladen der Strategien: %w", + "strategies_git_repo_folder_question": "Geben Sie den Standardordner im Git-Repository an, in dem Strategien gespeichert sind", + "strategies_git_repo_url_question": "Geben Sie die Standard-Git-Repository-URL für die Strategien ein", + "strategies_home_dir_error": "Startverzeichnis konnte nicht ermittelt werden: %v", + "strategies_home_dir_fallback": "Startverzeichnis konnte nicht ermittelt werden: %v, verwende stattdessen aktuelles Verzeichnis", + "strategies_label": "Prompt-Strategien", + "strategies_none_found": "Keine Strategien gefunden. Führen Sie 'fabric --setup' aus, um Strategien herunterzuladen", + "strategies_setup_description": "Strategien – lädt Prompt-Strategien herunter (z. B. Chain of Thought)", + "strategy_not_found": "Strategie %s nicht gefunden. Führen Sie 'fabric --liststrategies' aus, um eine Liste zu erhalten", + "stream_help": "Streaming", + "suppress_thinking_tags": "In Denk-Tags eingeschlossenen Text unterdrücken", + "template_datetime_error_invalid_number": "invalid number in relative time: %q", + "template_datetime_error_invalid_relative_format": "invalid relative time format", + "template_datetime_error_invalid_unit": "invalid time unit: %q", + "template_datetime_error_relative_requires_value": "relative time requires a value", + "template_datetime_error_unknown_operation": "datetime: unknown operation %q", "template_file_error_expand_home_dir": "datei: home-verzeichnis konnte nicht erweitert werden: %v", - "template_file_log_cleaned_path": "Datei: bereinigter Pfad %q", - "template_file_log_operation_value": "Datei: operation=%q wert=%q", - "template_file_error_tail_requires_path_lines": "datei: tail erfordert das format pfad|zeilen", "template_file_error_invalid_line_count": "datei: ungültige zeilenanzahl %q", "template_file_error_line_count_positive": "datei: zeilenanzahl muss positiv sein", - "template_file_log_tail_returning_lines": "Datei: tail gibt %d Zeilen zurück", - "template_file_error_stat_file": "datei: dateistatus konnte nicht gelesen werden: %v", - "template_file_error_size_exceeds_limit": "datei: größe %d überschreitet das limit von %d bytes", - "template_file_error_read_file": "datei: konnte nicht gelesen werden: %v", - "template_file_log_read_bytes": "Datei: %d Bytes gelesen", - "template_file_log_exists_for_path": "Datei: exists=%v für Pfad %q", - "template_file_log_size_for_path": "Datei: größe=%d für Pfad %q", - "template_file_log_modified_for_path": "Datei: geändert=%q für Pfad %q", - "template_file_error_unknown_operation": "datei: unbekannte operation %q (unterstützt: read, tail, exists, size, modified)", - "template_file_log_reading_last_lines": "Datei: lese die letzten %d Zeilen aus %q", "template_file_error_open_file": "datei: konnte nicht geöffnet werden: %v", - "template_file_error_stat_open_file": "datei: status konnte nicht gelesen werden: %v", + "template_file_error_path_contains_parent_ref": "datei: pfad darf '..' nicht enthalten", + "template_file_error_read_file": "datei: konnte nicht gelesen werden: %v", "template_file_error_scanner_read": "datei: fehler beim lesen: %v", + "template_file_error_size_exceeds_limit": "datei: größe %d überschreitet das limit von %d bytes", + "template_file_error_stat_file": "datei: dateistatus konnte nicht gelesen werden: %v", + "template_file_error_stat_open_file": "datei: status konnte nicht gelesen werden: %v", + "template_file_error_tail_requires_path_lines": "datei: tail erfordert das format pfad|zeilen", + "template_file_error_unknown_operation": "datei: unbekannte operation %q (unterstützt: read, tail, exists, size, modified)", + "template_file_log_cleaned_path": "Datei: bereinigter Pfad %q", + "template_file_log_exists_for_path": "Datei: exists=%v für Pfad %q", + "template_file_log_modified_for_path": "Datei: geändert=%q für Pfad %q", + "template_file_log_operation_value": "Datei: operation=%q wert=%q", + "template_file_log_read_bytes": "Datei: %d Bytes gelesen", "template_file_log_read_total_return_last": "Datei: insgesamt %d Zeilen gelesen, letzte %d werden zurückgegeben", - "chatter_error_no_session_pattern_user_messages": "keine Sitzung, kein Pattern oder keine Benutzernachrichten angegeben", - "chatter_error_no_messages_provided": "keine Nachrichten angegeben", - "chatter_log_stream_usage_metadata": "[Metadaten] Eingabe: %d | Ausgabe: %d | Gesamt: %d", - "chatter_error_stream_update": "Fehler: %s", - "chatter_error_empty_response": "leere Antwort", - "chatter_warning_parse_file_changes_failed": "Warnung: Dateiaenderungen konnten nicht geparst werden: %v", - "chatter_warning_get_current_directory_failed": "Warnung: Aktuelles Verzeichnis konnte nicht ermittelt werden: %v", - "chatter_warning_apply_file_changes_failed": "Warnung: Dateiaenderungen konnten nicht angewendet werden: %v", - "chatter_info_file_changes_applied_successfully": "Dateiaenderungen wurden erfolgreich angewendet.", - "chatter_help_review_changes_with_git_diff": "Sie koennen die Aenderungen mit 'git diff' pruefen, wenn Sie git verwenden.", - "chatter_error_find_session": "Sitzung %s konnte nicht gefunden werden: %v", - "chatter_error_find_context": "Kontext %s konnte nicht gefunden werden: %v", - "chatter_error_get_pattern": "Pattern %s konnte nicht geladen werden: %v", - "chatter_error_load_strategy": "Strategie %s konnte nicht geladen werden: %v", - "chatter_prompt_enforce_response_language": "%s\n\nWICHTIG: Fuehren Sie zuerst die in diesem Prompt bereitgestellten Anweisungen mit der Eingabe des Benutzers aus. Stellen Sie zweitens sicher, dass Ihre gesamte endgueltige Antwort, einschliesslich aller Abschnittsueberschriften oder Titel, die bei der Ausfuehrung der Anweisungen erzeugt werden, AUSSCHLIESSLICH in der Sprache %s verfasst ist.", - "vertexai_failed_google_credentials": "Google-Anmeldeinformationen konnten nicht abgerufen werden (stellen Sie sicher, dass ADC konfiguriert ist): %w", - "vertexai_no_models_found": "keine Modelle von keinem Herausgeber gefunden", - "vertexai_no_conversational_models": "keine Konversationsmodelle gefunden", + "template_file_log_reading_last_lines": "Datei: lese die letzten %d Zeilen aus %q", + "template_file_log_size_for_path": "Datei: größe=%d für Pfad %q", + "template_file_log_tail_returning_lines": "Datei: tail gibt %d Zeilen zurück", + "template_file_log_validating_path": "Datei: Pfad %q wird validiert", + "template_sys_error_env_requires_var": "env: variable name required", + "template_sys_error_home": "failed to get home directory: %v", + "template_sys_error_hostname": "failed to get hostname: %v", + "template_sys_error_pwd": "failed to get working directory: %v", + "template_sys_error_unknown_operation": "sys: unknown operation %q", + "template_sys_error_user": "failed to get current user: %v", + "transcription_model_required": "Transkriptionsmodell ist erforderlich (verwende --transcribe-model)", + "transparent_background_png_webp_only": "transparenter Hintergrund kann nur mit PNG- und WebP-Formaten verwendet werden, nicht %s", + "tts_audio_generated_successfully": "TTS-Audio erfolgreich generiert und gespeichert unter: %s\n", + "tts_model_requires_audio_output": "TTS-Modell '%s' benötigt Audio-Ausgabe. Bitte gib eine Audio-Ausgabedatei mit dem -o Flag an (z.B., -o output.wav)", + "tts_voice_name": "TTS-Stimmenname für unterstützte Modelle (z.B., Kore, Charon, Puck)", + "unsupported_conversion": "nicht unterstützte Konvertierung von %v zu %v", + "update_patterns": "Muster aktualisieren", + "usage_header": "Verwendung:", + "use_model_defaults_raw_help": "Verwende die Standardwerte des Modells, ohne Chat-Optionen (temperature, top_p usw.) zu senden. Gilt nur für OpenAI-kompatible Anbieter. Anthropic-Modelle verwenden stets eine intelligente Parameterauswahl, um modell-spezifische Anforderungen einzuhalten.", + "vendor_no_transcription_support": "Anbieter %s unterstützt keine Audio-Transkription", + "vendor_not_configured": "Anbieter %s ist nicht konfiguriert", + "vendor_not_found": "Anbieter %s nicht gefunden", + "vendors_no_ai_vendors_configured_read_models": "Keine KI-Anbieter zum Lesen von Modellen konfiguriert", "vertexai_client_not_initialized": "VertexAI-Client nicht initialisiert", - "vertexai_no_valid_messages": "keine gueltigen Nachrichten zum Senden", - "vertexai_no_content_in_response": "kein Inhalt in der Antwort", - "vertexai_failed_gemini_client": "Gemini-Client konnte nicht erstellt werden: %w", - "vertexai_stream_error": "Fehler: %v", - "gemini_invalid_location_format": "ungültiges Suchstandortformat %q: muss eine Zeitzone (z.B. 'America/Los_Angeles') oder ein Sprachcode (z.B. 'en-US') sein", - "gemini_stream_error": "Fehler: %v", - "gemini_no_text_for_tts": "kein Textinhalt für TTS-Generierung gefunden", - "gemini_invalid_voice": "ungültige Stimme '%s'. Gültige Stimmen sind: %v", - "gemini_tts_failed": "TTS-Generierung fehlgeschlagen: %w", - "gemini_unexpected_data_type": "unerwarteter Datentyp: %s, Audiodaten erwartet", - "gemini_audio_data_too_small": "Audiodaten zu klein: %d Bytes, mindestens erforderlich: %d", - "gemini_wav_generation_failed": "WAV-Datei konnte nicht generiert werden: %w", - "gemini_wav_data_invalid": "generierte WAV-Daten sind ungültig: %d Bytes, mindestens erforderlich: %d", - "gemini_no_audio_data": "keine Audiodaten vom TTS-Modell erhalten", - "gemini_empty_pcm_data": "leere PCM-Daten bereitgestellt", - "gemini_pcm_data_too_large": "PCM-Daten zu groß: %d Bytes, maximal erlaubt: %d", - "bedrock_unable_load_aws_config": "AWS-Konfiguration konnte nicht geladen werden: %w", - "bedrock_aws_region_label": "AWS-Region", - "bedrock_invalid_aws_region": "ungültige AWS-Region: %s", - "bedrock_unable_load_aws_config_with_region": "AWS-Konfiguration konnte mit Region %s nicht geladen werden: %w", - "bedrock_failed_list_foundation_models": "Foundation-Modelle konnten nicht aufgelistet werden: %w", - "bedrock_failed_list_inference_profiles": "Inferenz-Profile konnten nicht aufgelistet werden: %w", - "bedrock_panic_sendstream": "Panic in SendStream: %v", - "bedrock_conversestream_failed": "Bedrock ConverseStream für Modell %s fehlgeschlagen: %w", - "bedrock_unknown_stream_event_type": "unbekannter Stream-Event-Typ: %T", - "bedrock_converse_failed": "Bedrock Converse für Modell %s fehlgeschlagen: %w", - "bedrock_unexpected_response_type": "unerwarteter Antworttyp: %T", - "bedrock_empty_response_content": "leerer Antwortinhalt", - "bedrock_unexpected_content_block_type": "unerwarteter Inhaltsblocktyp: %T", - "fetch_unknown_operation": "fetch: unbekannte Operation %q (unterstützt: get)", - "fetch_content_not_utf8": "fetch: Inhalt ist kein gültiger UTF-8-Text", - "fetch_content_null_bytes": "fetch: Inhalt enthält Null-Bytes", - "fetch_error_create_request": "fetch: Fehler beim Erstellen der Anfrage: %v", - "fetch_error_fetching_url": "fetch: Fehler beim Abrufen der URL: %v", - "fetch_http_error": "fetch: HTTP-Fehler: %d - %s", - "fetch_content_too_large": "fetch: Inhalt zu groß: %d Bytes (max %d Bytes)", - "fetch_unsupported_content_type": "fetch: nicht unterstützter Inhaltstyp %q - nur Textinhalt erlaubt", - "fetch_error_reading_response": "fetch: Fehler beim Lesen der Antwort: %v", - "fetch_content_exceeds_limit": "fetch: Inhalt zu groß: überschreitet %d Bytes", - "file_manager_invalid_format_no_json_array": "ungültiges %s-Format: kein JSON-Array gefunden", - "file_manager_invalid_format_unbalanced_brackets": "ungültiges %s-Format: unausgewogene Klammern", - "file_manager_failed_parse_json": "%s JSON konnte nicht geparst werden: %w", - "file_manager_invalid_operation": "ungültige Operation für Dateiänderung %d: %s", - "file_manager_empty_path": "leerer Pfad für Dateiänderung %d", - "file_manager_suspicious_path": "verdächtiger Pfad für Dateiänderung %d: %s", - "file_manager_file_content_too_large": "Dateiinhalt zu groß für Dateiänderung %d: %d Bytes", - "file_manager_failed_create_directory": "Verzeichnis %s konnte nicht für Dateiänderung %d erstellt werden: %w", - "file_manager_failed_write_file": "Datei %s konnte nicht für Dateiänderung %d geschrieben werden: %w", - "file_manager_applied_operation": "Operation %s auf %s angewendet", - "vertexai_error_create_request": "Anfrage konnte nicht erstellt werden: %w", - "vertexai_error_request_failed": "Anfrage fehlgeschlagen: %w", "vertexai_error_api_status": "API hat Status %d zurückgegeben: %s", - "vertexai_error_read_response": "Antwort konnte nicht gelesen werden: %w", - "vertexai_error_response_too_large": "Antwort zu groß (>%d Bytes)", + "vertexai_error_create_request": "Anfrage konnte nicht erstellt werden: %w", "vertexai_error_parse_response": "Antwort konnte nicht analysiert werden: %w", - "copilot_tenant_client_id_required": "Mandanten-ID und Client-ID sind erforderlich", - "copilot_failed_create_conversation": "Konversation konnte nicht erstellt werden: %w", - "copilot_failed_send_message": "Nachricht konnte nicht gesendet werden: %w", - "copilot_failed_stream_message": "Nachricht konnte nicht gestreamt werden: %w", - "copilot_error_create_conversation": "Konversation konnte nicht erstellt werden: %s - %s", - "copilot_error_chat_request": "Chat-Anfrage fehlgeschlagen: %s - %s", - "copilot_error_stream_request": "Stream-Anforderung fehlgeschlagen: %s - %s", - "copilot_debug_created_conversation": "Copilot-Konversation erstellt: %s", - "copilot_debug_failed_parse_sse_event": "SSE-Ereignis konnte nicht geparst werden: %v", - "copilot_error_reading_stream": "Fehler beim Lesen des Streams: %w" + "vertexai_error_read_response": "Antwort konnte nicht gelesen werden: %w", + "vertexai_error_request_failed": "Anfrage fehlgeschlagen: %w", + "vertexai_error_response_too_large": "Antwort zu groß (>%d Bytes)", + "vertexai_failed_gemini_client": "Gemini-Client konnte nicht erstellt werden: %w", + "vertexai_failed_google_credentials": "Google-Anmeldeinformationen konnten nicht abgerufen werden (stellen Sie sicher, dass ADC konfiguriert ist): %w", + "vertexai_no_content_in_response": "kein Inhalt in der Antwort", + "vertexai_no_conversational_models": "keine Konversationsmodelle gefunden", + "vertexai_no_models_found": "keine Modelle von keinem Herausgeber gefunden", + "vertexai_no_valid_messages": "keine gueltigen Nachrichten zum Senden", + "vertexai_stream_error": "Fehler: %v", + "wipe_context": "Kontext löschen", + "wipe_session": "Sitzung löschen", + "youtube_api_key_required": "YouTube API-Schlüssel erforderlich für Kommentare und Metadaten. Führen Sie 'fabric --setup' zur Konfiguration aus", + "youtube_auth_required_bot_detection": "YouTube erfordert Authentifizierung (Bot-Erkennung). Verwende --yt-dlp-args='--cookies-from-browser BROWSER' wobei BROWSER chrome, firefox, brave usw. sein kann.", + "youtube_empty_seconds_string": "leere Sekunden-Zeichenfolge", + "youtube_error_getting_comments": "Fehler beim Abrufen der Kommentare: %v", + "youtube_error_getting_metadata": "Fehler beim Abrufen der Video-Metadaten: %v", + "youtube_error_getting_video_details": "Fehler beim Abrufen der Videodetails: %v", + "youtube_error_parsing_duration": "Fehler beim Parsen der Videodauer: %v", + "youtube_error_saving_csv": "Fehler beim Speichern der Videos in CSV: %v", + "youtube_failed_create_temp_dir": "temporäres Verzeichnis konnte nicht erstellt werden: %v", + "youtube_failed_fetch_comments": "Kommentare konnten nicht abgerufen werden: %v", + "youtube_failed_walk_directory": "Verzeichnis konnte nicht durchlaufen werden: %v", + "youtube_invalid_duration_string": "ungültige Dauer-Zeichenfolge: %s", + "youtube_invalid_seconds_format": "ungültiges Sekundenformat %q: %w", + "youtube_invalid_timestamp_format": "ungültiges Zeitstempel-Format: %s", + "youtube_invalid_url": "ungültige YouTube-URL, kann keine Video- oder Playlist-ID abrufen: '%s'", + "youtube_invalid_ytdlp_arguments": "ungültige yt-dlp-Argumente: %v", + "youtube_label": "YouTube", + "youtube_no_transcript_content": "kein Transkriptinhalt in VTT-Datei gefunden", + "youtube_no_url_provided": "Keine YouTube-URL angegeben", + "youtube_no_video_found_with_id": "kein Video mit ID gefunden: %s", + "youtube_no_video_id_found": "keine Video-ID in URL gefunden", + "youtube_no_vtt_files_found": "keine VTT-Dateien im Verzeichnis gefunden", + "youtube_not_configured": "YouTube ist nicht konfiguriert, bitte führen Sie die Einrichtung durch", + "youtube_playlist_header": "Wiedergabeliste: %s", + "youtube_playlist_saved_to": "Wiedergabeliste gespeichert unter %s", + "youtube_rate_limit_exceeded": "YouTube-Ratenlimit überschritten. Versuche es später erneut oder verwende andere yt-dlp-Argumente wie '--sleep-requests 1', um Anfragen zu verlangsamen.", + "youtube_setup_description": "YouTube - zum Erfassen von Video-Transkripten (via yt-dlp) und Kommentaren/Metadaten (via YouTube API)", + "youtube_url_help": "YouTube-Video oder Playlist-\"URL\" zum Abrufen von Transkript und Kommentaren und Senden an Chat oder Ausgabe in Konsole und Speichern in Ausgabedatei", + "youtube_url_is_playlist_not_video": "URL ist eine Playlist, kein Video", + "youtube_video_id_title_header": "VideoID: Titel", + "youtube_ytdlp_not_found": "yt-dlp wurde nicht in PATH gefunden. Bitte installiere yt-dlp, um die YouTube-Transkript-Funktionalität zu nutzen", + "youtube_ytdlp_stderr_error": "Fehler beim Lesen von yt-dlp stderr" } diff --git a/internal/i18n/locales/en.json b/internal/i18n/locales/en.json index 8310a55c..4d668a35 100644 --- a/internal/i18n/locales/en.json +++ b/internal/i18n/locales/en.json @@ -1,520 +1,592 @@ { - "html_readability_error": "use original input, because can't apply html readability", - "vendor_not_configured": "vendor %s not configured", - "vendor_no_transcription_support": "vendor %s does not support audio transcription", - "transcription_model_required": "transcription model is required (use --transcribe-model)", - "youtube_not_configured": "YouTube is not configured, please run the setup procedure", - "spotify_not_configured": "Spotify is not configured, please run the setup procedure", - "spotify_label": "Spotify", - "spotify_setup_description": "Spotify - to grab podcast/show metadata from Spotify", - "spotify_invalid_url": "invalid Spotify URL, can't get show or episode ID: '%s'", - "spotify_error_getting_metadata": "error getting Spotify metadata: %v", - "spotify_no_show_found": "no show found with ID: %s", - "spotify_no_episode_found": "no episode found with ID: %s", - "spotify_url_help": "Spotify podcast or episode URL to grab metadata from and send to chat", - "youtube_api_key_required": "YouTube API key required for comments and metadata. Run 'fabric --setup' to configure", - "youtube_ytdlp_not_found": "yt-dlp not found in PATH. Please install yt-dlp to use YouTube transcript functionality", - "youtube_invalid_url": "invalid YouTube URL, can't get video or playlist ID: '%s'", - "youtube_url_is_playlist_not_video": "URL is a playlist, not a video", - "youtube_no_video_id_found": "no video ID found in URL", - "youtube_rate_limit_exceeded": "YouTube rate limit exceeded. Try again later or use different yt-dlp arguments like '--sleep-requests 1' to slow down requests.", - "youtube_auth_required_bot_detection": "YouTube requires authentication (bot detection). Use --yt-dlp-args='--cookies-from-browser BROWSER' where BROWSER is chrome, firefox, brave, etc.", - "youtube_ytdlp_stderr_error": "Error reading yt-dlp stderr", - "youtube_invalid_ytdlp_arguments": "invalid yt-dlp arguments: %v", - "youtube_failed_create_temp_dir": "failed to create temp directory: %v", - "youtube_no_transcript_content": "no transcript content found in VTT file", - "youtube_no_vtt_files_found": "no VTT files found in directory", - "youtube_failed_walk_directory": "failed to walk directory: %v", - "youtube_error_getting_video_details": "error getting video details: %v", - "youtube_invalid_duration_string": "invalid duration string: %s", - "youtube_error_getting_metadata": "error getting video metadata: %v", - "youtube_error_parsing_duration": "error parsing video duration: %v", - "youtube_error_getting_comments": "error getting comments: %v", - "youtube_error_saving_csv": "error saving videos to CSV: %v", - "youtube_no_video_found_with_id": "no video found with ID: %s", - "youtube_invalid_timestamp_format": "invalid timestamp format: %s", - "youtube_empty_seconds_string": "empty seconds string", - "youtube_invalid_seconds_format": "invalid seconds format %q: %w", - "error_fetching_playlist_videos": "error fetching playlist videos: %w", - "openai_api_base_url_not_configured": "API base URL not configured for provider %s", - "openai_failed_to_create_models_url": "failed to create models URL: %w", - "openai_unexpected_status_code_with_body": "unexpected status code: %d from provider %s, response body: %s", - "openai_unexpected_status_code_read_error_partial": "unexpected status code: %d from provider %s (error reading body: %v), partial response: %s", - "openai_unexpected_status_code_read_error": "unexpected status code: %d from provider %s (failed to read response body: %v)", - "openai_unable_to_parse_models_response": "unable to parse models response; raw response: %s", - "openai_warning_model_no_image_generation": "Warning: Model '%s' does not support image generation. Supported models: %s. Consider using -m gpt-5.2 for image generation.\n", - "openai_model_no_image_generation": "model '%s' does not support image generation. Supported models: %s", - "scraping_not_configured": "scraping functionality is not configured. Please set up Jina to enable scraping", - "could_not_determine_home_dir": "could not determine user home directory: %w", - "could_not_stat_env_file": "could not stat .env file: %w", + "additional_yt_dlp_args": "Additional arguments to pass to yt-dlp (e.g. '--cookies-from-browser brave')", + "address_to_bind_rest_api": "The address to bind the REST API", + "anthropic_stream_error": "Stream error: %v", + "api_key_secure_server_routes": "API key used to secure server routes", + "application_options_header": "Application Options:", + "apply_variables_to_input": "Apply variables to user input", + "attachment_path_or_url_help": "Attachment path or URL (e.g. for OpenAI image recognition messages)", + "audio_output_file_specified_but_not_tts_model": "audio output file '%s' specified but model '%s' is not a TTS model. Please use a TTS model like gemini-2.5-flash-preview-tts", + "audio_video_file_transcribe": "Audio or video file to transcribe", + "available_models_header": "Available models", + "available_transcription_models": "Available transcription models:", + "available_vendors_header": "Available Vendors:", + "azure_api_key_required": "Azure API key is required", + "azure_api_version_question": "Enter the Azure API version (leave blank for default)", + "azure_base_url_required": "Azure base URL is required", + "azure_deployments_question": "Enter your Azure deployment names (comma-separated)", + "azure_failed_extract_deployment": "failed to extract deployment name from request", + "azure_model_field_empty": "model field is empty in request body", + "azure_request_body_nil": "request body is nil", + "background_type_help": "Background type: opaque, transparent (default: opaque, only for PNG/WebP)", + "bedrock_aws_region_label": "AWS Region", + "bedrock_converse_failed": "bedrock converse failed for model %s: %w", + "bedrock_conversestream_failed": "bedrock conversestream failed for model %s: %w", + "bedrock_empty_response_content": "empty response content", + "bedrock_failed_list_foundation_models": "failed to list foundation models: %w", + "bedrock_failed_list_inference_profiles": "failed to list inference profiles: %w", + "bedrock_invalid_aws_region": "invalid AWS region: %s", + "bedrock_panic_sendstream": "panic in SendStream: %v", + "bedrock_unable_load_aws_config": "unable to load AWS Config: %w", + "bedrock_unable_load_aws_config_with_region": "unable to load AWS Config with region %s: %w", + "bedrock_unexpected_content_block_type": "unexpected content block type: %T", + "bedrock_unexpected_response_type": "unexpected response type: %T", + "bedrock_unknown_stream_event_type": "unknown stream event type: %T", + "cannot_convert_string": "cannot convert string %q to %v", + "change_default_model": "Change default model", + "chatter_error_empty_response": "empty response", + "chatter_error_find_context": "could not find context %s: %v", + "chatter_error_find_session": "could not find session %s: %v", + "chatter_error_get_pattern": "could not get pattern %s: %v", + "chatter_error_load_strategy": "could not load strategy %s: %v", + "chatter_error_no_messages_provided": "no messages provided", + "chatter_error_no_session_pattern_user_messages": "no session, pattern or user messages provided", + "chatter_error_stream_update": "Error: %s", + "chatter_help_review_changes_with_git_diff": "You can review the changes with 'git diff' if you're using git.", + "chatter_info_file_changes_applied_successfully": "Successfully applied file changes.", + "chatter_log_stream_usage_metadata": "[Metadata] Input: %d | Output: %d | Total: %d", + "chatter_prompt_enforce_response_language": "%s\n\nIMPORTANT: First, execute the instructions provided in this prompt using the user's input. Second, ensure your entire final response, including any section headers or titles generated as part of executing the instructions, is written ONLY in the %s language.", + "chatter_warning_apply_file_changes_failed": "Warning: Failed to apply file changes: %v", + "chatter_warning_get_current_directory_failed": "Warning: Failed to get current directory: %v", + "chatter_warning_parse_file_changes_failed": "Warning: Failed to parse file changes: %v", + "choose_context_from_available": "Choose a context from the available contexts", + "choose_model": "Choose model", + "choose_pattern_from_available": "Choose a pattern from the available patterns", + "choose_session_from_available": "Choose a session from the available sessions", + "choose_strategy_from_available": "Choose a strategy from the available strategies", + "command_completed_successfully": "Command completed successfully", + "compression_level_jpeg_webp": "Compression level 0-100 for JPEG/WebP formats (default: not set)", + "config_file_not_found": "config file not found: %s", + "convert_html_readability": "Convert HTML input into a clean, readable view", + "copilot_debug_created_conversation": "Created Copilot conversation: %s", + "copilot_debug_failed_parse_sse_event": "Failed to parse SSE event: %v", + "copilot_error_chat_request": "chat request failed: %s - %s", + "copilot_error_create_conversation": "failed to create conversation: %s - %s", + "copilot_error_reading_stream": "error reading stream: %w", + "copilot_error_stream_request": "stream request failed: %s - %s", + "copilot_failed_create_conversation": "failed to create conversation: %w", + "copilot_failed_send_message": "failed to send message: %w", + "copilot_failed_stream_message": "failed to stream message: %w", + "copilot_tenant_client_id_required": "tenant ID and client ID are required", + "copy_to_clipboard": "Copy to clipboard", + "could_not_copy_to_clipboard": "could not copy to clipboard: %v", "could_not_create_config_dir": "could not create config directory: %w", "could_not_create_env_file": "could not create .env file: %w", - "could_not_copy_to_clipboard": "could not copy to clipboard: %v", - "file_already_exists_not_overwriting": "file %s already exists, not overwriting. Rename the existing file or choose a different name", - "error_creating_file": "error creating file: %v", - "error_writing_to_file": "error writing to file: %v", - "error_creating_audio_file": "error creating audio file: %v", - "error_writing_audio_data": "error writing audio data to file: %v", - "tts_model_requires_audio_output": "TTS model '%s' requires audio output. Please specify an audio output file with -o flag (e.g., -o output.wav)", - "audio_output_file_specified_but_not_tts_model": "audio output file '%s' specified but model '%s' is not a TTS model. Please use a TTS model like gemini-2.5-flash-preview-tts", - "file_already_exists_choose_different": "file %s already exists. Please choose a different filename or remove the existing file", - "no_notification_system_available": "no notification system available", - "cannot_convert_string": "cannot convert string %q to %v", - "unsupported_conversion": "unsupported conversion from %v to %v", - "invalid_config_path": "invalid config path: %w", - "config_file_not_found": "config file not found: %s", - "error_reading_config_file": "error reading config file: %w", - "error_parsing_config_file": "error parsing config file: %w", - "error_reading_piped_message": "error reading piped message from stdin: %w", - "image_file_already_exists": "image file already exists: %s", - "invalid_image_file_extension": "invalid image file extension '%s'. Supported formats: .png, .jpeg, .jpg, .webp", - "image_parameters_require_image_file": "image parameters (--image-size, --image-quality, --image-background, --image-compression) can only be used with --image-file", - "invalid_image_size": "invalid image size '%s'. Supported sizes: 1024x1024, 1536x1024, 1024x1536, auto", - "invalid_image_quality": "invalid image quality '%s'. Supported qualities: low, medium, high, auto", - "invalid_image_background": "invalid image background '%s'. Supported backgrounds: opaque, transparent", - "image_compression_jpeg_webp_only": "image compression can only be used with JPEG and WebP formats, not %s", - "image_compression_range_error": "image compression must be between 0 and 100, got %d", - "transparent_background_png_webp_only": "transparent background can only be used with PNG and WebP formats, not %s", - "available_transcription_models": "Available transcription models:", - "tts_audio_generated_successfully": "TTS audio generated successfully and saved to: %s\n", - "fabric_command_complete": "Fabric Command Complete", - "fabric_command_complete_with_pattern": "Fabric: %s Complete", - "command_completed_successfully": "Command completed successfully", - "output_truncated": "Output: %s...", - "output_full": "Output: %s", - "choose_pattern_from_available": "Choose a pattern from the available patterns", - "pattern_variables_help": "Values for pattern variables, e.g. -v=#role:expert -v=#points:30", - "choose_context_from_available": "Choose a context from the available contexts", - "choose_session_from_available": "Choose a session from the available sessions", - "attachment_path_or_url_help": "Attachment path or URL (e.g. for OpenAI image recognition messages)", - "run_setup_for_reconfigurable_parts": "Run setup for all reconfigurable parts of fabric", - "set_temperature": "Set temperature", - "set_top_p": "Set top P", - "stream_help": "Stream", - "set_presence_penalty": "Set presence penalty", - "use_model_defaults_raw_help": "Use the defaults of the model without sending chat options (temperature, top_p, etc.). Only affects OpenAI-compatible providers. Anthropic models always use smart parameter selection to comply with model-specific requirements.", - "set_frequency_penalty": "Set frequency penalty", - "list_all_patterns": "List all patterns", - "list_all_available_models": "List all available models", - "list_all_contexts": "List all contexts", - "list_all_sessions": "List all sessions", - "update_patterns": "Update patterns", - "messages_to_send_to_chat": "Messages to send to chat", - "copy_to_clipboard": "Copy to clipboard", - "choose_model": "Choose model", - "specify_vendor_for_model": "Specify vendor for the selected model (e.g., -V \"LM Studio\" -m openai/gpt-oss-20b)", - "model_context_length_ollama": "Model context length (only affects ollama)", - "output_to_file": "Output to file", - "output_entire_session": "Output the entire session (also a temporary one) to the output file", - "number_of_latest_patterns": "Number of latest patterns to list", - "change_default_model": "Change default model", - "youtube_url_help": "YouTube video or play list \"URL\" to grab transcript, comments from it and send to chat or print it put to the console and store it in the output file", - "prefer_playlist_over_video": "Prefer playlist over video if both ids are present in the URL", - "grab_transcript_from_youtube": "Grab transcript from YouTube video and send to chat (it is used per default).", - "grab_transcript_with_timestamps": "Grab transcript from YouTube video with timestamps and send to chat", - "grab_comments_from_youtube": "Grab comments from YouTube video and send to chat", - "output_video_metadata": "Output video metadata", - "additional_yt_dlp_args": "Additional arguments to pass to yt-dlp (e.g. '--cookies-from-browser brave')", - "specify_language_code": "Specify the Language Code for the chat, e.g. -g=en -g=zh -g=pt-BR -g=pt-PT", - "scrape_website_url": "Scrape website URL to markdown using Jina AI", - "search_question_jina": "Search question using Jina AI", - "seed_for_lmm_generation": "Seed to be used for LMM generation", - "wipe_context": "Wipe context", - "wipe_session": "Wipe session", - "print_context": "Print context", - "print_session": "Print session", - "convert_html_readability": "Convert HTML input into a clean, readable view", - "apply_variables_to_input": "Apply variables to user input", - "disable_pattern_variable_replacement": "Disable pattern variable replacement", - "show_dry_run": "Show what would be sent to the model without actually sending it", - "serve_fabric_rest_api": "Serve the Fabric Rest API", - "serve_fabric_api_ollama_endpoints": "Serve the Fabric Rest API with ollama endpoints", - "address_to_bind_rest_api": "The address to bind the REST API", - "api_key_secure_server_routes": "API key used to secure server routes", - "path_to_yaml_config": "Path to YAML config file", - "print_current_version": "Print current version", - "list_all_registered_extensions": "List all registered extensions", - "register_new_extension": "Register a new extension from config file path", - "remove_registered_extension": "Remove a registered extension by name", - "choose_strategy_from_available": "Choose a strategy from the available strategies", - "list_all_strategies": "List all strategies", - "list_all_vendors": "List all vendors", - "output_raw_list_shell_completion": "Output raw list without headers/formatting (for shell completion)", - "enable_web_search_tool": "Enable web search tool for supported models (Anthropic, OpenAI, Gemini)", - "set_location_web_search": "Set location for web search results (e.g., 'America/Los_Angeles')", - "save_generated_image_to_file": "Save generated image to specified file path (e.g., 'output.png')", - "image_dimensions_help": "Image dimensions: 1024x1024, 1536x1024, 1024x1536, auto (default: auto)", - "image_quality_help": "Image quality: low, medium, high, auto (default: auto)", - "compression_level_jpeg_webp": "Compression level 0-100 for JPEG/WebP formats (default: not set)", - "background_type_help": "Background type: opaque, transparent (default: opaque, only for PNG/WebP)", - "suppress_thinking_tags": "Suppress text enclosed in thinking tags", - "start_tag_thinking_sections": "Start tag for thinking sections", - "end_tag_thinking_sections": "End tag for thinking sections", - "disable_openai_responses_api": "Disable OpenAI Responses API (default: false)", - "audio_video_file_transcribe": "Audio or video file to transcribe", - "model_for_transcription": "Model to use for transcription (separate from chat model)", - "split_media_files_ffmpeg": "Split audio/video files larger than 25MB using ffmpeg", - "tts_voice_name": "TTS voice name for supported models (e.g., Kore, Charon, Puck)", - "list_gemini_tts_voices": "List all available Gemini TTS voices", - "list_transcription_models": "List all available transcription models", - "send_desktop_notification": "Send desktop notification when command completes", + "could_not_determine_home_dir": "could not determine user home directory: %w", + "could_not_stat_env_file": "could not stat .env file: %w", "custom_notification_command": "Custom command to run for notifications (overrides built-in notifications)", - "set_reasoning_thinking_level": "Set reasoning/thinking level (e.g., off, low, medium, high, or numeric tokens for Anthropic or Google Gemini)", - "set_debug_level": "Set debug level (0=off, 1=basic, 2=detailed, 3=trace)", - "usage_header": "Usage:", - "application_options_header": "Application Options:", - "help_options_header": "Help Options:", - "help_message": "Show this help message", - "options_placeholder": "[OPTIONS]", - "available_vendors_header": "Available Vendors:", - "available_models_header": "Available models", - "no_items_found": "No %s", - "no_description_available": "No description available", - "i18n_download_failed": "Failed to download translation for language '%s': %v", - "i18n_load_failed": "Failed to load translation file: %v", - "setup_welcome_header": "🎉 Welcome to Fabric! Let's get you set up.", - "setup_step_downloading_patterns": "📥 Step 1: Downloading patterns (required for Fabric to work)...", - "setup_step_downloading_strategies": "📥 Step 2: Downloading strategies (required for Fabric to work)...", - "setup_step_configure_ai_provider": "🤖 Step 3: Configure an AI provider", - "setup_ai_provider_required": "Fabric needs at least one AI provider to work.", - "setup_add_more_providers_later": "You'll be able to add more providers later with 'fabric --setup'", - "setup_step_setting_defaults": "⚙️ Step 4: Setting default vendor and model...", - "setup_complete_header": "✅ Setup complete! You can now use Fabric.", - "setup_next_steps": "Next steps:", - "setup_list_patterns": "• List available patterns: fabric -l", - "setup_try_pattern": "• Try a pattern: echo 'your text' | fabric --pattern summarize", - "setup_configure_more": "• Configure more settings: fabric --setup", - "setup_failed_download_patterns": "failed to download patterns: %w", - "setup_failed_download_strategies": "failed to download strategies: %w", - "setup_failed_set_defaults": "failed to set default vendor and model: %w", - "setup_no_ai_provider_selected": "no AI provider selected - at least one is required", - "setup_invalid_selection": "invalid selection: %s", - "setup_available_ai_providers": "Available AI Providers:", - "setup_enter_ai_provider_number": "AI Provider Number", - "setup_available_plugins": "Available plugins:", - "setup_plugin_number": "Plugin Number", - "setup_plugin_prompt": "Enter the number of the plugin to setup", - "setup_required_configuration_header": "━━━ REQUIRED CONFIGURATION ━━━\n\nAI Vendors [at least one required]", - "setup_required_tools": "Required Tools", - "setup_optional_configuration_header": "━━━ OPTIONAL CONFIGURATION ━━━\n\nOptional Tools", - "setup_validation_header": "Configuration Status:", - "setup_validation_ai_provider_configured": "✓ AI Provider configured", - "setup_validation_ai_provider_missing": "✗ AI Provider not configured - Required for Fabric to work", - "setup_validation_defaults_configured": "✓ Default vendor/model set: %s/%s", - "setup_validation_defaults_missing": "✗ Default vendor/model not set - Required for Fabric to work", - "setup_validation_patterns_configured": "✓ Patterns downloaded", - "setup_validation_patterns_missing": "✗ Patterns not found - Required for Fabric to work", - "setup_validation_strategies_configured": "✓ Strategies downloaded", - "setup_validation_strategies_missing": "✗ Strategies not found - Required for Fabric to work", - "setup_validation_incomplete_warning": "⚠️ Setup incomplete! Missing required components.", - "setup_validation_incomplete_help": "Run 'fabric --setup' again to configure missing items,\nor run 'fabric -U' to download patterns and strategies.", - "setup_validation_complete": "✓ All required components configured!", - "patterns_not_found_header": "⚠️ No patterns found!", - "patterns_required_to_work": "Patterns are required for Fabric to work. To fix this:", - "patterns_option_run_setup": "Option 1 (Recommended): Run setup to download patterns", - "patterns_option_run_setup_command": "fabric --setup", - "patterns_option_run_update": "Option 2: Download/update patterns directly", - "patterns_option_run_update_command": "fabric -U", - "pattern_not_found_no_patterns": "pattern '%s' not found.\n\nNo patterns are installed! To fix this:\n • Run 'fabric --setup' to configure and download patterns\n • Or run 'fabric -U' to download/update patterns directly", - "pattern_not_found_list_available": "pattern '%s' not found. Run 'fabric -l' to see available patterns", - "plugin_configured": " ✓", - "plugin_not_configured": " ⚠️ NOT CONFIGURED", - "defaults_setup_description": "Default AI Vendor and Model", - "defaults_model_question": "Enter the index or the name of your default model", - "defaults_model_context_length_question": "Enter model context length", + "custom_patterns_directory_question": "Enter the path to your custom patterns directory", "custom_patterns_label": "Custom Patterns", "custom_patterns_setup_description": "Custom Patterns - Set directory for your custom patterns", - "custom_patterns_directory_question": "Enter the path to your custom patterns directory", + "defaults_model_context_length_question": "Enter model context length", + "defaults_model_question": "Enter the index or the name of your default model", + "defaults_setup_description": "Default AI Vendor and Model", + "disable_openai_responses_api": "Disable OpenAI Responses API (default: false)", + "disable_pattern_variable_replacement": "Disable pattern variable replacement", + "enable_web_search_tool": "Enable web search tool for supported models (Anthropic, OpenAI, Gemini)", + "end_tag_thinking_sections": "End tag for thinking sections", + "error_creating_audio_file": "error creating audio file: %v", + "error_creating_file": "error creating file: %v", + "error_fetching_playlist_videos": "error fetching playlist videos: %w", + "error_parsing_config_file": "error parsing config file: %w", + "error_reading_config_file": "error reading config file: %w", + "error_reading_piped_message": "error reading piped message from stdin: %w", + "error_writing_audio_data": "error writing audio data to file: %v", + "error_writing_to_file": "error writing to file: %v", + "extension_cmd_template_required": "command template is required for operation %s", + "extension_command_template_label": " Command Template: %s\n", + "extension_config_hash_mismatch": "config file hash mismatch for %s", + "extension_config_path_label": " Config Path: %s\n\n", + "extension_description_label": " Description: %s\n", + "extension_empty_command": "empty command after formatting", + "extension_executable_hash_mismatch": "executable hash mismatch for %s", + "extension_executable_label": " Executable: %s\n", + "extension_executable_not_found": "executable not found: %w", + "extension_executable_required": "executable path is required", + "extension_executing_command": "Executing command: %s\n", + "extension_execution_failed_err": "execution failed: %w\nerr: %s", + "extension_execution_failed_stderr": "execution failed: %w\nstderr: %s", + "extension_execution_timed_out": "execution timed out after %v", + "extension_failed_format_command": "failed to format command: %w", + "extension_failed_get_absolute_path": "failed to get absolute path: %w", + "extension_failed_get_extension": "failed to get extension: %w", + "extension_failed_get_output_path": "failed to get output path: %w\nerr: %s", + "extension_failed_hash_executable": "failed to hash executable: %w", + "extension_failed_marshal_registry": "failed to marshal extension registry: %w", + "extension_failed_parse_config": "failed to parse config file: %w", + "extension_failed_parse_registry": "failed to parse extension registry: %w", + "extension_failed_read_config": "failed to read config file: %w", + "extension_failed_read_output_file": "failed to read output file: %w", + "extension_failed_read_registry": "failed to read extension registry: %w", + "extension_failed_register": "failed to register extension: %w", + "extension_failed_remove": "failed to remove extension: %w", + "extension_failed_verify_executable": "failed to verify executable: %w", + "extension_file_config_label": " File Configuration:\n", + "extension_invalid_config_path": "invalid config path: %w", + "extension_invalid_definition": "invalid extension definition: %w", + "extension_invalid_timeout": "invalid timeout value '%s': must be a duration like '30s' or '1m': %w", + "extension_invalid_timeout_format": "invalid timeout format: %w", + "extension_name_contains_spaces": "extension name '%s' contains spaces - names must not contain spaces", + "extension_name_detail_label": "Name: %s\n", + "extension_name_empty": "extension name cannot be empty", + "extension_name_label": "Extension: %s\n", + "extension_name_required": "extension name is required", + "extension_no_file_config": "no file configuration found", + "extension_no_output_file": "no output file specified in configuration", + "extension_not_found": "extension %s not found", + "extension_operation_not_found": "operation %s not found for extension %s", + "extension_operation_required": "at least one operation must be defined", + "extension_operations_label": " Operations:\n", + "extension_registered_success": "Successfully registered extension:\n", + "extension_registry_not_initialized": "extension registry not initialized", + "extension_status_disabled": " Status: DISABLED - Hash verification failed: %v\n", + "extension_status_enabled": " Status: ENABLED\n", + "extension_timeout_label": " Timeout: %s\n", + "extension_type_label": " Type: %s\n", + "extension_type_required": "extension type is required", + "extension_version_label": " Version: %s\n", + "extension_warning_load_registry": "Warning: could not load extension registry: %v\n", + "fabric_command_complete": "Fabric Command Complete", + "fabric_command_complete_with_pattern": "Fabric: %s Complete", + "fetch_content_exceeds_limit": "fetch: content too large: exceeds %d bytes", + "fetch_content_not_utf8": "fetch: content is not valid UTF-8 text", + "fetch_content_null_bytes": "fetch: content contains null bytes", + "fetch_content_too_large": "fetch: content too large: %d bytes (max %d bytes)", + "fetch_error_create_request": "fetch: error creating request: %v", + "fetch_error_fetching_url": "fetch: error fetching URL: %v", + "fetch_error_reading_response": "fetch: error reading response: %v", + "fetch_http_error": "fetch: HTTP error: %d - %s", + "fetch_unknown_operation": "fetch: unknown operation %q (supported: get)", + "fetch_unsupported_content_type": "fetch: unsupported content type %q - only text content allowed", + "file_already_exists_choose_different": "file %s already exists. Please choose a different filename or remove the existing file", + "file_already_exists_not_overwriting": "file %s already exists, not overwriting. Rename the existing file or choose a different name", + "file_manager_applied_operation": "Applied %s operation to %s", + "file_manager_empty_path": "empty path for file change %d", + "file_manager_failed_create_directory": "failed to create directory %s for file change %d: %w", + "file_manager_failed_parse_json": "failed to parse %s JSON: %w", + "file_manager_failed_write_file": "failed to write file %s for file change %d: %w", + "file_manager_file_content_too_large": "file content too large for file change %d: %d bytes", + "file_manager_invalid_format_no_json_array": "invalid %s format: no JSON array found", + "file_manager_invalid_format_unbalanced_brackets": "invalid %s format: unbalanced brackets", + "file_manager_invalid_operation": "invalid operation for file change %d: %s", + "file_manager_suspicious_path": "suspicious path for file change %d: %s", + "gemini_audio_data_too_small": "audio data too small: %d bytes, minimum required: %d", + "gemini_empty_pcm_data": "empty PCM data provided", + "gemini_invalid_location_format": "invalid search location format %q: must be timezone (e.g., 'America/Los_Angeles') or language code (e.g., 'en-US')", + "gemini_invalid_voice": "invalid voice '%s'. Valid voices are: %v", + "gemini_no_audio_data": "no audio data received from TTS model", + "gemini_no_text_for_tts": "no text content found for TTS generation", + "gemini_pcm_data_too_large": "PCM data too large: %d bytes, maximum allowed: %d", + "gemini_stream_error": "Error: %v", + "gemini_tts_failed": "TTS generation failed: %w", + "gemini_unexpected_data_type": "unexpected data type: %s, expected audio data", + "gemini_wav_data_invalid": "generated WAV data is invalid: %d bytes, minimum required: %d", + "gemini_wav_generation_failed": "failed to generate WAV file: %w", + "grab_comments_from_youtube": "Grab comments from YouTube video and send to chat", + "grab_transcript_from_youtube": "Grab transcript from YouTube video and send to chat (it is used per default).", + "grab_transcript_with_timestamps": "Grab transcript from YouTube video with timestamps and send to chat", + "groups_items_number_out_of_range": "number %d is out of range", + "help_message": "Show this help message", + "help_options_header": "Help Options:", + "html_readability_error": "use original input, because can't apply html readability", + "i18n_download_failed": "Failed to download translation for language '%s': %v", + "i18n_load_failed": "Failed to load translation file: %v", + "image_compression_jpeg_webp_only": "image compression can only be used with JPEG and WebP formats, not %s", + "image_compression_range_error": "image compression must be between 0 and 100, got %d", + "image_dimensions_help": "Image dimensions: 1024x1024, 1536x1024, 1024x1536, auto (default: auto)", + "image_file_already_exists": "image file already exists: %s", + "image_parameters_require_image_file": "image parameters (--image-size, --image-quality, --image-background, --image-compression) can only be used with --image-file", + "image_quality_help": "Image quality: low, medium, high, auto (default: auto)", + "invalid_config_path": "invalid config path: %w", + "invalid_image_background": "invalid image background '%s'. Supported backgrounds: opaque, transparent", + "invalid_image_file_extension": "invalid image file extension '%s'. Supported formats: .png, .jpeg, .jpg, .webp", + "invalid_image_quality": "invalid image quality '%s'. Supported qualities: low, medium, high, auto", + "invalid_image_size": "invalid image size '%s'. Supported sizes: 1024x1024, 1536x1024, 1024x1536, auto", + "jina_error_creating_request": "error creating request: %v", + "jina_error_reading_response_body": "error reading response body: %v", + "jina_error_sending_request": "error sending request: %v", "jina_label": "Jina AI", "jina_setup_description": "Jina AI Service - to grab a webpage as clean, LLM-friendly text", - "youtube_label": "YouTube", - "youtube_setup_description": "YouTube - to grab video transcripts (via yt-dlp) and comments/metadata (via YouTube API)", "language_label": "Language", - "language_setup_description": "Language - Default AI Vendor Output Language", "language_output_question": "Enter your default output language (for example: zh_CN)", - "optional_marker": "(optional)", - "required_marker": "[required]", - "patterns_loader_label": "Patterns Loader", - "patterns_setup_description": "Patterns - Downloads patterns", - "patterns_git_repo_url_label": "Git Repo Url", - "patterns_git_repo_url_question": "Enter the default Git repository URL for the patterns", - "patterns_git_repo_folder_label": "Git Repo Patterns Folder", - "patterns_git_repo_folder_question": "Enter the default folder in the Git repository where patterns are stored", - "patterns_failed_create_temp_folder": "failed to create temporary patterns folder: %w", - "patterns_downloading": "Downloading patterns and Populating %s...\n", - "patterns_failed_download_from_git": "failed to download patterns from git repository: %w", - "patterns_saving_updated_configuration": "💾 Saving updated configuration (path changed from '%s' to '%s')...\n", - "patterns_failed_move_patterns": "failed to move patterns to config directory: %w", - "patterns_download_success": "✅ Successfully downloaded and installed patterns to %s\n", - "patterns_failed_unique_file": "failed to create unique patterns file: %w", - "patterns_failed_access_directory": "failed to access patterns directory '%s': %w", - "patterns_preserve_warning": "Warning: failed to preserve custom pattern '%s': %v\n", - "patterns_preserved_custom_pattern": "Preserved custom pattern: %s\n", - "patterns_failed_create_temp_dir": "failed to create temp directory: %w", - "patterns_cloning_repository": "Cloning repository %s (path: %s)...\n", - "patterns_failed_download_from_repo": "failed to download patterns from %s: %w", - "patterns_failed_read_temp_directory": "failed to read temp patterns directory: %w", - "patterns_no_patterns_migration_failed": "no patterns found in repository at path %s and migration failed: %w", - "patterns_downloaded_temp": "Downloaded %d patterns to temporary directory\n", - "patterns_detected_old_path": "🔄 Detected old pattern path 'patterns', trying migration to 'data/patterns'...", - "patterns_warning_remove_test_folder": "Warning: failed to remove test temporary folder '%s': %v\n", - "patterns_found_new_path": "✅ Found %d patterns at new path '%s', updating configuration...\n", - "patterns_failed_move_test_patterns": "failed to move test patterns to temp folder: %w", - "patterns_unable_to_find_or_migrate": "unable to find patterns at current path '%s' or migrate to new structure", - "patterns_failed_read_directory": "failed to read patterns directory: %w", - "patterns_debug_included_custom_directory": "📂 Also included patterns from custom directory: %s\n", - "patterns_warning_custom_directory": "Warning: Could not read custom patterns directory %s: %v\n", - "patterns_no_patterns_found_in_directories": "no patterns found in directories %s and %s", - "patterns_no_patterns_found_in_directory": "no patterns found in directory %s", - "patterns_failed_write_unique_file": "failed to write unique patterns file: %w", - "patterns_unique_file_created": "📝 Created unique patterns file with %d patterns\n", - "patterns_no_patterns_copied": "no patterns were successfully copied to %s", - "patterns_failed_loaded_marker": "failed to create loaded marker file '%s': %w", - "strategies_label": "Prompt Strategies", - "strategies_setup_description": "Strategies - Downloads Prompting Strategies (like chain of thought)", - "strategies_git_repo_url_label": "Git Repo Url", - "strategies_git_repo_url_question": "Enter the default Git repository URL for the strategies", - "strategies_git_repo_folder_label": "Git Repo Strategies Folder", - "strategies_git_repo_folder_question": "Enter the default folder in the Git repository where strategies are stored", - "strategies_downloading": "Downloading strategies and Populating %s...\n", - "strategies_download_success": "✅ Successfully downloaded and installed strategies to %s\n", - "strategies_home_dir_error": "could not get home directory: %v", - "strategies_failed_create_directory": "failed to create strategies directory: %w", - "strategies_cloning_repository": "Cloning repository %s (path: %s)...\n", - "strategies_failed_download": "failed to download strategies: %w", - "strategies_downloaded_count": "Downloaded %d strategies\n", - "strategies_home_dir_fallback": "could not get home directory: %v, using current directory instead", - "strategy_not_found": "strategy %s not found. Please run 'fabric --liststrategies' for list", - "strategies_none_found": "no strategies found. Please run 'fabric --setup' to download strategies", - "strategies_available_header": "Available Strategies:", - "plugin_enter_value": "Enter your %v %v", - "plugin_enable_bool_question": "Enable %v %v (true/false)", - "plugin_setup_skipped": "[%v] skipped\n", - "plugin_question_bool": "%v%v (true/false, leave empty for '%s' or type '%v' to remove the value):", - "plugin_question_with_default": "%v%v (leave empty for '%s' or type '%v' to remove the value):", - "plugin_question_optional": "%v%v (leave empty to skip):", - "plugin_invalid_boolean_value": "invalid boolean value: %v", - "plugin_setting_not_valid": "%v=%v, is not valid", - "plugin_invalid_bool": "invalid bool: %q", - "ollama_num_ctx_must_be_finite": "num_ctx must be a finite number", - "ollama_num_ctx_must_be_integer": "num_ctx must be an integer, got float with fractional part", - "ollama_num_ctx_value_out_of_range": "num_ctx value out of range", - "ollama_num_ctx_must_be_positive": "num_ctx must be positive, got: %d", - "ollama_num_ctx_value_too_large": "num_ctx value too large: %d", - "ollama_num_ctx_must_be_valid_number": "num_ctx must be a valid number", - "ollama_num_ctx_must_be_valid_number_got": "num_ctx must be a valid number, got: %s", - "ollama_num_ctx_invalid_type": "num_ctx must be a number, got invalid type", - "ollama_num_ctx_exceeds_maximum": "num_ctx exceeds maximum allowed value of %d", - "ollama_error_reading_body": "Error reading body: %v", - "ollama_error_endpoint": "testing endpoint", - "ollama_error_unmarshalling_body": "Error unmarshalling body: %v", - "ollama_invalid_num_ctx_in_request": "Invalid num_ctx in request: %v", - "ollama_warning_parse_variables": "Warning: failed to parse options.variables as JSON: %v", - "ollama_error_marshalling_body": "Error marshalling body: %v", + "language_setup_description": "Language - Default AI Vendor Output Language", + "list_all_available_models": "List all available models", + "list_all_contexts": "List all contexts", + "list_all_patterns": "List all patterns", + "list_all_registered_extensions": "List all registered extensions", + "list_all_sessions": "List all sessions", + "list_all_strategies": "List all strategies", + "list_all_vendors": "List all vendors", + "list_gemini_tts_voices": "List all available Gemini TTS voices", + "list_transcription_models": "List all available transcription models", + "lmstudio_api_url_question": "Enter your %v URL (as a reminder, it is usually %v)", + "lmstudio_error_reading_response": "error reading response: %w", + "lmstudio_failed_create_request": "failed to create request: %w", + "lmstudio_failed_decode_response": "failed to decode response: %w", + "lmstudio_failed_marshal_payload": "failed to marshal payload: %w", + "lmstudio_failed_send_request": "failed to send request: %w", + "lmstudio_invalid_response_missing_choices": "invalid response format: missing or empty choices", + "lmstudio_invalid_response_missing_content": "invalid response format: missing or non-string content in message", + "lmstudio_invalid_response_missing_message": "invalid response format: missing message in first choice", + "lmstudio_invalid_response_missing_text": "invalid response format: missing or non-string text in first choice", + "lmstudio_no_embeddings_returned": "no embeddings returned", + "lmstudio_unexpected_status_code": "unexpected status code: %d", + "model_context_length_ollama": "Model context length (only affects ollama)", + "model_for_transcription": "Model to use for transcription (separate from chat model)", + "no_description_available": "No description available", + "no_items_found": "No %s", + "no_notification_system_available": "no notification system available", + "number_of_latest_patterns": "Number of latest patterns to list", + "ollama_cannot_parse_url": "Cannot parse URL '%s': %v", + "ollama_chat_request_failed": "Chat request failed: %v", + "ollama_empty_address": "empty address", "ollama_error_building_chat_url": "Error building /chat URL: %v", "ollama_error_creating_chat_request": "Error creating /chat request: %v", - "ollama_failed_create_request": "failed to create request", + "ollama_error_endpoint": "testing endpoint", "ollama_error_getting_chat_body": "Error getting /chat body: %v", - "ollama_upstream_non_2xx_body_unreadable": "Upstream Fabric server returned non-2xx status %d and body could not be read: %v", - "ollama_upstream_non_2xx": "Upstream Fabric server returned non-2xx status %d: %s", - "ollama_upstream_returned_status": "upstream Fabric server returned status %d", - "ollama_error_prefix": "Error: %s", + "ollama_error_marshalling_body": "Error marshalling body: %v", "ollama_error_parse_upstream_response": "Error: failed to parse upstream response", - "ollama_failed_unmarshal_fabric_response": "failed to unmarshal Fabric response", - "ollama_error_writing_response": "Error writing response: %v", + "ollama_error_prefix": "Error: %s", + "ollama_error_reading_body": "Error reading body: %v", "ollama_error_scanning_body": "Error scanning body: %v", + "ollama_error_unmarshalling_body": "Error unmarshalling body: %v", + "ollama_error_writing_response": "Error writing response: %v", + "ollama_failed_create_request": "failed to create request", + "ollama_failed_decode_data_url": "failed to decode data URL: %v", + "ollama_failed_fetch_image": "failed to fetch image from %s: %s", "ollama_failed_scan_sse_stream": "failed to scan SSE response stream: %v", - "ollama_sse_buffer_limit": "SSE line exceeds 1MB buffer limit - data line too large", - "ollama_warning_no_content": "Warning: no content received from upstream Fabric server", - "ollama_no_content_from_upstream": "no content received from upstream Fabric server", - "ollama_empty_address": "empty address", + "ollama_failed_unmarshal_fabric_response": "failed to unmarshal Fabric response", + "ollama_http_timeout_question": "Enter the HTTP timeout (e.g., 20m, 60s)", "ollama_invalid_address": "invalid address: %w", "ollama_invalid_address_missing_host": "invalid address: missing host", "ollama_invalid_address_missing_hostname": "invalid address: missing hostname", "ollama_invalid_address_path_not_allowed": "invalid address: path component not allowed in bare address", - "extension_registry_not_initialized": "extension registry not initialized", - "extension_name_label": "Extension: %s\n", - "extension_status_disabled": " Status: DISABLED - Hash verification failed: %v\n", - "extension_config_path_label": " Config Path: %s\n\n", - "extension_status_enabled": " Status: ENABLED\n", - "extension_executable_label": " Executable: %s\n", - "extension_type_label": " Type: %s\n", - "extension_timeout_label": " Timeout: %s\n", - "extension_description_label": " Description: %s\n", - "extension_version_label": " Version: %s\n", - "extension_operations_label": " Operations:\n", - "extension_command_template_label": " Command Template: %s\n", - "extension_file_config_label": " File Configuration:\n", - "extension_invalid_config_path": "invalid config path: %w", - "extension_failed_read_config": "failed to read config file: %w", - "extension_failed_parse_config": "failed to parse config file: %w", - "extension_failed_register": "failed to register extension: %w", - "extension_invalid_timeout": "invalid timeout value '%s': must be a duration like '30s' or '1m': %w", - "extension_registered_success": "Successfully registered extension:\n", - "extension_name_detail_label": "Name: %s\n", - "extension_failed_remove": "failed to remove extension: %w", - "lmstudio_api_url_question": "Enter your %v URL (as a reminder, it is usually %v)", - "lmstudio_failed_create_request": "failed to create request: %w", - "lmstudio_failed_send_request": "failed to send request: %w", - "lmstudio_unexpected_status_code": "unexpected status code: %d", - "lmstudio_failed_decode_response": "failed to decode response: %w", - "lmstudio_failed_marshal_payload": "failed to marshal payload: %w", - "lmstudio_error_reading_response": "error reading response: %w", - "lmstudio_invalid_response_missing_choices": "invalid response format: missing or empty choices", - "lmstudio_invalid_response_missing_message": "invalid response format: missing message in first choice", - "lmstudio_invalid_response_missing_content": "invalid response format: missing or non-string content in message", - "lmstudio_invalid_response_missing_text": "invalid response format: missing or non-string text in first choice", - "lmstudio_no_embeddings_returned": "no embeddings returned", - "extension_warning_load_registry": "Warning: could not load extension registry: %v\n", - "extension_name_empty": "extension name cannot be empty", - "extension_name_contains_spaces": "extension name '%s' contains spaces - names must not contain spaces", - "extension_executable_not_found": "executable not found: %w", - "extension_failed_get_absolute_path": "failed to get absolute path: %w", - "extension_failed_hash_executable": "failed to hash executable: %w", - "extension_invalid_definition": "invalid extension definition: %w", - "extension_name_required": "extension name is required", - "extension_executable_required": "executable path is required", - "extension_type_required": "extension type is required", - "extension_invalid_timeout_format": "invalid timeout format: %w", - "extension_operation_required": "at least one operation must be defined", - "extension_cmd_template_required": "command template is required for operation %s", - "extension_not_found": "extension %s not found", - "extension_config_hash_mismatch": "config file hash mismatch for %s", - "extension_failed_verify_executable": "failed to verify executable: %w", - "extension_executable_hash_mismatch": "executable hash mismatch for %s", - "extension_failed_marshal_registry": "failed to marshal extension registry: %w", - "extension_failed_read_registry": "failed to read extension registry: %w", - "extension_failed_parse_registry": "failed to parse extension registry: %w", - "extension_failed_get_extension": "failed to get extension: %w", - "extension_failed_format_command": "failed to format command: %w", - "extension_empty_command": "empty command after formatting", - "extension_operation_not_found": "operation %s not found for extension %s", - "extension_executing_command": "Executing command: %s\n", - "extension_execution_failed_stderr": "execution failed: %w\nstderr: %s", - "extension_no_file_config": "no file configuration found", - "extension_no_output_file": "no output file specified in configuration", - "extension_execution_timed_out": "execution timed out after %v", - "extension_execution_failed_err": "execution failed: %w\nerr: %s", - "extension_failed_read_output_file": "failed to read output file: %w", - "extension_failed_get_output_path": "failed to get output path: %w\nerr: %s", - "spotify_failed_create_token_request": "failed to create token request: %w", - "spotify_failed_request_access_token": "failed to request access token: %w", - "spotify_failed_get_access_token": "failed to get access token: status %d, body: %s", - "spotify_failed_decode_token_response": "failed to decode token response: %w", - "spotify_failed_create_request": "failed to create request: %w", - "spotify_failed_execute_request": "failed to execute request: %w", - "spotify_failed_read_response_body": "failed to read response body: %w", + "ollama_invalid_data_url_format": "invalid data URL format", + "ollama_invalid_http_timeout_using_default": "Invalid HTTP timeout '%s': %v, using default", + "ollama_invalid_num_ctx_in_request": "Invalid num_ctx in request: %v", + "ollama_no_content_from_upstream": "no content received from upstream Fabric server", + "ollama_num_ctx_exceeds_maximum": "num_ctx exceeds maximum allowed value of %d", + "ollama_num_ctx_invalid_type": "num_ctx must be a number, got invalid type", + "ollama_num_ctx_must_be_finite": "num_ctx must be a finite number", + "ollama_num_ctx_must_be_integer": "num_ctx must be an integer, got float with fractional part", + "ollama_num_ctx_must_be_positive": "num_ctx must be positive, got: %d", + "ollama_num_ctx_must_be_valid_number": "num_ctx must be a valid number", + "ollama_num_ctx_must_be_valid_number_got": "num_ctx must be a valid number, got: %s", + "ollama_num_ctx_value_out_of_range": "num_ctx value out of range", + "ollama_num_ctx_value_too_large": "num_ctx value too large: %d", + "ollama_sse_buffer_limit": "SSE line exceeds 1MB buffer limit - data line too large", + "ollama_upstream_non_2xx": "Upstream Fabric server returned non-2xx status %d: %s", + "ollama_upstream_non_2xx_body_unreadable": "Upstream Fabric server returned non-2xx status %d and body could not be read: %v", + "ollama_upstream_returned_status": "upstream Fabric server returned status %d", + "ollama_warning_no_content": "Warning: no content received from upstream Fabric server", + "ollama_warning_parse_variables": "Warning: failed to parse options.variables as JSON: %v", + "openai_api_base_url_not_configured": "API base URL not configured for provider %s", + "openai_audio_ffmpeg_failed": "ffmpeg failed: %v: %s", + "openai_audio_ffmpeg_not_found_install": "ffmpeg not found: please install", + "openai_audio_file_exceeds_limit_enable_split": "File %s exceeds the 25MB limit; use --split-media-file to enable automatic splitting", + "openai_audio_file_exceeds_limit_splitting": "File %s is larger than the size limit... splitting into chunks...", + "openai_audio_model_not_supported_for_transcription": "model '%s' is not supported for transcription", + "openai_audio_running_ffmpeg_split_chunks": "Running ffmpeg to split audio into %d-second chunks...", + "openai_audio_unable_to_split_acceptable_size_chunks": "unable to split file into acceptably sized chunks", + "openai_audio_unsupported_audio_format": "unsupported audio format '%s'", + "openai_audio_using_model_to_transcribe_part": "Using model %s to transcribe part %d (filename: %s)...", + "openai_failed_to_create_models_url": "failed to create models URL: %w", + "openai_image_failed_to_create_directory": "failed to create directory %s: %w", + "openai_image_failed_to_decode_image_data": "failed to decode image data: %w", + "openai_image_failed_to_save_image": "failed to save image to %s: %w", + "openai_image_saved_to": "Image saved to: %s", + "openai_model_no_image_generation": "model '%s' does not support image generation. Supported models: %s", + "openai_models_response_too_large": "models response too large from provider %s (>%d bytes)", + "openai_unable_to_parse_models_response": "unable to parse models response; raw response: %s", + "openai_unexpected_status_code_read_error": "unexpected status code: %d from provider %s (failed to read response body: %v)", + "openai_unexpected_status_code_with_body": "unexpected status code: %d from provider %s, response body: %s", + "openai_warning_model_no_image_generation": "Warning: Model '%s' does not support image generation. Supported models: %s. Consider using -m gpt-5.2 for image generation.\n", + "optional_marker": "(optional)", + "options_placeholder": "[OPTIONS]", + "output_entire_session": "Output the entire session (also a temporary one) to the output file", + "output_full": "Output: %s", + "output_raw_list_shell_completion": "Output raw list without headers/formatting (for shell completion)", + "output_to_file": "Output to file", + "output_truncated": "Output: %s...", + "output_video_metadata": "Output video metadata", + "path_to_yaml_config": "Path to YAML config file", + "pattern_not_found_list_available": "pattern '%s' not found. Run 'fabric -l' to see available patterns", + "pattern_not_found_no_patterns": "pattern '%s' not found.\n\nNo patterns are installed! To fix this:\n • Run 'fabric --setup' to configure and download patterns\n • Or run 'fabric -U' to download/update patterns directly", + "pattern_variables_help": "Values for pattern variables, e.g. -v=#role:expert -v=#points:30", + "patterns_cloning_repository": "Cloning repository %s (path: %s)...\n", + "patterns_debug_included_custom_directory": "📂 Also included patterns from custom directory: %s\n", + "patterns_detected_old_path": "🔄 Detected old pattern path 'patterns', trying migration to 'data/patterns'...", + "patterns_download_success": "✅ Successfully downloaded and installed patterns to %s\n", + "patterns_downloaded_temp": "Downloaded %d patterns to temporary directory\n", + "patterns_downloading": "Downloading patterns and Populating %s...\n", + "patterns_failed_access_directory": "failed to access patterns directory '%s': %w", + "patterns_failed_create_temp_dir": "failed to create temp directory: %w", + "patterns_failed_create_temp_folder": "failed to create temporary patterns folder: %w", + "patterns_failed_download_from_git": "failed to download patterns from git repository: %w", + "patterns_failed_download_from_repo": "failed to download patterns from %s: %w", + "patterns_failed_loaded_marker": "failed to create loaded marker file '%s': %w", + "patterns_failed_move_patterns": "failed to move patterns to config directory: %w", + "patterns_failed_move_test_patterns": "failed to move test patterns to temp folder: %w", + "patterns_failed_read_directory": "failed to read patterns directory: %w", + "patterns_failed_read_temp_directory": "failed to read temp patterns directory: %w", + "patterns_failed_unique_file": "failed to create unique patterns file: %w", + "patterns_failed_write_unique_file": "failed to write unique patterns file: %w", + "patterns_found_new_path": "✅ Found %d patterns at new path '%s', updating configuration...\n", + "patterns_git_repo_folder_question": "Enter the default folder in the Git repository where patterns are stored", + "patterns_git_repo_url_question": "Enter the default Git repository URL for the patterns", + "patterns_loader_label": "Patterns Loader", + "patterns_no_patterns_copied": "no patterns were successfully copied to %s", + "patterns_no_patterns_found_in_directories": "no patterns found in directories %s and %s", + "patterns_no_patterns_found_in_directory": "no patterns found in directory %s", + "patterns_no_patterns_migration_failed": "no patterns found in repository at path %s and migration failed: %w", + "patterns_not_found_header": "⚠️ No patterns found!", + "patterns_option_run_setup": "Option 1 (Recommended): Run setup to download patterns", + "patterns_option_run_setup_command": "fabric --setup", + "patterns_option_run_update": "Option 2: Download/update patterns directly", + "patterns_option_run_update_command": "fabric -U", + "patterns_preserve_warning": "Warning: failed to preserve custom pattern '%s': %v\n", + "patterns_preserved_custom_pattern": "Preserved custom pattern: %s\n", + "patterns_required_to_work": "Patterns are required for Fabric to work. To fix this:", + "patterns_saving_updated_configuration": "💾 Saving updated configuration (path changed from '%s' to '%s')...\n", + "patterns_setup_description": "Patterns - Downloads patterns", + "patterns_unable_to_find_or_migrate": "unable to find patterns at current path '%s' or migrate to new structure", + "patterns_unique_file_created": "📝 Created unique patterns file with %d patterns\n", + "patterns_warning_custom_directory": "Warning: Could not read custom patterns directory %s: %v\n", + "patterns_warning_remove_test_folder": "Warning: failed to remove test temporary folder '%s': %v\n", + "perplexity_api_key_not_configured": "API key not configured for %s. Set %s environment variable or run 'fabric --setup' to configure %s", + "perplexity_api_request_failed": "Perplexity API request failed: %w", + "perplexity_citations_header": "\n\n**Citations:**\n", + "perplexity_failed_configure": "failed to configure Perplexity: %w", + "perplexity_streaming_error": "Perplexity streaming error: %v", + "plugin_configured": " ✓", + "plugin_enable_bool_question": "Enable %v %v (true/false)", + "plugin_enter_value": "Enter your %v %v", + "plugin_invalid_bool": "invalid bool: %q", + "plugin_invalid_boolean_value": "invalid boolean value: %v", + "plugin_not_configured": " ⚠️ NOT CONFIGURED", + "plugin_question_bool": "%v%v (true/false, leave empty for '%s' or type '%v' to remove the value):", + "plugin_question_optional": "%v%v (leave empty to skip):", + "plugin_question_with_default": "%v%v (leave empty for '%s' or type '%v' to remove the value):", + "plugin_setting_not_valid": "%v=%v, is not valid", + "plugin_setup_configured": "[%v] configured", + "plugin_setup_skipped": "[%v] skipped\n", + "prefer_playlist_over_video": "Prefer playlist over video if both ids are present in the URL", + "print_context": "Print context", + "print_current_version": "Print current version", + "print_session": "Print session", + "register_new_extension": "Register a new extension from config file path", + "remove_registered_extension": "Remove a registered extension by name", + "required_marker": "[required]", + "run_setup_for_reconfigurable_parts": "Run setup for all reconfigurable parts of fabric", + "save_generated_image_to_file": "Save generated image to specified file path (e.g., 'output.png')", + "scrape_website_url": "Scrape website URL to markdown using Jina AI", + "scraping_not_configured": "scraping functionality is not configured. Please set up Jina to enable scraping", + "search_question_jina": "Search question using Jina AI", + "seed_for_lmm_generation": "Seed to be used for LMM generation", + "send_desktop_notification": "Send desktop notification when command completes", + "serve_fabric_api_ollama_endpoints": "Serve the Fabric Rest API with ollama endpoints", + "serve_fabric_rest_api": "Serve the Fabric Rest API", + "set_debug_level": "Set debug level (0=off, 1=basic, 2=detailed, 3=trace)", + "set_frequency_penalty": "Set frequency penalty", + "set_location_web_search": "Set location for web search results (e.g., 'America/Los_Angeles')", + "set_presence_penalty": "Set presence penalty", + "set_reasoning_thinking_level": "Set reasoning/thinking level (e.g., off, low, medium, high, or numeric tokens for Anthropic or Google Gemini)", + "set_temperature": "Set temperature", + "set_top_p": "Set top P", + "setup_add_more_providers_later": "You'll be able to add more providers later with 'fabric --setup'", + "setup_ai_provider_required": "Fabric needs at least one AI provider to work.", + "setup_available_ai_providers": "Available AI Providers:", + "setup_available_plugins": "Available plugins:", + "setup_complete_header": "✅ Setup complete! You can now use Fabric.", + "setup_configure_more": "• Configure more settings: fabric --setup", + "setup_enter_ai_provider_number": "AI Provider Number", + "setup_failed_download_patterns": "failed to download patterns: %w", + "setup_failed_download_strategies": "failed to download strategies: %w", + "setup_failed_set_defaults": "failed to set default vendor and model: %w", + "setup_invalid_selection": "invalid selection: %s", + "setup_list_patterns": "• List available patterns: fabric -l", + "setup_next_steps": "Next steps:", + "setup_no_ai_provider_selected": "no AI provider selected - at least one is required", + "setup_optional_configuration_header": "━━━ OPTIONAL CONFIGURATION ━━━\n\nOptional Tools", + "setup_plugin_number": "Plugin Number", + "setup_plugin_prompt": "Enter the number of the plugin to setup", + "setup_required_configuration_header": "━━━ REQUIRED CONFIGURATION ━━━\n\nAI Vendors [at least one required]", + "setup_required_tools": "Required Tools", + "setup_step_configure_ai_provider": "🤖 Step 3: Configure an AI provider", + "setup_step_downloading_patterns": "📥 Step 1: Downloading patterns (required for Fabric to work)...", + "setup_step_downloading_strategies": "📥 Step 2: Downloading strategies (required for Fabric to work)...", + "setup_step_setting_defaults": "⚙️ Step 4: Setting default vendor and model...", + "setup_try_pattern": "• Try a pattern: echo 'your text' | fabric --pattern summarize", + "setup_validation_ai_provider_configured": "✓ AI Provider configured", + "setup_validation_ai_provider_missing": "✗ AI Provider not configured - Required for Fabric to work", + "setup_validation_complete": "✓ All required components configured!", + "setup_validation_defaults_configured": "✓ Default vendor/model set: %s/%s", + "setup_validation_defaults_missing": "✗ Default vendor/model not set - Required for Fabric to work", + "setup_validation_header": "Configuration Status:", + "setup_validation_incomplete_help": "Run 'fabric --setup' again to configure missing items,\nor run 'fabric -U' to download patterns and strategies.", + "setup_validation_incomplete_warning": "⚠️ Setup incomplete! Missing required components.", + "setup_validation_patterns_configured": "✓ Patterns downloaded", + "setup_validation_patterns_missing": "✗ Patterns not found - Required for Fabric to work", + "setup_validation_strategies_configured": "✓ Strategies downloaded", + "setup_validation_strategies_missing": "✗ Strategies not found - Required for Fabric to work", + "setup_welcome_header": "🎉 Welcome to Fabric! Let's get you set up.", + "show_dry_run": "Show what would be sent to the model without actually sending it", + "specify_language_code": "Specify the Language Code for the chat, e.g. -g=en -g=zh -g=pt-BR -g=pt-PT", + "specify_vendor_for_model": "Specify vendor for the selected model (e.g., -V \"LM Studio\" -m openai/gpt-oss-20b)", + "split_media_files_ffmpeg": "Split audio/video files larger than 25MB using ffmpeg", "spotify_api_request_failed": "API request failed: status %d, body: %s", - "spotify_failed_parse_show_metadata": "failed to parse show metadata: %w", - "spotify_failed_parse_episode_metadata": "failed to parse episode metadata: %w", - "spotify_search_failed": "search failed: %w", - "spotify_failed_parse_search_results": "failed to parse search results: %w", + "spotify_audio_preview_label": "**Audio Preview**: %s", + "spotify_client_id_question": "Enter your Spotify CLIENT ID", + "spotify_client_secret_question": "Enter your Spotify CLIENT SECRET", + "spotify_description_header": "## Description", + "spotify_duration_label": "**Duration**: %d minutes", + "spotify_episode_header": "# Spotify Episode", + "spotify_error_getting_metadata": "error getting Spotify metadata: %v", + "spotify_explicit_label": "**Explicit**: %v", + "spotify_failed_create_request": "failed to create request: %w", + "spotify_failed_create_token_request": "failed to create token request: %w", + "spotify_failed_decode_token_response": "failed to decode token response: %w", + "spotify_failed_execute_request": "failed to execute request: %w", + "spotify_failed_get_access_token": "failed to get access token: status %d, body: %s", "spotify_failed_get_show_episodes": "failed to get show episodes: %w", + "spotify_failed_parse_episode_metadata": "failed to parse episode metadata: %w", "spotify_failed_parse_episodes": "failed to parse episodes: %w", - "template_file_log_validating_path": "File: validating path %q", - "template_file_error_path_contains_parent_ref": "file: path cannot contain '..'", + "spotify_failed_parse_search_results": "failed to parse search results: %w", + "spotify_failed_parse_show_metadata": "failed to parse show metadata: %w", + "spotify_failed_read_response_body": "failed to read response body: %w", + "spotify_failed_request_access_token": "failed to request access token: %w", + "spotify_invalid_url": "invalid Spotify URL, can't get show or episode ID: '%s'", + "spotify_label": "Spotify", + "spotify_language_field_label": "**Language**: %s", + "spotify_languages_label": "**Languages**: %s", + "spotify_media_type_label": "**Media Type**: %s", + "spotify_no_episode_found": "no episode found with ID: %s", + "spotify_no_show_found": "no show found with ID: %s", + "spotify_not_configured": "Spotify is not configured, please run the setup procedure", + "spotify_publisher_label": "**Publisher**: %s", + "spotify_release_date_label": "**Release Date**: %s", + "spotify_search_description_label": "- **Description**: %s", + "spotify_search_episodes_label": "- **Episodes**: %d", + "spotify_search_failed": "search failed: %w", + "spotify_search_publisher_label": "- **Publisher**: %s", + "spotify_search_results_header": "# Spotify Search Results", + "spotify_search_url_label": "- **URL**: %s", + "spotify_setup_description": "Spotify - to grab podcast/show metadata from Spotify", + "spotify_show_header": "# Spotify Podcast/Show", + "spotify_show_name_label": "**Show**: %s", + "spotify_title_label": "**Title**: %s", + "spotify_total_episodes_label": "**Total Episodes**: %d", + "spotify_url_label": "**URL**: %s", + "start_tag_thinking_sections": "Start tag for thinking sections", + "strategies_available_header": "Available Strategies:", + "strategies_cloning_repository": "Cloning repository %s (path: %s)...\n", + "strategies_download_success": "✅ Successfully downloaded and installed strategies to %s\n", + "strategies_downloaded_count": "Downloaded %d strategies\n", + "strategies_downloading": "Downloading strategies and Populating %s...\n", + "strategies_failed_create_directory": "failed to create strategies directory: %w", + "strategies_failed_download": "failed to download strategies: %w", + "strategies_git_repo_folder_question": "Enter the default folder in the Git repository where strategies are stored", + "strategies_git_repo_url_question": "Enter the default Git repository URL for the strategies", + "strategies_home_dir_error": "could not get home directory: %v", + "strategies_home_dir_fallback": "could not get home directory: %v, using current directory instead", + "strategies_label": "Prompt Strategies", + "strategies_none_found": "no strategies found. Please run 'fabric --setup' to download strategies", + "strategies_setup_description": "Strategies - Downloads Prompting Strategies (like chain of thought)", + "strategy_not_found": "strategy %s not found. Please run 'fabric --liststrategies' for list", + "stream_help": "Stream", + "suppress_thinking_tags": "Suppress text enclosed in thinking tags", + "template_datetime_error_invalid_number": "invalid number in relative time: %q", + "template_datetime_error_invalid_relative_format": "invalid relative time format", + "template_datetime_error_invalid_unit": "invalid time unit: %q", + "template_datetime_error_relative_requires_value": "relative time requires a value", + "template_datetime_error_unknown_operation": "datetime: unknown operation %q", "template_file_error_expand_home_dir": "file: could not expand home directory: %v", - "template_file_log_cleaned_path": "File: cleaned path %q", - "template_file_log_operation_value": "File: operation=%q value=%q", - "template_file_error_tail_requires_path_lines": "file: tail requires format path|lines", "template_file_error_invalid_line_count": "file: invalid line count %q", "template_file_error_line_count_positive": "file: line count must be positive", - "template_file_log_tail_returning_lines": "File: tail returning %d lines", - "template_file_error_stat_file": "file: could not stat file: %v", - "template_file_error_size_exceeds_limit": "file: size %d exceeds limit of %d bytes", - "template_file_error_read_file": "file: could not read: %v", - "template_file_log_read_bytes": "File: read %d bytes", - "template_file_log_exists_for_path": "File: exists=%v for path %q", - "template_file_log_size_for_path": "File: size=%d for path %q", - "template_file_log_modified_for_path": "File: modified=%q for path %q", - "template_file_error_unknown_operation": "file: unknown operation %q (supported: read, tail, exists, size, modified)", - "template_file_log_reading_last_lines": "File: reading last %d lines from %q", "template_file_error_open_file": "file: could not open: %v", - "template_file_error_stat_open_file": "file: could not stat: %v", + "template_file_error_path_contains_parent_ref": "file: path cannot contain '..'", + "template_file_error_read_file": "file: could not read: %v", "template_file_error_scanner_read": "file: error reading: %v", + "template_file_error_size_exceeds_limit": "file: size %d exceeds limit of %d bytes", + "template_file_error_stat_file": "file: could not stat file: %v", + "template_file_error_stat_open_file": "file: could not stat: %v", + "template_file_error_tail_requires_path_lines": "file: tail requires format path|lines", + "template_file_error_unknown_operation": "file: unknown operation %q (supported: read, tail, exists, size, modified)", + "template_file_log_cleaned_path": "File: cleaned path %q", + "template_file_log_exists_for_path": "File: exists=%v for path %q", + "template_file_log_modified_for_path": "File: modified=%q for path %q", + "template_file_log_operation_value": "File: operation=%q value=%q", + "template_file_log_read_bytes": "File: read %d bytes", "template_file_log_read_total_return_last": "File: read %d lines total, returning last %d", - "chatter_error_no_session_pattern_user_messages": "no session, pattern or user messages provided", - "chatter_error_no_messages_provided": "no messages provided", - "chatter_log_stream_usage_metadata": "[Metadata] Input: %d | Output: %d | Total: %d", - "chatter_error_stream_update": "Error: %s", - "chatter_error_empty_response": "empty response", - "chatter_warning_parse_file_changes_failed": "Warning: Failed to parse file changes: %v", - "chatter_warning_get_current_directory_failed": "Warning: Failed to get current directory: %v", - "chatter_warning_apply_file_changes_failed": "Warning: Failed to apply file changes: %v", - "chatter_info_file_changes_applied_successfully": "Successfully applied file changes.", - "chatter_help_review_changes_with_git_diff": "You can review the changes with 'git diff' if you're using git.", - "chatter_error_find_session": "could not find session %s: %v", - "chatter_error_find_context": "could not find context %s: %v", - "chatter_error_get_pattern": "could not get pattern %s: %v", - "chatter_error_load_strategy": "could not load strategy %s: %v", - "chatter_prompt_enforce_response_language": "%s\n\nIMPORTANT: First, execute the instructions provided in this prompt using the user's input. Second, ensure your entire final response, including any section headers or titles generated as part of executing the instructions, is written ONLY in the %s language.", - "vertexai_failed_google_credentials": "failed to get Google credentials (ensure ADC is configured): %w", - "vertexai_no_models_found": "no models found from any publisher", - "vertexai_no_conversational_models": "no conversational models found", + "template_file_log_reading_last_lines": "File: reading last %d lines from %q", + "template_file_log_size_for_path": "File: size=%d for path %q", + "template_file_log_tail_returning_lines": "File: tail returning %d lines", + "template_file_log_validating_path": "File: validating path %q", + "template_sys_error_env_requires_var": "env: variable name required", + "template_sys_error_home": "failed to get home directory: %v", + "template_sys_error_hostname": "failed to get hostname: %v", + "template_sys_error_pwd": "failed to get working directory: %v", + "template_sys_error_unknown_operation": "sys: unknown operation %q", + "template_sys_error_user": "failed to get current user: %v", + "transcription_model_required": "transcription model is required (use --transcribe-model)", + "transparent_background_png_webp_only": "transparent background can only be used with PNG and WebP formats, not %s", + "tts_audio_generated_successfully": "TTS audio generated successfully and saved to: %s\n", + "tts_model_requires_audio_output": "TTS model '%s' requires audio output. Please specify an audio output file with -o flag (e.g., -o output.wav)", + "tts_voice_name": "TTS voice name for supported models (e.g., Kore, Charon, Puck)", + "unsupported_conversion": "unsupported conversion from %v to %v", + "update_patterns": "Update patterns", + "usage_header": "Usage:", + "use_model_defaults_raw_help": "Use the defaults of the model without sending chat options (temperature, top_p, etc.). Only affects OpenAI-compatible providers. Anthropic models always use smart parameter selection to comply with model-specific requirements.", + "vendor_no_transcription_support": "vendor %s does not support audio transcription", + "vendor_not_configured": "vendor %s not configured", + "vendor_not_found": "vendor %s not found", + "vendors_no_ai_vendors_configured_read_models": "no AI vendors configured to read models from", "vertexai_client_not_initialized": "VertexAI client not initialized", - "vertexai_no_valid_messages": "no valid messages to send", - "vertexai_no_content_in_response": "no content in response", - "vertexai_failed_gemini_client": "failed to create Gemini client: %w", - "vertexai_stream_error": "Error: %v", - "gemini_invalid_location_format": "invalid search location format %q: must be timezone (e.g., 'America/Los_Angeles') or language code (e.g., 'en-US')", - "gemini_stream_error": "Error: %v", - "gemini_no_text_for_tts": "no text content found for TTS generation", - "gemini_invalid_voice": "invalid voice '%s'. Valid voices are: %v", - "gemini_tts_failed": "TTS generation failed: %w", - "gemini_unexpected_data_type": "unexpected data type: %s, expected audio data", - "gemini_audio_data_too_small": "audio data too small: %d bytes, minimum required: %d", - "gemini_wav_generation_failed": "failed to generate WAV file: %w", - "gemini_wav_data_invalid": "generated WAV data is invalid: %d bytes, minimum required: %d", - "gemini_no_audio_data": "no audio data received from TTS model", - "gemini_empty_pcm_data": "empty PCM data provided", - "gemini_pcm_data_too_large": "PCM data too large: %d bytes, maximum allowed: %d", - "bedrock_unable_load_aws_config": "unable to load AWS Config: %w", - "bedrock_aws_region_label": "AWS Region", - "bedrock_invalid_aws_region": "invalid AWS region: %s", - "bedrock_unable_load_aws_config_with_region": "unable to load AWS Config with region %s: %w", - "bedrock_failed_list_foundation_models": "failed to list foundation models: %w", - "bedrock_failed_list_inference_profiles": "failed to list inference profiles: %w", - "bedrock_panic_sendstream": "panic in SendStream: %v", - "bedrock_conversestream_failed": "bedrock conversestream failed for model %s: %w", - "bedrock_unknown_stream_event_type": "unknown stream event type: %T", - "bedrock_converse_failed": "bedrock converse failed for model %s: %w", - "bedrock_unexpected_response_type": "unexpected response type: %T", - "bedrock_empty_response_content": "empty response content", - "bedrock_unexpected_content_block_type": "unexpected content block type: %T", - "fetch_unknown_operation": "fetch: unknown operation %q (supported: get)", - "fetch_content_not_utf8": "fetch: content is not valid UTF-8 text", - "fetch_content_null_bytes": "fetch: content contains null bytes", - "fetch_error_create_request": "fetch: error creating request: %v", - "fetch_error_fetching_url": "fetch: error fetching URL: %v", - "fetch_http_error": "fetch: HTTP error: %d - %s", - "fetch_content_too_large": "fetch: content too large: %d bytes (max %d bytes)", - "fetch_unsupported_content_type": "fetch: unsupported content type %q - only text content allowed", - "fetch_error_reading_response": "fetch: error reading response: %v", - "fetch_content_exceeds_limit": "fetch: content too large: exceeds %d bytes", - "file_manager_invalid_format_no_json_array": "invalid %s format: no JSON array found", - "file_manager_invalid_format_unbalanced_brackets": "invalid %s format: unbalanced brackets", - "file_manager_failed_parse_json": "failed to parse %s JSON: %w", - "file_manager_invalid_operation": "invalid operation for file change %d: %s", - "file_manager_empty_path": "empty path for file change %d", - "file_manager_suspicious_path": "suspicious path for file change %d: %s", - "file_manager_file_content_too_large": "file content too large for file change %d: %d bytes", - "file_manager_failed_create_directory": "failed to create directory %s for file change %d: %w", - "file_manager_failed_write_file": "failed to write file %s for file change %d: %w", - "file_manager_applied_operation": "Applied %s operation to %s", - "vertexai_error_create_request": "failed to create request: %w", - "vertexai_error_request_failed": "request failed: %w", "vertexai_error_api_status": "API returned status %d: %s", - "vertexai_error_read_response": "failed to read response: %w", - "vertexai_error_response_too_large": "response too large (>%d bytes)", + "vertexai_error_create_request": "failed to create request: %w", "vertexai_error_parse_response": "failed to parse response: %w", - "copilot_tenant_client_id_required": "tenant ID and client ID are required", - "copilot_failed_create_conversation": "failed to create conversation: %w", - "copilot_failed_send_message": "failed to send message: %w", - "copilot_failed_stream_message": "failed to stream message: %w", - "copilot_error_create_conversation": "failed to create conversation: %s - %s", - "copilot_error_chat_request": "chat request failed: %s - %s", - "copilot_error_stream_request": "stream request failed: %s - %s", - "copilot_debug_created_conversation": "Created Copilot conversation: %s", - "copilot_debug_failed_parse_sse_event": "Failed to parse SSE event: %v", - "copilot_error_reading_stream": "error reading stream: %w" + "vertexai_error_read_response": "failed to read response: %w", + "vertexai_error_request_failed": "request failed: %w", + "vertexai_error_response_too_large": "response too large (>%d bytes)", + "vertexai_failed_gemini_client": "failed to create Gemini client: %w", + "vertexai_failed_google_credentials": "failed to get Google credentials (ensure ADC is configured): %w", + "vertexai_no_content_in_response": "no content in response", + "vertexai_no_conversational_models": "no conversational models found", + "vertexai_no_models_found": "no models found from any publisher", + "vertexai_no_valid_messages": "no valid messages to send", + "vertexai_stream_error": "Error: %v", + "wipe_context": "Wipe context", + "wipe_session": "Wipe session", + "youtube_api_key_required": "YouTube API key required for comments and metadata. Run 'fabric --setup' to configure", + "youtube_auth_required_bot_detection": "YouTube requires authentication (bot detection). Use --yt-dlp-args='--cookies-from-browser BROWSER' where BROWSER is chrome, firefox, brave, etc.", + "youtube_empty_seconds_string": "empty seconds string", + "youtube_error_getting_comments": "error getting comments: %v", + "youtube_error_getting_metadata": "error getting video metadata: %v", + "youtube_error_getting_video_details": "error getting video details: %v", + "youtube_error_parsing_duration": "error parsing video duration: %v", + "youtube_error_saving_csv": "error saving videos to CSV: %v", + "youtube_failed_create_temp_dir": "failed to create temp directory: %v", + "youtube_failed_fetch_comments": "Failed to fetch comments: %v", + "youtube_failed_walk_directory": "failed to walk directory: %v", + "youtube_invalid_duration_string": "invalid duration string: %s", + "youtube_invalid_seconds_format": "invalid seconds format %q: %w", + "youtube_invalid_timestamp_format": "invalid timestamp format: %s", + "youtube_invalid_url": "invalid YouTube URL, can't get video or playlist ID: '%s'", + "youtube_invalid_ytdlp_arguments": "invalid yt-dlp arguments: %v", + "youtube_label": "YouTube", + "youtube_no_transcript_content": "no transcript content found in VTT file", + "youtube_no_url_provided": "No YouTube URL provided", + "youtube_no_video_found_with_id": "no video found with ID: %s", + "youtube_no_video_id_found": "no video ID found in URL", + "youtube_no_vtt_files_found": "no VTT files found in directory", + "youtube_not_configured": "YouTube is not configured, please run the setup procedure", + "youtube_playlist_header": "Playlist: %s", + "youtube_playlist_saved_to": "Playlist saved to %s", + "youtube_rate_limit_exceeded": "YouTube rate limit exceeded. Try again later or use different yt-dlp arguments like '--sleep-requests 1' to slow down requests.", + "youtube_setup_description": "YouTube - to grab video transcripts (via yt-dlp) and comments/metadata (via YouTube API)", + "youtube_url_help": "YouTube video or play list \"URL\" to grab transcript, comments from it and send to chat or print it put to the console and store it in the output file", + "youtube_url_is_playlist_not_video": "URL is a playlist, not a video", + "youtube_video_id_title_header": "VideoID: Title", + "youtube_ytdlp_not_found": "yt-dlp not found in PATH. Please install yt-dlp to use YouTube transcript functionality", + "youtube_ytdlp_stderr_error": "Error reading yt-dlp stderr" } diff --git a/internal/i18n/locales/es.json b/internal/i18n/locales/es.json index 8450c534..65b122ba 100644 --- a/internal/i18n/locales/es.json +++ b/internal/i18n/locales/es.json @@ -1,520 +1,592 @@ { - "html_readability_error": "usa la entrada original, porque no se puede aplicar la legibilidad de html", - "vendor_not_configured": "el proveedor %s no está configurado", - "vendor_no_transcription_support": "el proveedor %s no admite transcripción de audio", - "transcription_model_required": "se requiere un modelo de transcripción (usa --transcribe-model)", - "youtube_not_configured": "YouTube no está configurado, por favor ejecute el procedimiento de configuración", - "spotify_not_configured": "Spotify no está configurado, por favor ejecute el procedimiento de configuración", - "spotify_label": "Spotify", - "spotify_setup_description": "Spotify - para obtener metadatos de podcasts/programas de Spotify", - "spotify_invalid_url": "URL de Spotify no válida, no se puede obtener el ID del programa o episodio: '%s'", - "spotify_error_getting_metadata": "error al obtener metadatos de Spotify: %v", - "spotify_no_show_found": "no se encontró ningún programa con ID: %s", - "spotify_no_episode_found": "no se encontró ningún episodio con ID: %s", - "spotify_url_help": "URL de podcast o episodio de Spotify para obtener metadatos y enviar al chat", - "youtube_api_key_required": "Se requiere clave API de YouTube para comentarios y metadatos. Ejecute 'fabric --setup' para configurar", - "youtube_ytdlp_not_found": "yt-dlp no encontrado en PATH. Por favor instala yt-dlp para usar la funcionalidad de transcripción de YouTube", - "youtube_invalid_url": "URL de YouTube no válida, no se puede obtener ID de video o lista de reproducción: '%s'", - "youtube_url_is_playlist_not_video": "La URL es una lista de reproducción, no un video", - "youtube_no_video_id_found": "no se encontró ID de video en la URL", - "youtube_rate_limit_exceeded": "Límite de tasa de YouTube excedido. Intenta de nuevo más tarde o usa diferentes argumentos de yt-dlp como '--sleep-requests 1' para ralentizar las solicitudes.", - "youtube_auth_required_bot_detection": "YouTube requiere autenticación (detección de bot). Usa --yt-dlp-args='--cookies-from-browser BROWSER' donde BROWSER puede ser chrome, firefox, brave, etc.", - "youtube_ytdlp_stderr_error": "Error al leer stderr de yt-dlp", - "youtube_invalid_ytdlp_arguments": "argumentos de yt-dlp inválidos: %v", - "youtube_failed_create_temp_dir": "falló al crear directorio temporal: %v", - "youtube_no_transcript_content": "no se encontró contenido de transcripción en el archivo VTT", - "youtube_no_vtt_files_found": "no se encontraron archivos VTT en el directorio", - "youtube_failed_walk_directory": "falló al recorrer el directorio: %v", - "youtube_error_getting_video_details": "error al obtener detalles del video: %v", - "youtube_invalid_duration_string": "cadena de duración inválida: %s", - "youtube_error_getting_metadata": "error al obtener metadatos del video: %v", - "youtube_error_parsing_duration": "error al analizar la duración del video: %v", - "youtube_error_getting_comments": "error al obtener comentarios: %v", - "youtube_error_saving_csv": "error al guardar videos en CSV: %v", - "youtube_no_video_found_with_id": "no se encontró video con ID: %s", - "youtube_invalid_timestamp_format": "formato de marca de tiempo inválido: %s", - "youtube_empty_seconds_string": "cadena de segundos vacía", - "youtube_invalid_seconds_format": "formato de segundos inválido %q: %w", - "error_fetching_playlist_videos": "error al obtener videos de la lista de reproducción: %w", - "openai_api_base_url_not_configured": "URL base de API no configurada para el proveedor %s", - "openai_failed_to_create_models_url": "error al crear URL de modelos: %w", - "openai_unexpected_status_code_with_body": "código de estado inesperado: %d del proveedor %s, cuerpo de respuesta: %s", - "openai_unexpected_status_code_read_error_partial": "código de estado inesperado: %d del proveedor %s (error al leer cuerpo: %v), respuesta parcial: %s", - "openai_unexpected_status_code_read_error": "código de estado inesperado: %d del proveedor %s (error al leer cuerpo de respuesta: %v)", - "openai_unable_to_parse_models_response": "no se pudo analizar la respuesta de modelos; respuesta cruda: %s", - "openai_warning_model_no_image_generation": "Advertencia: El modelo '%s' no soporta generación de imágenes. Modelos soportados: %s. Considere usar -m gpt-5.2 para generación de imágenes.\n", - "openai_model_no_image_generation": "el modelo '%s' no soporta generación de imágenes. Modelos soportados: %s", - "scraping_not_configured": "la funcionalidad de extracción no está configurada. Por favor configura Jina para habilitar la extracción", - "could_not_determine_home_dir": "no se pudo determinar el directorio home del usuario: %w", - "could_not_stat_env_file": "no se pudo verificar el archivo .env: %w", + "additional_yt_dlp_args": "Argumentos adicionales para pasar a yt-dlp (ej. '--cookies-from-browser brave')", + "address_to_bind_rest_api": "La dirección para vincular la API REST", + "anthropic_stream_error": "Error de transmisión: %v", + "api_key_secure_server_routes": "Clave API usada para asegurar rutas del servidor", + "application_options_header": "Opciones de la Aplicación:", + "apply_variables_to_input": "Aplicar variables a la entrada del usuario", + "attachment_path_or_url_help": "Ruta de adjunto o URL (ej. para mensajes de reconocimiento de imagen de OpenAI)", + "audio_output_file_specified_but_not_tts_model": "se especificó el archivo de salida de audio '%s' pero el modelo '%s' no es un modelo TTS. Por favor usa un modelo TTS como gemini-2.5-flash-preview-tts", + "audio_video_file_transcribe": "Archivo de audio o video para transcribir", + "available_models_header": "Modelos disponibles", + "available_transcription_models": "Modelos de transcripción disponibles:", + "available_vendors_header": "Proveedores Disponibles:", + "azure_api_key_required": "Se requiere la clave API de Azure", + "azure_api_version_question": "Ingrese la versión de la API de Azure (deje en blanco para el valor predeterminado)", + "azure_base_url_required": "Se requiere la URL base de Azure", + "azure_deployments_question": "Ingrese los nombres de sus implementaciones de Azure (separados por comas)", + "azure_failed_extract_deployment": "no se pudo extraer el nombre de la implementación de la solicitud", + "azure_model_field_empty": "el campo de modelo está vacío en el cuerpo de la solicitud", + "azure_request_body_nil": "el cuerpo de la solicitud es nil", + "background_type_help": "Tipo de fondo: opaque, transparent (predeterminado: opaque, solo para PNG/WebP)", + "bedrock_aws_region_label": "Región de AWS", + "bedrock_converse_failed": "bedrock converse falló para el modelo %s: %w", + "bedrock_conversestream_failed": "bedrock conversestream falló para el modelo %s: %w", + "bedrock_empty_response_content": "contenido de respuesta vacío", + "bedrock_failed_list_foundation_models": "error al listar modelos base: %w", + "bedrock_failed_list_inference_profiles": "error al listar perfiles de inferencia: %w", + "bedrock_invalid_aws_region": "región de AWS inválida: %s", + "bedrock_panic_sendstream": "pánico en SendStream: %v", + "bedrock_unable_load_aws_config": "no se pudo cargar la configuración de AWS: %w", + "bedrock_unable_load_aws_config_with_region": "no se pudo cargar la configuración de AWS con región %s: %w", + "bedrock_unexpected_content_block_type": "tipo de bloque de contenido inesperado: %T", + "bedrock_unexpected_response_type": "tipo de respuesta inesperado: %T", + "bedrock_unknown_stream_event_type": "tipo de evento de stream desconocido: %T", + "cannot_convert_string": "no se puede convertir la cadena %q a %v", + "change_default_model": "Cambiar modelo predeterminado", + "chatter_error_empty_response": "respuesta vacía", + "chatter_error_find_context": "no se pudo encontrar el contexto %s: %v", + "chatter_error_find_session": "no se pudo encontrar la sesion %s: %v", + "chatter_error_get_pattern": "no se pudo obtener el patron %s: %v", + "chatter_error_load_strategy": "no se pudo cargar la estrategia %s: %v", + "chatter_error_no_messages_provided": "no se proporcionaron mensajes", + "chatter_error_no_session_pattern_user_messages": "no se proporcionó ninguna sesión, patrón ni mensajes de usuario", + "chatter_error_stream_update": "Error: %s", + "chatter_help_review_changes_with_git_diff": "Puede revisar los cambios con 'git diff' si esta usando git.", + "chatter_info_file_changes_applied_successfully": "Los cambios de archivo se aplicaron correctamente.", + "chatter_log_stream_usage_metadata": "[Metadatos] Entrada: %d | Salida: %d | Total: %d", + "chatter_prompt_enforce_response_language": "%s\n\nIMPORTANTE: Primero, ejecute las instrucciones proporcionadas en este prompt usando la entrada del usuario. Segundo, asegurese de que toda su respuesta final, incluidos los encabezados de seccion o titulos generados como parte de la ejecucion de las instrucciones, este escrita SOLO en el idioma %s.", + "chatter_warning_apply_file_changes_failed": "Advertencia: No se pudieron aplicar los cambios de archivo: %v", + "chatter_warning_get_current_directory_failed": "Advertencia: No se pudo obtener el directorio actual: %v", + "chatter_warning_parse_file_changes_failed": "Advertencia: No se pudieron analizar los cambios de archivo: %v", + "choose_context_from_available": "Elige un contexto de los contextos disponibles", + "choose_model": "Elegir modelo", + "choose_pattern_from_available": "Elige un patrón de los patrones disponibles", + "choose_session_from_available": "Elige una sesión de las sesiones disponibles", + "choose_strategy_from_available": "Elegir una estrategia de las estrategias disponibles", + "command_completed_successfully": "Comando completado exitosamente", + "compression_level_jpeg_webp": "Nivel de compresión 0-100 para formatos JPEG/WebP (predeterminado: no establecido)", + "config_file_not_found": "archivo de configuración no encontrado: %s", + "convert_html_readability": "Convertir entrada HTML en una vista limpia y legible", + "copilot_debug_created_conversation": "Conversación de Copilot creada: %s", + "copilot_debug_failed_parse_sse_event": "Error al analizar el evento SSE: %v", + "copilot_error_chat_request": "solicitud de chat fallida: %s - %s", + "copilot_error_create_conversation": "error al crear la conversación: %s - %s", + "copilot_error_reading_stream": "error al leer la transmisión: %w", + "copilot_error_stream_request": "falló la solicitud de transmisión: %s - %s", + "copilot_failed_create_conversation": "error al crear la conversación: %w", + "copilot_failed_send_message": "error al enviar el mensaje: %w", + "copilot_failed_stream_message": "error al transmitir el mensaje: %w", + "copilot_tenant_client_id_required": "se requieren el ID de inquilino y el ID de cliente", + "copy_to_clipboard": "Copiar al portapapeles", + "could_not_copy_to_clipboard": "no se pudo copiar al portapapeles: %v", "could_not_create_config_dir": "no se pudo crear el directorio de configuración: %w", "could_not_create_env_file": "no se pudo crear el archivo .env: %w", - "could_not_copy_to_clipboard": "no se pudo copiar al portapapeles: %v", - "file_already_exists_not_overwriting": "el archivo %s ya existe, no se sobrescribirá. Renombra el archivo existente o elige un nombre diferente", - "error_creating_file": "error al crear el archivo: %v", - "error_writing_to_file": "error al escribir al archivo: %v", - "error_creating_audio_file": "error al crear el archivo de audio: %v", - "error_writing_audio_data": "error al escribir datos de audio al archivo: %v", - "tts_model_requires_audio_output": "el modelo TTS '%s' requiere salida de audio. Por favor especifica un archivo de salida de audio con la bandera -o (ej., -o output.wav)", - "audio_output_file_specified_but_not_tts_model": "se especificó el archivo de salida de audio '%s' pero el modelo '%s' no es un modelo TTS. Por favor usa un modelo TTS como gemini-2.5-flash-preview-tts", - "file_already_exists_choose_different": "el archivo %s ya existe. Por favor elige un nombre diferente o elimina el archivo existente", - "no_notification_system_available": "no hay sistema de notificaciones disponible", - "cannot_convert_string": "no se puede convertir la cadena %q a %v", - "unsupported_conversion": "conversión no soportada de %v a %v", - "invalid_config_path": "ruta de configuración inválida: %w", - "config_file_not_found": "archivo de configuración no encontrado: %s", - "error_reading_config_file": "error al leer el archivo de configuración: %w", - "error_parsing_config_file": "error al analizar el archivo de configuración: %w", - "error_reading_piped_message": "error al leer mensaje desde stdin: %w", - "image_file_already_exists": "el archivo de imagen ya existe: %s", - "invalid_image_file_extension": "extensión de archivo de imagen inválida '%s'. Formatos soportados: .png, .jpeg, .jpg, .webp", - "image_parameters_require_image_file": "los parámetros de imagen (--image-size, --image-quality, --image-background, --image-compression) solo pueden usarse con --image-file", - "invalid_image_size": "tamaño de imagen inválido '%s'. Tamaños soportados: 1024x1024, 1536x1024, 1024x1536, auto", - "invalid_image_quality": "calidad de imagen inválida '%s'. Calidades soportadas: low, medium, high, auto", - "invalid_image_background": "fondo de imagen inválido '%s'. Fondos soportados: opaque, transparent", - "image_compression_jpeg_webp_only": "la compresión de imagen solo puede usarse con formatos JPEG y WebP, no %s", - "image_compression_range_error": "la compresión de imagen debe estar entre 0 y 100, se obtuvo %d", - "transparent_background_png_webp_only": "el fondo transparente solo puede usarse con formatos PNG y WebP, no %s", - "available_transcription_models": "Modelos de transcripción disponibles:", - "tts_audio_generated_successfully": "Audio TTS generado exitosamente y guardado en: %s\n", - "fabric_command_complete": "Comando Fabric Completado", - "fabric_command_complete_with_pattern": "Fabric: %s Completado", - "command_completed_successfully": "Comando completado exitosamente", - "output_truncated": "Salida: %s...", - "output_full": "Salida: %s", - "choose_pattern_from_available": "Elige un patrón de los patrones disponibles", - "pattern_variables_help": "Valores para variables de patrón, ej. -v=#role:expert -v=#points:30", - "choose_context_from_available": "Elige un contexto de los contextos disponibles", - "choose_session_from_available": "Elige una sesión de las sesiones disponibles", - "attachment_path_or_url_help": "Ruta de adjunto o URL (ej. para mensajes de reconocimiento de imagen de OpenAI)", - "run_setup_for_reconfigurable_parts": "Ejecutar configuración para todas las partes reconfigurables de fabric", - "set_temperature": "Establecer temperatura", - "set_top_p": "Establecer top P", - "stream_help": "Transmitir", - "set_presence_penalty": "Establecer penalización de presencia", - "use_model_defaults_raw_help": "Utiliza los valores predeterminados del modelo sin enviar opciones de chat (temperature, top_p, etc.). Solo afecta a los proveedores compatibles con OpenAI. Los modelos de Anthropic siempre usan una selección inteligente de parámetros para cumplir los requisitos específicos del modelo.", - "set_frequency_penalty": "Establecer penalización de frecuencia", - "list_all_patterns": "Listar todos los patrones", - "list_all_available_models": "Listar todos los modelos disponibles", - "list_all_contexts": "Listar todos los contextos", - "list_all_sessions": "Listar todas las sesiones", - "update_patterns": "Actualizar patrones", - "messages_to_send_to_chat": "Mensajes para enviar al chat", - "copy_to_clipboard": "Copiar al portapapeles", - "choose_model": "Elegir modelo", - "specify_vendor_for_model": "Especificar proveedor para el modelo seleccionado (ej., -V \"LM Studio\" -m openai/gpt-oss-20b)", - "model_context_length_ollama": "Longitud de contexto del modelo (solo afecta a ollama)", - "output_to_file": "Salida a archivo", - "output_entire_session": "Salida de toda la sesión (también una temporal) al archivo de salida", - "number_of_latest_patterns": "Número de patrones más recientes a listar", - "change_default_model": "Cambiar modelo predeterminado", - "youtube_url_help": "Video de YouTube o \"URL\" de lista de reproducción para obtener transcripción, comentarios y enviar al chat o imprimir en la consola y almacenar en el archivo de salida", - "prefer_playlist_over_video": "Preferir lista de reproducción sobre video si ambos ids están presentes en la URL", - "grab_transcript_from_youtube": "Obtener transcripción del video de YouTube y enviar al chat (se usa por defecto).", - "grab_transcript_with_timestamps": "Obtener transcripción del video de YouTube con marcas de tiempo y enviar al chat", - "grab_comments_from_youtube": "Obtener comentarios del video de YouTube y enviar al chat", - "output_video_metadata": "Salida de metadatos del video", - "additional_yt_dlp_args": "Argumentos adicionales para pasar a yt-dlp (ej. '--cookies-from-browser brave')", - "specify_language_code": "Especificar el Código de Idioma para el chat, ej. -g=en -g=zh -g=pt-BR -g=pt-PT", - "scrape_website_url": "Extraer URL del sitio web a markdown usando Jina AI", - "search_question_jina": "Pregunta de búsqueda usando Jina AI", - "seed_for_lmm_generation": "Semilla para ser usada en la generación LMM", - "wipe_context": "Limpiar contexto", - "wipe_session": "Limpiar sesión", - "print_context": "Imprimir contexto", - "print_session": "Imprimir sesión", - "convert_html_readability": "Convertir entrada HTML en una vista limpia y legible", - "apply_variables_to_input": "Aplicar variables a la entrada del usuario", - "disable_pattern_variable_replacement": "Deshabilitar reemplazo de variables de patrón", - "show_dry_run": "Mostrar lo que se enviaría al modelo sin enviarlo realmente", - "serve_fabric_rest_api": "Servir la API REST de Fabric", - "serve_fabric_api_ollama_endpoints": "Servir la API REST de Fabric con endpoints de ollama", - "address_to_bind_rest_api": "La dirección para vincular la API REST", - "api_key_secure_server_routes": "Clave API usada para asegurar rutas del servidor", - "path_to_yaml_config": "Ruta al archivo de configuración YAML", - "print_current_version": "Imprimir versión actual", - "list_all_registered_extensions": "Listar todas las extensiones registradas", - "register_new_extension": "Registrar una nueva extensión desde la ruta del archivo de configuración", - "remove_registered_extension": "Eliminar una extensión registrada por nombre", - "choose_strategy_from_available": "Elegir una estrategia de las estrategias disponibles", - "list_all_strategies": "Listar todas las estrategias", - "list_all_vendors": "Listar todos los proveedores", - "output_raw_list_shell_completion": "Salida de lista sin procesar sin encabezados/formato (para completado de shell)", - "enable_web_search_tool": "Habilitar herramienta de búsqueda web para modelos soportados (Anthropic, OpenAI, Gemini)", - "set_location_web_search": "Establecer ubicación para resultados de búsqueda web (ej., 'America/Los_Angeles')", - "save_generated_image_to_file": "Guardar imagen generada en la ruta de archivo especificada (ej., 'output.png')", - "image_dimensions_help": "Dimensiones de imagen: 1024x1024, 1536x1024, 1024x1536, auto (predeterminado: auto)", - "image_quality_help": "Calidad de imagen: low, medium, high, auto (predeterminado: auto)", - "compression_level_jpeg_webp": "Nivel de compresión 0-100 para formatos JPEG/WebP (predeterminado: no establecido)", - "background_type_help": "Tipo de fondo: opaque, transparent (predeterminado: opaque, solo para PNG/WebP)", - "suppress_thinking_tags": "Suprimir texto encerrado en etiquetas de pensamiento", - "start_tag_thinking_sections": "Etiqueta de inicio para secciones de pensamiento", - "end_tag_thinking_sections": "Etiqueta de fin para secciones de pensamiento", - "disable_openai_responses_api": "Deshabilitar API de Respuestas de OpenAI (predeterminado: false)", - "audio_video_file_transcribe": "Archivo de audio o video para transcribir", - "model_for_transcription": "Modelo para usar en transcripción (separado del modelo de chat)", - "split_media_files_ffmpeg": "Dividir archivos de audio/video mayores a 25MB usando ffmpeg", - "tts_voice_name": "Nombre de voz TTS para modelos soportados (ej., Kore, Charon, Puck)", - "list_gemini_tts_voices": "Listar todas las voces TTS de Gemini disponibles", - "list_transcription_models": "Listar todos los modelos de transcripción disponibles", - "send_desktop_notification": "Enviar notificación de escritorio cuando se complete el comando", + "could_not_determine_home_dir": "no se pudo determinar el directorio home del usuario: %w", + "could_not_stat_env_file": "no se pudo verificar el archivo .env: %w", "custom_notification_command": "Comando personalizado para ejecutar notificaciones (anula las notificaciones integradas)", - "set_reasoning_thinking_level": "Establecer nivel de razonamiento/pensamiento (ej., off, low, medium, high, o tokens numéricos para Anthropic o Google Gemini)", - "set_debug_level": "Establecer nivel de depuración (0=apagado, 1=básico, 2=detallado, 3=rastreo)", - "usage_header": "Uso:", - "application_options_header": "Opciones de la Aplicación:", - "help_options_header": "Opciones de Ayuda:", - "help_message": "Mostrar este mensaje de ayuda", - "options_placeholder": "[OPCIONES]", - "available_vendors_header": "Proveedores Disponibles:", - "available_models_header": "Modelos disponibles", - "no_items_found": "No hay %s", - "no_description_available": "No hay descripción disponible", - "i18n_download_failed": "Error al descargar traducción para el idioma '%s': %v", - "i18n_load_failed": "Error al cargar archivo de traducción: %v", - "setup_welcome_header": "🎉 ¡Bienvenido a Fabric! Vamos a configurarte.", - "setup_step_downloading_patterns": "📥 Paso 1: Descargando patrones (requeridos para que Fabric funcione)...", - "setup_step_downloading_strategies": "📥 Paso 2: Descargando estrategias (requeridas para que Fabric funcione)...", - "setup_step_configure_ai_provider": "🤖 Paso 3: Configurar un proveedor de IA", - "setup_ai_provider_required": "Fabric necesita al menos un proveedor de IA para funcionar.", - "setup_add_more_providers_later": "Podrás agregar más proveedores después con 'fabric --setup'", - "setup_step_setting_defaults": "⚙️ Paso 4: Estableciendo proveedor y modelo predeterminados...", - "setup_complete_header": "✅ ¡Configuración completa! Ya puedes usar Fabric.", - "setup_next_steps": "Próximos pasos:", - "setup_list_patterns": "• Listar patrones disponibles: fabric -l", - "setup_try_pattern": "• Probar un patrón: echo 'tu texto' | fabric --pattern summarize", - "setup_configure_more": "• Configurar más opciones: fabric --setup", - "setup_failed_download_patterns": "error al descargar patrones: %w", - "setup_failed_download_strategies": "error al descargar estrategias: %w", - "setup_failed_set_defaults": "error al establecer proveedor y modelo predeterminados: %w", - "setup_no_ai_provider_selected": "no se seleccionó proveedor de IA - se requiere al menos uno", - "setup_invalid_selection": "selección inválida: %s", - "setup_available_ai_providers": "Proveedores de IA Disponibles:", - "setup_enter_ai_provider_number": "Número de Proveedor de IA", - "setup_available_plugins": "Plugins disponibles:", - "setup_plugin_number": "Número de Plugin", - "setup_plugin_prompt": "Introduce el número del plugin a configurar", - "setup_required_configuration_header": "━━━ CONFIGURACIÓN REQUERIDA ━━━\n\nProveedores de IA [se requiere al menos uno]", - "setup_required_tools": "Herramientas Requeridas", - "setup_optional_configuration_header": "━━━ CONFIGURACIÓN OPCIONAL ━━━\n\nHerramientas Opcionales", - "setup_validation_header": "Estado de Configuración:", - "setup_validation_ai_provider_configured": "✓ Proveedor de IA configurado", - "setup_validation_ai_provider_missing": "✗ Proveedor de IA no configurado - Requerido para que Fabric funcione", - "setup_validation_defaults_configured": "✓ Proveedor/modelo predeterminado establecido: %s/%s", - "setup_validation_defaults_missing": "✗ Proveedor/modelo predeterminado no establecido - Requerido para que Fabric funcione", - "setup_validation_patterns_configured": "✓ Patrones descargados", - "setup_validation_patterns_missing": "✗ Patrones no encontrados - Requeridos para que Fabric funcione", - "setup_validation_strategies_configured": "✓ Estrategias descargadas", - "setup_validation_strategies_missing": "✗ Estrategias no encontradas - Requeridas para que Fabric funcione", - "setup_validation_incomplete_warning": "⚠️ ¡Configuración incompleta! Faltan componentes requeridos.", - "setup_validation_incomplete_help": "Ejecuta 'fabric --setup' de nuevo para configurar los elementos faltantes,\no ejecuta 'fabric -U' para descargar patrones y estrategias.", - "setup_validation_complete": "✓ ¡Todos los componentes requeridos configurados!", - "patterns_not_found_header": "⚠️ ¡No se encontraron patrones!", - "patterns_required_to_work": "Los patrones son requeridos para que Fabric funcione. Para solucionar esto:", - "patterns_option_run_setup": "Opción 1 (Recomendada): Ejecutar configuración para descargar patrones", - "patterns_option_run_setup_command": "fabric --setup", - "patterns_option_run_update": "Opción 2: Descargar/actualizar patrones directamente", - "patterns_option_run_update_command": "fabric -U", - "pattern_not_found_no_patterns": "patrón '%s' no encontrado.\n\n¡No hay patrones instalados! Para solucionar esto:\n • Ejecuta 'fabric --setup' para configurar y descargar patrones\n • O ejecuta 'fabric -U' para descargar/actualizar patrones directamente", - "pattern_not_found_list_available": "patrón '%s' no encontrado. Ejecuta 'fabric -l' para ver los patrones disponibles", - "plugin_configured": " ✓", - "plugin_not_configured": " ⚠️ NO CONFIGURADO", - "defaults_setup_description": "Proveedor y modelo de IA predeterminados", - "defaults_model_question": "Introduce el índice o el nombre de tu modelo predeterminado", - "defaults_model_context_length_question": "Introduce la longitud del contexto del modelo", + "custom_patterns_directory_question": "Introduce la ruta a tu directorio de patrones personalizados", "custom_patterns_label": "Patrones personalizados", "custom_patterns_setup_description": "Patrones personalizados - Establecer directorio para tus patrones personalizados", - "custom_patterns_directory_question": "Introduce la ruta a tu directorio de patrones personalizados", + "defaults_model_context_length_question": "Introduce la longitud del contexto del modelo", + "defaults_model_question": "Introduce el índice o el nombre de tu modelo predeterminado", + "defaults_setup_description": "Proveedor y modelo de IA predeterminados", + "disable_openai_responses_api": "Deshabilitar API de Respuestas de OpenAI (predeterminado: false)", + "disable_pattern_variable_replacement": "Deshabilitar reemplazo de variables de patrón", + "enable_web_search_tool": "Habilitar herramienta de búsqueda web para modelos soportados (Anthropic, OpenAI, Gemini)", + "end_tag_thinking_sections": "Etiqueta de fin para secciones de pensamiento", + "error_creating_audio_file": "error al crear el archivo de audio: %v", + "error_creating_file": "error al crear el archivo: %v", + "error_fetching_playlist_videos": "error al obtener videos de la lista de reproducción: %w", + "error_parsing_config_file": "error al analizar el archivo de configuración: %w", + "error_reading_config_file": "error al leer el archivo de configuración: %w", + "error_reading_piped_message": "error al leer mensaje desde stdin: %w", + "error_writing_audio_data": "error al escribir datos de audio al archivo: %v", + "error_writing_to_file": "error al escribir al archivo: %v", + "extension_cmd_template_required": "la plantilla de comando es obligatoria para la operación %s", + "extension_command_template_label": " Plantilla de comando: %s\n", + "extension_config_hash_mismatch": "discrepancia de hash del archivo de configuración para %s", + "extension_config_path_label": " Ruta de configuración: %s\n\n", + "extension_description_label": " Descripción: %s\n", + "extension_empty_command": "comando vacío después del formateo", + "extension_executable_hash_mismatch": "discrepancia de hash del ejecutable para %s", + "extension_executable_label": " Ejecutable: %s\n", + "extension_executable_not_found": "ejecutable no encontrado: %w", + "extension_executable_required": "la ruta del ejecutable es obligatoria", + "extension_executing_command": "Ejecutando comando: %s\n", + "extension_execution_failed_err": "la ejecución falló: %w\nerr: %s", + "extension_execution_failed_stderr": "la ejecución falló: %w\nstderr: %s", + "extension_execution_timed_out": "la ejecución expiró después de %v", + "extension_failed_format_command": "no se pudo formatear el comando: %w", + "extension_failed_get_absolute_path": "no se pudo obtener la ruta absoluta: %w", + "extension_failed_get_extension": "no se pudo obtener la extensión: %w", + "extension_failed_get_output_path": "no se pudo obtener la ruta de salida: %w\nerr: %s", + "extension_failed_hash_executable": "no se pudo calcular el hash del ejecutable: %w", + "extension_failed_marshal_registry": "no se pudo serializar el registro de extensiones: %w", + "extension_failed_parse_config": "error al analizar el archivo de configuración: %w", + "extension_failed_parse_registry": "no se pudo analizar el registro de extensiones: %w", + "extension_failed_read_config": "error al leer el archivo de configuración: %w", + "extension_failed_read_output_file": "no se pudo leer el archivo de salida: %w", + "extension_failed_read_registry": "no se pudo leer el registro de extensiones: %w", + "extension_failed_register": "error al registrar la extensión: %w", + "extension_failed_remove": "error al eliminar la extensión: %w", + "extension_failed_verify_executable": "no se pudo verificar el ejecutable: %w", + "extension_file_config_label": " Configuración de archivo:\n", + "extension_invalid_config_path": "ruta de configuración inválida: %w", + "extension_invalid_definition": "definición de extensión inválida: %w", + "extension_invalid_timeout": "valor de tiempo límite inválido '%s': debe ser una duración como '30s' o '1m': %w", + "extension_invalid_timeout_format": "formato de tiempo límite inválido: %w", + "extension_name_contains_spaces": "el nombre de la extensión '%s' contiene espacios - los nombres no deben contener espacios", + "extension_name_detail_label": "Nombre: %s\n", + "extension_name_empty": "el nombre de la extensión no puede estar vacío", + "extension_name_label": "Extensión: %s\n", + "extension_name_required": "el nombre de la extensión es obligatorio", + "extension_no_file_config": "no se encontró configuración de archivo", + "extension_no_output_file": "no se especificó archivo de salida en la configuración", + "extension_not_found": "extensión %s no encontrada", + "extension_operation_not_found": "operación %s no encontrada para la extensión %s", + "extension_operation_required": "se debe definir al menos una operación", + "extension_operations_label": " Operaciones:\n", + "extension_registered_success": "Extensión registrada exitosamente:\n", + "extension_registry_not_initialized": "registro de extensiones no inicializado", + "extension_status_disabled": " Estado: DESHABILITADA - Verificación de hash fallida: %v\n", + "extension_status_enabled": " Estado: HABILITADA\n", + "extension_timeout_label": " Tiempo límite: %s\n", + "extension_type_label": " Tipo: %s\n", + "extension_type_required": "el tipo de extensión es obligatorio", + "extension_version_label": " Versión: %s\n", + "extension_warning_load_registry": "Advertencia: no se pudo cargar el registro de extensiones: %v\n", + "fabric_command_complete": "Comando Fabric Completado", + "fabric_command_complete_with_pattern": "Fabric: %s Completado", + "fetch_content_exceeds_limit": "fetch: contenido demasiado grande: supera %d bytes", + "fetch_content_not_utf8": "fetch: el contenido no es texto UTF-8 válido", + "fetch_content_null_bytes": "fetch: el contenido contiene bytes nulos", + "fetch_content_too_large": "fetch: contenido demasiado grande: %d bytes (máx %d bytes)", + "fetch_error_create_request": "fetch: error al crear la solicitud: %v", + "fetch_error_fetching_url": "fetch: error al obtener la URL: %v", + "fetch_error_reading_response": "fetch: error al leer la respuesta: %v", + "fetch_http_error": "fetch: error HTTP: %d - %s", + "fetch_unknown_operation": "fetch: operación desconocida %q (admitida: get)", + "fetch_unsupported_content_type": "fetch: tipo de contenido no admitido %q - solo se permite contenido de texto", + "file_already_exists_choose_different": "el archivo %s ya existe. Por favor elige un nombre diferente o elimina el archivo existente", + "file_already_exists_not_overwriting": "el archivo %s ya existe, no se sobrescribirá. Renombra el archivo existente o elige un nombre diferente", + "file_manager_applied_operation": "Operación %s aplicada a %s", + "file_manager_empty_path": "ruta vacía para el cambio de archivo %d", + "file_manager_failed_create_directory": "error al crear el directorio %s para el cambio de archivo %d: %w", + "file_manager_failed_parse_json": "error al analizar %s JSON: %w", + "file_manager_failed_write_file": "error al escribir el archivo %s para el cambio de archivo %d: %w", + "file_manager_file_content_too_large": "contenido del archivo demasiado grande para el cambio de archivo %d: %d bytes", + "file_manager_invalid_format_no_json_array": "formato %s no válido: no se encontró ningún array JSON", + "file_manager_invalid_format_unbalanced_brackets": "formato %s no válido: corchetes desequilibrados", + "file_manager_invalid_operation": "operación no válida para el cambio de archivo %d: %s", + "file_manager_suspicious_path": "ruta sospechosa para el cambio de archivo %d: %s", + "gemini_audio_data_too_small": "datos de audio demasiado pequeños: %d bytes, mínimo requerido: %d", + "gemini_empty_pcm_data": "datos PCM vacíos proporcionados", + "gemini_invalid_location_format": "formato de ubicación de búsqueda inválido %q: debe ser zona horaria (ej. 'America/Los_Angeles') o código de idioma (ej. 'en-US')", + "gemini_invalid_voice": "voz inválida '%s'. Las voces válidas son: %v", + "gemini_no_audio_data": "no se recibieron datos de audio del modelo TTS", + "gemini_no_text_for_tts": "no se encontró contenido de texto para generación TTS", + "gemini_pcm_data_too_large": "datos PCM demasiado grandes: %d bytes, máximo permitido: %d", + "gemini_stream_error": "Error: %v", + "gemini_tts_failed": "generación TTS fallida: %w", + "gemini_unexpected_data_type": "tipo de dato inesperado: %s, se esperaban datos de audio", + "gemini_wav_data_invalid": "datos WAV generados inválidos: %d bytes, mínimo requerido: %d", + "gemini_wav_generation_failed": "no se pudo generar el archivo WAV: %w", + "grab_comments_from_youtube": "Obtener comentarios del video de YouTube y enviar al chat", + "grab_transcript_from_youtube": "Obtener transcripción del video de YouTube y enviar al chat (se usa por defecto).", + "grab_transcript_with_timestamps": "Obtener transcripción del video de YouTube con marcas de tiempo y enviar al chat", + "groups_items_number_out_of_range": "el número %d está fuera de rango", + "help_message": "Mostrar este mensaje de ayuda", + "help_options_header": "Opciones de Ayuda:", + "html_readability_error": "usa la entrada original, porque no se puede aplicar la legibilidad de html", + "i18n_download_failed": "Error al descargar traducción para el idioma '%s': %v", + "i18n_load_failed": "Error al cargar archivo de traducción: %v", + "image_compression_jpeg_webp_only": "la compresión de imagen solo puede usarse con formatos JPEG y WebP, no %s", + "image_compression_range_error": "la compresión de imagen debe estar entre 0 y 100, se obtuvo %d", + "image_dimensions_help": "Dimensiones de imagen: 1024x1024, 1536x1024, 1024x1536, auto (predeterminado: auto)", + "image_file_already_exists": "el archivo de imagen ya existe: %s", + "image_parameters_require_image_file": "los parámetros de imagen (--image-size, --image-quality, --image-background, --image-compression) solo pueden usarse con --image-file", + "image_quality_help": "Calidad de imagen: low, medium, high, auto (predeterminado: auto)", + "invalid_config_path": "ruta de configuración inválida: %w", + "invalid_image_background": "fondo de imagen inválido '%s'. Fondos soportados: opaque, transparent", + "invalid_image_file_extension": "extensión de archivo de imagen inválida '%s'. Formatos soportados: .png, .jpeg, .jpg, .webp", + "invalid_image_quality": "calidad de imagen inválida '%s'. Calidades soportadas: low, medium, high, auto", + "invalid_image_size": "tamaño de imagen inválido '%s'. Tamaños soportados: 1024x1024, 1536x1024, 1024x1536, auto", + "jina_error_creating_request": "error al crear la solicitud: %v", + "jina_error_reading_response_body": "error al leer el cuerpo de la respuesta: %v", + "jina_error_sending_request": "error al enviar la solicitud: %v", "jina_label": "Jina AI", "jina_setup_description": "Servicio Jina AI - para obtener una página web como texto limpio y compatible con LLM", - "youtube_label": "YouTube", - "youtube_setup_description": "YouTube - para obtener transcripciones de video (vía yt-dlp) y comentarios/metadatos (vía API de YouTube)", "language_label": "Idioma", - "language_setup_description": "Idioma - Idioma de salida predeterminado del proveedor de IA", "language_output_question": "Ingrese su idioma de salida predeterminado (por ejemplo: zh_CN)", - "optional_marker": "(opcional)", - "required_marker": "[obligatorio]", - "patterns_loader_label": "Cargador de patrones", - "patterns_setup_description": "Patrones - Descarga patrones", - "patterns_git_repo_url_label": "URL del repositorio Git", - "patterns_git_repo_url_question": "Introduce la URL predeterminada del repositorio Git para los patrones", - "patterns_git_repo_folder_label": "Carpeta de patrones en el repositorio Git", - "patterns_git_repo_folder_question": "Introduce la carpeta predeterminada en el repositorio Git donde se almacenan los patrones", - "patterns_failed_create_temp_folder": "no se pudo crear la carpeta temporal de patrones: %w", - "patterns_downloading": "Descargando patrones y llenando %s...\\n", - "patterns_failed_download_from_git": "error al descargar patrones del repositorio Git: %w", - "patterns_saving_updated_configuration": "💾 Guardando configuración actualizada (ruta cambiada de '%s' a '%s')...\\n", - "patterns_failed_move_patterns": "error al mover los patrones al directorio de configuración: %w", - "patterns_download_success": "✅ Patrones descargados e instalados correctamente en %s\\n", - "patterns_failed_unique_file": "error al crear el archivo de patrones únicos: %w", - "patterns_failed_access_directory": "error al acceder al directorio de patrones '%s': %w", - "patterns_preserve_warning": "Advertencia: no se pudo conservar el patrón personalizado '%s': %v\\n", - "patterns_preserved_custom_pattern": "Patrón personalizado conservado: %s\\n", - "patterns_failed_create_temp_dir": "no se pudo crear el directorio temporal: %w", - "patterns_cloning_repository": "Clonando el repositorio %s (ruta: %s)...\\n", - "patterns_failed_download_from_repo": "error al descargar patrones de %s: %w", - "patterns_failed_read_temp_directory": "error al leer el directorio temporal de patrones: %w", - "patterns_no_patterns_migration_failed": "no se encontraron patrones en el repositorio en la ruta %s y la migración falló: %w", - "patterns_downloaded_temp": "Se descargaron %d patrones al directorio temporal\\n", - "patterns_detected_old_path": "🔄 Se detectó la ruta antigua de patrones 'patterns', intentando migrar a 'data/patterns'...", - "patterns_warning_remove_test_folder": "Advertencia: no se pudo eliminar la carpeta temporal de prueba '%s': %v\\n", - "patterns_found_new_path": "✅ Se encontraron %d patrones en la nueva ruta '%s', actualizando configuración...\\n", - "patterns_failed_move_test_patterns": "error al mover los patrones de prueba al directorio temporal: %w", - "patterns_unable_to_find_or_migrate": "no se pudieron encontrar patrones en la ruta actual '%s' ni migrar a la nueva estructura", - "patterns_failed_read_directory": "error al leer el directorio de patrones: %w", - "patterns_debug_included_custom_directory": "📂 También se incluyeron patrones del directorio personalizado: %s\\n", - "patterns_warning_custom_directory": "Advertencia: no se pudo leer el directorio de patrones personalizado %s: %v\\n", - "patterns_no_patterns_found_in_directories": "no se encontraron patrones en los directorios %s y %s", - "patterns_no_patterns_found_in_directory": "no se encontraron patrones en el directorio %s", - "patterns_failed_write_unique_file": "error al escribir el archivo de patrones únicos: %w", - "patterns_unique_file_created": "📝 Archivo de patrones únicos creado con %d patrones\\n", - "patterns_no_patterns_copied": "no se copiaron patrones correctamente en %s", - "patterns_failed_loaded_marker": "no se pudo crear el archivo indicador '%s': %w", - "strategies_label": "Estrategias de prompts", - "strategies_setup_description": "Estrategias - Descarga estrategias de prompting (como chain of thought)", - "strategies_git_repo_url_label": "URL del repositorio Git", - "strategies_git_repo_url_question": "Introduce la URL predeterminada del repositorio Git para las estrategias", - "strategies_git_repo_folder_label": "Carpeta de estrategias en el repositorio Git", - "strategies_git_repo_folder_question": "Introduce la carpeta predeterminada en el repositorio Git donde se almacenan las estrategias", - "strategies_downloading": "Descargando estrategias y llenando %s...\\n", - "strategies_download_success": "✅ Estrategias descargadas e instaladas correctamente en %s\\n", - "strategies_home_dir_error": "no se pudo obtener el directorio personal: %v", - "strategies_failed_create_directory": "no se pudo crear el directorio de estrategias: %w", - "strategies_cloning_repository": "Clonando el repositorio %s (ruta: %s)...\\n", - "strategies_failed_download": "error al descargar estrategias: %w", - "strategies_downloaded_count": "Se descargaron %d estrategias\\n", - "strategies_home_dir_fallback": "no se pudo obtener el directorio personal: %v, usando el directorio actual en su lugar", - "strategy_not_found": "estrategia %s no encontrada. Ejecuta 'fabric --liststrategies' para ver la lista", - "strategies_none_found": "no se encontraron estrategias. Ejecuta 'fabric --setup' para descargar estrategias", - "strategies_available_header": "Estrategias disponibles:", - "plugin_enter_value": "Introduce tu %v %v", - "plugin_enable_bool_question": "Habilitar %v %v (true/false)", - "plugin_setup_skipped": "[%v] omitido\\n", - "plugin_question_bool": "%v%v (true/false, deja vacío para '%s' o escribe '%v' para eliminar el valor):", - "plugin_question_with_default": "%v%v (deja vacío para '%s' o escribe '%v' para eliminar el valor):", - "plugin_question_optional": "%v%v (deja vacío para omitir):", - "plugin_invalid_boolean_value": "valor booleano no válido: %v", - "plugin_setting_not_valid": "%v=%v no es válido", - "plugin_invalid_bool": "bool no válido: %q", - "ollama_num_ctx_must_be_finite": "num_ctx debe ser un número finito", - "ollama_num_ctx_must_be_integer": "num_ctx debe ser un entero, se obtuvo float con parte fraccionaria", - "ollama_num_ctx_value_out_of_range": "valor num_ctx fuera de rango", - "ollama_num_ctx_must_be_positive": "num_ctx debe ser positivo, se obtuvo: %d", - "ollama_num_ctx_value_too_large": "valor num_ctx demasiado grande: %d", - "ollama_num_ctx_must_be_valid_number": "num_ctx debe ser un número válido", - "ollama_num_ctx_must_be_valid_number_got": "num_ctx debe ser un número válido, se obtuvo: %s", - "ollama_num_ctx_invalid_type": "num_ctx debe ser un número, se obtuvo tipo inválido", - "ollama_num_ctx_exceeds_maximum": "num_ctx excede el valor máximo permitido de %d", - "ollama_error_reading_body": "Error al leer el cuerpo: %v", - "ollama_error_endpoint": "probando endpoint", - "ollama_error_unmarshalling_body": "Error al deserializar el cuerpo: %v", - "ollama_invalid_num_ctx_in_request": "num_ctx inválido en la solicitud: %v", - "ollama_warning_parse_variables": "Advertencia: error al analizar options.variables como JSON: %v", - "ollama_error_marshalling_body": "Error al serializar el cuerpo: %v", + "language_setup_description": "Idioma - Idioma de salida predeterminado del proveedor de IA", + "list_all_available_models": "Listar todos los modelos disponibles", + "list_all_contexts": "Listar todos los contextos", + "list_all_patterns": "Listar todos los patrones", + "list_all_registered_extensions": "Listar todas las extensiones registradas", + "list_all_sessions": "Listar todas las sesiones", + "list_all_strategies": "Listar todas las estrategias", + "list_all_vendors": "Listar todos los proveedores", + "list_gemini_tts_voices": "Listar todas las voces TTS de Gemini disponibles", + "list_transcription_models": "Listar todos los modelos de transcripción disponibles", + "lmstudio_api_url_question": "Introduzca su URL de %v (como recordatorio, generalmente es %v)", + "lmstudio_error_reading_response": "error al leer la respuesta: %w", + "lmstudio_failed_create_request": "error al crear la solicitud: %w", + "lmstudio_failed_decode_response": "error al decodificar la respuesta: %w", + "lmstudio_failed_marshal_payload": "error al serializar la carga útil: %w", + "lmstudio_failed_send_request": "error al enviar la solicitud: %w", + "lmstudio_invalid_response_missing_choices": "formato de respuesta inválido: opciones ausentes o vacías", + "lmstudio_invalid_response_missing_content": "formato de respuesta inválido: contenido ausente o no es una cadena en el mensaje", + "lmstudio_invalid_response_missing_message": "formato de respuesta inválido: mensaje ausente en la primera opción", + "lmstudio_invalid_response_missing_text": "formato de respuesta inválido: texto ausente o no es una cadena en la primera opción", + "lmstudio_no_embeddings_returned": "no se devolvieron incrustaciones", + "lmstudio_unexpected_status_code": "código de estado inesperado: %d", + "model_context_length_ollama": "Longitud de contexto del modelo (solo afecta a ollama)", + "model_for_transcription": "Modelo para usar en transcripción (separado del modelo de chat)", + "no_description_available": "No hay descripción disponible", + "no_items_found": "No hay %s", + "no_notification_system_available": "no hay sistema de notificaciones disponible", + "number_of_latest_patterns": "Número de patrones más recientes a listar", + "ollama_cannot_parse_url": "No se puede analizar la URL '%s': %v", + "ollama_chat_request_failed": "Solicitud de chat fallida: %v", + "ollama_empty_address": "dirección vacía", "ollama_error_building_chat_url": "Error al construir la URL /chat: %v", "ollama_error_creating_chat_request": "Error al crear la solicitud /chat: %v", - "ollama_failed_create_request": "error al crear la solicitud", + "ollama_error_endpoint": "probando endpoint", "ollama_error_getting_chat_body": "Error al obtener el cuerpo /chat: %v", - "ollama_upstream_non_2xx_body_unreadable": "El servidor Fabric upstream devolvió estado no-2xx %d y el cuerpo no se pudo leer: %v", - "ollama_upstream_non_2xx": "El servidor Fabric upstream devolvió estado no-2xx %d: %s", - "ollama_upstream_returned_status": "el servidor Fabric upstream devolvió estado %d", - "ollama_error_prefix": "Error: %s", + "ollama_error_marshalling_body": "Error al serializar el cuerpo: %v", "ollama_error_parse_upstream_response": "Error: no se pudo analizar la respuesta upstream", - "ollama_failed_unmarshal_fabric_response": "error al deserializar la respuesta Fabric", - "ollama_error_writing_response": "Error al escribir la respuesta: %v", + "ollama_error_prefix": "Error: %s", + "ollama_error_reading_body": "Error al leer el cuerpo: %v", "ollama_error_scanning_body": "Error al escanear el cuerpo: %v", + "ollama_error_unmarshalling_body": "Error al deserializar el cuerpo: %v", + "ollama_error_writing_response": "Error al escribir la respuesta: %v", + "ollama_failed_create_request": "error al crear la solicitud", + "ollama_failed_decode_data_url": "no se pudo decodificar la URL de datos: %v", + "ollama_failed_fetch_image": "no se pudo obtener la imagen de %s: %s", "ollama_failed_scan_sse_stream": "error al escanear el flujo de respuesta SSE: %v", - "ollama_sse_buffer_limit": "Línea SSE excede el límite de búfer de 1MB - línea de datos demasiado grande", - "ollama_warning_no_content": "Advertencia: no se recibió contenido del servidor Fabric upstream", - "ollama_no_content_from_upstream": "no se recibió contenido del servidor Fabric upstream", - "ollama_empty_address": "dirección vacía", + "ollama_failed_unmarshal_fabric_response": "error al deserializar la respuesta Fabric", + "ollama_http_timeout_question": "Ingrese el tiempo de espera HTTP (por ejemplo, 20m, 60s)", "ollama_invalid_address": "dirección inválida: %w", "ollama_invalid_address_missing_host": "dirección inválida: falta el host", "ollama_invalid_address_missing_hostname": "dirección inválida: falta el nombre de host", "ollama_invalid_address_path_not_allowed": "dirección inválida: componente de ruta no permitido en dirección simple", - "extension_registry_not_initialized": "registro de extensiones no inicializado", - "extension_name_label": "Extensión: %s\n", - "extension_status_disabled": " Estado: DESHABILITADA - Verificación de hash fallida: %v\n", - "extension_config_path_label": " Ruta de configuración: %s\n\n", - "extension_status_enabled": " Estado: HABILITADA\n", - "extension_executable_label": " Ejecutable: %s\n", - "extension_type_label": " Tipo: %s\n", - "extension_timeout_label": " Tiempo límite: %s\n", - "extension_description_label": " Descripción: %s\n", - "extension_version_label": " Versión: %s\n", - "extension_operations_label": " Operaciones:\n", - "extension_command_template_label": " Plantilla de comando: %s\n", - "extension_file_config_label": " Configuración de archivo:\n", - "extension_invalid_config_path": "ruta de configuración inválida: %w", - "extension_failed_read_config": "error al leer el archivo de configuración: %w", - "extension_failed_parse_config": "error al analizar el archivo de configuración: %w", - "extension_failed_register": "error al registrar la extensión: %w", - "extension_invalid_timeout": "valor de tiempo límite inválido '%s': debe ser una duración como '30s' o '1m': %w", - "extension_registered_success": "Extensión registrada exitosamente:\n", - "extension_name_detail_label": "Nombre: %s\n", - "extension_failed_remove": "error al eliminar la extensión: %w", - "lmstudio_api_url_question": "Introduzca su URL de %v (como recordatorio, generalmente es %v)", - "lmstudio_failed_create_request": "error al crear la solicitud: %w", - "lmstudio_failed_send_request": "error al enviar la solicitud: %w", - "lmstudio_unexpected_status_code": "código de estado inesperado: %d", - "lmstudio_failed_decode_response": "error al decodificar la respuesta: %w", - "lmstudio_failed_marshal_payload": "error al serializar la carga útil: %w", - "lmstudio_error_reading_response": "error al leer la respuesta: %w", - "lmstudio_invalid_response_missing_choices": "formato de respuesta inválido: opciones ausentes o vacías", - "lmstudio_invalid_response_missing_message": "formato de respuesta inválido: mensaje ausente en la primera opción", - "lmstudio_invalid_response_missing_content": "formato de respuesta inválido: contenido ausente o no es una cadena en el mensaje", - "lmstudio_invalid_response_missing_text": "formato de respuesta inválido: texto ausente o no es una cadena en la primera opción", - "lmstudio_no_embeddings_returned": "no se devolvieron incrustaciones", - "extension_warning_load_registry": "Advertencia: no se pudo cargar el registro de extensiones: %v\n", - "extension_name_empty": "el nombre de la extensión no puede estar vacío", - "extension_name_contains_spaces": "el nombre de la extensión '%s' contiene espacios - los nombres no deben contener espacios", - "extension_executable_not_found": "ejecutable no encontrado: %w", - "extension_failed_get_absolute_path": "no se pudo obtener la ruta absoluta: %w", - "extension_failed_hash_executable": "no se pudo calcular el hash del ejecutable: %w", - "extension_invalid_definition": "definición de extensión inválida: %w", - "extension_name_required": "el nombre de la extensión es obligatorio", - "extension_executable_required": "la ruta del ejecutable es obligatoria", - "extension_type_required": "el tipo de extensión es obligatorio", - "extension_invalid_timeout_format": "formato de tiempo límite inválido: %w", - "extension_operation_required": "se debe definir al menos una operación", - "extension_cmd_template_required": "la plantilla de comando es obligatoria para la operación %s", - "extension_not_found": "extensión %s no encontrada", - "extension_config_hash_mismatch": "discrepancia de hash del archivo de configuración para %s", - "extension_failed_verify_executable": "no se pudo verificar el ejecutable: %w", - "extension_executable_hash_mismatch": "discrepancia de hash del ejecutable para %s", - "extension_failed_marshal_registry": "no se pudo serializar el registro de extensiones: %w", - "extension_failed_read_registry": "no se pudo leer el registro de extensiones: %w", - "extension_failed_parse_registry": "no se pudo analizar el registro de extensiones: %w", - "extension_failed_get_extension": "no se pudo obtener la extensión: %w", - "extension_failed_format_command": "no se pudo formatear el comando: %w", - "extension_empty_command": "comando vacío después del formateo", - "extension_operation_not_found": "operación %s no encontrada para la extensión %s", - "extension_executing_command": "Ejecutando comando: %s\n", - "extension_execution_failed_stderr": "la ejecución falló: %w\nstderr: %s", - "extension_no_file_config": "no se encontró configuración de archivo", - "extension_no_output_file": "no se especificó archivo de salida en la configuración", - "extension_execution_timed_out": "la ejecución expiró después de %v", - "extension_execution_failed_err": "la ejecución falló: %w\nerr: %s", - "extension_failed_read_output_file": "no se pudo leer el archivo de salida: %w", - "extension_failed_get_output_path": "no se pudo obtener la ruta de salida: %w\nerr: %s", - "spotify_failed_create_token_request": "no se pudo crear la solicitud de token: %w", - "spotify_failed_request_access_token": "no se pudo solicitar el token de acceso: %w", - "spotify_failed_get_access_token": "no se pudo obtener el token de acceso: estado %d, respuesta: %s", - "spotify_failed_decode_token_response": "no se pudo decodificar la respuesta del token: %w", - "spotify_failed_create_request": "no se pudo crear la solicitud: %w", - "spotify_failed_execute_request": "no se pudo ejecutar la solicitud: %w", - "spotify_failed_read_response_body": "no se pudo leer el cuerpo de la respuesta: %w", + "ollama_invalid_data_url_format": "formato de URL de datos inválido", + "ollama_invalid_http_timeout_using_default": "Tiempo de espera HTTP inválido '%s': %v, usando el valor predeterminado", + "ollama_invalid_num_ctx_in_request": "num_ctx inválido en la solicitud: %v", + "ollama_no_content_from_upstream": "no se recibió contenido del servidor Fabric upstream", + "ollama_num_ctx_exceeds_maximum": "num_ctx excede el valor máximo permitido de %d", + "ollama_num_ctx_invalid_type": "num_ctx debe ser un número, se obtuvo tipo inválido", + "ollama_num_ctx_must_be_finite": "num_ctx debe ser un número finito", + "ollama_num_ctx_must_be_integer": "num_ctx debe ser un entero, se obtuvo float con parte fraccionaria", + "ollama_num_ctx_must_be_positive": "num_ctx debe ser positivo, se obtuvo: %d", + "ollama_num_ctx_must_be_valid_number": "num_ctx debe ser un número válido", + "ollama_num_ctx_must_be_valid_number_got": "num_ctx debe ser un número válido, se obtuvo: %s", + "ollama_num_ctx_value_out_of_range": "valor num_ctx fuera de rango", + "ollama_num_ctx_value_too_large": "valor num_ctx demasiado grande: %d", + "ollama_sse_buffer_limit": "Línea SSE excede el límite de búfer de 1MB - línea de datos demasiado grande", + "ollama_upstream_non_2xx": "El servidor Fabric upstream devolvió estado no-2xx %d: %s", + "ollama_upstream_non_2xx_body_unreadable": "El servidor Fabric upstream devolvió estado no-2xx %d y el cuerpo no se pudo leer: %v", + "ollama_upstream_returned_status": "el servidor Fabric upstream devolvió estado %d", + "ollama_warning_no_content": "Advertencia: no se recibió contenido del servidor Fabric upstream", + "ollama_warning_parse_variables": "Advertencia: error al analizar options.variables como JSON: %v", + "openai_api_base_url_not_configured": "URL base de API no configurada para el proveedor %s", + "openai_audio_ffmpeg_failed": "ffmpeg falló: %v: %s", + "openai_audio_ffmpeg_not_found_install": "ffmpeg no encontrado: por favor instálelo", + "openai_audio_file_exceeds_limit_enable_split": "El archivo %s excede el límite de 25MB; use --split-media-file para habilitar la división automática", + "openai_audio_file_exceeds_limit_splitting": "El archivo %s es más grande que el límite de tamaño... dividiendo en partes...", + "openai_audio_model_not_supported_for_transcription": "el modelo '%s' no es compatible con la transcripción", + "openai_audio_running_ffmpeg_split_chunks": "Ejecutando ffmpeg para dividir el audio en fragmentos de %d segundos...", + "openai_audio_unable_to_split_acceptable_size_chunks": "no se pudo dividir el archivo en fragmentos de tamaño aceptable", + "openai_audio_unsupported_audio_format": "formato de audio no compatible '%s'", + "openai_audio_using_model_to_transcribe_part": "Usando el modelo %s para transcribir la parte %d (archivo: %s)...", + "openai_failed_to_create_models_url": "error al crear URL de modelos: %w", + "openai_image_failed_to_create_directory": "no se pudo crear el directorio %s: %w", + "openai_image_failed_to_decode_image_data": "no se pudieron decodificar los datos de la imagen: %w", + "openai_image_failed_to_save_image": "no se pudo guardar la imagen en %s: %w", + "openai_image_saved_to": "Imagen guardada en: %s", + "openai_model_no_image_generation": "el modelo '%s' no soporta generación de imágenes. Modelos soportados: %s", + "openai_models_response_too_large": "respuesta de modelos demasiado grande del proveedor %s (>%d bytes)", + "openai_unable_to_parse_models_response": "no se pudo analizar la respuesta de modelos; respuesta cruda: %s", + "openai_unexpected_status_code_read_error": "código de estado inesperado: %d del proveedor %s (error al leer cuerpo de respuesta: %v)", + "openai_unexpected_status_code_with_body": "código de estado inesperado: %d del proveedor %s, cuerpo de respuesta: %s", + "openai_warning_model_no_image_generation": "Advertencia: El modelo '%s' no soporta generación de imágenes. Modelos soportados: %s. Considere usar -m gpt-5.2 para generación de imágenes.\n", + "optional_marker": "(opcional)", + "options_placeholder": "[OPCIONES]", + "output_entire_session": "Salida de toda la sesión (también una temporal) al archivo de salida", + "output_full": "Salida: %s", + "output_raw_list_shell_completion": "Salida de lista sin procesar sin encabezados/formato (para completado de shell)", + "output_to_file": "Salida a archivo", + "output_truncated": "Salida: %s...", + "output_video_metadata": "Salida de metadatos del video", + "path_to_yaml_config": "Ruta al archivo de configuración YAML", + "pattern_not_found_list_available": "patrón '%s' no encontrado. Ejecuta 'fabric -l' para ver los patrones disponibles", + "pattern_not_found_no_patterns": "patrón '%s' no encontrado.\n\n¡No hay patrones instalados! Para solucionar esto:\n • Ejecuta 'fabric --setup' para configurar y descargar patrones\n • O ejecuta 'fabric -U' para descargar/actualizar patrones directamente", + "pattern_variables_help": "Valores para variables de patrón, ej. -v=#role:expert -v=#points:30", + "patterns_cloning_repository": "Clonando el repositorio %s (ruta: %s)...\\n", + "patterns_debug_included_custom_directory": "📂 También se incluyeron patrones del directorio personalizado: %s\\n", + "patterns_detected_old_path": "🔄 Se detectó la ruta antigua de patrones 'patterns', intentando migrar a 'data/patterns'...", + "patterns_download_success": "✅ Patrones descargados e instalados correctamente en %s\\n", + "patterns_downloaded_temp": "Se descargaron %d patrones al directorio temporal\\n", + "patterns_downloading": "Descargando patrones y llenando %s...\\n", + "patterns_failed_access_directory": "error al acceder al directorio de patrones '%s': %w", + "patterns_failed_create_temp_dir": "no se pudo crear el directorio temporal: %w", + "patterns_failed_create_temp_folder": "no se pudo crear la carpeta temporal de patrones: %w", + "patterns_failed_download_from_git": "error al descargar patrones del repositorio Git: %w", + "patterns_failed_download_from_repo": "error al descargar patrones de %s: %w", + "patterns_failed_loaded_marker": "no se pudo crear el archivo indicador '%s': %w", + "patterns_failed_move_patterns": "error al mover los patrones al directorio de configuración: %w", + "patterns_failed_move_test_patterns": "error al mover los patrones de prueba al directorio temporal: %w", + "patterns_failed_read_directory": "error al leer el directorio de patrones: %w", + "patterns_failed_read_temp_directory": "error al leer el directorio temporal de patrones: %w", + "patterns_failed_unique_file": "error al crear el archivo de patrones únicos: %w", + "patterns_failed_write_unique_file": "error al escribir el archivo de patrones únicos: %w", + "patterns_found_new_path": "✅ Se encontraron %d patrones en la nueva ruta '%s', actualizando configuración...\\n", + "patterns_git_repo_folder_question": "Introduce la carpeta predeterminada en el repositorio Git donde se almacenan los patrones", + "patterns_git_repo_url_question": "Introduce la URL predeterminada del repositorio Git para los patrones", + "patterns_loader_label": "Cargador de patrones", + "patterns_no_patterns_copied": "no se copiaron patrones correctamente en %s", + "patterns_no_patterns_found_in_directories": "no se encontraron patrones en los directorios %s y %s", + "patterns_no_patterns_found_in_directory": "no se encontraron patrones en el directorio %s", + "patterns_no_patterns_migration_failed": "no se encontraron patrones en el repositorio en la ruta %s y la migración falló: %w", + "patterns_not_found_header": "⚠️ ¡No se encontraron patrones!", + "patterns_option_run_setup": "Opción 1 (Recomendada): Ejecutar configuración para descargar patrones", + "patterns_option_run_setup_command": "fabric --setup", + "patterns_option_run_update": "Opción 2: Descargar/actualizar patrones directamente", + "patterns_option_run_update_command": "fabric -U", + "patterns_preserve_warning": "Advertencia: no se pudo conservar el patrón personalizado '%s': %v\\n", + "patterns_preserved_custom_pattern": "Patrón personalizado conservado: %s\\n", + "patterns_required_to_work": "Los patrones son requeridos para que Fabric funcione. Para solucionar esto:", + "patterns_saving_updated_configuration": "💾 Guardando configuración actualizada (ruta cambiada de '%s' a '%s')...\\n", + "patterns_setup_description": "Patrones - Descarga patrones", + "patterns_unable_to_find_or_migrate": "no se pudieron encontrar patrones en la ruta actual '%s' ni migrar a la nueva estructura", + "patterns_unique_file_created": "📝 Archivo de patrones únicos creado con %d patrones\\n", + "patterns_warning_custom_directory": "Advertencia: no se pudo leer el directorio de patrones personalizado %s: %v\\n", + "patterns_warning_remove_test_folder": "Advertencia: no se pudo eliminar la carpeta temporal de prueba '%s': %v\\n", + "perplexity_api_key_not_configured": "Clave API no configurada para %s. Configure la variable de entorno %s o ejecute 'fabric --setup' para configurar %s", + "perplexity_api_request_failed": "solicitud a la API de Perplexity fallida: %w", + "perplexity_citations_header": "\n\n**Citas:**\n", + "perplexity_failed_configure": "no se pudo configurar Perplexity: %w", + "perplexity_streaming_error": "error de transmisión de Perplexity: %v", + "plugin_configured": " ✓", + "plugin_enable_bool_question": "Habilitar %v %v (true/false)", + "plugin_enter_value": "Introduce tu %v %v", + "plugin_invalid_bool": "bool no válido: %q", + "plugin_invalid_boolean_value": "valor booleano no válido: %v", + "plugin_not_configured": " ⚠️ NO CONFIGURADO", + "plugin_question_bool": "%v%v (true/false, deja vacío para '%s' o escribe '%v' para eliminar el valor):", + "plugin_question_optional": "%v%v (deja vacío para omitir):", + "plugin_question_with_default": "%v%v (deja vacío para '%s' o escribe '%v' para eliminar el valor):", + "plugin_setting_not_valid": "%v=%v no es válido", + "plugin_setup_configured": "[%v] configurado", + "plugin_setup_skipped": "[%v] omitido\\n", + "prefer_playlist_over_video": "Preferir lista de reproducción sobre video si ambos ids están presentes en la URL", + "print_context": "Imprimir contexto", + "print_current_version": "Imprimir versión actual", + "print_session": "Imprimir sesión", + "register_new_extension": "Registrar una nueva extensión desde la ruta del archivo de configuración", + "remove_registered_extension": "Eliminar una extensión registrada por nombre", + "required_marker": "[obligatorio]", + "run_setup_for_reconfigurable_parts": "Ejecutar configuración para todas las partes reconfigurables de fabric", + "save_generated_image_to_file": "Guardar imagen generada en la ruta de archivo especificada (ej., 'output.png')", + "scrape_website_url": "Extraer URL del sitio web a markdown usando Jina AI", + "scraping_not_configured": "la funcionalidad de extracción no está configurada. Por favor configura Jina para habilitar la extracción", + "search_question_jina": "Pregunta de búsqueda usando Jina AI", + "seed_for_lmm_generation": "Semilla para ser usada en la generación LMM", + "send_desktop_notification": "Enviar notificación de escritorio cuando se complete el comando", + "serve_fabric_api_ollama_endpoints": "Servir la API REST de Fabric con endpoints de ollama", + "serve_fabric_rest_api": "Servir la API REST de Fabric", + "set_debug_level": "Establecer nivel de depuración (0=apagado, 1=básico, 2=detallado, 3=rastreo)", + "set_frequency_penalty": "Establecer penalización de frecuencia", + "set_location_web_search": "Establecer ubicación para resultados de búsqueda web (ej., 'America/Los_Angeles')", + "set_presence_penalty": "Establecer penalización de presencia", + "set_reasoning_thinking_level": "Establecer nivel de razonamiento/pensamiento (ej., off, low, medium, high, o tokens numéricos para Anthropic o Google Gemini)", + "set_temperature": "Establecer temperatura", + "set_top_p": "Establecer top P", + "setup_add_more_providers_later": "Podrás agregar más proveedores después con 'fabric --setup'", + "setup_ai_provider_required": "Fabric necesita al menos un proveedor de IA para funcionar.", + "setup_available_ai_providers": "Proveedores de IA Disponibles:", + "setup_available_plugins": "Plugins disponibles:", + "setup_complete_header": "✅ ¡Configuración completa! Ya puedes usar Fabric.", + "setup_configure_more": "• Configurar más opciones: fabric --setup", + "setup_enter_ai_provider_number": "Número de Proveedor de IA", + "setup_failed_download_patterns": "error al descargar patrones: %w", + "setup_failed_download_strategies": "error al descargar estrategias: %w", + "setup_failed_set_defaults": "error al establecer proveedor y modelo predeterminados: %w", + "setup_invalid_selection": "selección inválida: %s", + "setup_list_patterns": "• Listar patrones disponibles: fabric -l", + "setup_next_steps": "Próximos pasos:", + "setup_no_ai_provider_selected": "no se seleccionó proveedor de IA - se requiere al menos uno", + "setup_optional_configuration_header": "━━━ CONFIGURACIÓN OPCIONAL ━━━\n\nHerramientas Opcionales", + "setup_plugin_number": "Número de Plugin", + "setup_plugin_prompt": "Introduce el número del plugin a configurar", + "setup_required_configuration_header": "━━━ CONFIGURACIÓN REQUERIDA ━━━\n\nProveedores de IA [se requiere al menos uno]", + "setup_required_tools": "Herramientas Requeridas", + "setup_step_configure_ai_provider": "🤖 Paso 3: Configurar un proveedor de IA", + "setup_step_downloading_patterns": "📥 Paso 1: Descargando patrones (requeridos para que Fabric funcione)...", + "setup_step_downloading_strategies": "📥 Paso 2: Descargando estrategias (requeridas para que Fabric funcione)...", + "setup_step_setting_defaults": "⚙️ Paso 4: Estableciendo proveedor y modelo predeterminados...", + "setup_try_pattern": "• Probar un patrón: echo 'tu texto' | fabric --pattern summarize", + "setup_validation_ai_provider_configured": "✓ Proveedor de IA configurado", + "setup_validation_ai_provider_missing": "✗ Proveedor de IA no configurado - Requerido para que Fabric funcione", + "setup_validation_complete": "✓ ¡Todos los componentes requeridos configurados!", + "setup_validation_defaults_configured": "✓ Proveedor/modelo predeterminado establecido: %s/%s", + "setup_validation_defaults_missing": "✗ Proveedor/modelo predeterminado no establecido - Requerido para que Fabric funcione", + "setup_validation_header": "Estado de Configuración:", + "setup_validation_incomplete_help": "Ejecuta 'fabric --setup' de nuevo para configurar los elementos faltantes,\no ejecuta 'fabric -U' para descargar patrones y estrategias.", + "setup_validation_incomplete_warning": "⚠️ ¡Configuración incompleta! Faltan componentes requeridos.", + "setup_validation_patterns_configured": "✓ Patrones descargados", + "setup_validation_patterns_missing": "✗ Patrones no encontrados - Requeridos para que Fabric funcione", + "setup_validation_strategies_configured": "✓ Estrategias descargadas", + "setup_validation_strategies_missing": "✗ Estrategias no encontradas - Requeridas para que Fabric funcione", + "setup_welcome_header": "🎉 ¡Bienvenido a Fabric! Vamos a configurarte.", + "show_dry_run": "Mostrar lo que se enviaría al modelo sin enviarlo realmente", + "specify_language_code": "Especificar el Código de Idioma para el chat, ej. -g=en -g=zh -g=pt-BR -g=pt-PT", + "specify_vendor_for_model": "Especificar proveedor para el modelo seleccionado (ej., -V \"LM Studio\" -m openai/gpt-oss-20b)", + "split_media_files_ffmpeg": "Dividir archivos de audio/video mayores a 25MB usando ffmpeg", "spotify_api_request_failed": "la solicitud a la API falló: estado %d, respuesta: %s", - "spotify_failed_parse_show_metadata": "no se pudieron analizar los metadatos del programa: %w", - "spotify_failed_parse_episode_metadata": "no se pudieron analizar los metadatos del episodio: %w", - "spotify_search_failed": "la búsqueda falló: %w", - "spotify_failed_parse_search_results": "no se pudieron analizar los resultados de búsqueda: %w", + "spotify_audio_preview_label": "**Vista previa de audio**: %s", + "spotify_client_id_question": "Ingrese su CLIENT ID de Spotify", + "spotify_client_secret_question": "Ingrese su CLIENT SECRET de Spotify", + "spotify_description_header": "## Descripción", + "spotify_duration_label": "**Duración**: %d minutos", + "spotify_episode_header": "# Episodio de Spotify", + "spotify_error_getting_metadata": "error al obtener metadatos de Spotify: %v", + "spotify_explicit_label": "**Explícito**: %v", + "spotify_failed_create_request": "no se pudo crear la solicitud: %w", + "spotify_failed_create_token_request": "no se pudo crear la solicitud de token: %w", + "spotify_failed_decode_token_response": "no se pudo decodificar la respuesta del token: %w", + "spotify_failed_execute_request": "no se pudo ejecutar la solicitud: %w", + "spotify_failed_get_access_token": "no se pudo obtener el token de acceso: estado %d, respuesta: %s", "spotify_failed_get_show_episodes": "no se pudieron obtener los episodios del programa: %w", + "spotify_failed_parse_episode_metadata": "no se pudieron analizar los metadatos del episodio: %w", "spotify_failed_parse_episodes": "no se pudieron analizar los episodios: %w", - "template_file_log_validating_path": "Archivo: validando ruta %q", - "template_file_error_path_contains_parent_ref": "archivo: la ruta no puede contener '..'", + "spotify_failed_parse_search_results": "no se pudieron analizar los resultados de búsqueda: %w", + "spotify_failed_parse_show_metadata": "no se pudieron analizar los metadatos del programa: %w", + "spotify_failed_read_response_body": "no se pudo leer el cuerpo de la respuesta: %w", + "spotify_failed_request_access_token": "no se pudo solicitar el token de acceso: %w", + "spotify_invalid_url": "URL de Spotify no válida, no se puede obtener el ID del programa o episodio: '%s'", + "spotify_label": "Spotify", + "spotify_language_field_label": "**Idioma**: %s", + "spotify_languages_label": "**Idiomas**: %s", + "spotify_media_type_label": "**Tipo de medio**: %s", + "spotify_no_episode_found": "no se encontró ningún episodio con ID: %s", + "spotify_no_show_found": "no se encontró ningún programa con ID: %s", + "spotify_not_configured": "Spotify no está configurado, por favor ejecute el procedimiento de configuración", + "spotify_publisher_label": "**Editor**: %s", + "spotify_release_date_label": "**Fecha de lanzamiento**: %s", + "spotify_search_description_label": "- **Descripción**: %s", + "spotify_search_episodes_label": "- **Episodios**: %d", + "spotify_search_failed": "la búsqueda falló: %w", + "spotify_search_publisher_label": "- **Editor**: %s", + "spotify_search_results_header": "# Resultados de búsqueda de Spotify", + "spotify_search_url_label": "- **URL**: %s", + "spotify_setup_description": "Spotify - para obtener metadatos de podcasts/programas de Spotify", + "spotify_show_header": "# Podcast/Programa de Spotify", + "spotify_show_name_label": "**Programa**: %s", + "spotify_title_label": "**Título**: %s", + "spotify_total_episodes_label": "**Total de episodios**: %d", + "spotify_url_label": "**URL**: %s", + "start_tag_thinking_sections": "Etiqueta de inicio para secciones de pensamiento", + "strategies_available_header": "Estrategias disponibles:", + "strategies_cloning_repository": "Clonando el repositorio %s (ruta: %s)...\\n", + "strategies_download_success": "✅ Estrategias descargadas e instaladas correctamente en %s\\n", + "strategies_downloaded_count": "Se descargaron %d estrategias\\n", + "strategies_downloading": "Descargando estrategias y llenando %s...\\n", + "strategies_failed_create_directory": "no se pudo crear el directorio de estrategias: %w", + "strategies_failed_download": "error al descargar estrategias: %w", + "strategies_git_repo_folder_question": "Introduce la carpeta predeterminada en el repositorio Git donde se almacenan las estrategias", + "strategies_git_repo_url_question": "Introduce la URL predeterminada del repositorio Git para las estrategias", + "strategies_home_dir_error": "no se pudo obtener el directorio personal: %v", + "strategies_home_dir_fallback": "no se pudo obtener el directorio personal: %v, usando el directorio actual en su lugar", + "strategies_label": "Estrategias de prompts", + "strategies_none_found": "no se encontraron estrategias. Ejecuta 'fabric --setup' para descargar estrategias", + "strategies_setup_description": "Estrategias - Descarga estrategias de prompting (como chain of thought)", + "strategy_not_found": "estrategia %s no encontrada. Ejecuta 'fabric --liststrategies' para ver la lista", + "stream_help": "Transmitir", + "suppress_thinking_tags": "Suprimir texto encerrado en etiquetas de pensamiento", + "template_datetime_error_invalid_number": "invalid number in relative time: %q", + "template_datetime_error_invalid_relative_format": "invalid relative time format", + "template_datetime_error_invalid_unit": "invalid time unit: %q", + "template_datetime_error_relative_requires_value": "relative time requires a value", + "template_datetime_error_unknown_operation": "datetime: unknown operation %q", "template_file_error_expand_home_dir": "archivo: no se pudo expandir el directorio home: %v", - "template_file_log_cleaned_path": "Archivo: ruta limpiada %q", - "template_file_log_operation_value": "Archivo: operación=%q valor=%q", - "template_file_error_tail_requires_path_lines": "archivo: tail requiere el formato ruta|líneas", "template_file_error_invalid_line_count": "archivo: número de líneas no válido %q", "template_file_error_line_count_positive": "archivo: el número de líneas debe ser positivo", - "template_file_log_tail_returning_lines": "Archivo: tail devuelve %d líneas", - "template_file_error_stat_file": "archivo: no se pudo obtener el estado del archivo: %v", - "template_file_error_size_exceeds_limit": "archivo: el tamaño %d supera el límite de %d bytes", - "template_file_error_read_file": "archivo: no se pudo leer: %v", - "template_file_log_read_bytes": "Archivo: %d bytes leídos", - "template_file_log_exists_for_path": "Archivo: exists=%v para la ruta %q", - "template_file_log_size_for_path": "Archivo: tamaño=%d para la ruta %q", - "template_file_log_modified_for_path": "Archivo: modified=%q para la ruta %q", - "template_file_error_unknown_operation": "archivo: operación desconocida %q (admitidas: read, tail, exists, size, modified)", - "template_file_log_reading_last_lines": "Archivo: leyendo las últimas %d líneas de %q", "template_file_error_open_file": "archivo: no se pudo abrir: %v", - "template_file_error_stat_open_file": "archivo: no se pudo obtener el estado: %v", + "template_file_error_path_contains_parent_ref": "archivo: la ruta no puede contener '..'", + "template_file_error_read_file": "archivo: no se pudo leer: %v", "template_file_error_scanner_read": "archivo: error al leer: %v", + "template_file_error_size_exceeds_limit": "archivo: el tamaño %d supera el límite de %d bytes", + "template_file_error_stat_file": "archivo: no se pudo obtener el estado del archivo: %v", + "template_file_error_stat_open_file": "archivo: no se pudo obtener el estado: %v", + "template_file_error_tail_requires_path_lines": "archivo: tail requiere el formato ruta|líneas", + "template_file_error_unknown_operation": "archivo: operación desconocida %q (admitidas: read, tail, exists, size, modified)", + "template_file_log_cleaned_path": "Archivo: ruta limpiada %q", + "template_file_log_exists_for_path": "Archivo: exists=%v para la ruta %q", + "template_file_log_modified_for_path": "Archivo: modified=%q para la ruta %q", + "template_file_log_operation_value": "Archivo: operación=%q valor=%q", + "template_file_log_read_bytes": "Archivo: %d bytes leídos", "template_file_log_read_total_return_last": "Archivo: se leyeron %d líneas en total, devolviendo las últimas %d", - "chatter_error_no_session_pattern_user_messages": "no se proporcionó ninguna sesión, patrón ni mensajes de usuario", - "chatter_error_no_messages_provided": "no se proporcionaron mensajes", - "chatter_log_stream_usage_metadata": "[Metadatos] Entrada: %d | Salida: %d | Total: %d", - "chatter_error_stream_update": "Error: %s", - "chatter_error_empty_response": "respuesta vacía", - "chatter_warning_parse_file_changes_failed": "Advertencia: No se pudieron analizar los cambios de archivo: %v", - "chatter_warning_get_current_directory_failed": "Advertencia: No se pudo obtener el directorio actual: %v", - "chatter_warning_apply_file_changes_failed": "Advertencia: No se pudieron aplicar los cambios de archivo: %v", - "chatter_info_file_changes_applied_successfully": "Los cambios de archivo se aplicaron correctamente.", - "chatter_help_review_changes_with_git_diff": "Puede revisar los cambios con 'git diff' si esta usando git.", - "chatter_error_find_session": "no se pudo encontrar la sesion %s: %v", - "chatter_error_find_context": "no se pudo encontrar el contexto %s: %v", - "chatter_error_get_pattern": "no se pudo obtener el patron %s: %v", - "chatter_error_load_strategy": "no se pudo cargar la estrategia %s: %v", - "chatter_prompt_enforce_response_language": "%s\n\nIMPORTANTE: Primero, ejecute las instrucciones proporcionadas en este prompt usando la entrada del usuario. Segundo, asegurese de que toda su respuesta final, incluidos los encabezados de seccion o titulos generados como parte de la ejecucion de las instrucciones, este escrita SOLO en el idioma %s.", - "vertexai_failed_google_credentials": "no se pudieron obtener las credenciales de Google (asegurese de que ADC este configurado): %w", - "vertexai_no_models_found": "no se encontraron modelos de ningun editor", - "vertexai_no_conversational_models": "no se encontraron modelos conversacionales", + "template_file_log_reading_last_lines": "Archivo: leyendo las últimas %d líneas de %q", + "template_file_log_size_for_path": "Archivo: tamaño=%d para la ruta %q", + "template_file_log_tail_returning_lines": "Archivo: tail devuelve %d líneas", + "template_file_log_validating_path": "Archivo: validando ruta %q", + "template_sys_error_env_requires_var": "env: variable name required", + "template_sys_error_home": "failed to get home directory: %v", + "template_sys_error_hostname": "failed to get hostname: %v", + "template_sys_error_pwd": "failed to get working directory: %v", + "template_sys_error_unknown_operation": "sys: unknown operation %q", + "template_sys_error_user": "failed to get current user: %v", + "transcription_model_required": "se requiere un modelo de transcripción (usa --transcribe-model)", + "transparent_background_png_webp_only": "el fondo transparente solo puede usarse con formatos PNG y WebP, no %s", + "tts_audio_generated_successfully": "Audio TTS generado exitosamente y guardado en: %s\n", + "tts_model_requires_audio_output": "el modelo TTS '%s' requiere salida de audio. Por favor especifica un archivo de salida de audio con la bandera -o (ej., -o output.wav)", + "tts_voice_name": "Nombre de voz TTS para modelos soportados (ej., Kore, Charon, Puck)", + "unsupported_conversion": "conversión no soportada de %v a %v", + "update_patterns": "Actualizar patrones", + "usage_header": "Uso:", + "use_model_defaults_raw_help": "Utiliza los valores predeterminados del modelo sin enviar opciones de chat (temperature, top_p, etc.). Solo afecta a los proveedores compatibles con OpenAI. Los modelos de Anthropic siempre usan una selección inteligente de parámetros para cumplir los requisitos específicos del modelo.", + "vendor_no_transcription_support": "el proveedor %s no admite transcripción de audio", + "vendor_not_configured": "el proveedor %s no está configurado", + "vendor_not_found": "proveedor %s no encontrado", + "vendors_no_ai_vendors_configured_read_models": "no hay proveedores de IA configurados para leer modelos", "vertexai_client_not_initialized": "cliente VertexAI no inicializado", - "vertexai_no_valid_messages": "no hay mensajes validos para enviar", - "vertexai_no_content_in_response": "sin contenido en la respuesta", - "vertexai_failed_gemini_client": "no se pudo crear el cliente Gemini: %w", - "vertexai_stream_error": "Error: %v", - "gemini_invalid_location_format": "formato de ubicación de búsqueda inválido %q: debe ser zona horaria (ej. 'America/Los_Angeles') o código de idioma (ej. 'en-US')", - "gemini_stream_error": "Error: %v", - "gemini_no_text_for_tts": "no se encontró contenido de texto para generación TTS", - "gemini_invalid_voice": "voz inválida '%s'. Las voces válidas son: %v", - "gemini_tts_failed": "generación TTS fallida: %w", - "gemini_unexpected_data_type": "tipo de dato inesperado: %s, se esperaban datos de audio", - "gemini_audio_data_too_small": "datos de audio demasiado pequeños: %d bytes, mínimo requerido: %d", - "gemini_wav_generation_failed": "no se pudo generar el archivo WAV: %w", - "gemini_wav_data_invalid": "datos WAV generados inválidos: %d bytes, mínimo requerido: %d", - "gemini_no_audio_data": "no se recibieron datos de audio del modelo TTS", - "gemini_empty_pcm_data": "datos PCM vacíos proporcionados", - "gemini_pcm_data_too_large": "datos PCM demasiado grandes: %d bytes, máximo permitido: %d", - "bedrock_unable_load_aws_config": "no se pudo cargar la configuración de AWS: %w", - "bedrock_aws_region_label": "Región de AWS", - "bedrock_invalid_aws_region": "región de AWS inválida: %s", - "bedrock_unable_load_aws_config_with_region": "no se pudo cargar la configuración de AWS con región %s: %w", - "bedrock_failed_list_foundation_models": "error al listar modelos base: %w", - "bedrock_failed_list_inference_profiles": "error al listar perfiles de inferencia: %w", - "bedrock_panic_sendstream": "pánico en SendStream: %v", - "bedrock_conversestream_failed": "bedrock conversestream falló para el modelo %s: %w", - "bedrock_unknown_stream_event_type": "tipo de evento de stream desconocido: %T", - "bedrock_converse_failed": "bedrock converse falló para el modelo %s: %w", - "bedrock_unexpected_response_type": "tipo de respuesta inesperado: %T", - "bedrock_empty_response_content": "contenido de respuesta vacío", - "bedrock_unexpected_content_block_type": "tipo de bloque de contenido inesperado: %T", - "fetch_unknown_operation": "fetch: operación desconocida %q (admitida: get)", - "fetch_content_not_utf8": "fetch: el contenido no es texto UTF-8 válido", - "fetch_content_null_bytes": "fetch: el contenido contiene bytes nulos", - "fetch_error_create_request": "fetch: error al crear la solicitud: %v", - "fetch_error_fetching_url": "fetch: error al obtener la URL: %v", - "fetch_http_error": "fetch: error HTTP: %d - %s", - "fetch_content_too_large": "fetch: contenido demasiado grande: %d bytes (máx %d bytes)", - "fetch_unsupported_content_type": "fetch: tipo de contenido no admitido %q - solo se permite contenido de texto", - "fetch_error_reading_response": "fetch: error al leer la respuesta: %v", - "fetch_content_exceeds_limit": "fetch: contenido demasiado grande: supera %d bytes", - "file_manager_invalid_format_no_json_array": "formato %s no válido: no se encontró ningún array JSON", - "file_manager_invalid_format_unbalanced_brackets": "formato %s no válido: corchetes desequilibrados", - "file_manager_failed_parse_json": "error al analizar %s JSON: %w", - "file_manager_invalid_operation": "operación no válida para el cambio de archivo %d: %s", - "file_manager_empty_path": "ruta vacía para el cambio de archivo %d", - "file_manager_suspicious_path": "ruta sospechosa para el cambio de archivo %d: %s", - "file_manager_file_content_too_large": "contenido del archivo demasiado grande para el cambio de archivo %d: %d bytes", - "file_manager_failed_create_directory": "error al crear el directorio %s para el cambio de archivo %d: %w", - "file_manager_failed_write_file": "error al escribir el archivo %s para el cambio de archivo %d: %w", - "file_manager_applied_operation": "Operación %s aplicada a %s", - "vertexai_error_create_request": "error al crear la solicitud: %w", - "vertexai_error_request_failed": "solicitud fallida: %w", "vertexai_error_api_status": "API devolvió estado %d: %s", - "vertexai_error_read_response": "error al leer la respuesta: %w", - "vertexai_error_response_too_large": "respuesta demasiado grande (>%d bytes)", + "vertexai_error_create_request": "error al crear la solicitud: %w", "vertexai_error_parse_response": "error al analizar la respuesta: %w", - "copilot_tenant_client_id_required": "se requieren el ID de inquilino y el ID de cliente", - "copilot_failed_create_conversation": "error al crear la conversación: %w", - "copilot_failed_send_message": "error al enviar el mensaje: %w", - "copilot_failed_stream_message": "error al transmitir el mensaje: %w", - "copilot_error_create_conversation": "error al crear la conversación: %s - %s", - "copilot_error_chat_request": "solicitud de chat fallida: %s - %s", - "copilot_error_stream_request": "falló la solicitud de transmisión: %s - %s", - "copilot_debug_created_conversation": "Conversación de Copilot creada: %s", - "copilot_debug_failed_parse_sse_event": "Error al analizar el evento SSE: %v", - "copilot_error_reading_stream": "error al leer la transmisión: %w" + "vertexai_error_read_response": "error al leer la respuesta: %w", + "vertexai_error_request_failed": "solicitud fallida: %w", + "vertexai_error_response_too_large": "respuesta demasiado grande (>%d bytes)", + "vertexai_failed_gemini_client": "no se pudo crear el cliente Gemini: %w", + "vertexai_failed_google_credentials": "no se pudieron obtener las credenciales de Google (asegurese de que ADC este configurado): %w", + "vertexai_no_content_in_response": "sin contenido en la respuesta", + "vertexai_no_conversational_models": "no se encontraron modelos conversacionales", + "vertexai_no_models_found": "no se encontraron modelos de ningun editor", + "vertexai_no_valid_messages": "no hay mensajes validos para enviar", + "vertexai_stream_error": "Error: %v", + "wipe_context": "Limpiar contexto", + "wipe_session": "Limpiar sesión", + "youtube_api_key_required": "Se requiere clave API de YouTube para comentarios y metadatos. Ejecute 'fabric --setup' para configurar", + "youtube_auth_required_bot_detection": "YouTube requiere autenticación (detección de bot). Usa --yt-dlp-args='--cookies-from-browser BROWSER' donde BROWSER puede ser chrome, firefox, brave, etc.", + "youtube_empty_seconds_string": "cadena de segundos vacía", + "youtube_error_getting_comments": "error al obtener comentarios: %v", + "youtube_error_getting_metadata": "error al obtener metadatos del video: %v", + "youtube_error_getting_video_details": "error al obtener detalles del video: %v", + "youtube_error_parsing_duration": "error al analizar la duración del video: %v", + "youtube_error_saving_csv": "error al guardar videos en CSV: %v", + "youtube_failed_create_temp_dir": "falló al crear directorio temporal: %v", + "youtube_failed_fetch_comments": "No se pudieron obtener los comentarios: %v", + "youtube_failed_walk_directory": "falló al recorrer el directorio: %v", + "youtube_invalid_duration_string": "cadena de duración inválida: %s", + "youtube_invalid_seconds_format": "formato de segundos inválido %q: %w", + "youtube_invalid_timestamp_format": "formato de marca de tiempo inválido: %s", + "youtube_invalid_url": "URL de YouTube no válida, no se puede obtener ID de video o lista de reproducción: '%s'", + "youtube_invalid_ytdlp_arguments": "argumentos de yt-dlp inválidos: %v", + "youtube_label": "YouTube", + "youtube_no_transcript_content": "no se encontró contenido de transcripción en el archivo VTT", + "youtube_no_url_provided": "No se proporcionó una URL de YouTube", + "youtube_no_video_found_with_id": "no se encontró video con ID: %s", + "youtube_no_video_id_found": "no se encontró ID de video en la URL", + "youtube_no_vtt_files_found": "no se encontraron archivos VTT en el directorio", + "youtube_not_configured": "YouTube no está configurado, por favor ejecute el procedimiento de configuración", + "youtube_playlist_header": "Lista de reproducción: %s", + "youtube_playlist_saved_to": "Lista de reproducción guardada en %s", + "youtube_rate_limit_exceeded": "Límite de tasa de YouTube excedido. Intenta de nuevo más tarde o usa diferentes argumentos de yt-dlp como '--sleep-requests 1' para ralentizar las solicitudes.", + "youtube_setup_description": "YouTube - para obtener transcripciones de video (vía yt-dlp) y comentarios/metadatos (vía API de YouTube)", + "youtube_url_help": "Video de YouTube o \"URL\" de lista de reproducción para obtener transcripción, comentarios y enviar al chat o imprimir en la consola y almacenar en el archivo de salida", + "youtube_url_is_playlist_not_video": "La URL es una lista de reproducción, no un video", + "youtube_video_id_title_header": "VideoID: Título", + "youtube_ytdlp_not_found": "yt-dlp no encontrado en PATH. Por favor instala yt-dlp para usar la funcionalidad de transcripción de YouTube", + "youtube_ytdlp_stderr_error": "Error al leer stderr de yt-dlp" } diff --git a/internal/i18n/locales/fa.json b/internal/i18n/locales/fa.json index e38df468..57b7bc07 100644 --- a/internal/i18n/locales/fa.json +++ b/internal/i18n/locales/fa.json @@ -1,512 +1,592 @@ { - "html_readability_error": "از ورودی اصلی استفاده کن، چون نمی‌توان خوانایی HTML را اعمال کرد", - "vendor_not_configured": "تامین‌کننده %s پیکربندی نشده است", - "vendor_no_transcription_support": "تامین‌کننده %s از رونویسی صوتی پشتیبانی نمی‌کند", - "transcription_model_required": "مدل رونویسی الزامی است (از --transcribe-model استفاده کنید)", - "youtube_not_configured": "یوتیوب پیکربندی نشده است، لطفاً روند تنظیمات را اجرا کنید", - "youtube_api_key_required": "کلید API یوتیوب برای دریافت نظرات و متادیتا الزامی است. برای پیکربندی 'fabric --setup' را اجرا کنید", - "youtube_ytdlp_not_found": "yt-dlp در PATH یافت نشد. لطفاً yt-dlp را نصب کنید تا از قابلیت رونویسی یوتیوب استفاده کنید", - "youtube_invalid_url": "URL یوتیوب نامعتبر است، نمی‌توان ID ویدیو یا فهرست پخش را دریافت کرد: '%s'", - "youtube_url_is_playlist_not_video": "URL یک فهرست پخش است، نه یک ویدیو", - "youtube_no_video_id_found": "هیچ ID ویدیویی در URL یافت نشد", - "youtube_rate_limit_exceeded": "محدودیت نرخ یوتیوب فراتر رفته است. بعداً دوباره امتحان کنید یا از آرگومان‌های مختلف yt-dlp مانند '--sleep-requests 1' برای کاهش سرعت درخواست‌ها استفاده کنید.", - "youtube_auth_required_bot_detection": "یوتیوب احراز هویت می‌خواهد (تشخیص ربات). از --yt-dlp-args='--cookies-from-browser BROWSER' استفاده کنید که BROWSER می‌تواند chrome، firefox، brave و غیره باشد.", - "youtube_ytdlp_stderr_error": "خطا در خواندن stderr yt-dlp", - "youtube_invalid_ytdlp_arguments": "آرگومان‌های yt-dlp نامعتبر: %v", - "youtube_failed_create_temp_dir": "ایجاد دایرکتوری موقت ناموفق بود: %v", - "youtube_no_transcript_content": "محتوای رونوشتی در فایل VTT یافت نشد", - "youtube_no_vtt_files_found": "فایل‌های VTT در دایرکتوری یافت نشدند", - "youtube_failed_walk_directory": "پیمایش دایرکتوری ناموفق بود: %v", - "youtube_error_getting_video_details": "خطا در دریافت جزئیات ویدیو: %v", - "youtube_invalid_duration_string": "رشته مدت زمان نامعتبر: %s", - "youtube_error_getting_metadata": "خطا در دریافت متادیتای ویدیو: %v", - "youtube_error_parsing_duration": "خطا در تجزیه مدت زمان ویدیو: %v", - "youtube_error_getting_comments": "خطا در دریافت نظرات: %v", - "youtube_error_saving_csv": "خطا در ذخیره ویدیوها در CSV: %v", - "youtube_no_video_found_with_id": "هیچ ویدیویی با ID یافت نشد: %s", - "youtube_invalid_timestamp_format": "فرمت مهر زمانی نامعتبر: %s", - "youtube_empty_seconds_string": "رشته ثانیه خالی", - "youtube_invalid_seconds_format": "فرمت ثانیه نامعتبر %q: %w", - "error_fetching_playlist_videos": "خطا در دریافت ویدیوهای فهرست پخش: %w", - "openai_api_base_url_not_configured": "URL پایه API برای ارائه‌دهنده %s پیکربندی نشده است", - "openai_failed_to_create_models_url": "ایجاد URL مدل‌ها ناموفق بود: %w", - "openai_unexpected_status_code_with_body": "کد وضعیت غیرمنتظره: %d از ارائه‌دهنده %s، پاسخ: %s", - "openai_unexpected_status_code_read_error_partial": "کد وضعیت غیرمنتظره: %d از ارائه‌دهنده %s (خطا در خواندن: %v)، پاسخ جزئی: %s", - "openai_unexpected_status_code_read_error": "کد وضعیت غیرمنتظره: %d از ارائه‌دهنده %s (خطا در خواندن پاسخ: %v)", - "openai_unable_to_parse_models_response": "تجزیه پاسخ مدل‌ها ناموفق بود; پاسخ خام: %s", - "openai_warning_model_no_image_generation": "هشدار: مدل '%s' از تولید تصویر پشتیبانی نمی‌کند. مدل‌های پشتیبانی شده: %s. استفاده از -m gpt-5.2 برای تولید تصویر را در نظر بگیرید.\n", - "openai_model_no_image_generation": "مدل '%s' از تولید تصویر پشتیبانی نمی‌کند. مدل‌های پشتیبانی شده: %s", - "scraping_not_configured": "قابلیت استخراج داده پیکربندی نشده است. لطفاً Jina را برای فعال‌سازی استخراج تنظیم کنید", - "could_not_determine_home_dir": "نتوانست دایرکتوری خانه کاربر را تعیین کند: %w", - "could_not_stat_env_file": "نتوانست وضعیت فایل .env را بررسی کند: %w", + "additional_yt_dlp_args": "آرگومان‌های اضافی برای ارسال به yt-dlp (مثال: '--cookies-from-browser brave')", + "address_to_bind_rest_api": "آدرس برای متصل کردن API REST", + "anthropic_stream_error": "خطای جریان: %v", + "api_key_secure_server_routes": "کلید API برای امن‌سازی مسیرهای سرور", + "application_options_header": "گزینه‌های برنامه:", + "apply_variables_to_input": "اعمال متغیرها به ورودی کاربر", + "attachment_path_or_url_help": "مسیر ضمیمه یا URL (مثال برای پیام‌های تشخیص تصویر OpenAI)", + "audio_output_file_specified_but_not_tts_model": "فایل خروجی صوتی '%s' مشخص شده اما مدل '%s' یک مدل TTS نیست. لطفاً از مدل TTS مثل gemini-2.5-flash-preview-tts استفاده کنید", + "audio_video_file_transcribe": "فایل صوتی یا ویدیویی برای رونویسی", + "available_models_header": "مدل‌های موجود", + "available_transcription_models": "مدل‌های رونویسی موجود:", + "available_vendors_header": "تامین‌کنندگان موجود:", + "azure_api_key_required": "کلید API Azure الزامی است", + "azure_api_version_question": "نسخه API Azure را وارد کنید (برای پیش‌فرض خالی بگذارید)", + "azure_base_url_required": "URL پایه Azure الزامی است", + "azure_deployments_question": "نام‌های استقرار Azure خود را وارد کنید (با کاما جدا شده)", + "azure_failed_extract_deployment": "استخراج نام استقرار از درخواست ناموفق بود", + "azure_model_field_empty": "فیلد مدل در بدنه درخواست خالی است", + "azure_request_body_nil": "بدنه درخواست خالی است", + "background_type_help": "نوع پس‌زمینه: opaque، transparent (پیش‌فرض: opaque، فقط برای PNG/WebP)", + "bedrock_aws_region_label": "منطقه AWS", + "bedrock_converse_failed": "bedrock converse برای مدل %s ناموفق بود: %w", + "bedrock_conversestream_failed": "bedrock conversestream برای مدل %s ناموفق بود: %w", + "bedrock_empty_response_content": "محتوای پاسخ خالی", + "bedrock_failed_list_foundation_models": "فهرست کردن مدل‌های پایه ناموفق بود: %w", + "bedrock_failed_list_inference_profiles": "فهرست کردن پروفایل‌های استنتاج ناموفق بود: %w", + "bedrock_invalid_aws_region": "منطقه AWS نامعتبر: %s", + "bedrock_panic_sendstream": "پنیک در SendStream: %v", + "bedrock_unable_load_aws_config": "بارگذاری پیکربندی AWS ناموفق بود: %w", + "bedrock_unable_load_aws_config_with_region": "بارگذاری پیکربندی AWS با منطقه %s ناموفق بود: %w", + "bedrock_unexpected_content_block_type": "نوع بلوک محتوای غیرمنتظره: %T", + "bedrock_unexpected_response_type": "نوع پاسخ غیرمنتظره: %T", + "bedrock_unknown_stream_event_type": "نوع رویداد جریان ناشناخته: %T", + "cannot_convert_string": "نمی‌توان رشته %q را به %v تبدیل کرد", + "change_default_model": "تغییر مدل پیش‌فرض", + "chatter_error_empty_response": "پاسخ خالی", + "chatter_error_find_context": "زمينه %s پيدا نشد: %v", + "chatter_error_find_session": "نشست %s پيدا نشد: %v", + "chatter_error_get_pattern": "دريافت الگو %s ممکن نشد: %v", + "chatter_error_load_strategy": "بارگذاري راهبرد %s ممکن نشد: %v", + "chatter_error_no_messages_provided": "هیچ پیامی ارائه نشده است", + "chatter_error_no_session_pattern_user_messages": "هیچ نشست، الگو یا پیام کاربری ارائه نشده است", + "chatter_error_stream_update": "خطا: %s", + "chatter_help_review_changes_with_git_diff": "اگر از git استفاده مي‌کنيد، مي‌توانيد تغييرات را با 'git diff' بررسي کنيد.", + "chatter_info_file_changes_applied_successfully": "تغییرات فایل با موفقیت اعمال شد.", + "chatter_log_stream_usage_metadata": "[فراداده] ورودی: %d | خروجی: %d | مجموع: %d", + "chatter_prompt_enforce_response_language": "%s\n\nمهم: ابتدا دستورالعمل‌هاي ارائه‌شده در اين پرامپت را با استفاده از ورودي کاربر اجرا کنيد. سپس اطمينان حاصل کنيد که کل پاسخ نهايي شما، از جمله هر عنوان يا سربخشي که در جريان اجراي دستورالعمل‌ها توليد مي‌شود، فقط به زبان %s نوشته شده باشد.", + "chatter_warning_apply_file_changes_failed": "هشدار: اعمال تغییرات فایل ناموفق بود: %v", + "chatter_warning_get_current_directory_failed": "هشدار: دریافت پوشه جاری ناموفق بود: %v", + "chatter_warning_parse_file_changes_failed": "هشدار: تجزیه تغییرات فایل ناموفق بود: %v", + "choose_context_from_available": "زمینه‌ای از زمینه‌های موجود انتخاب کنید", + "choose_model": "انتخاب مدل", + "choose_pattern_from_available": "الگویی از الگوهای موجود انتخاب کنید", + "choose_session_from_available": "جلسه‌ای از جلسات موجود انتخاب کنید", + "choose_strategy_from_available": "انتخاب استراتژی از استراتژی‌های موجود", + "command_completed_successfully": "دستور با موفقیت تکمیل شد", + "compression_level_jpeg_webp": "سطح فشرده‌سازی 0-100 برای فرمت‌های JPEG/WebP (پیش‌فرض: تنظیم نشده)", + "config_file_not_found": "فایل پیکربندی یافت نشد: %s", + "convert_html_readability": "تبدیل ورودی HTML به نمای تمیز و خوانا", + "copilot_debug_created_conversation": "مکالمه Copilot ایجاد شد: %s", + "copilot_debug_failed_parse_sse_event": "تجزیه رویداد SSE ناموفق بود: %v", + "copilot_error_chat_request": "درخواست چت ناموفق بود: %s - %s", + "copilot_error_create_conversation": "ایجاد مکالمه ناموفق بود: %s - %s", + "copilot_error_reading_stream": "خطا در خواندن جریان: %w", + "copilot_error_stream_request": "درخواست جریان ناموفق بود: %s - %s", + "copilot_failed_create_conversation": "ایجاد مکالمه ناموفق بود: %w", + "copilot_failed_send_message": "ارسال پیام ناموفق بود: %w", + "copilot_failed_stream_message": "پخش جریانی پیام ناموفق بود: %w", + "copilot_tenant_client_id_required": "شناسه مشتری و شناسه مستاجر الزامی است", + "copy_to_clipboard": "کپی به کلیپ‌بورد", + "could_not_copy_to_clipboard": "نتوانست به کلیپ‌بورد کپی کند: %v", "could_not_create_config_dir": "نتوانست دایرکتوری پیکربندی را ایجاد کند: %w", "could_not_create_env_file": "نتوانست فایل .env را ایجاد کند: %w", - "could_not_copy_to_clipboard": "نتوانست به کلیپ‌بورد کپی کند: %v", - "file_already_exists_not_overwriting": "فایل %s از قبل وجود دارد، بازنویسی نمی‌شود. فایل موجود را تغییر نام دهید یا نام متفاوتی انتخاب کنید", - "error_creating_file": "خطا در ایجاد فایل: %v", - "error_writing_to_file": "خطا در نوشتن به فایل: %v", - "error_creating_audio_file": "خطا در ایجاد فایل صوتی: %v", - "error_writing_audio_data": "خطا در نوشتن داده‌های صوتی به فایل: %v", - "tts_model_requires_audio_output": "مدل TTS '%s' نیاز به خروجی صوتی دارد. لطفاً فایل خروجی صوتی را با پرچم -o مشخص کنید (مثال: -o output.wav)", - "audio_output_file_specified_but_not_tts_model": "فایل خروجی صوتی '%s' مشخص شده اما مدل '%s' یک مدل TTS نیست. لطفاً از مدل TTS مثل gemini-2.5-flash-preview-tts استفاده کنید", - "file_already_exists_choose_different": "فایل %s از قبل وجود دارد. لطفاً نام فایل متفاوتی انتخاب کنید یا فایل موجود را حذف کنید", - "no_notification_system_available": "هیچ سیستم اعلان‌رسانی در دسترس نیست", - "cannot_convert_string": "نمی‌توان رشته %q را به %v تبدیل کرد", - "unsupported_conversion": "تبدیل پشتیبانی نشده از %v به %v", - "invalid_config_path": "مسیر پیکربندی نامعتبر: %w", - "config_file_not_found": "فایل پیکربندی یافت نشد: %s", - "error_reading_config_file": "خطا در خواندن فایل پیکربندی: %w", - "error_parsing_config_file": "خطا در تجزیه فایل پیکربندی: %w", - "error_reading_piped_message": "خطا در خواندن پیام هدایت شده از stdin: %w", - "image_file_already_exists": "فایل تصویر از قبل وجود دارد: %s", - "invalid_image_file_extension": "پسوند فایل تصویر نامعتبر '%s'. فرمت‌های پشتیبانی شده: .png، .jpeg، .jpg، .webp", - "image_parameters_require_image_file": "پارامترهای تصویر (--image-size، --image-quality، --image-background، --image-compression) فقط با --image-file قابل استفاده هستند", - "invalid_image_size": "اندازه تصویر نامعتبر '%s'. اندازه‌های پشتیبانی شده: 1024x1024، 1536x1024، 1024x1536، auto", - "invalid_image_quality": "کیفیت تصویر نامعتبر '%s'. کیفیت‌های پشتیبانی شده: low، medium، high، auto", - "invalid_image_background": "پس‌زمینه تصویر نامعتبر '%s'. پس‌زمینه‌های پشتیبانی شده: opaque، transparent", - "image_compression_jpeg_webp_only": "فشرده‌سازی تصویر فقط با فرمت‌های JPEG و WebP قابل استفاده است، نه %s", - "image_compression_range_error": "فشرده‌سازی تصویر باید بین 0 تا 100 باشد، دریافت شده: %d", - "transparent_background_png_webp_only": "پس‌زمینه شفاف فقط با فرمت‌های PNG و WebP قابل استفاده است، نه %s", - "available_transcription_models": "مدل‌های رونویسی موجود:", - "tts_audio_generated_successfully": "صوت TTS با موفقیت ایجاد و ذخیره شد در: %s\n", - "fabric_command_complete": "دستور Fabric تکمیل شد", - "fabric_command_complete_with_pattern": "Fabric: %s تکمیل شد", - "command_completed_successfully": "دستور با موفقیت تکمیل شد", - "output_truncated": "خروجی: %s...", - "output_full": "خروجی: %s", - "choose_pattern_from_available": "الگویی از الگوهای موجود انتخاب کنید", - "pattern_variables_help": "مقادیر برای متغیرهای الگو، مثال: -v=#role:expert -v=#points:30", - "choose_context_from_available": "زمینه‌ای از زمینه‌های موجود انتخاب کنید", - "choose_session_from_available": "جلسه‌ای از جلسات موجود انتخاب کنید", - "attachment_path_or_url_help": "مسیر ضمیمه یا URL (مثال برای پیام‌های تشخیص تصویر OpenAI)", - "run_setup_for_reconfigurable_parts": "اجرای تنظیمات برای تمام بخش‌های قابل پیکربندی مجدد fabric", - "set_temperature": "تنظیم دما", - "set_top_p": "تنظیم top P", - "stream_help": "پخش زنده", - "set_presence_penalty": "تنظیم جریمه حضور", - "use_model_defaults_raw_help": "از مقادیر پیش‌فرض مدل بدون ارسال گزینه‌های چت (temperature، top_p و غیره) استفاده می‌کند. فقط بر ارائه‌دهندگان سازگار با OpenAI تأثیر می‌گذارد. مدل‌های Anthropic همواره برای رعایت نیازهای خاص هر مدل از انتخاب هوشمند پارامتر استفاده می‌کنند.", - "set_frequency_penalty": "تنظیم جریمه فرکانس", - "list_all_patterns": "فهرست تمام الگوها", - "list_all_available_models": "فهرست تمام مدل‌های موجود", - "list_all_contexts": "فهرست تمام زمینه‌ها", - "list_all_sessions": "فهرست تمام جلسات", - "update_patterns": "به‌روزرسانی الگوها", - "messages_to_send_to_chat": "پیام‌هایی برای ارسال به گفتگو", - "copy_to_clipboard": "کپی به کلیپ‌بورد", - "choose_model": "انتخاب مدل", - "specify_vendor_for_model": "تعیین تامین‌کننده برای مدل انتخابی (مثال: -V \"LM Studio\" -m openai/gpt-oss-20b)", - "model_context_length_ollama": "طول زمینه مدل (فقط ollama را تحت تأثیر قرار می‌دهد)", - "output_to_file": "خروجی به فایل", - "output_entire_session": "خروجی کل جلسه (حتی موقت) به فایل خروجی", - "number_of_latest_patterns": "تعداد جدیدترین الگوها برای فهرست", - "change_default_model": "تغییر مدل پیش‌فرض", - "youtube_url_help": "ویدیو یوتیوب یا \"URL\" فهرست پخش برای دریافت رونوشت، نظرات و ارسال به گفتگو یا چاپ در کنسول و ذخیره در فایل خروجی", - "prefer_playlist_over_video": "اولویت فهرست پخش نسبت به ویدیو اگر هر دو ID در URL موجود باشند", - "grab_transcript_from_youtube": "دریافت رونوشت از ویدیو یوتیوب و ارسال به گفتگو (به طور پیش‌فرض استفاده می‌شود).", - "grab_transcript_with_timestamps": "دریافت رونوشت از ویدیو یوتیوب با مهر زمان و ارسال به گفتگو", - "grab_comments_from_youtube": "دریافت نظرات از ویدیو یوتیوب و ارسال به گفتگو", - "output_video_metadata": "نمایش فراداده ویدیو", - "additional_yt_dlp_args": "آرگومان‌های اضافی برای ارسال به yt-dlp (مثال: '--cookies-from-browser brave')", - "specify_language_code": "کد زبان برای گفتگو را مشخص کنید، مثلاً -g=en -g=zh -g=pt-BR -g=pt-PT", - "scrape_website_url": "استخراج URL وب‌سایت به markdown با استفاده از Jina AI", - "search_question_jina": "سؤال جستجو با استفاده از Jina AI", - "seed_for_lmm_generation": "Seed برای استفاده در تولید LMM", - "wipe_context": "پاک کردن زمینه", - "wipe_session": "پاک کردن جلسه", - "print_context": "چاپ زمینه", - "print_session": "چاپ جلسه", - "convert_html_readability": "تبدیل ورودی HTML به نمای تمیز و خوانا", - "apply_variables_to_input": "اعمال متغیرها به ورودی کاربر", - "disable_pattern_variable_replacement": "غیرفعال کردن جایگزینی متغیرهای الگو", - "show_dry_run": "نمایش آنچه به مدل ارسال خواهد شد بدون ارسال واقعی", - "serve_fabric_rest_api": "سرویس API REST Fabric", - "serve_fabric_api_ollama_endpoints": "سرویس API REST Fabric با نقاط پایانی ollama", - "address_to_bind_rest_api": "آدرس برای متصل کردن API REST", - "api_key_secure_server_routes": "کلید API برای امن‌سازی مسیرهای سرور", - "path_to_yaml_config": "مسیر فایل پیکربندی YAML", - "print_current_version": "چاپ نسخه فعلی", - "list_all_registered_extensions": "فهرست تمام افزونه‌های ثبت شده", - "register_new_extension": "ثبت افزونه جدید از مسیر فایل پیکربندی", - "remove_registered_extension": "حذف افزونه ثبت شده با نام", - "choose_strategy_from_available": "انتخاب استراتژی از استراتژی‌های موجود", - "list_all_strategies": "فهرست تمام استراتژی‌ها", - "list_all_vendors": "فهرست تمام تامین‌کنندگان", - "output_raw_list_shell_completion": "خروجی فهرست خام بدون سرتیتر/قالب‌بندی (برای تکمیل shell)", - "enable_web_search_tool": "فعال‌سازی ابزار جستجوی وب برای مدل‌های پشتیبانی شده (Anthropic، OpenAI، Gemini)", - "set_location_web_search": "تنظیم مکان برای نتایج جستجوی وب (مثال: 'America/Los_Angeles')", - "save_generated_image_to_file": "ذخیره تصویر تولید شده در مسیر فایل مشخص (مثال: 'output.png')", - "image_dimensions_help": "ابعاد تصویر: 1024x1024، 1536x1024، 1024x1536، auto (پیش‌فرض: auto)", - "image_quality_help": "کیفیت تصویر: low، medium، high، auto (پیش‌فرض: auto)", - "compression_level_jpeg_webp": "سطح فشرده‌سازی 0-100 برای فرمت‌های JPEG/WebP (پیش‌فرض: تنظیم نشده)", - "background_type_help": "نوع پس‌زمینه: opaque، transparent (پیش‌فرض: opaque، فقط برای PNG/WebP)", - "suppress_thinking_tags": "سرکوب متن محصور در تگ‌های تفکر", - "start_tag_thinking_sections": "تگ شروع برای بخش‌های تفکر", - "end_tag_thinking_sections": "تگ پایان برای بخش‌های تفکر", - "disable_openai_responses_api": "غیرفعال کردن API OpenAI Responses (پیش‌فرض: false)", - "audio_video_file_transcribe": "فایل صوتی یا ویدیویی برای رونویسی", - "model_for_transcription": "مدل برای استفاده در رونویسی (جدا از مدل گفتگو)", - "split_media_files_ffmpeg": "تقسیم فایل‌های صوتی/ویدیویی بزرگتر از 25MB با استفاده از ffmpeg", - "tts_voice_name": "نام صدای TTS برای مدل‌های پشتیبانی شده (مثال: Kore، Charon، Puck)", - "list_gemini_tts_voices": "فهرست تمام صداهای TTS Gemini موجود", - "list_transcription_models": "فهرست تمام مدل‌های رونویسی موجود", - "send_desktop_notification": "ارسال اعلان دسک‌تاپ هنگام تکمیل دستور", + "could_not_determine_home_dir": "نتوانست دایرکتوری خانه کاربر را تعیین کند: %w", + "could_not_stat_env_file": "نتوانست وضعیت فایل .env را بررسی کند: %w", "custom_notification_command": "دستور سفارشی برای اجرای اعلان‌ها (جایگزین اعلان‌های داخلی)", - "set_reasoning_thinking_level": "تنظیم سطح استدلال/تفکر (مثال: off، low، medium، high، یا توکن‌های عددی برای Anthropic یا Google Gemini)", - "set_debug_level": "تنظیم سطح اشکال‌زدایی (0=خاموش، 1=پایه، 2=تفصیلی، 3=ردیابی)", - "usage_header": "استفاده:", - "application_options_header": "گزینه‌های برنامه:", - "help_options_header": "گزینه‌های راهنما:", - "help_message": "نمایش این پیام راهنما", - "options_placeholder": "[گزینه‌ها]", - "available_vendors_header": "تامین‌کنندگان موجود:", - "available_models_header": "مدل‌های موجود", - "no_items_found": "هیچ %s", - "no_description_available": "توضیحی در دسترس نیست", - "i18n_download_failed": "دانلود ترجمه برای زبان '%s' ناموفق بود: %v", - "i18n_load_failed": "بارگذاری فایل ترجمه ناموفق بود: %v", - "setup_welcome_header": "🎉 به Fabric خوش آمدید! بیایید تنظیمات را انجام دهیم.", - "setup_step_downloading_patterns": "📥 مرحله ۱: دانلود الگوها (برای کار Fabric ضروری است)...", - "setup_step_downloading_strategies": "📥 مرحله ۲: دانلود استراتژی‌ها (برای کار Fabric ضروری است)...", - "setup_step_configure_ai_provider": "🤖 مرحله ۳: پیکربندی یک ارائه‌دهنده هوش مصنوعی", - "setup_ai_provider_required": "Fabric برای کار کردن به حداقل یک ارائه‌دهنده هوش مصنوعی نیاز دارد.", - "setup_add_more_providers_later": "می‌توانید بعداً با 'fabric --setup' ارائه‌دهندگان بیشتری اضافه کنید", - "setup_step_setting_defaults": "⚙️ مرحله ۴: تنظیم ارائه‌دهنده و مدل پیش‌فرض...", - "setup_complete_header": "✅ تنظیمات کامل شد! اکنون می‌توانید از Fabric استفاده کنید.", - "setup_next_steps": "مراحل بعدی:", - "setup_list_patterns": "• نمایش الگوهای موجود: fabric -l", - "setup_try_pattern": "• امتحان یک الگو: echo 'متن شما' | fabric --pattern summarize", - "setup_configure_more": "• پیکربندی تنظیمات بیشتر: fabric --setup", - "setup_failed_download_patterns": "دانلود الگوها ناموفق بود: %w", - "setup_failed_download_strategies": "دانلود استراتژی‌ها ناموفق بود: %w", - "setup_failed_set_defaults": "تنظیم ارائه‌دهنده و مدل پیش‌فرض ناموفق بود: %w", - "setup_no_ai_provider_selected": "هیچ ارائه‌دهنده هوش مصنوعی انتخاب نشده - حداقل یکی ضروری است", - "setup_invalid_selection": "انتخاب نامعتبر: %s", - "setup_available_ai_providers": "ارائه‌دهندگان هوش مصنوعی موجود:", - "setup_enter_ai_provider_number": "شماره ارائه‌دهنده هوش مصنوعی", - "setup_available_plugins": "افزونه‌های موجود:", - "setup_plugin_number": "شماره افزونه", - "setup_plugin_prompt": "شماره افزونه‌ای را که می‌خواهید راه‌اندازی کنید وارد کنید", - "setup_required_configuration_header": "━━━ پیکربندی ضروری ━━━\n\nارائه‌دهندگان هوش مصنوعی [حداقل یکی ضروری است]", - "setup_required_tools": "ابزارهای ضروری", - "setup_optional_configuration_header": "━━━ پیکربندی اختیاری ━━━\n\nابزارهای اختیاری", - "setup_validation_header": "وضعیت پیکربندی:", - "setup_validation_ai_provider_configured": "✓ ارائه‌دهنده هوش مصنوعی پیکربندی شده", - "setup_validation_ai_provider_missing": "✗ ارائه‌دهنده هوش مصنوعی پیکربندی نشده - برای کار Fabric ضروری است", - "setup_validation_defaults_configured": "✓ ارائه‌دهنده/مدل پیش‌فرض تنظیم شده: %s/%s", - "setup_validation_defaults_missing": "✗ ارائه‌دهنده/مدل پیش‌فرض تنظیم نشده - برای کار Fabric ضروری است", - "setup_validation_patterns_configured": "✓ الگوها دانلود شده", - "setup_validation_patterns_missing": "✗ الگوها یافت نشد - برای کار Fabric ضروری است", - "setup_validation_strategies_configured": "✓ استراتژی‌ها دانلود شده", - "setup_validation_strategies_missing": "✗ استراتژی‌ها یافت نشد - برای کار Fabric ضروری است", - "setup_validation_incomplete_warning": "⚠️ تنظیمات ناقص! اجزای ضروری وجود ندارند.", - "setup_validation_incomplete_help": "دوباره 'fabric --setup' را اجرا کنید تا موارد ناقص را پیکربندی کنید،\nیا 'fabric -U' را برای دانلود الگوها و استراتژی‌ها اجرا کنید.", - "setup_validation_complete": "✓ تمام اجزای ضروری پیکربندی شده‌اند!", - "patterns_not_found_header": "⚠️ هیچ الگویی یافت نشد!", - "patterns_required_to_work": "الگوها برای کار Fabric ضروری هستند. برای رفع این مشکل:", - "patterns_option_run_setup": "گزینه ۱ (توصیه شده): اجرای تنظیمات برای دانلود الگوها", - "patterns_option_run_setup_command": "fabric --setup", - "patterns_option_run_update": "گزینه ۲: دانلود/به‌روزرسانی مستقیم الگوها", - "patterns_option_run_update_command": "fabric -U", - "pattern_not_found_no_patterns": "الگوی '%s' یافت نشد.\n\nهیچ الگویی نصب نشده است! برای رفع این مشکل:\n • 'fabric --setup' را برای پیکربندی و دانلود الگوها اجرا کنید\n • یا 'fabric -U' را برای دانلود/به‌روزرسانی الگوها اجرا کنید", - "pattern_not_found_list_available": "الگوی '%s' یافت نشد. برای مشاهده الگوهای موجود 'fabric -l' را اجرا کنید", - "plugin_configured": " ✓", - "plugin_not_configured": " ⚠️ پیکربندی نشده", - "defaults_setup_description": "ارائه‌دهنده و مدل هوش مصنوعی پیش‌فرض", - "defaults_model_question": "شاخص یا نام مدل پیش‌فرض خود را وارد کنید", - "defaults_model_context_length_question": "طول زمینه مدل را وارد کنید", + "custom_patterns_directory_question": "مسیر دایرکتوری الگوهای سفارشی خود را وارد کنید", "custom_patterns_label": "الگوهای سفارشی", "custom_patterns_setup_description": "الگوهای سفارشی - تنظیم دایرکتوری برای الگوهای سفارشی شما", - "custom_patterns_directory_question": "مسیر دایرکتوری الگوهای سفارشی خود را وارد کنید", + "defaults_model_context_length_question": "طول زمینه مدل را وارد کنید", + "defaults_model_question": "شاخص یا نام مدل پیش‌فرض خود را وارد کنید", + "defaults_setup_description": "ارائه‌دهنده و مدل هوش مصنوعی پیش‌فرض", + "disable_openai_responses_api": "غیرفعال کردن API OpenAI Responses (پیش‌فرض: false)", + "disable_pattern_variable_replacement": "غیرفعال کردن جایگزینی متغیرهای الگو", + "enable_web_search_tool": "فعال‌سازی ابزار جستجوی وب برای مدل‌های پشتیبانی شده (Anthropic، OpenAI، Gemini)", + "end_tag_thinking_sections": "تگ پایان برای بخش‌های تفکر", + "error_creating_audio_file": "خطا در ایجاد فایل صوتی: %v", + "error_creating_file": "خطا در ایجاد فایل: %v", + "error_fetching_playlist_videos": "خطا در دریافت ویدیوهای فهرست پخش: %w", + "error_parsing_config_file": "خطا در تجزیه فایل پیکربندی: %w", + "error_reading_config_file": "خطا در خواندن فایل پیکربندی: %w", + "error_reading_piped_message": "خطا در خواندن پیام هدایت شده از stdin: %w", + "error_writing_audio_data": "خطا در نوشتن داده‌های صوتی به فایل: %v", + "error_writing_to_file": "خطا در نوشتن به فایل: %v", + "extension_cmd_template_required": "الگوی دستور برای عملیات %s الزامی است", + "extension_command_template_label": " الگوی دستور: %s\n", + "extension_config_hash_mismatch": "عدم تطابق هش فایل پیکربندی برای %s", + "extension_config_path_label": " مسیر پیکربندی: %s\n\n", + "extension_description_label": " توضیحات: %s\n", + "extension_empty_command": "دستور خالی پس از قالب‌بندی", + "extension_executable_hash_mismatch": "عدم تطابق هش فایل اجرایی برای %s", + "extension_executable_label": " فایل اجرایی: %s\n", + "extension_executable_not_found": "فایل اجرایی یافت نشد: %w", + "extension_executable_required": "مسیر فایل اجرایی الزامی است", + "extension_executing_command": "در حال اجرای دستور: %s\n", + "extension_execution_failed_err": "اجرا ناموفق بود: %w\nerr: %s", + "extension_execution_failed_stderr": "اجرا ناموفق بود: %w\nstderr: %s", + "extension_execution_timed_out": "اجرا پس از %v منقضی شد", + "extension_failed_format_command": "قالب‌بندی دستور ناموفق بود: %w", + "extension_failed_get_absolute_path": "دریافت مسیر مطلق ناموفق بود: %w", + "extension_failed_get_extension": "دریافت افزونه ناموفق بود: %w", + "extension_failed_get_output_path": "دریافت مسیر خروجی ناموفق بود: %w\nerr: %s", + "extension_failed_hash_executable": "محاسبه هش فایل اجرایی ناموفق بود: %w", + "extension_failed_marshal_registry": "سریال‌سازی رجیستری افزونه‌ها ناموفق بود: %w", + "extension_failed_parse_config": "تجزیه فایل پیکربندی ناموفق بود: %w", + "extension_failed_parse_registry": "تجزیه رجیستری افزونه‌ها ناموفق بود: %w", + "extension_failed_read_config": "خواندن فایل پیکربندی ناموفق بود: %w", + "extension_failed_read_output_file": "خواندن فایل خروجی ناموفق بود: %w", + "extension_failed_read_registry": "خواندن رجیستری افزونه‌ها ناموفق بود: %w", + "extension_failed_register": "ثبت افزونه ناموفق بود: %w", + "extension_failed_remove": "حذف افزونه ناموفق بود: %w", + "extension_failed_verify_executable": "تأیید فایل اجرایی ناموفق بود: %w", + "extension_file_config_label": " پیکربندی فایل:\n", + "extension_invalid_config_path": "مسیر پیکربندی نامعتبر: %w", + "extension_invalid_definition": "تعریف افزونه نامعتبر: %w", + "extension_invalid_timeout": "مقدار مهلت زمانی نامعتبر '%s': باید مدت‌زمانی مانند '30s' یا '1m' باشد: %w", + "extension_invalid_timeout_format": "فرمت مهلت زمانی نامعتبر: %w", + "extension_name_contains_spaces": "نام افزونه '%s' حاوی فاصله است - نام‌ها نباید فاصله داشته باشند", + "extension_name_detail_label": "نام: %s\n", + "extension_name_empty": "نام افزونه نمی‌تواند خالی باشد", + "extension_name_label": "افزونه: %s\n", + "extension_name_required": "نام افزونه الزامی است", + "extension_no_file_config": "پیکربندی فایل یافت نشد", + "extension_no_output_file": "فایل خروجی در پیکربندی مشخص نشده است", + "extension_not_found": "افزونه %s یافت نشد", + "extension_operation_not_found": "عملیات %s برای افزونه %s یافت نشد", + "extension_operation_required": "حداقل یک عملیات باید تعریف شود", + "extension_operations_label": " عملیات‌ها:\n", + "extension_registered_success": "افزونه با موفقیت ثبت شد:\n", + "extension_registry_not_initialized": "رجیستری افزونه‌ها مقداردهی نشده است", + "extension_status_disabled": " وضعیت: غیرفعال - تأیید هش ناموفق: %v\n", + "extension_status_enabled": " وضعیت: فعال\n", + "extension_timeout_label": " مهلت زمانی: %s\n", + "extension_type_label": " نوع: %s\n", + "extension_type_required": "نوع افزونه الزامی است", + "extension_version_label": " نسخه: %s\n", + "extension_warning_load_registry": "هشدار: بارگذاری رجیستری افزونه‌ها ممکن نبود: %v\n", + "fabric_command_complete": "دستور Fabric تکمیل شد", + "fabric_command_complete_with_pattern": "Fabric: %s تکمیل شد", + "fetch_content_exceeds_limit": "fetch: محتوا بسیار بزرگ است: از %d بایت بیشتر است", + "fetch_content_not_utf8": "fetch: محتوا متن UTF-8 معتبر نیست", + "fetch_content_null_bytes": "fetch: محتوا شامل بایت‌های null است", + "fetch_content_too_large": "fetch: محتوا بسیار بزرگ است: %d بایت (حداکثر %d بایت)", + "fetch_error_create_request": "fetch: خطا در ایجاد درخواست: %v", + "fetch_error_fetching_url": "fetch: خطا در دریافت URL: %v", + "fetch_error_reading_response": "fetch: خطا در خواندن پاسخ: %v", + "fetch_http_error": "fetch: خطای HTTP: %d - %s", + "fetch_unknown_operation": "fetch: عملیات ناشناخته %q (پشتیبانی‌شده: get)", + "fetch_unsupported_content_type": "fetch: نوع محتوای پشتیبانی‌نشده %q - فقط محتوای متنی مجاز است", + "file_already_exists_choose_different": "فایل %s از قبل وجود دارد. لطفاً نام فایل متفاوتی انتخاب کنید یا فایل موجود را حذف کنید", + "file_already_exists_not_overwriting": "فایل %s از قبل وجود دارد، بازنویسی نمی‌شود. فایل موجود را تغییر نام دهید یا نام متفاوتی انتخاب کنید", + "file_manager_applied_operation": "عملیات %s روی %s اعمال شد", + "file_manager_empty_path": "مسیر خالی برای تغییر فایل %d", + "file_manager_failed_create_directory": "ایجاد دایرکتوری %s برای تغییر فایل %d ناموفق بود: %w", + "file_manager_failed_parse_json": "پارس %s JSON ناموفق بود: %w", + "file_manager_failed_write_file": "نوشتن فایل %s برای تغییر فایل %d ناموفق بود: %w", + "file_manager_file_content_too_large": "محتوای فایل بیش از حد بزرگ برای تغییر فایل %d: %d بایت", + "file_manager_invalid_format_no_json_array": "فرمت %s نامعتبر: هیچ آرایه JSON یافت نشد", + "file_manager_invalid_format_unbalanced_brackets": "فرمت %s نامعتبر: پرانتزهای نامتعادل", + "file_manager_invalid_operation": "عملیات نامعتبر برای تغییر فایل %d: %s", + "file_manager_suspicious_path": "مسیر مشکوک برای تغییر فایل %d: %s", + "gemini_audio_data_too_small": "داده صوتی بسیار کوچک: %d بایت، حداقل مورد نیاز: %d", + "gemini_empty_pcm_data": "داده PCM خالی ارائه شد", + "gemini_invalid_location_format": "فرمت مکان جستجوی نامعتبر %q: باید منطقه زمانی (مثال 'America/Los_Angeles') یا کد زبان (مثال 'en-US') باشد", + "gemini_invalid_voice": "صدای نامعتبر '%s'. صداهای معتبر عبارتند از: %v", + "gemini_no_audio_data": "داده صوتی از مدل TTS دریافت نشد", + "gemini_no_text_for_tts": "محتوای متنی برای تولید TTS یافت نشد", + "gemini_pcm_data_too_large": "داده PCM بسیار بزرگ: %d بایت، حداکثر مجاز: %d", + "gemini_stream_error": "خطا: %v", + "gemini_tts_failed": "تولید TTS ناموفق بود: %w", + "gemini_unexpected_data_type": "نوع داده غیرمنتظره: %s، داده صوتی مورد انتظار بود", + "gemini_wav_data_invalid": "داده WAV تولید شده نامعتبر است: %d بایت، حداقل مورد نیاز: %d", + "gemini_wav_generation_failed": "تولید فایل WAV ناموفق بود: %w", + "grab_comments_from_youtube": "دریافت نظرات از ویدیو یوتیوب و ارسال به گفتگو", + "grab_transcript_from_youtube": "دریافت رونوشت از ویدیو یوتیوب و ارسال به گفتگو (به طور پیش‌فرض استفاده می‌شود).", + "grab_transcript_with_timestamps": "دریافت رونوشت از ویدیو یوتیوب با مهر زمان و ارسال به گفتگو", + "groups_items_number_out_of_range": "شماره %d خارج از محدوده است", + "help_message": "نمایش این پیام راهنما", + "help_options_header": "گزینه‌های راهنما:", + "html_readability_error": "از ورودی اصلی استفاده کن، چون نمی‌توان خوانایی HTML را اعمال کرد", + "i18n_download_failed": "دانلود ترجمه برای زبان '%s' ناموفق بود: %v", + "i18n_load_failed": "بارگذاری فایل ترجمه ناموفق بود: %v", + "image_compression_jpeg_webp_only": "فشرده‌سازی تصویر فقط با فرمت‌های JPEG و WebP قابل استفاده است، نه %s", + "image_compression_range_error": "فشرده‌سازی تصویر باید بین 0 تا 100 باشد، دریافت شده: %d", + "image_dimensions_help": "ابعاد تصویر: 1024x1024، 1536x1024، 1024x1536، auto (پیش‌فرض: auto)", + "image_file_already_exists": "فایل تصویر از قبل وجود دارد: %s", + "image_parameters_require_image_file": "پارامترهای تصویر (--image-size، --image-quality، --image-background، --image-compression) فقط با --image-file قابل استفاده هستند", + "image_quality_help": "کیفیت تصویر: low، medium، high، auto (پیش‌فرض: auto)", + "invalid_config_path": "مسیر پیکربندی نامعتبر: %w", + "invalid_image_background": "پس‌زمینه تصویر نامعتبر '%s'. پس‌زمینه‌های پشتیبانی شده: opaque، transparent", + "invalid_image_file_extension": "پسوند فایل تصویر نامعتبر '%s'. فرمت‌های پشتیبانی شده: .png، .jpeg، .jpg، .webp", + "invalid_image_quality": "کیفیت تصویر نامعتبر '%s'. کیفیت‌های پشتیبانی شده: low، medium، high، auto", + "invalid_image_size": "اندازه تصویر نامعتبر '%s'. اندازه‌های پشتیبانی شده: 1024x1024، 1536x1024، 1024x1536، auto", + "jina_error_creating_request": "خطا در ایجاد درخواست: %v", + "jina_error_reading_response_body": "خطا در خواندن بدنه پاسخ: %v", + "jina_error_sending_request": "خطا در ارسال درخواست: %v", "jina_label": "Jina AI", "jina_setup_description": "سرویس Jina AI - برای دریافت صفحه وب به‌صورت متن تمیز و سازگار با LLM", - "youtube_label": "YouTube", - "youtube_setup_description": "YouTube - برای دریافت رونوشت ویدیو (از طریق yt-dlp) و نظرات/متادیتا (از طریق API یوتیوب)", "language_label": "زبان", - "language_setup_description": "زبان - زبان خروجی پیش‌فرض ارائه‌دهنده هوش مصنوعی", "language_output_question": "زبان خروجی پیش‌فرض خود را وارد کنید (به عنوان مثال: zh_CN)", - "optional_marker": "(اختیاری)", - "required_marker": "[الزامی]", - "patterns_loader_label": "بارگذار الگوها", - "patterns_setup_description": "الگوها - دانلود الگوها", - "patterns_git_repo_url_label": "آدرس مخزن گیت", - "patterns_git_repo_url_question": "آدرس مخزن گیت پیش‌فرض برای الگوها را وارد کنید", - "patterns_git_repo_folder_label": "پوشه الگوها در مخزن گیت", - "patterns_git_repo_folder_question": "پوشه پیش‌فرض در مخزن گیت که الگوها در آن ذخیره می‌شوند را وارد کنید", - "patterns_failed_create_temp_folder": "ایجاد پوشه موقت الگوها ناموفق بود: %w", - "patterns_downloading": "در حال دانلود الگوها و پر کردن %s...\\n", - "patterns_failed_download_from_git": "دانلود الگوها از مخزن گیت ناموفق بود: %w", - "patterns_saving_updated_configuration": "💾 ذخیره پیکربندی به‌روزشده (مسیر از '%s' به '%s' تغییر کرد)...\\n", - "patterns_failed_move_patterns": "انتقال الگوها به شاخه پیکربندی ناموفق بود: %w", - "patterns_download_success": "✅ الگوها با موفقیت در %s دانلود و نصب شدند\\n", - "patterns_failed_unique_file": "ایجاد فایل الگوهای یکتا ناموفق بود: %w", - "patterns_failed_access_directory": "دسترسی به پوشه الگو '%s' ناموفق بود: %w", - "patterns_preserve_warning": "هشدار: الگوی سفارشی '%s' حفظ نشد: %v\\n", - "patterns_preserved_custom_pattern": "الگوی سفارشی حفظ شد: %s\\n", - "patterns_failed_create_temp_dir": "ایجاد پوشه موقت ناموفق بود: %w", - "patterns_cloning_repository": "در حال کلون کردن مخزن %s (مسیر: %s)...\\n", - "patterns_failed_download_from_repo": "دانلود الگوها از %s ناموفق بود: %w", - "patterns_failed_read_temp_directory": "خواندن پوشه موقت الگوها ناموفق بود: %w", - "patterns_no_patterns_migration_failed": "هیچ الگویی در مخزن با مسیر %s یافت نشد و مهاجرت هم ناموفق بود: %w", - "patterns_downloaded_temp": "%d الگو در پوشه موقت دانلود شد\\n", - "patterns_detected_old_path": "🔄 مسیر قدیمی الگو 'patterns' شناسایی شد، تلاش برای مهاجرت به 'data/patterns'...", - "patterns_warning_remove_test_folder": "هشدار: پوشه موقت آزمایشی '%s' حذف نشد: %v\\n", - "patterns_found_new_path": "✅ %d الگو در مسیر جدید '%s' پیدا شد، پیکربندی به‌روزرسانی می‌شود...\\n", - "patterns_failed_move_test_patterns": "انتقال الگوهای آزمایشی به پوشه موقت ناموفق بود: %w", - "patterns_unable_to_find_or_migrate": "الگویی در مسیر فعلی '%s' یافت نشد یا مهاجرت به ساختار جدید ممکن نبود", - "patterns_failed_read_directory": "خواندن پوشه الگوها ناموفق بود: %w", - "patterns_debug_included_custom_directory": "📂 الگوهای پوشه سفارشی نیز اضافه شد: %s\\n", - "patterns_warning_custom_directory": "هشدار: پوشه الگوی سفارشی %s قابل خواندن نیست: %v\\n", - "patterns_no_patterns_found_in_directories": "هیچ الگویی در پوشه‌های %s و %s پیدا نشد", - "patterns_no_patterns_found_in_directory": "هیچ الگویی در پوشه %s پیدا نشد", - "patterns_failed_write_unique_file": "نوشتن فایل الگوهای یکتا ناموفق بود: %w", - "patterns_unique_file_created": "📝 فایل الگوهای یکتا با %d الگو ایجاد شد\\n", - "patterns_no_patterns_copied": "هیچ الگویی با موفقیت به %s کپی نشد", - "patterns_failed_loaded_marker": "ایجاد فایل نشانه '%s' ناموفق بود: %w", - "strategies_label": "راهبردهای پرامپت", - "strategies_setup_description": "راهبردها - دانلود راهبردهای پرامپت (مثل chain of thought)", - "strategies_git_repo_url_label": "آدرس مخزن گیت", - "strategies_git_repo_url_question": "آدرس مخزن گیت پیش‌فرض برای راهبردها را وارد کنید", - "strategies_git_repo_folder_label": "پوشه راهبردها در مخزن گیت", - "strategies_git_repo_folder_question": "پوشه پیش‌فرض در مخزن گیت که راهبردها در آن ذخیره می‌شوند را وارد کنید", - "strategies_downloading": "در حال دانلود راهبردها و پر کردن %s...\\n", - "strategies_download_success": "✅ راهبردها با موفقیت در %s دانلود و نصب شدند\\n", - "strategies_home_dir_error": "دریافت پوشه خانگی ممکن نبود: %v", - "strategies_failed_create_directory": "ایجاد پوشه راهبردها ناموفق بود: %w", - "strategies_cloning_repository": "در حال کلون کردن مخزن %s (مسیر: %s)...\\n", - "strategies_failed_download": "دانلود راهبردها ناموفق بود: %w", - "strategies_downloaded_count": "%d راهبرد دانلود شد\\n", - "strategies_home_dir_fallback": "دریافت پوشه خانگی ممکن نبود: %v، از پوشه فعلی استفاده می‌شود", - "strategy_not_found": "راهبرد %s یافت نشد. برای مشاهده فهرست 'fabric --liststrategies' را اجرا کنید", - "strategies_none_found": "هیچ راهبردی پیدا نشد. برای دانلود راهبردها 'fabric --setup' را اجرا کنید", - "strategies_available_header": "راهبردهای موجود:", - "plugin_enter_value": "مقدار %v %v خود را وارد کنید", - "plugin_enable_bool_question": "%v %v را فعال کنید (true/false)", - "plugin_setup_skipped": "[%v] رد شد\\n", - "plugin_question_bool": "%v%v (true/false، برای '%s' خالی بگذارید یا '%v' را برای حذف مقدار بنویسید):", - "plugin_question_with_default": "%v%v (برای '%s' خالی بگذارید یا '%v' را برای حذف مقدار بنویسید):", - "plugin_question_optional": "%v%v (برای رد کردن خالی بگذارید):", - "plugin_invalid_boolean_value": "مقدار بولی نامعتبر: %v", - "plugin_setting_not_valid": "%v=%v معتبر نیست", - "plugin_invalid_bool": "مقدار bool نامعتبر: %q", - "ollama_num_ctx_must_be_finite": "num_ctx باید یک عدد محدود باشد", - "ollama_num_ctx_must_be_integer": "num_ctx باید یک عدد صحیح باشد، عدد اعشاری با قسمت کسری دریافت شد", - "ollama_num_ctx_value_out_of_range": "مقدار num_ctx خارج از محدوده است", - "ollama_num_ctx_must_be_positive": "num_ctx باید مثبت باشد، دریافت شده: %d", - "ollama_num_ctx_value_too_large": "مقدار num_ctx بیش از حد بزرگ است: %d", - "ollama_num_ctx_must_be_valid_number": "num_ctx باید یک عدد معتبر باشد", - "ollama_num_ctx_must_be_valid_number_got": "num_ctx باید یک عدد معتبر باشد، دریافت شده: %s", - "ollama_num_ctx_invalid_type": "num_ctx باید یک عدد باشد، نوع نامعتبر دریافت شد", - "ollama_num_ctx_exceeds_maximum": "num_ctx از حداکثر مقدار مجاز %d فراتر رفته است", - "ollama_error_reading_body": "خطا در خواندن بدنه: %v", - "ollama_error_endpoint": "در حال آزمایش نقطه پایانی", - "ollama_error_unmarshalling_body": "خطا در تجزیه بدنه: %v", - "ollama_invalid_num_ctx_in_request": "num_ctx نامعتبر در درخواست: %v", - "ollama_warning_parse_variables": "هشدار: شکست در تجزیه options.variables به عنوان JSON: %v", - "ollama_error_marshalling_body": "خطا در سریال‌سازی بدنه: %v", + "language_setup_description": "زبان - زبان خروجی پیش‌فرض ارائه‌دهنده هوش مصنوعی", + "list_all_available_models": "فهرست تمام مدل‌های موجود", + "list_all_contexts": "فهرست تمام زمینه‌ها", + "list_all_patterns": "فهرست تمام الگوها", + "list_all_registered_extensions": "فهرست تمام افزونه‌های ثبت شده", + "list_all_sessions": "فهرست تمام جلسات", + "list_all_strategies": "فهرست تمام استراتژی‌ها", + "list_all_vendors": "فهرست تمام تامین‌کنندگان", + "list_gemini_tts_voices": "فهرست تمام صداهای TTS Gemini موجود", + "list_transcription_models": "فهرست تمام مدل‌های رونویسی موجود", + "lmstudio_api_url_question": "آدرس URL %v خود را وارد کنید (به عنوان یادآوری، معمولاً %v است)", + "lmstudio_error_reading_response": "خطا در خواندن پاسخ: %w", + "lmstudio_failed_create_request": "ایجاد درخواست ناموفق بود: %w", + "lmstudio_failed_decode_response": "رمزگشایی پاسخ ناموفق بود: %w", + "lmstudio_failed_marshal_payload": "سریال‌سازی بار داده ناموفق بود: %w", + "lmstudio_failed_send_request": "ارسال درخواست ناموفق بود: %w", + "lmstudio_invalid_response_missing_choices": "فرمت پاسخ نامعتبر: گزینه‌ها وجود ندارند یا خالی هستند", + "lmstudio_invalid_response_missing_content": "فرمت پاسخ نامعتبر: محتوا در پیام وجود ندارد یا رشته نیست", + "lmstudio_invalid_response_missing_message": "فرمت پاسخ نامعتبر: پیام در اولین گزینه وجود ندارد", + "lmstudio_invalid_response_missing_text": "فرمت پاسخ نامعتبر: متن در اولین گزینه وجود ندارد یا رشته نیست", + "lmstudio_no_embeddings_returned": "هیچ بردار جاسازی بازگردانده نشد", + "lmstudio_unexpected_status_code": "کد وضعیت غیرمنتظره: %d", + "model_context_length_ollama": "طول زمینه مدل (فقط ollama را تحت تأثیر قرار می‌دهد)", + "model_for_transcription": "مدل برای استفاده در رونویسی (جدا از مدل گفتگو)", + "no_description_available": "توضیحی در دسترس نیست", + "no_items_found": "هیچ %s", + "no_notification_system_available": "هیچ سیستم اعلان‌رسانی در دسترس نیست", + "number_of_latest_patterns": "تعداد جدیدترین الگوها برای فهرست", + "ollama_cannot_parse_url": "نمی‌توان URL '%s' را تجزیه کرد: %v", + "ollama_chat_request_failed": "درخواست چت ناموفق بود: %v", + "ollama_empty_address": "آدرس خالی", "ollama_error_building_chat_url": "خطا در ساخت URL چت /: %v", "ollama_error_creating_chat_request": "خطا در ایجاد درخواست /chat: %v", - "ollama_failed_create_request": "ایجاد درخواست ناموفق بود", + "ollama_error_endpoint": "در حال آزمایش نقطه پایانی", "ollama_error_getting_chat_body": "خطا در دریافت بدنه /chat: %v", - "ollama_upstream_non_2xx_body_unreadable": "سرور Fabric بالادستی وضعیت غیر-2xx %d را برگرداند و بدنه قابل خواندن نبود: %v", - "ollama_upstream_non_2xx": "سرور Fabric بالادستی وضعیت غیر-2xx %d را برگرداند: %s", - "ollama_upstream_returned_status": "سرور Fabric بالادستی وضعیت %d را برگرداند", - "ollama_error_prefix": "خطا: %s", + "ollama_error_marshalling_body": "خطا در سریال‌سازی بدنه: %v", "ollama_error_parse_upstream_response": "خطا: شکست در تجزیه پاسخ بالادستی", - "ollama_failed_unmarshal_fabric_response": "شکست در تجزیه پاسخ Fabric", - "ollama_error_writing_response": "خطا در نوشتن پاسخ: %v", + "ollama_error_prefix": "خطا: %s", + "ollama_error_reading_body": "خطا در خواندن بدنه: %v", "ollama_error_scanning_body": "خطا در اسکن بدنه: %v", + "ollama_error_unmarshalling_body": "خطا در تجزیه بدنه: %v", + "ollama_error_writing_response": "خطا در نوشتن پاسخ: %v", + "ollama_failed_create_request": "ایجاد درخواست ناموفق بود", + "ollama_failed_decode_data_url": "رمزگشایی URL داده ناموفق بود: %v", + "ollama_failed_fetch_image": "دریافت تصویر از %s ناموفق بود: %s", "ollama_failed_scan_sse_stream": "شکست در اسکن جریان پاسخ SSE: %v", - "ollama_sse_buffer_limit": "خط SSE از حد بافر 1MB فراتر رفت - خط داده بیش از حد بزرگ است", - "ollama_warning_no_content": "هشدار: هیچ محتوایی از سرور Fabric بالادستی دریافت نشد", - "ollama_no_content_from_upstream": "هیچ محتوایی از سرور Fabric بالادستی دریافت نشد", - "ollama_empty_address": "آدرس خالی", + "ollama_failed_unmarshal_fabric_response": "شکست در تجزیه پاسخ Fabric", + "ollama_http_timeout_question": "زمان انتظار HTTP را وارد کنید (مثلاً 20m، 60s)", "ollama_invalid_address": "آدرس نامعتبر: %w", "ollama_invalid_address_missing_host": "آدرس نامعتبر: میزبان وجود ندارد", "ollama_invalid_address_missing_hostname": "آدرس نامعتبر: نام میزبان وجود ندارد", "ollama_invalid_address_path_not_allowed": "آدرس نامعتبر: مؤلفه مسیر در آدرس ساده مجاز نیست", - "extension_registry_not_initialized": "رجیستری افزونه‌ها مقداردهی نشده است", - "extension_name_label": "افزونه: %s\n", - "extension_status_disabled": " وضعیت: غیرفعال - تأیید هش ناموفق: %v\n", - "extension_config_path_label": " مسیر پیکربندی: %s\n\n", - "extension_status_enabled": " وضعیت: فعال\n", - "extension_executable_label": " فایل اجرایی: %s\n", - "extension_type_label": " نوع: %s\n", - "extension_timeout_label": " مهلت زمانی: %s\n", - "extension_description_label": " توضیحات: %s\n", - "extension_version_label": " نسخه: %s\n", - "extension_operations_label": " عملیات‌ها:\n", - "extension_command_template_label": " الگوی دستور: %s\n", - "extension_file_config_label": " پیکربندی فایل:\n", - "extension_invalid_config_path": "مسیر پیکربندی نامعتبر: %w", - "extension_failed_read_config": "خواندن فایل پیکربندی ناموفق بود: %w", - "extension_failed_parse_config": "تجزیه فایل پیکربندی ناموفق بود: %w", - "extension_failed_register": "ثبت افزونه ناموفق بود: %w", - "extension_invalid_timeout": "مقدار مهلت زمانی نامعتبر '%s': باید مدت‌زمانی مانند '30s' یا '1m' باشد: %w", - "extension_registered_success": "افزونه با موفقیت ثبت شد:\n", - "extension_name_detail_label": "نام: %s\n", - "extension_failed_remove": "حذف افزونه ناموفق بود: %w", - "lmstudio_api_url_question": "آدرس URL %v خود را وارد کنید (به عنوان یادآوری، معمولاً %v است)", - "lmstudio_failed_create_request": "ایجاد درخواست ناموفق بود: %w", - "lmstudio_failed_send_request": "ارسال درخواست ناموفق بود: %w", - "lmstudio_unexpected_status_code": "کد وضعیت غیرمنتظره: %d", - "lmstudio_failed_decode_response": "رمزگشایی پاسخ ناموفق بود: %w", - "lmstudio_failed_marshal_payload": "سریال‌سازی بار داده ناموفق بود: %w", - "lmstudio_error_reading_response": "خطا در خواندن پاسخ: %w", - "lmstudio_invalid_response_missing_choices": "فرمت پاسخ نامعتبر: گزینه‌ها وجود ندارند یا خالی هستند", - "lmstudio_invalid_response_missing_message": "فرمت پاسخ نامعتبر: پیام در اولین گزینه وجود ندارد", - "lmstudio_invalid_response_missing_content": "فرمت پاسخ نامعتبر: محتوا در پیام وجود ندارد یا رشته نیست", - "lmstudio_invalid_response_missing_text": "فرمت پاسخ نامعتبر: متن در اولین گزینه وجود ندارد یا رشته نیست", - "lmstudio_no_embeddings_returned": "هیچ بردار جاسازی بازگردانده نشد", - "extension_warning_load_registry": "هشدار: بارگذاری رجیستری افزونه‌ها ممکن نبود: %v\n", - "extension_name_empty": "نام افزونه نمی‌تواند خالی باشد", - "extension_name_contains_spaces": "نام افزونه '%s' حاوی فاصله است - نام‌ها نباید فاصله داشته باشند", - "extension_executable_not_found": "فایل اجرایی یافت نشد: %w", - "extension_failed_get_absolute_path": "دریافت مسیر مطلق ناموفق بود: %w", - "extension_failed_hash_executable": "محاسبه هش فایل اجرایی ناموفق بود: %w", - "extension_invalid_definition": "تعریف افزونه نامعتبر: %w", - "extension_name_required": "نام افزونه الزامی است", - "extension_executable_required": "مسیر فایل اجرایی الزامی است", - "extension_type_required": "نوع افزونه الزامی است", - "extension_invalid_timeout_format": "فرمت مهلت زمانی نامعتبر: %w", - "extension_operation_required": "حداقل یک عملیات باید تعریف شود", - "extension_cmd_template_required": "الگوی دستور برای عملیات %s الزامی است", - "extension_not_found": "افزونه %s یافت نشد", - "extension_config_hash_mismatch": "عدم تطابق هش فایل پیکربندی برای %s", - "extension_failed_verify_executable": "تأیید فایل اجرایی ناموفق بود: %w", - "extension_executable_hash_mismatch": "عدم تطابق هش فایل اجرایی برای %s", - "extension_failed_marshal_registry": "سریال‌سازی رجیستری افزونه‌ها ناموفق بود: %w", - "extension_failed_read_registry": "خواندن رجیستری افزونه‌ها ناموفق بود: %w", - "extension_failed_parse_registry": "تجزیه رجیستری افزونه‌ها ناموفق بود: %w", - "extension_failed_get_extension": "دریافت افزونه ناموفق بود: %w", - "extension_failed_format_command": "قالب‌بندی دستور ناموفق بود: %w", - "extension_empty_command": "دستور خالی پس از قالب‌بندی", - "extension_operation_not_found": "عملیات %s برای افزونه %s یافت نشد", - "extension_executing_command": "در حال اجرای دستور: %s\n", - "extension_execution_failed_stderr": "اجرا ناموفق بود: %w\nstderr: %s", - "extension_no_file_config": "پیکربندی فایل یافت نشد", - "extension_no_output_file": "فایل خروجی در پیکربندی مشخص نشده است", - "extension_execution_timed_out": "اجرا پس از %v منقضی شد", - "extension_execution_failed_err": "اجرا ناموفق بود: %w\nerr: %s", - "extension_failed_read_output_file": "خواندن فایل خروجی ناموفق بود: %w", - "extension_failed_get_output_path": "دریافت مسیر خروجی ناموفق بود: %w\nerr: %s", - "spotify_failed_create_token_request": "ایجاد درخواست توکن ناموفق بود: %w", - "spotify_failed_request_access_token": "درخواست توکن دسترسی ناموفق بود: %w", - "spotify_failed_get_access_token": "دریافت توکن دسترسی ناموفق بود: وضعیت %d، پاسخ: %s", - "spotify_failed_decode_token_response": "رمزگشایی پاسخ توکن ناموفق بود: %w", - "spotify_failed_create_request": "ایجاد درخواست ناموفق بود: %w", - "spotify_failed_execute_request": "اجرای درخواست ناموفق بود: %w", - "spotify_failed_read_response_body": "خواندن متن پاسخ ناموفق بود: %w", + "ollama_invalid_data_url_format": "فرمت URL داده نامعتبر", + "ollama_invalid_http_timeout_using_default": "زمان انتظار HTTP نامعتبر '%s': %v، استفاده از مقدار پیش‌فرض", + "ollama_invalid_num_ctx_in_request": "num_ctx نامعتبر در درخواست: %v", + "ollama_no_content_from_upstream": "هیچ محتوایی از سرور Fabric بالادستی دریافت نشد", + "ollama_num_ctx_exceeds_maximum": "num_ctx از حداکثر مقدار مجاز %d فراتر رفته است", + "ollama_num_ctx_invalid_type": "num_ctx باید یک عدد باشد، نوع نامعتبر دریافت شد", + "ollama_num_ctx_must_be_finite": "num_ctx باید یک عدد محدود باشد", + "ollama_num_ctx_must_be_integer": "num_ctx باید یک عدد صحیح باشد، عدد اعشاری با قسمت کسری دریافت شد", + "ollama_num_ctx_must_be_positive": "num_ctx باید مثبت باشد، دریافت شده: %d", + "ollama_num_ctx_must_be_valid_number": "num_ctx باید یک عدد معتبر باشد", + "ollama_num_ctx_must_be_valid_number_got": "num_ctx باید یک عدد معتبر باشد، دریافت شده: %s", + "ollama_num_ctx_value_out_of_range": "مقدار num_ctx خارج از محدوده است", + "ollama_num_ctx_value_too_large": "مقدار num_ctx بیش از حد بزرگ است: %d", + "ollama_sse_buffer_limit": "خط SSE از حد بافر 1MB فراتر رفت - خط داده بیش از حد بزرگ است", + "ollama_upstream_non_2xx": "سرور Fabric بالادستی وضعیت غیر-2xx %d را برگرداند: %s", + "ollama_upstream_non_2xx_body_unreadable": "سرور Fabric بالادستی وضعیت غیر-2xx %d را برگرداند و بدنه قابل خواندن نبود: %v", + "ollama_upstream_returned_status": "سرور Fabric بالادستی وضعیت %d را برگرداند", + "ollama_warning_no_content": "هشدار: هیچ محتوایی از سرور Fabric بالادستی دریافت نشد", + "ollama_warning_parse_variables": "هشدار: شکست در تجزیه options.variables به عنوان JSON: %v", + "openai_api_base_url_not_configured": "URL پایه API برای ارائه‌دهنده %s پیکربندی نشده است", + "openai_audio_ffmpeg_failed": "ffmpeg ناموفق بود: %v: %s", + "openai_audio_ffmpeg_not_found_install": "ffmpeg یافت نشد: لطفاً نصب کنید", + "openai_audio_file_exceeds_limit_enable_split": "فایل %s از حد ۲۵ مگابایت بیشتر است؛ از --split-media-file برای فعال‌سازی تقسیم خودکار استفاده کنید", + "openai_audio_file_exceeds_limit_splitting": "فایل %s بزرگ‌تر از حد مجاز است... در حال تقسیم...", + "openai_audio_model_not_supported_for_transcription": "مدل '%s' برای رونویسی پشتیبانی نمی‌شود", + "openai_audio_running_ffmpeg_split_chunks": "در حال اجرای ffmpeg برای تقسیم صدا به بخش‌های %d ثانیه‌ای...", + "openai_audio_unable_to_split_acceptable_size_chunks": "امکان تقسیم فایل به بخش‌های قابل قبول وجود ندارد", + "openai_audio_unsupported_audio_format": "فرمت صوتی پشتیبانی نشده '%s'", + "openai_audio_using_model_to_transcribe_part": "استفاده از مدل %s برای رونویسی بخش %d (نام فایل: %s)...", + "openai_failed_to_create_models_url": "ایجاد URL مدل‌ها ناموفق بود: %w", + "openai_image_failed_to_create_directory": "ایجاد پوشه %s ناموفق بود: %w", + "openai_image_failed_to_decode_image_data": "رمزگشایی داده‌های تصویر ناموفق بود: %w", + "openai_image_failed_to_save_image": "ذخیره تصویر در %s ناموفق بود: %w", + "openai_image_saved_to": "تصویر ذخیره شد در: %s", + "openai_model_no_image_generation": "مدل '%s' از تولید تصویر پشتیبانی نمی‌کند. مدل‌های پشتیبانی شده: %s", + "openai_models_response_too_large": "پاسخ مدل‌ها از ارائه‌دهنده %s بیش از حد بزرگ است (>%d بایت)", + "openai_unable_to_parse_models_response": "تجزیه پاسخ مدل‌ها ناموفق بود; پاسخ خام: %s", + "openai_unexpected_status_code_read_error": "کد وضعیت غیرمنتظره: %d از ارائه‌دهنده %s (خطا در خواندن پاسخ: %v)", + "openai_unexpected_status_code_with_body": "کد وضعیت غیرمنتظره: %d از ارائه‌دهنده %s، پاسخ: %s", + "openai_warning_model_no_image_generation": "هشدار: مدل '%s' از تولید تصویر پشتیبانی نمی‌کند. مدل‌های پشتیبانی شده: %s. استفاده از -m gpt-5.2 برای تولید تصویر را در نظر بگیرید.\n", + "optional_marker": "(اختیاری)", + "options_placeholder": "[گزینه‌ها]", + "output_entire_session": "خروجی کل جلسه (حتی موقت) به فایل خروجی", + "output_full": "خروجی: %s", + "output_raw_list_shell_completion": "خروجی فهرست خام بدون سرتیتر/قالب‌بندی (برای تکمیل shell)", + "output_to_file": "خروجی به فایل", + "output_truncated": "خروجی: %s...", + "output_video_metadata": "نمایش فراداده ویدیو", + "path_to_yaml_config": "مسیر فایل پیکربندی YAML", + "pattern_not_found_list_available": "الگوی '%s' یافت نشد. برای مشاهده الگوهای موجود 'fabric -l' را اجرا کنید", + "pattern_not_found_no_patterns": "الگوی '%s' یافت نشد.\n\nهیچ الگویی نصب نشده است! برای رفع این مشکل:\n • 'fabric --setup' را برای پیکربندی و دانلود الگوها اجرا کنید\n • یا 'fabric -U' را برای دانلود/به‌روزرسانی الگوها اجرا کنید", + "pattern_variables_help": "مقادیر برای متغیرهای الگو، مثال: -v=#role:expert -v=#points:30", + "patterns_cloning_repository": "در حال کلون کردن مخزن %s (مسیر: %s)...\\n", + "patterns_debug_included_custom_directory": "📂 الگوهای پوشه سفارشی نیز اضافه شد: %s\\n", + "patterns_detected_old_path": "🔄 مسیر قدیمی الگو 'patterns' شناسایی شد، تلاش برای مهاجرت به 'data/patterns'...", + "patterns_download_success": "✅ الگوها با موفقیت در %s دانلود و نصب شدند\\n", + "patterns_downloaded_temp": "%d الگو در پوشه موقت دانلود شد\\n", + "patterns_downloading": "در حال دانلود الگوها و پر کردن %s...\\n", + "patterns_failed_access_directory": "دسترسی به پوشه الگو '%s' ناموفق بود: %w", + "patterns_failed_create_temp_dir": "ایجاد پوشه موقت ناموفق بود: %w", + "patterns_failed_create_temp_folder": "ایجاد پوشه موقت الگوها ناموفق بود: %w", + "patterns_failed_download_from_git": "دانلود الگوها از مخزن گیت ناموفق بود: %w", + "patterns_failed_download_from_repo": "دانلود الگوها از %s ناموفق بود: %w", + "patterns_failed_loaded_marker": "ایجاد فایل نشانه '%s' ناموفق بود: %w", + "patterns_failed_move_patterns": "انتقال الگوها به شاخه پیکربندی ناموفق بود: %w", + "patterns_failed_move_test_patterns": "انتقال الگوهای آزمایشی به پوشه موقت ناموفق بود: %w", + "patterns_failed_read_directory": "خواندن پوشه الگوها ناموفق بود: %w", + "patterns_failed_read_temp_directory": "خواندن پوشه موقت الگوها ناموفق بود: %w", + "patterns_failed_unique_file": "ایجاد فایل الگوهای یکتا ناموفق بود: %w", + "patterns_failed_write_unique_file": "نوشتن فایل الگوهای یکتا ناموفق بود: %w", + "patterns_found_new_path": "✅ %d الگو در مسیر جدید '%s' پیدا شد، پیکربندی به‌روزرسانی می‌شود...\\n", + "patterns_git_repo_folder_question": "پوشه پیش‌فرض در مخزن گیت که الگوها در آن ذخیره می‌شوند را وارد کنید", + "patterns_git_repo_url_question": "آدرس مخزن گیت پیش‌فرض برای الگوها را وارد کنید", + "patterns_loader_label": "بارگذار الگوها", + "patterns_no_patterns_copied": "هیچ الگویی با موفقیت به %s کپی نشد", + "patterns_no_patterns_found_in_directories": "هیچ الگویی در پوشه‌های %s و %s پیدا نشد", + "patterns_no_patterns_found_in_directory": "هیچ الگویی در پوشه %s پیدا نشد", + "patterns_no_patterns_migration_failed": "هیچ الگویی در مخزن با مسیر %s یافت نشد و مهاجرت هم ناموفق بود: %w", + "patterns_not_found_header": "⚠️ هیچ الگویی یافت نشد!", + "patterns_option_run_setup": "گزینه ۱ (توصیه شده): اجرای تنظیمات برای دانلود الگوها", + "patterns_option_run_setup_command": "fabric --setup", + "patterns_option_run_update": "گزینه ۲: دانلود/به‌روزرسانی مستقیم الگوها", + "patterns_option_run_update_command": "fabric -U", + "patterns_preserve_warning": "هشدار: الگوی سفارشی '%s' حفظ نشد: %v\\n", + "patterns_preserved_custom_pattern": "الگوی سفارشی حفظ شد: %s\\n", + "patterns_required_to_work": "الگوها برای کار Fabric ضروری هستند. برای رفع این مشکل:", + "patterns_saving_updated_configuration": "💾 ذخیره پیکربندی به‌روزشده (مسیر از '%s' به '%s' تغییر کرد)...\\n", + "patterns_setup_description": "الگوها - دانلود الگوها", + "patterns_unable_to_find_or_migrate": "الگویی در مسیر فعلی '%s' یافت نشد یا مهاجرت به ساختار جدید ممکن نبود", + "patterns_unique_file_created": "📝 فایل الگوهای یکتا با %d الگو ایجاد شد\\n", + "patterns_warning_custom_directory": "هشدار: پوشه الگوی سفارشی %s قابل خواندن نیست: %v\\n", + "patterns_warning_remove_test_folder": "هشدار: پوشه موقت آزمایشی '%s' حذف نشد: %v\\n", + "perplexity_api_key_not_configured": "کلید API برای %s پیکربندی نشده است. متغیر محیطی %s را تنظیم کنید یا 'fabric --setup' را برای پیکربندی %s اجرا کنید", + "perplexity_api_request_failed": "درخواست API Perplexity ناموفق بود: %w", + "perplexity_citations_header": "\n\n**منابع:**\n", + "perplexity_failed_configure": "پیکربندی Perplexity ناموفق بود: %w", + "perplexity_streaming_error": "خطای جریان Perplexity: %v", + "plugin_configured": " ✓", + "plugin_enable_bool_question": "%v %v را فعال کنید (true/false)", + "plugin_enter_value": "مقدار %v %v خود را وارد کنید", + "plugin_invalid_bool": "مقدار bool نامعتبر: %q", + "plugin_invalid_boolean_value": "مقدار بولی نامعتبر: %v", + "plugin_not_configured": " ⚠️ پیکربندی نشده", + "plugin_question_bool": "%v%v (true/false، برای '%s' خالی بگذارید یا '%v' را برای حذف مقدار بنویسید):", + "plugin_question_optional": "%v%v (برای رد کردن خالی بگذارید):", + "plugin_question_with_default": "%v%v (برای '%s' خالی بگذارید یا '%v' را برای حذف مقدار بنویسید):", + "plugin_setting_not_valid": "%v=%v معتبر نیست", + "plugin_setup_configured": "[%v] پیکربندی شد", + "plugin_setup_skipped": "[%v] رد شد\\n", + "prefer_playlist_over_video": "اولویت فهرست پخش نسبت به ویدیو اگر هر دو ID در URL موجود باشند", + "print_context": "چاپ زمینه", + "print_current_version": "چاپ نسخه فعلی", + "print_session": "چاپ جلسه", + "register_new_extension": "ثبت افزونه جدید از مسیر فایل پیکربندی", + "remove_registered_extension": "حذف افزونه ثبت شده با نام", + "required_marker": "[الزامی]", + "run_setup_for_reconfigurable_parts": "اجرای تنظیمات برای تمام بخش‌های قابل پیکربندی مجدد fabric", + "save_generated_image_to_file": "ذخیره تصویر تولید شده در مسیر فایل مشخص (مثال: 'output.png')", + "scrape_website_url": "استخراج URL وب‌سایت به markdown با استفاده از Jina AI", + "scraping_not_configured": "قابلیت استخراج داده پیکربندی نشده است. لطفاً Jina را برای فعال‌سازی استخراج تنظیم کنید", + "search_question_jina": "سؤال جستجو با استفاده از Jina AI", + "seed_for_lmm_generation": "Seed برای استفاده در تولید LMM", + "send_desktop_notification": "ارسال اعلان دسک‌تاپ هنگام تکمیل دستور", + "serve_fabric_api_ollama_endpoints": "سرویس API REST Fabric با نقاط پایانی ollama", + "serve_fabric_rest_api": "سرویس API REST Fabric", + "set_debug_level": "تنظیم سطح اشکال‌زدایی (0=خاموش، 1=پایه، 2=تفصیلی، 3=ردیابی)", + "set_frequency_penalty": "تنظیم جریمه فرکانس", + "set_location_web_search": "تنظیم مکان برای نتایج جستجوی وب (مثال: 'America/Los_Angeles')", + "set_presence_penalty": "تنظیم جریمه حضور", + "set_reasoning_thinking_level": "تنظیم سطح استدلال/تفکر (مثال: off، low، medium، high، یا توکن‌های عددی برای Anthropic یا Google Gemini)", + "set_temperature": "تنظیم دما", + "set_top_p": "تنظیم top P", + "setup_add_more_providers_later": "می‌توانید بعداً با 'fabric --setup' ارائه‌دهندگان بیشتری اضافه کنید", + "setup_ai_provider_required": "Fabric برای کار کردن به حداقل یک ارائه‌دهنده هوش مصنوعی نیاز دارد.", + "setup_available_ai_providers": "ارائه‌دهندگان هوش مصنوعی موجود:", + "setup_available_plugins": "افزونه‌های موجود:", + "setup_complete_header": "✅ تنظیمات کامل شد! اکنون می‌توانید از Fabric استفاده کنید.", + "setup_configure_more": "• پیکربندی تنظیمات بیشتر: fabric --setup", + "setup_enter_ai_provider_number": "شماره ارائه‌دهنده هوش مصنوعی", + "setup_failed_download_patterns": "دانلود الگوها ناموفق بود: %w", + "setup_failed_download_strategies": "دانلود استراتژی‌ها ناموفق بود: %w", + "setup_failed_set_defaults": "تنظیم ارائه‌دهنده و مدل پیش‌فرض ناموفق بود: %w", + "setup_invalid_selection": "انتخاب نامعتبر: %s", + "setup_list_patterns": "• نمایش الگوهای موجود: fabric -l", + "setup_next_steps": "مراحل بعدی:", + "setup_no_ai_provider_selected": "هیچ ارائه‌دهنده هوش مصنوعی انتخاب نشده - حداقل یکی ضروری است", + "setup_optional_configuration_header": "━━━ پیکربندی اختیاری ━━━\n\nابزارهای اختیاری", + "setup_plugin_number": "شماره افزونه", + "setup_plugin_prompt": "شماره افزونه‌ای را که می‌خواهید راه‌اندازی کنید وارد کنید", + "setup_required_configuration_header": "━━━ پیکربندی ضروری ━━━\n\nارائه‌دهندگان هوش مصنوعی [حداقل یکی ضروری است]", + "setup_required_tools": "ابزارهای ضروری", + "setup_step_configure_ai_provider": "🤖 مرحله ۳: پیکربندی یک ارائه‌دهنده هوش مصنوعی", + "setup_step_downloading_patterns": "📥 مرحله ۱: دانلود الگوها (برای کار Fabric ضروری است)...", + "setup_step_downloading_strategies": "📥 مرحله ۲: دانلود استراتژی‌ها (برای کار Fabric ضروری است)...", + "setup_step_setting_defaults": "⚙️ مرحله ۴: تنظیم ارائه‌دهنده و مدل پیش‌فرض...", + "setup_try_pattern": "• امتحان یک الگو: echo 'متن شما' | fabric --pattern summarize", + "setup_validation_ai_provider_configured": "✓ ارائه‌دهنده هوش مصنوعی پیکربندی شده", + "setup_validation_ai_provider_missing": "✗ ارائه‌دهنده هوش مصنوعی پیکربندی نشده - برای کار Fabric ضروری است", + "setup_validation_complete": "✓ تمام اجزای ضروری پیکربندی شده‌اند!", + "setup_validation_defaults_configured": "✓ ارائه‌دهنده/مدل پیش‌فرض تنظیم شده: %s/%s", + "setup_validation_defaults_missing": "✗ ارائه‌دهنده/مدل پیش‌فرض تنظیم نشده - برای کار Fabric ضروری است", + "setup_validation_header": "وضعیت پیکربندی:", + "setup_validation_incomplete_help": "دوباره 'fabric --setup' را اجرا کنید تا موارد ناقص را پیکربندی کنید،\nیا 'fabric -U' را برای دانلود الگوها و استراتژی‌ها اجرا کنید.", + "setup_validation_incomplete_warning": "⚠️ تنظیمات ناقص! اجزای ضروری وجود ندارند.", + "setup_validation_patterns_configured": "✓ الگوها دانلود شده", + "setup_validation_patterns_missing": "✗ الگوها یافت نشد - برای کار Fabric ضروری است", + "setup_validation_strategies_configured": "✓ استراتژی‌ها دانلود شده", + "setup_validation_strategies_missing": "✗ استراتژی‌ها یافت نشد - برای کار Fabric ضروری است", + "setup_welcome_header": "🎉 به Fabric خوش آمدید! بیایید تنظیمات را انجام دهیم.", + "show_dry_run": "نمایش آنچه به مدل ارسال خواهد شد بدون ارسال واقعی", + "specify_language_code": "کد زبان برای گفتگو را مشخص کنید، مثلاً -g=en -g=zh -g=pt-BR -g=pt-PT", + "specify_vendor_for_model": "تعیین تامین‌کننده برای مدل انتخابی (مثال: -V \"LM Studio\" -m openai/gpt-oss-20b)", + "split_media_files_ffmpeg": "تقسیم فایل‌های صوتی/ویدیویی بزرگتر از 25MB با استفاده از ffmpeg", "spotify_api_request_failed": "درخواست API ناموفق بود: وضعیت %d، پاسخ: %s", - "spotify_failed_parse_show_metadata": "تجزیه فراداده برنامه ناموفق بود: %w", - "spotify_failed_parse_episode_metadata": "تجزیه فراداده قسمت ناموفق بود: %w", - "spotify_search_failed": "جستجو ناموفق بود: %w", - "spotify_failed_parse_search_results": "تجزیه نتایج جستجو ناموفق بود: %w", + "spotify_audio_preview_label": "**پیش‌نمایش صوتی**: %s", + "spotify_client_id_question": "CLIENT ID اسپاتیفای خود را وارد کنید", + "spotify_client_secret_question": "CLIENT SECRET اسپاتیفای خود را وارد کنید", + "spotify_description_header": "## توضیحات", + "spotify_duration_label": "**مدت زمان**: %d دقیقه", + "spotify_episode_header": "# اپیزود اسپاتیفای", + "spotify_error_getting_metadata": "error getting Spotify metadata: %v", + "spotify_explicit_label": "**محتوای صریح**: %v", + "spotify_failed_create_request": "ایجاد درخواست ناموفق بود: %w", + "spotify_failed_create_token_request": "ایجاد درخواست توکن ناموفق بود: %w", + "spotify_failed_decode_token_response": "رمزگشایی پاسخ توکن ناموفق بود: %w", + "spotify_failed_execute_request": "اجرای درخواست ناموفق بود: %w", + "spotify_failed_get_access_token": "دریافت توکن دسترسی ناموفق بود: وضعیت %d، پاسخ: %s", "spotify_failed_get_show_episodes": "دریافت قسمت‌های برنامه ناموفق بود: %w", + "spotify_failed_parse_episode_metadata": "تجزیه فراداده قسمت ناموفق بود: %w", "spotify_failed_parse_episodes": "تجزیه قسمت‌ها ناموفق بود: %w", - "template_file_log_validating_path": "فایل: در حال اعتبارسنجی مسیر %q", - "template_file_error_path_contains_parent_ref": "فایل: مسیر نمی‌تواند '..' داشته باشد", + "spotify_failed_parse_search_results": "تجزیه نتایج جستجو ناموفق بود: %w", + "spotify_failed_parse_show_metadata": "تجزیه فراداده برنامه ناموفق بود: %w", + "spotify_failed_read_response_body": "خواندن متن پاسخ ناموفق بود: %w", + "spotify_failed_request_access_token": "درخواست توکن دسترسی ناموفق بود: %w", + "spotify_invalid_url": "invalid Spotify URL, can't get show or episode ID: '%s'", + "spotify_label": "Spotify", + "spotify_language_field_label": "**زبان**: %s", + "spotify_languages_label": "**زبان‌ها**: %s", + "spotify_media_type_label": "**نوع رسانه**: %s", + "spotify_no_episode_found": "no episode found with ID: %s", + "spotify_no_show_found": "no show found with ID: %s", + "spotify_not_configured": "Spotify is not configured, please run the setup procedure", + "spotify_publisher_label": "**ناشر**: %s", + "spotify_release_date_label": "**تاریخ انتشار**: %s", + "spotify_search_description_label": "- **توضیحات**: %s", + "spotify_search_episodes_label": "- **اپیزودها**: %d", + "spotify_search_failed": "جستجو ناموفق بود: %w", + "spotify_search_publisher_label": "- **ناشر**: %s", + "spotify_search_results_header": "# نتایج جستجوی اسپاتیفای", + "spotify_search_url_label": "- **URL**: %s", + "spotify_setup_description": "Spotify - to grab podcast/show metadata from Spotify", + "spotify_show_header": "# پادکست/برنامه اسپاتیفای", + "spotify_show_name_label": "**برنامه**: %s", + "spotify_title_label": "**عنوان**: %s", + "spotify_total_episodes_label": "**مجموع اپیزودها**: %d", + "spotify_url_label": "**URL**: %s", + "start_tag_thinking_sections": "تگ شروع برای بخش‌های تفکر", + "strategies_available_header": "راهبردهای موجود:", + "strategies_cloning_repository": "در حال کلون کردن مخزن %s (مسیر: %s)...\\n", + "strategies_download_success": "✅ راهبردها با موفقیت در %s دانلود و نصب شدند\\n", + "strategies_downloaded_count": "%d راهبرد دانلود شد\\n", + "strategies_downloading": "در حال دانلود راهبردها و پر کردن %s...\\n", + "strategies_failed_create_directory": "ایجاد پوشه راهبردها ناموفق بود: %w", + "strategies_failed_download": "دانلود راهبردها ناموفق بود: %w", + "strategies_git_repo_folder_question": "پوشه پیش‌فرض در مخزن گیت که راهبردها در آن ذخیره می‌شوند را وارد کنید", + "strategies_git_repo_url_question": "آدرس مخزن گیت پیش‌فرض برای راهبردها را وارد کنید", + "strategies_home_dir_error": "دریافت پوشه خانگی ممکن نبود: %v", + "strategies_home_dir_fallback": "دریافت پوشه خانگی ممکن نبود: %v، از پوشه فعلی استفاده می‌شود", + "strategies_label": "راهبردهای پرامپت", + "strategies_none_found": "هیچ راهبردی پیدا نشد. برای دانلود راهبردها 'fabric --setup' را اجرا کنید", + "strategies_setup_description": "راهبردها - دانلود راهبردهای پرامپت (مثل chain of thought)", + "strategy_not_found": "راهبرد %s یافت نشد. برای مشاهده فهرست 'fabric --liststrategies' را اجرا کنید", + "stream_help": "پخش زنده", + "suppress_thinking_tags": "سرکوب متن محصور در تگ‌های تفکر", + "template_datetime_error_invalid_number": "invalid number in relative time: %q", + "template_datetime_error_invalid_relative_format": "invalid relative time format", + "template_datetime_error_invalid_unit": "invalid time unit: %q", + "template_datetime_error_relative_requires_value": "relative time requires a value", + "template_datetime_error_unknown_operation": "datetime: unknown operation %q", "template_file_error_expand_home_dir": "فایل: گسترش پوشه خانگی ممکن نشد: %v", - "template_file_log_cleaned_path": "فایل: مسیر پاک‌سازی‌شده %q", - "template_file_log_operation_value": "فایل: operation=%q value=%q", - "template_file_error_tail_requires_path_lines": "فایل: tail به قالب path|lines نیاز دارد", "template_file_error_invalid_line_count": "فایل: تعداد خط نامعتبر %q", "template_file_error_line_count_positive": "فایل: تعداد خط باید مثبت باشد", - "template_file_log_tail_returning_lines": "فایل: tail در حال بازگرداندن %d خط است", - "template_file_error_stat_file": "فایل: دریافت وضعیت فایل ممکن نشد: %v", - "template_file_error_size_exceeds_limit": "فایل: اندازه %d از محدودیت %d بایت بیشتر است", - "template_file_error_read_file": "فایل: خواندن ممکن نشد: %v", - "template_file_log_read_bytes": "فایل: %d بایت خوانده شد", - "template_file_log_exists_for_path": "فایل: exists=%v برای مسیر %q", - "template_file_log_size_for_path": "فایل: size=%d برای مسیر %q", - "template_file_log_modified_for_path": "فایل: modified=%q برای مسیر %q", - "template_file_error_unknown_operation": "فایل: عملیات ناشناخته %q (پشتیبانی‌شده: read, tail, exists, size, modified)", - "template_file_log_reading_last_lines": "فایل: در حال خواندن %d خط آخر از %q", "template_file_error_open_file": "فایل: باز کردن ممکن نشد: %v", - "template_file_error_stat_open_file": "فایل: دریافت وضعیت ممکن نشد: %v", + "template_file_error_path_contains_parent_ref": "فایل: مسیر نمی‌تواند '..' داشته باشد", + "template_file_error_read_file": "فایل: خواندن ممکن نشد: %v", "template_file_error_scanner_read": "فایل: خطا در خواندن: %v", + "template_file_error_size_exceeds_limit": "فایل: اندازه %d از محدودیت %d بایت بیشتر است", + "template_file_error_stat_file": "فایل: دریافت وضعیت فایل ممکن نشد: %v", + "template_file_error_stat_open_file": "فایل: دریافت وضعیت ممکن نشد: %v", + "template_file_error_tail_requires_path_lines": "فایل: tail به قالب path|lines نیاز دارد", + "template_file_error_unknown_operation": "فایل: عملیات ناشناخته %q (پشتیبانی‌شده: read, tail, exists, size, modified)", + "template_file_log_cleaned_path": "فایل: مسیر پاک‌سازی‌شده %q", + "template_file_log_exists_for_path": "فایل: exists=%v برای مسیر %q", + "template_file_log_modified_for_path": "فایل: modified=%q برای مسیر %q", + "template_file_log_operation_value": "فایل: operation=%q value=%q", + "template_file_log_read_bytes": "فایل: %d بایت خوانده شد", "template_file_log_read_total_return_last": "فایل: در مجموع %d خط خوانده شد، %d خط آخر بازگردانده می‌شود", - "chatter_error_no_session_pattern_user_messages": "هیچ نشست، الگو یا پیام کاربری ارائه نشده است", - "chatter_error_no_messages_provided": "هیچ پیامی ارائه نشده است", - "chatter_log_stream_usage_metadata": "[فراداده] ورودی: %d | خروجی: %d | مجموع: %d", - "chatter_error_stream_update": "خطا: %s", - "chatter_error_empty_response": "پاسخ خالی", - "chatter_warning_parse_file_changes_failed": "هشدار: تجزیه تغییرات فایل ناموفق بود: %v", - "chatter_warning_get_current_directory_failed": "هشدار: دریافت پوشه جاری ناموفق بود: %v", - "chatter_warning_apply_file_changes_failed": "هشدار: اعمال تغییرات فایل ناموفق بود: %v", - "chatter_info_file_changes_applied_successfully": "تغییرات فایل با موفقیت اعمال شد.", - "chatter_help_review_changes_with_git_diff": "اگر از git استفاده مي‌کنيد، مي‌توانيد تغييرات را با 'git diff' بررسي کنيد.", - "chatter_error_find_session": "نشست %s پيدا نشد: %v", - "chatter_error_find_context": "زمينه %s پيدا نشد: %v", - "chatter_error_get_pattern": "دريافت الگو %s ممکن نشد: %v", - "chatter_error_load_strategy": "بارگذاري راهبرد %s ممکن نشد: %v", - "chatter_prompt_enforce_response_language": "%s\n\nمهم: ابتدا دستورالعمل‌هاي ارائه‌شده در اين پرامپت را با استفاده از ورودي کاربر اجرا کنيد. سپس اطمينان حاصل کنيد که کل پاسخ نهايي شما، از جمله هر عنوان يا سربخشي که در جريان اجراي دستورالعمل‌ها توليد مي‌شود، فقط به زبان %s نوشته شده باشد.", - "vertexai_failed_google_credentials": "دریافت اعتبارنامه‌های Google ناموفق بود (مطمئن شوید ADC پیکربندی شده است): %w", - "vertexai_no_models_found": "مدلی از هیچ ناشری یافت نشد", - "vertexai_no_conversational_models": "مدل مکالمه‌ای یافت نشد", + "template_file_log_reading_last_lines": "فایل: در حال خواندن %d خط آخر از %q", + "template_file_log_size_for_path": "فایل: size=%d برای مسیر %q", + "template_file_log_tail_returning_lines": "فایل: tail در حال بازگرداندن %d خط است", + "template_file_log_validating_path": "فایل: در حال اعتبارسنجی مسیر %q", + "template_sys_error_env_requires_var": "env: variable name required", + "template_sys_error_home": "failed to get home directory: %v", + "template_sys_error_hostname": "failed to get hostname: %v", + "template_sys_error_pwd": "failed to get working directory: %v", + "template_sys_error_unknown_operation": "sys: unknown operation %q", + "template_sys_error_user": "failed to get current user: %v", + "transcription_model_required": "مدل رونویسی الزامی است (از --transcribe-model استفاده کنید)", + "transparent_background_png_webp_only": "پس‌زمینه شفاف فقط با فرمت‌های PNG و WebP قابل استفاده است، نه %s", + "tts_audio_generated_successfully": "صوت TTS با موفقیت ایجاد و ذخیره شد در: %s\n", + "tts_model_requires_audio_output": "مدل TTS '%s' نیاز به خروجی صوتی دارد. لطفاً فایل خروجی صوتی را با پرچم -o مشخص کنید (مثال: -o output.wav)", + "tts_voice_name": "نام صدای TTS برای مدل‌های پشتیبانی شده (مثال: Kore، Charon، Puck)", + "unsupported_conversion": "تبدیل پشتیبانی نشده از %v به %v", + "update_patterns": "به‌روزرسانی الگوها", + "usage_header": "استفاده:", + "use_model_defaults_raw_help": "از مقادیر پیش‌فرض مدل بدون ارسال گزینه‌های چت (temperature، top_p و غیره) استفاده می‌کند. فقط بر ارائه‌دهندگان سازگار با OpenAI تأثیر می‌گذارد. مدل‌های Anthropic همواره برای رعایت نیازهای خاص هر مدل از انتخاب هوشمند پارامتر استفاده می‌کنند.", + "vendor_no_transcription_support": "تامین‌کننده %s از رونویسی صوتی پشتیبانی نمی‌کند", + "vendor_not_configured": "تامین‌کننده %s پیکربندی نشده است", + "vendor_not_found": "ارائه‌دهنده %s یافت نشد", + "vendors_no_ai_vendors_configured_read_models": "هیچ ارائه‌دهنده هوش مصنوعی برای خواندن مدل‌ها پیکربندی نشده است", "vertexai_client_not_initialized": "کلاینت VertexAI مقداردهی نشده است", - "vertexai_no_valid_messages": "پیام معتبری برای ارسال وجود ندارد", - "vertexai_no_content_in_response": "محتوایی در پاسخ وجود ندارد", - "vertexai_failed_gemini_client": "ایجاد کلاینت Gemini ناموفق بود: %w", - "vertexai_stream_error": "خطا: %v", - "gemini_invalid_location_format": "فرمت مکان جستجوی نامعتبر %q: باید منطقه زمانی (مثال 'America/Los_Angeles') یا کد زبان (مثال 'en-US') باشد", - "gemini_stream_error": "خطا: %v", - "gemini_no_text_for_tts": "محتوای متنی برای تولید TTS یافت نشد", - "gemini_invalid_voice": "صدای نامعتبر '%s'. صداهای معتبر عبارتند از: %v", - "gemini_tts_failed": "تولید TTS ناموفق بود: %w", - "gemini_unexpected_data_type": "نوع داده غیرمنتظره: %s، داده صوتی مورد انتظار بود", - "gemini_audio_data_too_small": "داده صوتی بسیار کوچک: %d بایت، حداقل مورد نیاز: %d", - "gemini_wav_generation_failed": "تولید فایل WAV ناموفق بود: %w", - "gemini_wav_data_invalid": "داده WAV تولید شده نامعتبر است: %d بایت، حداقل مورد نیاز: %d", - "gemini_no_audio_data": "داده صوتی از مدل TTS دریافت نشد", - "gemini_empty_pcm_data": "داده PCM خالی ارائه شد", - "gemini_pcm_data_too_large": "داده PCM بسیار بزرگ: %d بایت، حداکثر مجاز: %d", - "bedrock_unable_load_aws_config": "بارگذاری پیکربندی AWS ناموفق بود: %w", - "bedrock_aws_region_label": "منطقه AWS", - "bedrock_invalid_aws_region": "منطقه AWS نامعتبر: %s", - "bedrock_unable_load_aws_config_with_region": "بارگذاری پیکربندی AWS با منطقه %s ناموفق بود: %w", - "bedrock_failed_list_foundation_models": "فهرست کردن مدل‌های پایه ناموفق بود: %w", - "bedrock_failed_list_inference_profiles": "فهرست کردن پروفایل‌های استنتاج ناموفق بود: %w", - "bedrock_panic_sendstream": "پنیک در SendStream: %v", - "bedrock_conversestream_failed": "bedrock conversestream برای مدل %s ناموفق بود: %w", - "bedrock_unknown_stream_event_type": "نوع رویداد جریان ناشناخته: %T", - "bedrock_converse_failed": "bedrock converse برای مدل %s ناموفق بود: %w", - "bedrock_unexpected_response_type": "نوع پاسخ غیرمنتظره: %T", - "bedrock_empty_response_content": "محتوای پاسخ خالی", - "bedrock_unexpected_content_block_type": "نوع بلوک محتوای غیرمنتظره: %T", - "fetch_unknown_operation": "fetch: عملیات ناشناخته %q (پشتیبانی‌شده: get)", - "fetch_content_not_utf8": "fetch: محتوا متن UTF-8 معتبر نیست", - "fetch_content_null_bytes": "fetch: محتوا شامل بایت‌های null است", - "fetch_error_create_request": "fetch: خطا در ایجاد درخواست: %v", - "fetch_error_fetching_url": "fetch: خطا در دریافت URL: %v", - "fetch_http_error": "fetch: خطای HTTP: %d - %s", - "fetch_content_too_large": "fetch: محتوا بسیار بزرگ است: %d بایت (حداکثر %d بایت)", - "fetch_unsupported_content_type": "fetch: نوع محتوای پشتیبانی‌نشده %q - فقط محتوای متنی مجاز است", - "fetch_error_reading_response": "fetch: خطا در خواندن پاسخ: %v", - "fetch_content_exceeds_limit": "fetch: محتوا بسیار بزرگ است: از %d بایت بیشتر است", - "file_manager_invalid_format_no_json_array": "فرمت %s نامعتبر: هیچ آرایه JSON یافت نشد", - "file_manager_invalid_format_unbalanced_brackets": "فرمت %s نامعتبر: پرانتزهای نامتعادل", - "file_manager_failed_parse_json": "پارس %s JSON ناموفق بود: %w", - "file_manager_invalid_operation": "عملیات نامعتبر برای تغییر فایل %d: %s", - "file_manager_empty_path": "مسیر خالی برای تغییر فایل %d", - "file_manager_suspicious_path": "مسیر مشکوک برای تغییر فایل %d: %s", - "file_manager_file_content_too_large": "محتوای فایل بیش از حد بزرگ برای تغییر فایل %d: %d بایت", - "file_manager_failed_create_directory": "ایجاد دایرکتوری %s برای تغییر فایل %d ناموفق بود: %w", - "file_manager_failed_write_file": "نوشتن فایل %s برای تغییر فایل %d ناموفق بود: %w", - "file_manager_applied_operation": "عملیات %s روی %s اعمال شد", - "vertexai_error_create_request": "ایجاد درخواست ناموفق بود: %w", - "vertexai_error_request_failed": "درخواست ناموفق بود: %w", "vertexai_error_api_status": "API وضعیت %d را برگرداند: %s", - "vertexai_error_read_response": "خواندن پاسخ ناموفق بود: %w", - "vertexai_error_response_too_large": "پاسخ خیلی بزرگ است (>%d بایت)", + "vertexai_error_create_request": "ایجاد درخواست ناموفق بود: %w", "vertexai_error_parse_response": "تجزیه پاسخ ناموفق بود: %w", - "copilot_tenant_client_id_required": "شناسه مشتری و شناسه مستاجر الزامی است", - "copilot_failed_create_conversation": "ایجاد مکالمه ناموفق بود: %w", - "copilot_failed_send_message": "ارسال پیام ناموفق بود: %w", - "copilot_failed_stream_message": "پخش جریانی پیام ناموفق بود: %w", - "copilot_error_create_conversation": "ایجاد مکالمه ناموفق بود: %s - %s", - "copilot_error_chat_request": "درخواست چت ناموفق بود: %s - %s", - "copilot_error_stream_request": "درخواست جریان ناموفق بود: %s - %s", - "copilot_debug_created_conversation": "مکالمه Copilot ایجاد شد: %s", - "copilot_debug_failed_parse_sse_event": "تجزیه رویداد SSE ناموفق بود: %v", - "copilot_error_reading_stream": "خطا در خواندن جریان: %w" + "vertexai_error_read_response": "خواندن پاسخ ناموفق بود: %w", + "vertexai_error_request_failed": "درخواست ناموفق بود: %w", + "vertexai_error_response_too_large": "پاسخ خیلی بزرگ است (>%d بایت)", + "vertexai_failed_gemini_client": "ایجاد کلاینت Gemini ناموفق بود: %w", + "vertexai_failed_google_credentials": "دریافت اعتبارنامه‌های Google ناموفق بود (مطمئن شوید ADC پیکربندی شده است): %w", + "vertexai_no_content_in_response": "محتوایی در پاسخ وجود ندارد", + "vertexai_no_conversational_models": "مدل مکالمه‌ای یافت نشد", + "vertexai_no_models_found": "مدلی از هیچ ناشری یافت نشد", + "vertexai_no_valid_messages": "پیام معتبری برای ارسال وجود ندارد", + "vertexai_stream_error": "خطا: %v", + "wipe_context": "پاک کردن زمینه", + "wipe_session": "پاک کردن جلسه", + "youtube_api_key_required": "کلید API یوتیوب برای دریافت نظرات و متادیتا الزامی است. برای پیکربندی 'fabric --setup' را اجرا کنید", + "youtube_auth_required_bot_detection": "یوتیوب احراز هویت می‌خواهد (تشخیص ربات). از --yt-dlp-args='--cookies-from-browser BROWSER' استفاده کنید که BROWSER می‌تواند chrome، firefox، brave و غیره باشد.", + "youtube_empty_seconds_string": "رشته ثانیه خالی", + "youtube_error_getting_comments": "خطا در دریافت نظرات: %v", + "youtube_error_getting_metadata": "خطا در دریافت متادیتای ویدیو: %v", + "youtube_error_getting_video_details": "خطا در دریافت جزئیات ویدیو: %v", + "youtube_error_parsing_duration": "خطا در تجزیه مدت زمان ویدیو: %v", + "youtube_error_saving_csv": "خطا در ذخیره ویدیوها در CSV: %v", + "youtube_failed_create_temp_dir": "ایجاد دایرکتوری موقت ناموفق بود: %v", + "youtube_failed_fetch_comments": "دریافت نظرات ناموفق بود: %v", + "youtube_failed_walk_directory": "پیمایش دایرکتوری ناموفق بود: %v", + "youtube_invalid_duration_string": "رشته مدت زمان نامعتبر: %s", + "youtube_invalid_seconds_format": "فرمت ثانیه نامعتبر %q: %w", + "youtube_invalid_timestamp_format": "فرمت مهر زمانی نامعتبر: %s", + "youtube_invalid_url": "URL یوتیوب نامعتبر است، نمی‌توان ID ویدیو یا فهرست پخش را دریافت کرد: '%s'", + "youtube_invalid_ytdlp_arguments": "آرگومان‌های yt-dlp نامعتبر: %v", + "youtube_label": "YouTube", + "youtube_no_transcript_content": "محتوای رونوشتی در فایل VTT یافت نشد", + "youtube_no_url_provided": "هیچ URL یوتیوبی ارائه نشده است", + "youtube_no_video_found_with_id": "هیچ ویدیویی با ID یافت نشد: %s", + "youtube_no_video_id_found": "هیچ ID ویدیویی در URL یافت نشد", + "youtube_no_vtt_files_found": "فایل‌های VTT در دایرکتوری یافت نشدند", + "youtube_not_configured": "یوتیوب پیکربندی نشده است، لطفاً روند تنظیمات را اجرا کنید", + "youtube_playlist_header": "لیست پخش: %s", + "youtube_playlist_saved_to": "لیست پخش ذخیره شد در %s", + "youtube_rate_limit_exceeded": "محدودیت نرخ یوتیوب فراتر رفته است. بعداً دوباره امتحان کنید یا از آرگومان‌های مختلف yt-dlp مانند '--sleep-requests 1' برای کاهش سرعت درخواست‌ها استفاده کنید.", + "youtube_setup_description": "YouTube - برای دریافت رونوشت ویدیو (از طریق yt-dlp) و نظرات/متادیتا (از طریق API یوتیوب)", + "youtube_url_help": "ویدیو یوتیوب یا \"URL\" فهرست پخش برای دریافت رونوشت، نظرات و ارسال به گفتگو یا چاپ در کنسول و ذخیره در فایل خروجی", + "youtube_url_is_playlist_not_video": "URL یک فهرست پخش است، نه یک ویدیو", + "youtube_video_id_title_header": "شناسه ویدیو: عنوان", + "youtube_ytdlp_not_found": "yt-dlp در PATH یافت نشد. لطفاً yt-dlp را نصب کنید تا از قابلیت رونویسی یوتیوب استفاده کنید", + "youtube_ytdlp_stderr_error": "خطا در خواندن stderr yt-dlp" } diff --git a/internal/i18n/locales/fr.json b/internal/i18n/locales/fr.json index 14e03f15..b5d27986 100644 --- a/internal/i18n/locales/fr.json +++ b/internal/i18n/locales/fr.json @@ -1,520 +1,592 @@ { - "html_readability_error": "utilise l'entrée originale, car la lisibilité HTML ne peut pas être appliquée", - "vendor_not_configured": "le fournisseur %s n'est pas configuré", - "vendor_no_transcription_support": "le fournisseur %s ne prend pas en charge la transcription audio", - "transcription_model_required": "un modèle de transcription est requis (utilisez --transcribe-model)", - "youtube_not_configured": "YouTube n'est pas configuré, veuillez exécuter la procédure de configuration", - "spotify_not_configured": "Spotify n'est pas configuré, veuillez exécuter la procédure de configuration", - "spotify_label": "Spotify", - "spotify_setup_description": "Spotify - pour récupérer les métadonnées de podcasts/émissions depuis Spotify", - "spotify_invalid_url": "URL Spotify invalide, impossible d'obtenir l'ID de l'émission ou de l'épisode : '%s'", - "spotify_error_getting_metadata": "erreur lors de la récupération des métadonnées Spotify : %v", - "spotify_no_show_found": "aucune émission trouvée avec l'ID : %s", - "spotify_no_episode_found": "aucun épisode trouvé avec l'ID : %s", - "spotify_url_help": "URL de podcast ou d'épisode Spotify pour récupérer les métadonnées et envoyer au chat", - "youtube_api_key_required": "Clé API YouTube requise pour les commentaires et métadonnées. Exécutez 'fabric --setup' pour configurer", - "youtube_ytdlp_not_found": "yt-dlp introuvable dans PATH. Veuillez installer yt-dlp pour utiliser la fonctionnalité de transcription YouTube", - "youtube_invalid_url": "URL YouTube invalide, impossible d'obtenir l'ID de vidéo ou de liste de lecture : '%s'", - "youtube_url_is_playlist_not_video": "L'URL est une liste de lecture, pas une vidéo", - "youtube_no_video_id_found": "aucun ID de vidéo trouvé dans l'URL", - "youtube_rate_limit_exceeded": "Limite de taux YouTube dépassée. Réessayez plus tard ou utilisez différents arguments yt-dlp comme '--sleep-requests 1' pour ralentir les requêtes.", - "youtube_auth_required_bot_detection": "YouTube nécessite une authentification (détection de bot). Utilisez --yt-dlp-args='--cookies-from-browser BROWSER' où BROWSER peut être chrome, firefox, brave, etc.", - "youtube_ytdlp_stderr_error": "Erreur lors de la lecture du stderr de yt-dlp", - "youtube_invalid_ytdlp_arguments": "arguments yt-dlp invalides : %v", - "youtube_failed_create_temp_dir": "échec de création du répertoire temporaire : %v", - "youtube_no_transcript_content": "aucun contenu de transcription trouvé dans le fichier VTT", - "youtube_no_vtt_files_found": "aucun fichier VTT trouvé dans le répertoire", - "youtube_failed_walk_directory": "échec du parcours du répertoire : %v", - "youtube_error_getting_video_details": "erreur lors de l'obtention des détails de la vidéo : %v", - "youtube_invalid_duration_string": "chaîne de durée invalide : %s", - "youtube_error_getting_metadata": "erreur lors de l'obtention des métadonnées de la vidéo : %v", - "youtube_error_parsing_duration": "erreur lors de l'analyse de la durée de la vidéo : %v", - "youtube_error_getting_comments": "erreur lors de l'obtention des commentaires : %v", - "youtube_error_saving_csv": "erreur lors de l'enregistrement des vidéos en CSV : %v", - "youtube_no_video_found_with_id": "aucune vidéo trouvée avec l'ID : %s", - "youtube_invalid_timestamp_format": "format d'horodatage invalide : %s", - "youtube_empty_seconds_string": "chaîne de secondes vide", - "youtube_invalid_seconds_format": "format de secondes invalide %q : %w", - "error_fetching_playlist_videos": "erreur lors de la récupération des vidéos de la liste de lecture : %w", - "openai_api_base_url_not_configured": "URL de base de l'API non configurée pour le fournisseur %s", - "openai_failed_to_create_models_url": "échec de création de l'URL des modèles : %w", - "openai_unexpected_status_code_with_body": "code d'état inattendu : %d du fournisseur %s, corps de réponse : %s", - "openai_unexpected_status_code_read_error_partial": "code d'état inattendu : %d du fournisseur %s (erreur de lecture : %v), réponse partielle : %s", - "openai_unexpected_status_code_read_error": "code d'état inattendu : %d du fournisseur %s (échec de lecture du corps de réponse : %v)", - "openai_unable_to_parse_models_response": "impossible d'analyser la réponse des modèles ; réponse brute : %s", - "openai_warning_model_no_image_generation": "Avertissement : Le modèle '%s' ne prend pas en charge la génération d'images. Modèles pris en charge : %s. Envisagez d'utiliser -m gpt-5.2 pour la génération d'images.\n", - "openai_model_no_image_generation": "le modèle '%s' ne prend pas en charge la génération d'images. Modèles pris en charge : %s", - "scraping_not_configured": "la fonctionnalité de scraping n'est pas configurée. Veuillez configurer Jina pour activer le scraping", - "could_not_determine_home_dir": "impossible de déterminer le répertoire home de l'utilisateur : %w", - "could_not_stat_env_file": "impossible de vérifier le fichier .env : %w", + "additional_yt_dlp_args": "Arguments supplémentaires à passer à yt-dlp (ex. '--cookies-from-browser brave')", + "address_to_bind_rest_api": "Adresse pour lier l'API REST", + "anthropic_stream_error": "Erreur de flux : %v", + "api_key_secure_server_routes": "Clé API utilisée pour sécuriser les routes du serveur", + "application_options_header": "Options de l'application :", + "apply_variables_to_input": "Appliquer les variables à l'entrée utilisateur", + "attachment_path_or_url_help": "Chemin de pièce jointe ou URL (ex. pour les messages de reconnaissance d'image OpenAI)", + "audio_output_file_specified_but_not_tts_model": "fichier de sortie audio '%s' spécifié mais le modèle '%s' n'est pas un modèle TTS. Veuillez utiliser un modèle TTS comme gemini-2.5-flash-preview-tts", + "audio_video_file_transcribe": "Fichier audio ou vidéo à transcrire", + "available_models_header": "Modèles disponibles", + "available_transcription_models": "Modèles de transcription disponibles :", + "available_vendors_header": "Fournisseurs disponibles :", + "azure_api_key_required": "La clé API Azure est requise", + "azure_api_version_question": "Entrez la version de l'API Azure (laissez vide pour la valeur par défaut)", + "azure_base_url_required": "L'URL de base Azure est requise", + "azure_deployments_question": "Entrez les noms de vos déploiements Azure (séparés par des virgules)", + "azure_failed_extract_deployment": "échec de l'extraction du nom de déploiement de la requête", + "azure_model_field_empty": "le champ modèle est vide dans le corps de la requête", + "azure_request_body_nil": "le corps de la requête est nil", + "background_type_help": "Type d'arrière-plan : opaque, transparent (par défaut : opaque, seulement pour PNG/WebP)", + "bedrock_aws_region_label": "Région AWS", + "bedrock_converse_failed": "bedrock converse a échoué pour le modèle %s : %w", + "bedrock_conversestream_failed": "bedrock conversestream a échoué pour le modèle %s : %w", + "bedrock_empty_response_content": "contenu de réponse vide", + "bedrock_failed_list_foundation_models": "échec de la liste des modèles de fondation : %w", + "bedrock_failed_list_inference_profiles": "échec de la liste des profils d'inférence : %w", + "bedrock_invalid_aws_region": "région AWS invalide : %s", + "bedrock_panic_sendstream": "panique dans SendStream : %v", + "bedrock_unable_load_aws_config": "impossible de charger la configuration AWS : %w", + "bedrock_unable_load_aws_config_with_region": "impossible de charger la configuration AWS avec la région %s : %w", + "bedrock_unexpected_content_block_type": "type de bloc de contenu inattendu : %T", + "bedrock_unexpected_response_type": "type de réponse inattendu : %T", + "bedrock_unknown_stream_event_type": "type d'événement de flux inconnu : %T", + "cannot_convert_string": "impossible de convertir la chaîne %q en %v", + "change_default_model": "Changer le modèle par défaut", + "chatter_error_empty_response": "réponse vide", + "chatter_error_find_context": "impossible de trouver le contexte %s : %v", + "chatter_error_find_session": "impossible de trouver la session %s : %v", + "chatter_error_get_pattern": "impossible d'obtenir le modele %s : %v", + "chatter_error_load_strategy": "impossible de charger la strategie %s : %v", + "chatter_error_no_messages_provided": "aucun message fourni", + "chatter_error_no_session_pattern_user_messages": "aucune session, aucun modèle ni message utilisateur fourni", + "chatter_error_stream_update": "Erreur : %s", + "chatter_help_review_changes_with_git_diff": "Vous pouvez verifier les modifications avec 'git diff' si vous utilisez git.", + "chatter_info_file_changes_applied_successfully": "Les modifications de fichiers ont ete appliquees avec succes.", + "chatter_log_stream_usage_metadata": "[Métadonnées] Entrée : %d | Sortie : %d | Total : %d", + "chatter_prompt_enforce_response_language": "%s\n\nIMPORTANT : D'abord, executez les instructions fournies dans ce prompt en utilisant l'entree de l'utilisateur. Ensuite, assurez-vous que l'integralite de votre reponse finale, y compris tous les en-tetes de section ou titres generes lors de l'execution des instructions, soit redigee UNIQUEMENT en langue %s.", + "chatter_warning_apply_file_changes_failed": "Avertissement : echec de l'application des modifications de fichiers : %v", + "chatter_warning_get_current_directory_failed": "Avertissement : echec de l'obtention du repertoire courant : %v", + "chatter_warning_parse_file_changes_failed": "Avertissement : echec de l'analyse des modifications de fichiers : %v", + "choose_context_from_available": "Choisissez un contexte parmi les contextes disponibles", + "choose_model": "Choisir le modèle", + "choose_pattern_from_available": "Choisissez un motif parmi les motifs disponibles", + "choose_session_from_available": "Choisissez une session parmi les sessions disponibles", + "choose_strategy_from_available": "Choisir une stratégie parmi les stratégies disponibles", + "command_completed_successfully": "Commande terminée avec succès", + "compression_level_jpeg_webp": "Niveau de compression 0-100 pour les formats JPEG/WebP (par défaut : non défini)", + "config_file_not_found": "fichier de configuration non trouvé : %s", + "convert_html_readability": "Convertir l'entrée HTML en vue propre et lisible", + "copilot_debug_created_conversation": "Conversation Copilot créée: %s", + "copilot_debug_failed_parse_sse_event": "Échec de l'analyse de l'événement SSE: %v", + "copilot_error_chat_request": "échec de la requête de chat: %s - %s", + "copilot_error_create_conversation": "échec de la création de la conversation: %s - %s", + "copilot_error_reading_stream": "erreur lors de la lecture du flux: %w", + "copilot_error_stream_request": "échec de la demande de flux: %s - %s", + "copilot_failed_create_conversation": "échec de la création de la conversation: %w", + "copilot_failed_send_message": "échec de l'envoi du message: %w", + "copilot_failed_stream_message": "échec du streaming du message: %w", + "copilot_tenant_client_id_required": "l'ID de locataire et l'ID client sont requis", + "copy_to_clipboard": "Copier dans le presse-papiers", + "could_not_copy_to_clipboard": "impossible de copier dans le presse-papiers : %v", "could_not_create_config_dir": "impossible de créer le répertoire de configuration : %w", "could_not_create_env_file": "impossible de créer le fichier .env : %w", - "could_not_copy_to_clipboard": "impossible de copier dans le presse-papiers : %v", - "file_already_exists_not_overwriting": "le fichier %s existe déjà, ne sera pas écrasé. Renommez le fichier existant ou choisissez un nom différent", - "error_creating_file": "erreur lors de la création du fichier : %v", - "error_writing_to_file": "erreur lors de l'écriture dans le fichier : %v", - "error_creating_audio_file": "erreur lors de la création du fichier audio : %v", - "error_writing_audio_data": "erreur lors de l'écriture des données audio dans le fichier : %v", - "tts_model_requires_audio_output": "le modèle TTS '%s' nécessite une sortie audio. Veuillez spécifier un fichier de sortie audio avec le flag -o (ex. -o output.wav)", - "audio_output_file_specified_but_not_tts_model": "fichier de sortie audio '%s' spécifié mais le modèle '%s' n'est pas un modèle TTS. Veuillez utiliser un modèle TTS comme gemini-2.5-flash-preview-tts", - "file_already_exists_choose_different": "le fichier %s existe déjà. Veuillez choisir un nom de fichier différent ou supprimer le fichier existant", - "no_notification_system_available": "aucun système de notification disponible", - "cannot_convert_string": "impossible de convertir la chaîne %q en %v", - "unsupported_conversion": "conversion non prise en charge de %v vers %v", - "invalid_config_path": "chemin de configuration invalide : %w", - "config_file_not_found": "fichier de configuration non trouvé : %s", - "error_reading_config_file": "erreur lors de la lecture du fichier de configuration : %w", - "error_parsing_config_file": "erreur lors de l'analyse du fichier de configuration : %w", - "error_reading_piped_message": "erreur lors de la lecture du message redirigé depuis stdin : %w", - "image_file_already_exists": "le fichier image existe déjà : %s", - "invalid_image_file_extension": "extension de fichier image invalide '%s'. Formats pris en charge : .png, .jpeg, .jpg, .webp", - "image_parameters_require_image_file": "les paramètres d'image (--image-size, --image-quality, --image-background, --image-compression) ne peuvent être utilisés qu'avec --image-file", - "invalid_image_size": "taille d'image invalide '%s'. Tailles prises en charge : 1024x1024, 1536x1024, 1024x1536, auto", - "invalid_image_quality": "qualité d'image invalide '%s'. Qualités prises en charge : low, medium, high, auto", - "invalid_image_background": "arrière-plan d'image invalide '%s'. Arrière-plans pris en charge : opaque, transparent", - "image_compression_jpeg_webp_only": "la compression d'image ne peut être utilisée qu'avec les formats JPEG et WebP, pas %s", - "image_compression_range_error": "la compression d'image doit être entre 0 et 100, reçu %d", - "transparent_background_png_webp_only": "l'arrière-plan transparent ne peut être utilisé qu'avec les formats PNG et WebP, pas %s", - "available_transcription_models": "Modèles de transcription disponibles :", - "tts_audio_generated_successfully": "Audio TTS généré avec succès et sauvegardé dans : %s\n", - "fabric_command_complete": "Commande Fabric terminée", - "fabric_command_complete_with_pattern": "Fabric : %s terminé", - "command_completed_successfully": "Commande terminée avec succès", - "output_truncated": "Sortie : %s...", - "output_full": "Sortie : %s", - "choose_pattern_from_available": "Choisissez un motif parmi les motifs disponibles", - "pattern_variables_help": "Valeurs pour les variables de motif, ex. -v=#role:expert -v=#points:30", - "choose_context_from_available": "Choisissez un contexte parmi les contextes disponibles", - "choose_session_from_available": "Choisissez une session parmi les sessions disponibles", - "attachment_path_or_url_help": "Chemin de pièce jointe ou URL (ex. pour les messages de reconnaissance d'image OpenAI)", - "run_setup_for_reconfigurable_parts": "Exécuter la configuration pour toutes les parties reconfigurables de fabric", - "set_temperature": "Définir la température", - "set_top_p": "Définir le top P", - "stream_help": "Streaming", - "set_presence_penalty": "Définir la pénalité de présence", - "use_model_defaults_raw_help": "Utilise les valeurs par défaut du modèle sans envoyer d’options de discussion (temperature, top_p, etc.). N’affecte que les fournisseurs compatibles avec OpenAI. Les modèles Anthropic utilisent toujours une sélection intelligente des paramètres pour respecter les exigences propres à chaque modèle.", - "set_frequency_penalty": "Définir la pénalité de fréquence", - "list_all_patterns": "Lister tous les motifs", - "list_all_available_models": "Lister tous les modèles disponibles", - "list_all_contexts": "Lister tous les contextes", - "list_all_sessions": "Lister toutes les sessions", - "update_patterns": "Mettre à jour les motifs", - "messages_to_send_to_chat": "Messages à envoyer au chat", - "copy_to_clipboard": "Copier dans le presse-papiers", - "choose_model": "Choisir le modèle", - "specify_vendor_for_model": "Spécifier le fournisseur pour le modèle sélectionné (ex. -V \"LM Studio\" -m openai/gpt-oss-20b)", - "model_context_length_ollama": "Longueur de contexte du modèle (affecte seulement ollama)", - "output_to_file": "Sortie vers fichier", - "output_entire_session": "Sortie de toute la session (même temporaire) vers le fichier de sortie", - "number_of_latest_patterns": "Nombre des motifs les plus récents à lister", - "change_default_model": "Changer le modèle par défaut", - "youtube_url_help": "Vidéo YouTube ou \"URL\" de liste de lecture pour récupérer la transcription, les commentaires et envoyer au chat ou afficher dans la console et stocker dans le fichier de sortie", - "prefer_playlist_over_video": "Préférer la liste de lecture à la vidéo si les deux IDs sont présents dans l'URL", - "grab_transcript_from_youtube": "Récupérer la transcription de la vidéo YouTube et envoyer au chat (utilisé par défaut).", - "grab_transcript_with_timestamps": "Récupérer la transcription de la vidéo YouTube avec horodatage et envoyer au chat", - "grab_comments_from_youtube": "Récupérer les commentaires de la vidéo YouTube et envoyer au chat", - "output_video_metadata": "Afficher les métadonnées de la vidéo", - "additional_yt_dlp_args": "Arguments supplémentaires à passer à yt-dlp (ex. '--cookies-from-browser brave')", - "specify_language_code": "Spécifier le code de langue pour le chat, ex. -g=en -g=zh -g=pt-BR -g=pt-PT", - "scrape_website_url": "Scraper l'URL du site web en markdown en utilisant Jina AI", - "search_question_jina": "Question de recherche en utilisant Jina AI", - "seed_for_lmm_generation": "Graine à utiliser pour la génération LMM", - "wipe_context": "Effacer le contexte", - "wipe_session": "Effacer la session", - "print_context": "Afficher le contexte", - "print_session": "Afficher la session", - "convert_html_readability": "Convertir l'entrée HTML en vue propre et lisible", - "apply_variables_to_input": "Appliquer les variables à l'entrée utilisateur", - "disable_pattern_variable_replacement": "Désactiver le remplacement des variables de motif", - "show_dry_run": "Montrer ce qui serait envoyé au modèle sans l'envoyer réellement", - "serve_fabric_rest_api": "Servir l'API REST Fabric", - "serve_fabric_api_ollama_endpoints": "Servir l'API REST Fabric avec les endpoints ollama", - "address_to_bind_rest_api": "Adresse pour lier l'API REST", - "api_key_secure_server_routes": "Clé API utilisée pour sécuriser les routes du serveur", - "path_to_yaml_config": "Chemin vers le fichier de configuration YAML", - "print_current_version": "Afficher la version actuelle", - "list_all_registered_extensions": "Lister toutes les extensions enregistrées", - "register_new_extension": "Enregistrer une nouvelle extension depuis le chemin du fichier de configuration", - "remove_registered_extension": "Supprimer une extension enregistrée par nom", - "choose_strategy_from_available": "Choisir une stratégie parmi les stratégies disponibles", - "list_all_strategies": "Lister toutes les stratégies", - "list_all_vendors": "Lister tous les fournisseurs", - "output_raw_list_shell_completion": "Sortie de liste brute sans en-têtes/formatage (pour la complétion shell)", - "enable_web_search_tool": "Activer l'outil de recherche web pour les modèles pris en charge (Anthropic, OpenAI, Gemini)", - "set_location_web_search": "Définir l'emplacement pour les résultats de recherche web (ex. 'America/Los_Angeles')", - "save_generated_image_to_file": "Sauvegarder l'image générée dans le chemin de fichier spécifié (ex. 'output.png')", - "image_dimensions_help": "Dimensions de l'image : 1024x1024, 1536x1024, 1024x1536, auto (par défaut : auto)", - "image_quality_help": "Qualité de l'image : low, medium, high, auto (par défaut : auto)", - "compression_level_jpeg_webp": "Niveau de compression 0-100 pour les formats JPEG/WebP (par défaut : non défini)", - "background_type_help": "Type d'arrière-plan : opaque, transparent (par défaut : opaque, seulement pour PNG/WebP)", - "suppress_thinking_tags": "Supprimer le texte encadré par les balises de réflexion", - "start_tag_thinking_sections": "Balise de début pour les sections de réflexion", - "end_tag_thinking_sections": "Balise de fin pour les sections de réflexion", - "disable_openai_responses_api": "Désactiver l'API OpenAI Responses (par défaut : false)", - "audio_video_file_transcribe": "Fichier audio ou vidéo à transcrire", - "model_for_transcription": "Modèle à utiliser pour la transcription (séparé du modèle de chat)", - "split_media_files_ffmpeg": "Diviser les fichiers audio/vidéo de plus de 25MB en utilisant ffmpeg", - "tts_voice_name": "Nom de voix TTS pour les modèles pris en charge (ex. Kore, Charon, Puck)", - "list_gemini_tts_voices": "Lister toutes les voix TTS Gemini disponibles", - "list_transcription_models": "Lister tous les modèles de transcription disponibles", - "send_desktop_notification": "Envoyer une notification de bureau quand la commande se termine", + "could_not_determine_home_dir": "impossible de déterminer le répertoire home de l'utilisateur : %w", + "could_not_stat_env_file": "impossible de vérifier le fichier .env : %w", "custom_notification_command": "Commande personnalisée à exécuter pour les notifications (remplace les notifications intégrées)", - "set_reasoning_thinking_level": "Définir le niveau de raisonnement/réflexion (ex. off, low, medium, high, ou tokens numériques pour Anthropic ou Google Gemini)", - "set_debug_level": "Définir le niveau de débogage (0=désactivé, 1=basique, 2=détaillé, 3=trace)", - "usage_header": "Utilisation :", - "application_options_header": "Options de l'application :", - "help_options_header": "Options d'aide :", - "help_message": "Afficher ce message d'aide", - "options_placeholder": "[OPTIONS]", - "available_vendors_header": "Fournisseurs disponibles :", - "available_models_header": "Modèles disponibles", - "no_items_found": "Aucun %s", - "no_description_available": "Aucune description disponible", - "i18n_download_failed": "Échec du téléchargement de la traduction pour la langue '%s' : %v", - "i18n_load_failed": "Échec du chargement du fichier de traduction : %v", - "setup_welcome_header": "🎉 Bienvenue sur Fabric ! Configurons votre installation.", - "setup_step_downloading_patterns": "📥 Étape 1 : Téléchargement des modèles (requis pour le fonctionnement de Fabric)...", - "setup_step_downloading_strategies": "📥 Étape 2 : Téléchargement des stratégies (requis pour le fonctionnement de Fabric)...", - "setup_step_configure_ai_provider": "🤖 Étape 3 : Configurer un fournisseur d'IA", - "setup_ai_provider_required": "Fabric a besoin d'au moins un fournisseur d'IA pour fonctionner.", - "setup_add_more_providers_later": "Vous pourrez ajouter d'autres fournisseurs plus tard avec 'fabric --setup'", - "setup_step_setting_defaults": "⚙️ Étape 4 : Configuration du fournisseur et du modèle par défaut...", - "setup_complete_header": "✅ Configuration terminée ! Vous pouvez maintenant utiliser Fabric.", - "setup_next_steps": "Prochaines étapes :", - "setup_list_patterns": "• Lister les modèles disponibles : fabric -l", - "setup_try_pattern": "• Essayer un modèle : echo 'votre texte' | fabric --pattern summarize", - "setup_configure_more": "• Configurer plus de paramètres : fabric --setup", - "setup_failed_download_patterns": "échec du téléchargement des modèles : %w", - "setup_failed_download_strategies": "échec du téléchargement des stratégies : %w", - "setup_failed_set_defaults": "échec de la configuration du fournisseur et du modèle par défaut : %w", - "setup_no_ai_provider_selected": "aucun fournisseur d'IA sélectionné - au moins un est requis", - "setup_invalid_selection": "sélection invalide : %s", - "setup_available_ai_providers": "Fournisseurs d'IA disponibles :", - "setup_enter_ai_provider_number": "Numéro du fournisseur d'IA", - "setup_available_plugins": "Plugins disponibles :", - "setup_plugin_number": "Numéro du plugin", - "setup_plugin_prompt": "Entrez le numéro du plugin à configurer", - "setup_required_configuration_header": "━━━ CONFIGURATION REQUISE ━━━\n\nFournisseurs d'IA [au moins un requis]", - "setup_required_tools": "Outils requis", - "setup_optional_configuration_header": "━━━ CONFIGURATION OPTIONNELLE ━━━\n\nOutils optionnels", - "setup_validation_header": "État de la configuration :", - "setup_validation_ai_provider_configured": "✓ Fournisseur d'IA configuré", - "setup_validation_ai_provider_missing": "✗ Fournisseur d'IA non configuré - Requis pour le fonctionnement de Fabric", - "setup_validation_defaults_configured": "✓ Fournisseur/modèle par défaut défini : %s/%s", - "setup_validation_defaults_missing": "✗ Fournisseur/modèle par défaut non défini - Requis pour le fonctionnement de Fabric", - "setup_validation_patterns_configured": "✓ Modèles téléchargés", - "setup_validation_patterns_missing": "✗ Modèles non trouvés - Requis pour le fonctionnement de Fabric", - "setup_validation_strategies_configured": "✓ Stratégies téléchargées", - "setup_validation_strategies_missing": "✗ Stratégies non trouvées - Requises pour le fonctionnement de Fabric", - "setup_validation_incomplete_warning": "⚠️ Configuration incomplète ! Composants requis manquants.", - "setup_validation_incomplete_help": "Exécutez à nouveau 'fabric --setup' pour configurer les éléments manquants,\nou exécutez 'fabric -U' pour télécharger les modèles et stratégies.", - "setup_validation_complete": "✓ Tous les composants requis sont configurés !", - "patterns_not_found_header": "⚠️ Aucun modèle trouvé !", - "patterns_required_to_work": "Les modèles sont requis pour le fonctionnement de Fabric. Pour résoudre ce problème :", - "patterns_option_run_setup": "Option 1 (Recommandée) : Exécuter la configuration pour télécharger les modèles", - "patterns_option_run_setup_command": "fabric --setup", - "patterns_option_run_update": "Option 2 : Télécharger/mettre à jour les modèles directement", - "patterns_option_run_update_command": "fabric -U", - "pattern_not_found_no_patterns": "modèle '%s' non trouvé.\n\nAucun modèle n'est installé ! Pour résoudre ce problème :\n • Exécutez 'fabric --setup' pour configurer et télécharger les modèles\n • Ou exécutez 'fabric -U' pour télécharger/mettre à jour les modèles directement", - "pattern_not_found_list_available": "modèle '%s' non trouvé. Exécutez 'fabric -l' pour voir les modèles disponibles", - "plugin_configured": " ✓", - "plugin_not_configured": " ⚠️ NON CONFIGURÉ", - "defaults_setup_description": "Fournisseur et modèle d'IA par défaut", - "defaults_model_question": "Saisissez l'index ou le nom de votre modèle par défaut", - "defaults_model_context_length_question": "Saisissez la longueur du contexte du modèle", + "custom_patterns_directory_question": "Saisissez le chemin vers votre répertoire de patrons personnalisés", "custom_patterns_label": "Patrons personnalisés", "custom_patterns_setup_description": "Patrons personnalisés - Définir le répertoire pour vos patrons personnalisés", - "custom_patterns_directory_question": "Saisissez le chemin vers votre répertoire de patrons personnalisés", + "defaults_model_context_length_question": "Saisissez la longueur du contexte du modèle", + "defaults_model_question": "Saisissez l'index ou le nom de votre modèle par défaut", + "defaults_setup_description": "Fournisseur et modèle d'IA par défaut", + "disable_openai_responses_api": "Désactiver l'API OpenAI Responses (par défaut : false)", + "disable_pattern_variable_replacement": "Désactiver le remplacement des variables de motif", + "enable_web_search_tool": "Activer l'outil de recherche web pour les modèles pris en charge (Anthropic, OpenAI, Gemini)", + "end_tag_thinking_sections": "Balise de fin pour les sections de réflexion", + "error_creating_audio_file": "erreur lors de la création du fichier audio : %v", + "error_creating_file": "erreur lors de la création du fichier : %v", + "error_fetching_playlist_videos": "erreur lors de la récupération des vidéos de la liste de lecture : %w", + "error_parsing_config_file": "erreur lors de l'analyse du fichier de configuration : %w", + "error_reading_config_file": "erreur lors de la lecture du fichier de configuration : %w", + "error_reading_piped_message": "erreur lors de la lecture du message redirigé depuis stdin : %w", + "error_writing_audio_data": "erreur lors de l'écriture des données audio dans le fichier : %v", + "error_writing_to_file": "erreur lors de l'écriture dans le fichier : %v", + "extension_cmd_template_required": "le modèle de commande est requis pour l'opération %s", + "extension_command_template_label": " Modèle de commande : %s\n", + "extension_config_hash_mismatch": "discordance de hash du fichier de configuration pour %s", + "extension_config_path_label": " Chemin de configuration : %s\n\n", + "extension_description_label": " Description : %s\n", + "extension_empty_command": "commande vide après le formatage", + "extension_executable_hash_mismatch": "discordance de hash de l'exécutable pour %s", + "extension_executable_label": " Exécutable : %s\n", + "extension_executable_not_found": "exécutable introuvable : %w", + "extension_executable_required": "le chemin de l'exécutable est requis", + "extension_executing_command": "Exécution de la commande : %s\n", + "extension_execution_failed_err": "l'exécution a échoué : %w\nerr : %s", + "extension_execution_failed_stderr": "l'exécution a échoué : %w\nstderr : %s", + "extension_execution_timed_out": "l'exécution a expiré après %v", + "extension_failed_format_command": "impossible de formater la commande : %w", + "extension_failed_get_absolute_path": "impossible d'obtenir le chemin absolu : %w", + "extension_failed_get_extension": "impossible d'obtenir l'extension : %w", + "extension_failed_get_output_path": "impossible d'obtenir le chemin de sortie : %w\nerr : %s", + "extension_failed_hash_executable": "impossible de calculer le hash de l'exécutable : %w", + "extension_failed_marshal_registry": "impossible de sérialiser le registre d'extensions : %w", + "extension_failed_parse_config": "échec de l'analyse du fichier de configuration : %w", + "extension_failed_parse_registry": "impossible d'analyser le registre d'extensions : %w", + "extension_failed_read_config": "échec de lecture du fichier de configuration : %w", + "extension_failed_read_output_file": "impossible de lire le fichier de sortie : %w", + "extension_failed_read_registry": "impossible de lire le registre d'extensions : %w", + "extension_failed_register": "échec de l'enregistrement de l'extension : %w", + "extension_failed_remove": "échec de la suppression de l'extension : %w", + "extension_failed_verify_executable": "impossible de vérifier l'exécutable : %w", + "extension_file_config_label": " Configuration de fichier :\n", + "extension_invalid_config_path": "chemin de configuration invalide : %w", + "extension_invalid_definition": "définition d'extension invalide : %w", + "extension_invalid_timeout": "valeur de délai invalide '%s' : doit être une durée comme '30s' ou '1m' : %w", + "extension_invalid_timeout_format": "format de délai invalide : %w", + "extension_name_contains_spaces": "le nom de l'extension '%s' contient des espaces - les noms ne doivent pas contenir d'espaces", + "extension_name_detail_label": "Nom : %s\n", + "extension_name_empty": "le nom de l'extension ne peut pas être vide", + "extension_name_label": "Extension : %s\n", + "extension_name_required": "le nom de l'extension est requis", + "extension_no_file_config": "aucune configuration de fichier trouvée", + "extension_no_output_file": "aucun fichier de sortie spécifié dans la configuration", + "extension_not_found": "extension %s introuvable", + "extension_operation_not_found": "opération %s introuvable pour l'extension %s", + "extension_operation_required": "au moins une opération doit être définie", + "extension_operations_label": " Opérations :\n", + "extension_registered_success": "Extension enregistrée avec succès :\n", + "extension_registry_not_initialized": "registre d'extensions non initialisé", + "extension_status_disabled": " Statut : DÉSACTIVÉE - Vérification du hash échouée : %v\n", + "extension_status_enabled": " Statut : ACTIVÉE\n", + "extension_timeout_label": " Délai d'expiration : %s\n", + "extension_type_label": " Type : %s\n", + "extension_type_required": "le type d'extension est requis", + "extension_version_label": " Version : %s\n", + "extension_warning_load_registry": "Attention : impossible de charger le registre d'extensions : %v\n", + "fabric_command_complete": "Commande Fabric terminée", + "fabric_command_complete_with_pattern": "Fabric : %s terminé", + "fetch_content_exceeds_limit": "fetch: contenu trop volumineux: dépasse %d octets", + "fetch_content_not_utf8": "fetch: le contenu n'est pas un texte UTF-8 valide", + "fetch_content_null_bytes": "fetch: le contenu contient des octets nuls", + "fetch_content_too_large": "fetch: contenu trop volumineux: %d octets (max %d octets)", + "fetch_error_create_request": "fetch: erreur lors de la création de la requête: %v", + "fetch_error_fetching_url": "fetch: erreur lors de la récupération de l'URL: %v", + "fetch_error_reading_response": "fetch: erreur lors de la lecture de la réponse: %v", + "fetch_http_error": "fetch: erreur HTTP: %d - %s", + "fetch_unknown_operation": "fetch: opération inconnue %q (prise en charge: get)", + "fetch_unsupported_content_type": "fetch: type de contenu non pris en charge %q - seul le contenu texte est autorisé", + "file_already_exists_choose_different": "le fichier %s existe déjà. Veuillez choisir un nom de fichier différent ou supprimer le fichier existant", + "file_already_exists_not_overwriting": "le fichier %s existe déjà, ne sera pas écrasé. Renommez le fichier existant ou choisissez un nom différent", + "file_manager_applied_operation": "Opération %s appliquée à %s", + "file_manager_empty_path": "chemin vide pour la modification de fichier %d", + "file_manager_failed_create_directory": "échec de la création du répertoire %s pour la modification de fichier %d: %w", + "file_manager_failed_parse_json": "échec de l'analyse %s JSON: %w", + "file_manager_failed_write_file": "échec de l'écriture du fichier %s pour la modification de fichier %d: %w", + "file_manager_file_content_too_large": "contenu du fichier trop volumineux pour la modification de fichier %d: %d octets", + "file_manager_invalid_format_no_json_array": "format %s non valide: aucun tableau JSON trouvé", + "file_manager_invalid_format_unbalanced_brackets": "format %s non valide: crochets déséquilibrés", + "file_manager_invalid_operation": "opération non valide pour la modification de fichier %d: %s", + "file_manager_suspicious_path": "chemin suspect pour la modification de fichier %d: %s", + "gemini_audio_data_too_small": "données audio trop petites : %d octets, minimum requis : %d", + "gemini_empty_pcm_data": "données PCM vides fournies", + "gemini_invalid_location_format": "format d'emplacement de recherche invalide %q : doit être un fuseau horaire (ex. 'America/Los_Angeles') ou un code de langue (ex. 'en-US')", + "gemini_invalid_voice": "voix invalide '%s'. Les voix valides sont : %v", + "gemini_no_audio_data": "aucune donnée audio reçue du modèle TTS", + "gemini_no_text_for_tts": "aucun contenu textuel trouvé pour la génération TTS", + "gemini_pcm_data_too_large": "données PCM trop volumineuses : %d octets, maximum autorisé : %d", + "gemini_stream_error": "Erreur : %v", + "gemini_tts_failed": "échec de la génération TTS : %w", + "gemini_unexpected_data_type": "type de données inattendu : %s, données audio attendues", + "gemini_wav_data_invalid": "données WAV générées invalides : %d octets, minimum requis : %d", + "gemini_wav_generation_failed": "échec de la génération du fichier WAV : %w", + "grab_comments_from_youtube": "Récupérer les commentaires de la vidéo YouTube et envoyer au chat", + "grab_transcript_from_youtube": "Récupérer la transcription de la vidéo YouTube et envoyer au chat (utilisé par défaut).", + "grab_transcript_with_timestamps": "Récupérer la transcription de la vidéo YouTube avec horodatage et envoyer au chat", + "groups_items_number_out_of_range": "le numéro %d est hors de portée", + "help_message": "Afficher ce message d'aide", + "help_options_header": "Options d'aide :", + "html_readability_error": "utilise l'entrée originale, car la lisibilité HTML ne peut pas être appliquée", + "i18n_download_failed": "Échec du téléchargement de la traduction pour la langue '%s' : %v", + "i18n_load_failed": "Échec du chargement du fichier de traduction : %v", + "image_compression_jpeg_webp_only": "la compression d'image ne peut être utilisée qu'avec les formats JPEG et WebP, pas %s", + "image_compression_range_error": "la compression d'image doit être entre 0 et 100, reçu %d", + "image_dimensions_help": "Dimensions de l'image : 1024x1024, 1536x1024, 1024x1536, auto (par défaut : auto)", + "image_file_already_exists": "le fichier image existe déjà : %s", + "image_parameters_require_image_file": "les paramètres d'image (--image-size, --image-quality, --image-background, --image-compression) ne peuvent être utilisés qu'avec --image-file", + "image_quality_help": "Qualité de l'image : low, medium, high, auto (par défaut : auto)", + "invalid_config_path": "chemin de configuration invalide : %w", + "invalid_image_background": "arrière-plan d'image invalide '%s'. Arrière-plans pris en charge : opaque, transparent", + "invalid_image_file_extension": "extension de fichier image invalide '%s'. Formats pris en charge : .png, .jpeg, .jpg, .webp", + "invalid_image_quality": "qualité d'image invalide '%s'. Qualités prises en charge : low, medium, high, auto", + "invalid_image_size": "taille d'image invalide '%s'. Tailles prises en charge : 1024x1024, 1536x1024, 1024x1536, auto", + "jina_error_creating_request": "erreur lors de la création de la requête : %v", + "jina_error_reading_response_body": "erreur lors de la lecture du corps de la réponse : %v", + "jina_error_sending_request": "erreur lors de l'envoi de la requête : %v", "jina_label": "Jina AI", "jina_setup_description": "Service Jina AI - pour récupérer une page web sous forme de texte propre et compatible LLM", - "youtube_label": "YouTube", - "youtube_setup_description": "YouTube - pour récupérer les transcriptions vidéo (via yt-dlp) et les commentaires/métadonnées (via l'API YouTube)", "language_label": "Langue", - "language_setup_description": "Langue - Langue de sortie par défaut du fournisseur d'IA", "language_output_question": "Entrez votre langue de sortie par défaut (par exemple : zh_CN)", - "optional_marker": "(optionnel)", - "required_marker": "[obligatoire]", - "patterns_loader_label": "Chargeur de patrons", - "patterns_setup_description": "Patrons - Télécharge les patrons", - "patterns_git_repo_url_label": "URL du dépôt Git", - "patterns_git_repo_url_question": "Saisissez l'URL du dépôt Git par défaut pour les patrons", - "patterns_git_repo_folder_label": "Dossier des patrons dans le dépôt Git", - "patterns_git_repo_folder_question": "Saisissez le dossier par défaut du dépôt Git où sont stockés les patrons", - "patterns_failed_create_temp_folder": "impossible de créer le dossier temporaire des patrons : %w", - "patterns_downloading": "Téléchargement des patrons et remplissage de %s...\\n", - "patterns_failed_download_from_git": "échec du téléchargement des patrons depuis le dépôt Git : %w", - "patterns_saving_updated_configuration": "💾 Enregistrement de la configuration mise à jour (chemin changé de '%s' à '%s')...\\n", - "patterns_failed_move_patterns": "échec du déplacement des patrons vers le répertoire de configuration : %w", - "patterns_download_success": "✅ Patrons téléchargés et installés avec succès dans %s\\n", - "patterns_failed_unique_file": "échec de création du fichier de patrons uniques : %w", - "patterns_failed_access_directory": "impossible d'accéder au répertoire des patrons '%s' : %w", - "patterns_preserve_warning": "Avertissement : impossible de conserver le patron personnalisé '%s' : %v\\n", - "patterns_preserved_custom_pattern": "Patron personnalisé conservé : %s\\n", - "patterns_failed_create_temp_dir": "impossible de créer le répertoire temporaire : %w", - "patterns_cloning_repository": "Clonage du dépôt %s (chemin : %s)...\\n", - "patterns_failed_download_from_repo": "échec du téléchargement des patrons depuis %s : %w", - "patterns_failed_read_temp_directory": "échec de lecture du répertoire temporaire des patrons : %w", - "patterns_no_patterns_migration_failed": "aucun patron trouvé dans le dépôt au chemin %s et la migration a échoué : %w", - "patterns_downloaded_temp": "%d patrons téléchargés dans le répertoire temporaire\\n", - "patterns_detected_old_path": "🔄 Ancien chemin 'patterns' détecté, tentative de migration vers 'data/patterns'...", - "patterns_warning_remove_test_folder": "Avertissement : impossible de supprimer le dossier temporaire de test '%s' : %v\\n", - "patterns_found_new_path": "✅ %d patrons trouvés au nouveau chemin '%s', mise à jour de la configuration...\\n", - "patterns_failed_move_test_patterns": "échec du déplacement des patrons de test vers le dossier temporaire : %w", - "patterns_unable_to_find_or_migrate": "impossible de trouver des patrons au chemin actuel '%s' ou de migrer vers la nouvelle structure", - "patterns_failed_read_directory": "échec de lecture du répertoire des patrons : %w", - "patterns_debug_included_custom_directory": "📂 Patrons du répertoire personnalisé également inclus : %s\\n", - "patterns_warning_custom_directory": "Avertissement : impossible de lire le répertoire de patrons personnalisé %s : %v\\n", - "patterns_no_patterns_found_in_directories": "aucun patron trouvé dans les répertoires %s et %s", - "patterns_no_patterns_found_in_directory": "aucun patron trouvé dans le répertoire %s", - "patterns_failed_write_unique_file": "échec d'écriture du fichier de patrons uniques : %w", - "patterns_unique_file_created": "📝 Fichier de patrons uniques créé avec %d patrons\\n", - "patterns_no_patterns_copied": "aucun patron n'a été copié avec succès vers %s", - "patterns_failed_loaded_marker": "impossible de créer le fichier indicateur '%s' : %w", - "strategies_label": "Stratégies de prompt", - "strategies_setup_description": "Stratégies - Télécharge des stratégies de prompting (comme chain of thought)", - "strategies_git_repo_url_label": "URL du dépôt Git", - "strategies_git_repo_url_question": "Saisissez l'URL du dépôt Git par défaut pour les stratégies", - "strategies_git_repo_folder_label": "Dossier des stratégies dans le dépôt Git", - "strategies_git_repo_folder_question": "Saisissez le dossier par défaut du dépôt Git où sont stockées les stratégies", - "strategies_downloading": "Téléchargement des stratégies et remplissage de %s...\\n", - "strategies_download_success": "✅ Stratégies téléchargées et installées avec succès dans %s\\n", - "strategies_home_dir_error": "impossible d'obtenir le répertoire personnel : %v", - "strategies_failed_create_directory": "échec de création du répertoire des stratégies : %w", - "strategies_cloning_repository": "Clonage du dépôt %s (chemin : %s)...\\n", - "strategies_failed_download": "échec du téléchargement des stratégies : %w", - "strategies_downloaded_count": "%d stratégies téléchargées\\n", - "strategies_home_dir_fallback": "impossible d'obtenir le répertoire personnel : %v, utilisation du répertoire courant à la place", - "strategy_not_found": "stratégie %s introuvable. Exécutez 'fabric --liststrategies' pour voir la liste", - "strategies_none_found": "aucune stratégie trouvée. Exécutez 'fabric --setup' pour télécharger les stratégies", - "strategies_available_header": "Stratégies disponibles :", - "plugin_enter_value": "Saisissez votre %v %v", - "plugin_enable_bool_question": "Activer %v %v (true/false)", - "plugin_setup_skipped": "[%v] ignoré\\n", - "plugin_question_bool": "%v%v (true/false, laissez vide pour '%s' ou tapez '%v' pour supprimer la valeur) :", - "plugin_question_with_default": "%v%v (laissez vide pour '%s' ou tapez '%v' pour supprimer la valeur) :", - "plugin_question_optional": "%v%v (laissez vide pour passer) :", - "plugin_invalid_boolean_value": "valeur booléenne invalide : %v", - "plugin_setting_not_valid": "%v=%v n'est pas valide", - "plugin_invalid_bool": "booléen invalide : %q", - "ollama_num_ctx_must_be_finite": "num_ctx doit être un nombre fini", - "ollama_num_ctx_must_be_integer": "num_ctx doit être un entier, float avec partie fractionnaire reçu", - "ollama_num_ctx_value_out_of_range": "valeur num_ctx hors limites", - "ollama_num_ctx_must_be_positive": "num_ctx doit être positif, reçu : %d", - "ollama_num_ctx_value_too_large": "valeur num_ctx trop grande : %d", - "ollama_num_ctx_must_be_valid_number": "num_ctx doit être un nombre valide", - "ollama_num_ctx_must_be_valid_number_got": "num_ctx doit être un nombre valide, reçu : %s", - "ollama_num_ctx_invalid_type": "num_ctx doit être un nombre, type invalide reçu", - "ollama_num_ctx_exceeds_maximum": "num_ctx dépasse la valeur maximale autorisée de %d", - "ollama_error_reading_body": "Erreur lors de la lecture du corps : %v", - "ollama_error_endpoint": "test du point de terminaison", - "ollama_error_unmarshalling_body": "Erreur lors du décodage du corps : %v", - "ollama_invalid_num_ctx_in_request": "num_ctx invalide dans la requête : %v", - "ollama_warning_parse_variables": "Attention : échec de l'analyse de options.variables en JSON : %v", - "ollama_error_marshalling_body": "Erreur lors de l'encodage du corps : %v", + "language_setup_description": "Langue - Langue de sortie par défaut du fournisseur d'IA", + "list_all_available_models": "Lister tous les modèles disponibles", + "list_all_contexts": "Lister tous les contextes", + "list_all_patterns": "Lister tous les motifs", + "list_all_registered_extensions": "Lister toutes les extensions enregistrées", + "list_all_sessions": "Lister toutes les sessions", + "list_all_strategies": "Lister toutes les stratégies", + "list_all_vendors": "Lister tous les fournisseurs", + "list_gemini_tts_voices": "Lister toutes les voix TTS Gemini disponibles", + "list_transcription_models": "Lister tous les modèles de transcription disponibles", + "lmstudio_api_url_question": "Entrez votre URL %v (pour rappel, elle est généralement %v)", + "lmstudio_error_reading_response": "erreur lors de la lecture de la réponse : %w", + "lmstudio_failed_create_request": "échec de la création de la requête : %w", + "lmstudio_failed_decode_response": "échec du décodage de la réponse : %w", + "lmstudio_failed_marshal_payload": "échec de la sérialisation des données : %w", + "lmstudio_failed_send_request": "échec de l'envoi de la requête : %w", + "lmstudio_invalid_response_missing_choices": "format de réponse invalide : choix manquants ou vides", + "lmstudio_invalid_response_missing_content": "format de réponse invalide : contenu manquant ou non-chaîne dans le message", + "lmstudio_invalid_response_missing_message": "format de réponse invalide : message manquant dans le premier choix", + "lmstudio_invalid_response_missing_text": "format de réponse invalide : texte manquant ou non-chaîne dans le premier choix", + "lmstudio_no_embeddings_returned": "aucun embedding retourné", + "lmstudio_unexpected_status_code": "code de statut inattendu : %d", + "model_context_length_ollama": "Longueur de contexte du modèle (affecte seulement ollama)", + "model_for_transcription": "Modèle à utiliser pour la transcription (séparé du modèle de chat)", + "no_description_available": "Aucune description disponible", + "no_items_found": "Aucun %s", + "no_notification_system_available": "aucun système de notification disponible", + "number_of_latest_patterns": "Nombre des motifs les plus récents à lister", + "ollama_cannot_parse_url": "Impossible d'analyser l'URL '%s' : %v", + "ollama_chat_request_failed": "Requête de chat échouée : %v", + "ollama_empty_address": "adresse vide", "ollama_error_building_chat_url": "Erreur lors de la construction de l'URL /chat : %v", "ollama_error_creating_chat_request": "Erreur lors de la création de la requête /chat : %v", - "ollama_failed_create_request": "échec de création de la requête", + "ollama_error_endpoint": "test du point de terminaison", "ollama_error_getting_chat_body": "Erreur lors de l'obtention du corps /chat : %v", - "ollama_upstream_non_2xx_body_unreadable": "Le serveur Fabric en amont a renvoyé un statut non-2xx %d et le corps n'a pas pu être lu : %v", - "ollama_upstream_non_2xx": "Le serveur Fabric en amont a renvoyé un statut non-2xx %d : %s", - "ollama_upstream_returned_status": "le serveur Fabric en amont a renvoyé le statut %d", - "ollama_error_prefix": "Erreur : %s", + "ollama_error_marshalling_body": "Erreur lors de l'encodage du corps : %v", "ollama_error_parse_upstream_response": "Erreur : échec de l'analyse de la réponse en amont", - "ollama_failed_unmarshal_fabric_response": "échec du décodage de la réponse Fabric", - "ollama_error_writing_response": "Erreur lors de l'écriture de la réponse : %v", + "ollama_error_prefix": "Erreur : %s", + "ollama_error_reading_body": "Erreur lors de la lecture du corps : %v", "ollama_error_scanning_body": "Erreur lors de l'analyse du corps : %v", + "ollama_error_unmarshalling_body": "Erreur lors du décodage du corps : %v", + "ollama_error_writing_response": "Erreur lors de l'écriture de la réponse : %v", + "ollama_failed_create_request": "échec de création de la requête", + "ollama_failed_decode_data_url": "échec du décodage de l'URL de données : %v", + "ollama_failed_fetch_image": "échec de la récupération de l'image depuis %s : %s", "ollama_failed_scan_sse_stream": "échec de l'analyse du flux de réponse SSE : %v", - "ollama_sse_buffer_limit": "La ligne SSE dépasse la limite de tampon de 1 Mo - ligne de données trop grande", - "ollama_warning_no_content": "Attention : aucun contenu reçu du serveur Fabric en amont", - "ollama_no_content_from_upstream": "aucun contenu reçu du serveur Fabric en amont", - "ollama_empty_address": "adresse vide", + "ollama_failed_unmarshal_fabric_response": "échec du décodage de la réponse Fabric", + "ollama_http_timeout_question": "Entrez le délai d'expiration HTTP (par exemple, 20m, 60s)", "ollama_invalid_address": "adresse invalide : %w", "ollama_invalid_address_missing_host": "adresse invalide : hôte manquant", "ollama_invalid_address_missing_hostname": "adresse invalide : nom d'hôte manquant", "ollama_invalid_address_path_not_allowed": "adresse invalide : composant de chemin non autorisé dans l'adresse simple", - "extension_registry_not_initialized": "registre d'extensions non initialisé", - "extension_name_label": "Extension : %s\n", - "extension_status_disabled": " Statut : DÉSACTIVÉE - Vérification du hash échouée : %v\n", - "extension_config_path_label": " Chemin de configuration : %s\n\n", - "extension_status_enabled": " Statut : ACTIVÉE\n", - "extension_executable_label": " Exécutable : %s\n", - "extension_type_label": " Type : %s\n", - "extension_timeout_label": " Délai d'expiration : %s\n", - "extension_description_label": " Description : %s\n", - "extension_version_label": " Version : %s\n", - "extension_operations_label": " Opérations :\n", - "extension_command_template_label": " Modèle de commande : %s\n", - "extension_file_config_label": " Configuration de fichier :\n", - "extension_invalid_config_path": "chemin de configuration invalide : %w", - "extension_failed_read_config": "échec de lecture du fichier de configuration : %w", - "extension_failed_parse_config": "échec de l'analyse du fichier de configuration : %w", - "extension_failed_register": "échec de l'enregistrement de l'extension : %w", - "extension_invalid_timeout": "valeur de délai invalide '%s' : doit être une durée comme '30s' ou '1m' : %w", - "extension_registered_success": "Extension enregistrée avec succès :\n", - "extension_name_detail_label": "Nom : %s\n", - "extension_failed_remove": "échec de la suppression de l'extension : %w", - "lmstudio_api_url_question": "Entrez votre URL %v (pour rappel, elle est généralement %v)", - "lmstudio_failed_create_request": "échec de la création de la requête : %w", - "lmstudio_failed_send_request": "échec de l'envoi de la requête : %w", - "lmstudio_unexpected_status_code": "code de statut inattendu : %d", - "lmstudio_failed_decode_response": "échec du décodage de la réponse : %w", - "lmstudio_failed_marshal_payload": "échec de la sérialisation des données : %w", - "lmstudio_error_reading_response": "erreur lors de la lecture de la réponse : %w", - "lmstudio_invalid_response_missing_choices": "format de réponse invalide : choix manquants ou vides", - "lmstudio_invalid_response_missing_message": "format de réponse invalide : message manquant dans le premier choix", - "lmstudio_invalid_response_missing_content": "format de réponse invalide : contenu manquant ou non-chaîne dans le message", - "lmstudio_invalid_response_missing_text": "format de réponse invalide : texte manquant ou non-chaîne dans le premier choix", - "lmstudio_no_embeddings_returned": "aucun embedding retourné", - "extension_warning_load_registry": "Attention : impossible de charger le registre d'extensions : %v\n", - "extension_name_empty": "le nom de l'extension ne peut pas être vide", - "extension_name_contains_spaces": "le nom de l'extension '%s' contient des espaces - les noms ne doivent pas contenir d'espaces", - "extension_executable_not_found": "exécutable introuvable : %w", - "extension_failed_get_absolute_path": "impossible d'obtenir le chemin absolu : %w", - "extension_failed_hash_executable": "impossible de calculer le hash de l'exécutable : %w", - "extension_invalid_definition": "définition d'extension invalide : %w", - "extension_name_required": "le nom de l'extension est requis", - "extension_executable_required": "le chemin de l'exécutable est requis", - "extension_type_required": "le type d'extension est requis", - "extension_invalid_timeout_format": "format de délai invalide : %w", - "extension_operation_required": "au moins une opération doit être définie", - "extension_cmd_template_required": "le modèle de commande est requis pour l'opération %s", - "extension_not_found": "extension %s introuvable", - "extension_config_hash_mismatch": "discordance de hash du fichier de configuration pour %s", - "extension_failed_verify_executable": "impossible de vérifier l'exécutable : %w", - "extension_executable_hash_mismatch": "discordance de hash de l'exécutable pour %s", - "extension_failed_marshal_registry": "impossible de sérialiser le registre d'extensions : %w", - "extension_failed_read_registry": "impossible de lire le registre d'extensions : %w", - "extension_failed_parse_registry": "impossible d'analyser le registre d'extensions : %w", - "extension_failed_get_extension": "impossible d'obtenir l'extension : %w", - "extension_failed_format_command": "impossible de formater la commande : %w", - "extension_empty_command": "commande vide après le formatage", - "extension_operation_not_found": "opération %s introuvable pour l'extension %s", - "extension_executing_command": "Exécution de la commande : %s\n", - "extension_execution_failed_stderr": "l'exécution a échoué : %w\nstderr : %s", - "extension_no_file_config": "aucune configuration de fichier trouvée", - "extension_no_output_file": "aucun fichier de sortie spécifié dans la configuration", - "extension_execution_timed_out": "l'exécution a expiré après %v", - "extension_execution_failed_err": "l'exécution a échoué : %w\nerr : %s", - "extension_failed_read_output_file": "impossible de lire le fichier de sortie : %w", - "extension_failed_get_output_path": "impossible d'obtenir le chemin de sortie : %w\nerr : %s", - "spotify_failed_create_token_request": "impossible de créer la requête de token : %w", - "spotify_failed_request_access_token": "impossible de demander le jeton d'accès : %w", - "spotify_failed_get_access_token": "impossible d'obtenir le jeton d'accès : statut %d, réponse : %s", - "spotify_failed_decode_token_response": "impossible de décoder la réponse du token : %w", - "spotify_failed_create_request": "impossible de créer la requête : %w", - "spotify_failed_execute_request": "impossible d'exécuter la requête : %w", - "spotify_failed_read_response_body": "impossible de lire le corps de la réponse : %w", + "ollama_invalid_data_url_format": "format d'URL de données invalide", + "ollama_invalid_http_timeout_using_default": "Délai d'expiration HTTP invalide '%s' : %v, utilisation de la valeur par défaut", + "ollama_invalid_num_ctx_in_request": "num_ctx invalide dans la requête : %v", + "ollama_no_content_from_upstream": "aucun contenu reçu du serveur Fabric en amont", + "ollama_num_ctx_exceeds_maximum": "num_ctx dépasse la valeur maximale autorisée de %d", + "ollama_num_ctx_invalid_type": "num_ctx doit être un nombre, type invalide reçu", + "ollama_num_ctx_must_be_finite": "num_ctx doit être un nombre fini", + "ollama_num_ctx_must_be_integer": "num_ctx doit être un entier, float avec partie fractionnaire reçu", + "ollama_num_ctx_must_be_positive": "num_ctx doit être positif, reçu : %d", + "ollama_num_ctx_must_be_valid_number": "num_ctx doit être un nombre valide", + "ollama_num_ctx_must_be_valid_number_got": "num_ctx doit être un nombre valide, reçu : %s", + "ollama_num_ctx_value_out_of_range": "valeur num_ctx hors limites", + "ollama_num_ctx_value_too_large": "valeur num_ctx trop grande : %d", + "ollama_sse_buffer_limit": "La ligne SSE dépasse la limite de tampon de 1 Mo - ligne de données trop grande", + "ollama_upstream_non_2xx": "Le serveur Fabric en amont a renvoyé un statut non-2xx %d : %s", + "ollama_upstream_non_2xx_body_unreadable": "Le serveur Fabric en amont a renvoyé un statut non-2xx %d et le corps n'a pas pu être lu : %v", + "ollama_upstream_returned_status": "le serveur Fabric en amont a renvoyé le statut %d", + "ollama_warning_no_content": "Attention : aucun contenu reçu du serveur Fabric en amont", + "ollama_warning_parse_variables": "Attention : échec de l'analyse de options.variables en JSON : %v", + "openai_api_base_url_not_configured": "URL de base de l'API non configurée pour le fournisseur %s", + "openai_audio_ffmpeg_failed": "ffmpeg a échoué : %v : %s", + "openai_audio_ffmpeg_not_found_install": "ffmpeg non trouvé : veuillez l'installer", + "openai_audio_file_exceeds_limit_enable_split": "Le fichier %s dépasse la limite de 25 Mo ; utilisez --split-media-file pour activer le découpage automatique", + "openai_audio_file_exceeds_limit_splitting": "Le fichier %s est plus grand que la limite... découpage en morceaux...", + "openai_audio_model_not_supported_for_transcription": "le modèle '%s' n'est pas pris en charge pour la transcription", + "openai_audio_running_ffmpeg_split_chunks": "Exécution de ffmpeg pour découper l'audio en morceaux de %d secondes...", + "openai_audio_unable_to_split_acceptable_size_chunks": "impossible de découper le fichier en morceaux de taille acceptable", + "openai_audio_unsupported_audio_format": "format audio non pris en charge '%s'", + "openai_audio_using_model_to_transcribe_part": "Utilisation du modèle %s pour transcrire la partie %d (fichier : %s)...", + "openai_failed_to_create_models_url": "échec de création de l'URL des modèles : %w", + "openai_image_failed_to_create_directory": "échec de la création du répertoire %s : %w", + "openai_image_failed_to_decode_image_data": "échec du décodage des données d'image : %w", + "openai_image_failed_to_save_image": "échec de l'enregistrement de l'image dans %s : %w", + "openai_image_saved_to": "Image enregistrée dans : %s", + "openai_model_no_image_generation": "le modèle '%s' ne prend pas en charge la génération d'images. Modèles pris en charge : %s", + "openai_models_response_too_large": "réponse des modèles trop volumineuse du fournisseur %s (>%d octets)", + "openai_unable_to_parse_models_response": "impossible d'analyser la réponse des modèles ; réponse brute : %s", + "openai_unexpected_status_code_read_error": "code d'état inattendu : %d du fournisseur %s (échec de lecture du corps de réponse : %v)", + "openai_unexpected_status_code_with_body": "code d'état inattendu : %d du fournisseur %s, corps de réponse : %s", + "openai_warning_model_no_image_generation": "Avertissement : Le modèle '%s' ne prend pas en charge la génération d'images. Modèles pris en charge : %s. Envisagez d'utiliser -m gpt-5.2 pour la génération d'images.\n", + "optional_marker": "(optionnel)", + "options_placeholder": "[OPTIONS]", + "output_entire_session": "Sortie de toute la session (même temporaire) vers le fichier de sortie", + "output_full": "Sortie : %s", + "output_raw_list_shell_completion": "Sortie de liste brute sans en-têtes/formatage (pour la complétion shell)", + "output_to_file": "Sortie vers fichier", + "output_truncated": "Sortie : %s...", + "output_video_metadata": "Afficher les métadonnées de la vidéo", + "path_to_yaml_config": "Chemin vers le fichier de configuration YAML", + "pattern_not_found_list_available": "modèle '%s' non trouvé. Exécutez 'fabric -l' pour voir les modèles disponibles", + "pattern_not_found_no_patterns": "modèle '%s' non trouvé.\n\nAucun modèle n'est installé ! Pour résoudre ce problème :\n • Exécutez 'fabric --setup' pour configurer et télécharger les modèles\n • Ou exécutez 'fabric -U' pour télécharger/mettre à jour les modèles directement", + "pattern_variables_help": "Valeurs pour les variables de motif, ex. -v=#role:expert -v=#points:30", + "patterns_cloning_repository": "Clonage du dépôt %s (chemin : %s)...\\n", + "patterns_debug_included_custom_directory": "📂 Patrons du répertoire personnalisé également inclus : %s\\n", + "patterns_detected_old_path": "🔄 Ancien chemin 'patterns' détecté, tentative de migration vers 'data/patterns'...", + "patterns_download_success": "✅ Patrons téléchargés et installés avec succès dans %s\\n", + "patterns_downloaded_temp": "%d patrons téléchargés dans le répertoire temporaire\\n", + "patterns_downloading": "Téléchargement des patrons et remplissage de %s...\\n", + "patterns_failed_access_directory": "impossible d'accéder au répertoire des patrons '%s' : %w", + "patterns_failed_create_temp_dir": "impossible de créer le répertoire temporaire : %w", + "patterns_failed_create_temp_folder": "impossible de créer le dossier temporaire des patrons : %w", + "patterns_failed_download_from_git": "échec du téléchargement des patrons depuis le dépôt Git : %w", + "patterns_failed_download_from_repo": "échec du téléchargement des patrons depuis %s : %w", + "patterns_failed_loaded_marker": "impossible de créer le fichier indicateur '%s' : %w", + "patterns_failed_move_patterns": "échec du déplacement des patrons vers le répertoire de configuration : %w", + "patterns_failed_move_test_patterns": "échec du déplacement des patrons de test vers le dossier temporaire : %w", + "patterns_failed_read_directory": "échec de lecture du répertoire des patrons : %w", + "patterns_failed_read_temp_directory": "échec de lecture du répertoire temporaire des patrons : %w", + "patterns_failed_unique_file": "échec de création du fichier de patrons uniques : %w", + "patterns_failed_write_unique_file": "échec d'écriture du fichier de patrons uniques : %w", + "patterns_found_new_path": "✅ %d patrons trouvés au nouveau chemin '%s', mise à jour de la configuration...\\n", + "patterns_git_repo_folder_question": "Saisissez le dossier par défaut du dépôt Git où sont stockés les patrons", + "patterns_git_repo_url_question": "Saisissez l'URL du dépôt Git par défaut pour les patrons", + "patterns_loader_label": "Chargeur de patrons", + "patterns_no_patterns_copied": "aucun patron n'a été copié avec succès vers %s", + "patterns_no_patterns_found_in_directories": "aucun patron trouvé dans les répertoires %s et %s", + "patterns_no_patterns_found_in_directory": "aucun patron trouvé dans le répertoire %s", + "patterns_no_patterns_migration_failed": "aucun patron trouvé dans le dépôt au chemin %s et la migration a échoué : %w", + "patterns_not_found_header": "⚠️ Aucun modèle trouvé !", + "patterns_option_run_setup": "Option 1 (Recommandée) : Exécuter la configuration pour télécharger les modèles", + "patterns_option_run_setup_command": "fabric --setup", + "patterns_option_run_update": "Option 2 : Télécharger/mettre à jour les modèles directement", + "patterns_option_run_update_command": "fabric -U", + "patterns_preserve_warning": "Avertissement : impossible de conserver le patron personnalisé '%s' : %v\\n", + "patterns_preserved_custom_pattern": "Patron personnalisé conservé : %s\\n", + "patterns_required_to_work": "Les modèles sont requis pour le fonctionnement de Fabric. Pour résoudre ce problème :", + "patterns_saving_updated_configuration": "💾 Enregistrement de la configuration mise à jour (chemin changé de '%s' à '%s')...\\n", + "patterns_setup_description": "Patrons - Télécharge les patrons", + "patterns_unable_to_find_or_migrate": "impossible de trouver des patrons au chemin actuel '%s' ou de migrer vers la nouvelle structure", + "patterns_unique_file_created": "📝 Fichier de patrons uniques créé avec %d patrons\\n", + "patterns_warning_custom_directory": "Avertissement : impossible de lire le répertoire de patrons personnalisé %s : %v\\n", + "patterns_warning_remove_test_folder": "Avertissement : impossible de supprimer le dossier temporaire de test '%s' : %v\\n", + "perplexity_api_key_not_configured": "Clé API non configurée pour %s. Définissez la variable d'environnement %s ou exécutez 'fabric --setup' pour configurer %s", + "perplexity_api_request_failed": "requête API Perplexity échouée : %w", + "perplexity_citations_header": "\n\n**Citations :**\n", + "perplexity_failed_configure": "échec de la configuration de Perplexity : %w", + "perplexity_streaming_error": "erreur de streaming Perplexity : %v", + "plugin_configured": " ✓", + "plugin_enable_bool_question": "Activer %v %v (true/false)", + "plugin_enter_value": "Saisissez votre %v %v", + "plugin_invalid_bool": "booléen invalide : %q", + "plugin_invalid_boolean_value": "valeur booléenne invalide : %v", + "plugin_not_configured": " ⚠️ NON CONFIGURÉ", + "plugin_question_bool": "%v%v (true/false, laissez vide pour '%s' ou tapez '%v' pour supprimer la valeur) :", + "plugin_question_optional": "%v%v (laissez vide pour passer) :", + "plugin_question_with_default": "%v%v (laissez vide pour '%s' ou tapez '%v' pour supprimer la valeur) :", + "plugin_setting_not_valid": "%v=%v n'est pas valide", + "plugin_setup_configured": "[%v] configuré", + "plugin_setup_skipped": "[%v] ignoré\\n", + "prefer_playlist_over_video": "Préférer la liste de lecture à la vidéo si les deux IDs sont présents dans l'URL", + "print_context": "Afficher le contexte", + "print_current_version": "Afficher la version actuelle", + "print_session": "Afficher la session", + "register_new_extension": "Enregistrer une nouvelle extension depuis le chemin du fichier de configuration", + "remove_registered_extension": "Supprimer une extension enregistrée par nom", + "required_marker": "[obligatoire]", + "run_setup_for_reconfigurable_parts": "Exécuter la configuration pour toutes les parties reconfigurables de fabric", + "save_generated_image_to_file": "Sauvegarder l'image générée dans le chemin de fichier spécifié (ex. 'output.png')", + "scrape_website_url": "Scraper l'URL du site web en markdown en utilisant Jina AI", + "scraping_not_configured": "la fonctionnalité de scraping n'est pas configurée. Veuillez configurer Jina pour activer le scraping", + "search_question_jina": "Question de recherche en utilisant Jina AI", + "seed_for_lmm_generation": "Graine à utiliser pour la génération LMM", + "send_desktop_notification": "Envoyer une notification de bureau quand la commande se termine", + "serve_fabric_api_ollama_endpoints": "Servir l'API REST Fabric avec les endpoints ollama", + "serve_fabric_rest_api": "Servir l'API REST Fabric", + "set_debug_level": "Définir le niveau de débogage (0=désactivé, 1=basique, 2=détaillé, 3=trace)", + "set_frequency_penalty": "Définir la pénalité de fréquence", + "set_location_web_search": "Définir l'emplacement pour les résultats de recherche web (ex. 'America/Los_Angeles')", + "set_presence_penalty": "Définir la pénalité de présence", + "set_reasoning_thinking_level": "Définir le niveau de raisonnement/réflexion (ex. off, low, medium, high, ou tokens numériques pour Anthropic ou Google Gemini)", + "set_temperature": "Définir la température", + "set_top_p": "Définir le top P", + "setup_add_more_providers_later": "Vous pourrez ajouter d'autres fournisseurs plus tard avec 'fabric --setup'", + "setup_ai_provider_required": "Fabric a besoin d'au moins un fournisseur d'IA pour fonctionner.", + "setup_available_ai_providers": "Fournisseurs d'IA disponibles :", + "setup_available_plugins": "Plugins disponibles :", + "setup_complete_header": "✅ Configuration terminée ! Vous pouvez maintenant utiliser Fabric.", + "setup_configure_more": "• Configurer plus de paramètres : fabric --setup", + "setup_enter_ai_provider_number": "Numéro du fournisseur d'IA", + "setup_failed_download_patterns": "échec du téléchargement des modèles : %w", + "setup_failed_download_strategies": "échec du téléchargement des stratégies : %w", + "setup_failed_set_defaults": "échec de la configuration du fournisseur et du modèle par défaut : %w", + "setup_invalid_selection": "sélection invalide : %s", + "setup_list_patterns": "• Lister les modèles disponibles : fabric -l", + "setup_next_steps": "Prochaines étapes :", + "setup_no_ai_provider_selected": "aucun fournisseur d'IA sélectionné - au moins un est requis", + "setup_optional_configuration_header": "━━━ CONFIGURATION OPTIONNELLE ━━━\n\nOutils optionnels", + "setup_plugin_number": "Numéro du plugin", + "setup_plugin_prompt": "Entrez le numéro du plugin à configurer", + "setup_required_configuration_header": "━━━ CONFIGURATION REQUISE ━━━\n\nFournisseurs d'IA [au moins un requis]", + "setup_required_tools": "Outils requis", + "setup_step_configure_ai_provider": "🤖 Étape 3 : Configurer un fournisseur d'IA", + "setup_step_downloading_patterns": "📥 Étape 1 : Téléchargement des modèles (requis pour le fonctionnement de Fabric)...", + "setup_step_downloading_strategies": "📥 Étape 2 : Téléchargement des stratégies (requis pour le fonctionnement de Fabric)...", + "setup_step_setting_defaults": "⚙️ Étape 4 : Configuration du fournisseur et du modèle par défaut...", + "setup_try_pattern": "• Essayer un modèle : echo 'votre texte' | fabric --pattern summarize", + "setup_validation_ai_provider_configured": "✓ Fournisseur d'IA configuré", + "setup_validation_ai_provider_missing": "✗ Fournisseur d'IA non configuré - Requis pour le fonctionnement de Fabric", + "setup_validation_complete": "✓ Tous les composants requis sont configurés !", + "setup_validation_defaults_configured": "✓ Fournisseur/modèle par défaut défini : %s/%s", + "setup_validation_defaults_missing": "✗ Fournisseur/modèle par défaut non défini - Requis pour le fonctionnement de Fabric", + "setup_validation_header": "État de la configuration :", + "setup_validation_incomplete_help": "Exécutez à nouveau 'fabric --setup' pour configurer les éléments manquants,\nou exécutez 'fabric -U' pour télécharger les modèles et stratégies.", + "setup_validation_incomplete_warning": "⚠️ Configuration incomplète ! Composants requis manquants.", + "setup_validation_patterns_configured": "✓ Modèles téléchargés", + "setup_validation_patterns_missing": "✗ Modèles non trouvés - Requis pour le fonctionnement de Fabric", + "setup_validation_strategies_configured": "✓ Stratégies téléchargées", + "setup_validation_strategies_missing": "✗ Stratégies non trouvées - Requises pour le fonctionnement de Fabric", + "setup_welcome_header": "🎉 Bienvenue sur Fabric ! Configurons votre installation.", + "show_dry_run": "Montrer ce qui serait envoyé au modèle sans l'envoyer réellement", + "specify_language_code": "Spécifier le code de langue pour le chat, ex. -g=en -g=zh -g=pt-BR -g=pt-PT", + "specify_vendor_for_model": "Spécifier le fournisseur pour le modèle sélectionné (ex. -V \"LM Studio\" -m openai/gpt-oss-20b)", + "split_media_files_ffmpeg": "Diviser les fichiers audio/vidéo de plus de 25MB en utilisant ffmpeg", "spotify_api_request_failed": "la requête API a échoué : statut %d, réponse : %s", - "spotify_failed_parse_show_metadata": "impossible d'analyser les métadonnées de l'émission : %w", - "spotify_failed_parse_episode_metadata": "impossible d'analyser les métadonnées de l'épisode : %w", - "spotify_search_failed": "la recherche a échoué : %w", - "spotify_failed_parse_search_results": "impossible d'analyser les résultats de recherche : %w", + "spotify_audio_preview_label": "**Aperçu audio** : %s", + "spotify_client_id_question": "Entrez votre CLIENT ID Spotify", + "spotify_client_secret_question": "Entrez votre CLIENT SECRET Spotify", + "spotify_description_header": "## Description", + "spotify_duration_label": "**Durée** : %d minutes", + "spotify_episode_header": "# Épisode Spotify", + "spotify_error_getting_metadata": "erreur lors de la récupération des métadonnées Spotify : %v", + "spotify_explicit_label": "**Explicite** : %v", + "spotify_failed_create_request": "impossible de créer la requête : %w", + "spotify_failed_create_token_request": "impossible de créer la requête de token : %w", + "spotify_failed_decode_token_response": "impossible de décoder la réponse du token : %w", + "spotify_failed_execute_request": "impossible d'exécuter la requête : %w", + "spotify_failed_get_access_token": "impossible d'obtenir le jeton d'accès : statut %d, réponse : %s", "spotify_failed_get_show_episodes": "impossible de récupérer les épisodes de l'émission : %w", + "spotify_failed_parse_episode_metadata": "impossible d'analyser les métadonnées de l'épisode : %w", "spotify_failed_parse_episodes": "impossible d'analyser les épisodes : %w", - "template_file_log_validating_path": "Fichier : validation du chemin %q", - "template_file_error_path_contains_parent_ref": "fichier : le chemin ne peut pas contenir '..'", + "spotify_failed_parse_search_results": "impossible d'analyser les résultats de recherche : %w", + "spotify_failed_parse_show_metadata": "impossible d'analyser les métadonnées de l'émission : %w", + "spotify_failed_read_response_body": "impossible de lire le corps de la réponse : %w", + "spotify_failed_request_access_token": "impossible de demander le jeton d'accès : %w", + "spotify_invalid_url": "URL Spotify invalide, impossible d'obtenir l'ID de l'émission ou de l'épisode : '%s'", + "spotify_label": "Spotify", + "spotify_language_field_label": "**Langue** : %s", + "spotify_languages_label": "**Langues** : %s", + "spotify_media_type_label": "**Type de média** : %s", + "spotify_no_episode_found": "aucun épisode trouvé avec l'ID : %s", + "spotify_no_show_found": "aucune émission trouvée avec l'ID : %s", + "spotify_not_configured": "Spotify n'est pas configuré, veuillez exécuter la procédure de configuration", + "spotify_publisher_label": "**Éditeur** : %s", + "spotify_release_date_label": "**Date de sortie** : %s", + "spotify_search_description_label": "- **Description** : %s", + "spotify_search_episodes_label": "- **Épisodes** : %d", + "spotify_search_failed": "la recherche a échoué : %w", + "spotify_search_publisher_label": "- **Éditeur** : %s", + "spotify_search_results_header": "# Résultats de recherche Spotify", + "spotify_search_url_label": "- **URL** : %s", + "spotify_setup_description": "Spotify - pour récupérer les métadonnées de podcasts/émissions depuis Spotify", + "spotify_show_header": "# Podcast/Émission Spotify", + "spotify_show_name_label": "**Émission** : %s", + "spotify_title_label": "**Titre** : %s", + "spotify_total_episodes_label": "**Épisodes au total** : %d", + "spotify_url_label": "**URL** : %s", + "start_tag_thinking_sections": "Balise de début pour les sections de réflexion", + "strategies_available_header": "Stratégies disponibles :", + "strategies_cloning_repository": "Clonage du dépôt %s (chemin : %s)...\\n", + "strategies_download_success": "✅ Stratégies téléchargées et installées avec succès dans %s\\n", + "strategies_downloaded_count": "%d stratégies téléchargées\\n", + "strategies_downloading": "Téléchargement des stratégies et remplissage de %s...\\n", + "strategies_failed_create_directory": "échec de création du répertoire des stratégies : %w", + "strategies_failed_download": "échec du téléchargement des stratégies : %w", + "strategies_git_repo_folder_question": "Saisissez le dossier par défaut du dépôt Git où sont stockées les stratégies", + "strategies_git_repo_url_question": "Saisissez l'URL du dépôt Git par défaut pour les stratégies", + "strategies_home_dir_error": "impossible d'obtenir le répertoire personnel : %v", + "strategies_home_dir_fallback": "impossible d'obtenir le répertoire personnel : %v, utilisation du répertoire courant à la place", + "strategies_label": "Stratégies de prompt", + "strategies_none_found": "aucune stratégie trouvée. Exécutez 'fabric --setup' pour télécharger les stratégies", + "strategies_setup_description": "Stratégies - Télécharge des stratégies de prompting (comme chain of thought)", + "strategy_not_found": "stratégie %s introuvable. Exécutez 'fabric --liststrategies' pour voir la liste", + "stream_help": "Streaming", + "suppress_thinking_tags": "Supprimer le texte encadré par les balises de réflexion", + "template_datetime_error_invalid_number": "invalid number in relative time: %q", + "template_datetime_error_invalid_relative_format": "invalid relative time format", + "template_datetime_error_invalid_unit": "invalid time unit: %q", + "template_datetime_error_relative_requires_value": "relative time requires a value", + "template_datetime_error_unknown_operation": "datetime: unknown operation %q", "template_file_error_expand_home_dir": "fichier : impossible d'étendre le répertoire personnel : %v", - "template_file_log_cleaned_path": "Fichier : chemin nettoyé %q", - "template_file_log_operation_value": "Fichier : opération=%q valeur=%q", - "template_file_error_tail_requires_path_lines": "fichier : tail nécessite le format chemin|lignes", "template_file_error_invalid_line_count": "fichier : nombre de lignes invalide %q", "template_file_error_line_count_positive": "fichier : le nombre de lignes doit être positif", - "template_file_log_tail_returning_lines": "Fichier : tail renvoie %d lignes", - "template_file_error_stat_file": "fichier : impossible d'obtenir l'état du fichier : %v", - "template_file_error_size_exceeds_limit": "fichier : la taille %d dépasse la limite de %d octets", - "template_file_error_read_file": "fichier : lecture impossible : %v", - "template_file_log_read_bytes": "Fichier : %d octets lus", - "template_file_log_exists_for_path": "Fichier : exists=%v pour le chemin %q", - "template_file_log_size_for_path": "Fichier : taille=%d pour le chemin %q", - "template_file_log_modified_for_path": "Fichier : modifié=%q pour le chemin %q", - "template_file_error_unknown_operation": "fichier : opération inconnue %q (prises en charge : read, tail, exists, size, modified)", - "template_file_log_reading_last_lines": "Fichier : lecture des %d dernières lignes depuis %q", "template_file_error_open_file": "fichier : ouverture impossible : %v", - "template_file_error_stat_open_file": "fichier : impossible d'obtenir l'état : %v", + "template_file_error_path_contains_parent_ref": "fichier : le chemin ne peut pas contenir '..'", + "template_file_error_read_file": "fichier : lecture impossible : %v", "template_file_error_scanner_read": "fichier : erreur de lecture : %v", + "template_file_error_size_exceeds_limit": "fichier : la taille %d dépasse la limite de %d octets", + "template_file_error_stat_file": "fichier : impossible d'obtenir l'état du fichier : %v", + "template_file_error_stat_open_file": "fichier : impossible d'obtenir l'état : %v", + "template_file_error_tail_requires_path_lines": "fichier : tail nécessite le format chemin|lignes", + "template_file_error_unknown_operation": "fichier : opération inconnue %q (prises en charge : read, tail, exists, size, modified)", + "template_file_log_cleaned_path": "Fichier : chemin nettoyé %q", + "template_file_log_exists_for_path": "Fichier : exists=%v pour le chemin %q", + "template_file_log_modified_for_path": "Fichier : modifié=%q pour le chemin %q", + "template_file_log_operation_value": "Fichier : opération=%q valeur=%q", + "template_file_log_read_bytes": "Fichier : %d octets lus", "template_file_log_read_total_return_last": "Fichier : %d lignes lues au total, retour des %d dernières", - "chatter_error_no_session_pattern_user_messages": "aucune session, aucun modèle ni message utilisateur fourni", - "chatter_error_no_messages_provided": "aucun message fourni", - "chatter_log_stream_usage_metadata": "[Métadonnées] Entrée : %d | Sortie : %d | Total : %d", - "chatter_error_stream_update": "Erreur : %s", - "chatter_error_empty_response": "réponse vide", - "chatter_warning_parse_file_changes_failed": "Avertissement : echec de l'analyse des modifications de fichiers : %v", - "chatter_warning_get_current_directory_failed": "Avertissement : echec de l'obtention du repertoire courant : %v", - "chatter_warning_apply_file_changes_failed": "Avertissement : echec de l'application des modifications de fichiers : %v", - "chatter_info_file_changes_applied_successfully": "Les modifications de fichiers ont ete appliquees avec succes.", - "chatter_help_review_changes_with_git_diff": "Vous pouvez verifier les modifications avec 'git diff' si vous utilisez git.", - "chatter_error_find_session": "impossible de trouver la session %s : %v", - "chatter_error_find_context": "impossible de trouver le contexte %s : %v", - "chatter_error_get_pattern": "impossible d'obtenir le modele %s : %v", - "chatter_error_load_strategy": "impossible de charger la strategie %s : %v", - "chatter_prompt_enforce_response_language": "%s\n\nIMPORTANT : D'abord, executez les instructions fournies dans ce prompt en utilisant l'entree de l'utilisateur. Ensuite, assurez-vous que l'integralite de votre reponse finale, y compris tous les en-tetes de section ou titres generes lors de l'execution des instructions, soit redigee UNIQUEMENT en langue %s.", - "vertexai_failed_google_credentials": "impossible d'obtenir les identifiants Google (assurez-vous que ADC est configure) : %w", - "vertexai_no_models_found": "aucun modele trouve chez aucun editeur", - "vertexai_no_conversational_models": "aucun modele conversationnel trouve", + "template_file_log_reading_last_lines": "Fichier : lecture des %d dernières lignes depuis %q", + "template_file_log_size_for_path": "Fichier : taille=%d pour le chemin %q", + "template_file_log_tail_returning_lines": "Fichier : tail renvoie %d lignes", + "template_file_log_validating_path": "Fichier : validation du chemin %q", + "template_sys_error_env_requires_var": "env: variable name required", + "template_sys_error_home": "failed to get home directory: %v", + "template_sys_error_hostname": "failed to get hostname: %v", + "template_sys_error_pwd": "failed to get working directory: %v", + "template_sys_error_unknown_operation": "sys: unknown operation %q", + "template_sys_error_user": "failed to get current user: %v", + "transcription_model_required": "un modèle de transcription est requis (utilisez --transcribe-model)", + "transparent_background_png_webp_only": "l'arrière-plan transparent ne peut être utilisé qu'avec les formats PNG et WebP, pas %s", + "tts_audio_generated_successfully": "Audio TTS généré avec succès et sauvegardé dans : %s\n", + "tts_model_requires_audio_output": "le modèle TTS '%s' nécessite une sortie audio. Veuillez spécifier un fichier de sortie audio avec le flag -o (ex. -o output.wav)", + "tts_voice_name": "Nom de voix TTS pour les modèles pris en charge (ex. Kore, Charon, Puck)", + "unsupported_conversion": "conversion non prise en charge de %v vers %v", + "update_patterns": "Mettre à jour les motifs", + "usage_header": "Utilisation :", + "use_model_defaults_raw_help": "Utilise les valeurs par défaut du modèle sans envoyer d’options de discussion (temperature, top_p, etc.). N’affecte que les fournisseurs compatibles avec OpenAI. Les modèles Anthropic utilisent toujours une sélection intelligente des paramètres pour respecter les exigences propres à chaque modèle.", + "vendor_no_transcription_support": "le fournisseur %s ne prend pas en charge la transcription audio", + "vendor_not_configured": "le fournisseur %s n'est pas configuré", + "vendor_not_found": "fournisseur %s introuvable", + "vendors_no_ai_vendors_configured_read_models": "aucun fournisseur d'IA configuré pour lire les modèles", "vertexai_client_not_initialized": "client VertexAI non initialise", - "vertexai_no_valid_messages": "aucun message valide a envoyer", - "vertexai_no_content_in_response": "aucun contenu dans la reponse", - "vertexai_failed_gemini_client": "impossible de creer le client Gemini : %w", - "vertexai_stream_error": "Erreur : %v", - "gemini_invalid_location_format": "format d'emplacement de recherche invalide %q : doit être un fuseau horaire (ex. 'America/Los_Angeles') ou un code de langue (ex. 'en-US')", - "gemini_stream_error": "Erreur : %v", - "gemini_no_text_for_tts": "aucun contenu textuel trouvé pour la génération TTS", - "gemini_invalid_voice": "voix invalide '%s'. Les voix valides sont : %v", - "gemini_tts_failed": "échec de la génération TTS : %w", - "gemini_unexpected_data_type": "type de données inattendu : %s, données audio attendues", - "gemini_audio_data_too_small": "données audio trop petites : %d octets, minimum requis : %d", - "gemini_wav_generation_failed": "échec de la génération du fichier WAV : %w", - "gemini_wav_data_invalid": "données WAV générées invalides : %d octets, minimum requis : %d", - "gemini_no_audio_data": "aucune donnée audio reçue du modèle TTS", - "gemini_empty_pcm_data": "données PCM vides fournies", - "gemini_pcm_data_too_large": "données PCM trop volumineuses : %d octets, maximum autorisé : %d", - "bedrock_unable_load_aws_config": "impossible de charger la configuration AWS : %w", - "bedrock_aws_region_label": "Région AWS", - "bedrock_invalid_aws_region": "région AWS invalide : %s", - "bedrock_unable_load_aws_config_with_region": "impossible de charger la configuration AWS avec la région %s : %w", - "bedrock_failed_list_foundation_models": "échec de la liste des modèles de fondation : %w", - "bedrock_failed_list_inference_profiles": "échec de la liste des profils d'inférence : %w", - "bedrock_panic_sendstream": "panique dans SendStream : %v", - "bedrock_conversestream_failed": "bedrock conversestream a échoué pour le modèle %s : %w", - "bedrock_unknown_stream_event_type": "type d'événement de flux inconnu : %T", - "bedrock_converse_failed": "bedrock converse a échoué pour le modèle %s : %w", - "bedrock_unexpected_response_type": "type de réponse inattendu : %T", - "bedrock_empty_response_content": "contenu de réponse vide", - "bedrock_unexpected_content_block_type": "type de bloc de contenu inattendu : %T", - "fetch_unknown_operation": "fetch: opération inconnue %q (prise en charge: get)", - "fetch_content_not_utf8": "fetch: le contenu n'est pas un texte UTF-8 valide", - "fetch_content_null_bytes": "fetch: le contenu contient des octets nuls", - "fetch_error_create_request": "fetch: erreur lors de la création de la requête: %v", - "fetch_error_fetching_url": "fetch: erreur lors de la récupération de l'URL: %v", - "fetch_http_error": "fetch: erreur HTTP: %d - %s", - "fetch_content_too_large": "fetch: contenu trop volumineux: %d octets (max %d octets)", - "fetch_unsupported_content_type": "fetch: type de contenu non pris en charge %q - seul le contenu texte est autorisé", - "fetch_error_reading_response": "fetch: erreur lors de la lecture de la réponse: %v", - "fetch_content_exceeds_limit": "fetch: contenu trop volumineux: dépasse %d octets", - "file_manager_invalid_format_no_json_array": "format %s non valide: aucun tableau JSON trouvé", - "file_manager_invalid_format_unbalanced_brackets": "format %s non valide: crochets déséquilibrés", - "file_manager_failed_parse_json": "échec de l'analyse %s JSON: %w", - "file_manager_invalid_operation": "opération non valide pour la modification de fichier %d: %s", - "file_manager_empty_path": "chemin vide pour la modification de fichier %d", - "file_manager_suspicious_path": "chemin suspect pour la modification de fichier %d: %s", - "file_manager_file_content_too_large": "contenu du fichier trop volumineux pour la modification de fichier %d: %d octets", - "file_manager_failed_create_directory": "échec de la création du répertoire %s pour la modification de fichier %d: %w", - "file_manager_failed_write_file": "échec de l'écriture du fichier %s pour la modification de fichier %d: %w", - "file_manager_applied_operation": "Opération %s appliquée à %s", - "vertexai_error_create_request": "échec de la création de la requête: %w", - "vertexai_error_request_failed": "échec de la requête: %w", "vertexai_error_api_status": "l'API a retourné le statut %d: %s", - "vertexai_error_read_response": "échec de la lecture de la réponse: %w", - "vertexai_error_response_too_large": "réponse trop volumineuse (>%d octets)", + "vertexai_error_create_request": "échec de la création de la requête: %w", "vertexai_error_parse_response": "échec de l'analyse de la réponse: %w", - "copilot_tenant_client_id_required": "l'ID de locataire et l'ID client sont requis", - "copilot_failed_create_conversation": "échec de la création de la conversation: %w", - "copilot_failed_send_message": "échec de l'envoi du message: %w", - "copilot_failed_stream_message": "échec du streaming du message: %w", - "copilot_error_create_conversation": "échec de la création de la conversation: %s - %s", - "copilot_error_chat_request": "échec de la requête de chat: %s - %s", - "copilot_error_stream_request": "échec de la demande de flux: %s - %s", - "copilot_debug_created_conversation": "Conversation Copilot créée: %s", - "copilot_debug_failed_parse_sse_event": "Échec de l'analyse de l'événement SSE: %v", - "copilot_error_reading_stream": "erreur lors de la lecture du flux: %w" + "vertexai_error_read_response": "échec de la lecture de la réponse: %w", + "vertexai_error_request_failed": "échec de la requête: %w", + "vertexai_error_response_too_large": "réponse trop volumineuse (>%d octets)", + "vertexai_failed_gemini_client": "impossible de creer le client Gemini : %w", + "vertexai_failed_google_credentials": "impossible d'obtenir les identifiants Google (assurez-vous que ADC est configure) : %w", + "vertexai_no_content_in_response": "aucun contenu dans la reponse", + "vertexai_no_conversational_models": "aucun modele conversationnel trouve", + "vertexai_no_models_found": "aucun modele trouve chez aucun editeur", + "vertexai_no_valid_messages": "aucun message valide a envoyer", + "vertexai_stream_error": "Erreur : %v", + "wipe_context": "Effacer le contexte", + "wipe_session": "Effacer la session", + "youtube_api_key_required": "Clé API YouTube requise pour les commentaires et métadonnées. Exécutez 'fabric --setup' pour configurer", + "youtube_auth_required_bot_detection": "YouTube nécessite une authentification (détection de bot). Utilisez --yt-dlp-args='--cookies-from-browser BROWSER' où BROWSER peut être chrome, firefox, brave, etc.", + "youtube_empty_seconds_string": "chaîne de secondes vide", + "youtube_error_getting_comments": "erreur lors de l'obtention des commentaires : %v", + "youtube_error_getting_metadata": "erreur lors de l'obtention des métadonnées de la vidéo : %v", + "youtube_error_getting_video_details": "erreur lors de l'obtention des détails de la vidéo : %v", + "youtube_error_parsing_duration": "erreur lors de l'analyse de la durée de la vidéo : %v", + "youtube_error_saving_csv": "erreur lors de l'enregistrement des vidéos en CSV : %v", + "youtube_failed_create_temp_dir": "échec de création du répertoire temporaire : %v", + "youtube_failed_fetch_comments": "Échec de la récupération des commentaires : %v", + "youtube_failed_walk_directory": "échec du parcours du répertoire : %v", + "youtube_invalid_duration_string": "chaîne de durée invalide : %s", + "youtube_invalid_seconds_format": "format de secondes invalide %q : %w", + "youtube_invalid_timestamp_format": "format d'horodatage invalide : %s", + "youtube_invalid_url": "URL YouTube invalide, impossible d'obtenir l'ID de vidéo ou de liste de lecture : '%s'", + "youtube_invalid_ytdlp_arguments": "arguments yt-dlp invalides : %v", + "youtube_label": "YouTube", + "youtube_no_transcript_content": "aucun contenu de transcription trouvé dans le fichier VTT", + "youtube_no_url_provided": "Aucune URL YouTube fournie", + "youtube_no_video_found_with_id": "aucune vidéo trouvée avec l'ID : %s", + "youtube_no_video_id_found": "aucun ID de vidéo trouvé dans l'URL", + "youtube_no_vtt_files_found": "aucun fichier VTT trouvé dans le répertoire", + "youtube_not_configured": "YouTube n'est pas configuré, veuillez exécuter la procédure de configuration", + "youtube_playlist_header": "Liste de lecture : %s", + "youtube_playlist_saved_to": "Liste de lecture enregistrée dans %s", + "youtube_rate_limit_exceeded": "Limite de taux YouTube dépassée. Réessayez plus tard ou utilisez différents arguments yt-dlp comme '--sleep-requests 1' pour ralentir les requêtes.", + "youtube_setup_description": "YouTube - pour récupérer les transcriptions vidéo (via yt-dlp) et les commentaires/métadonnées (via l'API YouTube)", + "youtube_url_help": "Vidéo YouTube ou \"URL\" de liste de lecture pour récupérer la transcription, les commentaires et envoyer au chat ou afficher dans la console et stocker dans le fichier de sortie", + "youtube_url_is_playlist_not_video": "L'URL est une liste de lecture, pas une vidéo", + "youtube_video_id_title_header": "VideoID : Titre", + "youtube_ytdlp_not_found": "yt-dlp introuvable dans PATH. Veuillez installer yt-dlp pour utiliser la fonctionnalité de transcription YouTube", + "youtube_ytdlp_stderr_error": "Erreur lors de la lecture du stderr de yt-dlp" } diff --git a/internal/i18n/locales/it.json b/internal/i18n/locales/it.json index aa5511ae..b2a1d62d 100644 --- a/internal/i18n/locales/it.json +++ b/internal/i18n/locales/it.json @@ -1,520 +1,592 @@ { - "html_readability_error": "usa l'input originale, perché non è possibile applicare la leggibilità HTML", - "vendor_not_configured": "il fornitore %s non è configurato", - "vendor_no_transcription_support": "il fornitore %s non supporta la trascrizione audio", - "transcription_model_required": "è richiesto un modello di trascrizione (usa --transcribe-model)", - "youtube_not_configured": "YouTube non è configurato, eseguire la procedura di configurazione", - "spotify_not_configured": "Spotify non è configurato, eseguire la procedura di configurazione", - "spotify_label": "Spotify", - "spotify_setup_description": "Spotify - per ottenere metadati di podcast/show da Spotify", - "spotify_invalid_url": "URL Spotify non valido, impossibile ottenere l'ID dello show o dell'episodio: '%s'", - "spotify_error_getting_metadata": "errore durante il recupero dei metadati Spotify: %v", - "spotify_no_show_found": "nessuno show trovato con ID: %s", - "spotify_no_episode_found": "nessun episodio trovato con ID: %s", - "spotify_url_help": "URL di podcast o episodio Spotify per ottenere metadati e inviare alla chat", - "youtube_api_key_required": "Chiave API YouTube richiesta per commenti e metadati. Eseguire 'fabric --setup' per configurare", - "youtube_ytdlp_not_found": "yt-dlp non trovato in PATH. Per favore installa yt-dlp per usare la funzionalità di trascrizione YouTube", - "youtube_invalid_url": "URL YouTube non valido, impossibile ottenere l'ID del video o della playlist: '%s'", - "youtube_url_is_playlist_not_video": "L'URL è una playlist, non un video", - "youtube_no_video_id_found": "nessun ID video trovato nell'URL", - "youtube_rate_limit_exceeded": "Limite di richieste YouTube superato. Riprova più tardi o usa argomenti yt-dlp diversi come '--sleep-requests 1' per rallentare le richieste.", - "youtube_auth_required_bot_detection": "YouTube richiede autenticazione (rilevamento bot). Usa --yt-dlp-args='--cookies-from-browser BROWSER' dove BROWSER può essere chrome, firefox, brave, ecc.", - "youtube_ytdlp_stderr_error": "Errore durante la lettura dello stderr di yt-dlp", - "youtube_invalid_ytdlp_arguments": "argomenti yt-dlp non validi: %v", - "youtube_failed_create_temp_dir": "impossibile creare la directory temporanea: %v", - "youtube_no_transcript_content": "nessun contenuto di trascrizione trovato nel file VTT", - "youtube_no_vtt_files_found": "nessun file VTT trovato nella directory", - "youtube_failed_walk_directory": "impossibile esplorare la directory: %v", - "youtube_error_getting_video_details": "errore nell'ottenere i dettagli del video: %v", - "youtube_invalid_duration_string": "stringa di durata non valida: %s", - "youtube_error_getting_metadata": "errore nell'ottenere i metadati del video: %v", - "youtube_error_parsing_duration": "errore nell'analizzare la durata del video: %v", - "youtube_error_getting_comments": "errore nell'ottenere i commenti: %v", - "youtube_error_saving_csv": "errore nel salvare i video in CSV: %v", - "youtube_no_video_found_with_id": "nessun video trovato con ID: %s", - "youtube_invalid_timestamp_format": "formato timestamp non valido: %s", - "youtube_empty_seconds_string": "stringa di secondi vuota", - "youtube_invalid_seconds_format": "formato secondi non valido %q: %w", - "error_fetching_playlist_videos": "errore nel recupero dei video della playlist: %w", - "openai_api_base_url_not_configured": "URL base API non configurato per il provider %s", - "openai_failed_to_create_models_url": "impossibile creare URL modelli: %w", - "openai_unexpected_status_code_with_body": "codice di stato imprevisto: %d dal provider %s, corpo risposta: %s", - "openai_unexpected_status_code_read_error_partial": "codice di stato imprevisto: %d dal provider %s (errore lettura corpo: %v), risposta parziale: %s", - "openai_unexpected_status_code_read_error": "codice di stato imprevisto: %d dal provider %s (errore lettura corpo risposta: %v)", - "openai_unable_to_parse_models_response": "impossibile analizzare risposta modelli; risposta grezza: %s", - "openai_warning_model_no_image_generation": "Avviso: Il modello '%s' non supporta la generazione di immagini. Modelli supportati: %s. Considera di usare -m gpt-5.2 per la generazione di immagini.\n", - "openai_model_no_image_generation": "il modello '%s' non supporta la generazione di immagini. Modelli supportati: %s", - "scraping_not_configured": "la funzionalità di scraping non è configurata. Per favore configura Jina per abilitare lo scraping", - "could_not_determine_home_dir": "impossibile determinare la directory home dell'utente: %w", - "could_not_stat_env_file": "impossibile verificare il file .env: %w", + "additional_yt_dlp_args": "Argomenti aggiuntivi da passare a yt-dlp (es. '--cookies-from-browser brave')", + "address_to_bind_rest_api": "Indirizzo per associare l'API REST", + "anthropic_stream_error": "Errore di streaming: %v", + "api_key_secure_server_routes": "Chiave API utilizzata per proteggere le route del server", + "application_options_header": "Opzioni dell'applicazione:", + "apply_variables_to_input": "Applica variabili all'input utente", + "attachment_path_or_url_help": "Percorso allegato o URL (es. per messaggi di riconoscimento immagine OpenAI)", + "audio_output_file_specified_but_not_tts_model": "file di output audio '%s' specificato ma il modello '%s' non è un modello TTS. Per favore usa un modello TTS come gemini-2.5-flash-preview-tts", + "audio_video_file_transcribe": "File audio o video da trascrivere", + "available_models_header": "Modelli disponibili", + "available_transcription_models": "Modelli di trascrizione disponibili:", + "available_vendors_header": "Fornitori disponibili:", + "azure_api_key_required": "La chiave API di Azure è obbligatoria", + "azure_api_version_question": "Inserire la versione dell'API Azure (lasciare vuoto per il valore predefinito)", + "azure_base_url_required": "L'URL base di Azure è obbligatorio", + "azure_deployments_question": "Inserire i nomi delle distribuzioni Azure (separati da virgola)", + "azure_failed_extract_deployment": "impossibile estrarre il nome della distribuzione dalla richiesta", + "azure_model_field_empty": "il campo modello è vuoto nel corpo della richiesta", + "azure_request_body_nil": "il corpo della richiesta è nil", + "background_type_help": "Tipo di sfondo: opaque, transparent (predefinito: opaque, solo per PNG/WebP)", + "bedrock_aws_region_label": "Regione AWS", + "bedrock_converse_failed": "bedrock converse fallito per il modello %s: %w", + "bedrock_conversestream_failed": "bedrock conversestream fallito per il modello %s: %w", + "bedrock_empty_response_content": "contenuto della risposta vuoto", + "bedrock_failed_list_foundation_models": "impossibile elencare i modelli di fondazione: %w", + "bedrock_failed_list_inference_profiles": "impossibile elencare i profili di inferenza: %w", + "bedrock_invalid_aws_region": "regione AWS non valida: %s", + "bedrock_panic_sendstream": "panic in SendStream: %v", + "bedrock_unable_load_aws_config": "impossibile caricare la configurazione AWS: %w", + "bedrock_unable_load_aws_config_with_region": "impossibile caricare la configurazione AWS con regione %s: %w", + "bedrock_unexpected_content_block_type": "tipo di blocco contenuto inaspettato: %T", + "bedrock_unexpected_response_type": "tipo di risposta inaspettato: %T", + "bedrock_unknown_stream_event_type": "tipo di evento stream sconosciuto: %T", + "cannot_convert_string": "impossibile convertire la stringa %q in %v", + "change_default_model": "Cambia modello predefinito", + "chatter_error_empty_response": "risposta vuota", + "chatter_error_find_context": "impossibile trovare il contesto %s: %v", + "chatter_error_find_session": "impossibile trovare la sessione %s: %v", + "chatter_error_get_pattern": "impossibile ottenere il pattern %s: %v", + "chatter_error_load_strategy": "impossibile caricare la strategia %s: %v", + "chatter_error_no_messages_provided": "nessun messaggio fornito", + "chatter_error_no_session_pattern_user_messages": "nessuna sessione, pattern o messaggio utente fornito", + "chatter_error_stream_update": "Errore: %s", + "chatter_help_review_changes_with_git_diff": "Puoi rivedere le modifiche con 'git diff' se stai usando git.", + "chatter_info_file_changes_applied_successfully": "Modifiche ai file applicate con successo.", + "chatter_log_stream_usage_metadata": "[Metadati] Input: %d | Output: %d | Totale: %d", + "chatter_prompt_enforce_response_language": "%s\n\nIMPORTANTE: Per prima cosa, esegui le istruzioni fornite in questo prompt usando l'input dell'utente. In secondo luogo, assicurati che l'intera risposta finale, inclusi eventuali titoli o intestazioni di sezione generati durante l'esecuzione delle istruzioni, sia scritta SOLO nella lingua %s.", + "chatter_warning_apply_file_changes_failed": "Avviso: impossibile applicare le modifiche ai file: %v", + "chatter_warning_get_current_directory_failed": "Avviso: impossibile ottenere la directory corrente: %v", + "chatter_warning_parse_file_changes_failed": "Avviso: analisi delle modifiche ai file non riuscita: %v", + "choose_context_from_available": "Scegli un contesto dai contesti disponibili", + "choose_model": "Scegli modello", + "choose_pattern_from_available": "Scegli un pattern dai pattern disponibili", + "choose_session_from_available": "Scegli una sessione dalle sessioni disponibili", + "choose_strategy_from_available": "Scegli una strategia dalle strategie disponibili", + "command_completed_successfully": "Comando completato con successo", + "compression_level_jpeg_webp": "Livello di compressione 0-100 per formati JPEG/WebP (predefinito: non impostato)", + "config_file_not_found": "file di configurazione non trovato: %s", + "convert_html_readability": "Converti input HTML in una vista pulita e leggibile", + "copilot_debug_created_conversation": "Conversazione Copilot creata: %s", + "copilot_debug_failed_parse_sse_event": "Impossibile analizzare l'evento SSE: %v", + "copilot_error_chat_request": "richiesta di chat fallita: %s - %s", + "copilot_error_create_conversation": "creazione della conversazione fallita: %s - %s", + "copilot_error_reading_stream": "errore nella lettura dello stream: %w", + "copilot_error_stream_request": "richiesta di stream fallita: %s - %s", + "copilot_failed_create_conversation": "creazione della conversazione fallita: %w", + "copilot_failed_send_message": "invio del messaggio fallito: %w", + "copilot_failed_stream_message": "streaming del messaggio fallito: %w", + "copilot_tenant_client_id_required": "sono richiesti l'ID tenant e l'ID client", + "copy_to_clipboard": "Copia negli appunti", + "could_not_copy_to_clipboard": "impossibile copiare negli appunti: %v", "could_not_create_config_dir": "impossibile creare la directory di configurazione: %w", "could_not_create_env_file": "impossibile creare il file .env: %w", - "could_not_copy_to_clipboard": "impossibile copiare negli appunti: %v", - "file_already_exists_not_overwriting": "il file %s esiste già, non verrà sovrascritto. Rinomina il file esistente o scegli un nome diverso", - "error_creating_file": "errore nella creazione del file: %v", - "error_writing_to_file": "errore nella scrittura del file: %v", - "error_creating_audio_file": "errore nella creazione del file audio: %v", - "error_writing_audio_data": "errore nella scrittura dei dati audio nel file: %v", - "tts_model_requires_audio_output": "il modello TTS '%s' richiede un output audio. Per favore specifica un file di output audio con il flag -o (es. -o output.wav)", - "audio_output_file_specified_but_not_tts_model": "file di output audio '%s' specificato ma il modello '%s' non è un modello TTS. Per favore usa un modello TTS come gemini-2.5-flash-preview-tts", - "file_already_exists_choose_different": "il file %s esiste già. Per favore scegli un nome file diverso o rimuovi il file esistente", - "no_notification_system_available": "nessun sistema di notifica disponibile", - "cannot_convert_string": "impossibile convertire la stringa %q in %v", - "unsupported_conversion": "conversione non supportata da %v a %v", - "invalid_config_path": "percorso di configurazione non valido: %w", - "config_file_not_found": "file di configurazione non trovato: %s", - "error_reading_config_file": "errore nella lettura del file di configurazione: %w", - "error_parsing_config_file": "errore nell'analisi del file di configurazione: %w", - "error_reading_piped_message": "errore nella lettura del messaggio reindirizzato da stdin: %w", - "image_file_already_exists": "il file immagine esiste già: %s", - "invalid_image_file_extension": "estensione file immagine non valida '%s'. Formati supportati: .png, .jpeg, .jpg, .webp", - "image_parameters_require_image_file": "i parametri immagine (--image-size, --image-quality, --image-background, --image-compression) possono essere utilizzati solo con --image-file", - "invalid_image_size": "dimensione immagine non valida '%s'. Dimensioni supportate: 1024x1024, 1536x1024, 1024x1536, auto", - "invalid_image_quality": "qualità immagine non valida '%s'. Qualità supportate: low, medium, high, auto", - "invalid_image_background": "sfondo immagine non valido '%s'. Sfondi supportati: opaque, transparent", - "image_compression_jpeg_webp_only": "la compressione immagine può essere utilizzata solo con formati JPEG e WebP, non %s", - "image_compression_range_error": "la compressione immagine deve essere tra 0 e 100, ricevuto %d", - "transparent_background_png_webp_only": "lo sfondo trasparente può essere utilizzato solo con formati PNG e WebP, non %s", - "available_transcription_models": "Modelli di trascrizione disponibili:", - "tts_audio_generated_successfully": "Audio TTS generato con successo e salvato in: %s\n", - "fabric_command_complete": "Comando Fabric completato", - "fabric_command_complete_with_pattern": "Fabric: %s completato", - "command_completed_successfully": "Comando completato con successo", - "output_truncated": "Output: %s...", - "output_full": "Output: %s", - "choose_pattern_from_available": "Scegli un pattern dai pattern disponibili", - "pattern_variables_help": "Valori per le variabili pattern, es. -v=#role:expert -v=#points:30", - "choose_context_from_available": "Scegli un contesto dai contesti disponibili", - "choose_session_from_available": "Scegli una sessione dalle sessioni disponibili", - "attachment_path_or_url_help": "Percorso allegato o URL (es. per messaggi di riconoscimento immagine OpenAI)", - "run_setup_for_reconfigurable_parts": "Esegui la configurazione per tutte le parti riconfigurabili di fabric", - "set_temperature": "Imposta temperatura", - "set_top_p": "Imposta top P", - "stream_help": "Streaming", - "set_presence_penalty": "Imposta penalità di presenza", - "use_model_defaults_raw_help": "Usa i valori predefiniti del modello senza inviare opzioni della chat (temperature, top_p, ecc.). Si applica solo ai provider compatibili con OpenAI. I modelli Anthropic utilizzano sempre una selezione intelligente dei parametri per rispettare i requisiti specifici del modello.", - "set_frequency_penalty": "Imposta penalità di frequenza", - "list_all_patterns": "Elenca tutti i pattern", - "list_all_available_models": "Elenca tutti i modelli disponibili", - "list_all_contexts": "Elenca tutti i contesti", - "list_all_sessions": "Elenca tutte le sessioni", - "update_patterns": "Aggiorna pattern", - "messages_to_send_to_chat": "Messaggi da inviare alla chat", - "copy_to_clipboard": "Copia negli appunti", - "choose_model": "Scegli modello", - "specify_vendor_for_model": "Specifica il fornitore per il modello selezionato (es. -V \"LM Studio\" -m openai/gpt-oss-20b)", - "model_context_length_ollama": "Lunghezza del contesto del modello (influisce solo su ollama)", - "output_to_file": "Output su file", - "output_entire_session": "Output dell'intera sessione (anche temporanea) nel file di output", - "number_of_latest_patterns": "Numero dei pattern più recenti da elencare", - "change_default_model": "Cambia modello predefinito", - "youtube_url_help": "Video YouTube o \"URL\" della playlist per ottenere trascrizioni, commenti e inviarli alla chat o stamparli sulla console e memorizzarli nel file di output", - "prefer_playlist_over_video": "Preferisci playlist al video se entrambi gli ID sono presenti nell'URL", - "grab_transcript_from_youtube": "Ottieni trascrizione dal video YouTube e invia alla chat (usato per impostazione predefinita).", - "grab_transcript_with_timestamps": "Ottieni trascrizione dal video YouTube con timestamp e invia alla chat", - "grab_comments_from_youtube": "Ottieni commenti dal video YouTube e invia alla chat", - "output_video_metadata": "Output metadati video", - "additional_yt_dlp_args": "Argomenti aggiuntivi da passare a yt-dlp (es. '--cookies-from-browser brave')", - "specify_language_code": "Specifica il codice lingua per la chat, es. -g=en -g=zh -g=pt-BR -g=pt-PT", - "scrape_website_url": "Scraping dell'URL del sito web in markdown usando Jina AI", - "search_question_jina": "Domanda di ricerca usando Jina AI", - "seed_for_lmm_generation": "Seed da utilizzare per la generazione LMM", - "wipe_context": "Cancella contesto", - "wipe_session": "Cancella sessione", - "print_context": "Stampa contesto", - "print_session": "Stampa sessione", - "convert_html_readability": "Converti input HTML in una vista pulita e leggibile", - "apply_variables_to_input": "Applica variabili all'input utente", - "disable_pattern_variable_replacement": "Disabilita sostituzione variabili pattern", - "show_dry_run": "Mostra cosa verrebbe inviato al modello senza inviarlo effettivamente", - "serve_fabric_rest_api": "Servi l'API REST di Fabric", - "serve_fabric_api_ollama_endpoints": "Servi l'API REST di Fabric con endpoint ollama", - "address_to_bind_rest_api": "Indirizzo per associare l'API REST", - "api_key_secure_server_routes": "Chiave API utilizzata per proteggere le route del server", - "path_to_yaml_config": "Percorso del file di configurazione YAML", - "print_current_version": "Stampa versione corrente", - "list_all_registered_extensions": "Elenca tutte le estensioni registrate", - "register_new_extension": "Registra una nuova estensione dal percorso del file di configurazione", - "remove_registered_extension": "Rimuovi un'estensione registrata per nome", - "choose_strategy_from_available": "Scegli una strategia dalle strategie disponibili", - "list_all_strategies": "Elenca tutte le strategie", - "list_all_vendors": "Elenca tutti i fornitori", - "output_raw_list_shell_completion": "Output lista grezza senza intestazioni/formattazione (per completamento shell)", - "enable_web_search_tool": "Abilita strumento di ricerca web per modelli supportati (Anthropic, OpenAI, Gemini)", - "set_location_web_search": "Imposta posizione per risultati ricerca web (es. 'America/Los_Angeles')", - "save_generated_image_to_file": "Salva immagine generata nel percorso file specificato (es. 'output.png')", - "image_dimensions_help": "Dimensioni immagine: 1024x1024, 1536x1024, 1024x1536, auto (predefinito: auto)", - "image_quality_help": "Qualità immagine: low, medium, high, auto (predefinito: auto)", - "compression_level_jpeg_webp": "Livello di compressione 0-100 per formati JPEG/WebP (predefinito: non impostato)", - "background_type_help": "Tipo di sfondo: opaque, transparent (predefinito: opaque, solo per PNG/WebP)", - "suppress_thinking_tags": "Sopprimi testo racchiuso in tag di pensiero", - "start_tag_thinking_sections": "Tag di inizio per sezioni di pensiero", - "end_tag_thinking_sections": "Tag di fine per sezioni di pensiero", - "disable_openai_responses_api": "Disabilita API OpenAI Responses (predefinito: false)", - "audio_video_file_transcribe": "File audio o video da trascrivere", - "model_for_transcription": "Modello da utilizzare per la trascrizione (separato dal modello di chat)", - "split_media_files_ffmpeg": "Dividi file audio/video più grandi di 25MB usando ffmpeg", - "tts_voice_name": "Nome voce TTS per modelli supportati (es. Kore, Charon, Puck)", - "list_gemini_tts_voices": "Elenca tutte le voci TTS Gemini disponibili", - "list_transcription_models": "Elenca tutti i modelli di trascrizione disponibili", - "send_desktop_notification": "Invia notifica desktop quando il comando è completato", + "could_not_determine_home_dir": "impossibile determinare la directory home dell'utente: %w", + "could_not_stat_env_file": "impossibile verificare il file .env: %w", "custom_notification_command": "Comando personalizzato da eseguire per le notifiche (sovrascrive le notifiche integrate)", - "set_reasoning_thinking_level": "Imposta livello di ragionamento/pensiero (es. off, low, medium, high, o token numerici per Anthropic o Google Gemini)", - "set_debug_level": "Imposta livello di debug (0=spento, 1=base, 2=dettagliato, 3=traccia)", - "usage_header": "Uso:", - "application_options_header": "Opzioni dell'applicazione:", - "help_options_header": "Opzioni di aiuto:", - "help_message": "Mostra questo messaggio di aiuto", - "options_placeholder": "[OPZIONI]", - "available_vendors_header": "Fornitori disponibili:", - "available_models_header": "Modelli disponibili", - "no_items_found": "Nessun %s", - "no_description_available": "Nessuna descrizione disponibile", - "i18n_download_failed": "Fallito il download della traduzione per la lingua '%s': %v", - "i18n_load_failed": "Fallito il caricamento del file di traduzione: %v", - "setup_welcome_header": "🎉 Benvenuto su Fabric! Configuriamo tutto.", - "setup_step_downloading_patterns": "📥 Passo 1: Download dei pattern (richiesti per il funzionamento di Fabric)...", - "setup_step_downloading_strategies": "📥 Passo 2: Download delle strategie (richieste per il funzionamento di Fabric)...", - "setup_step_configure_ai_provider": "🤖 Passo 3: Configura un fornitore di IA", - "setup_ai_provider_required": "Fabric necessita di almeno un fornitore di IA per funzionare.", - "setup_add_more_providers_later": "Potrai aggiungere altri fornitori in seguito con 'fabric --setup'", - "setup_step_setting_defaults": "⚙️ Passo 4: Impostazione del fornitore e del modello predefiniti...", - "setup_complete_header": "✅ Configurazione completata! Ora puoi usare Fabric.", - "setup_next_steps": "Prossimi passi:", - "setup_list_patterns": "• Elenca i pattern disponibili: fabric -l", - "setup_try_pattern": "• Prova un pattern: echo 'il tuo testo' | fabric --pattern summarize", - "setup_configure_more": "• Configura altre impostazioni: fabric --setup", - "setup_failed_download_patterns": "download dei pattern fallito: %w", - "setup_failed_download_strategies": "download delle strategie fallito: %w", - "setup_failed_set_defaults": "impostazione del fornitore e del modello predefiniti fallita: %w", - "setup_no_ai_provider_selected": "nessun fornitore di IA selezionato - almeno uno è richiesto", - "setup_invalid_selection": "selezione non valida: %s", - "setup_available_ai_providers": "Fornitori di IA disponibili:", - "setup_enter_ai_provider_number": "Numero del fornitore di IA", - "setup_available_plugins": "Plugin disponibili:", - "setup_plugin_number": "Numero del plugin", - "setup_plugin_prompt": "Inserisci il numero del plugin da configurare", - "setup_required_configuration_header": "━━━ CONFIGURAZIONE RICHIESTA ━━━\n\nFornitori di IA [almeno uno richiesto]", - "setup_required_tools": "Strumenti richiesti", - "setup_optional_configuration_header": "━━━ CONFIGURAZIONE OPZIONALE ━━━\n\nStrumenti opzionali", - "setup_validation_header": "Stato della configurazione:", - "setup_validation_ai_provider_configured": "✓ Fornitore di IA configurato", - "setup_validation_ai_provider_missing": "✗ Fornitore di IA non configurato - Richiesto per il funzionamento di Fabric", - "setup_validation_defaults_configured": "✓ Fornitore/modello predefinito impostato: %s/%s", - "setup_validation_defaults_missing": "✗ Fornitore/modello predefinito non impostato - Richiesto per il funzionamento di Fabric", - "setup_validation_patterns_configured": "✓ Pattern scaricati", - "setup_validation_patterns_missing": "✗ Pattern non trovati - Richiesti per il funzionamento di Fabric", - "setup_validation_strategies_configured": "✓ Strategie scaricate", - "setup_validation_strategies_missing": "✗ Strategie non trovate - Richieste per il funzionamento di Fabric", - "setup_validation_incomplete_warning": "⚠️ Configurazione incompleta! Componenti richiesti mancanti.", - "setup_validation_incomplete_help": "Esegui di nuovo 'fabric --setup' per configurare gli elementi mancanti,\noppure esegui 'fabric -U' per scaricare pattern e strategie.", - "setup_validation_complete": "✓ Tutti i componenti richiesti sono configurati!", - "patterns_not_found_header": "⚠️ Nessun pattern trovato!", - "patterns_required_to_work": "I pattern sono richiesti per il funzionamento di Fabric. Per risolvere:", - "patterns_option_run_setup": "Opzione 1 (Consigliata): Esegui la configurazione per scaricare i pattern", - "patterns_option_run_setup_command": "fabric --setup", - "patterns_option_run_update": "Opzione 2: Scarica/aggiorna i pattern direttamente", - "patterns_option_run_update_command": "fabric -U", - "pattern_not_found_no_patterns": "pattern '%s' non trovato.\n\nNessun pattern installato! Per risolvere:\n • Esegui 'fabric --setup' per configurare e scaricare i pattern\n • Oppure esegui 'fabric -U' per scaricare/aggiornare i pattern direttamente", - "pattern_not_found_list_available": "pattern '%s' non trovato. Esegui 'fabric -l' per vedere i pattern disponibili", - "plugin_configured": " ✓", - "plugin_not_configured": " ⚠️ NON CONFIGURATO", - "defaults_setup_description": "Fornitore e modello AI predefiniti", - "defaults_model_question": "Inserisci l'indice o il nome del tuo modello predefinito", - "defaults_model_context_length_question": "Inserisci la lunghezza del contesto del modello", + "custom_patterns_directory_question": "Inserisci il percorso della directory dei tuoi pattern personalizzati", "custom_patterns_label": "Pattern personalizzati", "custom_patterns_setup_description": "Pattern personalizzati - Imposta la directory per i tuoi pattern personalizzati", - "custom_patterns_directory_question": "Inserisci il percorso della directory dei tuoi pattern personalizzati", + "defaults_model_context_length_question": "Inserisci la lunghezza del contesto del modello", + "defaults_model_question": "Inserisci l'indice o il nome del tuo modello predefinito", + "defaults_setup_description": "Fornitore e modello AI predefiniti", + "disable_openai_responses_api": "Disabilita API OpenAI Responses (predefinito: false)", + "disable_pattern_variable_replacement": "Disabilita sostituzione variabili pattern", + "enable_web_search_tool": "Abilita strumento di ricerca web per modelli supportati (Anthropic, OpenAI, Gemini)", + "end_tag_thinking_sections": "Tag di fine per sezioni di pensiero", + "error_creating_audio_file": "errore nella creazione del file audio: %v", + "error_creating_file": "errore nella creazione del file: %v", + "error_fetching_playlist_videos": "errore nel recupero dei video della playlist: %w", + "error_parsing_config_file": "errore nell'analisi del file di configurazione: %w", + "error_reading_config_file": "errore nella lettura del file di configurazione: %w", + "error_reading_piped_message": "errore nella lettura del messaggio reindirizzato da stdin: %w", + "error_writing_audio_data": "errore nella scrittura dei dati audio nel file: %v", + "error_writing_to_file": "errore nella scrittura del file: %v", + "extension_cmd_template_required": "il modello di comando è obbligatorio per l'operazione %s", + "extension_command_template_label": " Modello di comando: %s\n", + "extension_config_hash_mismatch": "discrepanza hash del file di configurazione per %s", + "extension_config_path_label": " Percorso configurazione: %s\n\n", + "extension_description_label": " Descrizione: %s\n", + "extension_empty_command": "comando vuoto dopo la formattazione", + "extension_executable_hash_mismatch": "discrepanza hash dell'eseguibile per %s", + "extension_executable_label": " Eseguibile: %s\n", + "extension_executable_not_found": "eseguibile non trovato: %w", + "extension_executable_required": "il percorso dell'eseguibile è obbligatorio", + "extension_executing_command": "Esecuzione comando: %s\n", + "extension_execution_failed_err": "esecuzione fallita: %w\nerr: %s", + "extension_execution_failed_stderr": "esecuzione fallita: %w\nstderr: %s", + "extension_execution_timed_out": "esecuzione scaduta dopo %v", + "extension_failed_format_command": "impossibile formattare il comando: %w", + "extension_failed_get_absolute_path": "impossibile ottenere il percorso assoluto: %w", + "extension_failed_get_extension": "impossibile ottenere l'estensione: %w", + "extension_failed_get_output_path": "impossibile ottenere il percorso di output: %w\nerr: %s", + "extension_failed_hash_executable": "impossibile calcolare l'hash dell'eseguibile: %w", + "extension_failed_marshal_registry": "impossibile serializzare il registro estensioni: %w", + "extension_failed_parse_config": "impossibile analizzare il file di configurazione: %w", + "extension_failed_parse_registry": "impossibile analizzare il registro estensioni: %w", + "extension_failed_read_config": "impossibile leggere il file di configurazione: %w", + "extension_failed_read_output_file": "impossibile leggere il file di output: %w", + "extension_failed_read_registry": "impossibile leggere il registro estensioni: %w", + "extension_failed_register": "impossibile registrare l'estensione: %w", + "extension_failed_remove": "impossibile rimuovere l'estensione: %w", + "extension_failed_verify_executable": "impossibile verificare l'eseguibile: %w", + "extension_file_config_label": " Configurazione file:\n", + "extension_invalid_config_path": "percorso di configurazione non valido: %w", + "extension_invalid_definition": "definizione estensione non valida: %w", + "extension_invalid_timeout": "valore di timeout non valido '%s': deve essere una durata come '30s' o '1m': %w", + "extension_invalid_timeout_format": "formato timeout non valido: %w", + "extension_name_contains_spaces": "il nome dell'estensione '%s' contiene spazi - i nomi non devono contenere spazi", + "extension_name_detail_label": "Nome: %s\n", + "extension_name_empty": "il nome dell'estensione non può essere vuoto", + "extension_name_label": "Estensione: %s\n", + "extension_name_required": "il nome dell'estensione è obbligatorio", + "extension_no_file_config": "nessuna configurazione file trovata", + "extension_no_output_file": "nessun file di output specificato nella configurazione", + "extension_not_found": "estensione %s non trovata", + "extension_operation_not_found": "operazione %s non trovata per l'estensione %s", + "extension_operation_required": "deve essere definita almeno un'operazione", + "extension_operations_label": " Operazioni:\n", + "extension_registered_success": "Estensione registrata con successo:\n", + "extension_registry_not_initialized": "registro estensioni non inizializzato", + "extension_status_disabled": " Stato: DISABILITATA - Verifica hash fallita: %v\n", + "extension_status_enabled": " Stato: ABILITATA\n", + "extension_timeout_label": " Timeout: %s\n", + "extension_type_label": " Tipo: %s\n", + "extension_type_required": "il tipo di estensione è obbligatorio", + "extension_version_label": " Versione: %s\n", + "extension_warning_load_registry": "Attenzione: impossibile caricare il registro estensioni: %v\n", + "fabric_command_complete": "Comando Fabric completato", + "fabric_command_complete_with_pattern": "Fabric: %s completato", + "fetch_content_exceeds_limit": "fetch: contenuto troppo grande: supera %d byte", + "fetch_content_not_utf8": "fetch: il contenuto non è testo UTF-8 valido", + "fetch_content_null_bytes": "fetch: il contenuto contiene byte null", + "fetch_content_too_large": "fetch: contenuto troppo grande: %d byte (max %d byte)", + "fetch_error_create_request": "fetch: errore durante la creazione della richiesta: %v", + "fetch_error_fetching_url": "fetch: errore durante il recupero dell'URL: %v", + "fetch_error_reading_response": "fetch: errore durante la lettura della risposta: %v", + "fetch_http_error": "fetch: errore HTTP: %d - %s", + "fetch_unknown_operation": "fetch: operazione sconosciuta %q (supportata: get)", + "fetch_unsupported_content_type": "fetch: tipo di contenuto non supportato %q - solo contenuto testuale consentito", + "file_already_exists_choose_different": "il file %s esiste già. Per favore scegli un nome file diverso o rimuovi il file esistente", + "file_already_exists_not_overwriting": "il file %s esiste già, non verrà sovrascritto. Rinomina il file esistente o scegli un nome diverso", + "file_manager_applied_operation": "Operazione %s applicata a %s", + "file_manager_empty_path": "percorso vuoto per la modifica del file %d", + "file_manager_failed_create_directory": "creazione della directory %s non riuscita per la modifica del file %d: %w", + "file_manager_failed_parse_json": "analisi %s JSON non riuscita: %w", + "file_manager_failed_write_file": "scrittura del file %s non riuscita per la modifica del file %d: %w", + "file_manager_file_content_too_large": "contenuto del file troppo grande per la modifica del file %d: %d byte", + "file_manager_invalid_format_no_json_array": "formato %s non valido: nessun array JSON trovato", + "file_manager_invalid_format_unbalanced_brackets": "formato %s non valido: parentesi non bilanciate", + "file_manager_invalid_operation": "operazione non valida per la modifica del file %d: %s", + "file_manager_suspicious_path": "percorso sospetto per la modifica del file %d: %s", + "gemini_audio_data_too_small": "dati audio troppo piccoli: %d byte, minimo richiesto: %d", + "gemini_empty_pcm_data": "dati PCM vuoti forniti", + "gemini_invalid_location_format": "formato posizione di ricerca non valido %q: deve essere un fuso orario (es. 'America/Los_Angeles') o un codice lingua (es. 'en-US')", + "gemini_invalid_voice": "voce non valida '%s'. Le voci valide sono: %v", + "gemini_no_audio_data": "nessun dato audio ricevuto dal modello TTS", + "gemini_no_text_for_tts": "nessun contenuto testuale trovato per la generazione TTS", + "gemini_pcm_data_too_large": "dati PCM troppo grandi: %d byte, massimo consentito: %d", + "gemini_stream_error": "Errore: %v", + "gemini_tts_failed": "generazione TTS fallita: %w", + "gemini_unexpected_data_type": "tipo di dato inaspettato: %s, attesi dati audio", + "gemini_wav_data_invalid": "dati WAV generati non validi: %d byte, minimo richiesto: %d", + "gemini_wav_generation_failed": "generazione file WAV fallita: %w", + "grab_comments_from_youtube": "Ottieni commenti dal video YouTube e invia alla chat", + "grab_transcript_from_youtube": "Ottieni trascrizione dal video YouTube e invia alla chat (usato per impostazione predefinita).", + "grab_transcript_with_timestamps": "Ottieni trascrizione dal video YouTube con timestamp e invia alla chat", + "groups_items_number_out_of_range": "il numero %d è fuori intervallo", + "help_message": "Mostra questo messaggio di aiuto", + "help_options_header": "Opzioni di aiuto:", + "html_readability_error": "usa l'input originale, perché non è possibile applicare la leggibilità HTML", + "i18n_download_failed": "Fallito il download della traduzione per la lingua '%s': %v", + "i18n_load_failed": "Fallito il caricamento del file di traduzione: %v", + "image_compression_jpeg_webp_only": "la compressione immagine può essere utilizzata solo con formati JPEG e WebP, non %s", + "image_compression_range_error": "la compressione immagine deve essere tra 0 e 100, ricevuto %d", + "image_dimensions_help": "Dimensioni immagine: 1024x1024, 1536x1024, 1024x1536, auto (predefinito: auto)", + "image_file_already_exists": "il file immagine esiste già: %s", + "image_parameters_require_image_file": "i parametri immagine (--image-size, --image-quality, --image-background, --image-compression) possono essere utilizzati solo con --image-file", + "image_quality_help": "Qualità immagine: low, medium, high, auto (predefinito: auto)", + "invalid_config_path": "percorso di configurazione non valido: %w", + "invalid_image_background": "sfondo immagine non valido '%s'. Sfondi supportati: opaque, transparent", + "invalid_image_file_extension": "estensione file immagine non valida '%s'. Formati supportati: .png, .jpeg, .jpg, .webp", + "invalid_image_quality": "qualità immagine non valida '%s'. Qualità supportate: low, medium, high, auto", + "invalid_image_size": "dimensione immagine non valida '%s'. Dimensioni supportate: 1024x1024, 1536x1024, 1024x1536, auto", + "jina_error_creating_request": "errore nella creazione della richiesta: %v", + "jina_error_reading_response_body": "errore nella lettura del corpo della risposta: %v", + "jina_error_sending_request": "errore nell'invio della richiesta: %v", "jina_label": "Jina AI", "jina_setup_description": "Servizio Jina AI - per ottenere una pagina web come testo pulito e compatibile con LLM", - "youtube_label": "YouTube", - "youtube_setup_description": "YouTube - per ottenere trascrizioni video (tramite yt-dlp) e commenti/metadati (tramite API YouTube)", "language_label": "Lingua", - "language_setup_description": "Lingua - Lingua di output predefinita del fornitore di IA", "language_output_question": "Inserisci la tua lingua di output predefinita (ad esempio: zh_CN)", - "optional_marker": "(opzionale)", - "required_marker": "[obbligatorio]", - "patterns_loader_label": "Caricatore pattern", - "patterns_setup_description": "Pattern - Scarica i pattern", - "patterns_git_repo_url_label": "URL repository Git", - "patterns_git_repo_url_question": "Inserisci l'URL del repository Git predefinito per i pattern", - "patterns_git_repo_folder_label": "Cartella dei pattern nel repository Git", - "patterns_git_repo_folder_question": "Inserisci la cartella predefinita nel repository Git dove sono memorizzati i pattern", - "patterns_failed_create_temp_folder": "impossibile creare la cartella temporanea dei pattern: %w", - "patterns_downloading": "Download dei pattern e popolamento di %s...\\n", - "patterns_failed_download_from_git": "impossibile scaricare i pattern dal repository Git: %w", - "patterns_saving_updated_configuration": "💾 Salvataggio configurazione aggiornata (percorso cambiato da '%s' a '%s')...\\n", - "patterns_failed_move_patterns": "impossibile spostare i pattern nella directory di configurazione: %w", - "patterns_download_success": "✅ Pattern scaricati e installati correttamente in %s\\n", - "patterns_failed_unique_file": "impossibile creare il file dei pattern univoci: %w", - "patterns_failed_access_directory": "impossibile accedere alla directory dei pattern '%s': %w", - "patterns_preserve_warning": "Avviso: impossibile conservare il pattern personalizzato '%s': %v\\n", - "patterns_preserved_custom_pattern": "Pattern personalizzato conservato: %s\\n", - "patterns_failed_create_temp_dir": "impossibile creare la directory temporanea: %w", - "patterns_cloning_repository": "Clonazione del repository %s (percorso: %s)...\\n", - "patterns_failed_download_from_repo": "impossibile scaricare i pattern da %s: %w", - "patterns_failed_read_temp_directory": "impossibile leggere la directory temporanea dei pattern: %w", - "patterns_no_patterns_migration_failed": "nessun pattern trovato nel repository al percorso %s e migrazione non riuscita: %w", - "patterns_downloaded_temp": "%d pattern scaricati nella directory temporanea\\n", - "patterns_detected_old_path": "🔄 Rilevato vecchio percorso 'patterns', tentativo di migrazione a 'data/patterns'...", - "patterns_warning_remove_test_folder": "Avviso: impossibile rimuovere la cartella temporanea di test '%s': %v\\n", - "patterns_found_new_path": "✅ Trovati %d pattern nel nuovo percorso '%s', aggiornamento configurazione...\\n", - "patterns_failed_move_test_patterns": "impossibile spostare i pattern di test nella cartella temporanea: %w", - "patterns_unable_to_find_or_migrate": "impossibile trovare pattern nel percorso attuale '%s' o migrare alla nuova struttura", - "patterns_failed_read_directory": "impossibile leggere la directory dei pattern: %w", - "patterns_debug_included_custom_directory": "📂 Inclusi anche i pattern dalla directory personalizzata: %s\\n", - "patterns_warning_custom_directory": "Avviso: impossibile leggere la directory dei pattern personalizzata %s: %v\\n", - "patterns_no_patterns_found_in_directories": "nessun pattern trovato nelle directory %s e %s", - "patterns_no_patterns_found_in_directory": "nessun pattern trovato nella directory %s", - "patterns_failed_write_unique_file": "impossibile scrivere il file dei pattern univoci: %w", - "patterns_unique_file_created": "📝 File dei pattern univoci creato con %d pattern\\n", - "patterns_no_patterns_copied": "nessun pattern copiato correttamente in %s", - "patterns_failed_loaded_marker": "impossibile creare il file di marker '%s': %w", - "strategies_label": "Strategie di prompt", - "strategies_setup_description": "Strategie - Scarica strategie di prompting (come chain of thought)", - "strategies_git_repo_url_label": "URL repository Git", - "strategies_git_repo_url_question": "Inserisci l'URL del repository Git predefinito per le strategie", - "strategies_git_repo_folder_label": "Cartella delle strategie nel repository Git", - "strategies_git_repo_folder_question": "Inserisci la cartella predefinita nel repository Git dove sono memorizzate le strategie", - "strategies_downloading": "Download delle strategie e popolamento di %s...\\n", - "strategies_download_success": "✅ Strategie scaricate e installate correttamente in %s\\n", - "strategies_home_dir_error": "impossibile ottenere la home directory: %v", - "strategies_failed_create_directory": "impossibile creare la directory delle strategie: %w", - "strategies_cloning_repository": "Clonazione del repository %s (percorso: %s)...\\n", - "strategies_failed_download": "impossibile scaricare le strategie: %w", - "strategies_downloaded_count": "%d strategie scaricate\\n", - "strategies_home_dir_fallback": "impossibile ottenere la home directory: %v, uso la directory corrente", - "strategy_not_found": "strategia %s non trovata. Esegui 'fabric --liststrategies' per l'elenco", - "strategies_none_found": "nessuna strategia trovata. Esegui 'fabric --setup' per scaricare le strategie", - "strategies_available_header": "Strategie disponibili:", - "plugin_enter_value": "Inserisci il tuo %v %v", - "plugin_enable_bool_question": "Abilita %v %v (true/false)", - "plugin_setup_skipped": "[%v] saltato\\n", - "plugin_question_bool": "%v%v (true/false, lascia vuoto per '%s' o digita '%v' per rimuovere il valore):", - "plugin_question_with_default": "%v%v (lascia vuoto per '%s' o digita '%v' per rimuovere il valore):", - "plugin_question_optional": "%v%v (lascia vuoto per saltare):", - "plugin_invalid_boolean_value": "valore booleano non valido: %v", - "plugin_setting_not_valid": "%v=%v non è valido", - "plugin_invalid_bool": "bool non valido: %q", - "ollama_num_ctx_must_be_finite": "num_ctx deve essere un numero finito", - "ollama_num_ctx_must_be_integer": "num_ctx deve essere un intero, ricevuto float con parte frazionaria", - "ollama_num_ctx_value_out_of_range": "valore num_ctx fuori intervallo", - "ollama_num_ctx_must_be_positive": "num_ctx deve essere positivo, ricevuto: %d", - "ollama_num_ctx_value_too_large": "valore num_ctx troppo grande: %d", - "ollama_num_ctx_must_be_valid_number": "num_ctx deve essere un numero valido", - "ollama_num_ctx_must_be_valid_number_got": "num_ctx deve essere un numero valido, ricevuto: %s", - "ollama_num_ctx_invalid_type": "num_ctx deve essere un numero, ricevuto tipo non valido", - "ollama_num_ctx_exceeds_maximum": "num_ctx supera il valore massimo consentito di %d", - "ollama_error_reading_body": "Errore nella lettura del corpo: %v", - "ollama_error_endpoint": "test dell'endpoint", - "ollama_error_unmarshalling_body": "Errore nella deserializzazione del corpo: %v", - "ollama_invalid_num_ctx_in_request": "num_ctx non valido nella richiesta: %v", - "ollama_warning_parse_variables": "Avviso: impossibile analizzare options.variables come JSON: %v", - "ollama_error_marshalling_body": "Errore nella serializzazione del corpo: %v", + "language_setup_description": "Lingua - Lingua di output predefinita del fornitore di IA", + "list_all_available_models": "Elenca tutti i modelli disponibili", + "list_all_contexts": "Elenca tutti i contesti", + "list_all_patterns": "Elenca tutti i pattern", + "list_all_registered_extensions": "Elenca tutte le estensioni registrate", + "list_all_sessions": "Elenca tutte le sessioni", + "list_all_strategies": "Elenca tutte le strategie", + "list_all_vendors": "Elenca tutti i fornitori", + "list_gemini_tts_voices": "Elenca tutte le voci TTS Gemini disponibili", + "list_transcription_models": "Elenca tutti i modelli di trascrizione disponibili", + "lmstudio_api_url_question": "Inserisci il tuo URL %v (come promemoria, di solito è %v)", + "lmstudio_error_reading_response": "errore durante la lettura della risposta: %w", + "lmstudio_failed_create_request": "impossibile creare la richiesta: %w", + "lmstudio_failed_decode_response": "impossibile decodificare la risposta: %w", + "lmstudio_failed_marshal_payload": "impossibile serializzare il payload: %w", + "lmstudio_failed_send_request": "impossibile inviare la richiesta: %w", + "lmstudio_invalid_response_missing_choices": "formato di risposta non valido: scelte mancanti o vuote", + "lmstudio_invalid_response_missing_content": "formato di risposta non valido: contenuto mancante o non stringa nel messaggio", + "lmstudio_invalid_response_missing_message": "formato di risposta non valido: messaggio mancante nella prima scelta", + "lmstudio_invalid_response_missing_text": "formato di risposta non valido: testo mancante o non stringa nella prima scelta", + "lmstudio_no_embeddings_returned": "nessun embedding restituito", + "lmstudio_unexpected_status_code": "codice di stato imprevisto: %d", + "model_context_length_ollama": "Lunghezza del contesto del modello (influisce solo su ollama)", + "model_for_transcription": "Modello da utilizzare per la trascrizione (separato dal modello di chat)", + "no_description_available": "Nessuna descrizione disponibile", + "no_items_found": "Nessun %s", + "no_notification_system_available": "nessun sistema di notifica disponibile", + "number_of_latest_patterns": "Numero dei pattern più recenti da elencare", + "ollama_cannot_parse_url": "Impossibile analizzare l'URL '%s': %v", + "ollama_chat_request_failed": "Richiesta di chat fallita: %v", + "ollama_empty_address": "indirizzo vuoto", "ollama_error_building_chat_url": "Errore nella costruzione dell'URL /chat: %v", "ollama_error_creating_chat_request": "Errore nella creazione della richiesta /chat: %v", - "ollama_failed_create_request": "impossibile creare la richiesta", + "ollama_error_endpoint": "test dell'endpoint", "ollama_error_getting_chat_body": "Errore nell'ottenere il corpo /chat: %v", - "ollama_upstream_non_2xx_body_unreadable": "Il server Fabric upstream ha restituito stato non-2xx %d e il corpo non è stato leggibile: %v", - "ollama_upstream_non_2xx": "Il server Fabric upstream ha restituito stato non-2xx %d: %s", - "ollama_upstream_returned_status": "il server Fabric upstream ha restituito stato %d", - "ollama_error_prefix": "Errore: %s", + "ollama_error_marshalling_body": "Errore nella serializzazione del corpo: %v", "ollama_error_parse_upstream_response": "Errore: impossibile analizzare la risposta upstream", - "ollama_failed_unmarshal_fabric_response": "impossibile deserializzare la risposta Fabric", - "ollama_error_writing_response": "Errore nella scrittura della risposta: %v", + "ollama_error_prefix": "Errore: %s", + "ollama_error_reading_body": "Errore nella lettura del corpo: %v", "ollama_error_scanning_body": "Errore nella scansione del corpo: %v", + "ollama_error_unmarshalling_body": "Errore nella deserializzazione del corpo: %v", + "ollama_error_writing_response": "Errore nella scrittura della risposta: %v", + "ollama_failed_create_request": "impossibile creare la richiesta", + "ollama_failed_decode_data_url": "decodifica dell'URL dati fallita: %v", + "ollama_failed_fetch_image": "recupero dell'immagine da %s fallito: %s", "ollama_failed_scan_sse_stream": "impossibile scansionare il flusso di risposta SSE: %v", - "ollama_sse_buffer_limit": "La riga SSE supera il limite del buffer di 1MB - riga di dati troppo grande", - "ollama_warning_no_content": "Avviso: nessun contenuto ricevuto dal server Fabric upstream", - "ollama_no_content_from_upstream": "nessun contenuto ricevuto dal server Fabric upstream", - "ollama_empty_address": "indirizzo vuoto", + "ollama_failed_unmarshal_fabric_response": "impossibile deserializzare la risposta Fabric", + "ollama_http_timeout_question": "Inserire il timeout HTTP (ad es. 20m, 60s)", "ollama_invalid_address": "indirizzo non valido: %w", "ollama_invalid_address_missing_host": "indirizzo non valido: host mancante", "ollama_invalid_address_missing_hostname": "indirizzo non valido: nome host mancante", "ollama_invalid_address_path_not_allowed": "indirizzo non valido: componente percorso non consentito nell'indirizzo semplice", - "extension_registry_not_initialized": "registro estensioni non inizializzato", - "extension_name_label": "Estensione: %s\n", - "extension_status_disabled": " Stato: DISABILITATA - Verifica hash fallita: %v\n", - "extension_config_path_label": " Percorso configurazione: %s\n\n", - "extension_status_enabled": " Stato: ABILITATA\n", - "extension_executable_label": " Eseguibile: %s\n", - "extension_type_label": " Tipo: %s\n", - "extension_timeout_label": " Timeout: %s\n", - "extension_description_label": " Descrizione: %s\n", - "extension_version_label": " Versione: %s\n", - "extension_operations_label": " Operazioni:\n", - "extension_command_template_label": " Modello di comando: %s\n", - "extension_file_config_label": " Configurazione file:\n", - "extension_invalid_config_path": "percorso di configurazione non valido: %w", - "extension_failed_read_config": "impossibile leggere il file di configurazione: %w", - "extension_failed_parse_config": "impossibile analizzare il file di configurazione: %w", - "extension_failed_register": "impossibile registrare l'estensione: %w", - "extension_invalid_timeout": "valore di timeout non valido '%s': deve essere una durata come '30s' o '1m': %w", - "extension_registered_success": "Estensione registrata con successo:\n", - "extension_name_detail_label": "Nome: %s\n", - "extension_failed_remove": "impossibile rimuovere l'estensione: %w", - "lmstudio_api_url_question": "Inserisci il tuo URL %v (come promemoria, di solito è %v)", - "lmstudio_failed_create_request": "impossibile creare la richiesta: %w", - "lmstudio_failed_send_request": "impossibile inviare la richiesta: %w", - "lmstudio_unexpected_status_code": "codice di stato imprevisto: %d", - "lmstudio_failed_decode_response": "impossibile decodificare la risposta: %w", - "lmstudio_failed_marshal_payload": "impossibile serializzare il payload: %w", - "lmstudio_error_reading_response": "errore durante la lettura della risposta: %w", - "lmstudio_invalid_response_missing_choices": "formato di risposta non valido: scelte mancanti o vuote", - "lmstudio_invalid_response_missing_message": "formato di risposta non valido: messaggio mancante nella prima scelta", - "lmstudio_invalid_response_missing_content": "formato di risposta non valido: contenuto mancante o non stringa nel messaggio", - "lmstudio_invalid_response_missing_text": "formato di risposta non valido: testo mancante o non stringa nella prima scelta", - "lmstudio_no_embeddings_returned": "nessun embedding restituito", - "extension_warning_load_registry": "Attenzione: impossibile caricare il registro estensioni: %v\n", - "extension_name_empty": "il nome dell'estensione non può essere vuoto", - "extension_name_contains_spaces": "il nome dell'estensione '%s' contiene spazi - i nomi non devono contenere spazi", - "extension_executable_not_found": "eseguibile non trovato: %w", - "extension_failed_get_absolute_path": "impossibile ottenere il percorso assoluto: %w", - "extension_failed_hash_executable": "impossibile calcolare l'hash dell'eseguibile: %w", - "extension_invalid_definition": "definizione estensione non valida: %w", - "extension_name_required": "il nome dell'estensione è obbligatorio", - "extension_executable_required": "il percorso dell'eseguibile è obbligatorio", - "extension_type_required": "il tipo di estensione è obbligatorio", - "extension_invalid_timeout_format": "formato timeout non valido: %w", - "extension_operation_required": "deve essere definita almeno un'operazione", - "extension_cmd_template_required": "il modello di comando è obbligatorio per l'operazione %s", - "extension_not_found": "estensione %s non trovata", - "extension_config_hash_mismatch": "discrepanza hash del file di configurazione per %s", - "extension_failed_verify_executable": "impossibile verificare l'eseguibile: %w", - "extension_executable_hash_mismatch": "discrepanza hash dell'eseguibile per %s", - "extension_failed_marshal_registry": "impossibile serializzare il registro estensioni: %w", - "extension_failed_read_registry": "impossibile leggere il registro estensioni: %w", - "extension_failed_parse_registry": "impossibile analizzare il registro estensioni: %w", - "extension_failed_get_extension": "impossibile ottenere l'estensione: %w", - "extension_failed_format_command": "impossibile formattare il comando: %w", - "extension_empty_command": "comando vuoto dopo la formattazione", - "extension_operation_not_found": "operazione %s non trovata per l'estensione %s", - "extension_executing_command": "Esecuzione comando: %s\n", - "extension_execution_failed_stderr": "esecuzione fallita: %w\nstderr: %s", - "extension_no_file_config": "nessuna configurazione file trovata", - "extension_no_output_file": "nessun file di output specificato nella configurazione", - "extension_execution_timed_out": "esecuzione scaduta dopo %v", - "extension_execution_failed_err": "esecuzione fallita: %w\nerr: %s", - "extension_failed_read_output_file": "impossibile leggere il file di output: %w", - "extension_failed_get_output_path": "impossibile ottenere il percorso di output: %w\nerr: %s", - "spotify_failed_create_token_request": "impossibile creare la richiesta del token: %w", - "spotify_failed_request_access_token": "impossibile richiedere il token di accesso: %w", - "spotify_failed_get_access_token": "impossibile ottenere il token di accesso: stato %d, risposta: %s", - "spotify_failed_decode_token_response": "impossibile decodificare la risposta del token: %w", - "spotify_failed_create_request": "impossibile creare la richiesta: %w", - "spotify_failed_execute_request": "impossibile eseguire la richiesta: %w", - "spotify_failed_read_response_body": "impossibile leggere il corpo della risposta: %w", + "ollama_invalid_data_url_format": "formato URL dati non valido", + "ollama_invalid_http_timeout_using_default": "Timeout HTTP non valido '%s': %v, utilizzo del valore predefinito", + "ollama_invalid_num_ctx_in_request": "num_ctx non valido nella richiesta: %v", + "ollama_no_content_from_upstream": "nessun contenuto ricevuto dal server Fabric upstream", + "ollama_num_ctx_exceeds_maximum": "num_ctx supera il valore massimo consentito di %d", + "ollama_num_ctx_invalid_type": "num_ctx deve essere un numero, ricevuto tipo non valido", + "ollama_num_ctx_must_be_finite": "num_ctx deve essere un numero finito", + "ollama_num_ctx_must_be_integer": "num_ctx deve essere un intero, ricevuto float con parte frazionaria", + "ollama_num_ctx_must_be_positive": "num_ctx deve essere positivo, ricevuto: %d", + "ollama_num_ctx_must_be_valid_number": "num_ctx deve essere un numero valido", + "ollama_num_ctx_must_be_valid_number_got": "num_ctx deve essere un numero valido, ricevuto: %s", + "ollama_num_ctx_value_out_of_range": "valore num_ctx fuori intervallo", + "ollama_num_ctx_value_too_large": "valore num_ctx troppo grande: %d", + "ollama_sse_buffer_limit": "La riga SSE supera il limite del buffer di 1MB - riga di dati troppo grande", + "ollama_upstream_non_2xx": "Il server Fabric upstream ha restituito stato non-2xx %d: %s", + "ollama_upstream_non_2xx_body_unreadable": "Il server Fabric upstream ha restituito stato non-2xx %d e il corpo non è stato leggibile: %v", + "ollama_upstream_returned_status": "il server Fabric upstream ha restituito stato %d", + "ollama_warning_no_content": "Avviso: nessun contenuto ricevuto dal server Fabric upstream", + "ollama_warning_parse_variables": "Avviso: impossibile analizzare options.variables come JSON: %v", + "openai_api_base_url_not_configured": "URL base API non configurato per il provider %s", + "openai_audio_ffmpeg_failed": "ffmpeg fallito: %v: %s", + "openai_audio_ffmpeg_not_found_install": "ffmpeg non trovato: si prega di installarlo", + "openai_audio_file_exceeds_limit_enable_split": "Il file %s supera il limite di 25MB; usa --split-media-file per abilitare la suddivisione automatica", + "openai_audio_file_exceeds_limit_splitting": "Il file %s è più grande del limite... suddivisione in parti...", + "openai_audio_model_not_supported_for_transcription": "il modello '%s' non è supportato per la trascrizione", + "openai_audio_running_ffmpeg_split_chunks": "Esecuzione di ffmpeg per dividere l'audio in parti di %d secondi...", + "openai_audio_unable_to_split_acceptable_size_chunks": "impossibile dividere il file in parti di dimensioni accettabili", + "openai_audio_unsupported_audio_format": "formato audio non supportato '%s'", + "openai_audio_using_model_to_transcribe_part": "Utilizzo del modello %s per trascrivere la parte %d (nome file: %s)...", + "openai_failed_to_create_models_url": "impossibile creare URL modelli: %w", + "openai_image_failed_to_create_directory": "creazione della directory %s fallita: %w", + "openai_image_failed_to_decode_image_data": "decodifica dei dati dell'immagine fallita: %w", + "openai_image_failed_to_save_image": "salvataggio dell'immagine in %s fallito: %w", + "openai_image_saved_to": "Immagine salvata in: %s", + "openai_model_no_image_generation": "il modello '%s' non supporta la generazione di immagini. Modelli supportati: %s", + "openai_models_response_too_large": "risposta dei modelli troppo grande dal provider %s (>%d byte)", + "openai_unable_to_parse_models_response": "impossibile analizzare risposta modelli; risposta grezza: %s", + "openai_unexpected_status_code_read_error": "codice di stato imprevisto: %d dal provider %s (errore lettura corpo risposta: %v)", + "openai_unexpected_status_code_with_body": "codice di stato imprevisto: %d dal provider %s, corpo risposta: %s", + "openai_warning_model_no_image_generation": "Avviso: Il modello '%s' non supporta la generazione di immagini. Modelli supportati: %s. Considera di usare -m gpt-5.2 per la generazione di immagini.\n", + "optional_marker": "(opzionale)", + "options_placeholder": "[OPZIONI]", + "output_entire_session": "Output dell'intera sessione (anche temporanea) nel file di output", + "output_full": "Output: %s", + "output_raw_list_shell_completion": "Output lista grezza senza intestazioni/formattazione (per completamento shell)", + "output_to_file": "Output su file", + "output_truncated": "Output: %s...", + "output_video_metadata": "Output metadati video", + "path_to_yaml_config": "Percorso del file di configurazione YAML", + "pattern_not_found_list_available": "pattern '%s' non trovato. Esegui 'fabric -l' per vedere i pattern disponibili", + "pattern_not_found_no_patterns": "pattern '%s' non trovato.\n\nNessun pattern installato! Per risolvere:\n • Esegui 'fabric --setup' per configurare e scaricare i pattern\n • Oppure esegui 'fabric -U' per scaricare/aggiornare i pattern direttamente", + "pattern_variables_help": "Valori per le variabili pattern, es. -v=#role:expert -v=#points:30", + "patterns_cloning_repository": "Clonazione del repository %s (percorso: %s)...\\n", + "patterns_debug_included_custom_directory": "📂 Inclusi anche i pattern dalla directory personalizzata: %s\\n", + "patterns_detected_old_path": "🔄 Rilevato vecchio percorso 'patterns', tentativo di migrazione a 'data/patterns'...", + "patterns_download_success": "✅ Pattern scaricati e installati correttamente in %s\\n", + "patterns_downloaded_temp": "%d pattern scaricati nella directory temporanea\\n", + "patterns_downloading": "Download dei pattern e popolamento di %s...\\n", + "patterns_failed_access_directory": "impossibile accedere alla directory dei pattern '%s': %w", + "patterns_failed_create_temp_dir": "impossibile creare la directory temporanea: %w", + "patterns_failed_create_temp_folder": "impossibile creare la cartella temporanea dei pattern: %w", + "patterns_failed_download_from_git": "impossibile scaricare i pattern dal repository Git: %w", + "patterns_failed_download_from_repo": "impossibile scaricare i pattern da %s: %w", + "patterns_failed_loaded_marker": "impossibile creare il file di marker '%s': %w", + "patterns_failed_move_patterns": "impossibile spostare i pattern nella directory di configurazione: %w", + "patterns_failed_move_test_patterns": "impossibile spostare i pattern di test nella cartella temporanea: %w", + "patterns_failed_read_directory": "impossibile leggere la directory dei pattern: %w", + "patterns_failed_read_temp_directory": "impossibile leggere la directory temporanea dei pattern: %w", + "patterns_failed_unique_file": "impossibile creare il file dei pattern univoci: %w", + "patterns_failed_write_unique_file": "impossibile scrivere il file dei pattern univoci: %w", + "patterns_found_new_path": "✅ Trovati %d pattern nel nuovo percorso '%s', aggiornamento configurazione...\\n", + "patterns_git_repo_folder_question": "Inserisci la cartella predefinita nel repository Git dove sono memorizzati i pattern", + "patterns_git_repo_url_question": "Inserisci l'URL del repository Git predefinito per i pattern", + "patterns_loader_label": "Caricatore pattern", + "patterns_no_patterns_copied": "nessun pattern copiato correttamente in %s", + "patterns_no_patterns_found_in_directories": "nessun pattern trovato nelle directory %s e %s", + "patterns_no_patterns_found_in_directory": "nessun pattern trovato nella directory %s", + "patterns_no_patterns_migration_failed": "nessun pattern trovato nel repository al percorso %s e migrazione non riuscita: %w", + "patterns_not_found_header": "⚠️ Nessun pattern trovato!", + "patterns_option_run_setup": "Opzione 1 (Consigliata): Esegui la configurazione per scaricare i pattern", + "patterns_option_run_setup_command": "fabric --setup", + "patterns_option_run_update": "Opzione 2: Scarica/aggiorna i pattern direttamente", + "patterns_option_run_update_command": "fabric -U", + "patterns_preserve_warning": "Avviso: impossibile conservare il pattern personalizzato '%s': %v\\n", + "patterns_preserved_custom_pattern": "Pattern personalizzato conservato: %s\\n", + "patterns_required_to_work": "I pattern sono richiesti per il funzionamento di Fabric. Per risolvere:", + "patterns_saving_updated_configuration": "💾 Salvataggio configurazione aggiornata (percorso cambiato da '%s' a '%s')...\\n", + "patterns_setup_description": "Pattern - Scarica i pattern", + "patterns_unable_to_find_or_migrate": "impossibile trovare pattern nel percorso attuale '%s' o migrare alla nuova struttura", + "patterns_unique_file_created": "📝 File dei pattern univoci creato con %d pattern\\n", + "patterns_warning_custom_directory": "Avviso: impossibile leggere la directory dei pattern personalizzata %s: %v\\n", + "patterns_warning_remove_test_folder": "Avviso: impossibile rimuovere la cartella temporanea di test '%s': %v\\n", + "perplexity_api_key_not_configured": "Chiave API non configurata per %s. Imposta la variabile d'ambiente %s o esegui 'fabric --setup' per configurare %s", + "perplexity_api_request_failed": "richiesta API Perplexity fallita: %w", + "perplexity_citations_header": "\n\n**Citazioni:**\n", + "perplexity_failed_configure": "configurazione di Perplexity fallita: %w", + "perplexity_streaming_error": "errore di streaming Perplexity: %v", + "plugin_configured": " ✓", + "plugin_enable_bool_question": "Abilita %v %v (true/false)", + "plugin_enter_value": "Inserisci il tuo %v %v", + "plugin_invalid_bool": "bool non valido: %q", + "plugin_invalid_boolean_value": "valore booleano non valido: %v", + "plugin_not_configured": " ⚠️ NON CONFIGURATO", + "plugin_question_bool": "%v%v (true/false, lascia vuoto per '%s' o digita '%v' per rimuovere il valore):", + "plugin_question_optional": "%v%v (lascia vuoto per saltare):", + "plugin_question_with_default": "%v%v (lascia vuoto per '%s' o digita '%v' per rimuovere il valore):", + "plugin_setting_not_valid": "%v=%v non è valido", + "plugin_setup_configured": "[%v] configurato", + "plugin_setup_skipped": "[%v] saltato\\n", + "prefer_playlist_over_video": "Preferisci playlist al video se entrambi gli ID sono presenti nell'URL", + "print_context": "Stampa contesto", + "print_current_version": "Stampa versione corrente", + "print_session": "Stampa sessione", + "register_new_extension": "Registra una nuova estensione dal percorso del file di configurazione", + "remove_registered_extension": "Rimuovi un'estensione registrata per nome", + "required_marker": "[obbligatorio]", + "run_setup_for_reconfigurable_parts": "Esegui la configurazione per tutte le parti riconfigurabili di fabric", + "save_generated_image_to_file": "Salva immagine generata nel percorso file specificato (es. 'output.png')", + "scrape_website_url": "Scraping dell'URL del sito web in markdown usando Jina AI", + "scraping_not_configured": "la funzionalità di scraping non è configurata. Per favore configura Jina per abilitare lo scraping", + "search_question_jina": "Domanda di ricerca usando Jina AI", + "seed_for_lmm_generation": "Seed da utilizzare per la generazione LMM", + "send_desktop_notification": "Invia notifica desktop quando il comando è completato", + "serve_fabric_api_ollama_endpoints": "Servi l'API REST di Fabric con endpoint ollama", + "serve_fabric_rest_api": "Servi l'API REST di Fabric", + "set_debug_level": "Imposta livello di debug (0=spento, 1=base, 2=dettagliato, 3=traccia)", + "set_frequency_penalty": "Imposta penalità di frequenza", + "set_location_web_search": "Imposta posizione per risultati ricerca web (es. 'America/Los_Angeles')", + "set_presence_penalty": "Imposta penalità di presenza", + "set_reasoning_thinking_level": "Imposta livello di ragionamento/pensiero (es. off, low, medium, high, o token numerici per Anthropic o Google Gemini)", + "set_temperature": "Imposta temperatura", + "set_top_p": "Imposta top P", + "setup_add_more_providers_later": "Potrai aggiungere altri fornitori in seguito con 'fabric --setup'", + "setup_ai_provider_required": "Fabric necessita di almeno un fornitore di IA per funzionare.", + "setup_available_ai_providers": "Fornitori di IA disponibili:", + "setup_available_plugins": "Plugin disponibili:", + "setup_complete_header": "✅ Configurazione completata! Ora puoi usare Fabric.", + "setup_configure_more": "• Configura altre impostazioni: fabric --setup", + "setup_enter_ai_provider_number": "Numero del fornitore di IA", + "setup_failed_download_patterns": "download dei pattern fallito: %w", + "setup_failed_download_strategies": "download delle strategie fallito: %w", + "setup_failed_set_defaults": "impostazione del fornitore e del modello predefiniti fallita: %w", + "setup_invalid_selection": "selezione non valida: %s", + "setup_list_patterns": "• Elenca i pattern disponibili: fabric -l", + "setup_next_steps": "Prossimi passi:", + "setup_no_ai_provider_selected": "nessun fornitore di IA selezionato - almeno uno è richiesto", + "setup_optional_configuration_header": "━━━ CONFIGURAZIONE OPZIONALE ━━━\n\nStrumenti opzionali", + "setup_plugin_number": "Numero del plugin", + "setup_plugin_prompt": "Inserisci il numero del plugin da configurare", + "setup_required_configuration_header": "━━━ CONFIGURAZIONE RICHIESTA ━━━\n\nFornitori di IA [almeno uno richiesto]", + "setup_required_tools": "Strumenti richiesti", + "setup_step_configure_ai_provider": "🤖 Passo 3: Configura un fornitore di IA", + "setup_step_downloading_patterns": "📥 Passo 1: Download dei pattern (richiesti per il funzionamento di Fabric)...", + "setup_step_downloading_strategies": "📥 Passo 2: Download delle strategie (richieste per il funzionamento di Fabric)...", + "setup_step_setting_defaults": "⚙️ Passo 4: Impostazione del fornitore e del modello predefiniti...", + "setup_try_pattern": "• Prova un pattern: echo 'il tuo testo' | fabric --pattern summarize", + "setup_validation_ai_provider_configured": "✓ Fornitore di IA configurato", + "setup_validation_ai_provider_missing": "✗ Fornitore di IA non configurato - Richiesto per il funzionamento di Fabric", + "setup_validation_complete": "✓ Tutti i componenti richiesti sono configurati!", + "setup_validation_defaults_configured": "✓ Fornitore/modello predefinito impostato: %s/%s", + "setup_validation_defaults_missing": "✗ Fornitore/modello predefinito non impostato - Richiesto per il funzionamento di Fabric", + "setup_validation_header": "Stato della configurazione:", + "setup_validation_incomplete_help": "Esegui di nuovo 'fabric --setup' per configurare gli elementi mancanti,\noppure esegui 'fabric -U' per scaricare pattern e strategie.", + "setup_validation_incomplete_warning": "⚠️ Configurazione incompleta! Componenti richiesti mancanti.", + "setup_validation_patterns_configured": "✓ Pattern scaricati", + "setup_validation_patterns_missing": "✗ Pattern non trovati - Richiesti per il funzionamento di Fabric", + "setup_validation_strategies_configured": "✓ Strategie scaricate", + "setup_validation_strategies_missing": "✗ Strategie non trovate - Richieste per il funzionamento di Fabric", + "setup_welcome_header": "🎉 Benvenuto su Fabric! Configuriamo tutto.", + "show_dry_run": "Mostra cosa verrebbe inviato al modello senza inviarlo effettivamente", + "specify_language_code": "Specifica il codice lingua per la chat, es. -g=en -g=zh -g=pt-BR -g=pt-PT", + "specify_vendor_for_model": "Specifica il fornitore per il modello selezionato (es. -V \"LM Studio\" -m openai/gpt-oss-20b)", + "split_media_files_ffmpeg": "Dividi file audio/video più grandi di 25MB usando ffmpeg", "spotify_api_request_failed": "richiesta API fallita: stato %d, risposta: %s", - "spotify_failed_parse_show_metadata": "impossibile analizzare i metadati dello show: %w", - "spotify_failed_parse_episode_metadata": "impossibile analizzare i metadati dell'episodio: %w", - "spotify_search_failed": "ricerca fallita: %w", - "spotify_failed_parse_search_results": "impossibile analizzare i risultati della ricerca: %w", + "spotify_audio_preview_label": "**Anteprima audio**: %s", + "spotify_client_id_question": "Inserisci il tuo CLIENT ID Spotify", + "spotify_client_secret_question": "Inserisci il tuo CLIENT SECRET Spotify", + "spotify_description_header": "## Descrizione", + "spotify_duration_label": "**Durata**: %d minuti", + "spotify_episode_header": "# Episodio Spotify", + "spotify_error_getting_metadata": "errore durante il recupero dei metadati Spotify: %v", + "spotify_explicit_label": "**Esplicito**: %v", + "spotify_failed_create_request": "impossibile creare la richiesta: %w", + "spotify_failed_create_token_request": "impossibile creare la richiesta del token: %w", + "spotify_failed_decode_token_response": "impossibile decodificare la risposta del token: %w", + "spotify_failed_execute_request": "impossibile eseguire la richiesta: %w", + "spotify_failed_get_access_token": "impossibile ottenere il token di accesso: stato %d, risposta: %s", "spotify_failed_get_show_episodes": "impossibile ottenere gli episodi dello show: %w", + "spotify_failed_parse_episode_metadata": "impossibile analizzare i metadati dell'episodio: %w", "spotify_failed_parse_episodes": "impossibile analizzare gli episodi: %w", - "template_file_log_validating_path": "File: convalida del percorso %q", - "template_file_error_path_contains_parent_ref": "file: il percorso non può contenere '..'", + "spotify_failed_parse_search_results": "impossibile analizzare i risultati della ricerca: %w", + "spotify_failed_parse_show_metadata": "impossibile analizzare i metadati dello show: %w", + "spotify_failed_read_response_body": "impossibile leggere il corpo della risposta: %w", + "spotify_failed_request_access_token": "impossibile richiedere il token di accesso: %w", + "spotify_invalid_url": "URL Spotify non valido, impossibile ottenere l'ID dello show o dell'episodio: '%s'", + "spotify_label": "Spotify", + "spotify_language_field_label": "**Lingua**: %s", + "spotify_languages_label": "**Lingue**: %s", + "spotify_media_type_label": "**Tipo di media**: %s", + "spotify_no_episode_found": "nessun episodio trovato con ID: %s", + "spotify_no_show_found": "nessuno show trovato con ID: %s", + "spotify_not_configured": "Spotify non è configurato, eseguire la procedura di configurazione", + "spotify_publisher_label": "**Editore**: %s", + "spotify_release_date_label": "**Data di uscita**: %s", + "spotify_search_description_label": "- **Descrizione**: %s", + "spotify_search_episodes_label": "- **Episodi**: %d", + "spotify_search_failed": "ricerca fallita: %w", + "spotify_search_publisher_label": "- **Editore**: %s", + "spotify_search_results_header": "# Risultati di ricerca Spotify", + "spotify_search_url_label": "- **URL**: %s", + "spotify_setup_description": "Spotify - per ottenere metadati di podcast/show da Spotify", + "spotify_show_header": "# Podcast/Show Spotify", + "spotify_show_name_label": "**Show**: %s", + "spotify_title_label": "**Titolo**: %s", + "spotify_total_episodes_label": "**Episodi totali**: %d", + "spotify_url_label": "**URL**: %s", + "start_tag_thinking_sections": "Tag di inizio per sezioni di pensiero", + "strategies_available_header": "Strategie disponibili:", + "strategies_cloning_repository": "Clonazione del repository %s (percorso: %s)...\\n", + "strategies_download_success": "✅ Strategie scaricate e installate correttamente in %s\\n", + "strategies_downloaded_count": "%d strategie scaricate\\n", + "strategies_downloading": "Download delle strategie e popolamento di %s...\\n", + "strategies_failed_create_directory": "impossibile creare la directory delle strategie: %w", + "strategies_failed_download": "impossibile scaricare le strategie: %w", + "strategies_git_repo_folder_question": "Inserisci la cartella predefinita nel repository Git dove sono memorizzate le strategie", + "strategies_git_repo_url_question": "Inserisci l'URL del repository Git predefinito per le strategie", + "strategies_home_dir_error": "impossibile ottenere la home directory: %v", + "strategies_home_dir_fallback": "impossibile ottenere la home directory: %v, uso la directory corrente", + "strategies_label": "Strategie di prompt", + "strategies_none_found": "nessuna strategia trovata. Esegui 'fabric --setup' per scaricare le strategie", + "strategies_setup_description": "Strategie - Scarica strategie di prompting (come chain of thought)", + "strategy_not_found": "strategia %s non trovata. Esegui 'fabric --liststrategies' per l'elenco", + "stream_help": "Streaming", + "suppress_thinking_tags": "Sopprimi testo racchiuso in tag di pensiero", + "template_datetime_error_invalid_number": "invalid number in relative time: %q", + "template_datetime_error_invalid_relative_format": "invalid relative time format", + "template_datetime_error_invalid_unit": "invalid time unit: %q", + "template_datetime_error_relative_requires_value": "relative time requires a value", + "template_datetime_error_unknown_operation": "datetime: unknown operation %q", "template_file_error_expand_home_dir": "file: impossibile espandere la directory home: %v", - "template_file_log_cleaned_path": "File: percorso pulito %q", - "template_file_log_operation_value": "File: operazione=%q valore=%q", - "template_file_error_tail_requires_path_lines": "file: tail richiede il formato percorso|righe", "template_file_error_invalid_line_count": "file: numero di righe non valido %q", "template_file_error_line_count_positive": "file: il numero di righe deve essere positivo", - "template_file_log_tail_returning_lines": "File: tail restituisce %d righe", - "template_file_error_stat_file": "file: impossibile ottenere lo stato del file: %v", - "template_file_error_size_exceeds_limit": "file: la dimensione %d supera il limite di %d byte", - "template_file_error_read_file": "file: impossibile leggere: %v", - "template_file_log_read_bytes": "File: letti %d byte", - "template_file_log_exists_for_path": "File: exists=%v per il percorso %q", - "template_file_log_size_for_path": "File: dimensione=%d per il percorso %q", - "template_file_log_modified_for_path": "File: modificato=%q per il percorso %q", - "template_file_error_unknown_operation": "file: operazione sconosciuta %q (supportate: read, tail, exists, size, modified)", - "template_file_log_reading_last_lines": "File: lettura delle ultime %d righe da %q", "template_file_error_open_file": "file: impossibile aprire: %v", - "template_file_error_stat_open_file": "file: impossibile ottenere lo stato: %v", + "template_file_error_path_contains_parent_ref": "file: il percorso non può contenere '..'", + "template_file_error_read_file": "file: impossibile leggere: %v", "template_file_error_scanner_read": "file: errore durante la lettura: %v", + "template_file_error_size_exceeds_limit": "file: la dimensione %d supera il limite di %d byte", + "template_file_error_stat_file": "file: impossibile ottenere lo stato del file: %v", + "template_file_error_stat_open_file": "file: impossibile ottenere lo stato: %v", + "template_file_error_tail_requires_path_lines": "file: tail richiede il formato percorso|righe", + "template_file_error_unknown_operation": "file: operazione sconosciuta %q (supportate: read, tail, exists, size, modified)", + "template_file_log_cleaned_path": "File: percorso pulito %q", + "template_file_log_exists_for_path": "File: exists=%v per il percorso %q", + "template_file_log_modified_for_path": "File: modificato=%q per il percorso %q", + "template_file_log_operation_value": "File: operazione=%q valore=%q", + "template_file_log_read_bytes": "File: letti %d byte", "template_file_log_read_total_return_last": "File: lette %d righe totali, restituzione delle ultime %d", - "chatter_error_no_session_pattern_user_messages": "nessuna sessione, pattern o messaggio utente fornito", - "chatter_error_no_messages_provided": "nessun messaggio fornito", - "chatter_log_stream_usage_metadata": "[Metadati] Input: %d | Output: %d | Totale: %d", - "chatter_error_stream_update": "Errore: %s", - "chatter_error_empty_response": "risposta vuota", - "chatter_warning_parse_file_changes_failed": "Avviso: analisi delle modifiche ai file non riuscita: %v", - "chatter_warning_get_current_directory_failed": "Avviso: impossibile ottenere la directory corrente: %v", - "chatter_warning_apply_file_changes_failed": "Avviso: impossibile applicare le modifiche ai file: %v", - "chatter_info_file_changes_applied_successfully": "Modifiche ai file applicate con successo.", - "chatter_help_review_changes_with_git_diff": "Puoi rivedere le modifiche con 'git diff' se stai usando git.", - "chatter_error_find_session": "impossibile trovare la sessione %s: %v", - "chatter_error_find_context": "impossibile trovare il contesto %s: %v", - "chatter_error_get_pattern": "impossibile ottenere il pattern %s: %v", - "chatter_error_load_strategy": "impossibile caricare la strategia %s: %v", - "chatter_prompt_enforce_response_language": "%s\n\nIMPORTANTE: Per prima cosa, esegui le istruzioni fornite in questo prompt usando l'input dell'utente. In secondo luogo, assicurati che l'intera risposta finale, inclusi eventuali titoli o intestazioni di sezione generati durante l'esecuzione delle istruzioni, sia scritta SOLO nella lingua %s.", - "vertexai_failed_google_credentials": "impossibile ottenere le credenziali Google (assicurarsi che ADC sia configurato): %w", - "vertexai_no_models_found": "nessun modello trovato da nessun editore", - "vertexai_no_conversational_models": "nessun modello conversazionale trovato", + "template_file_log_reading_last_lines": "File: lettura delle ultime %d righe da %q", + "template_file_log_size_for_path": "File: dimensione=%d per il percorso %q", + "template_file_log_tail_returning_lines": "File: tail restituisce %d righe", + "template_file_log_validating_path": "File: convalida del percorso %q", + "template_sys_error_env_requires_var": "env: variable name required", + "template_sys_error_home": "failed to get home directory: %v", + "template_sys_error_hostname": "failed to get hostname: %v", + "template_sys_error_pwd": "failed to get working directory: %v", + "template_sys_error_unknown_operation": "sys: unknown operation %q", + "template_sys_error_user": "failed to get current user: %v", + "transcription_model_required": "è richiesto un modello di trascrizione (usa --transcribe-model)", + "transparent_background_png_webp_only": "lo sfondo trasparente può essere utilizzato solo con formati PNG e WebP, non %s", + "tts_audio_generated_successfully": "Audio TTS generato con successo e salvato in: %s\n", + "tts_model_requires_audio_output": "il modello TTS '%s' richiede un output audio. Per favore specifica un file di output audio con il flag -o (es. -o output.wav)", + "tts_voice_name": "Nome voce TTS per modelli supportati (es. Kore, Charon, Puck)", + "unsupported_conversion": "conversione non supportata da %v a %v", + "update_patterns": "Aggiorna pattern", + "usage_header": "Uso:", + "use_model_defaults_raw_help": "Usa i valori predefiniti del modello senza inviare opzioni della chat (temperature, top_p, ecc.). Si applica solo ai provider compatibili con OpenAI. I modelli Anthropic utilizzano sempre una selezione intelligente dei parametri per rispettare i requisiti specifici del modello.", + "vendor_no_transcription_support": "il fornitore %s non supporta la trascrizione audio", + "vendor_not_configured": "il fornitore %s non è configurato", + "vendor_not_found": "fornitore %s non trovato", + "vendors_no_ai_vendors_configured_read_models": "nessun fornitore AI configurato per leggere i modelli", "vertexai_client_not_initialized": "client VertexAI non inizializzato", - "vertexai_no_valid_messages": "nessun messaggio valido da inviare", - "vertexai_no_content_in_response": "nessun contenuto nella risposta", - "vertexai_failed_gemini_client": "impossibile creare il client Gemini: %w", - "vertexai_stream_error": "Errore: %v", - "gemini_invalid_location_format": "formato posizione di ricerca non valido %q: deve essere un fuso orario (es. 'America/Los_Angeles') o un codice lingua (es. 'en-US')", - "gemini_stream_error": "Errore: %v", - "gemini_no_text_for_tts": "nessun contenuto testuale trovato per la generazione TTS", - "gemini_invalid_voice": "voce non valida '%s'. Le voci valide sono: %v", - "gemini_tts_failed": "generazione TTS fallita: %w", - "gemini_unexpected_data_type": "tipo di dato inaspettato: %s, attesi dati audio", - "gemini_audio_data_too_small": "dati audio troppo piccoli: %d byte, minimo richiesto: %d", - "gemini_wav_generation_failed": "generazione file WAV fallita: %w", - "gemini_wav_data_invalid": "dati WAV generati non validi: %d byte, minimo richiesto: %d", - "gemini_no_audio_data": "nessun dato audio ricevuto dal modello TTS", - "gemini_empty_pcm_data": "dati PCM vuoti forniti", - "gemini_pcm_data_too_large": "dati PCM troppo grandi: %d byte, massimo consentito: %d", - "bedrock_unable_load_aws_config": "impossibile caricare la configurazione AWS: %w", - "bedrock_aws_region_label": "Regione AWS", - "bedrock_invalid_aws_region": "regione AWS non valida: %s", - "bedrock_unable_load_aws_config_with_region": "impossibile caricare la configurazione AWS con regione %s: %w", - "bedrock_failed_list_foundation_models": "impossibile elencare i modelli di fondazione: %w", - "bedrock_failed_list_inference_profiles": "impossibile elencare i profili di inferenza: %w", - "bedrock_panic_sendstream": "panic in SendStream: %v", - "bedrock_conversestream_failed": "bedrock conversestream fallito per il modello %s: %w", - "bedrock_unknown_stream_event_type": "tipo di evento stream sconosciuto: %T", - "bedrock_converse_failed": "bedrock converse fallito per il modello %s: %w", - "bedrock_unexpected_response_type": "tipo di risposta inaspettato: %T", - "bedrock_empty_response_content": "contenuto della risposta vuoto", - "bedrock_unexpected_content_block_type": "tipo di blocco contenuto inaspettato: %T", - "fetch_unknown_operation": "fetch: operazione sconosciuta %q (supportata: get)", - "fetch_content_not_utf8": "fetch: il contenuto non è testo UTF-8 valido", - "fetch_content_null_bytes": "fetch: il contenuto contiene byte null", - "fetch_error_create_request": "fetch: errore durante la creazione della richiesta: %v", - "fetch_error_fetching_url": "fetch: errore durante il recupero dell'URL: %v", - "fetch_http_error": "fetch: errore HTTP: %d - %s", - "fetch_content_too_large": "fetch: contenuto troppo grande: %d byte (max %d byte)", - "fetch_unsupported_content_type": "fetch: tipo di contenuto non supportato %q - solo contenuto testuale consentito", - "fetch_error_reading_response": "fetch: errore durante la lettura della risposta: %v", - "fetch_content_exceeds_limit": "fetch: contenuto troppo grande: supera %d byte", - "file_manager_invalid_format_no_json_array": "formato %s non valido: nessun array JSON trovato", - "file_manager_invalid_format_unbalanced_brackets": "formato %s non valido: parentesi non bilanciate", - "file_manager_failed_parse_json": "analisi %s JSON non riuscita: %w", - "file_manager_invalid_operation": "operazione non valida per la modifica del file %d: %s", - "file_manager_empty_path": "percorso vuoto per la modifica del file %d", - "file_manager_suspicious_path": "percorso sospetto per la modifica del file %d: %s", - "file_manager_file_content_too_large": "contenuto del file troppo grande per la modifica del file %d: %d byte", - "file_manager_failed_create_directory": "creazione della directory %s non riuscita per la modifica del file %d: %w", - "file_manager_failed_write_file": "scrittura del file %s non riuscita per la modifica del file %d: %w", - "file_manager_applied_operation": "Operazione %s applicata a %s", - "vertexai_error_create_request": "creazione della richiesta fallita: %w", - "vertexai_error_request_failed": "richiesta fallita: %w", "vertexai_error_api_status": "l'API ha restituito lo stato %d: %s", - "vertexai_error_read_response": "lettura della risposta fallita: %w", - "vertexai_error_response_too_large": "risposta troppo grande (>%d byte)", + "vertexai_error_create_request": "creazione della richiesta fallita: %w", "vertexai_error_parse_response": "analisi della risposta fallita: %w", - "copilot_tenant_client_id_required": "sono richiesti l'ID tenant e l'ID client", - "copilot_failed_create_conversation": "creazione della conversazione fallita: %w", - "copilot_failed_send_message": "invio del messaggio fallito: %w", - "copilot_failed_stream_message": "streaming del messaggio fallito: %w", - "copilot_error_create_conversation": "creazione della conversazione fallita: %s - %s", - "copilot_error_chat_request": "richiesta di chat fallita: %s - %s", - "copilot_error_stream_request": "richiesta di stream fallita: %s - %s", - "copilot_debug_created_conversation": "Conversazione Copilot creata: %s", - "copilot_debug_failed_parse_sse_event": "Impossibile analizzare l'evento SSE: %v", - "copilot_error_reading_stream": "errore nella lettura dello stream: %w" + "vertexai_error_read_response": "lettura della risposta fallita: %w", + "vertexai_error_request_failed": "richiesta fallita: %w", + "vertexai_error_response_too_large": "risposta troppo grande (>%d byte)", + "vertexai_failed_gemini_client": "impossibile creare il client Gemini: %w", + "vertexai_failed_google_credentials": "impossibile ottenere le credenziali Google (assicurarsi che ADC sia configurato): %w", + "vertexai_no_content_in_response": "nessun contenuto nella risposta", + "vertexai_no_conversational_models": "nessun modello conversazionale trovato", + "vertexai_no_models_found": "nessun modello trovato da nessun editore", + "vertexai_no_valid_messages": "nessun messaggio valido da inviare", + "vertexai_stream_error": "Errore: %v", + "wipe_context": "Cancella contesto", + "wipe_session": "Cancella sessione", + "youtube_api_key_required": "Chiave API YouTube richiesta per commenti e metadati. Eseguire 'fabric --setup' per configurare", + "youtube_auth_required_bot_detection": "YouTube richiede autenticazione (rilevamento bot). Usa --yt-dlp-args='--cookies-from-browser BROWSER' dove BROWSER può essere chrome, firefox, brave, ecc.", + "youtube_empty_seconds_string": "stringa di secondi vuota", + "youtube_error_getting_comments": "errore nell'ottenere i commenti: %v", + "youtube_error_getting_metadata": "errore nell'ottenere i metadati del video: %v", + "youtube_error_getting_video_details": "errore nell'ottenere i dettagli del video: %v", + "youtube_error_parsing_duration": "errore nell'analizzare la durata del video: %v", + "youtube_error_saving_csv": "errore nel salvare i video in CSV: %v", + "youtube_failed_create_temp_dir": "impossibile creare la directory temporanea: %v", + "youtube_failed_fetch_comments": "Recupero dei commenti fallito: %v", + "youtube_failed_walk_directory": "impossibile esplorare la directory: %v", + "youtube_invalid_duration_string": "stringa di durata non valida: %s", + "youtube_invalid_seconds_format": "formato secondi non valido %q: %w", + "youtube_invalid_timestamp_format": "formato timestamp non valido: %s", + "youtube_invalid_url": "URL YouTube non valido, impossibile ottenere l'ID del video o della playlist: '%s'", + "youtube_invalid_ytdlp_arguments": "argomenti yt-dlp non validi: %v", + "youtube_label": "YouTube", + "youtube_no_transcript_content": "nessun contenuto di trascrizione trovato nel file VTT", + "youtube_no_url_provided": "Nessun URL YouTube fornito", + "youtube_no_video_found_with_id": "nessun video trovato con ID: %s", + "youtube_no_video_id_found": "nessun ID video trovato nell'URL", + "youtube_no_vtt_files_found": "nessun file VTT trovato nella directory", + "youtube_not_configured": "YouTube non è configurato, eseguire la procedura di configurazione", + "youtube_playlist_header": "Playlist: %s", + "youtube_playlist_saved_to": "Playlist salvata in %s", + "youtube_rate_limit_exceeded": "Limite di richieste YouTube superato. Riprova più tardi o usa argomenti yt-dlp diversi come '--sleep-requests 1' per rallentare le richieste.", + "youtube_setup_description": "YouTube - per ottenere trascrizioni video (tramite yt-dlp) e commenti/metadati (tramite API YouTube)", + "youtube_url_help": "Video YouTube o \"URL\" della playlist per ottenere trascrizioni, commenti e inviarli alla chat o stamparli sulla console e memorizzarli nel file di output", + "youtube_url_is_playlist_not_video": "L'URL è una playlist, non un video", + "youtube_video_id_title_header": "VideoID: Titolo", + "youtube_ytdlp_not_found": "yt-dlp non trovato in PATH. Per favore installa yt-dlp per usare la funzionalità di trascrizione YouTube", + "youtube_ytdlp_stderr_error": "Errore durante la lettura dello stderr di yt-dlp" } diff --git a/internal/i18n/locales/ja.json b/internal/i18n/locales/ja.json index bc0944d7..8012f4f4 100644 --- a/internal/i18n/locales/ja.json +++ b/internal/i18n/locales/ja.json @@ -1,520 +1,592 @@ { - "html_readability_error": "HTML可読性を適用できないため、元の入力を使用します", - "vendor_not_configured": "ベンダー %s が設定されていません", - "vendor_no_transcription_support": "ベンダー %s は音声転写をサポートしていません", - "transcription_model_required": "転写モデルが必要です(--transcribe-model を使用)", - "youtube_not_configured": "YouTubeが設定されていません。セットアップ手順を実行してください", - "spotify_not_configured": "Spotifyが設定されていません。セットアップ手順を実行してください", - "spotify_label": "Spotify", - "spotify_setup_description": "Spotify - Spotifyからポッドキャスト/番組のメタデータを取得", - "spotify_invalid_url": "無効なSpotify URL、番組またはエピソードIDを取得できません:'%s'", - "spotify_error_getting_metadata": "Spotifyメタデータの取得エラー:%v", - "spotify_no_show_found": "ID %s の番組が見つかりません", - "spotify_no_episode_found": "ID %s のエピソードが見つかりません", - "spotify_url_help": "メタデータを取得してチャットに送信するSpotifyポッドキャストまたはエピソードURL", - "youtube_api_key_required": "コメントとメタデータにはYouTube APIキーが必要です。設定するには 'fabric --setup' を実行してください", - "youtube_ytdlp_not_found": "PATHにyt-dlpが見つかりません。YouTubeトランスクリプト機能を使用するにはyt-dlpをインストールしてください", - "youtube_invalid_url": "無効なYouTube URL、動画またはプレイリストIDを取得できません: '%s'", - "youtube_url_is_playlist_not_video": "URLはプレイリストであり、動画ではありません", - "youtube_no_video_id_found": "URLに動画IDが見つかりません", - "youtube_rate_limit_exceeded": "YouTubeのレート制限を超えました。後でもう一度試すか、'--sleep-requests 1'のような異なるyt-dlp引数を使用してリクエストを遅くしてください。", - "youtube_auth_required_bot_detection": "YouTubeは認証を必要としています(ボット検出)。--yt-dlp-args='--cookies-from-browser BROWSER'を使用してください。BROWSERはchrome、firefox、braveなどです。", - "youtube_ytdlp_stderr_error": "yt-dlp stderrの読み取りエラー", - "youtube_invalid_ytdlp_arguments": "無効なyt-dlp引数: %v", - "youtube_failed_create_temp_dir": "一時ディレクトリの作成に失敗しました: %v", - "youtube_no_transcript_content": "VTTファイルにトランスクリプトコンテンツが見つかりません", - "youtube_no_vtt_files_found": "ディレクトリにVTTファイルが見つかりません", - "youtube_failed_walk_directory": "ディレクトリの走査に失敗しました: %v", - "youtube_error_getting_video_details": "動画の詳細取得エラー: %v", - "youtube_invalid_duration_string": "無効な長さ文字列: %s", - "youtube_error_getting_metadata": "動画のメタデータ取得エラー: %v", - "youtube_error_parsing_duration": "動画の長さ解析エラー: %v", - "youtube_error_getting_comments": "コメント取得エラー: %v", - "youtube_error_saving_csv": "動画のCSV保存エラー: %v", - "youtube_no_video_found_with_id": "IDの動画が見つかりません: %s", - "youtube_invalid_timestamp_format": "無効なタイムスタンプ形式: %s", - "youtube_empty_seconds_string": "空の秒文字列", - "youtube_invalid_seconds_format": "無効な秒形式 %q: %w", - "error_fetching_playlist_videos": "プレイリスト動画の取得エラー: %w", - "openai_api_base_url_not_configured": "プロバイダー %s のAPIベースURLが設定されていません", - "openai_failed_to_create_models_url": "モデルURLの作成に失敗しました: %w", - "openai_unexpected_status_code_with_body": "予期しないステータスコード: プロバイダー %s から %d、レスポンス本文: %s", - "openai_unexpected_status_code_read_error_partial": "予期しないステータスコード: プロバイダー %s から %d (本文読み取りエラー: %v)、部分的なレスポンス: %s", - "openai_unexpected_status_code_read_error": "予期しないステータスコード: プロバイダー %s から %d (レスポンス本文の読み取りに失敗: %v)", - "openai_unable_to_parse_models_response": "モデルレスポンスの解析に失敗しました; 生のレスポンス: %s", - "openai_warning_model_no_image_generation": "警告: モデル '%s' は画像生成をサポートしていません。サポートされているモデル: %s。画像生成には -m gpt-5.2 の使用を検討してください。\n", - "openai_model_no_image_generation": "モデル '%s' は画像生成をサポートしていません。サポートされているモデル: %s", - "scraping_not_configured": "スクレイピング機能が設定されていません。スクレイピングを有効にするためにJinaを設定してください", - "could_not_determine_home_dir": "ユーザーのホームディレクトリを特定できませんでした: %w", - "could_not_stat_env_file": ".envファイルの状態を確認できませんでした: %w", + "additional_yt_dlp_args": "yt-dlpに渡す追加の引数(例:'--cookies-from-browser brave')", + "address_to_bind_rest_api": "REST APIをバインドするアドレス", + "anthropic_stream_error": "ストリームエラー: %v", + "api_key_secure_server_routes": "サーバールートを保護するために使用するAPIキー", + "application_options_header": "アプリケーションオプション:", + "apply_variables_to_input": "ユーザー入力に変数を適用", + "attachment_path_or_url_help": "添付ファイルのパスまたはURL(例:OpenAI画像認識メッセージ用)", + "audio_output_file_specified_but_not_tts_model": "音声出力ファイル '%s' が指定されましたが、モデル '%s' はTTSモデルではありません。gemini-2.5-flash-preview-tts などのTTSモデルを使用してください", + "audio_video_file_transcribe": "転写する音声または動画ファイル", + "available_models_header": "利用可能なモデル", + "available_transcription_models": "利用可能な転写モデル:", + "available_vendors_header": "利用可能なベンダー:", + "azure_api_key_required": "Azure APIキーが必要です", + "azure_api_version_question": "Azure APIバージョンを入力してください(デフォルトの場合は空白のまま)", + "azure_base_url_required": "Azure ベースURLが必要です", + "azure_deployments_question": "Azureデプロイメント名を入力してください(カンマ区切り)", + "azure_failed_extract_deployment": "リクエストからデプロイメント名を抽出できませんでした", + "azure_model_field_empty": "リクエストボディのモデルフィールドが空です", + "azure_request_body_nil": "リクエストボディがnilです", + "background_type_help": "背景タイプ:opaque、transparent(デフォルト:opaque、PNG/WebPのみ)", + "bedrock_aws_region_label": "AWSリージョン", + "bedrock_converse_failed": "モデル %s のbedrock converseが失敗しました: %w", + "bedrock_conversestream_failed": "モデル %s のbedrock conversestreamが失敗しました: %w", + "bedrock_empty_response_content": "空のレスポンスコンテンツ", + "bedrock_failed_list_foundation_models": "基盤モデルの一覧表示に失敗しました: %w", + "bedrock_failed_list_inference_profiles": "推論プロファイルの一覧表示に失敗しました: %w", + "bedrock_invalid_aws_region": "無効なAWSリージョン: %s", + "bedrock_panic_sendstream": "SendStreamでパニックが発生しました: %v", + "bedrock_unable_load_aws_config": "AWS設定を読み込めませんでした: %w", + "bedrock_unable_load_aws_config_with_region": "リージョン %s でAWS設定を読み込めませんでした: %w", + "bedrock_unexpected_content_block_type": "予期しないコンテンツブロックタイプ: %T", + "bedrock_unexpected_response_type": "予期しないレスポンスタイプ: %T", + "bedrock_unknown_stream_event_type": "不明なストリームイベントタイプ: %T", + "cannot_convert_string": "文字列 %q を %v に変換できません", + "change_default_model": "デフォルトモデルを変更", + "chatter_error_empty_response": "空の応答", + "chatter_error_find_context": "コンテキスト %s が見つかりませんでした: %v", + "chatter_error_find_session": "セッション %s が見つかりませんでした: %v", + "chatter_error_get_pattern": "パターン %s を取得できませんでした: %v", + "chatter_error_load_strategy": "戦略 %s を読み込めませんでした: %v", + "chatter_error_no_messages_provided": "メッセージが指定されていません", + "chatter_error_no_session_pattern_user_messages": "セッション、パターン、またはユーザーメッセージが指定されていません", + "chatter_error_stream_update": "エラー: %s", + "chatter_help_review_changes_with_git_diff": "git を使用している場合は、'git diff' で変更を確認できます。", + "chatter_info_file_changes_applied_successfully": "ファイル変更を正常に適用しました。", + "chatter_log_stream_usage_metadata": "[メタデータ] 入力: %d | 出力: %d | 合計: %d", + "chatter_prompt_enforce_response_language": "%s\n\n重要: まず、このプロンプトで提供された指示をユーザー入力を使って実行してください。次に、指示の実行中に生成されるセクション見出しやタイトルを含む最終回答全体を、必ず %s 言語のみで記述してください。", + "chatter_warning_apply_file_changes_failed": "警告: ファイル変更の適用に失敗しました: %v", + "chatter_warning_get_current_directory_failed": "警告: 現在のディレクトリの取得に失敗しました: %v", + "chatter_warning_parse_file_changes_failed": "警告: ファイル変更の解析に失敗しました: %v", + "choose_context_from_available": "利用可能なコンテキストからコンテキストを選択", + "choose_model": "モデルを選択", + "choose_pattern_from_available": "利用可能なパターンからパターンを選択", + "choose_session_from_available": "利用可能なセッションからセッションを選択", + "choose_strategy_from_available": "利用可能な戦略から戦略を選択", + "command_completed_successfully": "コマンドが正常に完了しました", + "compression_level_jpeg_webp": "JPEG/WebP形式の圧縮レベル0-100(デフォルト:未設定)", + "config_file_not_found": "設定ファイルが見つかりません: %s", + "convert_html_readability": "HTML入力をクリーンで読みやすいビューに変換", + "copilot_debug_created_conversation": "Copilot会話を作成しました: %s", + "copilot_debug_failed_parse_sse_event": "SSEイベントの解析に失敗しました: %v", + "copilot_error_chat_request": "チャットリクエストが失敗しました: %s - %s", + "copilot_error_create_conversation": "会話の作成に失敗しました: %s - %s", + "copilot_error_reading_stream": "ストリームの読み取りエラー: %w", + "copilot_error_stream_request": "ストリームリクエストが失敗しました: %s - %s", + "copilot_failed_create_conversation": "会話の作成に失敗しました: %w", + "copilot_failed_send_message": "メッセージの送信に失敗しました: %w", + "copilot_failed_stream_message": "メッセージのストリーミングに失敗しました: %w", + "copilot_tenant_client_id_required": "テナントIDとクライアントIDが必要です", + "copy_to_clipboard": "クリップボードにコピー", + "could_not_copy_to_clipboard": "クリップボードにコピーできませんでした: %v", "could_not_create_config_dir": "設定ディレクトリを作成できませんでした: %w", "could_not_create_env_file": ".envファイルを作成できませんでした: %w", - "could_not_copy_to_clipboard": "クリップボードにコピーできませんでした: %v", - "file_already_exists_not_overwriting": "ファイル %s は既に存在するため、上書きしません。既存のファイルの名前を変更するか、別の名前を選択してください", - "error_creating_file": "ファイルの作成エラー: %v", - "error_writing_to_file": "ファイルへの書き込みエラー: %v", - "error_creating_audio_file": "音声ファイルの作成エラー: %v", - "error_writing_audio_data": "音声データのファイルへの書き込みエラー: %v", - "tts_model_requires_audio_output": "TTSモデル '%s' には音声出力が必要です。-oフラグで音声出力ファイルを指定してください(例:-o output.wav)", - "audio_output_file_specified_but_not_tts_model": "音声出力ファイル '%s' が指定されましたが、モデル '%s' はTTSモデルではありません。gemini-2.5-flash-preview-tts などのTTSモデルを使用してください", - "file_already_exists_choose_different": "ファイル %s は既に存在します。別のファイル名を選択するか、既存のファイルを削除してください", - "no_notification_system_available": "利用可能な通知システムがありません", - "cannot_convert_string": "文字列 %q を %v に変換できません", - "unsupported_conversion": "%v から %v への変換はサポートされていません", - "invalid_config_path": "無効な設定パス: %w", - "config_file_not_found": "設定ファイルが見つかりません: %s", - "error_reading_config_file": "設定ファイルの読み込みエラー: %w", - "error_parsing_config_file": "設定ファイルの解析エラー: %w", - "error_reading_piped_message": "stdinからパイプされたメッセージの読み込みエラー: %w", - "image_file_already_exists": "画像ファイルが既に存在します: %s", - "invalid_image_file_extension": "無効な画像ファイル拡張子 '%s'。サポートされている形式:.png、.jpeg、.jpg、.webp", - "image_parameters_require_image_file": "画像パラメータ(--image-size、--image-quality、--image-background、--image-compression)は --image-file と一緒に使用する必要があります", - "invalid_image_size": "無効な画像サイズ '%s'。サポートされているサイズ:1024x1024、1536x1024、1024x1536、auto", - "invalid_image_quality": "無効な画像品質 '%s'。サポートされている品質:low、medium、high、auto", - "invalid_image_background": "無効な画像背景 '%s'。サポートされている背景:opaque、transparent", - "image_compression_jpeg_webp_only": "画像圧縮はJPEGおよびWebP形式でのみ使用できます。%s では使用できません", - "image_compression_range_error": "画像圧縮は0から100の間である必要があります。取得値:%d", - "transparent_background_png_webp_only": "透明背景はPNGおよびWebP形式でのみ使用できます。%s では使用できません", - "available_transcription_models": "利用可能な転写モデル:", - "tts_audio_generated_successfully": "TTS音声が正常に生成され、保存されました:%s\n", - "fabric_command_complete": "Fabricコマンド完了", - "fabric_command_complete_with_pattern": "Fabric:%s 完了", - "command_completed_successfully": "コマンドが正常に完了しました", - "output_truncated": "出力:%s...", - "output_full": "出力:%s", - "choose_pattern_from_available": "利用可能なパターンからパターンを選択", - "pattern_variables_help": "パターン変数の値、例:-v=#role:expert -v=#points:30", - "choose_context_from_available": "利用可能なコンテキストからコンテキストを選択", - "choose_session_from_available": "利用可能なセッションからセッションを選択", - "attachment_path_or_url_help": "添付ファイルのパスまたはURL(例:OpenAI画像認識メッセージ用)", - "run_setup_for_reconfigurable_parts": "fabricのすべての再設定可能な部分のセットアップを実行", - "set_temperature": "温度を設定", - "set_top_p": "Top Pを設定", - "stream_help": "ストリーミング", - "set_presence_penalty": "プレゼンスペナルティを設定", - "use_model_defaults_raw_help": "チャットオプション(temperature、top_p など)を送信せずにモデルのデフォルトを使用します。OpenAI 互換プロバイダーにのみ適用されます。Anthropic モデルは常に、モデル固有の要件に準拠するためにスマートなパラメーター選択を使用します。", - "set_frequency_penalty": "頻度ペナルティを設定", - "list_all_patterns": "すべてのパターンを一覧表示", - "list_all_available_models": "すべての利用可能なモデルを一覧表示", - "list_all_contexts": "すべてのコンテキストを一覧表示", - "list_all_sessions": "すべてのセッションを一覧表示", - "update_patterns": "パターンを更新", - "messages_to_send_to_chat": "チャットに送信するメッセージ", - "copy_to_clipboard": "クリップボードにコピー", - "choose_model": "モデルを選択", - "specify_vendor_for_model": "選択したモデルのベンダーを指定(例:-V \"LM Studio\" -m openai/gpt-oss-20b)", - "model_context_length_ollama": "モデルのコンテキスト長(ollamaのみに影響)", - "output_to_file": "ファイルに出力", - "output_entire_session": "セッション全体(一時的なものも含む)を出力ファイルに出力", - "number_of_latest_patterns": "一覧表示する最新パターンの数", - "change_default_model": "デフォルトモデルを変更", - "youtube_url_help": "YouTube動画またはプレイリスト\"URL\"から転写、コメントを取得してチャットに送信、またはコンソールに出力して出力ファイルに保存", - "prefer_playlist_over_video": "URLに両方のIDが存在する場合、動画よりプレイリストを優先", - "grab_transcript_from_youtube": "YouTube動画から転写を取得してチャットに送信(デフォルトで使用)。", - "grab_transcript_with_timestamps": "YouTube動画からタイムスタンプ付きの転写を取得してチャットに送信", - "grab_comments_from_youtube": "YouTube動画からコメントを取得してチャットに送信", - "output_video_metadata": "動画メタデータを出力", - "additional_yt_dlp_args": "yt-dlpに渡す追加の引数(例:'--cookies-from-browser brave')", - "specify_language_code": "チャットの言語コードを指定、例: -g=en -g=zh -g=pt-BR -g=pt-PT", - "scrape_website_url": "Jina AIを使用してウェブサイトURLをマークダウンにスクレイピング", - "search_question_jina": "Jina AIを使用した検索質問", - "seed_for_lmm_generation": "LMM生成で使用するシード", - "wipe_context": "コンテキストをクリア", - "wipe_session": "セッションをクリア", - "print_context": "コンテキストを出力", - "print_session": "セッションを出力", - "convert_html_readability": "HTML入力をクリーンで読みやすいビューに変換", - "apply_variables_to_input": "ユーザー入力に変数を適用", - "disable_pattern_variable_replacement": "パターン変数の置換を無効化", - "show_dry_run": "実際に送信せずにモデルに送信される内容を表示", - "serve_fabric_rest_api": "Fabric REST APIを提供", - "serve_fabric_api_ollama_endpoints": "ollamaエンドポイント付きのFabric REST APIを提供", - "address_to_bind_rest_api": "REST APIをバインドするアドレス", - "api_key_secure_server_routes": "サーバールートを保護するために使用するAPIキー", - "path_to_yaml_config": "YAML設定ファイルのパス", - "print_current_version": "現在のバージョンを出力", - "list_all_registered_extensions": "すべての登録済み拡張機能を一覧表示", - "register_new_extension": "設定ファイルパスから新しい拡張機能を登録", - "remove_registered_extension": "名前で登録済み拡張機能を削除", - "choose_strategy_from_available": "利用可能な戦略から戦略を選択", - "list_all_strategies": "すべての戦略を一覧表示", - "list_all_vendors": "すべてのベンダーを一覧表示", - "output_raw_list_shell_completion": "生リストをヘッダー/フォーマットなしで出力(シェル補完用)", - "enable_web_search_tool": "サポートされているモデル(Anthropic、OpenAI、Gemini)でウェブ検索ツールを有効化", - "set_location_web_search": "ウェブ検索結果の場所を設定(例:'America/Los_Angeles')", - "save_generated_image_to_file": "生成された画像を指定ファイルパスに保存(例:'output.png')", - "image_dimensions_help": "画像サイズ:1024x1024、1536x1024、1024x1536、auto(デフォルト:auto)", - "image_quality_help": "画像品質:low、medium、high、auto(デフォルト:auto)", - "compression_level_jpeg_webp": "JPEG/WebP形式の圧縮レベル0-100(デフォルト:未設定)", - "background_type_help": "背景タイプ:opaque、transparent(デフォルト:opaque、PNG/WebPのみ)", - "suppress_thinking_tags": "思考タグで囲まれたテキストを抑制", - "start_tag_thinking_sections": "思考セクションの開始タグ", - "end_tag_thinking_sections": "思考セクションの終了タグ", - "disable_openai_responses_api": "OpenAI Responses APIを無効化(デフォルト:false)", - "audio_video_file_transcribe": "転写する音声または動画ファイル", - "model_for_transcription": "転写に使用するモデル(チャットモデルとは別)", - "split_media_files_ffmpeg": "25MBを超える音声/動画ファイルをffmpegを使用して分割", - "tts_voice_name": "サポートされているモデルのTTS音声名(例:Kore、Charon、Puck)", - "list_gemini_tts_voices": "すべての利用可能なGemini TTS音声を一覧表示", - "list_transcription_models": "すべての利用可能な転写モデルを一覧表示", - "send_desktop_notification": "コマンド完了時にデスクトップ通知を送信", + "could_not_determine_home_dir": "ユーザーのホームディレクトリを特定できませんでした: %w", + "could_not_stat_env_file": ".envファイルの状態を確認できませんでした: %w", "custom_notification_command": "通知用のカスタムコマンド(内蔵通知を上書き)", - "set_reasoning_thinking_level": "推論/思考レベルを設定(例:off、low、medium、high、またはAnthropicやGoogle Gemini用の数値トークン)", - "set_debug_level": "デバッグレベルを設定(0=オフ、1=基本、2=詳細、3=トレース)", - "usage_header": "使用法:", - "application_options_header": "アプリケーションオプション:", - "help_options_header": "ヘルプオプション:", - "help_message": "このヘルプメッセージを表示", - "options_placeholder": "[オプション]", - "available_vendors_header": "利用可能なベンダー:", - "available_models_header": "利用可能なモデル", - "no_items_found": "%s がありません", - "no_description_available": "説明がありません", - "i18n_download_failed": "言語 '%s' の翻訳のダウンロードに失敗しました: %v", - "i18n_load_failed": "翻訳ファイルの読み込みに失敗しました: %v", - "setup_welcome_header": "🎉 Fabricへようこそ!セットアップを始めましょう。", - "setup_step_downloading_patterns": "📥 ステップ1: パターンをダウンロード中(Fabricの動作に必要です)...", - "setup_step_downloading_strategies": "📥 ステップ2: ストラテジーをダウンロード中(Fabricの動作に必要です)...", - "setup_step_configure_ai_provider": "🤖 ステップ3: AIプロバイダーを設定", - "setup_ai_provider_required": "Fabricを動作させるには、少なくとも1つのAIプロバイダーが必要です。", - "setup_add_more_providers_later": "'fabric --setup'で後からプロバイダーを追加できます", - "setup_step_setting_defaults": "⚙️ ステップ4: デフォルトのベンダーとモデルを設定中...", - "setup_complete_header": "✅ セットアップ完了!Fabricを使用できます。", - "setup_next_steps": "次のステップ:", - "setup_list_patterns": "• 利用可能なパターンを一覧表示: fabric -l", - "setup_try_pattern": "• パターンを試す: echo 'テキスト' | fabric --pattern summarize", - "setup_configure_more": "• その他の設定: fabric --setup", - "setup_failed_download_patterns": "パターンのダウンロードに失敗しました: %w", - "setup_failed_download_strategies": "ストラテジーのダウンロードに失敗しました: %w", - "setup_failed_set_defaults": "デフォルトのベンダーとモデルの設定に失敗しました: %w", - "setup_no_ai_provider_selected": "AIプロバイダーが選択されていません - 少なくとも1つは必要です", - "setup_invalid_selection": "無効な選択: %s", - "setup_available_ai_providers": "利用可能なAIプロバイダー:", - "setup_enter_ai_provider_number": "AIプロバイダー番号", - "setup_available_plugins": "利用可能なプラグイン:", - "setup_plugin_number": "プラグイン番号", - "setup_plugin_prompt": "セットアップするプラグインの番号を入力してください", - "setup_required_configuration_header": "━━━ 必須設定 ━━━\n\nAIベンダー [少なくとも1つ必要]", - "setup_required_tools": "必須ツール", - "setup_optional_configuration_header": "━━━ オプション設定 ━━━\n\nオプションツール", - "setup_validation_header": "設定状況:", - "setup_validation_ai_provider_configured": "✓ AIプロバイダー設定済み", - "setup_validation_ai_provider_missing": "✗ AIプロバイダー未設定 - Fabricの動作に必要です", - "setup_validation_defaults_configured": "✓ デフォルトのベンダー/モデル設定済み: %s/%s", - "setup_validation_defaults_missing": "✗ デフォルトのベンダー/モデル未設定 - Fabricの動作に必要です", - "setup_validation_patterns_configured": "✓ パターンダウンロード済み", - "setup_validation_patterns_missing": "✗ パターンが見つかりません - Fabricの動作に必要です", - "setup_validation_strategies_configured": "✓ ストラテジーダウンロード済み", - "setup_validation_strategies_missing": "✗ ストラテジーが見つかりません - Fabricの動作に必要です", - "setup_validation_incomplete_warning": "⚠️ セットアップ未完了!必要なコンポーネントが不足しています。", - "setup_validation_incomplete_help": "'fabric --setup'を再度実行して不足項目を設定するか、\n'fabric -U'を実行してパターンとストラテジーをダウンロードしてください。", - "setup_validation_complete": "✓ 必要なコンポーネントがすべて設定されています!", - "patterns_not_found_header": "⚠️ パターンが見つかりません!", - "patterns_required_to_work": "Fabricを動作させるにはパターンが必要です。解決するには:", - "patterns_option_run_setup": "オプション1(推奨): セットアップを実行してパターンをダウンロード", - "patterns_option_run_setup_command": "fabric --setup", - "patterns_option_run_update": "オプション2: パターンを直接ダウンロード/更新", - "patterns_option_run_update_command": "fabric -U", - "pattern_not_found_no_patterns": "パターン '%s' が見つかりません。\n\nパターンがインストールされていません!解決するには:\n • 'fabric --setup'を実行してパターンを設定・ダウンロード\n • または'fabric -U'を実行してパターンをダウンロード/更新", - "pattern_not_found_list_available": "パターン '%s' が見つかりません。'fabric -l'で利用可能なパターンを確認してください", - "plugin_configured": " ✓", - "plugin_not_configured": " ⚠️ 未設定", - "defaults_setup_description": "デフォルトのAIプロバイダーとモデル", - "defaults_model_question": "デフォルトモデルのインデックスまたは名前を入力してください", - "defaults_model_context_length_question": "モデルのコンテキスト長を入力してください", + "custom_patterns_directory_question": "カスタムパターンディレクトリのパスを入力してください", "custom_patterns_label": "カスタムパターン", "custom_patterns_setup_description": "カスタムパターン - カスタムパターン用のディレクトリを設定", - "custom_patterns_directory_question": "カスタムパターンディレクトリのパスを入力してください", + "defaults_model_context_length_question": "モデルのコンテキスト長を入力してください", + "defaults_model_question": "デフォルトモデルのインデックスまたは名前を入力してください", + "defaults_setup_description": "デフォルトのAIプロバイダーとモデル", + "disable_openai_responses_api": "OpenAI Responses APIを無効化(デフォルト:false)", + "disable_pattern_variable_replacement": "パターン変数の置換を無効化", + "enable_web_search_tool": "サポートされているモデル(Anthropic、OpenAI、Gemini)でウェブ検索ツールを有効化", + "end_tag_thinking_sections": "思考セクションの終了タグ", + "error_creating_audio_file": "音声ファイルの作成エラー: %v", + "error_creating_file": "ファイルの作成エラー: %v", + "error_fetching_playlist_videos": "プレイリスト動画の取得エラー: %w", + "error_parsing_config_file": "設定ファイルの解析エラー: %w", + "error_reading_config_file": "設定ファイルの読み込みエラー: %w", + "error_reading_piped_message": "stdinからパイプされたメッセージの読み込みエラー: %w", + "error_writing_audio_data": "音声データのファイルへの書き込みエラー: %v", + "error_writing_to_file": "ファイルへの書き込みエラー: %v", + "extension_cmd_template_required": "操作 %s にはコマンドテンプレートが必要です", + "extension_command_template_label": " コマンドテンプレート: %s\n", + "extension_config_hash_mismatch": "%s の設定ファイルのハッシュが一致しません", + "extension_config_path_label": " 設定パス: %s\n\n", + "extension_description_label": " 説明: %s\n", + "extension_empty_command": "フォーマット後のコマンドが空です", + "extension_executable_hash_mismatch": "%s の実行ファイルのハッシュが一致しません", + "extension_executable_label": " 実行ファイル: %s\n", + "extension_executable_not_found": "実行ファイルが見つかりません: %w", + "extension_executable_required": "実行ファイルパスは必須です", + "extension_executing_command": "コマンドを実行中: %s\n", + "extension_execution_failed_err": "実行に失敗しました: %w\nerr: %s", + "extension_execution_failed_stderr": "実行に失敗しました: %w\nstderr: %s", + "extension_execution_timed_out": "%v 後に実行がタイムアウトしました", + "extension_failed_format_command": "コマンドのフォーマットに失敗しました: %w", + "extension_failed_get_absolute_path": "絶対パスの取得に失敗しました: %w", + "extension_failed_get_extension": "拡張機能の取得に失敗しました: %w", + "extension_failed_get_output_path": "出力パスの取得に失敗しました: %w\nerr: %s", + "extension_failed_hash_executable": "実行ファイルのハッシュ計算に失敗しました: %w", + "extension_failed_marshal_registry": "拡張機能レジストリのシリアル化に失敗しました: %w", + "extension_failed_parse_config": "設定ファイルの解析に失敗しました: %w", + "extension_failed_parse_registry": "拡張機能レジストリの解析に失敗しました: %w", + "extension_failed_read_config": "設定ファイルの読み込みに失敗しました: %w", + "extension_failed_read_output_file": "出力ファイルの読み取りに失敗しました: %w", + "extension_failed_read_registry": "拡張機能レジストリの読み込みに失敗しました: %w", + "extension_failed_register": "拡張機能の登録に失敗しました: %w", + "extension_failed_remove": "拡張機能の削除に失敗しました: %w", + "extension_failed_verify_executable": "実行ファイルの検証に失敗しました: %w", + "extension_file_config_label": " ファイル設定:\n", + "extension_invalid_config_path": "無効な設定パス: %w", + "extension_invalid_definition": "無効な拡張機能定義: %w", + "extension_invalid_timeout": "無効なタイムアウト値 '%s': '30s' や '1m' のような期間である必要があります: %w", + "extension_invalid_timeout_format": "無効なタイムアウト形式: %w", + "extension_name_contains_spaces": "拡張機能名 '%s' にスペースが含まれています - 名前にスペースは使用できません", + "extension_name_detail_label": "名前: %s\n", + "extension_name_empty": "拡張機能名は空にできません", + "extension_name_label": "拡張機能: %s\n", + "extension_name_required": "拡張機能名は必須です", + "extension_no_file_config": "ファイル設定が見つかりません", + "extension_no_output_file": "設定に出力ファイルが指定されていません", + "extension_not_found": "拡張機能 %s が見つかりません", + "extension_operation_not_found": "拡張機能 %s にオペレーション %s が見つかりません", + "extension_operation_required": "少なくとも1つの操作を定義する必要があります", + "extension_operations_label": " 操作:\n", + "extension_registered_success": "拡張機能が正常に登録されました:\n", + "extension_registry_not_initialized": "拡張機能レジストリが初期化されていません", + "extension_status_disabled": " ステータス: 無効 - ハッシュ検証失敗: %v\n", + "extension_status_enabled": " ステータス: 有効\n", + "extension_timeout_label": " タイムアウト: %s\n", + "extension_type_label": " タイプ: %s\n", + "extension_type_required": "拡張機能タイプは必須です", + "extension_version_label": " バージョン: %s\n", + "extension_warning_load_registry": "警告: 拡張機能レジストリを読み込めませんでした: %v\n", + "fabric_command_complete": "Fabricコマンド完了", + "fabric_command_complete_with_pattern": "Fabric:%s 完了", + "fetch_content_exceeds_limit": "fetch: コンテンツが大きすぎます: %dバイトを超えています", + "fetch_content_not_utf8": "fetch: コンテンツは有効なUTF-8テキストではありません", + "fetch_content_null_bytes": "fetch: コンテンツにnullバイトが含まれています", + "fetch_content_too_large": "fetch: コンテンツが大きすぎます: %dバイト(最大%dバイト)", + "fetch_error_create_request": "fetch: リクエスト作成エラー: %v", + "fetch_error_fetching_url": "fetch: URL取得エラー: %v", + "fetch_error_reading_response": "fetch: レスポンス読み取りエラー: %v", + "fetch_http_error": "fetch: HTTPエラー: %d - %s", + "fetch_unknown_operation": "fetch: 不明な操作 %q(対応: get)", + "fetch_unsupported_content_type": "fetch: サポートされていないコンテンツタイプ %q - テキストコンテンツのみ許可されています", + "file_already_exists_choose_different": "ファイル %s は既に存在します。別のファイル名を選択するか、既存のファイルを削除してください", + "file_already_exists_not_overwriting": "ファイル %s は既に存在するため、上書きしません。既存のファイルの名前を変更するか、別の名前を選択してください", + "file_manager_applied_operation": "%s操作を%sに適用しました", + "file_manager_empty_path": "ファイル変更%dの空のパス", + "file_manager_failed_create_directory": "ファイル変更%dのディレクトリ%sの作成に失敗しました: %w", + "file_manager_failed_parse_json": "%s JSONの解析に失敗しました: %w", + "file_manager_failed_write_file": "ファイル変更%dのファイル%sの書き込みに失敗しました: %w", + "file_manager_file_content_too_large": "ファイル変更%dのファイルコンテンツが大きすぎます: %dバイト", + "file_manager_invalid_format_no_json_array": "無効な%s形式: JSON配列が見つかりません", + "file_manager_invalid_format_unbalanced_brackets": "無効な%s形式: 括弧の対応が取れていません", + "file_manager_invalid_operation": "ファイル変更%dの無効な操作: %s", + "file_manager_suspicious_path": "ファイル変更%dの不審なパス: %s", + "gemini_audio_data_too_small": "オーディオデータが小さすぎます: %d バイト、最小要件: %d", + "gemini_empty_pcm_data": "空のPCMデータが提供されました", + "gemini_invalid_location_format": "無効な検索場所形式 %q: タイムゾーン(例: 'America/Los_Angeles')または言語コード(例: 'en-US')である必要があります", + "gemini_invalid_voice": "無効な音声 '%s'。有効な音声: %v", + "gemini_no_audio_data": "TTSモデルからオーディオデータが受信されませんでした", + "gemini_no_text_for_tts": "TTS生成用のテキストコンテンツが見つかりません", + "gemini_pcm_data_too_large": "PCMデータが大きすぎます: %d バイト、最大許容: %d", + "gemini_stream_error": "エラー: %v", + "gemini_tts_failed": "TTS生成に失敗しました: %w", + "gemini_unexpected_data_type": "予期しないデータ型: %s、オーディオデータが必要です", + "gemini_wav_data_invalid": "生成されたWAVデータが無効です: %d バイト、最小要件: %d", + "gemini_wav_generation_failed": "WAVファイルの生成に失敗しました: %w", + "grab_comments_from_youtube": "YouTube動画からコメントを取得してチャットに送信", + "grab_transcript_from_youtube": "YouTube動画から転写を取得してチャットに送信(デフォルトで使用)。", + "grab_transcript_with_timestamps": "YouTube動画からタイムスタンプ付きの転写を取得してチャットに送信", + "groups_items_number_out_of_range": "番号 %d は範囲外です", + "help_message": "このヘルプメッセージを表示", + "help_options_header": "ヘルプオプション:", + "html_readability_error": "HTML可読性を適用できないため、元の入力を使用します", + "i18n_download_failed": "言語 '%s' の翻訳のダウンロードに失敗しました: %v", + "i18n_load_failed": "翻訳ファイルの読み込みに失敗しました: %v", + "image_compression_jpeg_webp_only": "画像圧縮はJPEGおよびWebP形式でのみ使用できます。%s では使用できません", + "image_compression_range_error": "画像圧縮は0から100の間である必要があります。取得値:%d", + "image_dimensions_help": "画像サイズ:1024x1024、1536x1024、1024x1536、auto(デフォルト:auto)", + "image_file_already_exists": "画像ファイルが既に存在します: %s", + "image_parameters_require_image_file": "画像パラメータ(--image-size、--image-quality、--image-background、--image-compression)は --image-file と一緒に使用する必要があります", + "image_quality_help": "画像品質:low、medium、high、auto(デフォルト:auto)", + "invalid_config_path": "無効な設定パス: %w", + "invalid_image_background": "無効な画像背景 '%s'。サポートされている背景:opaque、transparent", + "invalid_image_file_extension": "無効な画像ファイル拡張子 '%s'。サポートされている形式:.png、.jpeg、.jpg、.webp", + "invalid_image_quality": "無効な画像品質 '%s'。サポートされている品質:low、medium、high、auto", + "invalid_image_size": "無効な画像サイズ '%s'。サポートされているサイズ:1024x1024、1536x1024、1024x1536、auto", + "jina_error_creating_request": "リクエストの作成エラー: %v", + "jina_error_reading_response_body": "レスポンスボディの読み取りエラー: %v", + "jina_error_sending_request": "リクエストの送信エラー: %v", "jina_label": "Jina AI", "jina_setup_description": "Jina AI サービス - ウェブページをクリーンでLLMフレンドリーなテキストとして取得", - "youtube_label": "YouTube", - "youtube_setup_description": "YouTube - 動画の転写(yt-dlp経由)とコメント/メタデータ(YouTube API経由)を取得", "language_label": "言語", - "language_setup_description": "言語 - AIプロバイダーのデフォルト出力言語", "language_output_question": "デフォルト出力言語を入力してください(例:zh_CN)", - "optional_marker": "(オプション)", - "required_marker": "【必須】", - "patterns_loader_label": "パターンローダー", - "patterns_setup_description": "パターン - パターンをダウンロードします", - "patterns_git_repo_url_label": "Git リポジトリ URL", - "patterns_git_repo_url_question": "パターン用のデフォルト Git リポジトリ URL を入力してください", - "patterns_git_repo_folder_label": "Git リポジトリ内のパターンフォルダー", - "patterns_git_repo_folder_question": "パターンが格納されている Git リポジトリ内のデフォルトフォルダーを入力してください", - "patterns_failed_create_temp_folder": "一時パターンフォルダーの作成に失敗しました: %w", - "patterns_downloading": "パターンをダウンロードして %s を構成しています...\\n", - "patterns_failed_download_from_git": "Git リポジトリからパターンをダウンロードできませんでした: %w", - "patterns_saving_updated_configuration": "💾 更新された設定を保存しています (パスを '%s' から '%s' に変更)...\\n", - "patterns_failed_move_patterns": "パターンを設定ディレクトリへ移動できませんでした: %w", - "patterns_download_success": "✅ パターンを %s に正常にダウンロードしてインストールしました\\n", - "patterns_failed_unique_file": "ユニークパターンファイルの作成に失敗しました: %w", - "patterns_failed_access_directory": "パターンディレクトリ '%s' にアクセスできませんでした: %w", - "patterns_preserve_warning": "警告: カスタムパターン '%s' を保持できませんでした: %v\\n", - "patterns_preserved_custom_pattern": "カスタムパターンを保持しました: %s\\n", - "patterns_failed_create_temp_dir": "一時ディレクトリの作成に失敗しました: %w", - "patterns_cloning_repository": "リポジトリ %s をクローン中 (パス: %s)...\\n", - "patterns_failed_download_from_repo": "%s からパターンをダウンロードできませんでした: %w", - "patterns_failed_read_temp_directory": "一時パターンディレクトリの読み取りに失敗しました: %w", - "patterns_no_patterns_migration_failed": "リポジトリのパス %s にパターンが見つからず、移行にも失敗しました: %w", - "patterns_downloaded_temp": "%d 個のパターンを一時ディレクトリにダウンロードしました\\n", - "patterns_detected_old_path": "🔄 旧パス 'patterns' を検出、'data/patterns' への移行を試みます...", - "patterns_warning_remove_test_folder": "警告: テスト用の一時フォルダー '%s' を削除できませんでした: %v\\n", - "patterns_found_new_path": "✅ 新しいパス '%s' で %d 個のパターンを確認、設定を更新します...\\n", - "patterns_failed_move_test_patterns": "テストパターンを一時フォルダーへ移動できませんでした: %w", - "patterns_unable_to_find_or_migrate": "現在のパス '%s' でパターンが見つからず、新しい構成への移行もできません", - "patterns_failed_read_directory": "パターンディレクトリの読み取りに失敗しました: %w", - "patterns_debug_included_custom_directory": "📂 カスタムディレクトリのパターンも含めました: %s\\n", - "patterns_warning_custom_directory": "警告: カスタムパターンディレクトリ %s を読み取れませんでした: %v\\n", - "patterns_no_patterns_found_in_directories": "%s と %s にパターンが見つかりません", - "patterns_no_patterns_found_in_directory": "ディレクトリ %s にパターンが見つかりません", - "patterns_failed_write_unique_file": "ユニークパターンファイルの書き込みに失敗しました: %w", - "patterns_unique_file_created": "📝 %d 個のパターンでユニークパターンファイルを作成しました\\n", - "patterns_no_patterns_copied": "%s にパターンをコピーできませんでした", - "patterns_failed_loaded_marker": "マーカーファイル '%s' を作成できませんでした: %w", - "strategies_label": "プロンプト戦略", - "strategies_setup_description": "戦略 - プロンプト戦略(chain of thought など)をダウンロード", - "strategies_git_repo_url_label": "Git リポジトリ URL", - "strategies_git_repo_url_question": "戦略用のデフォルト Git リポジトリ URL を入力してください", - "strategies_git_repo_folder_label": "Git リポジトリ内の戦略フォルダー", - "strategies_git_repo_folder_question": "戦略が保存されている Git リポジトリ内のデフォルトフォルダーを入力してください", - "strategies_downloading": "戦略をダウンロードして %s を構成しています...\\n", - "strategies_download_success": "✅ 戦略を %s に正常にダウンロードしてインストールしました\\n", - "strategies_home_dir_error": "ホームディレクトリを取得できませんでした: %v", - "strategies_failed_create_directory": "戦略ディレクトリを作成できませんでした: %w", - "strategies_cloning_repository": "リポジトリ %s をクローン中 (パス: %s)...\\n", - "strategies_failed_download": "戦略のダウンロードに失敗しました: %w", - "strategies_downloaded_count": "%d 件の戦略をダウンロードしました\\n", - "strategies_home_dir_fallback": "ホームディレクトリを取得できませんでした: %v、代わりにカレントディレクトリを使用します", - "strategy_not_found": "戦略 %s が見つかりません。'fabric --liststrategies' を実行して一覧を確認してください", - "strategies_none_found": "戦略が見つかりません。'fabric --setup' を実行して戦略をダウンロードしてください", - "strategies_available_header": "利用可能な戦略:", - "plugin_enter_value": "%v の %v を入力してください", - "plugin_enable_bool_question": "%v の %v を有効にしますか (true/false)", - "plugin_setup_skipped": "[%v] スキップされました\\n", - "plugin_question_bool": "%v%v (true/false、'%s' を使うには空欄のまま、値を削除するには '%v' と入力):", - "plugin_question_with_default": "%v%v ('%s' を使うには空欄のまま、値を削除するには '%v' と入力):", - "plugin_question_optional": "%v%v (スキップするには空欄のまま):", - "plugin_invalid_boolean_value": "無効なブール値です: %v", - "plugin_setting_not_valid": "%v=%v は無効です", - "plugin_invalid_bool": "無効な bool です: %q", - "ollama_num_ctx_must_be_finite": "num_ctx は有限数である必要があります", - "ollama_num_ctx_must_be_integer": "num_ctx は整数である必要があります。小数部分を持つ浮動小数点数を受け取りました", - "ollama_num_ctx_value_out_of_range": "num_ctx の値が範囲外です", - "ollama_num_ctx_must_be_positive": "num_ctx は正の値である必要があります。受け取った値: %d", - "ollama_num_ctx_value_too_large": "num_ctx の値が大きすぎます: %d", - "ollama_num_ctx_must_be_valid_number": "num_ctx は有効な数値である必要があります", - "ollama_num_ctx_must_be_valid_number_got": "num_ctx は有効な数値である必要があります。受け取った値: %s", - "ollama_num_ctx_invalid_type": "num_ctx は数値である必要があります。無効な型を受け取りました", - "ollama_num_ctx_exceeds_maximum": "num_ctx が許可される最大値 %d を超えています", - "ollama_error_reading_body": "ボディの読み取りエラー: %v", - "ollama_error_endpoint": "エンドポイントをテスト中", - "ollama_error_unmarshalling_body": "ボディのアンマーシャリングエラー: %v", - "ollama_invalid_num_ctx_in_request": "リクエストに無効な num_ctx があります: %v", - "ollama_warning_parse_variables": "警告: options.variables を JSON として解析できませんでした: %v", - "ollama_error_marshalling_body": "ボディのマーシャリングエラー: %v", + "language_setup_description": "言語 - AIプロバイダーのデフォルト出力言語", + "list_all_available_models": "すべての利用可能なモデルを一覧表示", + "list_all_contexts": "すべてのコンテキストを一覧表示", + "list_all_patterns": "すべてのパターンを一覧表示", + "list_all_registered_extensions": "すべての登録済み拡張機能を一覧表示", + "list_all_sessions": "すべてのセッションを一覧表示", + "list_all_strategies": "すべての戦略を一覧表示", + "list_all_vendors": "すべてのベンダーを一覧表示", + "list_gemini_tts_voices": "すべての利用可能なGemini TTS音声を一覧表示", + "list_transcription_models": "すべての利用可能な転写モデルを一覧表示", + "lmstudio_api_url_question": "%v の URL を入力してください(通常は %v です)", + "lmstudio_error_reading_response": "レスポンスの読み取りエラー: %w", + "lmstudio_failed_create_request": "リクエストの作成に失敗しました: %w", + "lmstudio_failed_decode_response": "レスポンスのデコードに失敗しました: %w", + "lmstudio_failed_marshal_payload": "ペイロードのシリアル化に失敗しました: %w", + "lmstudio_failed_send_request": "リクエストの送信に失敗しました: %w", + "lmstudio_invalid_response_missing_choices": "無効なレスポンス形式: 選択肢がないか空です", + "lmstudio_invalid_response_missing_content": "無効なレスポンス形式: メッセージにコンテンツがないか文字列ではありません", + "lmstudio_invalid_response_missing_message": "無効なレスポンス形式: 最初の選択肢にメッセージがありません", + "lmstudio_invalid_response_missing_text": "無効なレスポンス形式: 最初の選択肢にテキストがないか文字列ではありません", + "lmstudio_no_embeddings_returned": "埋め込みが返されませんでした", + "lmstudio_unexpected_status_code": "予期しないステータスコード: %d", + "model_context_length_ollama": "モデルのコンテキスト長(ollamaのみに影響)", + "model_for_transcription": "転写に使用するモデル(チャットモデルとは別)", + "no_description_available": "説明がありません", + "no_items_found": "%s がありません", + "no_notification_system_available": "利用可能な通知システムがありません", + "number_of_latest_patterns": "一覧表示する最新パターンの数", + "ollama_cannot_parse_url": "URL '%s' を解析できません: %v", + "ollama_chat_request_failed": "チャットリクエストが失敗しました: %v", + "ollama_empty_address": "空のアドレス", "ollama_error_building_chat_url": "/chat URL の構築エラー: %v", "ollama_error_creating_chat_request": "/chat リクエストの作成エラー: %v", - "ollama_failed_create_request": "リクエストの作成に失敗しました", + "ollama_error_endpoint": "エンドポイントをテスト中", "ollama_error_getting_chat_body": "/chat ボディの取得エラー: %v", - "ollama_upstream_non_2xx_body_unreadable": "アップストリームの Fabric サーバーが非 2xx ステータス %d を返し、ボディを読み取れませんでした: %v", - "ollama_upstream_non_2xx": "アップストリームの Fabric サーバーが非 2xx ステータス %d を返しました: %s", - "ollama_upstream_returned_status": "アップストリームの Fabric サーバーがステータス %d を返しました", - "ollama_error_prefix": "エラー: %s", + "ollama_error_marshalling_body": "ボディのマーシャリングエラー: %v", "ollama_error_parse_upstream_response": "エラー: アップストリームのレスポンスを解析できませんでした", - "ollama_failed_unmarshal_fabric_response": "Fabric レスポンスのアンマーシャルに失敗しました", - "ollama_error_writing_response": "レスポンスの書き込みエラー: %v", + "ollama_error_prefix": "エラー: %s", + "ollama_error_reading_body": "ボディの読み取りエラー: %v", "ollama_error_scanning_body": "ボディのスキャンエラー: %v", + "ollama_error_unmarshalling_body": "ボディのアンマーシャリングエラー: %v", + "ollama_error_writing_response": "レスポンスの書き込みエラー: %v", + "ollama_failed_create_request": "リクエストの作成に失敗しました", + "ollama_failed_decode_data_url": "データURLのデコードに失敗しました: %v", + "ollama_failed_fetch_image": "%s から画像の取得に失敗しました: %s", "ollama_failed_scan_sse_stream": "SSE レスポンスストリームのスキャンに失敗しました: %v", - "ollama_sse_buffer_limit": "SSE 行が 1MB バッファー制限を超えています - データ行が大きすぎます", - "ollama_warning_no_content": "警告: アップストリームの Fabric サーバーからコンテンツを受信しませんでした", - "ollama_no_content_from_upstream": "アップストリームの Fabric サーバーからコンテンツを受信しませんでした", - "ollama_empty_address": "空のアドレス", + "ollama_failed_unmarshal_fabric_response": "Fabric レスポンスのアンマーシャルに失敗しました", + "ollama_http_timeout_question": "HTTPタイムアウトを入力してください(例: 20m, 60s)", "ollama_invalid_address": "無効なアドレス: %w", "ollama_invalid_address_missing_host": "無効なアドレス: ホストが不足しています", "ollama_invalid_address_missing_hostname": "無効なアドレス: ホスト名が不足しています", "ollama_invalid_address_path_not_allowed": "無効なアドレス: 単純なアドレスにパスコンポーネントは許可されていません", - "extension_registry_not_initialized": "拡張機能レジストリが初期化されていません", - "extension_name_label": "拡張機能: %s\n", - "extension_status_disabled": " ステータス: 無効 - ハッシュ検証失敗: %v\n", - "extension_config_path_label": " 設定パス: %s\n\n", - "extension_status_enabled": " ステータス: 有効\n", - "extension_executable_label": " 実行ファイル: %s\n", - "extension_type_label": " タイプ: %s\n", - "extension_timeout_label": " タイムアウト: %s\n", - "extension_description_label": " 説明: %s\n", - "extension_version_label": " バージョン: %s\n", - "extension_operations_label": " 操作:\n", - "extension_command_template_label": " コマンドテンプレート: %s\n", - "extension_file_config_label": " ファイル設定:\n", - "extension_invalid_config_path": "無効な設定パス: %w", - "extension_failed_read_config": "設定ファイルの読み込みに失敗しました: %w", - "extension_failed_parse_config": "設定ファイルの解析に失敗しました: %w", - "extension_failed_register": "拡張機能の登録に失敗しました: %w", - "extension_invalid_timeout": "無効なタイムアウト値 '%s': '30s' や '1m' のような期間である必要があります: %w", - "extension_registered_success": "拡張機能が正常に登録されました:\n", - "extension_name_detail_label": "名前: %s\n", - "extension_failed_remove": "拡張機能の削除に失敗しました: %w", - "lmstudio_api_url_question": "%v の URL を入力してください(通常は %v です)", - "lmstudio_failed_create_request": "リクエストの作成に失敗しました: %w", - "lmstudio_failed_send_request": "リクエストの送信に失敗しました: %w", - "lmstudio_unexpected_status_code": "予期しないステータスコード: %d", - "lmstudio_failed_decode_response": "レスポンスのデコードに失敗しました: %w", - "lmstudio_failed_marshal_payload": "ペイロードのシリアル化に失敗しました: %w", - "lmstudio_error_reading_response": "レスポンスの読み取りエラー: %w", - "lmstudio_invalid_response_missing_choices": "無効なレスポンス形式: 選択肢がないか空です", - "lmstudio_invalid_response_missing_message": "無効なレスポンス形式: 最初の選択肢にメッセージがありません", - "lmstudio_invalid_response_missing_content": "無効なレスポンス形式: メッセージにコンテンツがないか文字列ではありません", - "lmstudio_invalid_response_missing_text": "無効なレスポンス形式: 最初の選択肢にテキストがないか文字列ではありません", - "lmstudio_no_embeddings_returned": "埋め込みが返されませんでした", - "extension_warning_load_registry": "警告: 拡張機能レジストリを読み込めませんでした: %v\n", - "extension_name_empty": "拡張機能名は空にできません", - "extension_name_contains_spaces": "拡張機能名 '%s' にスペースが含まれています - 名前にスペースは使用できません", - "extension_executable_not_found": "実行ファイルが見つかりません: %w", - "extension_failed_get_absolute_path": "絶対パスの取得に失敗しました: %w", - "extension_failed_hash_executable": "実行ファイルのハッシュ計算に失敗しました: %w", - "extension_invalid_definition": "無効な拡張機能定義: %w", - "extension_name_required": "拡張機能名は必須です", - "extension_executable_required": "実行ファイルパスは必須です", - "extension_type_required": "拡張機能タイプは必須です", - "extension_invalid_timeout_format": "無効なタイムアウト形式: %w", - "extension_operation_required": "少なくとも1つの操作を定義する必要があります", - "extension_cmd_template_required": "操作 %s にはコマンドテンプレートが必要です", - "extension_not_found": "拡張機能 %s が見つかりません", - "extension_config_hash_mismatch": "%s の設定ファイルのハッシュが一致しません", - "extension_failed_verify_executable": "実行ファイルの検証に失敗しました: %w", - "extension_executable_hash_mismatch": "%s の実行ファイルのハッシュが一致しません", - "extension_failed_marshal_registry": "拡張機能レジストリのシリアル化に失敗しました: %w", - "extension_failed_read_registry": "拡張機能レジストリの読み込みに失敗しました: %w", - "extension_failed_parse_registry": "拡張機能レジストリの解析に失敗しました: %w", - "extension_failed_get_extension": "拡張機能の取得に失敗しました: %w", - "extension_failed_format_command": "コマンドのフォーマットに失敗しました: %w", - "extension_empty_command": "フォーマット後のコマンドが空です", - "extension_operation_not_found": "拡張機能 %s にオペレーション %s が見つかりません", - "extension_executing_command": "コマンドを実行中: %s\n", - "extension_execution_failed_stderr": "実行に失敗しました: %w\nstderr: %s", - "extension_no_file_config": "ファイル設定が見つかりません", - "extension_no_output_file": "設定に出力ファイルが指定されていません", - "extension_execution_timed_out": "%v 後に実行がタイムアウトしました", - "extension_execution_failed_err": "実行に失敗しました: %w\nerr: %s", - "extension_failed_read_output_file": "出力ファイルの読み取りに失敗しました: %w", - "extension_failed_get_output_path": "出力パスの取得に失敗しました: %w\nerr: %s", - "spotify_failed_create_token_request": "トークンリクエストの作成に失敗しました: %w", - "spotify_failed_request_access_token": "アクセストークンのリクエストに失敗しました: %w", - "spotify_failed_get_access_token": "アクセストークンの取得に失敗しました: ステータス %d、レスポンス: %s", - "spotify_failed_decode_token_response": "トークンレスポンスのデコードに失敗しました: %w", - "spotify_failed_create_request": "リクエストの作成に失敗しました: %w", - "spotify_failed_execute_request": "リクエストの実行に失敗しました: %w", - "spotify_failed_read_response_body": "レスポンスボディの読み取りに失敗しました: %w", + "ollama_invalid_data_url_format": "無効なデータURLフォーマット", + "ollama_invalid_http_timeout_using_default": "無効なHTTPタイムアウト '%s': %v、デフォルトを使用します", + "ollama_invalid_num_ctx_in_request": "リクエストに無効な num_ctx があります: %v", + "ollama_no_content_from_upstream": "アップストリームの Fabric サーバーからコンテンツを受信しませんでした", + "ollama_num_ctx_exceeds_maximum": "num_ctx が許可される最大値 %d を超えています", + "ollama_num_ctx_invalid_type": "num_ctx は数値である必要があります。無効な型を受け取りました", + "ollama_num_ctx_must_be_finite": "num_ctx は有限数である必要があります", + "ollama_num_ctx_must_be_integer": "num_ctx は整数である必要があります。小数部分を持つ浮動小数点数を受け取りました", + "ollama_num_ctx_must_be_positive": "num_ctx は正の値である必要があります。受け取った値: %d", + "ollama_num_ctx_must_be_valid_number": "num_ctx は有効な数値である必要があります", + "ollama_num_ctx_must_be_valid_number_got": "num_ctx は有効な数値である必要があります。受け取った値: %s", + "ollama_num_ctx_value_out_of_range": "num_ctx の値が範囲外です", + "ollama_num_ctx_value_too_large": "num_ctx の値が大きすぎます: %d", + "ollama_sse_buffer_limit": "SSE 行が 1MB バッファー制限を超えています - データ行が大きすぎます", + "ollama_upstream_non_2xx": "アップストリームの Fabric サーバーが非 2xx ステータス %d を返しました: %s", + "ollama_upstream_non_2xx_body_unreadable": "アップストリームの Fabric サーバーが非 2xx ステータス %d を返し、ボディを読み取れませんでした: %v", + "ollama_upstream_returned_status": "アップストリームの Fabric サーバーがステータス %d を返しました", + "ollama_warning_no_content": "警告: アップストリームの Fabric サーバーからコンテンツを受信しませんでした", + "ollama_warning_parse_variables": "警告: options.variables を JSON として解析できませんでした: %v", + "openai_api_base_url_not_configured": "プロバイダー %s のAPIベースURLが設定されていません", + "openai_audio_ffmpeg_failed": "ffmpegが失敗しました: %v: %s", + "openai_audio_ffmpeg_not_found_install": "ffmpegが見つかりません: インストールしてください", + "openai_audio_file_exceeds_limit_enable_split": "ファイル %s は25MBの制限を超えています。--split-media-file を使用して自動分割を有効にしてください", + "openai_audio_file_exceeds_limit_splitting": "ファイル %s はサイズ制限を超えています... チャンクに分割中...", + "openai_audio_model_not_supported_for_transcription": "モデル '%s' は文字起こしに対応していません", + "openai_audio_running_ffmpeg_split_chunks": "ffmpegを実行して音声を %d 秒のチャンクに分割中...", + "openai_audio_unable_to_split_acceptable_size_chunks": "許容サイズのチャンクに分割できません", + "openai_audio_unsupported_audio_format": "サポートされていない音声フォーマット '%s'", + "openai_audio_using_model_to_transcribe_part": "モデル %s を使用してパート %d を文字起こし中(ファイル名: %s)...", + "openai_failed_to_create_models_url": "モデルURLの作成に失敗しました: %w", + "openai_image_failed_to_create_directory": "ディレクトリ %s の作成に失敗しました: %w", + "openai_image_failed_to_decode_image_data": "画像データのデコードに失敗しました: %w", + "openai_image_failed_to_save_image": "画像を %s に保存できませんでした: %w", + "openai_image_saved_to": "画像の保存先: %s", + "openai_model_no_image_generation": "モデル '%s' は画像生成をサポートしていません。サポートされているモデル: %s", + "openai_models_response_too_large": "プロバイダー %s からのモデルレスポンスが大きすぎます(>%d バイト)", + "openai_unable_to_parse_models_response": "モデルレスポンスの解析に失敗しました; 生のレスポンス: %s", + "openai_unexpected_status_code_read_error": "予期しないステータスコード: プロバイダー %s から %d (レスポンス本文の読み取りに失敗: %v)", + "openai_unexpected_status_code_with_body": "予期しないステータスコード: プロバイダー %s から %d、レスポンス本文: %s", + "openai_warning_model_no_image_generation": "警告: モデル '%s' は画像生成をサポートしていません。サポートされているモデル: %s。画像生成には -m gpt-5.2 の使用を検討してください。\n", + "optional_marker": "(オプション)", + "options_placeholder": "[オプション]", + "output_entire_session": "セッション全体(一時的なものも含む)を出力ファイルに出力", + "output_full": "出力:%s", + "output_raw_list_shell_completion": "生リストをヘッダー/フォーマットなしで出力(シェル補完用)", + "output_to_file": "ファイルに出力", + "output_truncated": "出力:%s...", + "output_video_metadata": "動画メタデータを出力", + "path_to_yaml_config": "YAML設定ファイルのパス", + "pattern_not_found_list_available": "パターン '%s' が見つかりません。'fabric -l'で利用可能なパターンを確認してください", + "pattern_not_found_no_patterns": "パターン '%s' が見つかりません。\n\nパターンがインストールされていません!解決するには:\n • 'fabric --setup'を実行してパターンを設定・ダウンロード\n • または'fabric -U'を実行してパターンをダウンロード/更新", + "pattern_variables_help": "パターン変数の値、例:-v=#role:expert -v=#points:30", + "patterns_cloning_repository": "リポジトリ %s をクローン中 (パス: %s)...\\n", + "patterns_debug_included_custom_directory": "📂 カスタムディレクトリのパターンも含めました: %s\\n", + "patterns_detected_old_path": "🔄 旧パス 'patterns' を検出、'data/patterns' への移行を試みます...", + "patterns_download_success": "✅ パターンを %s に正常にダウンロードしてインストールしました\\n", + "patterns_downloaded_temp": "%d 個のパターンを一時ディレクトリにダウンロードしました\\n", + "patterns_downloading": "パターンをダウンロードして %s を構成しています...\\n", + "patterns_failed_access_directory": "パターンディレクトリ '%s' にアクセスできませんでした: %w", + "patterns_failed_create_temp_dir": "一時ディレクトリの作成に失敗しました: %w", + "patterns_failed_create_temp_folder": "一時パターンフォルダーの作成に失敗しました: %w", + "patterns_failed_download_from_git": "Git リポジトリからパターンをダウンロードできませんでした: %w", + "patterns_failed_download_from_repo": "%s からパターンをダウンロードできませんでした: %w", + "patterns_failed_loaded_marker": "マーカーファイル '%s' を作成できませんでした: %w", + "patterns_failed_move_patterns": "パターンを設定ディレクトリへ移動できませんでした: %w", + "patterns_failed_move_test_patterns": "テストパターンを一時フォルダーへ移動できませんでした: %w", + "patterns_failed_read_directory": "パターンディレクトリの読み取りに失敗しました: %w", + "patterns_failed_read_temp_directory": "一時パターンディレクトリの読み取りに失敗しました: %w", + "patterns_failed_unique_file": "ユニークパターンファイルの作成に失敗しました: %w", + "patterns_failed_write_unique_file": "ユニークパターンファイルの書き込みに失敗しました: %w", + "patterns_found_new_path": "✅ 新しいパス '%s' で %d 個のパターンを確認、設定を更新します...\\n", + "patterns_git_repo_folder_question": "パターンが格納されている Git リポジトリ内のデフォルトフォルダーを入力してください", + "patterns_git_repo_url_question": "パターン用のデフォルト Git リポジトリ URL を入力してください", + "patterns_loader_label": "パターンローダー", + "patterns_no_patterns_copied": "%s にパターンをコピーできませんでした", + "patterns_no_patterns_found_in_directories": "%s と %s にパターンが見つかりません", + "patterns_no_patterns_found_in_directory": "ディレクトリ %s にパターンが見つかりません", + "patterns_no_patterns_migration_failed": "リポジトリのパス %s にパターンが見つからず、移行にも失敗しました: %w", + "patterns_not_found_header": "⚠️ パターンが見つかりません!", + "patterns_option_run_setup": "オプション1(推奨): セットアップを実行してパターンをダウンロード", + "patterns_option_run_setup_command": "fabric --setup", + "patterns_option_run_update": "オプション2: パターンを直接ダウンロード/更新", + "patterns_option_run_update_command": "fabric -U", + "patterns_preserve_warning": "警告: カスタムパターン '%s' を保持できませんでした: %v\\n", + "patterns_preserved_custom_pattern": "カスタムパターンを保持しました: %s\\n", + "patterns_required_to_work": "Fabricを動作させるにはパターンが必要です。解決するには:", + "patterns_saving_updated_configuration": "💾 更新された設定を保存しています (パスを '%s' から '%s' に変更)...\\n", + "patterns_setup_description": "パターン - パターンをダウンロードします", + "patterns_unable_to_find_or_migrate": "現在のパス '%s' でパターンが見つからず、新しい構成への移行もできません", + "patterns_unique_file_created": "📝 %d 個のパターンでユニークパターンファイルを作成しました\\n", + "patterns_warning_custom_directory": "警告: カスタムパターンディレクトリ %s を読み取れませんでした: %v\\n", + "patterns_warning_remove_test_folder": "警告: テスト用の一時フォルダー '%s' を削除できませんでした: %v\\n", + "perplexity_api_key_not_configured": "%s のAPIキーが設定されていません。環境変数 %s を設定するか、'fabric --setup' を実行して %s を設定してください", + "perplexity_api_request_failed": "Perplexity APIリクエストが失敗しました: %w", + "perplexity_citations_header": "\n\n**引用:**\n", + "perplexity_failed_configure": "Perplexityの設定に失敗しました: %w", + "perplexity_streaming_error": "Perplexityストリーミングエラー: %v", + "plugin_configured": " ✓", + "plugin_enable_bool_question": "%v の %v を有効にしますか (true/false)", + "plugin_enter_value": "%v の %v を入力してください", + "plugin_invalid_bool": "無効な bool です: %q", + "plugin_invalid_boolean_value": "無効なブール値です: %v", + "plugin_not_configured": " ⚠️ 未設定", + "plugin_question_bool": "%v%v (true/false、'%s' を使うには空欄のまま、値を削除するには '%v' と入力):", + "plugin_question_optional": "%v%v (スキップするには空欄のまま):", + "plugin_question_with_default": "%v%v ('%s' を使うには空欄のまま、値を削除するには '%v' と入力):", + "plugin_setting_not_valid": "%v=%v は無効です", + "plugin_setup_configured": "[%v] 設定済み", + "plugin_setup_skipped": "[%v] スキップされました\\n", + "prefer_playlist_over_video": "URLに両方のIDが存在する場合、動画よりプレイリストを優先", + "print_context": "コンテキストを出力", + "print_current_version": "現在のバージョンを出力", + "print_session": "セッションを出力", + "register_new_extension": "設定ファイルパスから新しい拡張機能を登録", + "remove_registered_extension": "名前で登録済み拡張機能を削除", + "required_marker": "【必須】", + "run_setup_for_reconfigurable_parts": "fabricのすべての再設定可能な部分のセットアップを実行", + "save_generated_image_to_file": "生成された画像を指定ファイルパスに保存(例:'output.png')", + "scrape_website_url": "Jina AIを使用してウェブサイトURLをマークダウンにスクレイピング", + "scraping_not_configured": "スクレイピング機能が設定されていません。スクレイピングを有効にするためにJinaを設定してください", + "search_question_jina": "Jina AIを使用した検索質問", + "seed_for_lmm_generation": "LMM生成で使用するシード", + "send_desktop_notification": "コマンド完了時にデスクトップ通知を送信", + "serve_fabric_api_ollama_endpoints": "ollamaエンドポイント付きのFabric REST APIを提供", + "serve_fabric_rest_api": "Fabric REST APIを提供", + "set_debug_level": "デバッグレベルを設定(0=オフ、1=基本、2=詳細、3=トレース)", + "set_frequency_penalty": "頻度ペナルティを設定", + "set_location_web_search": "ウェブ検索結果の場所を設定(例:'America/Los_Angeles')", + "set_presence_penalty": "プレゼンスペナルティを設定", + "set_reasoning_thinking_level": "推論/思考レベルを設定(例:off、low、medium、high、またはAnthropicやGoogle Gemini用の数値トークン)", + "set_temperature": "温度を設定", + "set_top_p": "Top Pを設定", + "setup_add_more_providers_later": "'fabric --setup'で後からプロバイダーを追加できます", + "setup_ai_provider_required": "Fabricを動作させるには、少なくとも1つのAIプロバイダーが必要です。", + "setup_available_ai_providers": "利用可能なAIプロバイダー:", + "setup_available_plugins": "利用可能なプラグイン:", + "setup_complete_header": "✅ セットアップ完了!Fabricを使用できます。", + "setup_configure_more": "• その他の設定: fabric --setup", + "setup_enter_ai_provider_number": "AIプロバイダー番号", + "setup_failed_download_patterns": "パターンのダウンロードに失敗しました: %w", + "setup_failed_download_strategies": "ストラテジーのダウンロードに失敗しました: %w", + "setup_failed_set_defaults": "デフォルトのベンダーとモデルの設定に失敗しました: %w", + "setup_invalid_selection": "無効な選択: %s", + "setup_list_patterns": "• 利用可能なパターンを一覧表示: fabric -l", + "setup_next_steps": "次のステップ:", + "setup_no_ai_provider_selected": "AIプロバイダーが選択されていません - 少なくとも1つは必要です", + "setup_optional_configuration_header": "━━━ オプション設定 ━━━\n\nオプションツール", + "setup_plugin_number": "プラグイン番号", + "setup_plugin_prompt": "セットアップするプラグインの番号を入力してください", + "setup_required_configuration_header": "━━━ 必須設定 ━━━\n\nAIベンダー [少なくとも1つ必要]", + "setup_required_tools": "必須ツール", + "setup_step_configure_ai_provider": "🤖 ステップ3: AIプロバイダーを設定", + "setup_step_downloading_patterns": "📥 ステップ1: パターンをダウンロード中(Fabricの動作に必要です)...", + "setup_step_downloading_strategies": "📥 ステップ2: ストラテジーをダウンロード中(Fabricの動作に必要です)...", + "setup_step_setting_defaults": "⚙️ ステップ4: デフォルトのベンダーとモデルを設定中...", + "setup_try_pattern": "• パターンを試す: echo 'テキスト' | fabric --pattern summarize", + "setup_validation_ai_provider_configured": "✓ AIプロバイダー設定済み", + "setup_validation_ai_provider_missing": "✗ AIプロバイダー未設定 - Fabricの動作に必要です", + "setup_validation_complete": "✓ 必要なコンポーネントがすべて設定されています!", + "setup_validation_defaults_configured": "✓ デフォルトのベンダー/モデル設定済み: %s/%s", + "setup_validation_defaults_missing": "✗ デフォルトのベンダー/モデル未設定 - Fabricの動作に必要です", + "setup_validation_header": "設定状況:", + "setup_validation_incomplete_help": "'fabric --setup'を再度実行して不足項目を設定するか、\n'fabric -U'を実行してパターンとストラテジーをダウンロードしてください。", + "setup_validation_incomplete_warning": "⚠️ セットアップ未完了!必要なコンポーネントが不足しています。", + "setup_validation_patterns_configured": "✓ パターンダウンロード済み", + "setup_validation_patterns_missing": "✗ パターンが見つかりません - Fabricの動作に必要です", + "setup_validation_strategies_configured": "✓ ストラテジーダウンロード済み", + "setup_validation_strategies_missing": "✗ ストラテジーが見つかりません - Fabricの動作に必要です", + "setup_welcome_header": "🎉 Fabricへようこそ!セットアップを始めましょう。", + "show_dry_run": "実際に送信せずにモデルに送信される内容を表示", + "specify_language_code": "チャットの言語コードを指定、例: -g=en -g=zh -g=pt-BR -g=pt-PT", + "specify_vendor_for_model": "選択したモデルのベンダーを指定(例:-V \"LM Studio\" -m openai/gpt-oss-20b)", + "split_media_files_ffmpeg": "25MBを超える音声/動画ファイルをffmpegを使用して分割", "spotify_api_request_failed": "APIリクエストが失敗しました: ステータス %d、レスポンス: %s", - "spotify_failed_parse_show_metadata": "番組メタデータの解析に失敗しました: %w", - "spotify_failed_parse_episode_metadata": "エピソードメタデータの解析に失敗しました: %w", - "spotify_search_failed": "検索に失敗しました: %w", - "spotify_failed_parse_search_results": "検索結果の解析に失敗しました: %w", + "spotify_audio_preview_label": "**オーディオプレビュー**: %s", + "spotify_client_id_question": "Spotify CLIENT IDを入力してください", + "spotify_client_secret_question": "Spotify CLIENT SECRETを入力してください", + "spotify_description_header": "## 説明", + "spotify_duration_label": "**再生時間**: %d 分", + "spotify_episode_header": "# Spotifyエピソード", + "spotify_error_getting_metadata": "Spotifyメタデータの取得エラー:%v", + "spotify_explicit_label": "**露骨な表現**: %v", + "spotify_failed_create_request": "リクエストの作成に失敗しました: %w", + "spotify_failed_create_token_request": "トークンリクエストの作成に失敗しました: %w", + "spotify_failed_decode_token_response": "トークンレスポンスのデコードに失敗しました: %w", + "spotify_failed_execute_request": "リクエストの実行に失敗しました: %w", + "spotify_failed_get_access_token": "アクセストークンの取得に失敗しました: ステータス %d、レスポンス: %s", "spotify_failed_get_show_episodes": "番組エピソードの取得に失敗しました: %w", + "spotify_failed_parse_episode_metadata": "エピソードメタデータの解析に失敗しました: %w", "spotify_failed_parse_episodes": "エピソードの解析に失敗しました: %w", - "template_file_log_validating_path": "File: パス %q を検証中", - "template_file_error_path_contains_parent_ref": "file: パスに '..' を含めることはできません", + "spotify_failed_parse_search_results": "検索結果の解析に失敗しました: %w", + "spotify_failed_parse_show_metadata": "番組メタデータの解析に失敗しました: %w", + "spotify_failed_read_response_body": "レスポンスボディの読み取りに失敗しました: %w", + "spotify_failed_request_access_token": "アクセストークンのリクエストに失敗しました: %w", + "spotify_invalid_url": "無効なSpotify URL、番組またはエピソードIDを取得できません:'%s'", + "spotify_label": "Spotify", + "spotify_language_field_label": "**言語**: %s", + "spotify_languages_label": "**言語**: %s", + "spotify_media_type_label": "**メディアタイプ**: %s", + "spotify_no_episode_found": "ID %s のエピソードが見つかりません", + "spotify_no_show_found": "ID %s の番組が見つかりません", + "spotify_not_configured": "Spotifyが設定されていません。セットアップ手順を実行してください", + "spotify_publisher_label": "**出版社**: %s", + "spotify_release_date_label": "**リリース日**: %s", + "spotify_search_description_label": "- **説明**: %s", + "spotify_search_episodes_label": "- **エピソード数**: %d", + "spotify_search_failed": "検索に失敗しました: %w", + "spotify_search_publisher_label": "- **出版社**: %s", + "spotify_search_results_header": "# Spotify検索結果", + "spotify_search_url_label": "- **URL**: %s", + "spotify_setup_description": "Spotify - Spotifyからポッドキャスト/番組のメタデータを取得", + "spotify_show_header": "# Spotifyポッドキャスト/番組", + "spotify_show_name_label": "**番組**: %s", + "spotify_title_label": "**タイトル**: %s", + "spotify_total_episodes_label": "**エピソード合計**: %d", + "spotify_url_label": "**URL**: %s", + "start_tag_thinking_sections": "思考セクションの開始タグ", + "strategies_available_header": "利用可能な戦略:", + "strategies_cloning_repository": "リポジトリ %s をクローン中 (パス: %s)...\\n", + "strategies_download_success": "✅ 戦略を %s に正常にダウンロードしてインストールしました\\n", + "strategies_downloaded_count": "%d 件の戦略をダウンロードしました\\n", + "strategies_downloading": "戦略をダウンロードして %s を構成しています...\\n", + "strategies_failed_create_directory": "戦略ディレクトリを作成できませんでした: %w", + "strategies_failed_download": "戦略のダウンロードに失敗しました: %w", + "strategies_git_repo_folder_question": "戦略が保存されている Git リポジトリ内のデフォルトフォルダーを入力してください", + "strategies_git_repo_url_question": "戦略用のデフォルト Git リポジトリ URL を入力してください", + "strategies_home_dir_error": "ホームディレクトリを取得できませんでした: %v", + "strategies_home_dir_fallback": "ホームディレクトリを取得できませんでした: %v、代わりにカレントディレクトリを使用します", + "strategies_label": "プロンプト戦略", + "strategies_none_found": "戦略が見つかりません。'fabric --setup' を実行して戦略をダウンロードしてください", + "strategies_setup_description": "戦略 - プロンプト戦略(chain of thought など)をダウンロード", + "strategy_not_found": "戦略 %s が見つかりません。'fabric --liststrategies' を実行して一覧を確認してください", + "stream_help": "ストリーミング", + "suppress_thinking_tags": "思考タグで囲まれたテキストを抑制", + "template_datetime_error_invalid_number": "invalid number in relative time: %q", + "template_datetime_error_invalid_relative_format": "invalid relative time format", + "template_datetime_error_invalid_unit": "invalid time unit: %q", + "template_datetime_error_relative_requires_value": "relative time requires a value", + "template_datetime_error_unknown_operation": "datetime: unknown operation %q", "template_file_error_expand_home_dir": "file: ホームディレクトリを展開できませんでした: %v", - "template_file_log_cleaned_path": "File: 正規化後のパス %q", - "template_file_log_operation_value": "File: operation=%q value=%q", - "template_file_error_tail_requires_path_lines": "file: tail には path|lines 形式が必要です", "template_file_error_invalid_line_count": "file: 無効な行数 %q", "template_file_error_line_count_positive": "file: 行数は正の値である必要があります", - "template_file_log_tail_returning_lines": "File: tail は %d 行を返します", - "template_file_error_stat_file": "file: ファイルの状態を取得できませんでした: %v", - "template_file_error_size_exceeds_limit": "file: サイズ %d は上限 %d バイトを超えています", - "template_file_error_read_file": "file: 読み取れませんでした: %v", - "template_file_log_read_bytes": "File: %d バイトを読み取りました", - "template_file_log_exists_for_path": "File: パス %q の exists=%v", - "template_file_log_size_for_path": "File: パス %q の size=%d", - "template_file_log_modified_for_path": "File: パス %q の modified=%q", - "template_file_error_unknown_operation": "file: 不明な操作 %q(対応: read, tail, exists, size, modified)", - "template_file_log_reading_last_lines": "File: %q から最後の %d 行を読み取り中", "template_file_error_open_file": "file: 開けませんでした: %v", - "template_file_error_stat_open_file": "file: 状態を取得できませんでした: %v", + "template_file_error_path_contains_parent_ref": "file: パスに '..' を含めることはできません", + "template_file_error_read_file": "file: 読み取れませんでした: %v", "template_file_error_scanner_read": "file: 読み取りエラー: %v", + "template_file_error_size_exceeds_limit": "file: サイズ %d は上限 %d バイトを超えています", + "template_file_error_stat_file": "file: ファイルの状態を取得できませんでした: %v", + "template_file_error_stat_open_file": "file: 状態を取得できませんでした: %v", + "template_file_error_tail_requires_path_lines": "file: tail には path|lines 形式が必要です", + "template_file_error_unknown_operation": "file: 不明な操作 %q(対応: read, tail, exists, size, modified)", + "template_file_log_cleaned_path": "File: 正規化後のパス %q", + "template_file_log_exists_for_path": "File: パス %q の exists=%v", + "template_file_log_modified_for_path": "File: パス %q の modified=%q", + "template_file_log_operation_value": "File: operation=%q value=%q", + "template_file_log_read_bytes": "File: %d バイトを読み取りました", "template_file_log_read_total_return_last": "File: 合計 %d 行を読み取り、最後の %d 行を返します", - "chatter_error_no_session_pattern_user_messages": "セッション、パターン、またはユーザーメッセージが指定されていません", - "chatter_error_no_messages_provided": "メッセージが指定されていません", - "chatter_log_stream_usage_metadata": "[メタデータ] 入力: %d | 出力: %d | 合計: %d", - "chatter_error_stream_update": "エラー: %s", - "chatter_error_empty_response": "空の応答", - "chatter_warning_parse_file_changes_failed": "警告: ファイル変更の解析に失敗しました: %v", - "chatter_warning_get_current_directory_failed": "警告: 現在のディレクトリの取得に失敗しました: %v", - "chatter_warning_apply_file_changes_failed": "警告: ファイル変更の適用に失敗しました: %v", - "chatter_info_file_changes_applied_successfully": "ファイル変更を正常に適用しました。", - "chatter_help_review_changes_with_git_diff": "git を使用している場合は、'git diff' で変更を確認できます。", - "chatter_error_find_session": "セッション %s が見つかりませんでした: %v", - "chatter_error_find_context": "コンテキスト %s が見つかりませんでした: %v", - "chatter_error_get_pattern": "パターン %s を取得できませんでした: %v", - "chatter_error_load_strategy": "戦略 %s を読み込めませんでした: %v", - "chatter_prompt_enforce_response_language": "%s\n\n重要: まず、このプロンプトで提供された指示をユーザー入力を使って実行してください。次に、指示の実行中に生成されるセクション見出しやタイトルを含む最終回答全体を、必ず %s 言語のみで記述してください。", - "vertexai_failed_google_credentials": "Google認証情報の取得に失敗しました(ADCが設定されていることを確認してください): %w", - "vertexai_no_models_found": "どのパブリッシャーからもモデルが見つかりませんでした", - "vertexai_no_conversational_models": "会話モデルが見つかりませんでした", + "template_file_log_reading_last_lines": "File: %q から最後の %d 行を読み取り中", + "template_file_log_size_for_path": "File: パス %q の size=%d", + "template_file_log_tail_returning_lines": "File: tail は %d 行を返します", + "template_file_log_validating_path": "File: パス %q を検証中", + "template_sys_error_env_requires_var": "env: variable name required", + "template_sys_error_home": "failed to get home directory: %v", + "template_sys_error_hostname": "failed to get hostname: %v", + "template_sys_error_pwd": "failed to get working directory: %v", + "template_sys_error_unknown_operation": "sys: unknown operation %q", + "template_sys_error_user": "failed to get current user: %v", + "transcription_model_required": "転写モデルが必要です(--transcribe-model を使用)", + "transparent_background_png_webp_only": "透明背景はPNGおよびWebP形式でのみ使用できます。%s では使用できません", + "tts_audio_generated_successfully": "TTS音声が正常に生成され、保存されました:%s\n", + "tts_model_requires_audio_output": "TTSモデル '%s' には音声出力が必要です。-oフラグで音声出力ファイルを指定してください(例:-o output.wav)", + "tts_voice_name": "サポートされているモデルのTTS音声名(例:Kore、Charon、Puck)", + "unsupported_conversion": "%v から %v への変換はサポートされていません", + "update_patterns": "パターンを更新", + "usage_header": "使用法:", + "use_model_defaults_raw_help": "チャットオプション(temperature、top_p など)を送信せずにモデルのデフォルトを使用します。OpenAI 互換プロバイダーにのみ適用されます。Anthropic モデルは常に、モデル固有の要件に準拠するためにスマートなパラメーター選択を使用します。", + "vendor_no_transcription_support": "ベンダー %s は音声転写をサポートしていません", + "vendor_not_configured": "ベンダー %s が設定されていません", + "vendor_not_found": "ベンダー %s が見つかりません", + "vendors_no_ai_vendors_configured_read_models": "モデルを読み取るためのAIベンダーが設定されていません", "vertexai_client_not_initialized": "VertexAIクライアントが初期化されていません", - "vertexai_no_valid_messages": "送信する有効なメッセージがありません", - "vertexai_no_content_in_response": "レスポンスにコンテンツがありません", - "vertexai_failed_gemini_client": "Geminiクライアントの作成に失敗しました: %w", - "vertexai_stream_error": "エラー: %v", - "gemini_invalid_location_format": "無効な検索場所形式 %q: タイムゾーン(例: 'America/Los_Angeles')または言語コード(例: 'en-US')である必要があります", - "gemini_stream_error": "エラー: %v", - "gemini_no_text_for_tts": "TTS生成用のテキストコンテンツが見つかりません", - "gemini_invalid_voice": "無効な音声 '%s'。有効な音声: %v", - "gemini_tts_failed": "TTS生成に失敗しました: %w", - "gemini_unexpected_data_type": "予期しないデータ型: %s、オーディオデータが必要です", - "gemini_audio_data_too_small": "オーディオデータが小さすぎます: %d バイト、最小要件: %d", - "gemini_wav_generation_failed": "WAVファイルの生成に失敗しました: %w", - "gemini_wav_data_invalid": "生成されたWAVデータが無効です: %d バイト、最小要件: %d", - "gemini_no_audio_data": "TTSモデルからオーディオデータが受信されませんでした", - "gemini_empty_pcm_data": "空のPCMデータが提供されました", - "gemini_pcm_data_too_large": "PCMデータが大きすぎます: %d バイト、最大許容: %d", - "bedrock_unable_load_aws_config": "AWS設定を読み込めませんでした: %w", - "bedrock_aws_region_label": "AWSリージョン", - "bedrock_invalid_aws_region": "無効なAWSリージョン: %s", - "bedrock_unable_load_aws_config_with_region": "リージョン %s でAWS設定を読み込めませんでした: %w", - "bedrock_failed_list_foundation_models": "基盤モデルの一覧表示に失敗しました: %w", - "bedrock_failed_list_inference_profiles": "推論プロファイルの一覧表示に失敗しました: %w", - "bedrock_panic_sendstream": "SendStreamでパニックが発生しました: %v", - "bedrock_conversestream_failed": "モデル %s のbedrock conversestreamが失敗しました: %w", - "bedrock_unknown_stream_event_type": "不明なストリームイベントタイプ: %T", - "bedrock_converse_failed": "モデル %s のbedrock converseが失敗しました: %w", - "bedrock_unexpected_response_type": "予期しないレスポンスタイプ: %T", - "bedrock_empty_response_content": "空のレスポンスコンテンツ", - "bedrock_unexpected_content_block_type": "予期しないコンテンツブロックタイプ: %T", - "fetch_unknown_operation": "fetch: 不明な操作 %q(対応: get)", - "fetch_content_not_utf8": "fetch: コンテンツは有効なUTF-8テキストではありません", - "fetch_content_null_bytes": "fetch: コンテンツにnullバイトが含まれています", - "fetch_error_create_request": "fetch: リクエスト作成エラー: %v", - "fetch_error_fetching_url": "fetch: URL取得エラー: %v", - "fetch_http_error": "fetch: HTTPエラー: %d - %s", - "fetch_content_too_large": "fetch: コンテンツが大きすぎます: %dバイト(最大%dバイト)", - "fetch_unsupported_content_type": "fetch: サポートされていないコンテンツタイプ %q - テキストコンテンツのみ許可されています", - "fetch_error_reading_response": "fetch: レスポンス読み取りエラー: %v", - "fetch_content_exceeds_limit": "fetch: コンテンツが大きすぎます: %dバイトを超えています", - "file_manager_invalid_format_no_json_array": "無効な%s形式: JSON配列が見つかりません", - "file_manager_invalid_format_unbalanced_brackets": "無効な%s形式: 括弧の対応が取れていません", - "file_manager_failed_parse_json": "%s JSONの解析に失敗しました: %w", - "file_manager_invalid_operation": "ファイル変更%dの無効な操作: %s", - "file_manager_empty_path": "ファイル変更%dの空のパス", - "file_manager_suspicious_path": "ファイル変更%dの不審なパス: %s", - "file_manager_file_content_too_large": "ファイル変更%dのファイルコンテンツが大きすぎます: %dバイト", - "file_manager_failed_create_directory": "ファイル変更%dのディレクトリ%sの作成に失敗しました: %w", - "file_manager_failed_write_file": "ファイル変更%dのファイル%sの書き込みに失敗しました: %w", - "file_manager_applied_operation": "%s操作を%sに適用しました", - "vertexai_error_create_request": "リクエストの作成に失敗しました: %w", - "vertexai_error_request_failed": "リクエストが失敗しました: %w", "vertexai_error_api_status": "APIはステータス%dを返しました: %s", - "vertexai_error_read_response": "レスポンスの読み取りに失敗しました: %w", - "vertexai_error_response_too_large": "レスポンスが大きすぎます (>%dバイト)", + "vertexai_error_create_request": "リクエストの作成に失敗しました: %w", "vertexai_error_parse_response": "レスポンスの解析に失敗しました: %w", - "copilot_tenant_client_id_required": "テナントIDとクライアントIDが必要です", - "copilot_failed_create_conversation": "会話の作成に失敗しました: %w", - "copilot_failed_send_message": "メッセージの送信に失敗しました: %w", - "copilot_failed_stream_message": "メッセージのストリーミングに失敗しました: %w", - "copilot_error_create_conversation": "会話の作成に失敗しました: %s - %s", - "copilot_error_chat_request": "チャットリクエストが失敗しました: %s - %s", - "copilot_error_stream_request": "ストリームリクエストが失敗しました: %s - %s", - "copilot_debug_created_conversation": "Copilot会話を作成しました: %s", - "copilot_debug_failed_parse_sse_event": "SSEイベントの解析に失敗しました: %v", - "copilot_error_reading_stream": "ストリームの読み取りエラー: %w" + "vertexai_error_read_response": "レスポンスの読み取りに失敗しました: %w", + "vertexai_error_request_failed": "リクエストが失敗しました: %w", + "vertexai_error_response_too_large": "レスポンスが大きすぎます (>%dバイト)", + "vertexai_failed_gemini_client": "Geminiクライアントの作成に失敗しました: %w", + "vertexai_failed_google_credentials": "Google認証情報の取得に失敗しました(ADCが設定されていることを確認してください): %w", + "vertexai_no_content_in_response": "レスポンスにコンテンツがありません", + "vertexai_no_conversational_models": "会話モデルが見つかりませんでした", + "vertexai_no_models_found": "どのパブリッシャーからもモデルが見つかりませんでした", + "vertexai_no_valid_messages": "送信する有効なメッセージがありません", + "vertexai_stream_error": "エラー: %v", + "wipe_context": "コンテキストをクリア", + "wipe_session": "セッションをクリア", + "youtube_api_key_required": "コメントとメタデータにはYouTube APIキーが必要です。設定するには 'fabric --setup' を実行してください", + "youtube_auth_required_bot_detection": "YouTubeは認証を必要としています(ボット検出)。--yt-dlp-args='--cookies-from-browser BROWSER'を使用してください。BROWSERはchrome、firefox、braveなどです。", + "youtube_empty_seconds_string": "空の秒文字列", + "youtube_error_getting_comments": "コメント取得エラー: %v", + "youtube_error_getting_metadata": "動画のメタデータ取得エラー: %v", + "youtube_error_getting_video_details": "動画の詳細取得エラー: %v", + "youtube_error_parsing_duration": "動画の長さ解析エラー: %v", + "youtube_error_saving_csv": "動画のCSV保存エラー: %v", + "youtube_failed_create_temp_dir": "一時ディレクトリの作成に失敗しました: %v", + "youtube_failed_fetch_comments": "コメントの取得に失敗しました: %v", + "youtube_failed_walk_directory": "ディレクトリの走査に失敗しました: %v", + "youtube_invalid_duration_string": "無効な長さ文字列: %s", + "youtube_invalid_seconds_format": "無効な秒形式 %q: %w", + "youtube_invalid_timestamp_format": "無効なタイムスタンプ形式: %s", + "youtube_invalid_url": "無効なYouTube URL、動画またはプレイリストIDを取得できません: '%s'", + "youtube_invalid_ytdlp_arguments": "無効なyt-dlp引数: %v", + "youtube_label": "YouTube", + "youtube_no_transcript_content": "VTTファイルにトランスクリプトコンテンツが見つかりません", + "youtube_no_url_provided": "YouTube URLが提供されていません", + "youtube_no_video_found_with_id": "IDの動画が見つかりません: %s", + "youtube_no_video_id_found": "URLに動画IDが見つかりません", + "youtube_no_vtt_files_found": "ディレクトリにVTTファイルが見つかりません", + "youtube_not_configured": "YouTubeが設定されていません。セットアップ手順を実行してください", + "youtube_playlist_header": "プレイリスト: %s", + "youtube_playlist_saved_to": "プレイリストが %s に保存されました", + "youtube_rate_limit_exceeded": "YouTubeのレート制限を超えました。後でもう一度試すか、'--sleep-requests 1'のような異なるyt-dlp引数を使用してリクエストを遅くしてください。", + "youtube_setup_description": "YouTube - 動画の転写(yt-dlp経由)とコメント/メタデータ(YouTube API経由)を取得", + "youtube_url_help": "YouTube動画またはプレイリスト\"URL\"から転写、コメントを取得してチャットに送信、またはコンソールに出力して出力ファイルに保存", + "youtube_url_is_playlist_not_video": "URLはプレイリストであり、動画ではありません", + "youtube_video_id_title_header": "動画ID: タイトル", + "youtube_ytdlp_not_found": "PATHにyt-dlpが見つかりません。YouTubeトランスクリプト機能を使用するにはyt-dlpをインストールしてください", + "youtube_ytdlp_stderr_error": "yt-dlp stderrの読み取りエラー" } diff --git a/internal/i18n/locales/pt-BR.json b/internal/i18n/locales/pt-BR.json index 5b56d09e..39bf4b84 100644 --- a/internal/i18n/locales/pt-BR.json +++ b/internal/i18n/locales/pt-BR.json @@ -1,520 +1,592 @@ { - "html_readability_error": "usa a entrada original, porque não é possível aplicar a legibilidade HTML", - "vendor_not_configured": "o fornecedor %s não está configurado", - "vendor_no_transcription_support": "o fornecedor %s não suporta transcrição de áudio", - "transcription_model_required": "modelo de transcrição é necessário (use --transcribe-model)", - "youtube_not_configured": "YouTube não está configurado, por favor execute o procedimento de configuração", - "spotify_not_configured": "Spotify não está configurado, por favor execute o procedimento de configuração", - "spotify_label": "Spotify", - "spotify_setup_description": "Spotify - para obter metadados de podcasts/programas do Spotify", - "spotify_invalid_url": "URL do Spotify inválida, não é possível obter o ID do programa ou episódio: '%s'", - "spotify_error_getting_metadata": "erro ao obter metadados do Spotify: %v", - "spotify_no_show_found": "nenhum programa encontrado com o ID: %s", - "spotify_no_episode_found": "nenhum episódio encontrado com o ID: %s", - "spotify_url_help": "URL de podcast ou episódio do Spotify para obter metadados e enviar ao chat", - "youtube_api_key_required": "Chave de API do YouTube necessária para comentários e metadados. Execute 'fabric --setup' para configurar", - "youtube_ytdlp_not_found": "yt-dlp não encontrado no PATH. Por favor instale o yt-dlp para usar a funcionalidade de transcrição do YouTube", - "youtube_invalid_url": "URL do YouTube inválida, não é possível obter o ID do vídeo ou da playlist: '%s'", - "youtube_url_is_playlist_not_video": "A URL é uma playlist, não um vídeo", - "youtube_no_video_id_found": "nenhum ID de vídeo encontrado na URL", - "youtube_rate_limit_exceeded": "Limite de taxa do YouTube excedido. Tente novamente mais tarde ou use argumentos diferentes do yt-dlp como '--sleep-requests 1' para desacelerar as requisições.", - "youtube_auth_required_bot_detection": "YouTube requer autenticação (detecção de bot). Use --yt-dlp-args='--cookies-from-browser BROWSER' onde BROWSER pode ser chrome, firefox, brave, etc.", - "youtube_ytdlp_stderr_error": "Erro ao ler stderr do yt-dlp", - "youtube_invalid_ytdlp_arguments": "argumentos do yt-dlp inválidos: %v", - "youtube_failed_create_temp_dir": "falha ao criar diretório temporário: %v", - "youtube_no_transcript_content": "nenhum conteúdo de transcrição encontrado no arquivo VTT", - "youtube_no_vtt_files_found": "nenhum arquivo VTT encontrado no diretório", - "youtube_failed_walk_directory": "falha ao percorrer o diretório: %v", - "youtube_error_getting_video_details": "erro ao obter detalhes do vídeo: %v", - "youtube_invalid_duration_string": "string de duração inválida: %s", - "youtube_error_getting_metadata": "erro ao obter metadados do vídeo: %v", - "youtube_error_parsing_duration": "erro ao analisar a duração do vídeo: %v", - "youtube_error_getting_comments": "erro ao obter comentários: %v", - "youtube_error_saving_csv": "erro ao salvar vídeos em CSV: %v", - "youtube_no_video_found_with_id": "nenhum vídeo encontrado com o ID: %s", - "youtube_invalid_timestamp_format": "formato de timestamp inválido: %s", - "youtube_empty_seconds_string": "string de segundos vazia", - "youtube_invalid_seconds_format": "formato de segundos inválido %q: %w", - "error_fetching_playlist_videos": "erro ao buscar vídeos da playlist: %w", - "openai_api_base_url_not_configured": "URL base da API não configurada para o provedor %s", - "openai_failed_to_create_models_url": "falha ao criar URL de modelos: %w", - "openai_unexpected_status_code_with_body": "código de status inesperado: %d do provedor %s, corpo da resposta: %s", - "openai_unexpected_status_code_read_error_partial": "código de status inesperado: %d do provedor %s (erro ao ler corpo: %v), resposta parcial: %s", - "openai_unexpected_status_code_read_error": "código de status inesperado: %d do provedor %s (falha ao ler corpo da resposta: %v)", - "openai_unable_to_parse_models_response": "não foi possível analisar a resposta de modelos; resposta bruta: %s", - "openai_warning_model_no_image_generation": "Aviso: O modelo '%s' não suporta geração de imagens. Modelos suportados: %s. Considere usar -m gpt-5.2 para geração de imagens.\n", - "openai_model_no_image_generation": "o modelo '%s' não suporta geração de imagens. Modelos suportados: %s", - "scraping_not_configured": "funcionalidade de scraping não está configurada. Por favor configure o Jina para ativar o scraping", - "could_not_determine_home_dir": "não foi possível determinar o diretório home do usuário: %w", - "could_not_stat_env_file": "não foi possível verificar o arquivo .env: %w", + "additional_yt_dlp_args": "Argumentos adicionais para passar ao yt-dlp (ex. '--cookies-from-browser brave')", + "address_to_bind_rest_api": "Endereço para vincular a API REST", + "anthropic_stream_error": "Erro de transmissão: %v", + "api_key_secure_server_routes": "Chave API usada para proteger rotas do servidor", + "application_options_header": "Opções da aplicação:", + "apply_variables_to_input": "Aplicar variáveis à entrada do usuário", + "attachment_path_or_url_help": "Caminho para o anexo ou URL (ex. para mensagens de reconhecimento de imagem do OpenAI)", + "audio_output_file_specified_but_not_tts_model": "arquivo de saída de áudio '%s' especificado mas o modelo '%s' não é um modelo TTS. Por favor use um modelo TTS como gemini-2.5-flash-preview-tts", + "audio_video_file_transcribe": "Arquivo de áudio ou vídeo para transcrever", + "available_models_header": "Modelos disponíveis", + "available_transcription_models": "Modelos de transcrição disponíveis:", + "available_vendors_header": "Fornecedores disponíveis:", + "azure_api_key_required": "A chave API do Azure é obrigatória", + "azure_api_version_question": "Insira a versão da API do Azure (deixe em branco para o padrão)", + "azure_base_url_required": "A URL base do Azure é obrigatória", + "azure_deployments_question": "Insira os nomes das implantações do Azure (separados por vírgula)", + "azure_failed_extract_deployment": "falha ao extrair o nome da implantação da requisição", + "azure_model_field_empty": "o campo de modelo está vazio no corpo da requisição", + "azure_request_body_nil": "o corpo da requisição é nil", + "background_type_help": "Tipo de fundo: opaque, transparent (padrão: opaque, apenas para PNG/WebP)", + "bedrock_aws_region_label": "Regiao AWS", + "bedrock_converse_failed": "bedrock converse falhou para o modelo %s: %w", + "bedrock_conversestream_failed": "bedrock conversestream falhou para o modelo %s: %w", + "bedrock_empty_response_content": "conteudo de resposta vazio", + "bedrock_failed_list_foundation_models": "falha ao listar modelos de fundacao: %w", + "bedrock_failed_list_inference_profiles": "falha ao listar perfis de inferencia: %w", + "bedrock_invalid_aws_region": "regiao AWS invalida: %s", + "bedrock_panic_sendstream": "panico no SendStream: %v", + "bedrock_unable_load_aws_config": "nao foi possivel carregar a configuracao AWS: %w", + "bedrock_unable_load_aws_config_with_region": "nao foi possivel carregar a configuracao AWS com regiao %s: %w", + "bedrock_unexpected_content_block_type": "tipo de bloco de conteudo inesperado: %T", + "bedrock_unexpected_response_type": "tipo de resposta inesperado: %T", + "bedrock_unknown_stream_event_type": "tipo de evento de stream desconhecido: %T", + "cannot_convert_string": "não é possível converter a string %q para %v", + "change_default_model": "Mudar modelo padrão", + "chatter_error_empty_response": "resposta vazia", + "chatter_error_find_context": "nao foi possivel encontrar o contexto %s: %v", + "chatter_error_find_session": "nao foi possivel encontrar a sessao %s: %v", + "chatter_error_get_pattern": "nao foi possivel obter o padrao %s: %v", + "chatter_error_load_strategy": "nao foi possivel carregar a estrategia %s: %v", + "chatter_error_no_messages_provided": "nenhuma mensagem fornecida", + "chatter_error_no_session_pattern_user_messages": "nenhuma sessão, padrão ou mensagem do usuário fornecida", + "chatter_error_stream_update": "Erro: %s", + "chatter_help_review_changes_with_git_diff": "Voce pode revisar as alteracoes com 'git diff' se estiver usando git.", + "chatter_info_file_changes_applied_successfully": "Alteracoes de arquivo aplicadas com sucesso.", + "chatter_log_stream_usage_metadata": "[Metadados] Entrada: %d | Saída: %d | Total: %d", + "chatter_prompt_enforce_response_language": "%s\n\nIMPORTANTE: Primeiro, execute as instrucoes fornecidas neste prompt usando a entrada do usuario. Em seguida, garanta que toda a sua resposta final, incluindo quaisquer cabecalhos de secao ou titulos gerados como parte da execucao das instrucoes, seja escrita SOMENTE no idioma %s.", + "chatter_warning_apply_file_changes_failed": "Aviso: Falha ao aplicar alteracoes de arquivo: %v", + "chatter_warning_get_current_directory_failed": "Aviso: Falha ao obter o diretorio atual: %v", + "chatter_warning_parse_file_changes_failed": "Aviso: Falha ao analisar alteracoes de arquivo: %v", + "choose_context_from_available": "Escolha um contexto entre os contextos disponíveis", + "choose_model": "Escolher modelo", + "choose_pattern_from_available": "Escolha um padrão entre os padrões disponíveis", + "choose_session_from_available": "Escolha uma sessão das sessões disponíveis", + "choose_strategy_from_available": "Escolher uma estratégia das estratégias disponíveis", + "command_completed_successfully": "Comando concluído com sucesso", + "compression_level_jpeg_webp": "Nível de compressão 0-100 para formatos JPEG/WebP (padrão: não definido)", + "config_file_not_found": "arquivo de configuração não encontrado: %s", + "convert_html_readability": "Converter entrada HTML em uma visualização limpa e legível", + "copilot_debug_created_conversation": "Conversa do Copilot criada: %s", + "copilot_debug_failed_parse_sse_event": "Falha ao analisar evento SSE: %v", + "copilot_error_chat_request": "solicitação de chat falhou: %s - %s", + "copilot_error_create_conversation": "falha ao criar conversa: %s - %s", + "copilot_error_reading_stream": "erro ao ler stream: %w", + "copilot_error_stream_request": "falha na solicitação de stream: %s - %s", + "copilot_failed_create_conversation": "falha ao criar conversa: %w", + "copilot_failed_send_message": "falha ao enviar mensagem: %w", + "copilot_failed_stream_message": "falha ao transmitir mensagem: %w", + "copilot_tenant_client_id_required": "ID do locatário e ID do cliente são obrigatórios", + "copy_to_clipboard": "Copiar para a área de transferência", + "could_not_copy_to_clipboard": "não foi possível copiar para a área de transferência: %v", "could_not_create_config_dir": "não foi possível criar o diretório de configuração: %w", "could_not_create_env_file": "não foi possível criar o arquivo .env: %w", - "could_not_copy_to_clipboard": "não foi possível copiar para a área de transferência: %v", - "file_already_exists_not_overwriting": "o arquivo %s já existe, não será sobrescrito. Renomeie o arquivo existente ou escolha um nome diferente", - "error_creating_file": "erro ao criar arquivo: %v", - "error_writing_to_file": "erro ao escrever no arquivo: %v", - "error_creating_audio_file": "erro ao criar arquivo de áudio: %v", - "error_writing_audio_data": "erro ao escrever dados de áudio no arquivo: %v", - "tts_model_requires_audio_output": "modelo TTS '%s' requer saída de áudio. Por favor especifique um arquivo de saída de áudio com a flag -o (ex. -o output.wav)", - "audio_output_file_specified_but_not_tts_model": "arquivo de saída de áudio '%s' especificado mas o modelo '%s' não é um modelo TTS. Por favor use um modelo TTS como gemini-2.5-flash-preview-tts", - "file_already_exists_choose_different": "arquivo %s já existe. Por favor escolha um nome de arquivo diferente ou remova o arquivo existente", - "no_notification_system_available": "nenhum sistema de notificação disponível", - "cannot_convert_string": "não é possível converter a string %q para %v", - "unsupported_conversion": "conversão não suportada de %v para %v", - "invalid_config_path": "caminho de configuração inválido: %w", - "config_file_not_found": "arquivo de configuração não encontrado: %s", - "error_reading_config_file": "erro ao ler arquivo de configuração: %w", - "error_parsing_config_file": "erro ao analisar arquivo de configuração: %w", - "error_reading_piped_message": "erro ao ler mensagem redirecionada do stdin: %w", - "image_file_already_exists": "arquivo de imagem já existe: %s", - "invalid_image_file_extension": "extensão de arquivo de imagem inválida '%s'. Formatos suportados: .png, .jpeg, .jpg, .webp", - "image_parameters_require_image_file": "parâmetros de imagem (--image-size, --image-quality, --image-background, --image-compression) só podem ser usados com --image-file", - "invalid_image_size": "tamanho de imagem inválido '%s'. Tamanhos suportados: 1024x1024, 1536x1024, 1024x1536, auto", - "invalid_image_quality": "qualidade de imagem inválida '%s'. Qualidades suportadas: low, medium, high, auto", - "invalid_image_background": "fundo de imagem inválido '%s'. Fundos suportados: opaque, transparent", - "image_compression_jpeg_webp_only": "compressão de imagem só pode ser usada com formatos JPEG e WebP, não %s", - "image_compression_range_error": "compressão de imagem deve estar entre 0 e 100, recebido %d", - "transparent_background_png_webp_only": "fundo transparente só pode ser usado com formatos PNG e WebP, não %s", - "available_transcription_models": "Modelos de transcrição disponíveis:", - "tts_audio_generated_successfully": "Áudio TTS gerado com sucesso e salvo em: %s\n", - "fabric_command_complete": "Comando Fabric concluído", - "fabric_command_complete_with_pattern": "Fabric: %s concluído", - "command_completed_successfully": "Comando concluído com sucesso", - "output_truncated": "Saída: %s...", - "output_full": "Saída: %s", - "choose_pattern_from_available": "Escolha um padrão entre os padrões disponíveis", - "pattern_variables_help": "Valores para variáveis do padrão, ex. -v=#role:expert -v=#points:30", - "choose_context_from_available": "Escolha um contexto entre os contextos disponíveis", - "choose_session_from_available": "Escolha uma sessão das sessões disponíveis", - "attachment_path_or_url_help": "Caminho para o anexo ou URL (ex. para mensagens de reconhecimento de imagem do OpenAI)", - "run_setup_for_reconfigurable_parts": "Executar a configuração para todas as partes reconfiguráveis do fabric", - "set_temperature": "Definir temperatura", - "set_top_p": "Definir top P", - "stream_help": "Streaming", - "set_presence_penalty": "Definir penalidade de presença", - "use_model_defaults_raw_help": "Usa os padrões do modelo sem enviar opções de chat (temperature, top_p etc.). Afeta apenas provedores compatíveis com o OpenAI. Os modelos da Anthropic sempre utilizam seleção inteligente de parâmetros para cumprir os requisitos específicos de cada modelo.", - "set_frequency_penalty": "Definir penalidade de frequência", - "list_all_patterns": "Listar todos os padrões/patterns", - "list_all_available_models": "Listar todos os modelos disponíveis", - "list_all_contexts": "Listar todos os contextos", - "list_all_sessions": "Listar todas as sessões", - "update_patterns": "Atualizar os padrões/patterns", - "messages_to_send_to_chat": "Mensagens para enviar ao chat", - "copy_to_clipboard": "Copiar para a área de transferência", - "choose_model": "Escolher modelo", - "specify_vendor_for_model": "Especificar fornecedor para o modelo selecionado (ex. -V \"LM Studio\" -m openai/gpt-oss-20b)", - "model_context_length_ollama": "Comprimento do contexto do modelo (afeta apenas ollama)", - "output_to_file": "Exportar para arquivo", - "output_entire_session": "Saída de toda a sessão (incluindo temporária) para o arquivo de saída", - "number_of_latest_patterns": "Número dos padrões mais recentes a listar", - "change_default_model": "Mudar modelo padrão", - "youtube_url_help": "Vídeo do YouTube ou URL da playlist para obter transcrição, comentários e enviar ao chat ou imprimir no console e armazenar no arquivo de saída", - "prefer_playlist_over_video": "Preferir playlist ao vídeo se ambos os IDs estiverem presentes na URL", - "grab_transcript_from_youtube": "Obter transcrição do vídeo do YouTube e enviar ao chat (usado por padrão).", - "grab_transcript_with_timestamps": "Obter transcrição do vídeo do YouTube com timestamps e enviar ao chat", - "grab_comments_from_youtube": "Obter comentários do vídeo do YouTube e enviar ao chat", - "output_video_metadata": "Exibir metadados do vídeo", - "additional_yt_dlp_args": "Argumentos adicionais para passar ao yt-dlp (ex. '--cookies-from-browser brave')", - "specify_language_code": "Especificar código de idioma para o chat, ex. -g=en -g=zh -g=pt-BR -g=pt-PT", - "scrape_website_url": "Fazer scraping da URL do site para markdown usando Jina AI", - "search_question_jina": "Pergunta de busca usando Jina AI", - "seed_for_lmm_generation": "Seed para ser usado na geração LMM", - "wipe_context": "Limpar contexto", - "wipe_session": "Limpar sessão", - "print_context": "Imprimir contexto", - "print_session": "Imprimir sessão", - "convert_html_readability": "Converter entrada HTML em uma visualização limpa e legível", - "apply_variables_to_input": "Aplicar variáveis à entrada do usuário", - "disable_pattern_variable_replacement": "Desabilitar substituição de variáveis de padrão", - "show_dry_run": "Mostrar o que seria enviado ao modelo sem enviar de fato", - "serve_fabric_rest_api": "Servir a API REST do Fabric", - "serve_fabric_api_ollama_endpoints": "Servir a API REST do Fabric com endpoints ollama", - "address_to_bind_rest_api": "Endereço para vincular a API REST", - "api_key_secure_server_routes": "Chave API usada para proteger rotas do servidor", - "path_to_yaml_config": "Caminho para arquivo de configuração YAML", - "print_current_version": "Imprimir versão atual", - "list_all_registered_extensions": "Listar todas as extensões registradas", - "register_new_extension": "Registrar uma nova extensão do caminho do arquivo de configuração", - "remove_registered_extension": "Remover uma extensão registrada por nome", - "choose_strategy_from_available": "Escolher uma estratégia das estratégias disponíveis", - "list_all_strategies": "Listar todas as estratégias", - "list_all_vendors": "Listar todos os fornecedores", - "output_raw_list_shell_completion": "Saída de lista bruta sem cabeçalhos/formatação (para conclusão de shell)", - "enable_web_search_tool": "Habilitar ferramenta de busca web para modelos suportados (Anthropic, OpenAI, Gemini)", - "set_location_web_search": "Definir localização para resultados de busca web (ex. 'America/Los_Angeles')", - "save_generated_image_to_file": "Salvar imagem gerada no caminho de arquivo especificado (ex. 'output.png')", - "image_dimensions_help": "Dimensões da imagem: 1024x1024, 1536x1024, 1024x1536, auto (padrão: auto)", - "image_quality_help": "Qualidade da imagem: low, medium, high, auto (padrão: auto)", - "compression_level_jpeg_webp": "Nível de compressão 0-100 para formatos JPEG/WebP (padrão: não definido)", - "background_type_help": "Tipo de fundo: opaque, transparent (padrão: opaque, apenas para PNG/WebP)", - "suppress_thinking_tags": "Suprimir texto contido em tags de pensamento", - "start_tag_thinking_sections": "Tag inicial para seções de pensamento", - "end_tag_thinking_sections": "Tag final para seções de pensamento", - "disable_openai_responses_api": "Desabilitar API OpenAI Responses (padrão: false)", - "audio_video_file_transcribe": "Arquivo de áudio ou vídeo para transcrever", - "model_for_transcription": "Modelo para usar na transcrição (separado do modelo de chat)", - "split_media_files_ffmpeg": "Dividir arquivos de áudio/vídeo maiores que 25MB usando ffmpeg", - "tts_voice_name": "Nome da voz TTS para modelos suportados (ex. Kore, Charon, Puck)", - "list_gemini_tts_voices": "Listar todas as vozes TTS do Gemini disponíveis", - "list_transcription_models": "Listar todos os modelos de transcrição disponíveis", - "send_desktop_notification": "Enviar notificação desktop quando o comando for concluído", + "could_not_determine_home_dir": "não foi possível determinar o diretório home do usuário: %w", + "could_not_stat_env_file": "não foi possível verificar o arquivo .env: %w", "custom_notification_command": "Comando personalizado para executar notificações (substitui notificações integradas)", - "set_reasoning_thinking_level": "Definir nível de raciocínio/pensamento (ex. off, low, medium, high, ou tokens numéricos para Anthropic ou Google Gemini)", - "set_debug_level": "Definir nível de debug (0=desligado, 1=básico, 2=detalhado, 3=rastreamento)", - "usage_header": "Uso:", - "application_options_header": "Opções da aplicação:", - "help_options_header": "Opções de ajuda:", - "help_message": "Mostrar esta mensagem de ajuda", - "options_placeholder": "[OPÇÕES]", - "available_vendors_header": "Fornecedores disponíveis:", - "available_models_header": "Modelos disponíveis", - "no_items_found": "Nenhum %s", - "no_description_available": "Nenhuma descrição disponível", - "i18n_download_failed": "Falha ao baixar tradução para o idioma '%s': %v", - "i18n_load_failed": "Falha ao carregar arquivo de tradução: %v", - "setup_welcome_header": "🎉 Bem-vindo ao Fabric! Vamos configurar tudo.", - "setup_step_downloading_patterns": "📥 Passo 1: Baixando padrões (necessários para o Fabric funcionar)...", - "setup_step_downloading_strategies": "📥 Passo 2: Baixando estratégias (necessárias para o Fabric funcionar)...", - "setup_step_configure_ai_provider": "🤖 Passo 3: Configurar um provedor de IA", - "setup_ai_provider_required": "O Fabric precisa de pelo menos um provedor de IA para funcionar.", - "setup_add_more_providers_later": "Você poderá adicionar mais provedores depois com 'fabric --setup'", - "setup_step_setting_defaults": "⚙️ Passo 4: Configurando provedor e modelo padrão...", - "setup_complete_header": "✅ Configuração completa! Agora você pode usar o Fabric.", - "setup_next_steps": "Próximos passos:", - "setup_list_patterns": "• Listar padrões disponíveis: fabric -l", - "setup_try_pattern": "• Experimentar um padrão: echo 'seu texto' | fabric --pattern summarize", - "setup_configure_more": "• Configurar mais opções: fabric --setup", - "setup_failed_download_patterns": "falha ao baixar padrões: %w", - "setup_failed_download_strategies": "falha ao baixar estratégias: %w", - "setup_failed_set_defaults": "falha ao configurar provedor e modelo padrão: %w", - "setup_no_ai_provider_selected": "nenhum provedor de IA selecionado - pelo menos um é necessário", - "setup_invalid_selection": "seleção inválida: %s", - "setup_available_ai_providers": "Provedores de IA Disponíveis:", - "setup_enter_ai_provider_number": "Número do Provedor de IA", - "setup_available_plugins": "Plugins disponíveis:", - "setup_plugin_number": "Número do Plugin", - "setup_plugin_prompt": "Informe o número do plugin a configurar", - "setup_required_configuration_header": "━━━ CONFIGURAÇÃO OBRIGATÓRIA ━━━\n\nProvedores de IA [pelo menos um obrigatório]", - "setup_required_tools": "Ferramentas Obrigatórias", - "setup_optional_configuration_header": "━━━ CONFIGURAÇÃO OPCIONAL ━━━\n\nFerramentas Opcionais", - "setup_validation_header": "Status da Configuração:", - "setup_validation_ai_provider_configured": "✓ Provedor de IA configurado", - "setup_validation_ai_provider_missing": "✗ Provedor de IA não configurado - Necessário para o Fabric funcionar", - "setup_validation_defaults_configured": "✓ Provedor/modelo padrão definido: %s/%s", - "setup_validation_defaults_missing": "✗ Provedor/modelo padrão não definido - Necessário para o Fabric funcionar", - "setup_validation_patterns_configured": "✓ Padrões baixados", - "setup_validation_patterns_missing": "✗ Padrões não encontrados - Necessários para o Fabric funcionar", - "setup_validation_strategies_configured": "✓ Estratégias baixadas", - "setup_validation_strategies_missing": "✗ Estratégias não encontradas - Necessárias para o Fabric funcionar", - "setup_validation_incomplete_warning": "⚠️ Configuração incompleta! Componentes necessários ausentes.", - "setup_validation_incomplete_help": "Execute 'fabric --setup' novamente para configurar itens faltantes,\nou execute 'fabric -U' para baixar padrões e estratégias.", - "setup_validation_complete": "✓ Todos os componentes necessários estão configurados!", - "patterns_not_found_header": "⚠️ Nenhum padrão encontrado!", - "patterns_required_to_work": "Padrões são necessários para o Fabric funcionar. Para resolver:", - "patterns_option_run_setup": "Opção 1 (Recomendada): Execute a configuração para baixar padrões", - "patterns_option_run_setup_command": "fabric --setup", - "patterns_option_run_update": "Opção 2: Baixar/atualizar padrões diretamente", - "patterns_option_run_update_command": "fabric -U", - "pattern_not_found_no_patterns": "padrão '%s' não encontrado.\n\nNenhum padrão instalado! Para resolver:\n • Execute 'fabric --setup' para configurar e baixar padrões\n • Ou execute 'fabric -U' para baixar/atualizar padrões diretamente", - "pattern_not_found_list_available": "padrão '%s' não encontrado. Execute 'fabric -l' para ver os padrões disponíveis", - "plugin_configured": " ✓", - "plugin_not_configured": " ⚠️ NÃO CONFIGURADO", - "defaults_setup_description": "Provedor e modelo de IA padrão", - "defaults_model_question": "Informe o índice ou o nome do seu modelo padrão", - "defaults_model_context_length_question": "Informe o comprimento do contexto do modelo", + "custom_patterns_directory_question": "Informe o caminho para seu diretório de padrões personalizados", "custom_patterns_label": "Padrões personalizados", "custom_patterns_setup_description": "Padrões personalizados - Definir diretório para seus padrões personalizados", - "custom_patterns_directory_question": "Informe o caminho para seu diretório de padrões personalizados", + "defaults_model_context_length_question": "Informe o comprimento do contexto do modelo", + "defaults_model_question": "Informe o índice ou o nome do seu modelo padrão", + "defaults_setup_description": "Provedor e modelo de IA padrão", + "disable_openai_responses_api": "Desabilitar API OpenAI Responses (padrão: false)", + "disable_pattern_variable_replacement": "Desabilitar substituição de variáveis de padrão", + "enable_web_search_tool": "Habilitar ferramenta de busca web para modelos suportados (Anthropic, OpenAI, Gemini)", + "end_tag_thinking_sections": "Tag final para seções de pensamento", + "error_creating_audio_file": "erro ao criar arquivo de áudio: %v", + "error_creating_file": "erro ao criar arquivo: %v", + "error_fetching_playlist_videos": "erro ao buscar vídeos da playlist: %w", + "error_parsing_config_file": "erro ao analisar arquivo de configuração: %w", + "error_reading_config_file": "erro ao ler arquivo de configuração: %w", + "error_reading_piped_message": "erro ao ler mensagem redirecionada do stdin: %w", + "error_writing_audio_data": "erro ao escrever dados de áudio no arquivo: %v", + "error_writing_to_file": "erro ao escrever no arquivo: %v", + "extension_cmd_template_required": "o modelo de comando é obrigatório para a operação %s", + "extension_command_template_label": " Modelo de comando: %s\n", + "extension_config_hash_mismatch": "discrepância de hash do arquivo de configuração para %s", + "extension_config_path_label": " Caminho de configuração: %s\n\n", + "extension_description_label": " Descrição: %s\n", + "extension_empty_command": "comando vazio após a formatação", + "extension_executable_hash_mismatch": "discrepância de hash do executável para %s", + "extension_executable_label": " Executável: %s\n", + "extension_executable_not_found": "executável não encontrado: %w", + "extension_executable_required": "o caminho do executável é obrigatório", + "extension_executing_command": "Executando comando: %s\n", + "extension_execution_failed_err": "execução falhou: %w\nerr: %s", + "extension_execution_failed_stderr": "execução falhou: %w\nstderr: %s", + "extension_execution_timed_out": "execução expirou após %v", + "extension_failed_format_command": "falha ao formatar o comando: %w", + "extension_failed_get_absolute_path": "falha ao obter o caminho absoluto: %w", + "extension_failed_get_extension": "falha ao obter a extensão: %w", + "extension_failed_get_output_path": "falha ao obter o caminho de saída: %w\nerr: %s", + "extension_failed_hash_executable": "falha ao calcular o hash do executável: %w", + "extension_failed_marshal_registry": "falha ao serializar o registro de extensões: %w", + "extension_failed_parse_config": "falha ao analisar o arquivo de configuração: %w", + "extension_failed_parse_registry": "falha ao analisar o registro de extensões: %w", + "extension_failed_read_config": "falha ao ler o arquivo de configuração: %w", + "extension_failed_read_output_file": "falha ao ler o arquivo de saída: %w", + "extension_failed_read_registry": "falha ao ler o registro de extensões: %w", + "extension_failed_register": "falha ao registrar a extensão: %w", + "extension_failed_remove": "falha ao remover a extensão: %w", + "extension_failed_verify_executable": "falha ao verificar o executável: %w", + "extension_file_config_label": " Configuração de arquivo:\n", + "extension_invalid_config_path": "caminho de configuração inválido: %w", + "extension_invalid_definition": "definição de extensão inválida: %w", + "extension_invalid_timeout": "valor de tempo limite inválido '%s': deve ser uma duração como '30s' ou '1m': %w", + "extension_invalid_timeout_format": "formato de tempo limite inválido: %w", + "extension_name_contains_spaces": "o nome da extensão '%s' contém espaços - nomes não devem conter espaços", + "extension_name_detail_label": "Nome: %s\n", + "extension_name_empty": "o nome da extensão não pode estar vazio", + "extension_name_label": "Extensão: %s\n", + "extension_name_required": "o nome da extensão é obrigatório", + "extension_no_file_config": "nenhuma configuração de arquivo encontrada", + "extension_no_output_file": "nenhum arquivo de saída especificado na configuração", + "extension_not_found": "extensão %s não encontrada", + "extension_operation_not_found": "operação %s não encontrada para a extensão %s", + "extension_operation_required": "pelo menos uma operação deve ser definida", + "extension_operations_label": " Operações:\n", + "extension_registered_success": "Extensão registrada com sucesso:\n", + "extension_registry_not_initialized": "registro de extensões não inicializado", + "extension_status_disabled": " Status: DESABILITADA - Verificação de hash falhou: %v\n", + "extension_status_enabled": " Status: HABILITADA\n", + "extension_timeout_label": " Tempo limite: %s\n", + "extension_type_label": " Tipo: %s\n", + "extension_type_required": "o tipo da extensão é obrigatório", + "extension_version_label": " Versão: %s\n", + "extension_warning_load_registry": "Aviso: não foi possível carregar o registro de extensões: %v\n", + "fabric_command_complete": "Comando Fabric concluído", + "fabric_command_complete_with_pattern": "Fabric: %s concluído", + "fetch_content_exceeds_limit": "fetch: conteúdo muito grande: excede %d bytes", + "fetch_content_not_utf8": "fetch: o conteúdo não é texto UTF-8 válido", + "fetch_content_null_bytes": "fetch: o conteúdo contém bytes nulos", + "fetch_content_too_large": "fetch: conteúdo muito grande: %d bytes (máx %d bytes)", + "fetch_error_create_request": "fetch: erro ao criar a requisição: %v", + "fetch_error_fetching_url": "fetch: erro ao buscar a URL: %v", + "fetch_error_reading_response": "fetch: erro ao ler a resposta: %v", + "fetch_http_error": "fetch: erro HTTP: %d - %s", + "fetch_unknown_operation": "fetch: operação desconhecida %q (suportada: get)", + "fetch_unsupported_content_type": "fetch: tipo de conteúdo não suportado %q - apenas conteúdo de texto permitido", + "file_already_exists_choose_different": "arquivo %s já existe. Por favor escolha um nome de arquivo diferente ou remova o arquivo existente", + "file_already_exists_not_overwriting": "o arquivo %s já existe, não será sobrescrito. Renomeie o arquivo existente ou escolha um nome diferente", + "file_manager_applied_operation": "Operação %s aplicada a %s", + "file_manager_empty_path": "caminho vazio para alteração de arquivo %d", + "file_manager_failed_create_directory": "falha ao criar diretório %s para alteração de arquivo %d: %w", + "file_manager_failed_parse_json": "falha ao analisar %s JSON: %w", + "file_manager_failed_write_file": "falha ao escrever arquivo %s para alteração de arquivo %d: %w", + "file_manager_file_content_too_large": "conteúdo do arquivo muito grande para alteração de arquivo %d: %d bytes", + "file_manager_invalid_format_no_json_array": "formato %s inválido: nenhum array JSON encontrado", + "file_manager_invalid_format_unbalanced_brackets": "formato %s inválido: colchetes desbalanceados", + "file_manager_invalid_operation": "operação inválida para alteração de arquivo %d: %s", + "file_manager_suspicious_path": "caminho suspeito para alteração de arquivo %d: %s", + "gemini_audio_data_too_small": "dados de audio muito pequenos: %d bytes, minimo requerido: %d", + "gemini_empty_pcm_data": "dados PCM vazios fornecidos", + "gemini_invalid_location_format": "formato de local de busca invalido %q: deve ser fuso horario (ex. 'America/Los_Angeles') ou codigo de idioma (ex. 'en-US')", + "gemini_invalid_voice": "voz invalida '%s'. As vozes validas sao: %v", + "gemini_no_audio_data": "nenhum dado de audio recebido do modelo TTS", + "gemini_no_text_for_tts": "nenhum conteudo de texto encontrado para geracao TTS", + "gemini_pcm_data_too_large": "dados PCM muito grandes: %d bytes, maximo permitido: %d", + "gemini_stream_error": "Erro: %v", + "gemini_tts_failed": "falha na geracao TTS: %w", + "gemini_unexpected_data_type": "tipo de dado inesperado: %s, esperado dados de audio", + "gemini_wav_data_invalid": "dados WAV gerados invalidos: %d bytes, minimo requerido: %d", + "gemini_wav_generation_failed": "falha ao gerar arquivo WAV: %w", + "grab_comments_from_youtube": "Obter comentários do vídeo do YouTube e enviar ao chat", + "grab_transcript_from_youtube": "Obter transcrição do vídeo do YouTube e enviar ao chat (usado por padrão).", + "grab_transcript_with_timestamps": "Obter transcrição do vídeo do YouTube com timestamps e enviar ao chat", + "groups_items_number_out_of_range": "número %d está fora do intervalo", + "help_message": "Mostrar esta mensagem de ajuda", + "help_options_header": "Opções de ajuda:", + "html_readability_error": "usa a entrada original, porque não é possível aplicar a legibilidade HTML", + "i18n_download_failed": "Falha ao baixar tradução para o idioma '%s': %v", + "i18n_load_failed": "Falha ao carregar arquivo de tradução: %v", + "image_compression_jpeg_webp_only": "compressão de imagem só pode ser usada com formatos JPEG e WebP, não %s", + "image_compression_range_error": "compressão de imagem deve estar entre 0 e 100, recebido %d", + "image_dimensions_help": "Dimensões da imagem: 1024x1024, 1536x1024, 1024x1536, auto (padrão: auto)", + "image_file_already_exists": "arquivo de imagem já existe: %s", + "image_parameters_require_image_file": "parâmetros de imagem (--image-size, --image-quality, --image-background, --image-compression) só podem ser usados com --image-file", + "image_quality_help": "Qualidade da imagem: low, medium, high, auto (padrão: auto)", + "invalid_config_path": "caminho de configuração inválido: %w", + "invalid_image_background": "fundo de imagem inválido '%s'. Fundos suportados: opaque, transparent", + "invalid_image_file_extension": "extensão de arquivo de imagem inválida '%s'. Formatos suportados: .png, .jpeg, .jpg, .webp", + "invalid_image_quality": "qualidade de imagem inválida '%s'. Qualidades suportadas: low, medium, high, auto", + "invalid_image_size": "tamanho de imagem inválido '%s'. Tamanhos suportados: 1024x1024, 1536x1024, 1024x1536, auto", + "jina_error_creating_request": "erro ao criar a requisição: %v", + "jina_error_reading_response_body": "erro ao ler o corpo da resposta: %v", + "jina_error_sending_request": "erro ao enviar a requisição: %v", "jina_label": "Jina AI", "jina_setup_description": "Serviço Jina AI - para obter uma página web como texto limpo e compatível com LLM", - "youtube_label": "YouTube", - "youtube_setup_description": "YouTube - para obter transcrições de vídeo (via yt-dlp) e comentários/metadados (via API do YouTube)", "language_label": "Idioma", - "language_setup_description": "Idioma - Idioma de saída padrão do provedor de IA", "language_output_question": "Informe o seu idioma de saída padrão (por exemplo: zh_CN)", - "optional_marker": "(opcional)", - "required_marker": "[obrigatório]", - "patterns_loader_label": "Carregador de padrões", - "patterns_setup_description": "Padrões - Baixa os padrões", - "patterns_git_repo_url_label": "URL do repositório Git", - "patterns_git_repo_url_question": "Informe a URL padrão do repositório Git para os padrões", - "patterns_git_repo_folder_label": "Pasta de padrões no repositório Git", - "patterns_git_repo_folder_question": "Informe a pasta padrão no repositório Git onde os padrões ficam armazenados", - "patterns_failed_create_temp_folder": "falha ao criar a pasta temporária de padrões: %w", - "patterns_downloading": "Baixando padrões e populando %s...\\n", - "patterns_failed_download_from_git": "falha ao baixar padrões do repositório Git: %w", - "patterns_saving_updated_configuration": "💾 Salvando configuração atualizada (caminho alterado de '%s' para '%s')...\\n", - "patterns_failed_move_patterns": "falha ao mover os padrões para o diretório de configuração: %w", - "patterns_download_success": "✅ Padrões baixados e instalados com sucesso em %s\\n", - "patterns_failed_unique_file": "falha ao criar o arquivo de padrões únicos: %w", - "patterns_failed_access_directory": "falha ao acessar o diretório de padrões '%s': %w", - "patterns_preserve_warning": "Aviso: não foi possível preservar o padrão personalizado '%s': %v\\n", - "patterns_preserved_custom_pattern": "Padrão personalizado preservado: %s\\n", - "patterns_failed_create_temp_dir": "falha ao criar diretório temporário: %w", - "patterns_cloning_repository": "Clonando repositório %s (caminho: %s)...\\n", - "patterns_failed_download_from_repo": "falha ao baixar padrões de %s: %w", - "patterns_failed_read_temp_directory": "falha ao ler o diretório temporário de padrões: %w", - "patterns_no_patterns_migration_failed": "nenhum padrão encontrado no repositório no caminho %s e a migração falhou: %w", - "patterns_downloaded_temp": "%d padrões baixados para o diretório temporário\\n", - "patterns_detected_old_path": "🔄 Caminho antigo 'patterns' detectado, tentando migrar para 'data/patterns'...", - "patterns_warning_remove_test_folder": "Aviso: não foi possível remover a pasta temporária de teste '%s': %v\\n", - "patterns_found_new_path": "✅ %d padrões encontrados no novo caminho '%s', atualizando configuração...\\n", - "patterns_failed_move_test_patterns": "falha ao mover padrões de teste para a pasta temporária: %w", - "patterns_unable_to_find_or_migrate": "não foi possível encontrar padrões no caminho atual '%s' ou migrar para a nova estrutura", - "patterns_failed_read_directory": "falha ao ler o diretório de padrões: %w", - "patterns_debug_included_custom_directory": "📂 Também incluídos os padrões do diretório personalizado: %s\\n", - "patterns_warning_custom_directory": "Aviso: não foi possível ler o diretório de padrões personalizado %s: %v\\n", - "patterns_no_patterns_found_in_directories": "nenhum padrão encontrado nos diretórios %s e %s", - "patterns_no_patterns_found_in_directory": "nenhum padrão encontrado no diretório %s", - "patterns_failed_write_unique_file": "falha ao gravar o arquivo de padrões únicos: %w", - "patterns_unique_file_created": "📝 Arquivo de padrões únicos criado com %d padrões\\n", - "patterns_no_patterns_copied": "nenhum padrão foi copiado com sucesso para %s", - "patterns_failed_loaded_marker": "falha ao criar o arquivo marcador '%s': %w", - "strategies_label": "Estratégias de prompt", - "strategies_setup_description": "Estratégias - Baixa estratégias de prompting (como chain of thought)", - "strategies_git_repo_url_label": "URL do repositório Git", - "strategies_git_repo_url_question": "Informe a URL padrão do repositório Git para as estratégias", - "strategies_git_repo_folder_label": "Pasta de estratégias no repositório Git", - "strategies_git_repo_folder_question": "Informe a pasta padrão no repositório Git onde as estratégias ficam armazenadas", - "strategies_downloading": "Baixando estratégias e populando %s...\\n", - "strategies_download_success": "✅ Estratégias baixadas e instaladas com sucesso em %s\\n", - "strategies_home_dir_error": "não foi possível obter o diretório home: %v", - "strategies_failed_create_directory": "falha ao criar diretório de estratégias: %w", - "strategies_cloning_repository": "Clonando repositório %s (caminho: %s)...\\n", - "strategies_failed_download": "falha ao baixar estratégias: %w", - "strategies_downloaded_count": "%d estratégias baixadas\\n", - "strategies_home_dir_fallback": "não foi possível obter o diretório home: %v, usando o diretório atual", - "strategy_not_found": "estratégia %s não encontrada. Execute 'fabric --liststrategies' para ver a lista", - "strategies_none_found": "nenhuma estratégia encontrada. Execute 'fabric --setup' para baixar estratégias", - "strategies_available_header": "Estratégias disponíveis:", - "plugin_enter_value": "Informe seu %v %v", - "plugin_enable_bool_question": "Ativar %v %v (true/false)", - "plugin_setup_skipped": "[%v] ignorado\\n", - "plugin_question_bool": "%v%v (true/false, deixe em branco para '%s' ou digite '%v' para remover o valor):", - "plugin_question_with_default": "%v%v (deixe em branco para '%s' ou digite '%v' para remover o valor):", - "plugin_question_optional": "%v%v (deixe em branco para pular):", - "plugin_invalid_boolean_value": "valor booleano inválido: %v", - "plugin_setting_not_valid": "%v=%v não é válido", - "plugin_invalid_bool": "bool inválido: %q", - "ollama_num_ctx_must_be_finite": "num_ctx deve ser um número finito", - "ollama_num_ctx_must_be_integer": "num_ctx deve ser um inteiro, recebeu float com parte fracionária", - "ollama_num_ctx_value_out_of_range": "valor num_ctx fora do intervalo", - "ollama_num_ctx_must_be_positive": "num_ctx deve ser positivo, recebeu: %d", - "ollama_num_ctx_value_too_large": "valor num_ctx muito grande: %d", - "ollama_num_ctx_must_be_valid_number": "num_ctx deve ser um número válido", - "ollama_num_ctx_must_be_valid_number_got": "num_ctx deve ser um número válido, recebeu: %s", - "ollama_num_ctx_invalid_type": "num_ctx deve ser um número, recebeu tipo inválido", - "ollama_num_ctx_exceeds_maximum": "num_ctx excede o valor máximo permitido de %d", - "ollama_error_reading_body": "Erro ao ler o corpo: %v", - "ollama_error_endpoint": "testando endpoint", - "ollama_error_unmarshalling_body": "Erro ao desserializar o corpo: %v", - "ollama_invalid_num_ctx_in_request": "num_ctx inválido na requisição: %v", - "ollama_warning_parse_variables": "Aviso: falha ao analisar options.variables como JSON: %v", - "ollama_error_marshalling_body": "Erro ao serializar o corpo: %v", + "language_setup_description": "Idioma - Idioma de saída padrão do provedor de IA", + "list_all_available_models": "Listar todos os modelos disponíveis", + "list_all_contexts": "Listar todos os contextos", + "list_all_patterns": "Listar todos os padrões/patterns", + "list_all_registered_extensions": "Listar todas as extensões registradas", + "list_all_sessions": "Listar todas as sessões", + "list_all_strategies": "Listar todas as estratégias", + "list_all_vendors": "Listar todos os fornecedores", + "list_gemini_tts_voices": "Listar todas as vozes TTS do Gemini disponíveis", + "list_transcription_models": "Listar todos os modelos de transcrição disponíveis", + "lmstudio_api_url_question": "Digite sua URL %v (como lembrete, geralmente é %v)", + "lmstudio_error_reading_response": "erro ao ler a resposta: %w", + "lmstudio_failed_create_request": "falha ao criar a requisição: %w", + "lmstudio_failed_decode_response": "falha ao decodificar a resposta: %w", + "lmstudio_failed_marshal_payload": "falha ao serializar o payload: %w", + "lmstudio_failed_send_request": "falha ao enviar a requisição: %w", + "lmstudio_invalid_response_missing_choices": "formato de resposta inválido: escolhas ausentes ou vazias", + "lmstudio_invalid_response_missing_content": "formato de resposta inválido: conteúdo ausente ou não é uma string na mensagem", + "lmstudio_invalid_response_missing_message": "formato de resposta inválido: mensagem ausente na primeira escolha", + "lmstudio_invalid_response_missing_text": "formato de resposta inválido: texto ausente ou não é uma string na primeira escolha", + "lmstudio_no_embeddings_returned": "nenhum embedding retornado", + "lmstudio_unexpected_status_code": "código de status inesperado: %d", + "model_context_length_ollama": "Comprimento do contexto do modelo (afeta apenas ollama)", + "model_for_transcription": "Modelo para usar na transcrição (separado do modelo de chat)", + "no_description_available": "Nenhuma descrição disponível", + "no_items_found": "Nenhum %s", + "no_notification_system_available": "nenhum sistema de notificação disponível", + "number_of_latest_patterns": "Número dos padrões mais recentes a listar", + "ollama_cannot_parse_url": "Não é possível analisar a URL '%s': %v", + "ollama_chat_request_failed": "Requisição de chat falhou: %v", + "ollama_empty_address": "endereço vazio", "ollama_error_building_chat_url": "Erro ao construir a URL /chat: %v", "ollama_error_creating_chat_request": "Erro ao criar a requisição /chat: %v", - "ollama_failed_create_request": "falha ao criar a requisição", + "ollama_error_endpoint": "testando endpoint", "ollama_error_getting_chat_body": "Erro ao obter o corpo /chat: %v", - "ollama_upstream_non_2xx_body_unreadable": "Servidor Fabric upstream retornou status não-2xx %d e o corpo não pôde ser lido: %v", - "ollama_upstream_non_2xx": "Servidor Fabric upstream retornou status não-2xx %d: %s", - "ollama_upstream_returned_status": "servidor Fabric upstream retornou status %d", - "ollama_error_prefix": "Erro: %s", + "ollama_error_marshalling_body": "Erro ao serializar o corpo: %v", "ollama_error_parse_upstream_response": "Erro: falha ao analisar resposta upstream", - "ollama_failed_unmarshal_fabric_response": "falha ao desserializar resposta Fabric", - "ollama_error_writing_response": "Erro ao escrever resposta: %v", + "ollama_error_prefix": "Erro: %s", + "ollama_error_reading_body": "Erro ao ler o corpo: %v", "ollama_error_scanning_body": "Erro ao escanear o corpo: %v", + "ollama_error_unmarshalling_body": "Erro ao desserializar o corpo: %v", + "ollama_error_writing_response": "Erro ao escrever resposta: %v", + "ollama_failed_create_request": "falha ao criar a requisição", + "ollama_failed_decode_data_url": "falha ao decodificar URL de dados: %v", + "ollama_failed_fetch_image": "falha ao buscar imagem de %s: %s", "ollama_failed_scan_sse_stream": "falha ao escanear fluxo de resposta SSE: %v", - "ollama_sse_buffer_limit": "Linha SSE excede limite de buffer de 1MB - linha de dados muito grande", - "ollama_warning_no_content": "Aviso: nenhum conteúdo recebido do servidor Fabric upstream", - "ollama_no_content_from_upstream": "nenhum conteúdo recebido do servidor Fabric upstream", - "ollama_empty_address": "endereço vazio", + "ollama_failed_unmarshal_fabric_response": "falha ao desserializar resposta Fabric", + "ollama_http_timeout_question": "Insira o tempo limite HTTP (por exemplo, 20m, 60s)", "ollama_invalid_address": "endereço inválido: %w", "ollama_invalid_address_missing_host": "endereço inválido: host ausente", "ollama_invalid_address_missing_hostname": "endereço inválido: nome do host ausente", "ollama_invalid_address_path_not_allowed": "endereço inválido: componente de caminho não permitido em endereço simples", - "extension_registry_not_initialized": "registro de extensões não inicializado", - "extension_name_label": "Extensão: %s\n", - "extension_status_disabled": " Status: DESABILITADA - Verificação de hash falhou: %v\n", - "extension_config_path_label": " Caminho de configuração: %s\n\n", - "extension_status_enabled": " Status: HABILITADA\n", - "extension_executable_label": " Executável: %s\n", - "extension_type_label": " Tipo: %s\n", - "extension_timeout_label": " Tempo limite: %s\n", - "extension_description_label": " Descrição: %s\n", - "extension_version_label": " Versão: %s\n", - "extension_operations_label": " Operações:\n", - "extension_command_template_label": " Modelo de comando: %s\n", - "extension_file_config_label": " Configuração de arquivo:\n", - "extension_invalid_config_path": "caminho de configuração inválido: %w", - "extension_failed_read_config": "falha ao ler o arquivo de configuração: %w", - "extension_failed_parse_config": "falha ao analisar o arquivo de configuração: %w", - "extension_failed_register": "falha ao registrar a extensão: %w", - "extension_invalid_timeout": "valor de tempo limite inválido '%s': deve ser uma duração como '30s' ou '1m': %w", - "extension_registered_success": "Extensão registrada com sucesso:\n", - "extension_name_detail_label": "Nome: %s\n", - "extension_failed_remove": "falha ao remover a extensão: %w", - "lmstudio_api_url_question": "Digite sua URL %v (como lembrete, geralmente é %v)", - "lmstudio_failed_create_request": "falha ao criar a requisição: %w", - "lmstudio_failed_send_request": "falha ao enviar a requisição: %w", - "lmstudio_unexpected_status_code": "código de status inesperado: %d", - "lmstudio_failed_decode_response": "falha ao decodificar a resposta: %w", - "lmstudio_failed_marshal_payload": "falha ao serializar o payload: %w", - "lmstudio_error_reading_response": "erro ao ler a resposta: %w", - "lmstudio_invalid_response_missing_choices": "formato de resposta inválido: escolhas ausentes ou vazias", - "lmstudio_invalid_response_missing_message": "formato de resposta inválido: mensagem ausente na primeira escolha", - "lmstudio_invalid_response_missing_content": "formato de resposta inválido: conteúdo ausente ou não é uma string na mensagem", - "lmstudio_invalid_response_missing_text": "formato de resposta inválido: texto ausente ou não é uma string na primeira escolha", - "lmstudio_no_embeddings_returned": "nenhum embedding retornado", - "extension_warning_load_registry": "Aviso: não foi possível carregar o registro de extensões: %v\n", - "extension_name_empty": "o nome da extensão não pode estar vazio", - "extension_name_contains_spaces": "o nome da extensão '%s' contém espaços - nomes não devem conter espaços", - "extension_executable_not_found": "executável não encontrado: %w", - "extension_failed_get_absolute_path": "falha ao obter o caminho absoluto: %w", - "extension_failed_hash_executable": "falha ao calcular o hash do executável: %w", - "extension_invalid_definition": "definição de extensão inválida: %w", - "extension_name_required": "o nome da extensão é obrigatório", - "extension_executable_required": "o caminho do executável é obrigatório", - "extension_type_required": "o tipo da extensão é obrigatório", - "extension_invalid_timeout_format": "formato de tempo limite inválido: %w", - "extension_operation_required": "pelo menos uma operação deve ser definida", - "extension_cmd_template_required": "o modelo de comando é obrigatório para a operação %s", - "extension_not_found": "extensão %s não encontrada", - "extension_config_hash_mismatch": "discrepância de hash do arquivo de configuração para %s", - "extension_failed_verify_executable": "falha ao verificar o executável: %w", - "extension_executable_hash_mismatch": "discrepância de hash do executável para %s", - "extension_failed_marshal_registry": "falha ao serializar o registro de extensões: %w", - "extension_failed_read_registry": "falha ao ler o registro de extensões: %w", - "extension_failed_parse_registry": "falha ao analisar o registro de extensões: %w", - "extension_failed_get_extension": "falha ao obter a extensão: %w", - "extension_failed_format_command": "falha ao formatar o comando: %w", - "extension_empty_command": "comando vazio após a formatação", - "extension_operation_not_found": "operação %s não encontrada para a extensão %s", - "extension_executing_command": "Executando comando: %s\n", - "extension_execution_failed_stderr": "execução falhou: %w\nstderr: %s", - "extension_no_file_config": "nenhuma configuração de arquivo encontrada", - "extension_no_output_file": "nenhum arquivo de saída especificado na configuração", - "extension_execution_timed_out": "execução expirou após %v", - "extension_execution_failed_err": "execução falhou: %w\nerr: %s", - "extension_failed_read_output_file": "falha ao ler o arquivo de saída: %w", - "extension_failed_get_output_path": "falha ao obter o caminho de saída: %w\nerr: %s", - "spotify_failed_create_token_request": "falha ao criar a solicitação de token: %w", - "spotify_failed_request_access_token": "falha ao solicitar o token de acesso: %w", - "spotify_failed_get_access_token": "falha ao obter o token de acesso: status %d, resposta: %s", - "spotify_failed_decode_token_response": "falha ao decodificar a resposta do token: %w", - "spotify_failed_create_request": "falha ao criar a solicitação: %w", - "spotify_failed_execute_request": "falha ao executar a solicitação: %w", - "spotify_failed_read_response_body": "falha ao ler o corpo da resposta: %w", + "ollama_invalid_data_url_format": "formato de URL de dados inválido", + "ollama_invalid_http_timeout_using_default": "Tempo limite HTTP inválido '%s': %v, usando o padrão", + "ollama_invalid_num_ctx_in_request": "num_ctx inválido na requisição: %v", + "ollama_no_content_from_upstream": "nenhum conteúdo recebido do servidor Fabric upstream", + "ollama_num_ctx_exceeds_maximum": "num_ctx excede o valor máximo permitido de %d", + "ollama_num_ctx_invalid_type": "num_ctx deve ser um número, recebeu tipo inválido", + "ollama_num_ctx_must_be_finite": "num_ctx deve ser um número finito", + "ollama_num_ctx_must_be_integer": "num_ctx deve ser um inteiro, recebeu float com parte fracionária", + "ollama_num_ctx_must_be_positive": "num_ctx deve ser positivo, recebeu: %d", + "ollama_num_ctx_must_be_valid_number": "num_ctx deve ser um número válido", + "ollama_num_ctx_must_be_valid_number_got": "num_ctx deve ser um número válido, recebeu: %s", + "ollama_num_ctx_value_out_of_range": "valor num_ctx fora do intervalo", + "ollama_num_ctx_value_too_large": "valor num_ctx muito grande: %d", + "ollama_sse_buffer_limit": "Linha SSE excede limite de buffer de 1MB - linha de dados muito grande", + "ollama_upstream_non_2xx": "Servidor Fabric upstream retornou status não-2xx %d: %s", + "ollama_upstream_non_2xx_body_unreadable": "Servidor Fabric upstream retornou status não-2xx %d e o corpo não pôde ser lido: %v", + "ollama_upstream_returned_status": "servidor Fabric upstream retornou status %d", + "ollama_warning_no_content": "Aviso: nenhum conteúdo recebido do servidor Fabric upstream", + "ollama_warning_parse_variables": "Aviso: falha ao analisar options.variables como JSON: %v", + "openai_api_base_url_not_configured": "URL base da API não configurada para o provedor %s", + "openai_audio_ffmpeg_failed": "ffmpeg falhou: %v: %s", + "openai_audio_ffmpeg_not_found_install": "ffmpeg não encontrado: por favor instale", + "openai_audio_file_exceeds_limit_enable_split": "O arquivo %s excede o limite de 25MB; use --split-media-file para habilitar a divisão automática", + "openai_audio_file_exceeds_limit_splitting": "O arquivo %s é maior que o limite de tamanho... dividindo em partes...", + "openai_audio_model_not_supported_for_transcription": "o modelo '%s' não é suportado para transcrição", + "openai_audio_running_ffmpeg_split_chunks": "Executando ffmpeg para dividir o áudio em partes de %d segundos...", + "openai_audio_unable_to_split_acceptable_size_chunks": "não foi possível dividir o arquivo em partes de tamanho aceitável", + "openai_audio_unsupported_audio_format": "formato de áudio não suportado '%s'", + "openai_audio_using_model_to_transcribe_part": "Usando o modelo %s para transcrever a parte %d (arquivo: %s)...", + "openai_failed_to_create_models_url": "falha ao criar URL de modelos: %w", + "openai_image_failed_to_create_directory": "falha ao criar o diretório %s: %w", + "openai_image_failed_to_decode_image_data": "falha ao decodificar os dados da imagem: %w", + "openai_image_failed_to_save_image": "falha ao salvar a imagem em %s: %w", + "openai_image_saved_to": "Imagem salva em: %s", + "openai_model_no_image_generation": "o modelo '%s' não suporta geração de imagens. Modelos suportados: %s", + "openai_models_response_too_large": "resposta de modelos muito grande do provedor %s (>%d bytes)", + "openai_unable_to_parse_models_response": "não foi possível analisar a resposta de modelos; resposta bruta: %s", + "openai_unexpected_status_code_read_error": "código de status inesperado: %d do provedor %s (falha ao ler corpo da resposta: %v)", + "openai_unexpected_status_code_with_body": "código de status inesperado: %d do provedor %s, corpo da resposta: %s", + "openai_warning_model_no_image_generation": "Aviso: O modelo '%s' não suporta geração de imagens. Modelos suportados: %s. Considere usar -m gpt-5.2 para geração de imagens.\n", + "optional_marker": "(opcional)", + "options_placeholder": "[OPÇÕES]", + "output_entire_session": "Saída de toda a sessão (incluindo temporária) para o arquivo de saída", + "output_full": "Saída: %s", + "output_raw_list_shell_completion": "Saída de lista bruta sem cabeçalhos/formatação (para conclusão de shell)", + "output_to_file": "Exportar para arquivo", + "output_truncated": "Saída: %s...", + "output_video_metadata": "Exibir metadados do vídeo", + "path_to_yaml_config": "Caminho para arquivo de configuração YAML", + "pattern_not_found_list_available": "padrão '%s' não encontrado. Execute 'fabric -l' para ver os padrões disponíveis", + "pattern_not_found_no_patterns": "padrão '%s' não encontrado.\n\nNenhum padrão instalado! Para resolver:\n • Execute 'fabric --setup' para configurar e baixar padrões\n • Ou execute 'fabric -U' para baixar/atualizar padrões diretamente", + "pattern_variables_help": "Valores para variáveis do padrão, ex. -v=#role:expert -v=#points:30", + "patterns_cloning_repository": "Clonando repositório %s (caminho: %s)...\\n", + "patterns_debug_included_custom_directory": "📂 Também incluídos os padrões do diretório personalizado: %s\\n", + "patterns_detected_old_path": "🔄 Caminho antigo 'patterns' detectado, tentando migrar para 'data/patterns'...", + "patterns_download_success": "✅ Padrões baixados e instalados com sucesso em %s\\n", + "patterns_downloaded_temp": "%d padrões baixados para o diretório temporário\\n", + "patterns_downloading": "Baixando padrões e populando %s...\\n", + "patterns_failed_access_directory": "falha ao acessar o diretório de padrões '%s': %w", + "patterns_failed_create_temp_dir": "falha ao criar diretório temporário: %w", + "patterns_failed_create_temp_folder": "falha ao criar a pasta temporária de padrões: %w", + "patterns_failed_download_from_git": "falha ao baixar padrões do repositório Git: %w", + "patterns_failed_download_from_repo": "falha ao baixar padrões de %s: %w", + "patterns_failed_loaded_marker": "falha ao criar o arquivo marcador '%s': %w", + "patterns_failed_move_patterns": "falha ao mover os padrões para o diretório de configuração: %w", + "patterns_failed_move_test_patterns": "falha ao mover padrões de teste para a pasta temporária: %w", + "patterns_failed_read_directory": "falha ao ler o diretório de padrões: %w", + "patterns_failed_read_temp_directory": "falha ao ler o diretório temporário de padrões: %w", + "patterns_failed_unique_file": "falha ao criar o arquivo de padrões únicos: %w", + "patterns_failed_write_unique_file": "falha ao gravar o arquivo de padrões únicos: %w", + "patterns_found_new_path": "✅ %d padrões encontrados no novo caminho '%s', atualizando configuração...\\n", + "patterns_git_repo_folder_question": "Informe a pasta padrão no repositório Git onde os padrões ficam armazenados", + "patterns_git_repo_url_question": "Informe a URL padrão do repositório Git para os padrões", + "patterns_loader_label": "Carregador de padrões", + "patterns_no_patterns_copied": "nenhum padrão foi copiado com sucesso para %s", + "patterns_no_patterns_found_in_directories": "nenhum padrão encontrado nos diretórios %s e %s", + "patterns_no_patterns_found_in_directory": "nenhum padrão encontrado no diretório %s", + "patterns_no_patterns_migration_failed": "nenhum padrão encontrado no repositório no caminho %s e a migração falhou: %w", + "patterns_not_found_header": "⚠️ Nenhum padrão encontrado!", + "patterns_option_run_setup": "Opção 1 (Recomendada): Execute a configuração para baixar padrões", + "patterns_option_run_setup_command": "fabric --setup", + "patterns_option_run_update": "Opção 2: Baixar/atualizar padrões diretamente", + "patterns_option_run_update_command": "fabric -U", + "patterns_preserve_warning": "Aviso: não foi possível preservar o padrão personalizado '%s': %v\\n", + "patterns_preserved_custom_pattern": "Padrão personalizado preservado: %s\\n", + "patterns_required_to_work": "Padrões são necessários para o Fabric funcionar. Para resolver:", + "patterns_saving_updated_configuration": "💾 Salvando configuração atualizada (caminho alterado de '%s' para '%s')...\\n", + "patterns_setup_description": "Padrões - Baixa os padrões", + "patterns_unable_to_find_or_migrate": "não foi possível encontrar padrões no caminho atual '%s' ou migrar para a nova estrutura", + "patterns_unique_file_created": "📝 Arquivo de padrões únicos criado com %d padrões\\n", + "patterns_warning_custom_directory": "Aviso: não foi possível ler o diretório de padrões personalizado %s: %v\\n", + "patterns_warning_remove_test_folder": "Aviso: não foi possível remover a pasta temporária de teste '%s': %v\\n", + "perplexity_api_key_not_configured": "Chave API não configurada para %s. Defina a variável de ambiente %s ou execute 'fabric --setup' para configurar %s", + "perplexity_api_request_failed": "requisição à API Perplexity falhou: %w", + "perplexity_citations_header": "\n\n**Citações:**\n", + "perplexity_failed_configure": "falha ao configurar Perplexity: %w", + "perplexity_streaming_error": "erro de streaming Perplexity: %v", + "plugin_configured": " ✓", + "plugin_enable_bool_question": "Ativar %v %v (true/false)", + "plugin_enter_value": "Informe seu %v %v", + "plugin_invalid_bool": "bool inválido: %q", + "plugin_invalid_boolean_value": "valor booleano inválido: %v", + "plugin_not_configured": " ⚠️ NÃO CONFIGURADO", + "plugin_question_bool": "%v%v (true/false, deixe em branco para '%s' ou digite '%v' para remover o valor):", + "plugin_question_optional": "%v%v (deixe em branco para pular):", + "plugin_question_with_default": "%v%v (deixe em branco para '%s' ou digite '%v' para remover o valor):", + "plugin_setting_not_valid": "%v=%v não é válido", + "plugin_setup_configured": "[%v] configurado", + "plugin_setup_skipped": "[%v] ignorado\\n", + "prefer_playlist_over_video": "Preferir playlist ao vídeo se ambos os IDs estiverem presentes na URL", + "print_context": "Imprimir contexto", + "print_current_version": "Imprimir versão atual", + "print_session": "Imprimir sessão", + "register_new_extension": "Registrar uma nova extensão do caminho do arquivo de configuração", + "remove_registered_extension": "Remover uma extensão registrada por nome", + "required_marker": "[obrigatório]", + "run_setup_for_reconfigurable_parts": "Executar a configuração para todas as partes reconfiguráveis do fabric", + "save_generated_image_to_file": "Salvar imagem gerada no caminho de arquivo especificado (ex. 'output.png')", + "scrape_website_url": "Fazer scraping da URL do site para markdown usando Jina AI", + "scraping_not_configured": "funcionalidade de scraping não está configurada. Por favor configure o Jina para ativar o scraping", + "search_question_jina": "Pergunta de busca usando Jina AI", + "seed_for_lmm_generation": "Seed para ser usado na geração LMM", + "send_desktop_notification": "Enviar notificação desktop quando o comando for concluído", + "serve_fabric_api_ollama_endpoints": "Servir a API REST do Fabric com endpoints ollama", + "serve_fabric_rest_api": "Servir a API REST do Fabric", + "set_debug_level": "Definir nível de debug (0=desligado, 1=básico, 2=detalhado, 3=rastreamento)", + "set_frequency_penalty": "Definir penalidade de frequência", + "set_location_web_search": "Definir localização para resultados de busca web (ex. 'America/Los_Angeles')", + "set_presence_penalty": "Definir penalidade de presença", + "set_reasoning_thinking_level": "Definir nível de raciocínio/pensamento (ex. off, low, medium, high, ou tokens numéricos para Anthropic ou Google Gemini)", + "set_temperature": "Definir temperatura", + "set_top_p": "Definir top P", + "setup_add_more_providers_later": "Você poderá adicionar mais provedores depois com 'fabric --setup'", + "setup_ai_provider_required": "O Fabric precisa de pelo menos um provedor de IA para funcionar.", + "setup_available_ai_providers": "Provedores de IA Disponíveis:", + "setup_available_plugins": "Plugins disponíveis:", + "setup_complete_header": "✅ Configuração completa! Agora você pode usar o Fabric.", + "setup_configure_more": "• Configurar mais opções: fabric --setup", + "setup_enter_ai_provider_number": "Número do Provedor de IA", + "setup_failed_download_patterns": "falha ao baixar padrões: %w", + "setup_failed_download_strategies": "falha ao baixar estratégias: %w", + "setup_failed_set_defaults": "falha ao configurar provedor e modelo padrão: %w", + "setup_invalid_selection": "seleção inválida: %s", + "setup_list_patterns": "• Listar padrões disponíveis: fabric -l", + "setup_next_steps": "Próximos passos:", + "setup_no_ai_provider_selected": "nenhum provedor de IA selecionado - pelo menos um é necessário", + "setup_optional_configuration_header": "━━━ CONFIGURAÇÃO OPCIONAL ━━━\n\nFerramentas Opcionais", + "setup_plugin_number": "Número do Plugin", + "setup_plugin_prompt": "Informe o número do plugin a configurar", + "setup_required_configuration_header": "━━━ CONFIGURAÇÃO OBRIGATÓRIA ━━━\n\nProvedores de IA [pelo menos um obrigatório]", + "setup_required_tools": "Ferramentas Obrigatórias", + "setup_step_configure_ai_provider": "🤖 Passo 3: Configurar um provedor de IA", + "setup_step_downloading_patterns": "📥 Passo 1: Baixando padrões (necessários para o Fabric funcionar)...", + "setup_step_downloading_strategies": "📥 Passo 2: Baixando estratégias (necessárias para o Fabric funcionar)...", + "setup_step_setting_defaults": "⚙️ Passo 4: Configurando provedor e modelo padrão...", + "setup_try_pattern": "• Experimentar um padrão: echo 'seu texto' | fabric --pattern summarize", + "setup_validation_ai_provider_configured": "✓ Provedor de IA configurado", + "setup_validation_ai_provider_missing": "✗ Provedor de IA não configurado - Necessário para o Fabric funcionar", + "setup_validation_complete": "✓ Todos os componentes necessários estão configurados!", + "setup_validation_defaults_configured": "✓ Provedor/modelo padrão definido: %s/%s", + "setup_validation_defaults_missing": "✗ Provedor/modelo padrão não definido - Necessário para o Fabric funcionar", + "setup_validation_header": "Status da Configuração:", + "setup_validation_incomplete_help": "Execute 'fabric --setup' novamente para configurar itens faltantes,\nou execute 'fabric -U' para baixar padrões e estratégias.", + "setup_validation_incomplete_warning": "⚠️ Configuração incompleta! Componentes necessários ausentes.", + "setup_validation_patterns_configured": "✓ Padrões baixados", + "setup_validation_patterns_missing": "✗ Padrões não encontrados - Necessários para o Fabric funcionar", + "setup_validation_strategies_configured": "✓ Estratégias baixadas", + "setup_validation_strategies_missing": "✗ Estratégias não encontradas - Necessárias para o Fabric funcionar", + "setup_welcome_header": "🎉 Bem-vindo ao Fabric! Vamos configurar tudo.", + "show_dry_run": "Mostrar o que seria enviado ao modelo sem enviar de fato", + "specify_language_code": "Especificar código de idioma para o chat, ex. -g=en -g=zh -g=pt-BR -g=pt-PT", + "specify_vendor_for_model": "Especificar fornecedor para o modelo selecionado (ex. -V \"LM Studio\" -m openai/gpt-oss-20b)", + "split_media_files_ffmpeg": "Dividir arquivos de áudio/vídeo maiores que 25MB usando ffmpeg", "spotify_api_request_failed": "a solicitação da API falhou: status %d, resposta: %s", - "spotify_failed_parse_show_metadata": "falha ao analisar os metadados do programa: %w", - "spotify_failed_parse_episode_metadata": "falha ao analisar os metadados do episódio: %w", - "spotify_search_failed": "a pesquisa falhou: %w", - "spotify_failed_parse_search_results": "falha ao analisar os resultados da pesquisa: %w", + "spotify_audio_preview_label": "**Prévia de áudio**: %s", + "spotify_client_id_question": "Insira seu CLIENT ID do Spotify", + "spotify_client_secret_question": "Insira seu CLIENT SECRET do Spotify", + "spotify_description_header": "## Descrição", + "spotify_duration_label": "**Duração**: %d minutos", + "spotify_episode_header": "# Episódio do Spotify", + "spotify_error_getting_metadata": "erro ao obter metadados do Spotify: %v", + "spotify_explicit_label": "**Explícito**: %v", + "spotify_failed_create_request": "falha ao criar a solicitação: %w", + "spotify_failed_create_token_request": "falha ao criar a solicitação de token: %w", + "spotify_failed_decode_token_response": "falha ao decodificar a resposta do token: %w", + "spotify_failed_execute_request": "falha ao executar a solicitação: %w", + "spotify_failed_get_access_token": "falha ao obter o token de acesso: status %d, resposta: %s", "spotify_failed_get_show_episodes": "falha ao obter os episódios do programa: %w", + "spotify_failed_parse_episode_metadata": "falha ao analisar os metadados do episódio: %w", "spotify_failed_parse_episodes": "falha ao analisar os episódios: %w", - "template_file_log_validating_path": "Arquivo: validando caminho %q", - "template_file_error_path_contains_parent_ref": "arquivo: o caminho não pode conter '..'", + "spotify_failed_parse_search_results": "falha ao analisar os resultados da pesquisa: %w", + "spotify_failed_parse_show_metadata": "falha ao analisar os metadados do programa: %w", + "spotify_failed_read_response_body": "falha ao ler o corpo da resposta: %w", + "spotify_failed_request_access_token": "falha ao solicitar o token de acesso: %w", + "spotify_invalid_url": "URL do Spotify inválida, não é possível obter o ID do programa ou episódio: '%s'", + "spotify_label": "Spotify", + "spotify_language_field_label": "**Idioma**: %s", + "spotify_languages_label": "**Idiomas**: %s", + "spotify_media_type_label": "**Tipo de mídia**: %s", + "spotify_no_episode_found": "nenhum episódio encontrado com o ID: %s", + "spotify_no_show_found": "nenhum programa encontrado com o ID: %s", + "spotify_not_configured": "Spotify não está configurado, por favor execute o procedimento de configuração", + "spotify_publisher_label": "**Editora**: %s", + "spotify_release_date_label": "**Data de lançamento**: %s", + "spotify_search_description_label": "- **Descrição**: %s", + "spotify_search_episodes_label": "- **Episódios**: %d", + "spotify_search_failed": "a pesquisa falhou: %w", + "spotify_search_publisher_label": "- **Editora**: %s", + "spotify_search_results_header": "# Resultados de pesquisa do Spotify", + "spotify_search_url_label": "- **URL**: %s", + "spotify_setup_description": "Spotify - para obter metadados de podcasts/programas do Spotify", + "spotify_show_header": "# Podcast/Programa do Spotify", + "spotify_show_name_label": "**Programa**: %s", + "spotify_title_label": "**Título**: %s", + "spotify_total_episodes_label": "**Total de episódios**: %d", + "spotify_url_label": "**URL**: %s", + "start_tag_thinking_sections": "Tag inicial para seções de pensamento", + "strategies_available_header": "Estratégias disponíveis:", + "strategies_cloning_repository": "Clonando repositório %s (caminho: %s)...\\n", + "strategies_download_success": "✅ Estratégias baixadas e instaladas com sucesso em %s\\n", + "strategies_downloaded_count": "%d estratégias baixadas\\n", + "strategies_downloading": "Baixando estratégias e populando %s...\\n", + "strategies_failed_create_directory": "falha ao criar diretório de estratégias: %w", + "strategies_failed_download": "falha ao baixar estratégias: %w", + "strategies_git_repo_folder_question": "Informe a pasta padrão no repositório Git onde as estratégias ficam armazenadas", + "strategies_git_repo_url_question": "Informe a URL padrão do repositório Git para as estratégias", + "strategies_home_dir_error": "não foi possível obter o diretório home: %v", + "strategies_home_dir_fallback": "não foi possível obter o diretório home: %v, usando o diretório atual", + "strategies_label": "Estratégias de prompt", + "strategies_none_found": "nenhuma estratégia encontrada. Execute 'fabric --setup' para baixar estratégias", + "strategies_setup_description": "Estratégias - Baixa estratégias de prompting (como chain of thought)", + "strategy_not_found": "estratégia %s não encontrada. Execute 'fabric --liststrategies' para ver a lista", + "stream_help": "Streaming", + "suppress_thinking_tags": "Suprimir texto contido em tags de pensamento", + "template_datetime_error_invalid_number": "invalid number in relative time: %q", + "template_datetime_error_invalid_relative_format": "invalid relative time format", + "template_datetime_error_invalid_unit": "invalid time unit: %q", + "template_datetime_error_relative_requires_value": "relative time requires a value", + "template_datetime_error_unknown_operation": "datetime: unknown operation %q", "template_file_error_expand_home_dir": "arquivo: não foi possível expandir o diretório home: %v", - "template_file_log_cleaned_path": "Arquivo: caminho limpo %q", - "template_file_log_operation_value": "Arquivo: operação=%q valor=%q", - "template_file_error_tail_requires_path_lines": "arquivo: tail requer o formato caminho|linhas", "template_file_error_invalid_line_count": "arquivo: contagem de linhas inválida %q", "template_file_error_line_count_positive": "arquivo: a contagem de linhas deve ser positiva", - "template_file_log_tail_returning_lines": "Arquivo: tail retornando %d linhas", - "template_file_error_stat_file": "arquivo: não foi possível obter o estado do arquivo: %v", - "template_file_error_size_exceeds_limit": "arquivo: tamanho %d excede o limite de %d bytes", - "template_file_error_read_file": "arquivo: não foi possível ler: %v", - "template_file_log_read_bytes": "Arquivo: %d bytes lidos", - "template_file_log_exists_for_path": "Arquivo: exists=%v para o caminho %q", - "template_file_log_size_for_path": "Arquivo: tamanho=%d para o caminho %q", - "template_file_log_modified_for_path": "Arquivo: modified=%q para o caminho %q", - "template_file_error_unknown_operation": "arquivo: operação desconhecida %q (suportadas: read, tail, exists, size, modified)", - "template_file_log_reading_last_lines": "Arquivo: lendo as últimas %d linhas de %q", "template_file_error_open_file": "arquivo: não foi possível abrir: %v", - "template_file_error_stat_open_file": "arquivo: não foi possível obter o estado: %v", + "template_file_error_path_contains_parent_ref": "arquivo: o caminho não pode conter '..'", + "template_file_error_read_file": "arquivo: não foi possível ler: %v", "template_file_error_scanner_read": "arquivo: erro ao ler: %v", + "template_file_error_size_exceeds_limit": "arquivo: tamanho %d excede o limite de %d bytes", + "template_file_error_stat_file": "arquivo: não foi possível obter o estado do arquivo: %v", + "template_file_error_stat_open_file": "arquivo: não foi possível obter o estado: %v", + "template_file_error_tail_requires_path_lines": "arquivo: tail requer o formato caminho|linhas", + "template_file_error_unknown_operation": "arquivo: operação desconhecida %q (suportadas: read, tail, exists, size, modified)", + "template_file_log_cleaned_path": "Arquivo: caminho limpo %q", + "template_file_log_exists_for_path": "Arquivo: exists=%v para o caminho %q", + "template_file_log_modified_for_path": "Arquivo: modified=%q para o caminho %q", + "template_file_log_operation_value": "Arquivo: operação=%q valor=%q", + "template_file_log_read_bytes": "Arquivo: %d bytes lidos", "template_file_log_read_total_return_last": "Arquivo: %d linhas lidas no total, retornando as últimas %d", - "chatter_error_no_session_pattern_user_messages": "nenhuma sessão, padrão ou mensagem do usuário fornecida", - "chatter_error_no_messages_provided": "nenhuma mensagem fornecida", - "chatter_log_stream_usage_metadata": "[Metadados] Entrada: %d | Saída: %d | Total: %d", - "chatter_error_stream_update": "Erro: %s", - "chatter_error_empty_response": "resposta vazia", - "chatter_warning_parse_file_changes_failed": "Aviso: Falha ao analisar alteracoes de arquivo: %v", - "chatter_warning_get_current_directory_failed": "Aviso: Falha ao obter o diretorio atual: %v", - "chatter_warning_apply_file_changes_failed": "Aviso: Falha ao aplicar alteracoes de arquivo: %v", - "chatter_info_file_changes_applied_successfully": "Alteracoes de arquivo aplicadas com sucesso.", - "chatter_help_review_changes_with_git_diff": "Voce pode revisar as alteracoes com 'git diff' se estiver usando git.", - "chatter_error_find_session": "nao foi possivel encontrar a sessao %s: %v", - "chatter_error_find_context": "nao foi possivel encontrar o contexto %s: %v", - "chatter_error_get_pattern": "nao foi possivel obter o padrao %s: %v", - "chatter_error_load_strategy": "nao foi possivel carregar a estrategia %s: %v", - "chatter_prompt_enforce_response_language": "%s\n\nIMPORTANTE: Primeiro, execute as instrucoes fornecidas neste prompt usando a entrada do usuario. Em seguida, garanta que toda a sua resposta final, incluindo quaisquer cabecalhos de secao ou titulos gerados como parte da execucao das instrucoes, seja escrita SOMENTE no idioma %s.", - "vertexai_failed_google_credentials": "falha ao obter credenciais do Google (certifique-se de que o ADC esteja configurado): %w", - "vertexai_no_models_found": "nenhum modelo encontrado de nenhum editor", - "vertexai_no_conversational_models": "nenhum modelo conversacional encontrado", + "template_file_log_reading_last_lines": "Arquivo: lendo as últimas %d linhas de %q", + "template_file_log_size_for_path": "Arquivo: tamanho=%d para o caminho %q", + "template_file_log_tail_returning_lines": "Arquivo: tail retornando %d linhas", + "template_file_log_validating_path": "Arquivo: validando caminho %q", + "template_sys_error_env_requires_var": "env: variable name required", + "template_sys_error_home": "failed to get home directory: %v", + "template_sys_error_hostname": "failed to get hostname: %v", + "template_sys_error_pwd": "failed to get working directory: %v", + "template_sys_error_unknown_operation": "sys: unknown operation %q", + "template_sys_error_user": "failed to get current user: %v", + "transcription_model_required": "modelo de transcrição é necessário (use --transcribe-model)", + "transparent_background_png_webp_only": "fundo transparente só pode ser usado com formatos PNG e WebP, não %s", + "tts_audio_generated_successfully": "Áudio TTS gerado com sucesso e salvo em: %s\n", + "tts_model_requires_audio_output": "modelo TTS '%s' requer saída de áudio. Por favor especifique um arquivo de saída de áudio com a flag -o (ex. -o output.wav)", + "tts_voice_name": "Nome da voz TTS para modelos suportados (ex. Kore, Charon, Puck)", + "unsupported_conversion": "conversão não suportada de %v para %v", + "update_patterns": "Atualizar os padrões/patterns", + "usage_header": "Uso:", + "use_model_defaults_raw_help": "Usa os padrões do modelo sem enviar opções de chat (temperature, top_p etc.). Afeta apenas provedores compatíveis com o OpenAI. Os modelos da Anthropic sempre utilizam seleção inteligente de parâmetros para cumprir os requisitos específicos de cada modelo.", + "vendor_no_transcription_support": "o fornecedor %s não suporta transcrição de áudio", + "vendor_not_configured": "o fornecedor %s não está configurado", + "vendor_not_found": "provedor %s não encontrado", + "vendors_no_ai_vendors_configured_read_models": "nenhum provedor de IA configurado para ler modelos", "vertexai_client_not_initialized": "cliente VertexAI nao inicializado", - "vertexai_no_valid_messages": "nenhuma mensagem valida para enviar", - "vertexai_no_content_in_response": "sem conteudo na resposta", - "vertexai_failed_gemini_client": "falha ao criar cliente Gemini: %w", - "vertexai_stream_error": "Erro: %v", - "gemini_invalid_location_format": "formato de local de busca invalido %q: deve ser fuso horario (ex. 'America/Los_Angeles') ou codigo de idioma (ex. 'en-US')", - "gemini_stream_error": "Erro: %v", - "gemini_no_text_for_tts": "nenhum conteudo de texto encontrado para geracao TTS", - "gemini_invalid_voice": "voz invalida '%s'. As vozes validas sao: %v", - "gemini_tts_failed": "falha na geracao TTS: %w", - "gemini_unexpected_data_type": "tipo de dado inesperado: %s, esperado dados de audio", - "gemini_audio_data_too_small": "dados de audio muito pequenos: %d bytes, minimo requerido: %d", - "gemini_wav_generation_failed": "falha ao gerar arquivo WAV: %w", - "gemini_wav_data_invalid": "dados WAV gerados invalidos: %d bytes, minimo requerido: %d", - "gemini_no_audio_data": "nenhum dado de audio recebido do modelo TTS", - "gemini_empty_pcm_data": "dados PCM vazios fornecidos", - "gemini_pcm_data_too_large": "dados PCM muito grandes: %d bytes, maximo permitido: %d", - "bedrock_unable_load_aws_config": "nao foi possivel carregar a configuracao AWS: %w", - "bedrock_aws_region_label": "Regiao AWS", - "bedrock_invalid_aws_region": "regiao AWS invalida: %s", - "bedrock_unable_load_aws_config_with_region": "nao foi possivel carregar a configuracao AWS com regiao %s: %w", - "bedrock_failed_list_foundation_models": "falha ao listar modelos de fundacao: %w", - "bedrock_failed_list_inference_profiles": "falha ao listar perfis de inferencia: %w", - "bedrock_panic_sendstream": "panico no SendStream: %v", - "bedrock_conversestream_failed": "bedrock conversestream falhou para o modelo %s: %w", - "bedrock_unknown_stream_event_type": "tipo de evento de stream desconhecido: %T", - "bedrock_converse_failed": "bedrock converse falhou para o modelo %s: %w", - "bedrock_unexpected_response_type": "tipo de resposta inesperado: %T", - "bedrock_empty_response_content": "conteudo de resposta vazio", - "bedrock_unexpected_content_block_type": "tipo de bloco de conteudo inesperado: %T", - "fetch_unknown_operation": "fetch: operação desconhecida %q (suportada: get)", - "fetch_content_not_utf8": "fetch: o conteúdo não é texto UTF-8 válido", - "fetch_content_null_bytes": "fetch: o conteúdo contém bytes nulos", - "fetch_error_create_request": "fetch: erro ao criar a requisição: %v", - "fetch_error_fetching_url": "fetch: erro ao buscar a URL: %v", - "fetch_http_error": "fetch: erro HTTP: %d - %s", - "fetch_content_too_large": "fetch: conteúdo muito grande: %d bytes (máx %d bytes)", - "fetch_unsupported_content_type": "fetch: tipo de conteúdo não suportado %q - apenas conteúdo de texto permitido", - "fetch_error_reading_response": "fetch: erro ao ler a resposta: %v", - "fetch_content_exceeds_limit": "fetch: conteúdo muito grande: excede %d bytes", - "file_manager_invalid_format_no_json_array": "formato %s inválido: nenhum array JSON encontrado", - "file_manager_invalid_format_unbalanced_brackets": "formato %s inválido: colchetes desbalanceados", - "file_manager_failed_parse_json": "falha ao analisar %s JSON: %w", - "file_manager_invalid_operation": "operação inválida para alteração de arquivo %d: %s", - "file_manager_empty_path": "caminho vazio para alteração de arquivo %d", - "file_manager_suspicious_path": "caminho suspeito para alteração de arquivo %d: %s", - "file_manager_file_content_too_large": "conteúdo do arquivo muito grande para alteração de arquivo %d: %d bytes", - "file_manager_failed_create_directory": "falha ao criar diretório %s para alteração de arquivo %d: %w", - "file_manager_failed_write_file": "falha ao escrever arquivo %s para alteração de arquivo %d: %w", - "file_manager_applied_operation": "Operação %s aplicada a %s", - "vertexai_error_create_request": "falha ao criar requisição: %w", - "vertexai_error_request_failed": "requisição falhou: %w", "vertexai_error_api_status": "API retornou status %d: %s", - "vertexai_error_read_response": "falha ao ler resposta: %w", - "vertexai_error_response_too_large": "resposta muito grande (>%d bytes)", + "vertexai_error_create_request": "falha ao criar requisição: %w", "vertexai_error_parse_response": "falha ao analisar resposta: %w", - "copilot_tenant_client_id_required": "ID do locatário e ID do cliente são obrigatórios", - "copilot_failed_create_conversation": "falha ao criar conversa: %w", - "copilot_failed_send_message": "falha ao enviar mensagem: %w", - "copilot_failed_stream_message": "falha ao transmitir mensagem: %w", - "copilot_error_create_conversation": "falha ao criar conversa: %s - %s", - "copilot_error_chat_request": "solicitação de chat falhou: %s - %s", - "copilot_error_stream_request": "falha na solicitação de stream: %s - %s", - "copilot_debug_created_conversation": "Conversa do Copilot criada: %s", - "copilot_debug_failed_parse_sse_event": "Falha ao analisar evento SSE: %v", - "copilot_error_reading_stream": "erro ao ler stream: %w" + "vertexai_error_read_response": "falha ao ler resposta: %w", + "vertexai_error_request_failed": "requisição falhou: %w", + "vertexai_error_response_too_large": "resposta muito grande (>%d bytes)", + "vertexai_failed_gemini_client": "falha ao criar cliente Gemini: %w", + "vertexai_failed_google_credentials": "falha ao obter credenciais do Google (certifique-se de que o ADC esteja configurado): %w", + "vertexai_no_content_in_response": "sem conteudo na resposta", + "vertexai_no_conversational_models": "nenhum modelo conversacional encontrado", + "vertexai_no_models_found": "nenhum modelo encontrado de nenhum editor", + "vertexai_no_valid_messages": "nenhuma mensagem valida para enviar", + "vertexai_stream_error": "Erro: %v", + "wipe_context": "Limpar contexto", + "wipe_session": "Limpar sessão", + "youtube_api_key_required": "Chave de API do YouTube necessária para comentários e metadados. Execute 'fabric --setup' para configurar", + "youtube_auth_required_bot_detection": "YouTube requer autenticação (detecção de bot). Use --yt-dlp-args='--cookies-from-browser BROWSER' onde BROWSER pode ser chrome, firefox, brave, etc.", + "youtube_empty_seconds_string": "string de segundos vazia", + "youtube_error_getting_comments": "erro ao obter comentários: %v", + "youtube_error_getting_metadata": "erro ao obter metadados do vídeo: %v", + "youtube_error_getting_video_details": "erro ao obter detalhes do vídeo: %v", + "youtube_error_parsing_duration": "erro ao analisar a duração do vídeo: %v", + "youtube_error_saving_csv": "erro ao salvar vídeos em CSV: %v", + "youtube_failed_create_temp_dir": "falha ao criar diretório temporário: %v", + "youtube_failed_fetch_comments": "Falha ao buscar comentários: %v", + "youtube_failed_walk_directory": "falha ao percorrer o diretório: %v", + "youtube_invalid_duration_string": "string de duração inválida: %s", + "youtube_invalid_seconds_format": "formato de segundos inválido %q: %w", + "youtube_invalid_timestamp_format": "formato de timestamp inválido: %s", + "youtube_invalid_url": "URL do YouTube inválida, não é possível obter o ID do vídeo ou da playlist: '%s'", + "youtube_invalid_ytdlp_arguments": "argumentos do yt-dlp inválidos: %v", + "youtube_label": "YouTube", + "youtube_no_transcript_content": "nenhum conteúdo de transcrição encontrado no arquivo VTT", + "youtube_no_url_provided": "Nenhuma URL do YouTube fornecida", + "youtube_no_video_found_with_id": "nenhum vídeo encontrado com o ID: %s", + "youtube_no_video_id_found": "nenhum ID de vídeo encontrado na URL", + "youtube_no_vtt_files_found": "nenhum arquivo VTT encontrado no diretório", + "youtube_not_configured": "YouTube não está configurado, por favor execute o procedimento de configuração", + "youtube_playlist_header": "Lista de reprodução: %s", + "youtube_playlist_saved_to": "Lista de reprodução salva em %s", + "youtube_rate_limit_exceeded": "Limite de taxa do YouTube excedido. Tente novamente mais tarde ou use argumentos diferentes do yt-dlp como '--sleep-requests 1' para desacelerar as requisições.", + "youtube_setup_description": "YouTube - para obter transcrições de vídeo (via yt-dlp) e comentários/metadados (via API do YouTube)", + "youtube_url_help": "Vídeo do YouTube ou URL da playlist para obter transcrição, comentários e enviar ao chat ou imprimir no console e armazenar no arquivo de saída", + "youtube_url_is_playlist_not_video": "A URL é uma playlist, não um vídeo", + "youtube_video_id_title_header": "VideoID: Título", + "youtube_ytdlp_not_found": "yt-dlp não encontrado no PATH. Por favor instale o yt-dlp para usar a funcionalidade de transcrição do YouTube", + "youtube_ytdlp_stderr_error": "Erro ao ler stderr do yt-dlp" } diff --git a/internal/i18n/locales/pt-PT.json b/internal/i18n/locales/pt-PT.json index 09bdb33a..2745cd80 100644 --- a/internal/i18n/locales/pt-PT.json +++ b/internal/i18n/locales/pt-PT.json @@ -1,520 +1,592 @@ { - "html_readability_error": "usa a entrada original, porque não é possível aplicar a legibilidade HTML", - "vendor_not_configured": "o fornecedor %s não está configurado", - "vendor_no_transcription_support": "o fornecedor %s não suporta transcrição de áudio", - "transcription_model_required": "modelo de transcrição é necessário (use --transcribe-model)", - "youtube_not_configured": "YouTube não está configurado, por favor execute o procedimento de configuração", - "spotify_not_configured": "Spotify não está configurado, por favor execute o procedimento de configuração", - "spotify_label": "Spotify", - "spotify_setup_description": "Spotify - para obter metadados de podcasts/programas do Spotify", - "spotify_invalid_url": "URL do Spotify inválido, não é possível obter o ID do programa ou episódio: '%s'", - "spotify_error_getting_metadata": "erro ao obter metadados do Spotify: %v", - "spotify_no_show_found": "nenhum programa encontrado com o ID: %s", - "spotify_no_episode_found": "nenhum episódio encontrado com o ID: %s", - "spotify_url_help": "URL de podcast ou episódio do Spotify para obter metadados e enviar ao chat", - "youtube_api_key_required": "Chave de API do YouTube necessária para comentários e metadados. Execute 'fabric --setup' para configurar", - "youtube_ytdlp_not_found": "yt-dlp não encontrado no PATH. Por favor instale o yt-dlp para usar a funcionalidade de transcrição do YouTube", - "youtube_invalid_url": "URL do YouTube inválido, não é possível obter o ID do vídeo ou da lista de reprodução: '%s'", - "youtube_url_is_playlist_not_video": "O URL é uma lista de reprodução, não um vídeo", - "youtube_no_video_id_found": "nenhum ID de vídeo encontrado no URL", - "youtube_rate_limit_exceeded": "Limite de taxa do YouTube excedido. Tente novamente mais tarde ou utilize argumentos diferentes do yt-dlp como '--sleep-requests 1' para desacelerar os pedidos.", - "youtube_auth_required_bot_detection": "YouTube requer autenticação (deteção de bot). Use --yt-dlp-args='--cookies-from-browser BROWSER' onde BROWSER pode ser chrome, firefox, brave, etc.", - "youtube_ytdlp_stderr_error": "Erro ao ler stderr do yt-dlp", - "youtube_invalid_ytdlp_arguments": "argumentos do yt-dlp inválidos: %v", - "youtube_failed_create_temp_dir": "falha ao criar diretório temporário: %v", - "youtube_no_transcript_content": "nenhum conteúdo de transcrição encontrado no ficheiro VTT", - "youtube_no_vtt_files_found": "nenhum ficheiro VTT encontrado no diretório", - "youtube_failed_walk_directory": "falha ao percorrer o diretório: %v", - "youtube_error_getting_video_details": "erro ao obter detalhes do vídeo: %v", - "youtube_invalid_duration_string": "cadeia de duração inválida: %s", - "youtube_error_getting_metadata": "erro ao obter metadados do vídeo: %v", - "youtube_error_parsing_duration": "erro ao analisar a duração do vídeo: %v", - "youtube_error_getting_comments": "erro ao obter comentários: %v", - "youtube_error_saving_csv": "erro ao guardar vídeos em CSV: %v", - "youtube_no_video_found_with_id": "nenhum vídeo encontrado com o ID: %s", - "youtube_invalid_timestamp_format": "formato de timestamp inválido: %s", - "youtube_empty_seconds_string": "cadeia de segundos vazia", - "youtube_invalid_seconds_format": "formato de segundos inválido %q: %w", - "error_fetching_playlist_videos": "erro ao obter vídeos da playlist: %w", - "openai_api_base_url_not_configured": "URL base da API não configurado para o fornecedor %s", - "openai_failed_to_create_models_url": "falha ao criar URL de modelos: %w", - "openai_unexpected_status_code_with_body": "código de estado inesperado: %d do fornecedor %s, corpo da resposta: %s", - "openai_unexpected_status_code_read_error_partial": "código de estado inesperado: %d do fornecedor %s (erro ao ler corpo: %v), resposta parcial: %s", - "openai_unexpected_status_code_read_error": "código de estado inesperado: %d do fornecedor %s (falha ao ler corpo da resposta: %v)", - "openai_unable_to_parse_models_response": "não foi possível analisar a resposta de modelos; resposta bruta: %s", - "openai_warning_model_no_image_generation": "Aviso: O modelo '%s' não suporta geração de imagens. Modelos suportados: %s. Considere usar -m gpt-5.2 para geração de imagens.\n", - "openai_model_no_image_generation": "o modelo '%s' não suporta geração de imagens. Modelos suportados: %s", - "scraping_not_configured": "funcionalidade de scraping não está configurada. Por favor configure o Jina para ativar o scraping", - "could_not_determine_home_dir": "não foi possível determinar o diretório home do utilizador: %w", - "could_not_stat_env_file": "não foi possível verificar o ficheiro .env: %w", + "additional_yt_dlp_args": "Argumentos adicionais para passar ao yt-dlp (ex. '--cookies-from-browser brave')", + "address_to_bind_rest_api": "Endereço para associar a API REST", + "anthropic_stream_error": "Erro de transmissão: %v", + "api_key_secure_server_routes": "Chave API usada para proteger as rotas do servidor", + "application_options_header": "Opções da aplicação:", + "apply_variables_to_input": "Aplicar variáveis à entrada do utilizador", + "attachment_path_or_url_help": "Caminho do anexo ou URL (ex. para mensagens de reconhecimento de imagem do OpenAI)", + "audio_output_file_specified_but_not_tts_model": "ficheiro de saída de áudio '%s' especificado mas o modelo '%s' não é um modelo TTS. Por favor use um modelo TTS como gemini-2.5-flash-preview-tts", + "audio_video_file_transcribe": "Ficheiro de áudio ou vídeo para transcrever", + "available_models_header": "Modelos disponíveis", + "available_transcription_models": "Modelos de transcrição disponíveis:", + "available_vendors_header": "Fornecedores disponíveis:", + "azure_api_key_required": "A chave API do Azure é obrigatória", + "azure_api_version_question": "Introduza a versão da API do Azure (deixe vazio para o padrão)", + "azure_base_url_required": "O URL base do Azure é obrigatório", + "azure_deployments_question": "Introduza os nomes das implementações do Azure (separados por vírgula)", + "azure_failed_extract_deployment": "falha ao extrair o nome da implementação do pedido", + "azure_model_field_empty": "o campo de modelo está vazio no corpo do pedido", + "azure_request_body_nil": "o corpo do pedido é nil", + "background_type_help": "Tipo de fundo: opaque, transparent (por omissão: opaque, apenas para PNG/WebP)", + "bedrock_aws_region_label": "Regiao AWS", + "bedrock_converse_failed": "bedrock converse falhou para o modelo %s: %w", + "bedrock_conversestream_failed": "bedrock conversestream falhou para o modelo %s: %w", + "bedrock_empty_response_content": "conteudo de resposta vazio", + "bedrock_failed_list_foundation_models": "falha ao listar modelos de fundacao: %w", + "bedrock_failed_list_inference_profiles": "falha ao listar perfis de inferencia: %w", + "bedrock_invalid_aws_region": "regiao AWS invalida: %s", + "bedrock_panic_sendstream": "panico no SendStream: %v", + "bedrock_unable_load_aws_config": "nao foi possivel carregar a configuracao AWS: %w", + "bedrock_unable_load_aws_config_with_region": "nao foi possivel carregar a configuracao AWS com regiao %s: %w", + "bedrock_unexpected_content_block_type": "tipo de bloco de conteudo inesperado: %T", + "bedrock_unexpected_response_type": "tipo de resposta inesperado: %T", + "bedrock_unknown_stream_event_type": "tipo de evento de stream desconhecido: %T", + "cannot_convert_string": "não é possível converter a string %q para %v", + "change_default_model": "Mudar modelo predefinido", + "chatter_error_empty_response": "resposta vazia", + "chatter_error_find_context": "nao foi possivel encontrar o contexto %s: %v", + "chatter_error_find_session": "nao foi possivel encontrar a sessao %s: %v", + "chatter_error_get_pattern": "nao foi possivel obter o padrao %s: %v", + "chatter_error_load_strategy": "nao foi possivel carregar a estrategia %s: %v", + "chatter_error_no_messages_provided": "não foram fornecidas mensagens", + "chatter_error_no_session_pattern_user_messages": "não foi fornecida nenhuma sessão, padrão ou mensagem do utilizador", + "chatter_error_stream_update": "Erro: %s", + "chatter_help_review_changes_with_git_diff": "Pode rever as alteracoes com 'git diff' se estiver a usar git.", + "chatter_info_file_changes_applied_successfully": "Alteracoes de ficheiro aplicadas com sucesso.", + "chatter_log_stream_usage_metadata": "[Metadados] Entrada: %d | Saída: %d | Total: %d", + "chatter_prompt_enforce_response_language": "%s\n\nIMPORTANTE: Primeiro, execute as instrucoes fornecidas neste prompt usando a entrada do utilizador. Em seguida, garanta que toda a sua resposta final, incluindo quaisquer cabecalhos de secao ou titulos gerados como parte da execucao das instrucoes, seja escrita APENAS no idioma %s.", + "chatter_warning_apply_file_changes_failed": "Aviso: Falha ao aplicar alteracoes de ficheiro: %v", + "chatter_warning_get_current_directory_failed": "Aviso: Falha ao obter a diretoria atual: %v", + "chatter_warning_parse_file_changes_failed": "Aviso: Falha ao analisar alteracoes de ficheiro: %v", + "choose_context_from_available": "Escolha um contexto dos contextos disponíveis", + "choose_model": "Escolher modelo", + "choose_pattern_from_available": "Escolha um padrão dos padrões disponíveis", + "choose_session_from_available": "Escolha uma sessão das sessões disponíveis", + "choose_strategy_from_available": "Escolher uma estratégia das estratégias disponíveis", + "command_completed_successfully": "Comando concluído com sucesso", + "compression_level_jpeg_webp": "Nível de compressão 0-100 para formatos JPEG/WebP (por omissão: não definido)", + "config_file_not_found": "ficheiro de configuração não encontrado: %s", + "convert_html_readability": "Converter entrada HTML numa visualização limpa e legível", + "copilot_debug_created_conversation": "Conversa do Copilot criada: %s", + "copilot_debug_failed_parse_sse_event": "Falha ao analisar evento SSE: %v", + "copilot_error_chat_request": "pedido de chat falhou: %s - %s", + "copilot_error_create_conversation": "falha ao criar conversa: %s - %s", + "copilot_error_reading_stream": "erro ao ler transmissão: %w", + "copilot_error_stream_request": "pedido de transmissão falhou: %s - %s", + "copilot_failed_create_conversation": "falha ao criar conversa: %w", + "copilot_failed_send_message": "falha ao enviar mensagem: %w", + "copilot_failed_stream_message": "falha ao transmitir mensagem: %w", + "copilot_tenant_client_id_required": "ID do locatário e ID do cliente são obrigatórios", + "copy_to_clipboard": "Copiar para área de transferência", + "could_not_copy_to_clipboard": "não foi possível copiar para a área de transferência: %v", "could_not_create_config_dir": "não foi possível criar o diretório de configuração: %w", "could_not_create_env_file": "não foi possível criar o ficheiro .env: %w", - "could_not_copy_to_clipboard": "não foi possível copiar para a área de transferência: %v", - "file_already_exists_not_overwriting": "o ficheiro %s já existe, não será sobrescrito. Renomeie o ficheiro existente ou escolha um nome diferente", - "error_creating_file": "erro ao criar ficheiro: %v", - "error_writing_to_file": "erro ao escrever no ficheiro: %v", - "error_creating_audio_file": "erro ao criar ficheiro de áudio: %v", - "error_writing_audio_data": "erro ao escrever dados de áudio no ficheiro: %v", - "tts_model_requires_audio_output": "modelo TTS '%s' requer saída de áudio. Por favor especifique um ficheiro de saída de áudio com a flag -o (ex. -o output.wav)", - "audio_output_file_specified_but_not_tts_model": "ficheiro de saída de áudio '%s' especificado mas o modelo '%s' não é um modelo TTS. Por favor use um modelo TTS como gemini-2.5-flash-preview-tts", - "file_already_exists_choose_different": "ficheiro %s já existe. Por favor escolha um nome de ficheiro diferente ou remova o ficheiro existente", - "no_notification_system_available": "nenhum sistema de notificação disponível", - "cannot_convert_string": "não é possível converter a string %q para %v", - "unsupported_conversion": "conversão não suportada de %v para %v", - "invalid_config_path": "caminho de configuração inválido: %w", - "config_file_not_found": "ficheiro de configuração não encontrado: %s", - "error_reading_config_file": "erro ao ler ficheiro de configuração: %w", - "error_parsing_config_file": "erro ao analisar ficheiro de configuração: %w", - "error_reading_piped_message": "erro ao ler mensagem redirecionada do stdin: %w", - "image_file_already_exists": "ficheiro de imagem já existe: %s", - "invalid_image_file_extension": "extensão de ficheiro de imagem inválida '%s'. Formatos suportados: .png, .jpeg, .jpg, .webp", - "image_parameters_require_image_file": "parâmetros de imagem (--image-size, --image-quality, --image-background, --image-compression) só podem ser usados com --image-file", - "invalid_image_size": "tamanho de imagem inválido '%s'. Tamanhos suportados: 1024x1024, 1536x1024, 1024x1536, auto", - "invalid_image_quality": "qualidade de imagem inválida '%s'. Qualidades suportadas: low, medium, high, auto", - "invalid_image_background": "fundo de imagem inválido '%s'. Fundos suportados: opaque, transparent", - "image_compression_jpeg_webp_only": "compressão de imagem só pode ser usada com formatos JPEG e WebP, não %s", - "image_compression_range_error": "compressão de imagem deve estar entre 0 e 100, recebido %d", - "transparent_background_png_webp_only": "fundo transparente só pode ser usado com formatos PNG e WebP, não %s", - "available_transcription_models": "Modelos de transcrição disponíveis:", - "tts_audio_generated_successfully": "Áudio TTS gerado com sucesso e guardado em: %s\n", - "fabric_command_complete": "Comando Fabric concluído", - "fabric_command_complete_with_pattern": "Fabric: %s concluído", - "command_completed_successfully": "Comando concluído com sucesso", - "output_truncated": "Saída: %s...", - "output_full": "Saída: %s", - "choose_pattern_from_available": "Escolha um padrão dos padrões disponíveis", - "pattern_variables_help": "Valores para variáveis de padrão, ex. -v=#role:expert -v=#points:30", - "choose_context_from_available": "Escolha um contexto dos contextos disponíveis", - "choose_session_from_available": "Escolha uma sessão das sessões disponíveis", - "attachment_path_or_url_help": "Caminho do anexo ou URL (ex. para mensagens de reconhecimento de imagem do OpenAI)", - "run_setup_for_reconfigurable_parts": "Executar configuração para todas as partes reconfiguráveis do fabric", - "set_temperature": "Definir temperatura", - "set_top_p": "Definir top P", - "stream_help": "Streaming", - "set_presence_penalty": "Definir penalidade de presença", - "use_model_defaults_raw_help": "Utiliza os valores predefinidos do modelo sem enviar opções de chat (temperature, top_p, etc.). Só afeta fornecedores compatíveis com o OpenAI. Os modelos Anthropic usam sempre uma seleção inteligente de parâmetros para cumprir os requisitos específicos do modelo.", - "set_frequency_penalty": "Definir penalidade de frequência", - "list_all_patterns": "Listar todos os padrões", - "list_all_available_models": "Listar todos os modelos disponíveis", - "list_all_contexts": "Listar todos os contextos", - "list_all_sessions": "Listar todas as sessões", - "update_patterns": "Atualizar padrões", - "messages_to_send_to_chat": "Mensagens para enviar ao chat", - "copy_to_clipboard": "Copiar para área de transferência", - "choose_model": "Escolher modelo", - "specify_vendor_for_model": "Especificar fornecedor para o modelo selecionado (ex. -V \"LM Studio\" -m openai/gpt-oss-20b)", - "model_context_length_ollama": "Comprimento do contexto do modelo (afeta apenas ollama)", - "output_to_file": "Saída para ficheiro", - "output_entire_session": "Saída de toda a sessão (incluindo temporária) para o ficheiro de saída", - "number_of_latest_patterns": "Número dos padrões mais recentes a listar", - "change_default_model": "Mudar modelo predefinido", - "youtube_url_help": "Vídeo do YouTube ou \"URL\" de playlist para obter transcrição, comentários e enviar ao chat ou imprimir na consola e armazenar no ficheiro de saída", - "prefer_playlist_over_video": "Preferir playlist ao vídeo se ambos os IDs estiverem presentes na URL", - "grab_transcript_from_youtube": "Obter transcrição do vídeo do YouTube e enviar ao chat (usado por omissão).", - "grab_transcript_with_timestamps": "Obter transcrição do vídeo do YouTube com timestamps e enviar ao chat", - "grab_comments_from_youtube": "Obter comentários do vídeo do YouTube e enviar ao chat", - "output_video_metadata": "Mostrar metadados do vídeo", - "additional_yt_dlp_args": "Argumentos adicionais para passar ao yt-dlp (ex. '--cookies-from-browser brave')", - "specify_language_code": "Especificar código de idioma para o chat, ex. -g=en -g=zh -g=pt-BR -g=pt-PT", - "scrape_website_url": "Fazer scraping da URL do site para markdown usando Jina AI", - "search_question_jina": "Pergunta de pesquisa usando Jina AI", - "seed_for_lmm_generation": "Seed para ser usado na geração LMM", - "wipe_context": "Limpar contexto", - "wipe_session": "Limpar sessão", - "print_context": "Imprimir contexto", - "print_session": "Imprimir sessão", - "convert_html_readability": "Converter entrada HTML numa visualização limpa e legível", - "apply_variables_to_input": "Aplicar variáveis à entrada do utilizador", - "disable_pattern_variable_replacement": "Desabilitar substituição de variáveis de padrão", - "show_dry_run": "Mostrar o que seria enviado ao modelo sem enviar de facto", - "serve_fabric_rest_api": "Servir a API REST do Fabric", - "serve_fabric_api_ollama_endpoints": "Servir a API REST do Fabric com endpoints ollama", - "address_to_bind_rest_api": "Endereço para associar a API REST", - "api_key_secure_server_routes": "Chave API usada para proteger as rotas do servidor", - "path_to_yaml_config": "Caminho para ficheiro de configuração YAML", - "print_current_version": "Imprimir versão atual", - "list_all_registered_extensions": "Listar todas as extensões registadas", - "register_new_extension": "Registar uma nova extensão do caminho do ficheiro de configuração", - "remove_registered_extension": "Remover uma extensão registada por nome", - "choose_strategy_from_available": "Escolher uma estratégia das estratégias disponíveis", - "list_all_strategies": "Listar todas as estratégias", - "list_all_vendors": "Listar todos os fornecedores", - "output_raw_list_shell_completion": "Saída de lista simples sem cabeçalhos/formatação (para conclusão de shell)", - "enable_web_search_tool": "Habilitar ferramenta de pesquisa web para modelos suportados (Anthropic, OpenAI, Gemini)", - "set_location_web_search": "Definir localização para resultados de pesquisa web (ex. 'America/Los_Angeles')", - "save_generated_image_to_file": "Guardar imagem gerada no caminho de ficheiro especificado (ex. 'output.png')", - "image_dimensions_help": "Dimensões da imagem: 1024x1024, 1536x1024, 1024x1536, auto (por omissão: auto)", - "image_quality_help": "Qualidade da imagem: low, medium, high, auto (por omissão: auto)", - "compression_level_jpeg_webp": "Nível de compressão 0-100 para formatos JPEG/WebP (por omissão: não definido)", - "background_type_help": "Tipo de fundo: opaque, transparent (por omissão: opaque, apenas para PNG/WebP)", - "suppress_thinking_tags": "Suprimir texto contido em tags de pensamento", - "start_tag_thinking_sections": "Tag inicial para secções de pensamento", - "end_tag_thinking_sections": "Tag final para secções de pensamento", - "disable_openai_responses_api": "Desabilitar API OpenAI Responses (por omissão: false)", - "audio_video_file_transcribe": "Ficheiro de áudio ou vídeo para transcrever", - "model_for_transcription": "Modelo para usar na transcrição (separado do modelo de chat)", - "split_media_files_ffmpeg": "Dividir ficheiros de áudio/vídeo maiores que 25MB usando ffmpeg", - "tts_voice_name": "Nome da voz TTS para modelos suportados (ex. Kore, Charon, Puck)", - "list_gemini_tts_voices": "Listar todas as vozes TTS do Gemini disponíveis", - "list_transcription_models": "Listar todos os modelos de transcrição disponíveis", - "send_desktop_notification": "Enviar notificação no ambiente de trabalho quando o comando for concluído", + "could_not_determine_home_dir": "não foi possível determinar o diretório home do utilizador: %w", + "could_not_stat_env_file": "não foi possível verificar o ficheiro .env: %w", "custom_notification_command": "Comando personalizado para executar notificações (substitui notificações integradas)", - "set_reasoning_thinking_level": "Definir nível de raciocínio/pensamento (ex. off, low, medium, high, ou tokens numéricos para Anthropic ou Google Gemini)", - "set_debug_level": "Definir nível de debug (0=desligado, 1=básico, 2=detalhado, 3=rastreio)", - "usage_header": "Uso:", - "application_options_header": "Opções da aplicação:", - "help_options_header": "Opções de ajuda:", - "help_message": "Mostrar esta mensagem de ajuda", - "options_placeholder": "[OPÇÕES]", - "available_vendors_header": "Fornecedores disponíveis:", - "available_models_header": "Modelos disponíveis", - "no_items_found": "Nenhum %s", - "no_description_available": "Nenhuma descrição disponível", - "i18n_download_failed": "Falha ao descarregar tradução para o idioma '%s': %v", - "i18n_load_failed": "Falha ao carregar ficheiro de tradução: %v", - "setup_welcome_header": "🎉 Bem-vindo ao Fabric! Vamos configurar tudo.", - "setup_step_downloading_patterns": "📥 Passo 1: A descarregar padrões (necessários para o Fabric funcionar)...", - "setup_step_downloading_strategies": "📥 Passo 2: A descarregar estratégias (necessárias para o Fabric funcionar)...", - "setup_step_configure_ai_provider": "🤖 Passo 3: Configurar um fornecedor de IA", - "setup_ai_provider_required": "O Fabric precisa de pelo menos um fornecedor de IA para funcionar.", - "setup_add_more_providers_later": "Poderá adicionar mais fornecedores depois com 'fabric --setup'", - "setup_step_setting_defaults": "⚙️ Passo 4: A configurar fornecedor e modelo predefinido...", - "setup_complete_header": "✅ Configuração completa! Agora pode usar o Fabric.", - "setup_next_steps": "Próximos passos:", - "setup_list_patterns": "• Listar padrões disponíveis: fabric -l", - "setup_try_pattern": "• Experimentar um padrão: echo 'o seu texto' | fabric --pattern summarize", - "setup_configure_more": "• Configurar mais opções: fabric --setup", - "setup_failed_download_patterns": "falha ao descarregar padrões: %w", - "setup_failed_download_strategies": "falha ao descarregar estratégias: %w", - "setup_failed_set_defaults": "falha ao configurar fornecedor e modelo predefinido: %w", - "setup_no_ai_provider_selected": "nenhum fornecedor de IA selecionado - pelo menos um é necessário", - "setup_invalid_selection": "seleção inválida: %s", - "setup_available_ai_providers": "Fornecedores de IA Disponíveis:", - "setup_enter_ai_provider_number": "Número do Fornecedor de IA", - "setup_available_plugins": "Plugins disponíveis:", - "setup_plugin_number": "Número do Plugin", - "setup_plugin_prompt": "Indique o número do plugin a configurar", - "setup_required_configuration_header": "━━━ CONFIGURAÇÃO OBRIGATÓRIA ━━━\n\nFornecedores de IA [pelo menos um obrigatório]", - "setup_required_tools": "Ferramentas Obrigatórias", - "setup_optional_configuration_header": "━━━ CONFIGURAÇÃO OPCIONAL ━━━\n\nFerramentas Opcionais", - "setup_validation_header": "Estado da Configuração:", - "setup_validation_ai_provider_configured": "✓ Fornecedor de IA configurado", - "setup_validation_ai_provider_missing": "✗ Fornecedor de IA não configurado - Necessário para o Fabric funcionar", - "setup_validation_defaults_configured": "✓ Fornecedor/modelo predefinido definido: %s/%s", - "setup_validation_defaults_missing": "✗ Fornecedor/modelo predefinido não definido - Necessário para o Fabric funcionar", - "setup_validation_patterns_configured": "✓ Padrões descarregados", - "setup_validation_patterns_missing": "✗ Padrões não encontrados - Necessários para o Fabric funcionar", - "setup_validation_strategies_configured": "✓ Estratégias descarregadas", - "setup_validation_strategies_missing": "✗ Estratégias não encontradas - Necessárias para o Fabric funcionar", - "setup_validation_incomplete_warning": "⚠️ Configuração incompleta! Componentes necessários em falta.", - "setup_validation_incomplete_help": "Execute 'fabric --setup' novamente para configurar itens em falta,\nou execute 'fabric -U' para descarregar padrões e estratégias.", - "setup_validation_complete": "✓ Todos os componentes necessários estão configurados!", - "patterns_not_found_header": "⚠️ Nenhum padrão encontrado!", - "patterns_required_to_work": "Padrões são necessários para o Fabric funcionar. Para resolver:", - "patterns_option_run_setup": "Opção 1 (Recomendada): Execute a configuração para descarregar padrões", - "patterns_option_run_setup_command": "fabric --setup", - "patterns_option_run_update": "Opção 2: Descarregar/atualizar padrões diretamente", - "patterns_option_run_update_command": "fabric -U", - "pattern_not_found_no_patterns": "padrão '%s' não encontrado.\n\nNenhum padrão instalado! Para resolver:\n • Execute 'fabric --setup' para configurar e descarregar padrões\n • Ou execute 'fabric -U' para descarregar/atualizar padrões diretamente", - "pattern_not_found_list_available": "padrão '%s' não encontrado. Execute 'fabric -l' para ver os padrões disponíveis", - "plugin_configured": " ✓", - "plugin_not_configured": " ⚠️ NÃO CONFIGURADO", - "defaults_setup_description": "Fornecedor e modelo de IA padrão", - "defaults_model_question": "Indique o índice ou o nome do seu modelo padrão", - "defaults_model_context_length_question": "Indique o comprimento do contexto do modelo", + "custom_patterns_directory_question": "Indique o caminho para o seu diretório de padrões personalizados", "custom_patterns_label": "Padrões personalizados", "custom_patterns_setup_description": "Padrões personalizados - Definir diretório para os seus padrões personalizados", - "custom_patterns_directory_question": "Indique o caminho para o seu diretório de padrões personalizados", + "defaults_model_context_length_question": "Indique o comprimento do contexto do modelo", + "defaults_model_question": "Indique o índice ou o nome do seu modelo padrão", + "defaults_setup_description": "Fornecedor e modelo de IA padrão", + "disable_openai_responses_api": "Desabilitar API OpenAI Responses (por omissão: false)", + "disable_pattern_variable_replacement": "Desabilitar substituição de variáveis de padrão", + "enable_web_search_tool": "Habilitar ferramenta de pesquisa web para modelos suportados (Anthropic, OpenAI, Gemini)", + "end_tag_thinking_sections": "Tag final para secções de pensamento", + "error_creating_audio_file": "erro ao criar ficheiro de áudio: %v", + "error_creating_file": "erro ao criar ficheiro: %v", + "error_fetching_playlist_videos": "erro ao obter vídeos da playlist: %w", + "error_parsing_config_file": "erro ao analisar ficheiro de configuração: %w", + "error_reading_config_file": "erro ao ler ficheiro de configuração: %w", + "error_reading_piped_message": "erro ao ler mensagem redirecionada do stdin: %w", + "error_writing_audio_data": "erro ao escrever dados de áudio no ficheiro: %v", + "error_writing_to_file": "erro ao escrever no ficheiro: %v", + "extension_cmd_template_required": "o modelo de comando é obrigatório para a operação %s", + "extension_command_template_label": " Modelo de comando: %s\n", + "extension_config_hash_mismatch": "discrepância de hash do ficheiro de configuração para %s", + "extension_config_path_label": " Caminho de configuração: %s\n\n", + "extension_description_label": " Descrição: %s\n", + "extension_empty_command": "comando vazio após a formatação", + "extension_executable_hash_mismatch": "discrepância de hash do executável para %s", + "extension_executable_label": " Executável: %s\n", + "extension_executable_not_found": "executável não encontrado: %w", + "extension_executable_required": "o caminho do executável é obrigatório", + "extension_executing_command": "A executar comando: %s\n", + "extension_execution_failed_err": "execução falhou: %w\nerr: %s", + "extension_execution_failed_stderr": "execução falhou: %w\nstderr: %s", + "extension_execution_timed_out": "execução expirou após %v", + "extension_failed_format_command": "falha ao formatar o comando: %w", + "extension_failed_get_absolute_path": "falha ao obter o caminho absoluto: %w", + "extension_failed_get_extension": "falha ao obter a extensão: %w", + "extension_failed_get_output_path": "falha ao obter o caminho de saída: %w\nerr: %s", + "extension_failed_hash_executable": "falha ao calcular o hash do executável: %w", + "extension_failed_marshal_registry": "falha ao serializar o registo de extensões: %w", + "extension_failed_parse_config": "falha ao analisar o ficheiro de configuração: %w", + "extension_failed_parse_registry": "falha ao analisar o registo de extensões: %w", + "extension_failed_read_config": "falha ao ler o ficheiro de configuração: %w", + "extension_failed_read_output_file": "falha ao ler o ficheiro de saída: %w", + "extension_failed_read_registry": "falha ao ler o registo de extensões: %w", + "extension_failed_register": "falha ao registar a extensão: %w", + "extension_failed_remove": "falha ao remover a extensão: %w", + "extension_failed_verify_executable": "falha ao verificar o executável: %w", + "extension_file_config_label": " Configuração de ficheiro:\n", + "extension_invalid_config_path": "caminho de configuração inválido: %w", + "extension_invalid_definition": "definição de extensão inválida: %w", + "extension_invalid_timeout": "valor de tempo limite inválido '%s': deve ser uma duração como '30s' ou '1m': %w", + "extension_invalid_timeout_format": "formato de tempo limite inválido: %w", + "extension_name_contains_spaces": "o nome da extensão '%s' contém espaços - os nomes não devem conter espaços", + "extension_name_detail_label": "Nome: %s\n", + "extension_name_empty": "o nome da extensão não pode estar vazio", + "extension_name_label": "Extensão: %s\n", + "extension_name_required": "o nome da extensão é obrigatório", + "extension_no_file_config": "nenhuma configuração de ficheiro encontrada", + "extension_no_output_file": "nenhum ficheiro de saída especificado na configuração", + "extension_not_found": "extensão %s não encontrada", + "extension_operation_not_found": "operação %s não encontrada para a extensão %s", + "extension_operation_required": "deve ser definida pelo menos uma operação", + "extension_operations_label": " Operações:\n", + "extension_registered_success": "Extensão registada com sucesso:\n", + "extension_registry_not_initialized": "registo de extensões não inicializado", + "extension_status_disabled": " Estado: DESATIVADA - Verificação de hash falhou: %v\n", + "extension_status_enabled": " Estado: ATIVADA\n", + "extension_timeout_label": " Tempo limite: %s\n", + "extension_type_label": " Tipo: %s\n", + "extension_type_required": "o tipo da extensão é obrigatório", + "extension_version_label": " Versão: %s\n", + "extension_warning_load_registry": "Aviso: não foi possível carregar o registo de extensões: %v\n", + "fabric_command_complete": "Comando Fabric concluído", + "fabric_command_complete_with_pattern": "Fabric: %s concluído", + "fetch_content_exceeds_limit": "fetch: conteúdo demasiado grande: excede %d bytes", + "fetch_content_not_utf8": "fetch: o conteúdo não é texto UTF-8 válido", + "fetch_content_null_bytes": "fetch: o conteúdo contém bytes nulos", + "fetch_content_too_large": "fetch: conteúdo demasiado grande: %d bytes (máx %d bytes)", + "fetch_error_create_request": "fetch: erro ao criar o pedido: %v", + "fetch_error_fetching_url": "fetch: erro ao obter o URL: %v", + "fetch_error_reading_response": "fetch: erro ao ler a resposta: %v", + "fetch_http_error": "fetch: erro HTTP: %d - %s", + "fetch_unknown_operation": "fetch: operação desconhecida %q (suportada: get)", + "fetch_unsupported_content_type": "fetch: tipo de conteúdo não suportado %q - apenas conteúdo de texto permitido", + "file_already_exists_choose_different": "ficheiro %s já existe. Por favor escolha um nome de ficheiro diferente ou remova o ficheiro existente", + "file_already_exists_not_overwriting": "o ficheiro %s já existe, não será sobrescrito. Renomeie o ficheiro existente ou escolha um nome diferente", + "file_manager_applied_operation": "Operação %s aplicada a %s", + "file_manager_empty_path": "caminho vazio para alteração de ficheiro %d", + "file_manager_failed_create_directory": "falha ao criar diretório %s para alteração de ficheiro %d: %w", + "file_manager_failed_parse_json": "falha ao analisar %s JSON: %w", + "file_manager_failed_write_file": "falha ao escrever ficheiro %s para alteração de ficheiro %d: %w", + "file_manager_file_content_too_large": "conteúdo do ficheiro demasiado grande para alteração de ficheiro %d: %d bytes", + "file_manager_invalid_format_no_json_array": "formato %s inválido: nenhum array JSON encontrado", + "file_manager_invalid_format_unbalanced_brackets": "formato %s inválido: parêntesis desequilibrados", + "file_manager_invalid_operation": "operação inválida para alteração de ficheiro %d: %s", + "file_manager_suspicious_path": "caminho suspeito para alteração de ficheiro %d: %s", + "gemini_audio_data_too_small": "dados de audio muito pequenos: %d bytes, minimo requerido: %d", + "gemini_empty_pcm_data": "dados PCM vazios fornecidos", + "gemini_invalid_location_format": "formato de local de busca invalido %q: deve ser fuso horario (ex. 'America/Los_Angeles') ou codigo de idioma (ex. 'en-US')", + "gemini_invalid_voice": "voz invalida '%s'. As vozes validas sao: %v", + "gemini_no_audio_data": "nenhum dado de audio recebido do modelo TTS", + "gemini_no_text_for_tts": "nenhum conteudo de texto encontrado para geracao TTS", + "gemini_pcm_data_too_large": "dados PCM muito grandes: %d bytes, maximo permitido: %d", + "gemini_stream_error": "Erro: %v", + "gemini_tts_failed": "falha na geracao TTS: %w", + "gemini_unexpected_data_type": "tipo de dado inesperado: %s, esperado dados de audio", + "gemini_wav_data_invalid": "dados WAV gerados invalidos: %d bytes, minimo requerido: %d", + "gemini_wav_generation_failed": "falha ao gerar ficheiro WAV: %w", + "grab_comments_from_youtube": "Obter comentários do vídeo do YouTube e enviar ao chat", + "grab_transcript_from_youtube": "Obter transcrição do vídeo do YouTube e enviar ao chat (usado por omissão).", + "grab_transcript_with_timestamps": "Obter transcrição do vídeo do YouTube com timestamps e enviar ao chat", + "groups_items_number_out_of_range": "número %d está fora do intervalo", + "help_message": "Mostrar esta mensagem de ajuda", + "help_options_header": "Opções de ajuda:", + "html_readability_error": "usa a entrada original, porque não é possível aplicar a legibilidade HTML", + "i18n_download_failed": "Falha ao descarregar tradução para o idioma '%s': %v", + "i18n_load_failed": "Falha ao carregar ficheiro de tradução: %v", + "image_compression_jpeg_webp_only": "compressão de imagem só pode ser usada com formatos JPEG e WebP, não %s", + "image_compression_range_error": "compressão de imagem deve estar entre 0 e 100, recebido %d", + "image_dimensions_help": "Dimensões da imagem: 1024x1024, 1536x1024, 1024x1536, auto (por omissão: auto)", + "image_file_already_exists": "ficheiro de imagem já existe: %s", + "image_parameters_require_image_file": "parâmetros de imagem (--image-size, --image-quality, --image-background, --image-compression) só podem ser usados com --image-file", + "image_quality_help": "Qualidade da imagem: low, medium, high, auto (por omissão: auto)", + "invalid_config_path": "caminho de configuração inválido: %w", + "invalid_image_background": "fundo de imagem inválido '%s'. Fundos suportados: opaque, transparent", + "invalid_image_file_extension": "extensão de ficheiro de imagem inválida '%s'. Formatos suportados: .png, .jpeg, .jpg, .webp", + "invalid_image_quality": "qualidade de imagem inválida '%s'. Qualidades suportadas: low, medium, high, auto", + "invalid_image_size": "tamanho de imagem inválido '%s'. Tamanhos suportados: 1024x1024, 1536x1024, 1024x1536, auto", + "jina_error_creating_request": "erro ao criar o pedido: %v", + "jina_error_reading_response_body": "erro ao ler o corpo da resposta: %v", + "jina_error_sending_request": "erro ao enviar o pedido: %v", "jina_label": "Jina AI", "jina_setup_description": "Serviço Jina AI - para obter uma página web como texto limpo e compatível com LLM", - "youtube_label": "YouTube", - "youtube_setup_description": "YouTube - para obter transcrições de vídeo (via yt-dlp) e comentários/metadados (via API do YouTube)", "language_label": "Idioma", - "language_setup_description": "Idioma - Idioma de saída predefinido do fornecedor de IA", "language_output_question": "Indique o seu idioma de saída predefinido (por exemplo: zh_CN)", - "optional_marker": "(opcional)", - "required_marker": "[obrigatório]", - "patterns_loader_label": "Carregador de padrões", - "patterns_setup_description": "Padrões - Transfere os padrões", - "patterns_git_repo_url_label": "URL do repositório Git", - "patterns_git_repo_url_question": "Indique o URL padrão do repositório Git para os padrões", - "patterns_git_repo_folder_label": "Pasta de padrões no repositório Git", - "patterns_git_repo_folder_question": "Indique a pasta padrão no repositório Git onde os padrões estão guardados", - "patterns_failed_create_temp_folder": "falha ao criar a pasta temporária de padrões: %w", - "patterns_downloading": "A transferir padrões e a preencher %s...\\n", - "patterns_failed_download_from_git": "falha ao transferir padrões do repositório Git: %w", - "patterns_saving_updated_configuration": "💾 A guardar a configuração actualizada (caminho alterado de '%s' para '%s')...\\n", - "patterns_failed_move_patterns": "falha ao mover os padrões para o directório de configuração: %w", - "patterns_download_success": "✅ Padrões transferidos e instalados com sucesso em %s\\n", - "patterns_failed_unique_file": "falha ao criar o ficheiro de padrões únicos: %w", - "patterns_failed_access_directory": "falha ao aceder ao directório de padrões '%s': %w", - "patterns_preserve_warning": "Aviso: não foi possível preservar o padrão personalizado '%s': %v\\n", - "patterns_preserved_custom_pattern": "Padrão personalizado preservado: %s\\n", - "patterns_failed_create_temp_dir": "falha ao criar directório temporário: %w", - "patterns_cloning_repository": "A clonar repositório %s (caminho: %s)...\\n", - "patterns_failed_download_from_repo": "falha ao transferir padrões de %s: %w", - "patterns_failed_read_temp_directory": "falha ao ler o directório temporário de padrões: %w", - "patterns_no_patterns_migration_failed": "nenhum padrão encontrado no repositório no caminho %s e a migração falhou: %w", - "patterns_downloaded_temp": "%d padrões transferidos para o directório temporário\\n", - "patterns_detected_old_path": "🔄 Caminho antigo 'patterns' detectado, a tentar migração para 'data/patterns'...", - "patterns_warning_remove_test_folder": "Aviso: não foi possível remover a pasta temporária de teste '%s': %v\\n", - "patterns_found_new_path": "✅ %d padrões encontrados no novo caminho '%s', a actualizar configuração...\\n", - "patterns_failed_move_test_patterns": "falha ao mover padrões de teste para a pasta temporária: %w", - "patterns_unable_to_find_or_migrate": "não foi possível encontrar padrões no caminho actual '%s' nem migrar para a nova estrutura", - "patterns_failed_read_directory": "falha ao ler o directório de padrões: %w", - "patterns_debug_included_custom_directory": "📂 Padrões do directório personalizado também incluídos: %s\\n", - "patterns_warning_custom_directory": "Aviso: não foi possível ler o directório de padrões personalizado %s: %v\\n", - "patterns_no_patterns_found_in_directories": "nenhum padrão encontrado nos directórios %s e %s", - "patterns_no_patterns_found_in_directory": "nenhum padrão encontrado no directório %s", - "patterns_failed_write_unique_file": "falha ao gravar o ficheiro de padrões únicos: %w", - "patterns_unique_file_created": "📝 Ficheiro de padrões únicos criado com %d padrões\\n", - "patterns_no_patterns_copied": "nenhum padrão foi copiado com sucesso para %s", - "patterns_failed_loaded_marker": "falha ao criar o ficheiro marcador '%s': %w", - "strategies_label": "Estratégias de prompt", - "strategies_setup_description": "Estratégias - Transfere estratégias de prompting (como chain of thought)", - "strategies_git_repo_url_label": "URL do repositório Git", - "strategies_git_repo_url_question": "Indique o URL padrão do repositório Git para as estratégias", - "strategies_git_repo_folder_label": "Pasta de estratégias no repositório Git", - "strategies_git_repo_folder_question": "Indique a pasta padrão no repositório Git onde as estratégias estão guardadas", - "strategies_downloading": "A transferir estratégias e a preencher %s...\\n", - "strategies_download_success": "✅ Estratégias transferidas e instaladas com sucesso em %s\\n", - "strategies_home_dir_error": "não foi possível obter o directório home: %v", - "strategies_failed_create_directory": "falha ao criar directório de estratégias: %w", - "strategies_cloning_repository": "A clonar repositório %s (caminho: %s)...\\n", - "strategies_failed_download": "falha ao transferir estratégias: %w", - "strategies_downloaded_count": "%d estratégias transferidas\\n", - "strategies_home_dir_fallback": "não foi possível obter o directório home: %v, a usar o directório actual", - "strategy_not_found": "estratégia %s não encontrada. Execute 'fabric --liststrategies' para ver a lista", - "strategies_none_found": "nenhuma estratégia encontrada. Execute 'fabric --setup' para transferir estratégias", - "strategies_available_header": "Estratégias disponíveis:", - "plugin_enter_value": "Indique o seu %v %v", - "plugin_enable_bool_question": "Ativar %v %v (true/false)", - "plugin_setup_skipped": "[%v] ignorado\\n", - "plugin_question_bool": "%v%v (true/false, deixe em branco para '%s' ou escreva '%v' para remover o valor):", - "plugin_question_with_default": "%v%v (deixe em branco para '%s' ou escreva '%v' para remover o valor):", - "plugin_question_optional": "%v%v (deixe em branco para ignorar):", - "plugin_invalid_boolean_value": "valor booleano inválido: %v", - "plugin_setting_not_valid": "%v=%v não é válido", - "plugin_invalid_bool": "bool inválido: %q", - "ollama_num_ctx_must_be_finite": "num_ctx deve ser um número finito", - "ollama_num_ctx_must_be_integer": "num_ctx deve ser um inteiro, recebeu float com parte fracionária", - "ollama_num_ctx_value_out_of_range": "valor num_ctx fora do intervalo", - "ollama_num_ctx_must_be_positive": "num_ctx deve ser positivo, recebeu: %d", - "ollama_num_ctx_value_too_large": "valor num_ctx demasiado grande: %d", - "ollama_num_ctx_must_be_valid_number": "num_ctx deve ser um número válido", - "ollama_num_ctx_must_be_valid_number_got": "num_ctx deve ser um número válido, recebeu: %s", - "ollama_num_ctx_invalid_type": "num_ctx deve ser um número, recebeu tipo inválido", - "ollama_num_ctx_exceeds_maximum": "num_ctx excede o valor máximo permitido de %d", - "ollama_error_reading_body": "Erro ao ler o corpo: %v", - "ollama_error_endpoint": "a testar endpoint", - "ollama_error_unmarshalling_body": "Erro ao desserializar o corpo: %v", - "ollama_invalid_num_ctx_in_request": "num_ctx inválido no pedido: %v", - "ollama_warning_parse_variables": "Aviso: falha ao analisar options.variables como JSON: %v", - "ollama_error_marshalling_body": "Erro ao serializar o corpo: %v", + "language_setup_description": "Idioma - Idioma de saída predefinido do fornecedor de IA", + "list_all_available_models": "Listar todos os modelos disponíveis", + "list_all_contexts": "Listar todos os contextos", + "list_all_patterns": "Listar todos os padrões", + "list_all_registered_extensions": "Listar todas as extensões registadas", + "list_all_sessions": "Listar todas as sessões", + "list_all_strategies": "Listar todas as estratégias", + "list_all_vendors": "Listar todos os fornecedores", + "list_gemini_tts_voices": "Listar todas as vozes TTS do Gemini disponíveis", + "list_transcription_models": "Listar todos os modelos de transcrição disponíveis", + "lmstudio_api_url_question": "Introduza o seu URL %v (como lembrete, geralmente é %v)", + "lmstudio_error_reading_response": "erro ao ler a resposta: %w", + "lmstudio_failed_create_request": "falha ao criar o pedido: %w", + "lmstudio_failed_decode_response": "falha ao descodificar a resposta: %w", + "lmstudio_failed_marshal_payload": "falha ao serializar os dados: %w", + "lmstudio_failed_send_request": "falha ao enviar o pedido: %w", + "lmstudio_invalid_response_missing_choices": "formato de resposta inválido: escolhas ausentes ou vazias", + "lmstudio_invalid_response_missing_content": "formato de resposta inválido: conteúdo ausente ou não é uma string na mensagem", + "lmstudio_invalid_response_missing_message": "formato de resposta inválido: mensagem ausente na primeira escolha", + "lmstudio_invalid_response_missing_text": "formato de resposta inválido: texto ausente ou não é uma string na primeira escolha", + "lmstudio_no_embeddings_returned": "nenhum embedding retornado", + "lmstudio_unexpected_status_code": "código de estado inesperado: %d", + "model_context_length_ollama": "Comprimento do contexto do modelo (afeta apenas ollama)", + "model_for_transcription": "Modelo para usar na transcrição (separado do modelo de chat)", + "no_description_available": "Nenhuma descrição disponível", + "no_items_found": "Nenhum %s", + "no_notification_system_available": "nenhum sistema de notificação disponível", + "number_of_latest_patterns": "Número dos padrões mais recentes a listar", + "ollama_cannot_parse_url": "Não é possível analisar o URL '%s': %v", + "ollama_chat_request_failed": "Pedido de chat falhou: %v", + "ollama_empty_address": "endereço vazio", "ollama_error_building_chat_url": "Erro ao construir a URL /chat: %v", "ollama_error_creating_chat_request": "Erro ao criar o pedido /chat: %v", - "ollama_failed_create_request": "falha ao criar o pedido", + "ollama_error_endpoint": "a testar endpoint", "ollama_error_getting_chat_body": "Erro ao obter o corpo /chat: %v", - "ollama_upstream_non_2xx_body_unreadable": "Servidor Fabric upstream retornou estado não-2xx %d e o corpo não pôde ser lido: %v", - "ollama_upstream_non_2xx": "Servidor Fabric upstream retornou estado não-2xx %d: %s", - "ollama_upstream_returned_status": "servidor Fabric upstream retornou estado %d", - "ollama_error_prefix": "Erro: %s", + "ollama_error_marshalling_body": "Erro ao serializar o corpo: %v", "ollama_error_parse_upstream_response": "Erro: falha ao analisar resposta upstream", - "ollama_failed_unmarshal_fabric_response": "falha ao desserializar resposta Fabric", - "ollama_error_writing_response": "Erro ao escrever resposta: %v", + "ollama_error_prefix": "Erro: %s", + "ollama_error_reading_body": "Erro ao ler o corpo: %v", "ollama_error_scanning_body": "Erro ao analisar o corpo: %v", + "ollama_error_unmarshalling_body": "Erro ao desserializar o corpo: %v", + "ollama_error_writing_response": "Erro ao escrever resposta: %v", + "ollama_failed_create_request": "falha ao criar o pedido", + "ollama_failed_decode_data_url": "falha ao descodificar URL de dados: %v", + "ollama_failed_fetch_image": "falha ao obter imagem de %s: %s", "ollama_failed_scan_sse_stream": "falha ao analisar fluxo de resposta SSE: %v", - "ollama_sse_buffer_limit": "Linha SSE excede limite de buffer de 1MB - linha de dados demasiado grande", - "ollama_warning_no_content": "Aviso: nenhum conteúdo recebido do servidor Fabric upstream", - "ollama_no_content_from_upstream": "nenhum conteúdo recebido do servidor Fabric upstream", - "ollama_empty_address": "endereço vazio", + "ollama_failed_unmarshal_fabric_response": "falha ao desserializar resposta Fabric", + "ollama_http_timeout_question": "Introduza o tempo limite HTTP (por exemplo, 20m, 60s)", "ollama_invalid_address": "endereço inválido: %w", "ollama_invalid_address_missing_host": "endereço inválido: host ausente", "ollama_invalid_address_missing_hostname": "endereço inválido: nome do host ausente", "ollama_invalid_address_path_not_allowed": "endereço inválido: componente de caminho não permitido em endereço simples", - "extension_registry_not_initialized": "registo de extensões não inicializado", - "extension_name_label": "Extensão: %s\n", - "extension_status_disabled": " Estado: DESATIVADA - Verificação de hash falhou: %v\n", - "extension_config_path_label": " Caminho de configuração: %s\n\n", - "extension_status_enabled": " Estado: ATIVADA\n", - "extension_executable_label": " Executável: %s\n", - "extension_type_label": " Tipo: %s\n", - "extension_timeout_label": " Tempo limite: %s\n", - "extension_description_label": " Descrição: %s\n", - "extension_version_label": " Versão: %s\n", - "extension_operations_label": " Operações:\n", - "extension_command_template_label": " Modelo de comando: %s\n", - "extension_file_config_label": " Configuração de ficheiro:\n", - "extension_invalid_config_path": "caminho de configuração inválido: %w", - "extension_failed_read_config": "falha ao ler o ficheiro de configuração: %w", - "extension_failed_parse_config": "falha ao analisar o ficheiro de configuração: %w", - "extension_failed_register": "falha ao registar a extensão: %w", - "extension_invalid_timeout": "valor de tempo limite inválido '%s': deve ser uma duração como '30s' ou '1m': %w", - "extension_registered_success": "Extensão registada com sucesso:\n", - "extension_name_detail_label": "Nome: %s\n", - "extension_failed_remove": "falha ao remover a extensão: %w", - "lmstudio_api_url_question": "Introduza o seu URL %v (como lembrete, geralmente é %v)", - "lmstudio_failed_create_request": "falha ao criar o pedido: %w", - "lmstudio_failed_send_request": "falha ao enviar o pedido: %w", - "lmstudio_unexpected_status_code": "código de estado inesperado: %d", - "lmstudio_failed_decode_response": "falha ao descodificar a resposta: %w", - "lmstudio_failed_marshal_payload": "falha ao serializar os dados: %w", - "lmstudio_error_reading_response": "erro ao ler a resposta: %w", - "lmstudio_invalid_response_missing_choices": "formato de resposta inválido: escolhas ausentes ou vazias", - "lmstudio_invalid_response_missing_message": "formato de resposta inválido: mensagem ausente na primeira escolha", - "lmstudio_invalid_response_missing_content": "formato de resposta inválido: conteúdo ausente ou não é uma string na mensagem", - "lmstudio_invalid_response_missing_text": "formato de resposta inválido: texto ausente ou não é uma string na primeira escolha", - "lmstudio_no_embeddings_returned": "nenhum embedding retornado", - "extension_warning_load_registry": "Aviso: não foi possível carregar o registo de extensões: %v\n", - "extension_name_empty": "o nome da extensão não pode estar vazio", - "extension_name_contains_spaces": "o nome da extensão '%s' contém espaços - os nomes não devem conter espaços", - "extension_executable_not_found": "executável não encontrado: %w", - "extension_failed_get_absolute_path": "falha ao obter o caminho absoluto: %w", - "extension_failed_hash_executable": "falha ao calcular o hash do executável: %w", - "extension_invalid_definition": "definição de extensão inválida: %w", - "extension_name_required": "o nome da extensão é obrigatório", - "extension_executable_required": "o caminho do executável é obrigatório", - "extension_type_required": "o tipo da extensão é obrigatório", - "extension_invalid_timeout_format": "formato de tempo limite inválido: %w", - "extension_operation_required": "deve ser definida pelo menos uma operação", - "extension_cmd_template_required": "o modelo de comando é obrigatório para a operação %s", - "extension_not_found": "extensão %s não encontrada", - "extension_config_hash_mismatch": "discrepância de hash do ficheiro de configuração para %s", - "extension_failed_verify_executable": "falha ao verificar o executável: %w", - "extension_executable_hash_mismatch": "discrepância de hash do executável para %s", - "extension_failed_marshal_registry": "falha ao serializar o registo de extensões: %w", - "extension_failed_read_registry": "falha ao ler o registo de extensões: %w", - "extension_failed_parse_registry": "falha ao analisar o registo de extensões: %w", - "extension_failed_get_extension": "falha ao obter a extensão: %w", - "extension_failed_format_command": "falha ao formatar o comando: %w", - "extension_empty_command": "comando vazio após a formatação", - "extension_operation_not_found": "operação %s não encontrada para a extensão %s", - "extension_executing_command": "A executar comando: %s\n", - "extension_execution_failed_stderr": "execução falhou: %w\nstderr: %s", - "extension_no_file_config": "nenhuma configuração de ficheiro encontrada", - "extension_no_output_file": "nenhum ficheiro de saída especificado na configuração", - "extension_execution_timed_out": "execução expirou após %v", - "extension_execution_failed_err": "execução falhou: %w\nerr: %s", - "extension_failed_read_output_file": "falha ao ler o ficheiro de saída: %w", - "extension_failed_get_output_path": "falha ao obter o caminho de saída: %w\nerr: %s", - "spotify_failed_create_token_request": "falha ao criar o pedido de token: %w", - "spotify_failed_request_access_token": "falha ao solicitar o token de acesso: %w", - "spotify_failed_get_access_token": "falha ao obter o token de acesso: estado %d, resposta: %s", - "spotify_failed_decode_token_response": "falha ao descodificar a resposta do token: %w", - "spotify_failed_create_request": "falha ao criar o pedido: %w", - "spotify_failed_execute_request": "falha ao executar o pedido: %w", - "spotify_failed_read_response_body": "falha ao ler o corpo da resposta: %w", + "ollama_invalid_data_url_format": "formato de URL de dados inválido", + "ollama_invalid_http_timeout_using_default": "Tempo limite HTTP inválido '%s': %v, a utilizar o padrão", + "ollama_invalid_num_ctx_in_request": "num_ctx inválido no pedido: %v", + "ollama_no_content_from_upstream": "nenhum conteúdo recebido do servidor Fabric upstream", + "ollama_num_ctx_exceeds_maximum": "num_ctx excede o valor máximo permitido de %d", + "ollama_num_ctx_invalid_type": "num_ctx deve ser um número, recebeu tipo inválido", + "ollama_num_ctx_must_be_finite": "num_ctx deve ser um número finito", + "ollama_num_ctx_must_be_integer": "num_ctx deve ser um inteiro, recebeu float com parte fracionária", + "ollama_num_ctx_must_be_positive": "num_ctx deve ser positivo, recebeu: %d", + "ollama_num_ctx_must_be_valid_number": "num_ctx deve ser um número válido", + "ollama_num_ctx_must_be_valid_number_got": "num_ctx deve ser um número válido, recebeu: %s", + "ollama_num_ctx_value_out_of_range": "valor num_ctx fora do intervalo", + "ollama_num_ctx_value_too_large": "valor num_ctx demasiado grande: %d", + "ollama_sse_buffer_limit": "Linha SSE excede limite de buffer de 1MB - linha de dados demasiado grande", + "ollama_upstream_non_2xx": "Servidor Fabric upstream retornou estado não-2xx %d: %s", + "ollama_upstream_non_2xx_body_unreadable": "Servidor Fabric upstream retornou estado não-2xx %d e o corpo não pôde ser lido: %v", + "ollama_upstream_returned_status": "servidor Fabric upstream retornou estado %d", + "ollama_warning_no_content": "Aviso: nenhum conteúdo recebido do servidor Fabric upstream", + "ollama_warning_parse_variables": "Aviso: falha ao analisar options.variables como JSON: %v", + "openai_api_base_url_not_configured": "URL base da API não configurado para o fornecedor %s", + "openai_audio_ffmpeg_failed": "ffmpeg falhou: %v: %s", + "openai_audio_ffmpeg_not_found_install": "ffmpeg não encontrado: por favor instale", + "openai_audio_file_exceeds_limit_enable_split": "O ficheiro %s excede o limite de 25MB; utilize --split-media-file para ativar a divisão automática", + "openai_audio_file_exceeds_limit_splitting": "O ficheiro %s é maior que o limite de tamanho... a dividir em partes...", + "openai_audio_model_not_supported_for_transcription": "o modelo '%s' não é suportado para transcrição", + "openai_audio_running_ffmpeg_split_chunks": "A executar ffmpeg para dividir o áudio em partes de %d segundos...", + "openai_audio_unable_to_split_acceptable_size_chunks": "não foi possível dividir o ficheiro em partes de tamanho aceitável", + "openai_audio_unsupported_audio_format": "formato de áudio não suportado '%s'", + "openai_audio_using_model_to_transcribe_part": "A utilizar o modelo %s para transcrever a parte %d (ficheiro: %s)...", + "openai_failed_to_create_models_url": "falha ao criar URL de modelos: %w", + "openai_image_failed_to_create_directory": "falha ao criar o diretório %s: %w", + "openai_image_failed_to_decode_image_data": "falha ao descodificar os dados da imagem: %w", + "openai_image_failed_to_save_image": "falha ao guardar a imagem em %s: %w", + "openai_image_saved_to": "Imagem guardada em: %s", + "openai_model_no_image_generation": "o modelo '%s' não suporta geração de imagens. Modelos suportados: %s", + "openai_models_response_too_large": "resposta de modelos demasiado grande do fornecedor %s (>%d bytes)", + "openai_unable_to_parse_models_response": "não foi possível analisar a resposta de modelos; resposta bruta: %s", + "openai_unexpected_status_code_read_error": "código de estado inesperado: %d do fornecedor %s (falha ao ler corpo da resposta: %v)", + "openai_unexpected_status_code_with_body": "código de estado inesperado: %d do fornecedor %s, corpo da resposta: %s", + "openai_warning_model_no_image_generation": "Aviso: O modelo '%s' não suporta geração de imagens. Modelos suportados: %s. Considere usar -m gpt-5.2 para geração de imagens.\n", + "optional_marker": "(opcional)", + "options_placeholder": "[OPÇÕES]", + "output_entire_session": "Saída de toda a sessão (incluindo temporária) para o ficheiro de saída", + "output_full": "Saída: %s", + "output_raw_list_shell_completion": "Saída de lista simples sem cabeçalhos/formatação (para conclusão de shell)", + "output_to_file": "Saída para ficheiro", + "output_truncated": "Saída: %s...", + "output_video_metadata": "Mostrar metadados do vídeo", + "path_to_yaml_config": "Caminho para ficheiro de configuração YAML", + "pattern_not_found_list_available": "padrão '%s' não encontrado. Execute 'fabric -l' para ver os padrões disponíveis", + "pattern_not_found_no_patterns": "padrão '%s' não encontrado.\n\nNenhum padrão instalado! Para resolver:\n • Execute 'fabric --setup' para configurar e descarregar padrões\n • Ou execute 'fabric -U' para descarregar/atualizar padrões diretamente", + "pattern_variables_help": "Valores para variáveis de padrão, ex. -v=#role:expert -v=#points:30", + "patterns_cloning_repository": "A clonar repositório %s (caminho: %s)...\\n", + "patterns_debug_included_custom_directory": "📂 Padrões do directório personalizado também incluídos: %s\\n", + "patterns_detected_old_path": "🔄 Caminho antigo 'patterns' detectado, a tentar migração para 'data/patterns'...", + "patterns_download_success": "✅ Padrões transferidos e instalados com sucesso em %s\\n", + "patterns_downloaded_temp": "%d padrões transferidos para o directório temporário\\n", + "patterns_downloading": "A transferir padrões e a preencher %s...\\n", + "patterns_failed_access_directory": "falha ao aceder ao directório de padrões '%s': %w", + "patterns_failed_create_temp_dir": "falha ao criar directório temporário: %w", + "patterns_failed_create_temp_folder": "falha ao criar a pasta temporária de padrões: %w", + "patterns_failed_download_from_git": "falha ao transferir padrões do repositório Git: %w", + "patterns_failed_download_from_repo": "falha ao transferir padrões de %s: %w", + "patterns_failed_loaded_marker": "falha ao criar o ficheiro marcador '%s': %w", + "patterns_failed_move_patterns": "falha ao mover os padrões para o directório de configuração: %w", + "patterns_failed_move_test_patterns": "falha ao mover padrões de teste para a pasta temporária: %w", + "patterns_failed_read_directory": "falha ao ler o directório de padrões: %w", + "patterns_failed_read_temp_directory": "falha ao ler o directório temporário de padrões: %w", + "patterns_failed_unique_file": "falha ao criar o ficheiro de padrões únicos: %w", + "patterns_failed_write_unique_file": "falha ao gravar o ficheiro de padrões únicos: %w", + "patterns_found_new_path": "✅ %d padrões encontrados no novo caminho '%s', a actualizar configuração...\\n", + "patterns_git_repo_folder_question": "Indique a pasta padrão no repositório Git onde os padrões estão guardados", + "patterns_git_repo_url_question": "Indique o URL padrão do repositório Git para os padrões", + "patterns_loader_label": "Carregador de padrões", + "patterns_no_patterns_copied": "nenhum padrão foi copiado com sucesso para %s", + "patterns_no_patterns_found_in_directories": "nenhum padrão encontrado nos directórios %s e %s", + "patterns_no_patterns_found_in_directory": "nenhum padrão encontrado no directório %s", + "patterns_no_patterns_migration_failed": "nenhum padrão encontrado no repositório no caminho %s e a migração falhou: %w", + "patterns_not_found_header": "⚠️ Nenhum padrão encontrado!", + "patterns_option_run_setup": "Opção 1 (Recomendada): Execute a configuração para descarregar padrões", + "patterns_option_run_setup_command": "fabric --setup", + "patterns_option_run_update": "Opção 2: Descarregar/atualizar padrões diretamente", + "patterns_option_run_update_command": "fabric -U", + "patterns_preserve_warning": "Aviso: não foi possível preservar o padrão personalizado '%s': %v\\n", + "patterns_preserved_custom_pattern": "Padrão personalizado preservado: %s\\n", + "patterns_required_to_work": "Padrões são necessários para o Fabric funcionar. Para resolver:", + "patterns_saving_updated_configuration": "💾 A guardar a configuração actualizada (caminho alterado de '%s' para '%s')...\\n", + "patterns_setup_description": "Padrões - Transfere os padrões", + "patterns_unable_to_find_or_migrate": "não foi possível encontrar padrões no caminho actual '%s' nem migrar para a nova estrutura", + "patterns_unique_file_created": "📝 Ficheiro de padrões únicos criado com %d padrões\\n", + "patterns_warning_custom_directory": "Aviso: não foi possível ler o directório de padrões personalizado %s: %v\\n", + "patterns_warning_remove_test_folder": "Aviso: não foi possível remover a pasta temporária de teste '%s': %v\\n", + "perplexity_api_key_not_configured": "Chave API não configurada para %s. Defina a variável de ambiente %s ou execute 'fabric --setup' para configurar %s", + "perplexity_api_request_failed": "pedido à API Perplexity falhou: %w", + "perplexity_citations_header": "\n\n**Citações:**\n", + "perplexity_failed_configure": "falha ao configurar Perplexity: %w", + "perplexity_streaming_error": "erro de streaming Perplexity: %v", + "plugin_configured": " ✓", + "plugin_enable_bool_question": "Ativar %v %v (true/false)", + "plugin_enter_value": "Indique o seu %v %v", + "plugin_invalid_bool": "bool inválido: %q", + "plugin_invalid_boolean_value": "valor booleano inválido: %v", + "plugin_not_configured": " ⚠️ NÃO CONFIGURADO", + "plugin_question_bool": "%v%v (true/false, deixe em branco para '%s' ou escreva '%v' para remover o valor):", + "plugin_question_optional": "%v%v (deixe em branco para ignorar):", + "plugin_question_with_default": "%v%v (deixe em branco para '%s' ou escreva '%v' para remover o valor):", + "plugin_setting_not_valid": "%v=%v não é válido", + "plugin_setup_configured": "[%v] configurado", + "plugin_setup_skipped": "[%v] ignorado\\n", + "prefer_playlist_over_video": "Preferir playlist ao vídeo se ambos os IDs estiverem presentes na URL", + "print_context": "Imprimir contexto", + "print_current_version": "Imprimir versão atual", + "print_session": "Imprimir sessão", + "register_new_extension": "Registar uma nova extensão do caminho do ficheiro de configuração", + "remove_registered_extension": "Remover uma extensão registada por nome", + "required_marker": "[obrigatório]", + "run_setup_for_reconfigurable_parts": "Executar configuração para todas as partes reconfiguráveis do fabric", + "save_generated_image_to_file": "Guardar imagem gerada no caminho de ficheiro especificado (ex. 'output.png')", + "scrape_website_url": "Fazer scraping da URL do site para markdown usando Jina AI", + "scraping_not_configured": "funcionalidade de scraping não está configurada. Por favor configure o Jina para ativar o scraping", + "search_question_jina": "Pergunta de pesquisa usando Jina AI", + "seed_for_lmm_generation": "Seed para ser usado na geração LMM", + "send_desktop_notification": "Enviar notificação no ambiente de trabalho quando o comando for concluído", + "serve_fabric_api_ollama_endpoints": "Servir a API REST do Fabric com endpoints ollama", + "serve_fabric_rest_api": "Servir a API REST do Fabric", + "set_debug_level": "Definir nível de debug (0=desligado, 1=básico, 2=detalhado, 3=rastreio)", + "set_frequency_penalty": "Definir penalidade de frequência", + "set_location_web_search": "Definir localização para resultados de pesquisa web (ex. 'America/Los_Angeles')", + "set_presence_penalty": "Definir penalidade de presença", + "set_reasoning_thinking_level": "Definir nível de raciocínio/pensamento (ex. off, low, medium, high, ou tokens numéricos para Anthropic ou Google Gemini)", + "set_temperature": "Definir temperatura", + "set_top_p": "Definir top P", + "setup_add_more_providers_later": "Poderá adicionar mais fornecedores depois com 'fabric --setup'", + "setup_ai_provider_required": "O Fabric precisa de pelo menos um fornecedor de IA para funcionar.", + "setup_available_ai_providers": "Fornecedores de IA Disponíveis:", + "setup_available_plugins": "Plugins disponíveis:", + "setup_complete_header": "✅ Configuração completa! Agora pode usar o Fabric.", + "setup_configure_more": "• Configurar mais opções: fabric --setup", + "setup_enter_ai_provider_number": "Número do Fornecedor de IA", + "setup_failed_download_patterns": "falha ao descarregar padrões: %w", + "setup_failed_download_strategies": "falha ao descarregar estratégias: %w", + "setup_failed_set_defaults": "falha ao configurar fornecedor e modelo predefinido: %w", + "setup_invalid_selection": "seleção inválida: %s", + "setup_list_patterns": "• Listar padrões disponíveis: fabric -l", + "setup_next_steps": "Próximos passos:", + "setup_no_ai_provider_selected": "nenhum fornecedor de IA selecionado - pelo menos um é necessário", + "setup_optional_configuration_header": "━━━ CONFIGURAÇÃO OPCIONAL ━━━\n\nFerramentas Opcionais", + "setup_plugin_number": "Número do Plugin", + "setup_plugin_prompt": "Indique o número do plugin a configurar", + "setup_required_configuration_header": "━━━ CONFIGURAÇÃO OBRIGATÓRIA ━━━\n\nFornecedores de IA [pelo menos um obrigatório]", + "setup_required_tools": "Ferramentas Obrigatórias", + "setup_step_configure_ai_provider": "🤖 Passo 3: Configurar um fornecedor de IA", + "setup_step_downloading_patterns": "📥 Passo 1: A descarregar padrões (necessários para o Fabric funcionar)...", + "setup_step_downloading_strategies": "📥 Passo 2: A descarregar estratégias (necessárias para o Fabric funcionar)...", + "setup_step_setting_defaults": "⚙️ Passo 4: A configurar fornecedor e modelo predefinido...", + "setup_try_pattern": "• Experimentar um padrão: echo 'o seu texto' | fabric --pattern summarize", + "setup_validation_ai_provider_configured": "✓ Fornecedor de IA configurado", + "setup_validation_ai_provider_missing": "✗ Fornecedor de IA não configurado - Necessário para o Fabric funcionar", + "setup_validation_complete": "✓ Todos os componentes necessários estão configurados!", + "setup_validation_defaults_configured": "✓ Fornecedor/modelo predefinido definido: %s/%s", + "setup_validation_defaults_missing": "✗ Fornecedor/modelo predefinido não definido - Necessário para o Fabric funcionar", + "setup_validation_header": "Estado da Configuração:", + "setup_validation_incomplete_help": "Execute 'fabric --setup' novamente para configurar itens em falta,\nou execute 'fabric -U' para descarregar padrões e estratégias.", + "setup_validation_incomplete_warning": "⚠️ Configuração incompleta! Componentes necessários em falta.", + "setup_validation_patterns_configured": "✓ Padrões descarregados", + "setup_validation_patterns_missing": "✗ Padrões não encontrados - Necessários para o Fabric funcionar", + "setup_validation_strategies_configured": "✓ Estratégias descarregadas", + "setup_validation_strategies_missing": "✗ Estratégias não encontradas - Necessárias para o Fabric funcionar", + "setup_welcome_header": "🎉 Bem-vindo ao Fabric! Vamos configurar tudo.", + "show_dry_run": "Mostrar o que seria enviado ao modelo sem enviar de facto", + "specify_language_code": "Especificar código de idioma para o chat, ex. -g=en -g=zh -g=pt-BR -g=pt-PT", + "specify_vendor_for_model": "Especificar fornecedor para o modelo selecionado (ex. -V \"LM Studio\" -m openai/gpt-oss-20b)", + "split_media_files_ffmpeg": "Dividir ficheiros de áudio/vídeo maiores que 25MB usando ffmpeg", "spotify_api_request_failed": "o pedido à API falhou: estado %d, resposta: %s", - "spotify_failed_parse_show_metadata": "falha ao analisar os metadados do programa: %w", - "spotify_failed_parse_episode_metadata": "falha ao analisar os metadados do episódio: %w", - "spotify_search_failed": "a pesquisa falhou: %w", - "spotify_failed_parse_search_results": "falha ao analisar os resultados da pesquisa: %w", + "spotify_audio_preview_label": "**Pré-visualização de áudio**: %s", + "spotify_client_id_question": "Introduza o seu CLIENT ID do Spotify", + "spotify_client_secret_question": "Introduza o seu CLIENT SECRET do Spotify", + "spotify_description_header": "## Descrição", + "spotify_duration_label": "**Duração**: %d minutos", + "spotify_episode_header": "# Episódio do Spotify", + "spotify_error_getting_metadata": "erro ao obter metadados do Spotify: %v", + "spotify_explicit_label": "**Explícito**: %v", + "spotify_failed_create_request": "falha ao criar o pedido: %w", + "spotify_failed_create_token_request": "falha ao criar o pedido de token: %w", + "spotify_failed_decode_token_response": "falha ao descodificar a resposta do token: %w", + "spotify_failed_execute_request": "falha ao executar o pedido: %w", + "spotify_failed_get_access_token": "falha ao obter o token de acesso: estado %d, resposta: %s", "spotify_failed_get_show_episodes": "falha ao obter os episódios do programa: %w", + "spotify_failed_parse_episode_metadata": "falha ao analisar os metadados do episódio: %w", "spotify_failed_parse_episodes": "falha ao analisar os episódios: %w", - "template_file_log_validating_path": "Ficheiro: a validar caminho %q", - "template_file_error_path_contains_parent_ref": "ficheiro: o caminho não pode conter '..'", + "spotify_failed_parse_search_results": "falha ao analisar os resultados da pesquisa: %w", + "spotify_failed_parse_show_metadata": "falha ao analisar os metadados do programa: %w", + "spotify_failed_read_response_body": "falha ao ler o corpo da resposta: %w", + "spotify_failed_request_access_token": "falha ao solicitar o token de acesso: %w", + "spotify_invalid_url": "URL do Spotify inválido, não é possível obter o ID do programa ou episódio: '%s'", + "spotify_label": "Spotify", + "spotify_language_field_label": "**Idioma**: %s", + "spotify_languages_label": "**Idiomas**: %s", + "spotify_media_type_label": "**Tipo de média**: %s", + "spotify_no_episode_found": "nenhum episódio encontrado com o ID: %s", + "spotify_no_show_found": "nenhum programa encontrado com o ID: %s", + "spotify_not_configured": "Spotify não está configurado, por favor execute o procedimento de configuração", + "spotify_publisher_label": "**Editora**: %s", + "spotify_release_date_label": "**Data de lançamento**: %s", + "spotify_search_description_label": "- **Descrição**: %s", + "spotify_search_episodes_label": "- **Episódios**: %d", + "spotify_search_failed": "a pesquisa falhou: %w", + "spotify_search_publisher_label": "- **Editora**: %s", + "spotify_search_results_header": "# Resultados de pesquisa do Spotify", + "spotify_search_url_label": "- **URL**: %s", + "spotify_setup_description": "Spotify - para obter metadados de podcasts/programas do Spotify", + "spotify_show_header": "# Podcast/Programa do Spotify", + "spotify_show_name_label": "**Programa**: %s", + "spotify_title_label": "**Título**: %s", + "spotify_total_episodes_label": "**Total de episódios**: %d", + "spotify_url_label": "**URL**: %s", + "start_tag_thinking_sections": "Tag inicial para secções de pensamento", + "strategies_available_header": "Estratégias disponíveis:", + "strategies_cloning_repository": "A clonar repositório %s (caminho: %s)...\\n", + "strategies_download_success": "✅ Estratégias transferidas e instaladas com sucesso em %s\\n", + "strategies_downloaded_count": "%d estratégias transferidas\\n", + "strategies_downloading": "A transferir estratégias e a preencher %s...\\n", + "strategies_failed_create_directory": "falha ao criar directório de estratégias: %w", + "strategies_failed_download": "falha ao transferir estratégias: %w", + "strategies_git_repo_folder_question": "Indique a pasta padrão no repositório Git onde as estratégias estão guardadas", + "strategies_git_repo_url_question": "Indique o URL padrão do repositório Git para as estratégias", + "strategies_home_dir_error": "não foi possível obter o directório home: %v", + "strategies_home_dir_fallback": "não foi possível obter o directório home: %v, a usar o directório actual", + "strategies_label": "Estratégias de prompt", + "strategies_none_found": "nenhuma estratégia encontrada. Execute 'fabric --setup' para transferir estratégias", + "strategies_setup_description": "Estratégias - Transfere estratégias de prompting (como chain of thought)", + "strategy_not_found": "estratégia %s não encontrada. Execute 'fabric --liststrategies' para ver a lista", + "stream_help": "Streaming", + "suppress_thinking_tags": "Suprimir texto contido em tags de pensamento", + "template_datetime_error_invalid_number": "invalid number in relative time: %q", + "template_datetime_error_invalid_relative_format": "invalid relative time format", + "template_datetime_error_invalid_unit": "invalid time unit: %q", + "template_datetime_error_relative_requires_value": "relative time requires a value", + "template_datetime_error_unknown_operation": "datetime: unknown operation %q", "template_file_error_expand_home_dir": "ficheiro: não foi possível expandir a diretoria home: %v", - "template_file_log_cleaned_path": "Ficheiro: caminho limpo %q", - "template_file_log_operation_value": "Ficheiro: operação=%q valor=%q", - "template_file_error_tail_requires_path_lines": "ficheiro: tail requer o formato caminho|linhas", "template_file_error_invalid_line_count": "ficheiro: contagem de linhas inválida %q", "template_file_error_line_count_positive": "ficheiro: a contagem de linhas tem de ser positiva", - "template_file_log_tail_returning_lines": "Ficheiro: tail a devolver %d linhas", - "template_file_error_stat_file": "ficheiro: não foi possível obter o estado do ficheiro: %v", - "template_file_error_size_exceeds_limit": "ficheiro: o tamanho %d excede o limite de %d bytes", - "template_file_error_read_file": "ficheiro: não foi possível ler: %v", - "template_file_log_read_bytes": "Ficheiro: %d bytes lidos", - "template_file_log_exists_for_path": "Ficheiro: exists=%v para o caminho %q", - "template_file_log_size_for_path": "Ficheiro: tamanho=%d para o caminho %q", - "template_file_log_modified_for_path": "Ficheiro: modified=%q para o caminho %q", - "template_file_error_unknown_operation": "ficheiro: operação desconhecida %q (suportadas: read, tail, exists, size, modified)", - "template_file_log_reading_last_lines": "Ficheiro: a ler as últimas %d linhas de %q", "template_file_error_open_file": "ficheiro: não foi possível abrir: %v", - "template_file_error_stat_open_file": "ficheiro: não foi possível obter o estado: %v", + "template_file_error_path_contains_parent_ref": "ficheiro: o caminho não pode conter '..'", + "template_file_error_read_file": "ficheiro: não foi possível ler: %v", "template_file_error_scanner_read": "ficheiro: erro ao ler: %v", + "template_file_error_size_exceeds_limit": "ficheiro: o tamanho %d excede o limite de %d bytes", + "template_file_error_stat_file": "ficheiro: não foi possível obter o estado do ficheiro: %v", + "template_file_error_stat_open_file": "ficheiro: não foi possível obter o estado: %v", + "template_file_error_tail_requires_path_lines": "ficheiro: tail requer o formato caminho|linhas", + "template_file_error_unknown_operation": "ficheiro: operação desconhecida %q (suportadas: read, tail, exists, size, modified)", + "template_file_log_cleaned_path": "Ficheiro: caminho limpo %q", + "template_file_log_exists_for_path": "Ficheiro: exists=%v para o caminho %q", + "template_file_log_modified_for_path": "Ficheiro: modified=%q para o caminho %q", + "template_file_log_operation_value": "Ficheiro: operação=%q valor=%q", + "template_file_log_read_bytes": "Ficheiro: %d bytes lidos", "template_file_log_read_total_return_last": "Ficheiro: %d linhas lidas no total, a devolver as últimas %d", - "chatter_error_no_session_pattern_user_messages": "não foi fornecida nenhuma sessão, padrão ou mensagem do utilizador", - "chatter_error_no_messages_provided": "não foram fornecidas mensagens", - "chatter_log_stream_usage_metadata": "[Metadados] Entrada: %d | Saída: %d | Total: %d", - "chatter_error_stream_update": "Erro: %s", - "chatter_error_empty_response": "resposta vazia", - "chatter_warning_parse_file_changes_failed": "Aviso: Falha ao analisar alteracoes de ficheiro: %v", - "chatter_warning_get_current_directory_failed": "Aviso: Falha ao obter a diretoria atual: %v", - "chatter_warning_apply_file_changes_failed": "Aviso: Falha ao aplicar alteracoes de ficheiro: %v", - "chatter_info_file_changes_applied_successfully": "Alteracoes de ficheiro aplicadas com sucesso.", - "chatter_help_review_changes_with_git_diff": "Pode rever as alteracoes com 'git diff' se estiver a usar git.", - "chatter_error_find_session": "nao foi possivel encontrar a sessao %s: %v", - "chatter_error_find_context": "nao foi possivel encontrar o contexto %s: %v", - "chatter_error_get_pattern": "nao foi possivel obter o padrao %s: %v", - "chatter_error_load_strategy": "nao foi possivel carregar a estrategia %s: %v", - "chatter_prompt_enforce_response_language": "%s\n\nIMPORTANTE: Primeiro, execute as instrucoes fornecidas neste prompt usando a entrada do utilizador. Em seguida, garanta que toda a sua resposta final, incluindo quaisquer cabecalhos de secao ou titulos gerados como parte da execucao das instrucoes, seja escrita APENAS no idioma %s.", - "vertexai_failed_google_credentials": "falha ao obter credenciais do Google (certifique-se de que o ADC esteja configurado): %w", - "vertexai_no_models_found": "nenhum modelo encontrado de nenhum editor", - "vertexai_no_conversational_models": "nenhum modelo conversacional encontrado", + "template_file_log_reading_last_lines": "Ficheiro: a ler as últimas %d linhas de %q", + "template_file_log_size_for_path": "Ficheiro: tamanho=%d para o caminho %q", + "template_file_log_tail_returning_lines": "Ficheiro: tail a devolver %d linhas", + "template_file_log_validating_path": "Ficheiro: a validar caminho %q", + "template_sys_error_env_requires_var": "env: variable name required", + "template_sys_error_home": "failed to get home directory: %v", + "template_sys_error_hostname": "failed to get hostname: %v", + "template_sys_error_pwd": "failed to get working directory: %v", + "template_sys_error_unknown_operation": "sys: unknown operation %q", + "template_sys_error_user": "failed to get current user: %v", + "transcription_model_required": "modelo de transcrição é necessário (use --transcribe-model)", + "transparent_background_png_webp_only": "fundo transparente só pode ser usado com formatos PNG e WebP, não %s", + "tts_audio_generated_successfully": "Áudio TTS gerado com sucesso e guardado em: %s\n", + "tts_model_requires_audio_output": "modelo TTS '%s' requer saída de áudio. Por favor especifique um ficheiro de saída de áudio com a flag -o (ex. -o output.wav)", + "tts_voice_name": "Nome da voz TTS para modelos suportados (ex. Kore, Charon, Puck)", + "unsupported_conversion": "conversão não suportada de %v para %v", + "update_patterns": "Atualizar padrões", + "usage_header": "Uso:", + "use_model_defaults_raw_help": "Utiliza os valores predefinidos do modelo sem enviar opções de chat (temperature, top_p, etc.). Só afeta fornecedores compatíveis com o OpenAI. Os modelos Anthropic usam sempre uma seleção inteligente de parâmetros para cumprir os requisitos específicos do modelo.", + "vendor_no_transcription_support": "o fornecedor %s não suporta transcrição de áudio", + "vendor_not_configured": "o fornecedor %s não está configurado", + "vendor_not_found": "fornecedor %s não encontrado", + "vendors_no_ai_vendors_configured_read_models": "nenhum fornecedor de IA configurado para ler modelos", "vertexai_client_not_initialized": "cliente VertexAI nao inicializado", - "vertexai_no_valid_messages": "nenhuma mensagem valida para enviar", - "vertexai_no_content_in_response": "sem conteudo na resposta", - "vertexai_failed_gemini_client": "falha ao criar cliente Gemini: %w", - "vertexai_stream_error": "Erro: %v", - "gemini_invalid_location_format": "formato de local de busca invalido %q: deve ser fuso horario (ex. 'America/Los_Angeles') ou codigo de idioma (ex. 'en-US')", - "gemini_stream_error": "Erro: %v", - "gemini_no_text_for_tts": "nenhum conteudo de texto encontrado para geracao TTS", - "gemini_invalid_voice": "voz invalida '%s'. As vozes validas sao: %v", - "gemini_tts_failed": "falha na geracao TTS: %w", - "gemini_unexpected_data_type": "tipo de dado inesperado: %s, esperado dados de audio", - "gemini_audio_data_too_small": "dados de audio muito pequenos: %d bytes, minimo requerido: %d", - "gemini_wav_generation_failed": "falha ao gerar ficheiro WAV: %w", - "gemini_wav_data_invalid": "dados WAV gerados invalidos: %d bytes, minimo requerido: %d", - "gemini_no_audio_data": "nenhum dado de audio recebido do modelo TTS", - "gemini_empty_pcm_data": "dados PCM vazios fornecidos", - "gemini_pcm_data_too_large": "dados PCM muito grandes: %d bytes, maximo permitido: %d", - "bedrock_unable_load_aws_config": "nao foi possivel carregar a configuracao AWS: %w", - "bedrock_aws_region_label": "Regiao AWS", - "bedrock_invalid_aws_region": "regiao AWS invalida: %s", - "bedrock_unable_load_aws_config_with_region": "nao foi possivel carregar a configuracao AWS com regiao %s: %w", - "bedrock_failed_list_foundation_models": "falha ao listar modelos de fundacao: %w", - "bedrock_failed_list_inference_profiles": "falha ao listar perfis de inferencia: %w", - "bedrock_panic_sendstream": "panico no SendStream: %v", - "bedrock_conversestream_failed": "bedrock conversestream falhou para o modelo %s: %w", - "bedrock_unknown_stream_event_type": "tipo de evento de stream desconhecido: %T", - "bedrock_converse_failed": "bedrock converse falhou para o modelo %s: %w", - "bedrock_unexpected_response_type": "tipo de resposta inesperado: %T", - "bedrock_empty_response_content": "conteudo de resposta vazio", - "bedrock_unexpected_content_block_type": "tipo de bloco de conteudo inesperado: %T", - "fetch_unknown_operation": "fetch: operação desconhecida %q (suportada: get)", - "fetch_content_not_utf8": "fetch: o conteúdo não é texto UTF-8 válido", - "fetch_content_null_bytes": "fetch: o conteúdo contém bytes nulos", - "fetch_error_create_request": "fetch: erro ao criar o pedido: %v", - "fetch_error_fetching_url": "fetch: erro ao obter o URL: %v", - "fetch_http_error": "fetch: erro HTTP: %d - %s", - "fetch_content_too_large": "fetch: conteúdo demasiado grande: %d bytes (máx %d bytes)", - "fetch_unsupported_content_type": "fetch: tipo de conteúdo não suportado %q - apenas conteúdo de texto permitido", - "fetch_error_reading_response": "fetch: erro ao ler a resposta: %v", - "fetch_content_exceeds_limit": "fetch: conteúdo demasiado grande: excede %d bytes", - "file_manager_invalid_format_no_json_array": "formato %s inválido: nenhum array JSON encontrado", - "file_manager_invalid_format_unbalanced_brackets": "formato %s inválido: parêntesis desequilibrados", - "file_manager_failed_parse_json": "falha ao analisar %s JSON: %w", - "file_manager_invalid_operation": "operação inválida para alteração de ficheiro %d: %s", - "file_manager_empty_path": "caminho vazio para alteração de ficheiro %d", - "file_manager_suspicious_path": "caminho suspeito para alteração de ficheiro %d: %s", - "file_manager_file_content_too_large": "conteúdo do ficheiro demasiado grande para alteração de ficheiro %d: %d bytes", - "file_manager_failed_create_directory": "falha ao criar diretório %s para alteração de ficheiro %d: %w", - "file_manager_failed_write_file": "falha ao escrever ficheiro %s para alteração de ficheiro %d: %w", - "file_manager_applied_operation": "Operação %s aplicada a %s", - "vertexai_error_create_request": "falha ao criar pedido: %w", - "vertexai_error_request_failed": "pedido falhou: %w", "vertexai_error_api_status": "API devolveu estado %d: %s", - "vertexai_error_read_response": "falha ao ler resposta: %w", - "vertexai_error_response_too_large": "resposta demasiado grande (>%d bytes)", + "vertexai_error_create_request": "falha ao criar pedido: %w", "vertexai_error_parse_response": "falha ao analisar resposta: %w", - "copilot_tenant_client_id_required": "ID do locatário e ID do cliente são obrigatórios", - "copilot_failed_create_conversation": "falha ao criar conversa: %w", - "copilot_failed_send_message": "falha ao enviar mensagem: %w", - "copilot_failed_stream_message": "falha ao transmitir mensagem: %w", - "copilot_error_create_conversation": "falha ao criar conversa: %s - %s", - "copilot_error_chat_request": "pedido de chat falhou: %s - %s", - "copilot_error_stream_request": "pedido de transmissão falhou: %s - %s", - "copilot_debug_created_conversation": "Conversa do Copilot criada: %s", - "copilot_debug_failed_parse_sse_event": "Falha ao analisar evento SSE: %v", - "copilot_error_reading_stream": "erro ao ler transmissão: %w" + "vertexai_error_read_response": "falha ao ler resposta: %w", + "vertexai_error_request_failed": "pedido falhou: %w", + "vertexai_error_response_too_large": "resposta demasiado grande (>%d bytes)", + "vertexai_failed_gemini_client": "falha ao criar cliente Gemini: %w", + "vertexai_failed_google_credentials": "falha ao obter credenciais do Google (certifique-se de que o ADC esteja configurado): %w", + "vertexai_no_content_in_response": "sem conteudo na resposta", + "vertexai_no_conversational_models": "nenhum modelo conversacional encontrado", + "vertexai_no_models_found": "nenhum modelo encontrado de nenhum editor", + "vertexai_no_valid_messages": "nenhuma mensagem valida para enviar", + "vertexai_stream_error": "Erro: %v", + "wipe_context": "Limpar contexto", + "wipe_session": "Limpar sessão", + "youtube_api_key_required": "Chave de API do YouTube necessária para comentários e metadados. Execute 'fabric --setup' para configurar", + "youtube_auth_required_bot_detection": "YouTube requer autenticação (deteção de bot). Use --yt-dlp-args='--cookies-from-browser BROWSER' onde BROWSER pode ser chrome, firefox, brave, etc.", + "youtube_empty_seconds_string": "cadeia de segundos vazia", + "youtube_error_getting_comments": "erro ao obter comentários: %v", + "youtube_error_getting_metadata": "erro ao obter metadados do vídeo: %v", + "youtube_error_getting_video_details": "erro ao obter detalhes do vídeo: %v", + "youtube_error_parsing_duration": "erro ao analisar a duração do vídeo: %v", + "youtube_error_saving_csv": "erro ao guardar vídeos em CSV: %v", + "youtube_failed_create_temp_dir": "falha ao criar diretório temporário: %v", + "youtube_failed_fetch_comments": "Falha ao obter comentários: %v", + "youtube_failed_walk_directory": "falha ao percorrer o diretório: %v", + "youtube_invalid_duration_string": "cadeia de duração inválida: %s", + "youtube_invalid_seconds_format": "formato de segundos inválido %q: %w", + "youtube_invalid_timestamp_format": "formato de timestamp inválido: %s", + "youtube_invalid_url": "URL do YouTube inválido, não é possível obter o ID do vídeo ou da lista de reprodução: '%s'", + "youtube_invalid_ytdlp_arguments": "argumentos do yt-dlp inválidos: %v", + "youtube_label": "YouTube", + "youtube_no_transcript_content": "nenhum conteúdo de transcrição encontrado no ficheiro VTT", + "youtube_no_url_provided": "Nenhum URL do YouTube fornecido", + "youtube_no_video_found_with_id": "nenhum vídeo encontrado com o ID: %s", + "youtube_no_video_id_found": "nenhum ID de vídeo encontrado no URL", + "youtube_no_vtt_files_found": "nenhum ficheiro VTT encontrado no diretório", + "youtube_not_configured": "YouTube não está configurado, por favor execute o procedimento de configuração", + "youtube_playlist_header": "Lista de reprodução: %s", + "youtube_playlist_saved_to": "Lista de reprodução guardada em %s", + "youtube_rate_limit_exceeded": "Limite de taxa do YouTube excedido. Tente novamente mais tarde ou utilize argumentos diferentes do yt-dlp como '--sleep-requests 1' para desacelerar os pedidos.", + "youtube_setup_description": "YouTube - para obter transcrições de vídeo (via yt-dlp) e comentários/metadados (via API do YouTube)", + "youtube_url_help": "Vídeo do YouTube ou \"URL\" de playlist para obter transcrição, comentários e enviar ao chat ou imprimir na consola e armazenar no ficheiro de saída", + "youtube_url_is_playlist_not_video": "O URL é uma lista de reprodução, não um vídeo", + "youtube_video_id_title_header": "VideoID: Título", + "youtube_ytdlp_not_found": "yt-dlp não encontrado no PATH. Por favor instale o yt-dlp para usar a funcionalidade de transcrição do YouTube", + "youtube_ytdlp_stderr_error": "Erro ao ler stderr do yt-dlp" } diff --git a/internal/i18n/locales/zh.json b/internal/i18n/locales/zh.json index 208212ff..5a4c0538 100644 --- a/internal/i18n/locales/zh.json +++ b/internal/i18n/locales/zh.json @@ -1,520 +1,592 @@ { - "html_readability_error": "使用原始输入,因为无法应用 HTML 可读性处理", - "vendor_not_configured": "供应商 %s 未配置", - "vendor_no_transcription_support": "供应商 %s 不支持音频转录", - "transcription_model_required": "需要转录模型(使用 --transcribe-model)", - "youtube_not_configured": "YouTube 未配置,请运行设置程序", - "spotify_not_configured": "Spotify 未配置,请运行设置程序", - "spotify_label": "Spotify", - "spotify_setup_description": "Spotify - 从 Spotify 获取播客/节目元数据", - "spotify_invalid_url": "无效的 Spotify URL,无法获取节目或剧集 ID:'%s'", - "spotify_error_getting_metadata": "获取 Spotify 元数据时出错:%v", - "spotify_no_show_found": "未找到 ID 为 %s 的节目", - "spotify_no_episode_found": "未找到 ID 为 %s 的剧集", - "spotify_url_help": "Spotify 播客或剧集 URL,用于获取元数据并发送到聊天", - "youtube_api_key_required": "YouTube API 密钥用于评论和元数据。运行 'fabric --setup' 进行配置", - "youtube_ytdlp_not_found": "在 PATH 中未找到 yt-dlp。请安装 yt-dlp 以使用 YouTube 转录功能", - "youtube_invalid_url": "无效的 YouTube URL,无法获取视频或播放列表 ID:'%s'", - "youtube_url_is_playlist_not_video": "URL 是播放列表,而不是视频", - "youtube_no_video_id_found": "在 URL 中未找到视频 ID", - "youtube_rate_limit_exceeded": "超过 YouTube 速率限制。请稍后重试,或使用不同的 yt-dlp 参数(如 '--sleep-requests 1')来减慢请求速度。", - "youtube_auth_required_bot_detection": "YouTube 需要身份验证(机器人检测)。使用 --yt-dlp-args='--cookies-from-browser BROWSER',其中 BROWSER 可以是 chrome、firefox、brave 等。", - "youtube_ytdlp_stderr_error": "读取 yt-dlp stderr 时出错", - "youtube_invalid_ytdlp_arguments": "无效的 yt-dlp 参数:%v", - "youtube_failed_create_temp_dir": "创建临时目录失败:%v", - "youtube_no_transcript_content": "在 VTT 文件中未找到转录内容", - "youtube_no_vtt_files_found": "在目录中未找到 VTT 文件", - "youtube_failed_walk_directory": "遍历目录失败:%v", - "youtube_error_getting_video_details": "获取视频详情时出错:%v", - "youtube_invalid_duration_string": "无效的时长字符串:%s", - "youtube_error_getting_metadata": "获取视频元数据时出错:%v", - "youtube_error_parsing_duration": "解析视频时长时出错:%v", - "youtube_error_getting_comments": "获取评论时出错:%v", - "youtube_error_saving_csv": "将视频保存为 CSV 时出错:%v", - "youtube_no_video_found_with_id": "未找到 ID 为 %s 的视频", - "youtube_invalid_timestamp_format": "无效的时间戳格式:%s", - "youtube_empty_seconds_string": "秒数字符串为空", - "youtube_invalid_seconds_format": "无效的秒数格式 %q:%w", - "error_fetching_playlist_videos": "获取播放列表视频时出错: %w", - "openai_api_base_url_not_configured": "未为提供商 %s 配置 API 基础 URL", - "openai_failed_to_create_models_url": "创建模型 URL 失败:%w", - "openai_unexpected_status_code_with_body": "意外的状态码:来自提供商 %s 的 %d,响应主体:%s", - "openai_unexpected_status_code_read_error_partial": "意外的状态码:来自提供商 %s 的 %d(读取主体错误:%v),部分响应:%s", - "openai_unexpected_status_code_read_error": "意外的状态码:来自提供商 %s 的 %d(读取响应主体失败:%v)", - "openai_unable_to_parse_models_response": "无法解析模型响应;原始响应:%s", - "openai_warning_model_no_image_generation": "警告:模型 '%s' 不支持图像生成。支持的模型:%s。请考虑使用 -m gpt-5.2 进行图像生成。\n", - "openai_model_no_image_generation": "模型 '%s' 不支持图像生成。支持的模型:%s", - "scraping_not_configured": "抓取功能未配置。请设置 Jina 以启用抓取功能", - "could_not_determine_home_dir": "无法确定用户主目录: %w", - "could_not_stat_env_file": "无法获取 .env 文件状态: %w", + "additional_yt_dlp_args": "传递给 yt-dlp 的其他参数(例如 '--cookies-from-browser brave')", + "address_to_bind_rest_api": "绑定 REST API 的地址", + "anthropic_stream_error": "流式传输错误: %v", + "api_key_secure_server_routes": "用于保护服务器路由的 API 密钥", + "application_options_header": "应用程序选项:", + "apply_variables_to_input": "将变量应用于用户输入", + "attachment_path_or_url_help": "附件路径或 URL(例如用于 OpenAI 图像识别消息)", + "audio_output_file_specified_but_not_tts_model": "指定了音频输出文件 '%s' 但模型 '%s' 不是 TTS 模型。请使用 TTS 模型,如 gemini-2.5-flash-preview-tts", + "audio_video_file_transcribe": "要转录的音频或视频文件", + "available_models_header": "可用模型", + "available_transcription_models": "可用的转录模型:", + "available_vendors_header": "可用供应商:", + "azure_api_key_required": "Azure API 密钥是必需的", + "azure_api_version_question": "请输入 Azure API 版本(留空使用默认值)", + "azure_base_url_required": "Azure 基础 URL 是必需的", + "azure_deployments_question": "请输入您的 Azure 部署名称(用逗号分隔)", + "azure_failed_extract_deployment": "无法从请求中提取部署名称", + "azure_model_field_empty": "请求正文中的模型字段为空", + "azure_request_body_nil": "请求正文为空", + "background_type_help": "背景类型:opaque、transparent(默认:opaque,仅适用于 PNG/WebP)", + "bedrock_aws_region_label": "AWS 区域", + "bedrock_converse_failed": "模型 %s 的 bedrock converse 失败:%w", + "bedrock_conversestream_failed": "模型 %s 的 bedrock conversestream 失败:%w", + "bedrock_empty_response_content": "空响应内容", + "bedrock_failed_list_foundation_models": "无法列出基础模型:%w", + "bedrock_failed_list_inference_profiles": "无法列出推理配置文件:%w", + "bedrock_invalid_aws_region": "无效的 AWS 区域:%s", + "bedrock_panic_sendstream": "SendStream 中出现恐慌:%v", + "bedrock_unable_load_aws_config": "无法加载 AWS 配置:%w", + "bedrock_unable_load_aws_config_with_region": "无法加载区域 %s 的 AWS 配置:%w", + "bedrock_unexpected_content_block_type": "意外的内容块类型:%T", + "bedrock_unexpected_response_type": "意外的响应类型:%T", + "bedrock_unknown_stream_event_type": "未知的流事件类型:%T", + "cannot_convert_string": "无法将字符串 %q 转换为 %v", + "change_default_model": "更改默认模型", + "chatter_error_empty_response": "空响应", + "chatter_error_find_context": "找不到上下文 %s:%v", + "chatter_error_find_session": "找不到会话 %s:%v", + "chatter_error_get_pattern": "无法获取模式 %s:%v", + "chatter_error_load_strategy": "无法加载策略 %s:%v", + "chatter_error_no_messages_provided": "未提供消息", + "chatter_error_no_session_pattern_user_messages": "未提供会话、模式或用户消息", + "chatter_error_stream_update": "错误:%s", + "chatter_help_review_changes_with_git_diff": "如果你正在使用 git,可以用 'git diff' 查看这些更改。", + "chatter_info_file_changes_applied_successfully": "文件更改已成功应用。", + "chatter_log_stream_usage_metadata": "[元数据] 输入: %d | 输出: %d | 总计: %d", + "chatter_prompt_enforce_response_language": "%s\n\n重要:首先,请使用用户输入执行此提示中提供的指令。其次,请确保你的整个最终回复(包括执行指令时生成的任何章节标题或标题)仅使用 %s 语言撰写。", + "chatter_warning_apply_file_changes_failed": "警告:应用文件更改失败:%v", + "chatter_warning_get_current_directory_failed": "警告:获取当前目录失败:%v", + "chatter_warning_parse_file_changes_failed": "警告:解析文件更改失败:%v", + "choose_context_from_available": "从可用上下文中选择一个上下文", + "choose_model": "选择模型", + "choose_pattern_from_available": "从可用模式中选择一个模式", + "choose_session_from_available": "从可用会话中选择一个会话", + "choose_strategy_from_available": "从可用策略中选择一个策略", + "command_completed_successfully": "命令执行成功", + "compression_level_jpeg_webp": "JPEG/WebP 格式的压缩级别 0-100(默认:未设置)", + "config_file_not_found": "找不到配置文件: %s", + "convert_html_readability": "将 HTML 输入转换为清洁、可读的视图", + "copilot_debug_created_conversation": "已创建 Copilot 对话: %s", + "copilot_debug_failed_parse_sse_event": "解析 SSE 事件失败: %v", + "copilot_error_chat_request": "聊天请求失败: %s - %s", + "copilot_error_create_conversation": "创建对话失败: %s - %s", + "copilot_error_reading_stream": "读取流时出错: %w", + "copilot_error_stream_request": "流请求失败: %s - %s", + "copilot_failed_create_conversation": "创建对话失败: %w", + "copilot_failed_send_message": "发送消息失败: %w", + "copilot_failed_stream_message": "流式传输消息失败: %w", + "copilot_tenant_client_id_required": "需要租户ID和客户端ID", + "copy_to_clipboard": "复制到剪贴板", + "could_not_copy_to_clipboard": "无法复制到剪贴板: %v", "could_not_create_config_dir": "无法创建配置目录: %w", "could_not_create_env_file": "无法创建 .env 文件: %w", - "could_not_copy_to_clipboard": "无法复制到剪贴板: %v", - "file_already_exists_not_overwriting": "文件 %s 已存在,不会覆盖。请重命名现有文件或选择其他名称", - "error_creating_file": "创建文件时出错: %v", - "error_writing_to_file": "写入文件时出错: %v", - "error_creating_audio_file": "创建音频文件时出错: %v", - "error_writing_audio_data": "写入音频数据到文件时出错: %v", - "tts_model_requires_audio_output": "TTS 模型 '%s' 需要音频输出。请使用 -o 标志指定音频输出文件(例如,-o output.wav)", - "audio_output_file_specified_but_not_tts_model": "指定了音频输出文件 '%s' 但模型 '%s' 不是 TTS 模型。请使用 TTS 模型,如 gemini-2.5-flash-preview-tts", - "file_already_exists_choose_different": "文件 %s 已存在。请选择不同的文件名或删除现有文件", - "no_notification_system_available": "没有可用的通知系统", - "cannot_convert_string": "无法将字符串 %q 转换为 %v", - "unsupported_conversion": "不支持从 %v 到 %v 的转换", - "invalid_config_path": "无效的配置路径: %w", - "config_file_not_found": "找不到配置文件: %s", - "error_reading_config_file": "读取配置文件时出错: %w", - "error_parsing_config_file": "解析配置文件时出错: %w", - "error_reading_piped_message": "从 stdin 读取管道消息时出错: %w", - "image_file_already_exists": "图像文件已存在: %s", - "invalid_image_file_extension": "无效的图像文件扩展名 '%s'。支持的格式:.png、.jpeg、.jpg、.webp", - "image_parameters_require_image_file": "图像参数(--image-size、--image-quality、--image-background、--image-compression)只能与 --image-file 一起使用", - "invalid_image_size": "无效的图像尺寸 '%s'。支持的尺寸:1024x1024、1536x1024、1024x1536、auto", - "invalid_image_quality": "无效的图像质量 '%s'。支持的质量:low、medium、high、auto", - "invalid_image_background": "无效的图像背景 '%s'。支持的背景:opaque、transparent", - "image_compression_jpeg_webp_only": "图像压缩只能用于 JPEG 和 WebP 格式,不支持 %s", - "image_compression_range_error": "图像压缩必须在 0 到 100 之间,得到 %d", - "transparent_background_png_webp_only": "透明背景只能用于 PNG 和 WebP 格式,不支持 %s", - "available_transcription_models": "可用的转录模型:", - "tts_audio_generated_successfully": "TTS 音频生成成功并保存到: %s\n", - "fabric_command_complete": "Fabric 命令完成", - "fabric_command_complete_with_pattern": "Fabric: %s 完成", - "command_completed_successfully": "命令执行成功", - "output_truncated": "输出: %s...", - "output_full": "输出: %s", - "choose_pattern_from_available": "从可用模式中选择一个模式", - "pattern_variables_help": "模式变量的值,例如 -v=#role:expert -v=#points:30", - "choose_context_from_available": "从可用上下文中选择一个上下文", - "choose_session_from_available": "从可用会话中选择一个会话", - "attachment_path_or_url_help": "附件路径或 URL(例如用于 OpenAI 图像识别消息)", - "run_setup_for_reconfigurable_parts": "为 fabric 的所有可重新配置部分运行设置", - "set_temperature": "设置温度", - "set_top_p": "设置 top P", - "stream_help": "流式传输", - "set_presence_penalty": "设置存在惩罚", - "use_model_defaults_raw_help": "在不发送聊天选项(temperature、top_p 等)的情况下使用模型默认值。仅影响兼容 OpenAI 的提供商。Anthropic 模型始终使用智能参数选择以满足特定模型的要求。", - "set_frequency_penalty": "设置频率惩罚", - "list_all_patterns": "列出所有模式", - "list_all_available_models": "列出所有可用模型", - "list_all_contexts": "列出所有上下文", - "list_all_sessions": "列出所有会话", - "update_patterns": "更新模式", - "messages_to_send_to_chat": "发送到聊天的消息", - "copy_to_clipboard": "复制到剪贴板", - "choose_model": "选择模型", - "specify_vendor_for_model": "为所选模型指定供应商(例如,-V \"LM Studio\" -m openai/gpt-oss-20b)", - "model_context_length_ollama": "模型上下文长度(仅影响 ollama)", - "output_to_file": "输出到文件", - "output_entire_session": "将整个会话(包括临时会话)输出到输出文件", - "number_of_latest_patterns": "要列出的最新模式数量", - "change_default_model": "更改默认模型", - "youtube_url_help": "YouTube 视频或播放列表 \"URL\",用于获取转录、评论并发送到聊天或打印到控制台并存储到输出文件", - "prefer_playlist_over_video": "如果 URL 中同时存在两个 ID,则优先选择播放列表而不是视频", - "grab_transcript_from_youtube": "从 YouTube 视频获取转录并发送到聊天(默认使用)。", - "grab_transcript_with_timestamps": "从 YouTube 视频获取带时间戳的转录并发送到聊天", - "grab_comments_from_youtube": "从 YouTube 视频获取评论并发送到聊天", - "output_video_metadata": "输出视频元数据", - "additional_yt_dlp_args": "传递给 yt-dlp 的其他参数(例如 '--cookies-from-browser brave')", - "specify_language_code": "指定聊天的语言代码,例如 -g=en -g=zh -g=pt-BR -g=pt-PT", - "scrape_website_url": "使用 Jina AI 将网站 URL 抓取为 markdown", - "search_question_jina": "使用 Jina AI 搜索问题", - "seed_for_lmm_generation": "用于 LMM 生成的种子", - "wipe_context": "清除上下文", - "wipe_session": "清除会话", - "print_context": "打印上下文", - "print_session": "打印会话", - "convert_html_readability": "将 HTML 输入转换为清洁、可读的视图", - "apply_variables_to_input": "将变量应用于用户输入", - "disable_pattern_variable_replacement": "禁用模式变量替换", - "show_dry_run": "显示将发送给模型的内容而不实际发送", - "serve_fabric_rest_api": "提供 Fabric REST API 服务", - "serve_fabric_api_ollama_endpoints": "提供带有 ollama 端点的 Fabric REST API 服务", - "address_to_bind_rest_api": "绑定 REST API 的地址", - "api_key_secure_server_routes": "用于保护服务器路由的 API 密钥", - "path_to_yaml_config": "YAML 配置文件路径", - "print_current_version": "打印当前版本", - "list_all_registered_extensions": "列出所有已注册的扩展", - "register_new_extension": "从配置文件路径注册新扩展", - "remove_registered_extension": "按名称删除已注册的扩展", - "choose_strategy_from_available": "从可用策略中选择一个策略", - "list_all_strategies": "列出所有策略", - "list_all_vendors": "列出所有供应商", - "output_raw_list_shell_completion": "输出不带标题/格式的原始列表(用于 shell 补全)", - "enable_web_search_tool": "为支持的模型启用网络搜索工具(Anthropic、OpenAI、Gemini)", - "set_location_web_search": "设置网络搜索结果的位置(例如,'America/Los_Angeles')", - "save_generated_image_to_file": "将生成的图像保存到指定文件路径(例如,'output.png')", - "image_dimensions_help": "图像尺寸:1024x1024、1536x1024、1024x1536、auto(默认:auto)", - "image_quality_help": "图像质量:low、medium、high、auto(默认:auto)", - "compression_level_jpeg_webp": "JPEG/WebP 格式的压缩级别 0-100(默认:未设置)", - "background_type_help": "背景类型:opaque、transparent(默认:opaque,仅适用于 PNG/WebP)", - "suppress_thinking_tags": "抑制包含在思考标签中的文本", - "start_tag_thinking_sections": "思考部分的开始标签", - "end_tag_thinking_sections": "思考部分的结束标签", - "disable_openai_responses_api": "禁用 OpenAI 响应 API(默认:false)", - "audio_video_file_transcribe": "要转录的音频或视频文件", - "model_for_transcription": "用于转录的模型(与聊天模型分离)", - "split_media_files_ffmpeg": "使用 ffmpeg 分割大于 25MB 的音频/视频文件", - "tts_voice_name": "支持模型的 TTS 语音名称(例如,Kore、Charon、Puck)", - "list_gemini_tts_voices": "列出所有可用的 Gemini TTS 语音", - "list_transcription_models": "列出所有可用的转录模型", - "send_desktop_notification": "命令完成时发送桌面通知", + "could_not_determine_home_dir": "无法确定用户主目录: %w", + "could_not_stat_env_file": "无法获取 .env 文件状态: %w", "custom_notification_command": "用于通知的自定义命令(覆盖内置通知)", - "set_reasoning_thinking_level": "设置推理/思考级别(例如,off、low、medium、high,或 Anthropic 或 Google Gemini 的数字令牌)", - "set_debug_level": "设置调试级别(0=关闭,1=基本,2=详细,3=跟踪)", - "usage_header": "用法:", - "application_options_header": "应用程序选项:", - "help_options_header": "帮助选项:", - "help_message": "显示此帮助消息", - "options_placeholder": "[选项]", - "available_vendors_header": "可用供应商:", - "available_models_header": "可用模型", - "no_items_found": "没有 %s", - "no_description_available": "没有可用描述", - "i18n_download_failed": "下载语言 '%s' 的翻译失败: %v", - "i18n_load_failed": "加载翻译文件失败: %v", - "setup_welcome_header": "🎉 欢迎使用 Fabric!让我们开始设置。", - "setup_step_downloading_patterns": "📥 步骤 1:正在下载模式(Fabric 运行所需)...", - "setup_step_downloading_strategies": "📥 步骤 2:正在下载策略(Fabric 运行所需)...", - "setup_step_configure_ai_provider": "🤖 步骤 3:配置 AI 提供商", - "setup_ai_provider_required": "Fabric 需要至少一个 AI 提供商才能运行。", - "setup_add_more_providers_later": "您可以稍后通过 'fabric --setup' 添加更多提供商", - "setup_step_setting_defaults": "⚙️ 步骤 4:正在设置默认提供商和模型...", - "setup_complete_header": "✅ 设置完成!您现在可以使用 Fabric 了。", - "setup_next_steps": "下一步:", - "setup_list_patterns": "• 列出可用模式:fabric -l", - "setup_try_pattern": "• 尝试一个模式:echo '您的文本' | fabric --pattern summarize", - "setup_configure_more": "• 配置更多设置:fabric --setup", - "setup_failed_download_patterns": "下载模式失败:%w", - "setup_failed_download_strategies": "下载策略失败:%w", - "setup_failed_set_defaults": "设置默认提供商和模型失败:%w", - "setup_no_ai_provider_selected": "未选择 AI 提供商 - 至少需要一个", - "setup_invalid_selection": "无效的选择:%s", - "setup_available_ai_providers": "可用的 AI 提供商:", - "setup_enter_ai_provider_number": "AI 提供商编号", - "setup_available_plugins": "可用的插件:", - "setup_plugin_number": "插件编号", - "setup_plugin_prompt": "请输入要设置的插件编号", - "setup_required_configuration_header": "━━━ 必需配置 ━━━\n\nAI 提供商 [至少需要一个]", - "setup_required_tools": "必需工具", - "setup_optional_configuration_header": "━━━ 可选配置 ━━━\n\n可选工具", - "setup_validation_header": "配置状态:", - "setup_validation_ai_provider_configured": "✓ AI 提供商已配置", - "setup_validation_ai_provider_missing": "✗ AI 提供商未配置 - Fabric 运行所需", - "setup_validation_defaults_configured": "✓ 默认提供商/模型已设置:%s/%s", - "setup_validation_defaults_missing": "✗ 默认提供商/模型未设置 - Fabric 运行所需", - "setup_validation_patterns_configured": "✓ 模式已下载", - "setup_validation_patterns_missing": "✗ 未找到模式 - Fabric 运行所需", - "setup_validation_strategies_configured": "✓ 策略已下载", - "setup_validation_strategies_missing": "✗ 未找到策略 - Fabric 运行所需", - "setup_validation_incomplete_warning": "⚠️ 设置不完整!缺少必需组件。", - "setup_validation_incomplete_help": "再次运行 'fabric --setup' 配置缺失项,\n或运行 'fabric -U' 下载模式和策略。", - "setup_validation_complete": "✓ 所有必需组件已配置!", - "patterns_not_found_header": "⚠️ 未找到模式!", - "patterns_required_to_work": "Fabric 需要模式才能运行。要解决此问题:", - "patterns_option_run_setup": "选项 1(推荐):运行设置以下载模式", - "patterns_option_run_setup_command": "fabric --setup", - "patterns_option_run_update": "选项 2:直接下载/更新模式", - "patterns_option_run_update_command": "fabric -U", - "pattern_not_found_no_patterns": "未找到模式 '%s'。\n\n未安装任何模式!要解决此问题:\n • 运行 'fabric --setup' 配置并下载模式\n • 或运行 'fabric -U' 直接下载/更新模式", - "pattern_not_found_list_available": "未找到模式 '%s'。运行 'fabric -l' 查看可用模式", - "plugin_configured": " ✓", - "plugin_not_configured": " ⚠️ 未配置", - "defaults_setup_description": "默认 AI 提供商和模型", - "defaults_model_question": "请输入您的默认模型的索引或名称", - "defaults_model_context_length_question": "请输入模型上下文长度", + "custom_patterns_directory_question": "请输入您的自定义模式目录路径", "custom_patterns_label": "自定义模式", "custom_patterns_setup_description": "自定义模式 - 设置您的自定义模式目录", - "custom_patterns_directory_question": "请输入您的自定义模式目录路径", + "defaults_model_context_length_question": "请输入模型上下文长度", + "defaults_model_question": "请输入您的默认模型的索引或名称", + "defaults_setup_description": "默认 AI 提供商和模型", + "disable_openai_responses_api": "禁用 OpenAI 响应 API(默认:false)", + "disable_pattern_variable_replacement": "禁用模式变量替换", + "enable_web_search_tool": "为支持的模型启用网络搜索工具(Anthropic、OpenAI、Gemini)", + "end_tag_thinking_sections": "思考部分的结束标签", + "error_creating_audio_file": "创建音频文件时出错: %v", + "error_creating_file": "创建文件时出错: %v", + "error_fetching_playlist_videos": "获取播放列表视频时出错: %w", + "error_parsing_config_file": "解析配置文件时出错: %w", + "error_reading_config_file": "读取配置文件时出错: %w", + "error_reading_piped_message": "从 stdin 读取管道消息时出错: %w", + "error_writing_audio_data": "写入音频数据到文件时出错: %v", + "error_writing_to_file": "写入文件时出错: %v", + "extension_cmd_template_required": "操作 %s 需要命令模板", + "extension_command_template_label": " 命令模板:%s\n", + "extension_config_hash_mismatch": "%s 的配置文件哈希不匹配", + "extension_config_path_label": " 配置路径:%s\n\n", + "extension_description_label": " 描述:%s\n", + "extension_empty_command": "格式化后命令为空", + "extension_executable_hash_mismatch": "%s 的可执行文件哈希不匹配", + "extension_executable_label": " 可执行文件:%s\n", + "extension_executable_not_found": "未找到可执行文件:%w", + "extension_executable_required": "可执行文件路径为必填项", + "extension_executing_command": "正在执行命令:%s\n", + "extension_execution_failed_err": "执行失败:%w\nerr:%s", + "extension_execution_failed_stderr": "执行失败:%w\nstderr:%s", + "extension_execution_timed_out": "执行在 %v 后超时", + "extension_failed_format_command": "格式化命令失败:%w", + "extension_failed_get_absolute_path": "获取绝对路径失败:%w", + "extension_failed_get_extension": "获取扩展失败:%w", + "extension_failed_get_output_path": "获取输出路径失败:%w\nerr:%s", + "extension_failed_hash_executable": "计算可执行文件哈希失败:%w", + "extension_failed_marshal_registry": "序列化扩展注册表失败:%w", + "extension_failed_parse_config": "解析配置文件失败:%w", + "extension_failed_parse_registry": "解析扩展注册表失败:%w", + "extension_failed_read_config": "读取配置文件失败:%w", + "extension_failed_read_output_file": "读取输出文件失败:%w", + "extension_failed_read_registry": "读取扩展注册表失败:%w", + "extension_failed_register": "注册扩展失败:%w", + "extension_failed_remove": "删除扩展失败:%w", + "extension_failed_verify_executable": "验证可执行文件失败:%w", + "extension_file_config_label": " 文件配置:\n", + "extension_invalid_config_path": "无效的配置路径:%w", + "extension_invalid_definition": "无效的扩展定义:%w", + "extension_invalid_timeout": "无效的超时值 '%s':必须是 '30s' 或 '1m' 等时间格式:%w", + "extension_invalid_timeout_format": "无效的超时格式:%w", + "extension_name_contains_spaces": "扩展名称 '%s' 包含空格 - 名称不能包含空格", + "extension_name_detail_label": "名称:%s\n", + "extension_name_empty": "扩展名称不能为空", + "extension_name_label": "扩展:%s\n", + "extension_name_required": "扩展名称为必填项", + "extension_no_file_config": "未找到文件配置", + "extension_no_output_file": "配置中未指定输出文件", + "extension_not_found": "未找到扩展 %s", + "extension_operation_not_found": "扩展 %s 中未找到操作 %s", + "extension_operation_required": "必须定义至少一个操作", + "extension_operations_label": " 操作:\n", + "extension_registered_success": "扩展注册成功:\n", + "extension_registry_not_initialized": "扩展注册表未初始化", + "extension_status_disabled": " 状态:已禁用 - 哈希验证失败:%v\n", + "extension_status_enabled": " 状态:已启用\n", + "extension_timeout_label": " 超时:%s\n", + "extension_type_label": " 类型:%s\n", + "extension_type_required": "扩展类型为必填项", + "extension_version_label": " 版本:%s\n", + "extension_warning_load_registry": "警告:无法加载扩展注册表:%v\n", + "fabric_command_complete": "Fabric 命令完成", + "fabric_command_complete_with_pattern": "Fabric: %s 完成", + "fetch_content_exceeds_limit": "fetch:内容过大:超过 %d 字节", + "fetch_content_not_utf8": "fetch:内容不是有效的 UTF-8 文本", + "fetch_content_null_bytes": "fetch:内容包含空字节", + "fetch_content_too_large": "fetch:内容过大:%d 字节(最大 %d 字节)", + "fetch_error_create_request": "fetch:创建请求时出错:%v", + "fetch_error_fetching_url": "fetch:获取 URL 时出错:%v", + "fetch_error_reading_response": "fetch:读取响应时出错:%v", + "fetch_http_error": "fetch:HTTP 错误:%d - %s", + "fetch_unknown_operation": "fetch:未知操作 %q(支持:get)", + "fetch_unsupported_content_type": "fetch:不支持的内容类型 %q - 仅允许文本内容", + "file_already_exists_choose_different": "文件 %s 已存在。请选择不同的文件名或删除现有文件", + "file_already_exists_not_overwriting": "文件 %s 已存在,不会覆盖。请重命名现有文件或选择其他名称", + "file_manager_applied_operation": "已将%s操作应用于%s", + "file_manager_empty_path": "文件更改%d的空路径", + "file_manager_failed_create_directory": "为文件更改%d创建目录%s失败:%w", + "file_manager_failed_parse_json": "解析%s JSON失败:%w", + "file_manager_failed_write_file": "为文件更改%d写入文件%s失败:%w", + "file_manager_file_content_too_large": "文件更改%d的文件内容太大:%d字节", + "file_manager_invalid_format_no_json_array": "无效的%s格式:未找到JSON数组", + "file_manager_invalid_format_unbalanced_brackets": "无效的%s格式:括号不平衡", + "file_manager_invalid_operation": "文件更改%d的无效操作:%s", + "file_manager_suspicious_path": "文件更改%d的可疑路径:%s", + "gemini_audio_data_too_small": "音频数据太小:%d 字节,最少需要:%d", + "gemini_empty_pcm_data": "提供了空的 PCM 数据", + "gemini_invalid_location_format": "无效的搜索位置格式 %q:必须是时区(例如 'America/Los_Angeles')或语言代码(例如 'en-US')", + "gemini_invalid_voice": "无效的语音 '%s'。有效的语音有:%v", + "gemini_no_audio_data": "未从 TTS 模型收到音频数据", + "gemini_no_text_for_tts": "未找到用于 TTS 生成的文本内容", + "gemini_pcm_data_too_large": "PCM 数据太大:%d 字节,最大允许:%d", + "gemini_stream_error": "错误:%v", + "gemini_tts_failed": "TTS 生成失败:%w", + "gemini_unexpected_data_type": "意外的数据类型:%s,预期为音频数据", + "gemini_wav_data_invalid": "生成的 WAV 数据无效:%d 字节,最少需要:%d", + "gemini_wav_generation_failed": "生成 WAV 文件失败:%w", + "grab_comments_from_youtube": "从 YouTube 视频获取评论并发送到聊天", + "grab_transcript_from_youtube": "从 YouTube 视频获取转录并发送到聊天(默认使用)。", + "grab_transcript_with_timestamps": "从 YouTube 视频获取带时间戳的转录并发送到聊天", + "groups_items_number_out_of_range": "编号 %d 超出范围", + "help_message": "显示此帮助消息", + "help_options_header": "帮助选项:", + "html_readability_error": "使用原始输入,因为无法应用 HTML 可读性处理", + "i18n_download_failed": "下载语言 '%s' 的翻译失败: %v", + "i18n_load_failed": "加载翻译文件失败: %v", + "image_compression_jpeg_webp_only": "图像压缩只能用于 JPEG 和 WebP 格式,不支持 %s", + "image_compression_range_error": "图像压缩必须在 0 到 100 之间,得到 %d", + "image_dimensions_help": "图像尺寸:1024x1024、1536x1024、1024x1536、auto(默认:auto)", + "image_file_already_exists": "图像文件已存在: %s", + "image_parameters_require_image_file": "图像参数(--image-size、--image-quality、--image-background、--image-compression)只能与 --image-file 一起使用", + "image_quality_help": "图像质量:low、medium、high、auto(默认:auto)", + "invalid_config_path": "无效的配置路径: %w", + "invalid_image_background": "无效的图像背景 '%s'。支持的背景:opaque、transparent", + "invalid_image_file_extension": "无效的图像文件扩展名 '%s'。支持的格式:.png、.jpeg、.jpg、.webp", + "invalid_image_quality": "无效的图像质量 '%s'。支持的质量:low、medium、high、auto", + "invalid_image_size": "无效的图像尺寸 '%s'。支持的尺寸:1024x1024、1536x1024、1024x1536、auto", + "jina_error_creating_request": "创建请求时出错: %v", + "jina_error_reading_response_body": "读取响应正文时出错: %v", + "jina_error_sending_request": "发送请求时出错: %v", "jina_label": "Jina AI", "jina_setup_description": "Jina AI 服务 - 将网页获取为干净、LLM 友好的文本", - "youtube_label": "YouTube", - "youtube_setup_description": "YouTube - 获取视频转录(通过 yt-dlp)和评论/元数据(通过 YouTube API)", "language_label": "语言", - "language_setup_description": "语言 - AI 提供商的默认输出语言", "language_output_question": "请输入您的默认输出语言(例如:zh_CN)", - "optional_marker": "(可选)", - "required_marker": "(必需)", - "patterns_loader_label": "模式加载器", - "patterns_setup_description": "模式 - 下载模式", - "patterns_git_repo_url_label": "Git 仓库 URL", - "patterns_git_repo_url_question": "请输入用于模式的默认 Git 仓库 URL", - "patterns_git_repo_folder_label": "Git 仓库中的模式文件夹", - "patterns_git_repo_folder_question": "请输入存储模式的 Git 仓库默认文件夹", - "patterns_failed_create_temp_folder": "创建模式临时文件夹失败:%w", - "patterns_downloading": "正在下载模式并填充 %s...\\n", - "patterns_failed_download_from_git": "从 Git 仓库下载模式失败:%w", - "patterns_saving_updated_configuration": "💾 正在保存更新的配置(路径从 '%s' 更改为 '%s')...\\n", - "patterns_failed_move_patterns": "将模式移动到配置目录失败:%w", - "patterns_download_success": "✅ 已成功下载并安装模式到 %s\\n", - "patterns_failed_unique_file": "创建唯一模式文件失败:%w", - "patterns_failed_access_directory": "访问模式目录 '%s' 失败:%w", - "patterns_preserve_warning": "警告:未能保留自定义模式 '%s':%v\\n", - "patterns_preserved_custom_pattern": "已保留自定义模式:%s\\n", - "patterns_failed_create_temp_dir": "创建临时目录失败:%w", - "patterns_cloning_repository": "正在克隆仓库 %s(路径:%s)...\\n", - "patterns_failed_download_from_repo": "从 %s 下载模式失败:%w", - "patterns_failed_read_temp_directory": "读取模式临时目录失败:%w", - "patterns_no_patterns_migration_failed": "在仓库路径 %s 未找到模式且迁移失败:%w", - "patterns_downloaded_temp": "已将 %d 个模式下载到临时目录\\n", - "patterns_detected_old_path": "🔄 检测到旧的模式路径“patterns”,尝试迁移到“data/patterns”...", - "patterns_warning_remove_test_folder": "警告:无法删除测试临时文件夹 '%s':%v\\n", - "patterns_found_new_path": "✅ 在新路径“%s”找到 %d 个模式,正在更新配置...\\n", - "patterns_failed_move_test_patterns": "将测试模式移动到临时文件夹失败:%w", - "patterns_unable_to_find_or_migrate": "在当前路径“%s”未找到模式,也无法迁移到新结构", - "patterns_failed_read_directory": "读取模式目录失败:%w", - "patterns_debug_included_custom_directory": "📂 还包含了自定义目录中的模式:%s\\n", - "patterns_warning_custom_directory": "警告:无法读取自定义模式目录 %s:%v\\n", - "patterns_no_patterns_found_in_directories": "在目录 %s 和 %s 中未找到模式", - "patterns_no_patterns_found_in_directory": "在目录 %s 中未找到模式", - "patterns_failed_write_unique_file": "写入唯一模式文件失败:%w", - "patterns_unique_file_created": "📝 已创建包含 %d 个模式的唯一模式文件\\n", - "patterns_no_patterns_copied": "未能成功将模式复制到 %s", - "patterns_failed_loaded_marker": "创建标记文件 '%s' 失败:%w", - "strategies_label": "提示策略", - "strategies_setup_description": "策略 - 下载提示策略(如 chain of thought)", - "strategies_git_repo_url_label": "Git 仓库 URL", - "strategies_git_repo_url_question": "请输入用于策略的默认 Git 仓库 URL", - "strategies_git_repo_folder_label": "Git 仓库中的策略文件夹", - "strategies_git_repo_folder_question": "请输入存储策略的 Git 仓库默认文件夹", - "strategies_downloading": "正在下载策略并填充 %s...\\n", - "strategies_download_success": "✅ 已成功下载并安装策略到 %s\\n", - "strategies_home_dir_error": "无法获取主目录:%v", - "strategies_failed_create_directory": "创建策略目录失败:%w", - "strategies_cloning_repository": "正在克隆仓库 %s(路径:%s)...\\n", - "strategies_failed_download": "下载策略失败:%w", - "strategies_downloaded_count": "已下载 %d 个策略\\n", - "strategies_home_dir_fallback": "无法获取主目录:%v,改用当前目录", - "strategy_not_found": "未找到策略 %s。运行 'fabric --liststrategies' 查看列表", - "strategies_none_found": "未找到任何策略。请运行 'fabric --setup' 下载策略", - "strategies_available_header": "可用的策略:", - "plugin_enter_value": "请输入您的 %v %v", - "plugin_enable_bool_question": "启用 %v %v(true/false)", - "plugin_setup_skipped": "[%v] 已跳过\\n", - "plugin_question_bool": "%v%v(true/false,留空表示使用 '%s',或输入 '%v' 清除值):", - "plugin_question_with_default": "%v%v(留空表示使用 '%s',或输入 '%v' 清除值):", - "plugin_question_optional": "%v%v(留空以跳过):", - "plugin_invalid_boolean_value": "无效的布尔值:%v", - "plugin_setting_not_valid": "%v=%v 无效", - "plugin_invalid_bool": "无效的 bool:%q", - "ollama_num_ctx_must_be_finite": "num_ctx 必须是有限数", - "ollama_num_ctx_must_be_integer": "num_ctx 必须是整数,收到带小数部分的浮点数", - "ollama_num_ctx_value_out_of_range": "num_ctx 值超出范围", - "ollama_num_ctx_must_be_positive": "num_ctx 必须为正数,收到:%d", - "ollama_num_ctx_value_too_large": "num_ctx 值过大:%d", - "ollama_num_ctx_must_be_valid_number": "num_ctx 必须是有效的数字", - "ollama_num_ctx_must_be_valid_number_got": "num_ctx 必须是有效的数字,收到:%s", - "ollama_num_ctx_invalid_type": "num_ctx 必须是数字,收到无效类型", - "ollama_num_ctx_exceeds_maximum": "num_ctx 超过允许的最大值 %d", - "ollama_error_reading_body": "读取正文时出错:%v", - "ollama_error_endpoint": "正在测试端点", - "ollama_error_unmarshalling_body": "解析正文时出错:%v", - "ollama_invalid_num_ctx_in_request": "请求中的 num_ctx 无效:%v", - "ollama_warning_parse_variables": "警告:无法将 options.variables 解析为 JSON:%v", - "ollama_error_marshalling_body": "序列化正文时出错:%v", + "language_setup_description": "语言 - AI 提供商的默认输出语言", + "list_all_available_models": "列出所有可用模型", + "list_all_contexts": "列出所有上下文", + "list_all_patterns": "列出所有模式", + "list_all_registered_extensions": "列出所有已注册的扩展", + "list_all_sessions": "列出所有会话", + "list_all_strategies": "列出所有策略", + "list_all_vendors": "列出所有供应商", + "list_gemini_tts_voices": "列出所有可用的 Gemini TTS 语音", + "list_transcription_models": "列出所有可用的转录模型", + "lmstudio_api_url_question": "请输入您的 %v URL(提醒一下,通常是 %v)", + "lmstudio_error_reading_response": "读取响应时出错:%w", + "lmstudio_failed_create_request": "创建请求失败:%w", + "lmstudio_failed_decode_response": "解码响应失败:%w", + "lmstudio_failed_marshal_payload": "序列化负载失败:%w", + "lmstudio_failed_send_request": "发送请求失败:%w", + "lmstudio_invalid_response_missing_choices": "无效的响应格式:选项缺失或为空", + "lmstudio_invalid_response_missing_content": "无效的响应格式:消息中的内容缺失或不是字符串", + "lmstudio_invalid_response_missing_message": "无效的响应格式:第一个选项中缺少消息", + "lmstudio_invalid_response_missing_text": "无效的响应格式:第一个选项中的文本缺失或不是字符串", + "lmstudio_no_embeddings_returned": "未返回嵌入向量", + "lmstudio_unexpected_status_code": "意外的状态码:%d", + "model_context_length_ollama": "模型上下文长度(仅影响 ollama)", + "model_for_transcription": "用于转录的模型(与聊天模型分离)", + "no_description_available": "没有可用描述", + "no_items_found": "没有 %s", + "no_notification_system_available": "没有可用的通知系统", + "number_of_latest_patterns": "要列出的最新模式数量", + "ollama_cannot_parse_url": "无法解析 URL '%s': %v", + "ollama_chat_request_failed": "聊天请求失败: %v", + "ollama_empty_address": "地址为空", "ollama_error_building_chat_url": "构建 /chat URL 时出错:%v", "ollama_error_creating_chat_request": "创建 /chat 请求时出错:%v", - "ollama_failed_create_request": "创建请求失败", + "ollama_error_endpoint": "正在测试端点", "ollama_error_getting_chat_body": "获取 /chat 正文时出错:%v", - "ollama_upstream_non_2xx_body_unreadable": "上游 Fabric 服务器返回非 2xx 状态 %d 且无法读取正文:%v", - "ollama_upstream_non_2xx": "上游 Fabric 服务器返回非 2xx 状态 %d:%s", - "ollama_upstream_returned_status": "上游 Fabric 服务器返回状态 %d", - "ollama_error_prefix": "错误:%s", + "ollama_error_marshalling_body": "序列化正文时出错:%v", "ollama_error_parse_upstream_response": "错误:无法解析上游响应", - "ollama_failed_unmarshal_fabric_response": "解析 Fabric 响应失败", - "ollama_error_writing_response": "写入响应时出错:%v", + "ollama_error_prefix": "错误:%s", + "ollama_error_reading_body": "读取正文时出错:%v", "ollama_error_scanning_body": "扫描正文时出错:%v", + "ollama_error_unmarshalling_body": "解析正文时出错:%v", + "ollama_error_writing_response": "写入响应时出错:%v", + "ollama_failed_create_request": "创建请求失败", + "ollama_failed_decode_data_url": "解码数据 URL 失败: %v", + "ollama_failed_fetch_image": "从 %s 获取图像失败: %s", "ollama_failed_scan_sse_stream": "扫描 SSE 响应流失败:%v", - "ollama_sse_buffer_limit": "SSE 行超过 1MB 缓冲区限制 - 数据行过大", - "ollama_warning_no_content": "警告:未从上游 Fabric 服务器收到内容", - "ollama_no_content_from_upstream": "未从上游 Fabric 服务器收到内容", - "ollama_empty_address": "地址为空", + "ollama_failed_unmarshal_fabric_response": "解析 Fabric 响应失败", + "ollama_http_timeout_question": "请输入HTTP超时时间(例如 20m, 60s)", "ollama_invalid_address": "无效地址:%w", "ollama_invalid_address_missing_host": "无效地址:缺少主机", "ollama_invalid_address_missing_hostname": "无效地址:缺少主机名", "ollama_invalid_address_path_not_allowed": "无效地址:简单地址中不允许路径组件", - "extension_registry_not_initialized": "扩展注册表未初始化", - "extension_name_label": "扩展:%s\n", - "extension_status_disabled": " 状态:已禁用 - 哈希验证失败:%v\n", - "extension_config_path_label": " 配置路径:%s\n\n", - "extension_status_enabled": " 状态:已启用\n", - "extension_executable_label": " 可执行文件:%s\n", - "extension_type_label": " 类型:%s\n", - "extension_timeout_label": " 超时:%s\n", - "extension_description_label": " 描述:%s\n", - "extension_version_label": " 版本:%s\n", - "extension_operations_label": " 操作:\n", - "extension_command_template_label": " 命令模板:%s\n", - "extension_file_config_label": " 文件配置:\n", - "extension_invalid_config_path": "无效的配置路径:%w", - "extension_failed_read_config": "读取配置文件失败:%w", - "extension_failed_parse_config": "解析配置文件失败:%w", - "extension_failed_register": "注册扩展失败:%w", - "extension_invalid_timeout": "无效的超时值 '%s':必须是 '30s' 或 '1m' 等时间格式:%w", - "extension_registered_success": "扩展注册成功:\n", - "extension_name_detail_label": "名称:%s\n", - "extension_failed_remove": "删除扩展失败:%w", - "lmstudio_api_url_question": "请输入您的 %v URL(提醒一下,通常是 %v)", - "lmstudio_failed_create_request": "创建请求失败:%w", - "lmstudio_failed_send_request": "发送请求失败:%w", - "lmstudio_unexpected_status_code": "意外的状态码:%d", - "lmstudio_failed_decode_response": "解码响应失败:%w", - "lmstudio_failed_marshal_payload": "序列化负载失败:%w", - "lmstudio_error_reading_response": "读取响应时出错:%w", - "lmstudio_invalid_response_missing_choices": "无效的响应格式:选项缺失或为空", - "lmstudio_invalid_response_missing_message": "无效的响应格式:第一个选项中缺少消息", - "lmstudio_invalid_response_missing_content": "无效的响应格式:消息中的内容缺失或不是字符串", - "lmstudio_invalid_response_missing_text": "无效的响应格式:第一个选项中的文本缺失或不是字符串", - "lmstudio_no_embeddings_returned": "未返回嵌入向量", - "extension_warning_load_registry": "警告:无法加载扩展注册表:%v\n", - "extension_name_empty": "扩展名称不能为空", - "extension_name_contains_spaces": "扩展名称 '%s' 包含空格 - 名称不能包含空格", - "extension_executable_not_found": "未找到可执行文件:%w", - "extension_failed_get_absolute_path": "获取绝对路径失败:%w", - "extension_failed_hash_executable": "计算可执行文件哈希失败:%w", - "extension_invalid_definition": "无效的扩展定义:%w", - "extension_name_required": "扩展名称为必填项", - "extension_executable_required": "可执行文件路径为必填项", - "extension_type_required": "扩展类型为必填项", - "extension_invalid_timeout_format": "无效的超时格式:%w", - "extension_operation_required": "必须定义至少一个操作", - "extension_cmd_template_required": "操作 %s 需要命令模板", - "extension_not_found": "未找到扩展 %s", - "extension_config_hash_mismatch": "%s 的配置文件哈希不匹配", - "extension_failed_verify_executable": "验证可执行文件失败:%w", - "extension_executable_hash_mismatch": "%s 的可执行文件哈希不匹配", - "extension_failed_marshal_registry": "序列化扩展注册表失败:%w", - "extension_failed_read_registry": "读取扩展注册表失败:%w", - "extension_failed_parse_registry": "解析扩展注册表失败:%w", - "extension_failed_get_extension": "获取扩展失败:%w", - "extension_failed_format_command": "格式化命令失败:%w", - "extension_empty_command": "格式化后命令为空", - "extension_operation_not_found": "扩展 %s 中未找到操作 %s", - "extension_executing_command": "正在执行命令:%s\n", - "extension_execution_failed_stderr": "执行失败:%w\nstderr:%s", - "extension_no_file_config": "未找到文件配置", - "extension_no_output_file": "配置中未指定输出文件", - "extension_execution_timed_out": "执行在 %v 后超时", - "extension_execution_failed_err": "执行失败:%w\nerr:%s", - "extension_failed_read_output_file": "读取输出文件失败:%w", - "extension_failed_get_output_path": "获取输出路径失败:%w\nerr:%s", - "spotify_failed_create_token_request": "创建令牌请求失败:%w", - "spotify_failed_request_access_token": "请求访问令牌失败:%w", - "spotify_failed_get_access_token": "获取访问令牌失败:状态 %d,响应:%s", - "spotify_failed_decode_token_response": "解码令牌响应失败:%w", - "spotify_failed_create_request": "创建请求失败:%w", - "spotify_failed_execute_request": "执行请求失败:%w", - "spotify_failed_read_response_body": "读取响应正文失败:%w", + "ollama_invalid_data_url_format": "无效的数据 URL 格式", + "ollama_invalid_http_timeout_using_default": "无效的HTTP超时时间 '%s': %v,使用默认值", + "ollama_invalid_num_ctx_in_request": "请求中的 num_ctx 无效:%v", + "ollama_no_content_from_upstream": "未从上游 Fabric 服务器收到内容", + "ollama_num_ctx_exceeds_maximum": "num_ctx 超过允许的最大值 %d", + "ollama_num_ctx_invalid_type": "num_ctx 必须是数字,收到无效类型", + "ollama_num_ctx_must_be_finite": "num_ctx 必须是有限数", + "ollama_num_ctx_must_be_integer": "num_ctx 必须是整数,收到带小数部分的浮点数", + "ollama_num_ctx_must_be_positive": "num_ctx 必须为正数,收到:%d", + "ollama_num_ctx_must_be_valid_number": "num_ctx 必须是有效的数字", + "ollama_num_ctx_must_be_valid_number_got": "num_ctx 必须是有效的数字,收到:%s", + "ollama_num_ctx_value_out_of_range": "num_ctx 值超出范围", + "ollama_num_ctx_value_too_large": "num_ctx 值过大:%d", + "ollama_sse_buffer_limit": "SSE 行超过 1MB 缓冲区限制 - 数据行过大", + "ollama_upstream_non_2xx": "上游 Fabric 服务器返回非 2xx 状态 %d:%s", + "ollama_upstream_non_2xx_body_unreadable": "上游 Fabric 服务器返回非 2xx 状态 %d 且无法读取正文:%v", + "ollama_upstream_returned_status": "上游 Fabric 服务器返回状态 %d", + "ollama_warning_no_content": "警告:未从上游 Fabric 服务器收到内容", + "ollama_warning_parse_variables": "警告:无法将 options.variables 解析为 JSON:%v", + "openai_api_base_url_not_configured": "未为提供商 %s 配置 API 基础 URL", + "openai_audio_ffmpeg_failed": "ffmpeg 失败: %v: %s", + "openai_audio_ffmpeg_not_found_install": "未找到 ffmpeg: 请安装", + "openai_audio_file_exceeds_limit_enable_split": "文件 %s 超过 25MB 限制;使用 --split-media-file 启用自动分割", + "openai_audio_file_exceeds_limit_splitting": "文件 %s 超过大小限制...正在分割...", + "openai_audio_model_not_supported_for_transcription": "模型 '%s' 不支持转录", + "openai_audio_running_ffmpeg_split_chunks": "正在运行 ffmpeg 将音频分割为 %d 秒的片段...", + "openai_audio_unable_to_split_acceptable_size_chunks": "无法将文件分割为可接受大小的片段", + "openai_audio_unsupported_audio_format": "不支持的音频格式 '%s'", + "openai_audio_using_model_to_transcribe_part": "使用模型 %s 转录第 %d 部分(文件名: %s)...", + "openai_failed_to_create_models_url": "创建模型 URL 失败:%w", + "openai_image_failed_to_create_directory": "创建目录 %s 失败: %w", + "openai_image_failed_to_decode_image_data": "解码图像数据失败: %w", + "openai_image_failed_to_save_image": "保存图像到 %s 失败: %w", + "openai_image_saved_to": "图像已保存到: %s", + "openai_model_no_image_generation": "模型 '%s' 不支持图像生成。支持的模型:%s", + "openai_models_response_too_large": "来自提供商 %s 的模型响应过大(>%d 字节)", + "openai_unable_to_parse_models_response": "无法解析模型响应;原始响应:%s", + "openai_unexpected_status_code_read_error": "意外的状态码:来自提供商 %s 的 %d(读取响应主体失败:%v)", + "openai_unexpected_status_code_with_body": "意外的状态码:来自提供商 %s 的 %d,响应主体:%s", + "openai_warning_model_no_image_generation": "警告:模型 '%s' 不支持图像生成。支持的模型:%s。请考虑使用 -m gpt-5.2 进行图像生成。\n", + "optional_marker": "(可选)", + "options_placeholder": "[选项]", + "output_entire_session": "将整个会话(包括临时会话)输出到输出文件", + "output_full": "输出: %s", + "output_raw_list_shell_completion": "输出不带标题/格式的原始列表(用于 shell 补全)", + "output_to_file": "输出到文件", + "output_truncated": "输出: %s...", + "output_video_metadata": "输出视频元数据", + "path_to_yaml_config": "YAML 配置文件路径", + "pattern_not_found_list_available": "未找到模式 '%s'。运行 'fabric -l' 查看可用模式", + "pattern_not_found_no_patterns": "未找到模式 '%s'。\n\n未安装任何模式!要解决此问题:\n • 运行 'fabric --setup' 配置并下载模式\n • 或运行 'fabric -U' 直接下载/更新模式", + "pattern_variables_help": "模式变量的值,例如 -v=#role:expert -v=#points:30", + "patterns_cloning_repository": "正在克隆仓库 %s(路径:%s)...\\n", + "patterns_debug_included_custom_directory": "📂 还包含了自定义目录中的模式:%s\\n", + "patterns_detected_old_path": "🔄 检测到旧的模式路径“patterns”,尝试迁移到“data/patterns”...", + "patterns_download_success": "✅ 已成功下载并安装模式到 %s\\n", + "patterns_downloaded_temp": "已将 %d 个模式下载到临时目录\\n", + "patterns_downloading": "正在下载模式并填充 %s...\\n", + "patterns_failed_access_directory": "访问模式目录 '%s' 失败:%w", + "patterns_failed_create_temp_dir": "创建临时目录失败:%w", + "patterns_failed_create_temp_folder": "创建模式临时文件夹失败:%w", + "patterns_failed_download_from_git": "从 Git 仓库下载模式失败:%w", + "patterns_failed_download_from_repo": "从 %s 下载模式失败:%w", + "patterns_failed_loaded_marker": "创建标记文件 '%s' 失败:%w", + "patterns_failed_move_patterns": "将模式移动到配置目录失败:%w", + "patterns_failed_move_test_patterns": "将测试模式移动到临时文件夹失败:%w", + "patterns_failed_read_directory": "读取模式目录失败:%w", + "patterns_failed_read_temp_directory": "读取模式临时目录失败:%w", + "patterns_failed_unique_file": "创建唯一模式文件失败:%w", + "patterns_failed_write_unique_file": "写入唯一模式文件失败:%w", + "patterns_found_new_path": "✅ 在新路径“%s”找到 %d 个模式,正在更新配置...\\n", + "patterns_git_repo_folder_question": "请输入存储模式的 Git 仓库默认文件夹", + "patterns_git_repo_url_question": "请输入用于模式的默认 Git 仓库 URL", + "patterns_loader_label": "模式加载器", + "patterns_no_patterns_copied": "未能成功将模式复制到 %s", + "patterns_no_patterns_found_in_directories": "在目录 %s 和 %s 中未找到模式", + "patterns_no_patterns_found_in_directory": "在目录 %s 中未找到模式", + "patterns_no_patterns_migration_failed": "在仓库路径 %s 未找到模式且迁移失败:%w", + "patterns_not_found_header": "⚠️ 未找到模式!", + "patterns_option_run_setup": "选项 1(推荐):运行设置以下载模式", + "patterns_option_run_setup_command": "fabric --setup", + "patterns_option_run_update": "选项 2:直接下载/更新模式", + "patterns_option_run_update_command": "fabric -U", + "patterns_preserve_warning": "警告:未能保留自定义模式 '%s':%v\\n", + "patterns_preserved_custom_pattern": "已保留自定义模式:%s\\n", + "patterns_required_to_work": "Fabric 需要模式才能运行。要解决此问题:", + "patterns_saving_updated_configuration": "💾 正在保存更新的配置(路径从 '%s' 更改为 '%s')...\\n", + "patterns_setup_description": "模式 - 下载模式", + "patterns_unable_to_find_or_migrate": "在当前路径“%s”未找到模式,也无法迁移到新结构", + "patterns_unique_file_created": "📝 已创建包含 %d 个模式的唯一模式文件\\n", + "patterns_warning_custom_directory": "警告:无法读取自定义模式目录 %s:%v\\n", + "patterns_warning_remove_test_folder": "警告:无法删除测试临时文件夹 '%s':%v\\n", + "perplexity_api_key_not_configured": "%s 的 API 密钥未配置。设置环境变量 %s 或运行 'fabric --setup' 配置 %s", + "perplexity_api_request_failed": "Perplexity API 请求失败: %w", + "perplexity_citations_header": "\n\n**引用:**\n", + "perplexity_failed_configure": "Perplexity 配置失败: %w", + "perplexity_streaming_error": "Perplexity 流式传输错误: %v", + "plugin_configured": " ✓", + "plugin_enable_bool_question": "启用 %v %v(true/false)", + "plugin_enter_value": "请输入您的 %v %v", + "plugin_invalid_bool": "无效的 bool:%q", + "plugin_invalid_boolean_value": "无效的布尔值:%v", + "plugin_not_configured": " ⚠️ 未配置", + "plugin_question_bool": "%v%v(true/false,留空表示使用 '%s',或输入 '%v' 清除值):", + "plugin_question_optional": "%v%v(留空以跳过):", + "plugin_question_with_default": "%v%v(留空表示使用 '%s',或输入 '%v' 清除值):", + "plugin_setting_not_valid": "%v=%v 无效", + "plugin_setup_configured": "[%v] 已配置", + "plugin_setup_skipped": "[%v] 已跳过\\n", + "prefer_playlist_over_video": "如果 URL 中同时存在两个 ID,则优先选择播放列表而不是视频", + "print_context": "打印上下文", + "print_current_version": "打印当前版本", + "print_session": "打印会话", + "register_new_extension": "从配置文件路径注册新扩展", + "remove_registered_extension": "按名称删除已注册的扩展", + "required_marker": "(必需)", + "run_setup_for_reconfigurable_parts": "为 fabric 的所有可重新配置部分运行设置", + "save_generated_image_to_file": "将生成的图像保存到指定文件路径(例如,'output.png')", + "scrape_website_url": "使用 Jina AI 将网站 URL 抓取为 markdown", + "scraping_not_configured": "抓取功能未配置。请设置 Jina 以启用抓取功能", + "search_question_jina": "使用 Jina AI 搜索问题", + "seed_for_lmm_generation": "用于 LMM 生成的种子", + "send_desktop_notification": "命令完成时发送桌面通知", + "serve_fabric_api_ollama_endpoints": "提供带有 ollama 端点的 Fabric REST API 服务", + "serve_fabric_rest_api": "提供 Fabric REST API 服务", + "set_debug_level": "设置调试级别(0=关闭,1=基本,2=详细,3=跟踪)", + "set_frequency_penalty": "设置频率惩罚", + "set_location_web_search": "设置网络搜索结果的位置(例如,'America/Los_Angeles')", + "set_presence_penalty": "设置存在惩罚", + "set_reasoning_thinking_level": "设置推理/思考级别(例如,off、low、medium、high,或 Anthropic 或 Google Gemini 的数字令牌)", + "set_temperature": "设置温度", + "set_top_p": "设置 top P", + "setup_add_more_providers_later": "您可以稍后通过 'fabric --setup' 添加更多提供商", + "setup_ai_provider_required": "Fabric 需要至少一个 AI 提供商才能运行。", + "setup_available_ai_providers": "可用的 AI 提供商:", + "setup_available_plugins": "可用的插件:", + "setup_complete_header": "✅ 设置完成!您现在可以使用 Fabric 了。", + "setup_configure_more": "• 配置更多设置:fabric --setup", + "setup_enter_ai_provider_number": "AI 提供商编号", + "setup_failed_download_patterns": "下载模式失败:%w", + "setup_failed_download_strategies": "下载策略失败:%w", + "setup_failed_set_defaults": "设置默认提供商和模型失败:%w", + "setup_invalid_selection": "无效的选择:%s", + "setup_list_patterns": "• 列出可用模式:fabric -l", + "setup_next_steps": "下一步:", + "setup_no_ai_provider_selected": "未选择 AI 提供商 - 至少需要一个", + "setup_optional_configuration_header": "━━━ 可选配置 ━━━\n\n可选工具", + "setup_plugin_number": "插件编号", + "setup_plugin_prompt": "请输入要设置的插件编号", + "setup_required_configuration_header": "━━━ 必需配置 ━━━\n\nAI 提供商 [至少需要一个]", + "setup_required_tools": "必需工具", + "setup_step_configure_ai_provider": "🤖 步骤 3:配置 AI 提供商", + "setup_step_downloading_patterns": "📥 步骤 1:正在下载模式(Fabric 运行所需)...", + "setup_step_downloading_strategies": "📥 步骤 2:正在下载策略(Fabric 运行所需)...", + "setup_step_setting_defaults": "⚙️ 步骤 4:正在设置默认提供商和模型...", + "setup_try_pattern": "• 尝试一个模式:echo '您的文本' | fabric --pattern summarize", + "setup_validation_ai_provider_configured": "✓ AI 提供商已配置", + "setup_validation_ai_provider_missing": "✗ AI 提供商未配置 - Fabric 运行所需", + "setup_validation_complete": "✓ 所有必需组件已配置!", + "setup_validation_defaults_configured": "✓ 默认提供商/模型已设置:%s/%s", + "setup_validation_defaults_missing": "✗ 默认提供商/模型未设置 - Fabric 运行所需", + "setup_validation_header": "配置状态:", + "setup_validation_incomplete_help": "再次运行 'fabric --setup' 配置缺失项,\n或运行 'fabric -U' 下载模式和策略。", + "setup_validation_incomplete_warning": "⚠️ 设置不完整!缺少必需组件。", + "setup_validation_patterns_configured": "✓ 模式已下载", + "setup_validation_patterns_missing": "✗ 未找到模式 - Fabric 运行所需", + "setup_validation_strategies_configured": "✓ 策略已下载", + "setup_validation_strategies_missing": "✗ 未找到策略 - Fabric 运行所需", + "setup_welcome_header": "🎉 欢迎使用 Fabric!让我们开始设置。", + "show_dry_run": "显示将发送给模型的内容而不实际发送", + "specify_language_code": "指定聊天的语言代码,例如 -g=en -g=zh -g=pt-BR -g=pt-PT", + "specify_vendor_for_model": "为所选模型指定供应商(例如,-V \"LM Studio\" -m openai/gpt-oss-20b)", + "split_media_files_ffmpeg": "使用 ffmpeg 分割大于 25MB 的音频/视频文件", "spotify_api_request_failed": "API 请求失败:状态 %d,响应:%s", - "spotify_failed_parse_show_metadata": "解析节目元数据失败:%w", - "spotify_failed_parse_episode_metadata": "解析剧集元数据失败:%w", - "spotify_search_failed": "搜索失败:%w", - "spotify_failed_parse_search_results": "解析搜索结果失败:%w", + "spotify_audio_preview_label": "**音频预览**: %s", + "spotify_client_id_question": "请输入您的 Spotify CLIENT ID", + "spotify_client_secret_question": "请输入您的 Spotify CLIENT SECRET", + "spotify_description_header": "## 描述", + "spotify_duration_label": "**时长**: %d 分钟", + "spotify_episode_header": "# Spotify 剧集", + "spotify_error_getting_metadata": "获取 Spotify 元数据时出错:%v", + "spotify_explicit_label": "**露骨内容**: %v", + "spotify_failed_create_request": "创建请求失败:%w", + "spotify_failed_create_token_request": "创建令牌请求失败:%w", + "spotify_failed_decode_token_response": "解码令牌响应失败:%w", + "spotify_failed_execute_request": "执行请求失败:%w", + "spotify_failed_get_access_token": "获取访问令牌失败:状态 %d,响应:%s", "spotify_failed_get_show_episodes": "获取节目剧集失败:%w", + "spotify_failed_parse_episode_metadata": "解析剧集元数据失败:%w", "spotify_failed_parse_episodes": "解析剧集失败:%w", - "template_file_log_validating_path": "文件:正在验证路径 %q", - "template_file_error_path_contains_parent_ref": "file: 路径不能包含 '..'", + "spotify_failed_parse_search_results": "解析搜索结果失败:%w", + "spotify_failed_parse_show_metadata": "解析节目元数据失败:%w", + "spotify_failed_read_response_body": "读取响应正文失败:%w", + "spotify_failed_request_access_token": "请求访问令牌失败:%w", + "spotify_invalid_url": "无效的 Spotify URL,无法获取节目或剧集 ID:'%s'", + "spotify_label": "Spotify", + "spotify_language_field_label": "**语言**: %s", + "spotify_languages_label": "**语言**: %s", + "spotify_media_type_label": "**媒体类型**: %s", + "spotify_no_episode_found": "未找到 ID 为 %s 的剧集", + "spotify_no_show_found": "未找到 ID 为 %s 的节目", + "spotify_not_configured": "Spotify 未配置,请运行设置程序", + "spotify_publisher_label": "**出版商**: %s", + "spotify_release_date_label": "**发布日期**: %s", + "spotify_search_description_label": "- **描述**: %s", + "spotify_search_episodes_label": "- **剧集数**: %d", + "spotify_search_failed": "搜索失败:%w", + "spotify_search_publisher_label": "- **出版商**: %s", + "spotify_search_results_header": "# Spotify 搜索结果", + "spotify_search_url_label": "- **URL**: %s", + "spotify_setup_description": "Spotify - 从 Spotify 获取播客/节目元数据", + "spotify_show_header": "# Spotify 播客/节目", + "spotify_show_name_label": "**节目**: %s", + "spotify_title_label": "**标题**: %s", + "spotify_total_episodes_label": "**总剧集数**: %d", + "spotify_url_label": "**URL**: %s", + "start_tag_thinking_sections": "思考部分的开始标签", + "strategies_available_header": "可用的策略:", + "strategies_cloning_repository": "正在克隆仓库 %s(路径:%s)...\\n", + "strategies_download_success": "✅ 已成功下载并安装策略到 %s\\n", + "strategies_downloaded_count": "已下载 %d 个策略\\n", + "strategies_downloading": "正在下载策略并填充 %s...\\n", + "strategies_failed_create_directory": "创建策略目录失败:%w", + "strategies_failed_download": "下载策略失败:%w", + "strategies_git_repo_folder_question": "请输入存储策略的 Git 仓库默认文件夹", + "strategies_git_repo_url_question": "请输入用于策略的默认 Git 仓库 URL", + "strategies_home_dir_error": "无法获取主目录:%v", + "strategies_home_dir_fallback": "无法获取主目录:%v,改用当前目录", + "strategies_label": "提示策略", + "strategies_none_found": "未找到任何策略。请运行 'fabric --setup' 下载策略", + "strategies_setup_description": "策略 - 下载提示策略(如 chain of thought)", + "strategy_not_found": "未找到策略 %s。运行 'fabric --liststrategies' 查看列表", + "stream_help": "流式传输", + "suppress_thinking_tags": "抑制包含在思考标签中的文本", + "template_datetime_error_invalid_number": "invalid number in relative time: %q", + "template_datetime_error_invalid_relative_format": "invalid relative time format", + "template_datetime_error_invalid_unit": "invalid time unit: %q", + "template_datetime_error_relative_requires_value": "relative time requires a value", + "template_datetime_error_unknown_operation": "datetime: unknown operation %q", "template_file_error_expand_home_dir": "file: 无法展开主目录: %v", - "template_file_log_cleaned_path": "文件:清理后的路径 %q", - "template_file_log_operation_value": "文件:operation=%q value=%q", - "template_file_error_tail_requires_path_lines": "file: tail 需要 path|lines 格式", "template_file_error_invalid_line_count": "file: 无效的行数 %q", "template_file_error_line_count_positive": "file: 行数必须为正数", - "template_file_log_tail_returning_lines": "文件:tail 返回 %d 行", - "template_file_error_stat_file": "file: 无法获取文件状态: %v", - "template_file_error_size_exceeds_limit": "file: 大小 %d 超过 %d 字节限制", - "template_file_error_read_file": "file: 无法读取: %v", - "template_file_log_read_bytes": "文件:已读取 %d 字节", - "template_file_log_exists_for_path": "文件:路径 %q 的 exists=%v", - "template_file_log_size_for_path": "文件:路径 %q 的 size=%d", - "template_file_log_modified_for_path": "文件:路径 %q 的 modified=%q", - "template_file_error_unknown_operation": "file: 未知操作 %q(支持: read, tail, exists, size, modified)", - "template_file_log_reading_last_lines": "文件:正在从 %q 读取最后 %d 行", "template_file_error_open_file": "file: 无法打开: %v", - "template_file_error_stat_open_file": "file: 无法获取状态: %v", + "template_file_error_path_contains_parent_ref": "file: 路径不能包含 '..'", + "template_file_error_read_file": "file: 无法读取: %v", "template_file_error_scanner_read": "file: 读取时出错: %v", + "template_file_error_size_exceeds_limit": "file: 大小 %d 超过 %d 字节限制", + "template_file_error_stat_file": "file: 无法获取文件状态: %v", + "template_file_error_stat_open_file": "file: 无法获取状态: %v", + "template_file_error_tail_requires_path_lines": "file: tail 需要 path|lines 格式", + "template_file_error_unknown_operation": "file: 未知操作 %q(支持: read, tail, exists, size, modified)", + "template_file_log_cleaned_path": "文件:清理后的路径 %q", + "template_file_log_exists_for_path": "文件:路径 %q 的 exists=%v", + "template_file_log_modified_for_path": "文件:路径 %q 的 modified=%q", + "template_file_log_operation_value": "文件:operation=%q value=%q", + "template_file_log_read_bytes": "文件:已读取 %d 字节", "template_file_log_read_total_return_last": "文件:共读取 %d 行,返回最后 %d 行", - "chatter_error_no_session_pattern_user_messages": "未提供会话、模式或用户消息", - "chatter_error_no_messages_provided": "未提供消息", - "chatter_log_stream_usage_metadata": "[元数据] 输入: %d | 输出: %d | 总计: %d", - "chatter_error_stream_update": "错误:%s", - "chatter_error_empty_response": "空响应", - "chatter_warning_parse_file_changes_failed": "警告:解析文件更改失败:%v", - "chatter_warning_get_current_directory_failed": "警告:获取当前目录失败:%v", - "chatter_warning_apply_file_changes_failed": "警告:应用文件更改失败:%v", - "chatter_info_file_changes_applied_successfully": "文件更改已成功应用。", - "chatter_help_review_changes_with_git_diff": "如果你正在使用 git,可以用 'git diff' 查看这些更改。", - "chatter_error_find_session": "找不到会话 %s:%v", - "chatter_error_find_context": "找不到上下文 %s:%v", - "chatter_error_get_pattern": "无法获取模式 %s:%v", - "chatter_error_load_strategy": "无法加载策略 %s:%v", - "chatter_prompt_enforce_response_language": "%s\n\n重要:首先,请使用用户输入执行此提示中提供的指令。其次,请确保你的整个最终回复(包括执行指令时生成的任何章节标题或标题)仅使用 %s 语言撰写。", - "vertexai_failed_google_credentials": "获取 Google 凭据失败(请确保 ADC 已配置):%w", - "vertexai_no_models_found": "未从任何发布者找到模型", - "vertexai_no_conversational_models": "未找到对话模型", + "template_file_log_reading_last_lines": "文件:正在从 %q 读取最后 %d 行", + "template_file_log_size_for_path": "文件:路径 %q 的 size=%d", + "template_file_log_tail_returning_lines": "文件:tail 返回 %d 行", + "template_file_log_validating_path": "文件:正在验证路径 %q", + "template_sys_error_env_requires_var": "env: variable name required", + "template_sys_error_home": "failed to get home directory: %v", + "template_sys_error_hostname": "failed to get hostname: %v", + "template_sys_error_pwd": "failed to get working directory: %v", + "template_sys_error_unknown_operation": "sys: unknown operation %q", + "template_sys_error_user": "failed to get current user: %v", + "transcription_model_required": "需要转录模型(使用 --transcribe-model)", + "transparent_background_png_webp_only": "透明背景只能用于 PNG 和 WebP 格式,不支持 %s", + "tts_audio_generated_successfully": "TTS 音频生成成功并保存到: %s\n", + "tts_model_requires_audio_output": "TTS 模型 '%s' 需要音频输出。请使用 -o 标志指定音频输出文件(例如,-o output.wav)", + "tts_voice_name": "支持模型的 TTS 语音名称(例如,Kore、Charon、Puck)", + "unsupported_conversion": "不支持从 %v 到 %v 的转换", + "update_patterns": "更新模式", + "usage_header": "用法:", + "use_model_defaults_raw_help": "在不发送聊天选项(temperature、top_p 等)的情况下使用模型默认值。仅影响兼容 OpenAI 的提供商。Anthropic 模型始终使用智能参数选择以满足特定模型的要求。", + "vendor_no_transcription_support": "供应商 %s 不支持音频转录", + "vendor_not_configured": "供应商 %s 未配置", + "vendor_not_found": "未找到供应商 %s", + "vendors_no_ai_vendors_configured_read_models": "没有配置 AI 供应商来读取模型", "vertexai_client_not_initialized": "VertexAI 客户端未初始化", - "vertexai_no_valid_messages": "没有有效的消息可发送", - "vertexai_no_content_in_response": "响应中没有内容", - "vertexai_failed_gemini_client": "创建 Gemini 客户端失败:%w", - "vertexai_stream_error": "错误:%v", - "gemini_invalid_location_format": "无效的搜索位置格式 %q:必须是时区(例如 'America/Los_Angeles')或语言代码(例如 'en-US')", - "gemini_stream_error": "错误:%v", - "gemini_no_text_for_tts": "未找到用于 TTS 生成的文本内容", - "gemini_invalid_voice": "无效的语音 '%s'。有效的语音有:%v", - "gemini_tts_failed": "TTS 生成失败:%w", - "gemini_unexpected_data_type": "意外的数据类型:%s,预期为音频数据", - "gemini_audio_data_too_small": "音频数据太小:%d 字节,最少需要:%d", - "gemini_wav_generation_failed": "生成 WAV 文件失败:%w", - "gemini_wav_data_invalid": "生成的 WAV 数据无效:%d 字节,最少需要:%d", - "gemini_no_audio_data": "未从 TTS 模型收到音频数据", - "gemini_empty_pcm_data": "提供了空的 PCM 数据", - "gemini_pcm_data_too_large": "PCM 数据太大:%d 字节,最大允许:%d", - "bedrock_unable_load_aws_config": "无法加载 AWS 配置:%w", - "bedrock_aws_region_label": "AWS 区域", - "bedrock_invalid_aws_region": "无效的 AWS 区域:%s", - "bedrock_unable_load_aws_config_with_region": "无法加载区域 %s 的 AWS 配置:%w", - "bedrock_failed_list_foundation_models": "无法列出基础模型:%w", - "bedrock_failed_list_inference_profiles": "无法列出推理配置文件:%w", - "bedrock_panic_sendstream": "SendStream 中出现恐慌:%v", - "bedrock_conversestream_failed": "模型 %s 的 bedrock conversestream 失败:%w", - "bedrock_unknown_stream_event_type": "未知的流事件类型:%T", - "bedrock_converse_failed": "模型 %s 的 bedrock converse 失败:%w", - "bedrock_unexpected_response_type": "意外的响应类型:%T", - "bedrock_empty_response_content": "空响应内容", - "bedrock_unexpected_content_block_type": "意外的内容块类型:%T", - "fetch_unknown_operation": "fetch:未知操作 %q(支持:get)", - "fetch_content_not_utf8": "fetch:内容不是有效的 UTF-8 文本", - "fetch_content_null_bytes": "fetch:内容包含空字节", - "fetch_error_create_request": "fetch:创建请求时出错:%v", - "fetch_error_fetching_url": "fetch:获取 URL 时出错:%v", - "fetch_http_error": "fetch:HTTP 错误:%d - %s", - "fetch_content_too_large": "fetch:内容过大:%d 字节(最大 %d 字节)", - "fetch_unsupported_content_type": "fetch:不支持的内容类型 %q - 仅允许文本内容", - "fetch_error_reading_response": "fetch:读取响应时出错:%v", - "fetch_content_exceeds_limit": "fetch:内容过大:超过 %d 字节", - "file_manager_invalid_format_no_json_array": "无效的%s格式:未找到JSON数组", - "file_manager_invalid_format_unbalanced_brackets": "无效的%s格式:括号不平衡", - "file_manager_failed_parse_json": "解析%s JSON失败:%w", - "file_manager_invalid_operation": "文件更改%d的无效操作:%s", - "file_manager_empty_path": "文件更改%d的空路径", - "file_manager_suspicious_path": "文件更改%d的可疑路径:%s", - "file_manager_file_content_too_large": "文件更改%d的文件内容太大:%d字节", - "file_manager_failed_create_directory": "为文件更改%d创建目录%s失败:%w", - "file_manager_failed_write_file": "为文件更改%d写入文件%s失败:%w", - "file_manager_applied_operation": "已将%s操作应用于%s", - "vertexai_error_create_request": "创建请求失败: %w", - "vertexai_error_request_failed": "请求失败: %w", "vertexai_error_api_status": "API返回状态%d: %s", - "vertexai_error_read_response": "读取响应失败: %w", - "vertexai_error_response_too_large": "响应太大 (>%d字节)", + "vertexai_error_create_request": "创建请求失败: %w", "vertexai_error_parse_response": "解析响应失败: %w", - "copilot_tenant_client_id_required": "需要租户ID和客户端ID", - "copilot_failed_create_conversation": "创建对话失败: %w", - "copilot_failed_send_message": "发送消息失败: %w", - "copilot_failed_stream_message": "流式传输消息失败: %w", - "copilot_error_create_conversation": "创建对话失败: %s - %s", - "copilot_error_chat_request": "聊天请求失败: %s - %s", - "copilot_error_stream_request": "流请求失败: %s - %s", - "copilot_debug_created_conversation": "已创建 Copilot 对话: %s", - "copilot_debug_failed_parse_sse_event": "解析 SSE 事件失败: %v", - "copilot_error_reading_stream": "读取流时出错: %w" + "vertexai_error_read_response": "读取响应失败: %w", + "vertexai_error_request_failed": "请求失败: %w", + "vertexai_error_response_too_large": "响应太大 (>%d字节)", + "vertexai_failed_gemini_client": "创建 Gemini 客户端失败:%w", + "vertexai_failed_google_credentials": "获取 Google 凭据失败(请确保 ADC 已配置):%w", + "vertexai_no_content_in_response": "响应中没有内容", + "vertexai_no_conversational_models": "未找到对话模型", + "vertexai_no_models_found": "未从任何发布者找到模型", + "vertexai_no_valid_messages": "没有有效的消息可发送", + "vertexai_stream_error": "错误:%v", + "wipe_context": "清除上下文", + "wipe_session": "清除会话", + "youtube_api_key_required": "YouTube API 密钥用于评论和元数据。运行 'fabric --setup' 进行配置", + "youtube_auth_required_bot_detection": "YouTube 需要身份验证(机器人检测)。使用 --yt-dlp-args='--cookies-from-browser BROWSER',其中 BROWSER 可以是 chrome、firefox、brave 等。", + "youtube_empty_seconds_string": "秒数字符串为空", + "youtube_error_getting_comments": "获取评论时出错:%v", + "youtube_error_getting_metadata": "获取视频元数据时出错:%v", + "youtube_error_getting_video_details": "获取视频详情时出错:%v", + "youtube_error_parsing_duration": "解析视频时长时出错:%v", + "youtube_error_saving_csv": "将视频保存为 CSV 时出错:%v", + "youtube_failed_create_temp_dir": "创建临时目录失败:%v", + "youtube_failed_fetch_comments": "获取评论失败: %v", + "youtube_failed_walk_directory": "遍历目录失败:%v", + "youtube_invalid_duration_string": "无效的时长字符串:%s", + "youtube_invalid_seconds_format": "无效的秒数格式 %q:%w", + "youtube_invalid_timestamp_format": "无效的时间戳格式:%s", + "youtube_invalid_url": "无效的 YouTube URL,无法获取视频或播放列表 ID:'%s'", + "youtube_invalid_ytdlp_arguments": "无效的 yt-dlp 参数:%v", + "youtube_label": "YouTube", + "youtube_no_transcript_content": "在 VTT 文件中未找到转录内容", + "youtube_no_url_provided": "未提供 YouTube URL", + "youtube_no_video_found_with_id": "未找到 ID 为 %s 的视频", + "youtube_no_video_id_found": "在 URL 中未找到视频 ID", + "youtube_no_vtt_files_found": "在目录中未找到 VTT 文件", + "youtube_not_configured": "YouTube 未配置,请运行设置程序", + "youtube_playlist_header": "播放列表: %s", + "youtube_playlist_saved_to": "播放列表已保存到 %s", + "youtube_rate_limit_exceeded": "超过 YouTube 速率限制。请稍后重试,或使用不同的 yt-dlp 参数(如 '--sleep-requests 1')来减慢请求速度。", + "youtube_setup_description": "YouTube - 获取视频转录(通过 yt-dlp)和评论/元数据(通过 YouTube API)", + "youtube_url_help": "YouTube 视频或播放列表 \"URL\",用于获取转录、评论并发送到聊天或打印到控制台并存储到输出文件", + "youtube_url_is_playlist_not_video": "URL 是播放列表,而不是视频", + "youtube_video_id_title_header": "视频ID: 标题", + "youtube_ytdlp_not_found": "在 PATH 中未找到 yt-dlp。请安装 yt-dlp 以使用 YouTube 转录功能", + "youtube_ytdlp_stderr_error": "读取 yt-dlp stderr 时出错" } diff --git a/internal/plugins/ai/anthropic/anthropic.go b/internal/plugins/ai/anthropic/anthropic.go index 5615dfd5..a1e1cd2c 100644 --- a/internal/plugins/ai/anthropic/anthropic.go +++ b/internal/plugins/ai/anthropic/anthropic.go @@ -13,6 +13,7 @@ import ( "github.com/anthropics/anthropic-sdk-go/option" "github.com/danielmiessler/fabric/internal/chat" "github.com/danielmiessler/fabric/internal/domain" + "github.com/danielmiessler/fabric/internal/i18n" debuglog "github.com/danielmiessler/fabric/internal/log" "github.com/danielmiessler/fabric/internal/plugins" ) @@ -194,7 +195,7 @@ func (an *Client) SendStream( } if stream.Err() != nil { - fmt.Fprintf(os.Stderr, "Messages stream error: %v\n", stream.Err()) + fmt.Fprintf(os.Stderr, i18n.T("anthropic_stream_error"), stream.Err()) } close(channel) return diff --git a/internal/plugins/ai/azure/azure.go b/internal/plugins/ai/azure/azure.go index 42dd6440..28b13a3a 100644 --- a/internal/plugins/ai/azure/azure.go +++ b/internal/plugins/ai/azure/azure.go @@ -9,6 +9,7 @@ import ( "net/url" "strings" + "github.com/danielmiessler/fabric/internal/i18n" "github.com/danielmiessler/fabric/internal/plugins" "github.com/danielmiessler/fabric/internal/plugins/ai/openai" openaiapi "github.com/openai/openai-go" @@ -20,9 +21,9 @@ func NewClient() (ret *Client) { ret = &Client{} ret.Client = openai.NewClientCompatible("Azure", "", ret.configure) ret.ApiDeployments = ret.AddSetupQuestionCustom("deployments", true, - "Enter your Azure deployments (comma separated)") + i18n.T("azure_deployments_question")) ret.ApiVersion = ret.AddSetupQuestionCustom("API Version", false, - "Enter the Azure API version (optional)") + i18n.T("azure_api_version_question")) return } @@ -42,12 +43,12 @@ func (oi *Client) configure() error { apiKey := strings.TrimSpace(oi.ApiKey.Value) if apiKey == "" { - return fmt.Errorf("Azure API key is required") + return fmt.Errorf("%s", i18n.T("azure_api_key_required")) } baseURL := strings.TrimSpace(oi.ApiBaseURL.Value) if baseURL == "" { - return fmt.Errorf("Azure API base URL is required") + return fmt.Errorf("%s", i18n.T("azure_base_url_required")) } apiVersion := strings.TrimSpace(oi.ApiVersion.Value) @@ -101,7 +102,7 @@ func azureDeploymentMiddleware(req *http.Request, next option.MiddlewareNext) (* // Extract model/deployment name from request body deploymentName, err := extractDeploymentFromBody(req) if err != nil { - return nil, fmt.Errorf("failed to extract deployment name: %w", err) + return nil, fmt.Errorf("%s: %w", i18n.T("azure_failed_extract_deployment"), err) } // Transform path: /chat/completions -> /deployments/{name}/chat/completions @@ -117,7 +118,7 @@ func azureDeploymentMiddleware(req *http.Request, next option.MiddlewareNext) (* // and restores the body for subsequent use func extractDeploymentFromBody(req *http.Request) (string, error) { if req.Body == nil { - return "", fmt.Errorf("request body is nil") + return "", fmt.Errorf("%s", i18n.T("azure_request_body_nil")) } bodyBytes, err := io.ReadAll(req.Body) @@ -135,7 +136,7 @@ func extractDeploymentFromBody(req *http.Request) (string, error) { } if payload.Model == "" { - return "", fmt.Errorf("model field is empty or missing in request body") + return "", fmt.Errorf("%s", i18n.T("azure_model_field_empty")) } return payload.Model, nil diff --git a/internal/plugins/ai/ollama/ollama.go b/internal/plugins/ai/ollama/ollama.go index ea7d797c..631ee64a 100644 --- a/internal/plugins/ai/ollama/ollama.go +++ b/internal/plugins/ai/ollama/ollama.go @@ -13,6 +13,7 @@ import ( "github.com/danielmiessler/fabric/internal/chat" "github.com/danielmiessler/fabric/internal/domain" + "github.com/danielmiessler/fabric/internal/i18n" debuglog "github.com/danielmiessler/fabric/internal/log" "github.com/danielmiessler/fabric/internal/plugins" ollamaapi "github.com/ollama/ollama/api" @@ -27,12 +28,12 @@ func NewClient() (ret *Client) { ret.PluginBase = plugins.NewVendorPluginBase(vendorName, ret.configure) ret.ApiUrl = ret.AddSetupQuestionCustom("API URL", true, - "Enter your Ollama URL (as a reminder, it is usually http://localhost:11434')") + fmt.Sprintf(i18n.T("lmstudio_api_url_question"), vendorName, defaultBaseUrl)) ret.ApiUrl.Value = defaultBaseUrl ret.ApiKey = ret.PluginBase.AddSetupQuestion("API key", false) ret.ApiKey.Value = "" ret.ApiHttpTimeout = ret.AddSetupQuestionCustom("HTTP Timeout", true, - "Specify HTTP timeout duration for Ollama requests (e.g. 30s, 5m, 1h)") + i18n.T("ollama_http_timeout_question")) ret.ApiHttpTimeout.Value = "20m" return @@ -67,7 +68,7 @@ func (o *Client) IsConfigured() bool { func (o *Client) configure() (err error) { if o.apiUrl, err = url.Parse(o.ApiUrl.Value); err != nil { - fmt.Printf("cannot parse URL: %s: %v\n", o.ApiUrl.Value, err) + fmt.Printf("%s\n", fmt.Sprintf(i18n.T("ollama_cannot_parse_url"), o.ApiUrl.Value, err)) return } @@ -78,7 +79,7 @@ func (o *Client) configure() (err error) { if err == nil && o.ApiHttpTimeout.Value != "" { timeout = parsed } else if o.ApiHttpTimeout.Value != "" { - fmt.Printf("Invalid HTTP timeout format (%q), using default (20m): %v\n", o.ApiHttpTimeout.Value, err) + fmt.Printf("%s\n", fmt.Sprintf(i18n.T("ollama_invalid_http_timeout_using_default"), o.ApiHttpTimeout.Value, err)) } } @@ -152,7 +153,7 @@ func (o *Client) Send(ctx context.Context, msgs []*chat.ChatCompletionMessage, o } if err = o.client.Chat(ctx, &req, respFunc); err != nil { - debuglog.Debug(debuglog.Basic, "Ollama chat request failed: %v\n", err) + debuglog.Debug(debuglog.Basic, "%s\n", fmt.Sprintf(i18n.T("ollama_chat_request_failed"), err)) } return } @@ -225,11 +226,11 @@ func (o *Client) loadImageBytes(ctx context.Context, imageURL string) (ret []byt if strings.HasPrefix(imageURL, "data:") { parts := strings.SplitN(imageURL, ",", 2) if len(parts) != 2 { - err = fmt.Errorf("invalid data URL format") + err = fmt.Errorf("%s", i18n.T("ollama_invalid_data_url_format")) return } if ret, err = base64.StdEncoding.DecodeString(parts[1]); err != nil { - err = fmt.Errorf("failed to decode data URL: %w", err) + err = fmt.Errorf("%s", fmt.Sprintf(i18n.T("ollama_failed_decode_data_url"), err)) } return } @@ -247,7 +248,7 @@ func (o *Client) loadImageBytes(ctx context.Context, imageURL string) (ret []byt defer resp.Body.Close() if resp.StatusCode >= http.StatusBadRequest { - err = fmt.Errorf("failed to fetch image %s: %s", imageURL, resp.Status) + err = fmt.Errorf("%s", fmt.Sprintf(i18n.T("ollama_failed_fetch_image"), imageURL, resp.Status)) return } diff --git a/internal/plugins/ai/ollama/ollama_test.go b/internal/plugins/ai/ollama/ollama_test.go new file mode 100644 index 00000000..4d814db6 --- /dev/null +++ b/internal/plugins/ai/ollama/ollama_test.go @@ -0,0 +1,62 @@ +package ollama + +import ( + "context" + "encoding/base64" + "fmt" + "net/http" + "net/http/httptest" + "strings" + "testing" + + "github.com/danielmiessler/fabric/internal/i18n" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestLoadImageBytes_DataURLValidationErrorsAreLocalized(t *testing.T) { + _, err := i18n.Init("en") + require.NoError(t, err) + + client := &Client{} + + _, err = client.loadImageBytes(context.Background(), "data:image/png;base64") + require.Error(t, err) + assert.Equal(t, i18n.T("ollama_invalid_data_url_format"), err.Error()) + + _, err = client.loadImageBytes(context.Background(), "data:image/png;base64,%%%%") + require.Error(t, err) + assert.True(t, strings.HasPrefix(err.Error(), strings.Split(i18n.T("ollama_failed_decode_data_url"), "%v")[0])) +} + +func TestLoadImageBytes_HTTPFetchErrorIsLocalized(t *testing.T) { + _, err := i18n.Init("en") + require.NoError(t, err) + + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) { + w.WriteHeader(http.StatusInternalServerError) + })) + t.Cleanup(server.Close) + + client := &Client{httpClient: server.Client()} + + _, err = client.loadImageBytes(context.Background(), server.URL+"/image.png") + require.Error(t, err) + assert.Equal(t, + fmt.Sprintf(i18n.T("ollama_failed_fetch_image"), server.URL+"/image.png", "500 Internal Server Error"), + err.Error(), + ) +} + +func TestLoadImageBytes_DataURLSuccess(t *testing.T) { + _, err := i18n.Init("en") + require.NoError(t, err) + + client := &Client{} + expected := []byte("hello world") + dataURL := "data:image/png;base64," + base64.StdEncoding.EncodeToString(expected) + + got, err := client.loadImageBytes(context.Background(), dataURL) + require.NoError(t, err) + assert.Equal(t, expected, got) +} diff --git a/internal/plugins/ai/openai/openai_audio.go b/internal/plugins/ai/openai/openai_audio.go index 9891f101..492ab935 100644 --- a/internal/plugins/ai/openai/openai_audio.go +++ b/internal/plugins/ai/openai/openai_audio.go @@ -12,6 +12,7 @@ import ( "strings" "sync" + "github.com/danielmiessler/fabric/internal/i18n" debuglog "github.com/danielmiessler/fabric/internal/log" openai "github.com/openai/openai-go" @@ -53,12 +54,12 @@ func (o *Client) TranscribeFile(ctx context.Context, filePath, model string, spl } if !slices.Contains(AllowedTranscriptionModels, model) { - return "", fmt.Errorf("model '%s' is not supported for transcription", model) + return "", fmt.Errorf("%s", fmt.Sprintf(i18n.T("openai_audio_model_not_supported_for_transcription"), model)) } ext := strings.ToLower(filepath.Ext(filePath)) if _, ok := allowedAudioExtensions[ext]; !ok { - return "", fmt.Errorf("unsupported audio format '%s'", ext) + return "", fmt.Errorf("%s", fmt.Sprintf(i18n.T("openai_audio_unsupported_audio_format"), ext)) } info, err := os.Stat(filePath) @@ -70,9 +71,9 @@ func (o *Client) TranscribeFile(ctx context.Context, filePath, model string, spl var cleanup func() if info.Size() > MaxAudioFileSize { if !split { - return "", fmt.Errorf("file %s exceeds 25MB limit; use --split-media-file to enable automatic splitting", filePath) + return "", fmt.Errorf("%s", fmt.Sprintf(i18n.T("openai_audio_file_exceeds_limit_enable_split"), filePath)) } - debuglog.Log("File %s is larger than the size limit... breaking it up into chunks...\n", filePath) + debuglog.Log("%s\n", fmt.Sprintf(i18n.T("openai_audio_file_exceeds_limit_splitting"), filePath)) if files, cleanup, err = splitAudioFile(filePath, ext, MaxAudioFileSize); err != nil { return "", err } @@ -88,7 +89,7 @@ func (o *Client) TranscribeFile(ctx context.Context, filePath, model string, spl wg.Add(1) go func(index int, filePath string) { defer wg.Done() - debuglog.Log("Using model %s to transcribe part %d (file name: %s)...\n", model, index+1, filePath) + debuglog.Log("%s\n", fmt.Sprintf(i18n.T("openai_audio_using_model_to_transcribe_part"), model, index+1, filePath)) chunk, openErr := os.Open(filePath) if openErr != nil { @@ -140,7 +141,7 @@ func (o *Client) TranscribeFile(ctx context.Context, filePath, model string, spl // It returns the list of chunk file paths and a cleanup function. func splitAudioFile(src, ext string, maxSize int64) (files []string, cleanup func(), err error) { if _, err = exec.LookPath("ffmpeg"); err != nil { - return nil, nil, fmt.Errorf("ffmpeg not found: please install it") + return nil, nil, fmt.Errorf("%s", i18n.T("openai_audio_ffmpeg_not_found_install")) } var dir string @@ -152,12 +153,12 @@ func splitAudioFile(src, ext string, maxSize int64) (files []string, cleanup fun segmentTime := 600 // start with 10 minutes for { pattern := filepath.Join(dir, "chunk-%03d"+ext) - debuglog.Log("Running ffmpeg to split audio into %d-second chunks...\n", segmentTime) + debuglog.Log("%s\n", fmt.Sprintf(i18n.T("openai_audio_running_ffmpeg_split_chunks"), segmentTime)) cmd := exec.Command("ffmpeg", "-y", "-i", src, "-f", "segment", "-segment_time", fmt.Sprintf("%d", segmentTime), "-c", "copy", pattern) var stderr bytes.Buffer cmd.Stderr = &stderr if err = cmd.Run(); err != nil { - return nil, cleanup, fmt.Errorf("ffmpeg failed: %v: %s", err, stderr.String()) + return nil, cleanup, fmt.Errorf("%s", fmt.Sprintf(i18n.T("openai_audio_ffmpeg_failed"), err, stderr.String())) } if files, err = filepath.Glob(filepath.Join(dir, "chunk-*"+ext)); err != nil { @@ -183,7 +184,7 @@ func splitAudioFile(src, ext string, maxSize int64) (files []string, cleanup fun _ = os.Remove(f) } if segmentTime <= 1 { - return nil, cleanup, fmt.Errorf("unable to split file into acceptable size chunks") + return nil, cleanup, fmt.Errorf("%s", i18n.T("openai_audio_unable_to_split_acceptable_size_chunks")) } segmentTime /= 2 } diff --git a/internal/plugins/ai/openai/openai_audio_test.go b/internal/plugins/ai/openai/openai_audio_test.go new file mode 100644 index 00000000..c860d4fc --- /dev/null +++ b/internal/plugins/ai/openai/openai_audio_test.go @@ -0,0 +1,64 @@ +package openai + +import ( + "context" + "fmt" + "os" + "path/filepath" + "testing" + + "github.com/danielmiessler/fabric/internal/i18n" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestTranscribeFile_ValidationErrorsAreLocalized(t *testing.T) { + _, err := i18n.Init("en") + require.NoError(t, err) + + client := &Client{} + + audioFile, err := os.CreateTemp("", "transcribe-valid-*.mp3") + require.NoError(t, err) + require.NoError(t, audioFile.Close()) + t.Cleanup(func() { _ = os.Remove(audioFile.Name()) }) + + _, err = client.TranscribeFile(context.Background(), audioFile.Name(), "not-a-model", false) + require.Error(t, err) + assert.Equal(t, + fmt.Sprintf(i18n.T("openai_audio_model_not_supported_for_transcription"), "not-a-model"), + err.Error(), + ) + + unsupportedFile, err := os.CreateTemp("", "transcribe-invalid-*.txt") + require.NoError(t, err) + require.NoError(t, unsupportedFile.Close()) + t.Cleanup(func() { _ = os.Remove(unsupportedFile.Name()) }) + + _, err = client.TranscribeFile(context.Background(), unsupportedFile.Name(), AllowedTranscriptionModels[0], false) + require.Error(t, err) + assert.Equal(t, + fmt.Sprintf(i18n.T("openai_audio_unsupported_audio_format"), filepath.Ext(unsupportedFile.Name())), + err.Error(), + ) +} + +func TestTranscribeFile_FileSizeLimitErrorIsLocalized(t *testing.T) { + _, err := i18n.Init("en") + require.NoError(t, err) + + client := &Client{} + largeFile, err := os.CreateTemp("", "transcribe-large-*.mp3") + require.NoError(t, err) + t.Cleanup(func() { _ = os.Remove(largeFile.Name()) }) + + require.NoError(t, largeFile.Truncate(MaxAudioFileSize+1)) + require.NoError(t, largeFile.Close()) + + _, err = client.TranscribeFile(context.Background(), largeFile.Name(), AllowedTranscriptionModels[0], false) + require.Error(t, err) + assert.Equal(t, + fmt.Sprintf(i18n.T("openai_audio_file_exceeds_limit_enable_split"), largeFile.Name()), + err.Error(), + ) +} diff --git a/internal/plugins/ai/openai/openai_image.go b/internal/plugins/ai/openai/openai_image.go index 697e8817..e3878756 100644 --- a/internal/plugins/ai/openai/openai_image.go +++ b/internal/plugins/ai/openai/openai_image.go @@ -12,6 +12,7 @@ import ( "strings" "github.com/danielmiessler/fabric/internal/domain" + "github.com/danielmiessler/fabric/internal/i18n" "github.com/openai/openai-go/packages/param" "github.com/openai/openai-go/responses" ) @@ -115,23 +116,23 @@ func (o *Client) extractAndSaveImages(resp *responses.Response, opts *domain.Cha // Decode base64 image data imageData, err := base64.StdEncoding.DecodeString(imageCall.Result) if err != nil { - return fmt.Errorf("failed to decode image data: %w", err) + return fmt.Errorf("%s", fmt.Sprintf(i18n.T("openai_image_failed_to_decode_image_data"), err)) } // Ensure directory exists dir := filepath.Dir(opts.ImageFile) if dir != "." { if err := os.MkdirAll(dir, 0755); err != nil { - return fmt.Errorf("failed to create directory %s: %w", dir, err) + return fmt.Errorf("%s", fmt.Sprintf(i18n.T("openai_image_failed_to_create_directory"), dir, err)) } } // Save image to file if err := os.WriteFile(opts.ImageFile, imageData, 0644); err != nil { - return fmt.Errorf("failed to save image to %s: %w", opts.ImageFile, err) + return fmt.Errorf("%s", fmt.Sprintf(i18n.T("openai_image_failed_to_save_image"), opts.ImageFile, err)) } - fmt.Printf("Image saved to: %s\n", opts.ImageFile) + fmt.Printf("%s\n", fmt.Sprintf(i18n.T("openai_image_saved_to"), opts.ImageFile)) return nil } } diff --git a/internal/plugins/ai/perplexity/perplexity.go b/internal/plugins/ai/perplexity/perplexity.go index 6a8ab7d4..58261a30 100644 --- a/internal/plugins/ai/perplexity/perplexity.go +++ b/internal/plugins/ai/perplexity/perplexity.go @@ -7,12 +7,12 @@ import ( "strings" "sync" + "github.com/danielmiessler/fabric/internal/chat" "github.com/danielmiessler/fabric/internal/domain" + "github.com/danielmiessler/fabric/internal/i18n" debuglog "github.com/danielmiessler/fabric/internal/log" "github.com/danielmiessler/fabric/internal/plugins" perplexity "github.com/sgaunet/perplexity-go/v2" - - "github.com/danielmiessler/fabric/internal/chat" ) const ( @@ -46,7 +46,7 @@ func (c *Client) Configure() error { if apiKeyFromEnv != "" { c.APIKey.Value = apiKeyFromEnv } else { - return fmt.Errorf("%s API key not configured. Please set the %s environment variable or run 'fabric --setup %s'", providerName, envKey, providerName) + return fmt.Errorf(i18n.T("perplexity_api_key_not_configured"), providerName, envKey, providerName) } } c.client = perplexity.NewClient(c.APIKey.Value) @@ -62,7 +62,7 @@ func (c *Client) ListModels() ([]string, error) { func (c *Client) Send(ctx context.Context, msgs []*chat.ChatCompletionMessage, opts *domain.ChatOptions) (string, error) { if c.client == nil { if err := c.Configure(); err != nil { - return "", fmt.Errorf("failed to configure Perplexity client: %w", err) + return "", fmt.Errorf(i18n.T("perplexity_failed_configure"), err) } } @@ -101,7 +101,7 @@ func (c *Client) Send(ctx context.Context, msgs []*chat.ChatCompletionMessage, o // Corrected: Use SendCompletionRequest method from perplexity-go library resp, err := c.client.SendCompletionRequest(request) // Pass request directly if err != nil { - return "", fmt.Errorf("perplexity API request failed: %w", err) // Corrected capitalization + return "", fmt.Errorf(i18n.T("perplexity_api_request_failed"), err) } var content strings.Builder @@ -110,7 +110,7 @@ func (c *Client) Send(ctx context.Context, msgs []*chat.ChatCompletionMessage, o // Append citations if available citations := resp.GetCitations() if len(citations) > 0 { - content.WriteString("\n\n# CITATIONS\n\n") + content.WriteString(i18n.T("perplexity_citations_header")) for i, citation := range citations { content.WriteString(fmt.Sprintf("- [%d] %s\n", i+1, citation)) } @@ -123,7 +123,7 @@ func (c *Client) SendStream(msgs []*chat.ChatCompletionMessage, opts *domain.Cha if c.client == nil { if err := c.Configure(); err != nil { close(channel) // Ensure channel is closed on error - return fmt.Errorf("failed to configure Perplexity client: %w", err) + return fmt.Errorf(i18n.T("perplexity_failed_configure"), err) } } @@ -170,7 +170,7 @@ func (c *Client) SendStream(msgs []*chat.ChatCompletionMessage, opts *domain.Cha if err != nil { // Log error, can't send to string channel directly. // Consider a mechanism to propagate this error if needed. - debuglog.Log("perplexity streaming error: %v\n", err) + debuglog.Log(i18n.T("perplexity_streaming_error"), err) // If the error occurs during stream setup, the channel might not have been closed by the receiver loop. // However, closing it here might cause a panic if the receiver loop also tries to close it. // close(channel) // Caution: Uncommenting this may cause panic, as channel is closed in the receiver goroutine. @@ -216,7 +216,7 @@ func (c *Client) SendStream(msgs []*chat.ChatCompletionMessage, opts *domain.Cha citations := lastResponse.GetCitations() if len(citations) > 0 { var citationsText strings.Builder - citationsText.WriteString("\n\n# CITATIONS\n\n") + citationsText.WriteString(i18n.T("perplexity_citations_header")) for i, citation := range citations { citationsText.WriteString(fmt.Sprintf("- [%d] %s\n", i+1, citation)) } diff --git a/internal/plugins/ai/vendors.go b/internal/plugins/ai/vendors.go index 00a30c23..b3468b5a 100644 --- a/internal/plugins/ai/vendors.go +++ b/internal/plugins/ai/vendors.go @@ -8,6 +8,7 @@ import ( "strings" "sync" + "github.com/danielmiessler/fabric/internal/i18n" "github.com/danielmiessler/fabric/internal/plugins" ) @@ -74,8 +75,7 @@ func (o *VendorsManager) FindByName(name string) Vendor { func (o *VendorsManager) readModels() (err error) { if len(o.Vendors) == 0 { - - err = fmt.Errorf("no AI vendors configured to read models from. Please configure at least one AI vendor") + err = fmt.Errorf("%s", i18n.T("vendors_no_ai_vendors_configured_read_models")) return } @@ -138,7 +138,7 @@ func (o *VendorsManager) Setup() (ret map[string]Vendor, err error) { func (o *VendorsManager) SetupVendor(vendorName string, configuredVendors map[string]Vendor) (err error) { vendor := o.FindByName(vendorName) if vendor == nil { - err = fmt.Errorf("vendor %s not found", vendorName) + err = fmt.Errorf("%s", fmt.Sprintf(i18n.T("vendor_not_found"), vendorName)) return } o.setupVendorTo(vendor, configuredVendors) @@ -147,11 +147,11 @@ func (o *VendorsManager) SetupVendor(vendorName string, configuredVendors map[st func (o *VendorsManager) setupVendorTo(vendor Vendor, configuredVendors map[string]Vendor) { if vendorErr := vendor.Setup(); vendorErr == nil { - fmt.Printf("[%v] configured\n", vendor.GetName()) + fmt.Printf("%s\n", fmt.Sprintf(i18n.T("plugin_setup_configured"), vendor.GetName())) configuredVendors[strings.ToLower(vendor.GetName())] = vendor } else { delete(configuredVendors, strings.ToLower(vendor.GetName())) - fmt.Printf("[%v] skipped\n", vendor.GetName()) + fmt.Printf("%s", fmt.Sprintf(i18n.T("plugin_setup_skipped"), vendor.GetName())) } } diff --git a/internal/plugins/template/datetime.go b/internal/plugins/template/datetime.go index cab44c1e..35efea0f 100644 --- a/internal/plugins/template/datetime.go +++ b/internal/plugins/template/datetime.go @@ -5,6 +5,8 @@ import ( "fmt" "strconv" "time" + + "github.com/danielmiessler/fabric/internal/i18n" ) // DateTimePlugin handles time and date operations @@ -94,7 +96,7 @@ func (p *DateTimePlugin) Apply(operation string, value string) (string, error) { return p.handleRelative(now, value) default: - return "", fmt.Errorf("datetime: unknown operation %q (see plugin documentation for supported operations)", operation) + return "", fmt.Errorf(i18n.T("template_datetime_error_unknown_operation"), operation) } } @@ -102,7 +104,7 @@ func (p *DateTimePlugin) handleRelative(now time.Time, value string) (string, er debugf("DateTime: handling relative time value=%q", value) if value == "" { - return "", fmt.Errorf("datetime: relative time requires a value (e.g., -1h, -1d, -1w)") + return "", fmt.Errorf("%s", i18n.T("template_datetime_error_relative_requires_value")) } // Try standard duration first (hours, minutes) @@ -114,7 +116,7 @@ func (p *DateTimePlugin) handleRelative(now time.Time, value string) (string, er // Handle date units if len(value) < 2 { - return "", fmt.Errorf("datetime: invalid relative format (use: -1h, 2d, -3w, 1m, -1y)") + return "", fmt.Errorf("%s", i18n.T("template_datetime_error_invalid_relative_format")) } unit := value[len(value)-1:] @@ -122,7 +124,7 @@ func (p *DateTimePlugin) handleRelative(now time.Time, value string) (string, er num, err := strconv.Atoi(numStr) if err != nil { - return "", fmt.Errorf("datetime: invalid number in relative time: %q", value) + return "", fmt.Errorf(i18n.T("template_datetime_error_invalid_number"), value) } var result string @@ -136,7 +138,7 @@ func (p *DateTimePlugin) handleRelative(now time.Time, value string) (string, er case "y": result = now.AddDate(num, 0, 0).Format("2006-01-02") default: - return "", fmt.Errorf("datetime: invalid unit %q (use: h,m for time or d,w,m,y for date)", unit) + return "", fmt.Errorf(i18n.T("template_datetime_error_invalid_unit"), unit) } debugf("DateTime: relative unit=%q num=%d result=%q", unit, num, result) diff --git a/internal/plugins/template/sys.go b/internal/plugins/template/sys.go index ed87d8bd..c04e5866 100644 --- a/internal/plugins/template/sys.go +++ b/internal/plugins/template/sys.go @@ -6,6 +6,8 @@ import ( "os" "os/user" "runtime" + + "github.com/danielmiessler/fabric/internal/i18n" ) // SysPlugin provides access to system-level information. @@ -29,7 +31,7 @@ func (p *SysPlugin) Apply(operation string, value string) (string, error) { hostname, err := os.Hostname() if err != nil { debugf("Sys: hostname error: %v", err) - return "", fmt.Errorf("sys: hostname error: %v", err) + return "", fmt.Errorf(i18n.T("template_sys_error_hostname"), err) } debugf("Sys: hostname=%q", hostname) return hostname, nil @@ -38,7 +40,7 @@ func (p *SysPlugin) Apply(operation string, value string) (string, error) { currentUser, err := user.Current() if err != nil { debugf("Sys: user error: %v", err) - return "", fmt.Errorf("sys: user error: %v", err) + return "", fmt.Errorf(i18n.T("template_sys_error_user"), err) } debugf("Sys: user=%q", currentUser.Username) return currentUser.Username, nil @@ -56,7 +58,7 @@ func (p *SysPlugin) Apply(operation string, value string) (string, error) { case "env": if value == "" { debugf("Sys: env error: missing variable name") - return "", fmt.Errorf("sys: env operation requires a variable name") + return "", fmt.Errorf("%s", i18n.T("template_sys_error_env_requires_var")) } result := os.Getenv(value) debugf("Sys: env %q=%q", value, result) @@ -66,7 +68,7 @@ func (p *SysPlugin) Apply(operation string, value string) (string, error) { dir, err := os.Getwd() if err != nil { debugf("Sys: pwd error: %v", err) - return "", fmt.Errorf("sys: pwd error: %v", err) + return "", fmt.Errorf(i18n.T("template_sys_error_pwd"), err) } debugf("Sys: pwd=%q", dir) return dir, nil @@ -75,13 +77,13 @@ func (p *SysPlugin) Apply(operation string, value string) (string, error) { homeDir, err := os.UserHomeDir() if err != nil { debugf("Sys: home error: %v", err) - return "", fmt.Errorf("sys: home error: %v", err) + return "", fmt.Errorf(i18n.T("template_sys_error_home"), err) } debugf("Sys: home=%q", homeDir) return homeDir, nil default: debugf("Sys: unknown operation %q", operation) - return "", fmt.Errorf("sys: unknown operation %q (supported: hostname, user, os, arch, env, pwd, home)", operation) + return "", fmt.Errorf(i18n.T("template_sys_error_unknown_operation"), operation) } } diff --git a/internal/tools/jina/jina.go b/internal/tools/jina/jina.go index 3b42ad58..6ff93399 100644 --- a/internal/tools/jina/jina.go +++ b/internal/tools/jina/jina.go @@ -45,7 +45,7 @@ func (jc *Client) ScrapeQuestion(question string) (ret string, err error) { func (jc *Client) request(requestURL string) (ret string, err error) { var req *http.Request if req, err = http.NewRequest("GET", requestURL, nil); err != nil { - err = fmt.Errorf("error creating request: %w", err) + err = fmt.Errorf("%s", fmt.Sprintf(i18n.T("jina_error_creating_request"), err)) return } @@ -57,14 +57,14 @@ func (jc *Client) request(requestURL string) (ret string, err error) { client := &http.Client{} var resp *http.Response if resp, err = client.Do(req); err != nil { - err = fmt.Errorf("error sending request: %w", err) + err = fmt.Errorf("%s", fmt.Sprintf(i18n.T("jina_error_sending_request"), err)) return } defer resp.Body.Close() var body []byte if body, err = io.ReadAll(resp.Body); err != nil { - err = fmt.Errorf("error reading response body: %w", err) + err = fmt.Errorf("%s", fmt.Sprintf(i18n.T("jina_error_reading_response_body"), err)) return } ret = string(body) diff --git a/internal/tools/spotify/spotify.go b/internal/tools/spotify/spotify.go index 00a7530d..59b36914 100644 --- a/internal/tools/spotify/spotify.go +++ b/internal/tools/spotify/spotify.go @@ -50,8 +50,8 @@ func NewSpotify() *Spotify { EnvNamePrefix: plugins.BuildEnvVariablePrefix(label), } - ret.ClientId = ret.AddSetupQuestion("Client ID", false) - ret.ClientSecret = ret.AddSetupQuestion("Client Secret", false) + ret.ClientId = ret.AddSetupQuestionWithEnvName("Client ID", false, i18n.T("spotify_client_id_question")) + ret.ClientSecret = ret.AddSetupQuestionWithEnvName("Client Secret", false, i18n.T("spotify_client_secret_question")) return ret } @@ -475,48 +475,48 @@ func (s *Spotify) FormatMetadataAsText(metadata any) string { switch m := metadata.(type) { case *ShowMetadata: - sb.WriteString("# Spotify Podcast/Show\n\n") - sb.WriteString(fmt.Sprintf("**Title**: %s\n", m.Name)) - sb.WriteString(fmt.Sprintf("**Publisher**: %s\n", m.Publisher)) - sb.WriteString(fmt.Sprintf("**Total Episodes**: %d\n", m.TotalEpisodes)) + sb.WriteString(i18n.T("spotify_show_header") + "\n\n") + sb.WriteString(fmt.Sprintf(i18n.T("spotify_title_label")+"\n", m.Name)) + sb.WriteString(fmt.Sprintf(i18n.T("spotify_publisher_label")+"\n", m.Publisher)) + sb.WriteString(fmt.Sprintf(i18n.T("spotify_total_episodes_label")+"\n", m.TotalEpisodes)) if len(m.Languages) > 0 { - sb.WriteString(fmt.Sprintf("**Languages**: %s\n", strings.Join(m.Languages, ", "))) + sb.WriteString(fmt.Sprintf(i18n.T("spotify_languages_label")+"\n", strings.Join(m.Languages, ", "))) } - sb.WriteString(fmt.Sprintf("**Media Type**: %s\n", m.MediaType)) - sb.WriteString(fmt.Sprintf("**URL**: %s\n\n", m.ExternalURL)) - sb.WriteString("## Description\n\n") + sb.WriteString(fmt.Sprintf(i18n.T("spotify_media_type_label")+"\n", m.MediaType)) + sb.WriteString(fmt.Sprintf(i18n.T("spotify_url_label")+"\n\n", m.ExternalURL)) + sb.WriteString(i18n.T("spotify_description_header") + "\n\n") sb.WriteString(m.Description) sb.WriteString("\n") case *EpisodeMetadata: - sb.WriteString("# Spotify Episode\n\n") - sb.WriteString(fmt.Sprintf("**Title**: %s\n", m.Name)) - sb.WriteString(fmt.Sprintf("**Show**: %s\n", m.ShowName)) - sb.WriteString(fmt.Sprintf("**Release Date**: %s\n", m.ReleaseDate)) - sb.WriteString(fmt.Sprintf("**Duration**: %d minutes\n", m.DurationMinutes)) - sb.WriteString(fmt.Sprintf("**Language**: %s\n", m.Language)) - sb.WriteString(fmt.Sprintf("**Explicit**: %v\n", m.Explicit)) - sb.WriteString(fmt.Sprintf("**URL**: %s\n", m.ExternalURL)) + sb.WriteString(i18n.T("spotify_episode_header") + "\n\n") + sb.WriteString(fmt.Sprintf(i18n.T("spotify_title_label")+"\n", m.Name)) + sb.WriteString(fmt.Sprintf(i18n.T("spotify_show_name_label")+"\n", m.ShowName)) + sb.WriteString(fmt.Sprintf(i18n.T("spotify_release_date_label")+"\n", m.ReleaseDate)) + sb.WriteString(fmt.Sprintf(i18n.T("spotify_duration_label")+"\n", m.DurationMinutes)) + sb.WriteString(fmt.Sprintf(i18n.T("spotify_language_field_label")+"\n", m.Language)) + sb.WriteString(fmt.Sprintf(i18n.T("spotify_explicit_label")+"\n", m.Explicit)) + sb.WriteString(fmt.Sprintf(i18n.T("spotify_url_label")+"\n", m.ExternalURL)) if m.AudioPreviewURL != "" { - sb.WriteString(fmt.Sprintf("**Audio Preview**: %s\n", m.AudioPreviewURL)) + sb.WriteString(fmt.Sprintf(i18n.T("spotify_audio_preview_label")+"\n", m.AudioPreviewURL)) } - sb.WriteString("\n## Description\n\n") + sb.WriteString("\n" + i18n.T("spotify_description_header") + "\n\n") sb.WriteString(m.Description) sb.WriteString("\n") case *SearchResult: - sb.WriteString("# Spotify Search Results\n\n") + sb.WriteString(i18n.T("spotify_search_results_header") + "\n\n") for i, show := range m.Shows { sb.WriteString(fmt.Sprintf("## %d. %s\n", i+1, show.Name)) - sb.WriteString(fmt.Sprintf("- **Publisher**: %s\n", show.Publisher)) - sb.WriteString(fmt.Sprintf("- **Episodes**: %d\n", show.TotalEpisodes)) - sb.WriteString(fmt.Sprintf("- **URL**: %s\n", show.ExternalURL)) + sb.WriteString(fmt.Sprintf(i18n.T("spotify_search_publisher_label")+"\n", show.Publisher)) + sb.WriteString(fmt.Sprintf(i18n.T("spotify_search_episodes_label")+"\n", show.TotalEpisodes)) + sb.WriteString(fmt.Sprintf(i18n.T("spotify_search_url_label")+"\n", show.ExternalURL)) // Truncate description for search results desc := show.Description if len(desc) > 200 { desc = desc[:200] + "..." } - sb.WriteString(fmt.Sprintf("- **Description**: %s\n\n", desc)) + sb.WriteString(fmt.Sprintf(i18n.T("spotify_search_description_label")+"\n\n", desc)) } } diff --git a/internal/tools/youtube/youtube.go b/internal/tools/youtube/youtube.go index a3f9a65d..19e3abe6 100644 --- a/internal/tools/youtube/youtube.go +++ b/internal/tools/youtube/youtube.go @@ -506,7 +506,7 @@ func (o *YouTube) GrabComments(videoId string) (ret []string, err error) { call := o.service.CommentThreads.List([]string{"snippet", "replies"}).VideoId(videoId).TextFormat("plainText").MaxResults(100) var response *youtube.CommentThreadListResponse if response, err = call.Do(); err != nil { - log.Printf("Failed to fetch comments: %v", err) + log.Printf(i18n.T("youtube_failed_fetch_comments"), err) return } @@ -677,7 +677,7 @@ func (o *YouTube) FetchAndSavePlaylist(playlistID, filename string) (err error) return } - fmt.Println("Playlist saved to", filename) + fmt.Printf("%s\n", fmt.Sprintf(i18n.T("youtube_playlist_saved_to"), filename)) return } @@ -688,8 +688,8 @@ func (o *YouTube) FetchAndPrintPlaylist(playlistID string) (err error) { return } - fmt.Printf("Playlist: %s\n", playlistID) - fmt.Printf("VideoId: Title\n") + fmt.Printf("%s\n", fmt.Sprintf(i18n.T("youtube_playlist_header"), playlistID)) + fmt.Printf("%s\n", i18n.T("youtube_video_id_title_header")) for _, video := range videos { fmt.Printf("%s: %s\n", video.Id, video.Title) } @@ -831,7 +831,7 @@ func (o *YouTube) GrabByFlags() (ret *VideoInfo, err error) { flag.Parse() if flag.NArg() == 0 { - log.Fatal("Error: No URL provided.") + log.Fatalf("%s", i18n.T("youtube_no_url_provided")) } url := flag.Arg(0) diff --git a/internal/util/groups_items.go b/internal/util/groups_items.go index 07ca4134..b9e463e4 100644 --- a/internal/util/groups_items.go +++ b/internal/util/groups_items.go @@ -5,6 +5,7 @@ import ( "sort" "strings" + "github.com/danielmiessler/fabric/internal/i18n" "github.com/samber/lo" ) @@ -98,7 +99,7 @@ func (o *GroupsItemsSelector[I]) GetGroupAndItemByItemNumber(number int) (group } if !found { - err = fmt.Errorf("number %d is out of range", number) + err = fmt.Errorf("%s", fmt.Sprintf(i18n.T("groups_items_number_out_of_range"), number)) } return } From e979cb2fc7d9f1ddff385143b7216e60e07677ae Mon Sep 17 00:00:00 2001 From: Kayvan Sylvan Date: Thu, 19 Feb 2026 14:09:06 -0800 Subject: [PATCH 2/2] chore: incoming 2015 changelog entry --- cmd/generate_changelog/incoming/2015.txt | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 cmd/generate_changelog/incoming/2015.txt diff --git a/cmd/generate_changelog/incoming/2015.txt b/cmd/generate_changelog/incoming/2015.txt new file mode 100644 index 00000000..d14cf721 --- /dev/null +++ b/cmd/generate_changelog/incoming/2015.txt @@ -0,0 +1,7 @@ +### PR [#2015](https://github.com/danielmiessler/Fabric/pull/2015) by [ksylvan](https://github.com/ksylvan): Implement comprehensive i18n support across all plugins and tools + +- Implement comprehensive internationalization (i18n) support across all AI vendor plugins, tools, and template plugins. +- Update localization files for multiple languages with new translation keys. +- Replace hardcoded strings in Spotify and YouTube tools with localized equivalents. +- Add unit tests for localized error handling in Ollama. +- Standardize setup questions using the new i18n translation framework.