feat: replace hardcoded error strings with i18n translation keys

- Replace hardcoded error messages with `i18n.T()` calls across Go source files
- Add ~80 new translation keys to all locale files (en, de, es, fa, fr, it, ja, pt-BR, pt-PT, zh)
- Internationalize error strings in chat, attachment, storage, and template packages
- Internationalize error strings in plugin registry, server, and utility modules
- Internationalize githelper, notifications, patterns, and sessions modules
- Add i18n support for DigitalOcean, Gemini, and OpenAI-compatible providers
- Sort existing locale keys alphabetically in JSON files
- chore: incoming 2019 changelog entry
This commit is contained in:
Kayvan Sylvan 2026-02-21 13:23:17 -08:00
parent 95766ff342
commit e9b1b88d86
30 changed files with 688 additions and 70 deletions

View file

@ -0,0 +1,7 @@
### PR [#2019](https://github.com/danielmiessler/Fabric/pull/2019) by [ksylvan](https://github.com/ksylvan): feat: replace hardcoded error strings with i18n translation keys
- Replace hardcoded error messages with `i18n.T()` calls across Go source files
- Add ~80 new translation keys to all locale files (en, de, es, fa, fr, it, ja, pt-BR, pt-PT, zh)
- Internationalize error strings in chat, attachment, storage, template, plugin registry, server, and utility modules
- Add i18n support for DigitalOcean, Gemini, and OpenAI-compatible providers
- Sort existing locale keys alphabetically in JSON files

View file

@ -3,6 +3,8 @@ package chat
import ( import (
"encoding/json" "encoding/json"
"errors" "errors"
"github.com/danielmiessler/fabric/internal/i18n"
) )
const ( const (
@ -14,7 +16,7 @@ const (
ChatMessageRoleDeveloper = "developer" ChatMessageRoleDeveloper = "developer"
) )
var ErrContentFieldsMisused = errors.New("can't use both Content and MultiContent properties simultaneously") var ErrContentFieldsMisused = errors.New(i18n.T("chat_error_content_fields_misused"))
type ChatMessagePartType string type ChatMessagePartType string

View file

@ -478,7 +478,7 @@ func (o *PluginRegistry) Configure() (err error) {
o.ConfigureVendors() o.ConfigureVendors()
_ = o.Defaults.Configure() _ = o.Defaults.Configure()
if err := o.CustomPatterns.Configure(); err != nil { if err := o.CustomPatterns.Configure(); err != nil {
return fmt.Errorf("error configuring CustomPatterns: %w", err) return fmt.Errorf(i18n.T("plugin_registry_error_configuring_custom_patterns"), err)
} }
_ = o.PatternsLoader.Configure() _ = o.PatternsLoader.Configure()
@ -559,7 +559,7 @@ func (o *PluginRegistry) GetChatter(model string, modelContextLength int, vendor
return strings.EqualFold(name, vendorName) return strings.EqualFold(name, vendorName)
}) })
if ret.vendor == nil || !vendorAvailable { if ret.vendor == nil || !vendorAvailable {
err = fmt.Errorf("model %s not available for vendor %s", model, vendorName) err = fmt.Errorf(i18n.T("plugin_registry_model_not_available_for_vendor"), model, vendorName)
return return
} }
} else { } else {

View file

@ -11,6 +11,7 @@ import (
"os" "os"
"path/filepath" "path/filepath"
"github.com/danielmiessler/fabric/internal/i18n"
"github.com/gabriel-vasile/mimetype" "github.com/gabriel-vasile/mimetype"
) )
@ -73,7 +74,7 @@ func (a *Attachment) ResolveType() (ret string, err error) {
ret = mimetype.Detect(a.Content).String() ret = mimetype.Detect(a.Content).String()
return return
} }
err = fmt.Errorf("attachment has no type and no content to derive it from") err = fmt.Errorf("%s", i18n.T("attachment_no_type_no_content"))
return return
} }
@ -99,7 +100,7 @@ func (a *Attachment) ContentBytes() (ret []byte, err error) {
} }
return return
} }
err = fmt.Errorf("no content available") err = fmt.Errorf("%s", i18n.T("attachment_no_content_available"))
return return
} }
@ -130,7 +131,7 @@ func NewAttachment(value string) (ret *Attachment, err error) {
return return
} }
if _, err = os.Stat(absPath); os.IsNotExist(err) { if _, err = os.Stat(absPath); os.IsNotExist(err) {
err = fmt.Errorf("file %s does not exist", value) err = fmt.Errorf(i18n.T("attachment_file_not_exist"), value)
return return
} }
@ -153,7 +154,7 @@ func detectMimeTypeFromURL(url string) (string, error) {
defer resp.Body.Close() defer resp.Body.Close()
mimeType := resp.Header.Get("Content-Type") mimeType := resp.Header.Get("Content-Type")
if mimeType == "" { if mimeType == "" {
return "", fmt.Errorf("could not determine mimetype of URL") return "", fmt.Errorf("%s", i18n.T("attachment_could_not_determine_mimetype"))
} }
return mimeType, nil return mimeType, nil
} }

View file

@ -1,10 +1,15 @@
{ {
"abacus_models_endpoint_status": "Abacus-Modell-Endpunkt gab Status %d zurück",
"additional_yt_dlp_args": "Zusätzliche Argumente für yt-dlp (z.B. '--cookies-from-browser brave')", "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", "address_to_bind_rest_api": "Adresse zum Binden der REST API",
"anthropic_stream_error": "Stream-Fehler: %v", "anthropic_stream_error": "Stream-Fehler: %v",
"api_key_secure_server_routes": "API-Schlüssel zum Sichern der Server-Routen", "api_key_secure_server_routes": "API-Schlüssel zum Sichern der Server-Routen",
"application_options_header": "Anwendungsoptionen:", "application_options_header": "Anwendungsoptionen:",
"apply_variables_to_input": "Variablen auf Benutzereingabe anwenden", "apply_variables_to_input": "Variablen auf Benutzereingabe anwenden",
"attachment_could_not_determine_mimetype": "MIME-Typ der URL konnte nicht ermittelt werden",
"attachment_file_not_exist": "Datei %s existiert nicht",
"attachment_no_content_available": "Kein Inhalt verfügbar",
"attachment_no_type_no_content": "Anhang hat keinen Typ und keinen Inhalt zur Ableitung",
"attachment_path_or_url_help": "Anhangspfad oder URL (z.B. für OpenAI-Bilderkennungsnachrichten)", "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_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", "audio_video_file_transcribe": "Audio- oder Video-Datei zum Transkribieren",
@ -15,12 +20,12 @@
"azure_api_version_question": "Geben Sie die Azure API-Version ein (leer lassen für Standard)", "azure_api_version_question": "Geben Sie die Azure API-Version ein (leer lassen für Standard)",
"azure_base_url_question": "API Basis-URL", "azure_base_url_question": "API Basis-URL",
"azure_base_url_required": "Azure Basis-URL ist erforderlich", "azure_base_url_required": "Azure Basis-URL ist erforderlich",
"azure_credential_failure": "Fehler beim Erstellen der Azure-Anmeldeinformationen",
"azure_deployments_question": "Geben Sie Ihre Azure-Bereitstellungsnamen ein (kommagetrennt)", "azure_deployments_question": "Geben Sie Ihre Azure-Bereitstellungsnamen ein (kommagetrennt)",
"azure_deployments_required": "Mindestens ein Azure-Bereitstellungsname ist erforderlich", "azure_deployments_required": "Mindestens ein Azure-Bereitstellungsname ist erforderlich",
"azure_failed_extract_deployment": "Bereitstellungsname konnte nicht aus der Anfrage extrahiert werden", "azure_failed_extract_deployment": "Bereitstellungsname konnte nicht aus der Anfrage extrahiert werden",
"azure_model_field_empty": "Modellfeld ist im Anfragekörper leer", "azure_model_field_empty": "Modellfeld ist im Anfragekörper leer",
"azure_request_body_nil": "Anfragekörper ist nil", "azure_request_body_nil": "Anfragekörper ist nil",
"azure_credential_failure": "Fehler beim Erstellen der Azure-Anmeldeinformationen",
"background_type_help": "Hintergrundtyp: opaque, transparent (Standard: opaque, nur für PNG/WebP)", "background_type_help": "Hintergrundtyp: opaque, transparent (Standard: opaque, nur für PNG/WebP)",
"bedrock_aws_region_label": "AWS-Region", "bedrock_aws_region_label": "AWS-Region",
"bedrock_converse_failed": "Bedrock Converse für Modell %s fehlgeschlagen: %w", "bedrock_converse_failed": "Bedrock Converse für Modell %s fehlgeschlagen: %w",
@ -37,6 +42,7 @@
"bedrock_unknown_stream_event_type": "unbekannter Stream-Event-Typ: %T", "bedrock_unknown_stream_event_type": "unbekannter Stream-Event-Typ: %T",
"cannot_convert_string": "kann String %q nicht zu %v konvertieren", "cannot_convert_string": "kann String %q nicht zu %v konvertieren",
"change_default_model": "Standardmodell ändern", "change_default_model": "Standardmodell ändern",
"chat_error_content_fields_misused": "Content und MultiContent können nicht gleichzeitig verwendet werden",
"chatter_error_empty_response": "leere Antwort", "chatter_error_empty_response": "leere Antwort",
"chatter_error_find_context": "Kontext %s konnte nicht gefunden werden: %v", "chatter_error_find_context": "Kontext %s konnte nicht gefunden werden: %v",
"chatter_error_find_session": "Sitzung %s konnte nicht gefunden werden: %v", "chatter_error_find_session": "Sitzung %s konnte nicht gefunden werden: %v",
@ -81,9 +87,13 @@
"custom_patterns_directory_question": "Geben Sie den Pfad zu Ihrem benutzerdefinierten Pattern-Verzeichnis ein", "custom_patterns_directory_question": "Geben Sie den Pfad zu Ihrem benutzerdefinierten Pattern-Verzeichnis ein",
"custom_patterns_label": "Benutzerdefinierte Patterns", "custom_patterns_label": "Benutzerdefinierte Patterns",
"custom_patterns_setup_description": "Benutzerdefinierte Patterns - Verzeichnis für Ihre benutzerdefinierten Patterns festlegen", "custom_patterns_setup_description": "Benutzerdefinierte Patterns - Verzeichnis für Ihre benutzerdefinierten Patterns festlegen",
"custom_patterns_warning_create_directory": "Warnung: Benutzerdefiniertes Musterverzeichnis %s konnte nicht erstellt werden: %v\n",
"db_error_loading_env_file": "Fehler beim Laden der .env-Datei: %s",
"defaults_model_context_length_question": "Geben Sie die Kontextlänge des Modells 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_model_question": "Geben Sie den Index oder den Namen Ihres Standardmodells ein",
"defaults_setup_description": "Standard-KI-Anbieter und -Modell", "defaults_setup_description": "Standard-KI-Anbieter und -Modell",
"digitalocean_failed_parse_control_plane_url": "DigitalOcean Control Plane URL konnte nicht geparst werden: %w",
"digitalocean_model_list_unavailable": "DigitalOcean-Modellliste nicht verfügbar. Setzen Sie DIGITALOCEAN_TOKEN, um Modelle von der Control Plane abzurufen",
"disable_openai_responses_api": "OpenAI Responses API deaktivieren (Standard: false)", "disable_openai_responses_api": "OpenAI Responses API deaktivieren (Standard: false)",
"disable_pattern_variable_replacement": "Mustervariablenersetzung deaktivieren", "disable_pattern_variable_replacement": "Mustervariablenersetzung deaktivieren",
"enable_web_search_tool": "Web-Such-Tool für unterstützte Modelle aktivieren (Anthropic, OpenAI, Gemini)", "enable_web_search_tool": "Web-Such-Tool für unterstützte Modelle aktivieren (Anthropic, OpenAI, Gemini)",
@ -183,8 +193,14 @@
"gemini_stream_error": "Fehler: %v", "gemini_stream_error": "Fehler: %v",
"gemini_tts_failed": "TTS-Generierung fehlgeschlagen: %w", "gemini_tts_failed": "TTS-Generierung fehlgeschlagen: %w",
"gemini_unexpected_data_type": "unerwarteter Datentyp: %s, Audiodaten erwartet", "gemini_unexpected_data_type": "unerwarteter Datentyp: %s, Audiodaten erwartet",
"gemini_voice_not_found": "Stimme '%s' nicht gefunden",
"gemini_wav_data_invalid": "generierte WAV-Daten sind ungültig: %d Bytes, mindestens erforderlich: %d", "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", "gemini_wav_generation_failed": "WAV-Datei konnte nicht generiert werden: %w",
"githelper_failed_clone_repository": "Repository konnte nicht geklont werden: %w",
"githelper_failed_create_dest_directory": "Zielverzeichnis konnte nicht erstellt werden: %w",
"githelper_failed_get_commit": "Commit konnte nicht abgerufen werden: %w",
"githelper_failed_get_head": "Repository HEAD konnte nicht abgerufen werden: %w",
"githelper_failed_get_tree": "Verzeichnisbaum konnte nicht abgerufen werden: %w",
"grab_comments_from_youtube": "Kommentare von YouTube-Video abrufen und an Chat senden", "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_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_transcript_with_timestamps": "Transkript von YouTube-Video mit Zeitstempeln abrufen und an Chat senden",
@ -239,6 +255,7 @@
"no_description_available": "Keine Beschreibung verfügbar", "no_description_available": "Keine Beschreibung verfügbar",
"no_items_found": "Keine %s", "no_items_found": "Keine %s",
"no_notification_system_available": "kein Benachrichtigungssystem verfügbar", "no_notification_system_available": "kein Benachrichtigungssystem verfügbar",
"notifications_no_provider_available": "Kein Benachrichtigungsanbieter verfügbar",
"number_of_latest_patterns": "Anzahl der neuesten Muster zum Auflisten", "number_of_latest_patterns": "Anzahl der neuesten Muster zum Auflisten",
"ollama_cannot_parse_url": "URL '%s' kann nicht geparst werden: %v", "ollama_cannot_parse_url": "URL '%s' kann nicht geparst werden: %v",
"ollama_chat_request_failed": "Chat-Anfrage fehlgeschlagen: %v", "ollama_chat_request_failed": "Chat-Anfrage fehlgeschlagen: %v",
@ -293,6 +310,7 @@
"openai_audio_unable_to_split_acceptable_size_chunks": "Datei konnte nicht in akzeptable Teile aufgeteilt werden", "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_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_audio_using_model_to_transcribe_part": "Verwende Modell %s zur Transkription von Teil %d (Dateiname: %s)...",
"openai_compatible_unknown_static_model_list": "Unbekannte statische Modellliste: %s",
"openai_failed_to_create_models_url": "Modell-URL konnte nicht erstellt werden: %w", "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_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_decode_image_data": "Bilddaten konnten nicht dekodiert werden: %w",
@ -322,6 +340,13 @@
"patterns_download_success": "✅ Patterns erfolgreich nach %s heruntergeladen und installiert\\n", "patterns_download_success": "✅ Patterns erfolgreich nach %s heruntergeladen und installiert\\n",
"patterns_downloaded_temp": "%d Patterns in temporäres Verzeichnis heruntergeladen\\n", "patterns_downloaded_temp": "%d Patterns in temporäres Verzeichnis heruntergeladen\\n",
"patterns_downloading": "Lade Patterns herunter und befülle %s...\\n", "patterns_downloading": "Lade Patterns herunter und befülle %s...\\n",
"patterns_error_create_directory": "Musterverzeichnis konnte nicht erstellt werden: %v",
"patterns_error_get_home_directory": "Home-Verzeichnis konnte nicht ermittelt werden: %v",
"patterns_error_load_from_file": "Muster konnte nicht aus Datei %s geladen werden: %w",
"patterns_error_read_pattern_file": "Musterdatei %s konnte nicht gelesen werden: %v",
"patterns_error_read_unique_file": "Eindeutige Musterdatei konnte nicht gelesen werden. Bitte --updatepatterns ausführen (%s)",
"patterns_error_resolve_file_path": "Dateipfad konnte nicht aufgelöst werden: %v",
"patterns_error_save_pattern": "Muster konnte nicht gespeichert werden: %v",
"patterns_failed_access_directory": "Fehler beim Zugriff auf den Pattern-Ordner '%s': %w", "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_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_create_temp_folder": "Fehler beim Erstellen des temporären Pattern-Ordners: %w",
@ -370,6 +395,8 @@
"plugin_question_bool": "%v%v (true/false, leer lassen für '%s' oder '%v' eingeben, um den Wert zu entfernen):", "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_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_question_with_default": "%v%v (leer lassen für '%s' oder '%v' eingeben, um den Wert zu entfernen):",
"plugin_registry_error_configuring_custom_patterns": "Fehler beim Konfigurieren von CustomPatterns: %w",
"plugin_registry_model_not_available_for_vendor": "Modell %s nicht verfügbar für Anbieter %s",
"plugin_setting_not_valid": "%v=%v ist nicht gültig", "plugin_setting_not_valid": "%v=%v ist nicht gültig",
"plugin_setup_configured": "[%v] konfiguriert", "plugin_setup_configured": "[%v] konfiguriert",
"plugin_setup_skipped": "[%v] übersprungen\\n", "plugin_setup_skipped": "[%v] übersprungen\\n",
@ -389,6 +416,11 @@
"send_desktop_notification": "Desktop-Benachrichtigung senden, wenn Befehl abgeschlossen ist", "send_desktop_notification": "Desktop-Benachrichtigung senden, wenn Befehl abgeschlossen ist",
"serve_fabric_api_ollama_endpoints": "Fabric REST API mit ollama-Endpunkten bereitstellen", "serve_fabric_api_ollama_endpoints": "Fabric REST API mit ollama-Endpunkten bereitstellen",
"serve_fabric_rest_api": "Fabric REST API bereitstellen", "serve_fabric_rest_api": "Fabric REST API bereitstellen",
"server_chat_error": "Fehler: %v",
"server_error_marshaling_response": "Fehler beim Serialisieren der Antwort: %v",
"server_error_writing_response": "Fehler beim Schreiben der Antwort: %v",
"server_invalid_request_format": "Ungültiges Anfrageformat: %v",
"sessions_creating_new": "Erstelle neue Sitzung: %s\n",
"set_debug_level": "Debug-Level festlegen (0=aus, 1=grundlegend, 2=detailliert, 3=Trace)", "set_debug_level": "Debug-Level festlegen (0=aus, 1=grundlegend, 2=detailliert, 3=Trace)",
"set_frequency_penalty": "Häufigkeitsstrafe festlegen", "set_frequency_penalty": "Häufigkeitsstrafe festlegen",
"set_location_web_search": "Standort für Web-Suchergebnisse festlegen (z.B., 'America/Los_Angeles')", "set_location_web_search": "Standort für Web-Suchergebnisse festlegen (z.B., 'America/Los_Angeles')",
@ -481,6 +513,15 @@
"spotify_total_episodes_label": "**Episoden insgesamt**: %d", "spotify_total_episodes_label": "**Episoden insgesamt**: %d",
"spotify_url_label": "**URL**: %s", "spotify_url_label": "**URL**: %s",
"start_tag_thinking_sections": "Start-Tag für Denk-Abschnitte", "start_tag_thinking_sections": "Start-Tag für Denk-Abschnitte",
"storage_error_delete": "%s konnte nicht gelöscht werden: %v",
"storage_error_load": "%s konnte nicht geladen werden: %v",
"storage_error_marshal": "%s konnte nicht serialisiert werden: %s",
"storage_error_read_directory": "Einträge aus dem Verzeichnis konnten nicht gelesen werden: %v",
"storage_error_rename": "%s konnte nicht in %s umbenannt werden: %v",
"storage_error_resolve_directory": "Verzeichnispfad konnte nicht aufgelöst werden: %v",
"storage_error_save": "%s konnte nicht gespeichert werden: %v",
"storage_error_stat_entry": "Eintrag %s konnte nicht abgefragt werden: %v",
"storage_error_unmarshal": "%s konnte nicht deserialisiert werden: %s",
"strategies_available_header": "Verfügbare Strategien:", "strategies_available_header": "Verfügbare Strategien:",
"strategies_cloning_repository": "Repository %s wird geklont (Pfad: %s)...\\n", "strategies_cloning_repository": "Repository %s wird geklont (Pfad: %s)...\\n",
"strategies_download_success": "✅ Strategien erfolgreich nach %s heruntergeladen und installiert\\n", "strategies_download_success": "✅ Strategien erfolgreich nach %s heruntergeladen und installiert\\n",
@ -503,6 +544,7 @@
"template_datetime_error_invalid_unit": "invalid time unit: %q", "template_datetime_error_invalid_unit": "invalid time unit: %q",
"template_datetime_error_relative_requires_value": "relative time requires a value", "template_datetime_error_relative_requires_value": "relative time requires a value",
"template_datetime_error_unknown_operation": "datetime: unknown operation %q", "template_datetime_error_unknown_operation": "datetime: unknown operation %q",
"template_extension_error": "Erweiterung %s Fehler: %v",
"template_file_error_expand_home_dir": "datei: home-verzeichnis konnte nicht erweitert werden: %v", "template_file_error_expand_home_dir": "datei: home-verzeichnis konnte nicht erweitert werden: %v",
"template_file_error_invalid_line_count": "datei: ungültige zeilenanzahl %q", "template_file_error_invalid_line_count": "datei: ungültige zeilenanzahl %q",
"template_file_error_line_count_positive": "datei: zeilenanzahl muss positiv sein", "template_file_error_line_count_positive": "datei: zeilenanzahl muss positiv sein",
@ -525,12 +567,23 @@
"template_file_log_size_for_path": "Datei: größe=%d für Pfad %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_tail_returning_lines": "Datei: tail gibt %d Zeilen zurück",
"template_file_log_validating_path": "Datei: Pfad %q wird validiert", "template_file_log_validating_path": "Datei: Pfad %q wird validiert",
"template_hash_open_file": "Datei öffnen: %w",
"template_hash_read_file": "Datei lesen: %w",
"template_missing_required_variable": "Erforderliche Variable fehlt: %s",
"template_plugin_error": "Plugin %s Fehler: %v",
"template_processing_stuck": "Vorlagenverarbeitung blockiert - mögliche Endlosschleife",
"template_sys_error_env_requires_var": "env: variable name required", "template_sys_error_env_requires_var": "env: variable name required",
"template_sys_error_home": "failed to get home directory: %v", "template_sys_error_home": "failed to get home directory: %v",
"template_sys_error_hostname": "failed to get hostname: %v", "template_sys_error_hostname": "failed to get hostname: %v",
"template_sys_error_pwd": "failed to get working directory: %v", "template_sys_error_pwd": "failed to get working directory: %v",
"template_sys_error_unknown_operation": "sys: unknown operation %q", "template_sys_error_unknown_operation": "sys: unknown operation %q",
"template_sys_error_user": "failed to get current user: %v", "template_sys_error_user": "failed to get current user: %v",
"template_text_empty_input": "Text: Leere Eingabe für Operation %q",
"template_text_unknown_operation": "Text: Unbekannte Textoperation %q (unterstützt: upper, lower, title, trim)",
"template_unknown_plugin_namespace": "Unbekannter Plugin-Namespace: %s",
"template_utils_failed_get_absolute_path": "Absoluter Pfad konnte nicht ermittelt werden: %w",
"template_utils_failed_get_home_dir": "Benutzer-Home-Verzeichnis konnte nicht ermittelt werden: %w",
"template_utils_path_not_exist": "Pfad existiert nicht: %w",
"transcription_model_required": "Transkriptionsmodell ist erforderlich (verwende --transcribe-model)", "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", "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_audio_generated_successfully": "TTS-Audio erfolgreich generiert und gespeichert unter: %s\n",
@ -540,6 +593,12 @@
"update_patterns": "Muster aktualisieren", "update_patterns": "Muster aktualisieren",
"usage_header": "Verwendung:", "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.", "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.",
"util_error_accessing_config_path": "Fehler beim Zugriff auf den Standard-Konfigurationspfad: %w",
"util_error_determine_home_directory": "Benutzer-Home-Verzeichnis konnte nicht ermittelt werden: %w",
"util_error_get_absolute_path": "Absoluter Pfad konnte nicht ermittelt werden",
"util_error_path_is_empty": "Pfad ist leer",
"util_error_resolve_home_directory": "Home-Verzeichnis konnte nicht aufgelöst werden",
"util_error_resolve_symlinks": "Symbolische Links konnten nicht aufgelöst werden: %w",
"vendor_no_transcription_support": "Anbieter %s unterstützt keine Audio-Transkription", "vendor_no_transcription_support": "Anbieter %s unterstützt keine Audio-Transkription",
"vendor_not_configured": "Anbieter %s ist nicht konfiguriert", "vendor_not_configured": "Anbieter %s ist nicht konfiguriert",
"vendor_not_found": "Anbieter %s nicht gefunden", "vendor_not_found": "Anbieter %s nicht gefunden",
@ -592,4 +651,4 @@
"youtube_video_id_title_header": "VideoID: Titel", "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_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" "youtube_ytdlp_stderr_error": "Fehler beim Lesen von yt-dlp stderr"
} }

View file

@ -1,10 +1,15 @@
{ {
"abacus_models_endpoint_status": "abacus models endpoint returned status %d",
"additional_yt_dlp_args": "Additional arguments to pass to yt-dlp (e.g. '--cookies-from-browser brave')", "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", "address_to_bind_rest_api": "The address to bind the REST API",
"anthropic_stream_error": "Stream error: %v", "anthropic_stream_error": "Stream error: %v",
"api_key_secure_server_routes": "API key used to secure server routes", "api_key_secure_server_routes": "API key used to secure server routes",
"application_options_header": "Application Options:", "application_options_header": "Application Options:",
"apply_variables_to_input": "Apply variables to user input", "apply_variables_to_input": "Apply variables to user input",
"attachment_could_not_determine_mimetype": "could not determine mimetype of URL",
"attachment_file_not_exist": "file %s does not exist",
"attachment_no_content_available": "no content available",
"attachment_no_type_no_content": "attachment has no type and no content to derive it from",
"attachment_path_or_url_help": "Attachment path or URL (e.g. for OpenAI image recognition messages)", "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_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", "audio_video_file_transcribe": "Audio or video file to transcribe",
@ -15,12 +20,12 @@
"azure_api_version_question": "Enter the Azure API version (leave blank for default)", "azure_api_version_question": "Enter the Azure API version (leave blank for default)",
"azure_base_url_question": "API Base URL", "azure_base_url_question": "API Base URL",
"azure_base_url_required": "Azure base URL is required", "azure_base_url_required": "Azure base URL is required",
"azure_credential_failure": "Failed to create Azure credential",
"azure_deployments_question": "Enter your Azure deployment names (comma-separated)", "azure_deployments_question": "Enter your Azure deployment names (comma-separated)",
"azure_deployments_required": "At least one Azure deployment name is required", "azure_deployments_required": "At least one Azure deployment name is required",
"azure_failed_extract_deployment": "failed to extract deployment name from request", "azure_failed_extract_deployment": "failed to extract deployment name from request",
"azure_model_field_empty": "model field is empty in request body", "azure_model_field_empty": "model field is empty in request body",
"azure_request_body_nil": "request body is nil", "azure_request_body_nil": "request body is nil",
"azure_credential_failure": "Failed to create Azure credential",
"background_type_help": "Background type: opaque, transparent (default: opaque, only for PNG/WebP)", "background_type_help": "Background type: opaque, transparent (default: opaque, only for PNG/WebP)",
"bedrock_aws_region_label": "AWS Region", "bedrock_aws_region_label": "AWS Region",
"bedrock_converse_failed": "bedrock converse failed for model %s: %w", "bedrock_converse_failed": "bedrock converse failed for model %s: %w",
@ -37,6 +42,7 @@
"bedrock_unknown_stream_event_type": "unknown stream event type: %T", "bedrock_unknown_stream_event_type": "unknown stream event type: %T",
"cannot_convert_string": "cannot convert string %q to %v", "cannot_convert_string": "cannot convert string %q to %v",
"change_default_model": "Change default model", "change_default_model": "Change default model",
"chat_error_content_fields_misused": "can't use both Content and MultiContent properties simultaneously",
"chatter_error_empty_response": "empty response", "chatter_error_empty_response": "empty response",
"chatter_error_find_context": "could not find context %s: %v", "chatter_error_find_context": "could not find context %s: %v",
"chatter_error_find_session": "could not find session %s: %v", "chatter_error_find_session": "could not find session %s: %v",
@ -81,9 +87,13 @@
"custom_patterns_directory_question": "Enter the path to your custom patterns directory", "custom_patterns_directory_question": "Enter the path to your custom patterns directory",
"custom_patterns_label": "Custom Patterns", "custom_patterns_label": "Custom Patterns",
"custom_patterns_setup_description": "Custom Patterns - Set directory for your custom patterns", "custom_patterns_setup_description": "Custom Patterns - Set directory for your custom patterns",
"custom_patterns_warning_create_directory": "Warning: Could not create custom patterns directory %s: %v\n",
"db_error_loading_env_file": "error loading .env file: %s",
"defaults_model_context_length_question": "Enter model context length", "defaults_model_context_length_question": "Enter model context length",
"defaults_model_question": "Enter the index or the name of your default model", "defaults_model_question": "Enter the index or the name of your default model",
"defaults_setup_description": "Default AI Vendor and Model", "defaults_setup_description": "Default AI Vendor and Model",
"digitalocean_failed_parse_control_plane_url": "failed to parse DigitalOcean control plane URL: %w",
"digitalocean_model_list_unavailable": "DigitalOcean model list unavailable. Set DIGITALOCEAN_TOKEN to fetch models from the control plane",
"disable_openai_responses_api": "Disable OpenAI Responses API (default: false)", "disable_openai_responses_api": "Disable OpenAI Responses API (default: false)",
"disable_pattern_variable_replacement": "Disable pattern variable replacement", "disable_pattern_variable_replacement": "Disable pattern variable replacement",
"enable_web_search_tool": "Enable web search tool for supported models (Anthropic, OpenAI, Gemini)", "enable_web_search_tool": "Enable web search tool for supported models (Anthropic, OpenAI, Gemini)",
@ -183,8 +193,14 @@
"gemini_stream_error": "Error: %v", "gemini_stream_error": "Error: %v",
"gemini_tts_failed": "TTS generation failed: %w", "gemini_tts_failed": "TTS generation failed: %w",
"gemini_unexpected_data_type": "unexpected data type: %s, expected audio data", "gemini_unexpected_data_type": "unexpected data type: %s, expected audio data",
"gemini_voice_not_found": "voice '%s' not found",
"gemini_wav_data_invalid": "generated WAV data is invalid: %d bytes, minimum required: %d", "gemini_wav_data_invalid": "generated WAV data is invalid: %d bytes, minimum required: %d",
"gemini_wav_generation_failed": "failed to generate WAV file: %w", "gemini_wav_generation_failed": "failed to generate WAV file: %w",
"githelper_failed_clone_repository": "failed to clone repository: %w",
"githelper_failed_create_dest_directory": "failed to create destination directory: %w",
"githelper_failed_get_commit": "failed to get commit: %w",
"githelper_failed_get_head": "failed to get repository HEAD: %w",
"githelper_failed_get_tree": "failed to get tree: %w",
"grab_comments_from_youtube": "Grab comments from YouTube video and send to chat", "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_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_transcript_with_timestamps": "Grab transcript from YouTube video with timestamps and send to chat",
@ -239,6 +255,7 @@
"no_description_available": "No description available", "no_description_available": "No description available",
"no_items_found": "No %s", "no_items_found": "No %s",
"no_notification_system_available": "no notification system available", "no_notification_system_available": "no notification system available",
"notifications_no_provider_available": "no notification provider available",
"number_of_latest_patterns": "Number of latest patterns to list", "number_of_latest_patterns": "Number of latest patterns to list",
"ollama_cannot_parse_url": "Cannot parse URL '%s': %v", "ollama_cannot_parse_url": "Cannot parse URL '%s': %v",
"ollama_chat_request_failed": "Chat request failed: %v", "ollama_chat_request_failed": "Chat request failed: %v",
@ -293,6 +310,7 @@
"openai_audio_unable_to_split_acceptable_size_chunks": "unable to split file into acceptably sized 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_unsupported_audio_format": "unsupported audio format '%s'",
"openai_audio_using_model_to_transcribe_part": "Using model %s to transcribe part %d (filename: %s)...", "openai_audio_using_model_to_transcribe_part": "Using model %s to transcribe part %d (filename: %s)...",
"openai_compatible_unknown_static_model_list": "unknown static model list: %s",
"openai_failed_to_create_models_url": "failed to create models URL: %w", "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_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_decode_image_data": "failed to decode image data: %w",
@ -322,6 +340,13 @@
"patterns_download_success": "✅ Successfully downloaded and installed patterns to %s\n", "patterns_download_success": "✅ Successfully downloaded and installed patterns to %s\n",
"patterns_downloaded_temp": "Downloaded %d patterns to temporary directory\n", "patterns_downloaded_temp": "Downloaded %d patterns to temporary directory\n",
"patterns_downloading": "Downloading patterns and Populating %s...\n", "patterns_downloading": "Downloading patterns and Populating %s...\n",
"patterns_error_create_directory": "could not create pattern directory: %v",
"patterns_error_get_home_directory": "could not get home directory: %v",
"patterns_error_load_from_file": "could not load pattern from file %s: %w",
"patterns_error_read_pattern_file": "could not read pattern file %s: %v",
"patterns_error_read_unique_file": "could not read unique patterns file. Please run --updatepatterns (%s)",
"patterns_error_resolve_file_path": "could not resolve file path: %v",
"patterns_error_save_pattern": "could not save pattern: %v",
"patterns_failed_access_directory": "failed to access patterns directory '%s': %w", "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_dir": "failed to create temp directory: %w",
"patterns_failed_create_temp_folder": "failed to create temporary patterns folder: %w", "patterns_failed_create_temp_folder": "failed to create temporary patterns folder: %w",
@ -370,6 +395,8 @@
"plugin_question_bool": "%v%v (true/false, leave empty for '%s' or type '%v' to remove the value):", "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_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_question_with_default": "%v%v (leave empty for '%s' or type '%v' to remove the value):",
"plugin_registry_error_configuring_custom_patterns": "error configuring CustomPatterns: %w",
"plugin_registry_model_not_available_for_vendor": "model %s not available for vendor %s",
"plugin_setting_not_valid": "%v=%v, is not valid", "plugin_setting_not_valid": "%v=%v, is not valid",
"plugin_setup_configured": "[%v] configured", "plugin_setup_configured": "[%v] configured",
"plugin_setup_skipped": "[%v] skipped\n", "plugin_setup_skipped": "[%v] skipped\n",
@ -389,6 +416,11 @@
"send_desktop_notification": "Send desktop notification when command completes", "send_desktop_notification": "Send desktop notification when command completes",
"serve_fabric_api_ollama_endpoints": "Serve the Fabric Rest API with ollama endpoints", "serve_fabric_api_ollama_endpoints": "Serve the Fabric Rest API with ollama endpoints",
"serve_fabric_rest_api": "Serve the Fabric Rest API", "serve_fabric_rest_api": "Serve the Fabric Rest API",
"server_chat_error": "Error: %v",
"server_error_marshaling_response": "error marshaling response: %v",
"server_error_writing_response": "error writing response: %v",
"server_invalid_request_format": "Invalid request format: %v",
"sessions_creating_new": "Creating new session: %s\n",
"set_debug_level": "Set debug level (0=off, 1=basic, 2=detailed, 3=trace)", "set_debug_level": "Set debug level (0=off, 1=basic, 2=detailed, 3=trace)",
"set_frequency_penalty": "Set frequency penalty", "set_frequency_penalty": "Set frequency penalty",
"set_location_web_search": "Set location for web search results (e.g., 'America/Los_Angeles')", "set_location_web_search": "Set location for web search results (e.g., 'America/Los_Angeles')",
@ -481,6 +513,15 @@
"spotify_total_episodes_label": "**Total Episodes**: %d", "spotify_total_episodes_label": "**Total Episodes**: %d",
"spotify_url_label": "**URL**: %s", "spotify_url_label": "**URL**: %s",
"start_tag_thinking_sections": "Start tag for thinking sections", "start_tag_thinking_sections": "Start tag for thinking sections",
"storage_error_delete": "could not delete %s: %v",
"storage_error_load": "could not load %s: %v",
"storage_error_marshal": "could not marshal %s: %s",
"storage_error_read_directory": "could not read items from directory: %v",
"storage_error_rename": "could not rename %s to %s: %v",
"storage_error_resolve_directory": "could not resolve directory path: %v",
"storage_error_save": "could not save %s: %v",
"storage_error_stat_entry": "could not stat entry %s: %v",
"storage_error_unmarshal": "could not unmarshal %s: %s",
"strategies_available_header": "Available Strategies:", "strategies_available_header": "Available Strategies:",
"strategies_cloning_repository": "Cloning repository %s (path: %s)...\n", "strategies_cloning_repository": "Cloning repository %s (path: %s)...\n",
"strategies_download_success": "✅ Successfully downloaded and installed strategies to %s\n", "strategies_download_success": "✅ Successfully downloaded and installed strategies to %s\n",
@ -503,6 +544,7 @@
"template_datetime_error_invalid_unit": "invalid time unit: %q", "template_datetime_error_invalid_unit": "invalid time unit: %q",
"template_datetime_error_relative_requires_value": "relative time requires a value", "template_datetime_error_relative_requires_value": "relative time requires a value",
"template_datetime_error_unknown_operation": "datetime: unknown operation %q", "template_datetime_error_unknown_operation": "datetime: unknown operation %q",
"template_extension_error": "extension %s error: %v",
"template_file_error_expand_home_dir": "file: could not expand home directory: %v", "template_file_error_expand_home_dir": "file: could not expand home directory: %v",
"template_file_error_invalid_line_count": "file: invalid line count %q", "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_error_line_count_positive": "file: line count must be positive",
@ -525,12 +567,23 @@
"template_file_log_size_for_path": "File: size=%d for path %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_tail_returning_lines": "File: tail returning %d lines",
"template_file_log_validating_path": "File: validating path %q", "template_file_log_validating_path": "File: validating path %q",
"template_hash_open_file": "open file: %w",
"template_hash_read_file": "read file: %w",
"template_missing_required_variable": "missing required variable: %s",
"template_plugin_error": "plugin %s error: %v",
"template_processing_stuck": "template processing stuck - potential infinite loop",
"template_sys_error_env_requires_var": "env: variable name required", "template_sys_error_env_requires_var": "env: variable name required",
"template_sys_error_home": "failed to get home directory: %v", "template_sys_error_home": "failed to get home directory: %v",
"template_sys_error_hostname": "failed to get hostname: %v", "template_sys_error_hostname": "failed to get hostname: %v",
"template_sys_error_pwd": "failed to get working directory: %v", "template_sys_error_pwd": "failed to get working directory: %v",
"template_sys_error_unknown_operation": "sys: unknown operation %q", "template_sys_error_unknown_operation": "sys: unknown operation %q",
"template_sys_error_user": "failed to get current user: %v", "template_sys_error_user": "failed to get current user: %v",
"template_text_empty_input": "text: empty input for operation %q",
"template_text_unknown_operation": "text: unknown text operation %q (supported: upper, lower, title, trim)",
"template_unknown_plugin_namespace": "unknown plugin namespace: %s",
"template_utils_failed_get_absolute_path": "failed to get absolute path: %w",
"template_utils_failed_get_home_dir": "failed to get user home directory: %w",
"template_utils_path_not_exist": "path does not exist: %w",
"transcription_model_required": "transcription model is required (use --transcribe-model)", "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", "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_audio_generated_successfully": "TTS audio generated successfully and saved to: %s\n",
@ -540,6 +593,12 @@
"update_patterns": "Update patterns", "update_patterns": "Update patterns",
"usage_header": "Usage:", "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.", "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.",
"util_error_accessing_config_path": "error accessing default config path: %w",
"util_error_determine_home_directory": "could not determine user home directory: %w",
"util_error_get_absolute_path": "could not get absolute path",
"util_error_path_is_empty": "path is empty",
"util_error_resolve_home_directory": "could not resolve home directory",
"util_error_resolve_symlinks": "could not resolve symlinks: %w",
"vendor_no_transcription_support": "vendor %s does not support audio transcription", "vendor_no_transcription_support": "vendor %s does not support audio transcription",
"vendor_not_configured": "vendor %s not configured", "vendor_not_configured": "vendor %s not configured",
"vendor_not_found": "vendor %s not found", "vendor_not_found": "vendor %s not found",

View file

@ -1,10 +1,15 @@
{ {
"abacus_models_endpoint_status": "El endpoint de modelos de Abacus devolvió el estado %d",
"additional_yt_dlp_args": "Argumentos adicionales para pasar a yt-dlp (ej. '--cookies-from-browser brave')", "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", "address_to_bind_rest_api": "La dirección para vincular la API REST",
"anthropic_stream_error": "Error de transmisión: %v", "anthropic_stream_error": "Error de transmisión: %v",
"api_key_secure_server_routes": "Clave API usada para asegurar rutas del servidor", "api_key_secure_server_routes": "Clave API usada para asegurar rutas del servidor",
"application_options_header": "Opciones de la Aplicación:", "application_options_header": "Opciones de la Aplicación:",
"apply_variables_to_input": "Aplicar variables a la entrada del usuario", "apply_variables_to_input": "Aplicar variables a la entrada del usuario",
"attachment_could_not_determine_mimetype": "No se pudo determinar el tipo MIME de la URL",
"attachment_file_not_exist": "El archivo %s no existe",
"attachment_no_content_available": "No hay contenido disponible",
"attachment_no_type_no_content": "El adjunto no tiene tipo ni contenido del cual derivarlo",
"attachment_path_or_url_help": "Ruta de adjunto o URL (ej. para mensajes de reconocimiento de imagen de OpenAI)", "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_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", "audio_video_file_transcribe": "Archivo de audio o video para transcribir",
@ -37,6 +42,7 @@
"bedrock_unknown_stream_event_type": "tipo de evento de stream desconocido: %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", "cannot_convert_string": "no se puede convertir la cadena %q a %v",
"change_default_model": "Cambiar modelo predeterminado", "change_default_model": "Cambiar modelo predeterminado",
"chat_error_content_fields_misused": "No se pueden usar Content y MultiContent simultáneamente",
"chatter_error_empty_response": "respuesta vacía", "chatter_error_empty_response": "respuesta vacía",
"chatter_error_find_context": "no se pudo encontrar el contexto %s: %v", "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_find_session": "no se pudo encontrar la sesion %s: %v",
@ -81,9 +87,13 @@
"custom_patterns_directory_question": "Introduce la ruta a tu directorio de patrones personalizados", "custom_patterns_directory_question": "Introduce la ruta a tu directorio de patrones personalizados",
"custom_patterns_label": "Patrones personalizados", "custom_patterns_label": "Patrones personalizados",
"custom_patterns_setup_description": "Patrones personalizados - Establecer directorio para tus patrones personalizados", "custom_patterns_setup_description": "Patrones personalizados - Establecer directorio para tus patrones personalizados",
"custom_patterns_warning_create_directory": "Advertencia: No se pudo crear el directorio de patrones personalizados %s: %v\n",
"db_error_loading_env_file": "Error al cargar el archivo .env: %s",
"defaults_model_context_length_question": "Introduce la longitud del contexto del modelo", "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_model_question": "Introduce el índice o el nombre de tu modelo predeterminado",
"defaults_setup_description": "Proveedor y modelo de IA predeterminados", "defaults_setup_description": "Proveedor y modelo de IA predeterminados",
"digitalocean_failed_parse_control_plane_url": "No se pudo analizar la URL del plano de control de DigitalOcean: %w",
"digitalocean_model_list_unavailable": "Lista de modelos de DigitalOcean no disponible. Configure DIGITALOCEAN_TOKEN para obtener modelos del plano de control",
"disable_openai_responses_api": "Deshabilitar API de Respuestas de OpenAI (predeterminado: false)", "disable_openai_responses_api": "Deshabilitar API de Respuestas de OpenAI (predeterminado: false)",
"disable_pattern_variable_replacement": "Deshabilitar reemplazo de variables de patrón", "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)", "enable_web_search_tool": "Habilitar herramienta de búsqueda web para modelos soportados (Anthropic, OpenAI, Gemini)",
@ -183,8 +193,14 @@
"gemini_stream_error": "Error: %v", "gemini_stream_error": "Error: %v",
"gemini_tts_failed": "generación TTS fallida: %w", "gemini_tts_failed": "generación TTS fallida: %w",
"gemini_unexpected_data_type": "tipo de dato inesperado: %s, se esperaban datos de audio", "gemini_unexpected_data_type": "tipo de dato inesperado: %s, se esperaban datos de audio",
"gemini_voice_not_found": "Voz '%s' no encontrada",
"gemini_wav_data_invalid": "datos WAV generados inválidos: %d bytes, mínimo requerido: %d", "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", "gemini_wav_generation_failed": "no se pudo generar el archivo WAV: %w",
"githelper_failed_clone_repository": "No se pudo clonar el repositorio: %w",
"githelper_failed_create_dest_directory": "No se pudo crear el directorio de destino: %w",
"githelper_failed_get_commit": "No se pudo obtener el commit: %w",
"githelper_failed_get_head": "No se pudo obtener el HEAD del repositorio: %w",
"githelper_failed_get_tree": "No se pudo obtener el árbol: %w",
"grab_comments_from_youtube": "Obtener comentarios del video de YouTube y enviar al chat", "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_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_transcript_with_timestamps": "Obtener transcripción del video de YouTube con marcas de tiempo y enviar al chat",
@ -239,6 +255,7 @@
"no_description_available": "No hay descripción disponible", "no_description_available": "No hay descripción disponible",
"no_items_found": "No hay %s", "no_items_found": "No hay %s",
"no_notification_system_available": "no hay sistema de notificaciones disponible", "no_notification_system_available": "no hay sistema de notificaciones disponible",
"notifications_no_provider_available": "No hay proveedor de notificaciones disponible",
"number_of_latest_patterns": "Número de patrones más recientes a listar", "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_cannot_parse_url": "No se puede analizar la URL '%s': %v",
"ollama_chat_request_failed": "Solicitud de chat fallida: %v", "ollama_chat_request_failed": "Solicitud de chat fallida: %v",
@ -293,6 +310,7 @@
"openai_audio_unable_to_split_acceptable_size_chunks": "no se pudo dividir el archivo en fragmentos de tamaño aceptable", "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_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_audio_using_model_to_transcribe_part": "Usando el modelo %s para transcribir la parte %d (archivo: %s)...",
"openai_compatible_unknown_static_model_list": "Lista de modelos estática desconocida: %s",
"openai_failed_to_create_models_url": "error al crear URL de modelos: %w", "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_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_decode_image_data": "no se pudieron decodificar los datos de la imagen: %w",
@ -322,6 +340,13 @@
"patterns_download_success": "✅ Patrones descargados e instalados correctamente en %s\\n", "patterns_download_success": "✅ Patrones descargados e instalados correctamente en %s\\n",
"patterns_downloaded_temp": "Se descargaron %d patrones al directorio temporal\\n", "patterns_downloaded_temp": "Se descargaron %d patrones al directorio temporal\\n",
"patterns_downloading": "Descargando patrones y llenando %s...\\n", "patterns_downloading": "Descargando patrones y llenando %s...\\n",
"patterns_error_create_directory": "No se pudo crear el directorio de patrones: %v",
"patterns_error_get_home_directory": "No se pudo obtener el directorio de inicio: %v",
"patterns_error_load_from_file": "No se pudo cargar el patrón del archivo %s: %w",
"patterns_error_read_pattern_file": "No se pudo leer el archivo de patrones %s: %v",
"patterns_error_read_unique_file": "No se pudo leer el archivo de patrones únicos. Ejecute --updatepatterns (%s)",
"patterns_error_resolve_file_path": "No se pudo resolver la ruta del archivo: %v",
"patterns_error_save_pattern": "No se pudo guardar el patrón: %v",
"patterns_failed_access_directory": "error al acceder al directorio de patrones '%s': %w", "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_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_create_temp_folder": "no se pudo crear la carpeta temporal de patrones: %w",
@ -370,6 +395,8 @@
"plugin_question_bool": "%v%v (true/false, deja vacío para '%s' o escribe '%v' para eliminar el valor):", "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_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_question_with_default": "%v%v (deja vacío para '%s' o escribe '%v' para eliminar el valor):",
"plugin_registry_error_configuring_custom_patterns": "Error al configurar CustomPatterns: %w",
"plugin_registry_model_not_available_for_vendor": "Modelo %s no disponible para el proveedor %s",
"plugin_setting_not_valid": "%v=%v no es válido", "plugin_setting_not_valid": "%v=%v no es válido",
"plugin_setup_configured": "[%v] configurado", "plugin_setup_configured": "[%v] configurado",
"plugin_setup_skipped": "[%v] omitido\\n", "plugin_setup_skipped": "[%v] omitido\\n",
@ -389,6 +416,11 @@
"send_desktop_notification": "Enviar notificación de escritorio cuando se complete el comando", "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_api_ollama_endpoints": "Servir la API REST de Fabric con endpoints de ollama",
"serve_fabric_rest_api": "Servir la API REST de Fabric", "serve_fabric_rest_api": "Servir la API REST de Fabric",
"server_chat_error": "Error: %v",
"server_error_marshaling_response": "error al serializar la respuesta: %v",
"server_error_writing_response": "error al escribir la respuesta: %v",
"server_invalid_request_format": "Formato de solicitud no válido: %v",
"sessions_creating_new": "Creando nueva sesión: %s\n",
"set_debug_level": "Establecer nivel de depuración (0=apagado, 1=básico, 2=detallado, 3=rastreo)", "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_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_location_web_search": "Establecer ubicación para resultados de búsqueda web (ej., 'America/Los_Angeles')",
@ -481,6 +513,15 @@
"spotify_total_episodes_label": "**Total de episodios**: %d", "spotify_total_episodes_label": "**Total de episodios**: %d",
"spotify_url_label": "**URL**: %s", "spotify_url_label": "**URL**: %s",
"start_tag_thinking_sections": "Etiqueta de inicio para secciones de pensamiento", "start_tag_thinking_sections": "Etiqueta de inicio para secciones de pensamiento",
"storage_error_delete": "No se pudo eliminar %s: %v",
"storage_error_load": "No se pudo cargar %s: %v",
"storage_error_marshal": "No se pudo serializar %s: %s",
"storage_error_read_directory": "No se pudieron leer los elementos del directorio: %v",
"storage_error_rename": "No se pudo renombrar %s a %s: %v",
"storage_error_resolve_directory": "No se pudo resolver la ruta del directorio: %v",
"storage_error_save": "No se pudo guardar %s: %v",
"storage_error_stat_entry": "No se pudo obtener información de la entrada %s: %v",
"storage_error_unmarshal": "No se pudo deserializar %s: %s",
"strategies_available_header": "Estrategias disponibles:", "strategies_available_header": "Estrategias disponibles:",
"strategies_cloning_repository": "Clonando el repositorio %s (ruta: %s)...\\n", "strategies_cloning_repository": "Clonando el repositorio %s (ruta: %s)...\\n",
"strategies_download_success": "✅ Estrategias descargadas e instaladas correctamente en %s\\n", "strategies_download_success": "✅ Estrategias descargadas e instaladas correctamente en %s\\n",
@ -503,6 +544,7 @@
"template_datetime_error_invalid_unit": "invalid time unit: %q", "template_datetime_error_invalid_unit": "invalid time unit: %q",
"template_datetime_error_relative_requires_value": "relative time requires a value", "template_datetime_error_relative_requires_value": "relative time requires a value",
"template_datetime_error_unknown_operation": "datetime: unknown operation %q", "template_datetime_error_unknown_operation": "datetime: unknown operation %q",
"template_extension_error": "Error en extensión %s: %v",
"template_file_error_expand_home_dir": "archivo: no se pudo expandir el directorio home: %v", "template_file_error_expand_home_dir": "archivo: no se pudo expandir el directorio home: %v",
"template_file_error_invalid_line_count": "archivo: número de líneas no válido %q", "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_error_line_count_positive": "archivo: el número de líneas debe ser positivo",
@ -525,12 +567,23 @@
"template_file_log_size_for_path": "Archivo: tamaño=%d para la ruta %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_tail_returning_lines": "Archivo: tail devuelve %d líneas",
"template_file_log_validating_path": "Archivo: validando ruta %q", "template_file_log_validating_path": "Archivo: validando ruta %q",
"template_hash_open_file": "Abrir archivo: %w",
"template_hash_read_file": "Leer archivo: %w",
"template_missing_required_variable": "Variable requerida faltante: %s",
"template_plugin_error": "Error en plugin %s: %v",
"template_processing_stuck": "Procesamiento de plantilla bloqueado - posible bucle infinito",
"template_sys_error_env_requires_var": "env: variable name required", "template_sys_error_env_requires_var": "env: variable name required",
"template_sys_error_home": "failed to get home directory: %v", "template_sys_error_home": "failed to get home directory: %v",
"template_sys_error_hostname": "failed to get hostname: %v", "template_sys_error_hostname": "failed to get hostname: %v",
"template_sys_error_pwd": "failed to get working directory: %v", "template_sys_error_pwd": "failed to get working directory: %v",
"template_sys_error_unknown_operation": "sys: unknown operation %q", "template_sys_error_unknown_operation": "sys: unknown operation %q",
"template_sys_error_user": "failed to get current user: %v", "template_sys_error_user": "failed to get current user: %v",
"template_text_empty_input": "Texto: entrada vacía para la operación %q",
"template_text_unknown_operation": "Texto: operación de texto desconocida %q (soportadas: upper, lower, title, trim)",
"template_unknown_plugin_namespace": "Espacio de nombres de plugin desconocido: %s",
"template_utils_failed_get_absolute_path": "No se pudo obtener la ruta absoluta: %w",
"template_utils_failed_get_home_dir": "No se pudo obtener el directorio de inicio del usuario: %w",
"template_utils_path_not_exist": "La ruta no existe: %w",
"transcription_model_required": "se requiere un modelo de transcripción (usa --transcribe-model)", "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", "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_audio_generated_successfully": "Audio TTS generado exitosamente y guardado en: %s\n",
@ -540,6 +593,12 @@
"update_patterns": "Actualizar patrones", "update_patterns": "Actualizar patrones",
"usage_header": "Uso:", "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.", "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.",
"util_error_accessing_config_path": "Error al acceder a la ruta de configuración predeterminada: %w",
"util_error_determine_home_directory": "No se pudo determinar el directorio de inicio del usuario: %w",
"util_error_get_absolute_path": "No se pudo obtener la ruta absoluta",
"util_error_path_is_empty": "La ruta está vacía",
"util_error_resolve_home_directory": "No se pudo resolver el directorio de inicio",
"util_error_resolve_symlinks": "No se pudieron resolver los enlaces simbólicos: %w",
"vendor_no_transcription_support": "el proveedor %s no admite transcripción de audio", "vendor_no_transcription_support": "el proveedor %s no admite transcripción de audio",
"vendor_not_configured": "el proveedor %s no está configurado", "vendor_not_configured": "el proveedor %s no está configurado",
"vendor_not_found": "proveedor %s no encontrado", "vendor_not_found": "proveedor %s no encontrado",

View file

@ -1,10 +1,15 @@
{ {
"abacus_models_endpoint_status": "نقطه پایانی مدل‌های Abacus وضعیت %d را برگرداند",
"additional_yt_dlp_args": "آرگومان‌های اضافی برای ارسال به yt-dlp (مثال: '--cookies-from-browser brave')", "additional_yt_dlp_args": "آرگومان‌های اضافی برای ارسال به yt-dlp (مثال: '--cookies-from-browser brave')",
"address_to_bind_rest_api": "آدرس برای متصل کردن API REST", "address_to_bind_rest_api": "آدرس برای متصل کردن API REST",
"anthropic_stream_error": "خطای جریان: %v", "anthropic_stream_error": "خطای جریان: %v",
"api_key_secure_server_routes": "کلید API برای امن‌سازی مسیرهای سرور", "api_key_secure_server_routes": "کلید API برای امن‌سازی مسیرهای سرور",
"application_options_header": "گزینه‌های برنامه:", "application_options_header": "گزینه‌های برنامه:",
"apply_variables_to_input": "اعمال متغیرها به ورودی کاربر", "apply_variables_to_input": "اعمال متغیرها به ورودی کاربر",
"attachment_could_not_determine_mimetype": "امکان تعیین نوع MIME آدرس URL وجود ندارد",
"attachment_file_not_exist": "فایل %s وجود ندارد",
"attachment_no_content_available": "محتوایی در دسترس نیست",
"attachment_no_type_no_content": "پیوست نوع و محتوایی برای استخراج ندارد",
"attachment_path_or_url_help": "مسیر ضمیمه یا URL (مثال برای پیام‌های تشخیص تصویر OpenAI)", "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_output_file_specified_but_not_tts_model": "فایل خروجی صوتی '%s' مشخص شده اما مدل '%s' یک مدل TTS نیست. لطفاً از مدل TTS مثل gemini-2.5-flash-preview-tts استفاده کنید",
"audio_video_file_transcribe": "فایل صوتی یا ویدیویی برای رونویسی", "audio_video_file_transcribe": "فایل صوتی یا ویدیویی برای رونویسی",
@ -15,12 +20,12 @@
"azure_api_version_question": "نسخه API Azure را وارد کنید (برای پیش‌فرض خالی بگذارید)", "azure_api_version_question": "نسخه API Azure را وارد کنید (برای پیش‌فرض خالی بگذارید)",
"azure_base_url_question": "URL پایه API", "azure_base_url_question": "URL پایه API",
"azure_base_url_required": "URL پایه Azure الزامی است", "azure_base_url_required": "URL پایه Azure الزامی است",
"azure_credential_failure": "ایجاد اعتبارنامه Azure ناموفق بود",
"azure_deployments_question": "نام‌های استقرار Azure خود را وارد کنید (با کاما جدا شده)", "azure_deployments_question": "نام‌های استقرار Azure خود را وارد کنید (با کاما جدا شده)",
"azure_deployments_required": "حداقل یک نام استقرار Azure الزامی است", "azure_deployments_required": "حداقل یک نام استقرار Azure الزامی است",
"azure_failed_extract_deployment": "استخراج نام استقرار از درخواست ناموفق بود", "azure_failed_extract_deployment": "استخراج نام استقرار از درخواست ناموفق بود",
"azure_model_field_empty": "فیلد مدل در بدنه درخواست خالی است", "azure_model_field_empty": "فیلد مدل در بدنه درخواست خالی است",
"azure_request_body_nil": "بدنه درخواست خالی است", "azure_request_body_nil": "بدنه درخواست خالی است",
"azure_credential_failure": "ایجاد اعتبارنامه Azure ناموفق بود",
"background_type_help": "نوع پس‌زمینه: opaque، transparent (پیش‌فرض: opaque، فقط برای PNG/WebP)", "background_type_help": "نوع پس‌زمینه: opaque، transparent (پیش‌فرض: opaque، فقط برای PNG/WebP)",
"bedrock_aws_region_label": "منطقه AWS", "bedrock_aws_region_label": "منطقه AWS",
"bedrock_converse_failed": "bedrock converse برای مدل %s ناموفق بود: %w", "bedrock_converse_failed": "bedrock converse برای مدل %s ناموفق بود: %w",
@ -37,6 +42,7 @@
"bedrock_unknown_stream_event_type": "نوع رویداد جریان ناشناخته: %T", "bedrock_unknown_stream_event_type": "نوع رویداد جریان ناشناخته: %T",
"cannot_convert_string": "نمی‌توان رشته %q را به %v تبدیل کرد", "cannot_convert_string": "نمی‌توان رشته %q را به %v تبدیل کرد",
"change_default_model": "تغییر مدل پیش‌فرض", "change_default_model": "تغییر مدل پیش‌فرض",
"chat_error_content_fields_misused": "امکان استفاده همزمان از Content و MultiContent وجود ندارد",
"chatter_error_empty_response": "پاسخ خالی", "chatter_error_empty_response": "پاسخ خالی",
"chatter_error_find_context": "زمينه %s پيدا نشد: %v", "chatter_error_find_context": "زمينه %s پيدا نشد: %v",
"chatter_error_find_session": "نشست %s پيدا نشد: %v", "chatter_error_find_session": "نشست %s پيدا نشد: %v",
@ -81,9 +87,13 @@
"custom_patterns_directory_question": "مسیر دایرکتوری الگوهای سفارشی خود را وارد کنید", "custom_patterns_directory_question": "مسیر دایرکتوری الگوهای سفارشی خود را وارد کنید",
"custom_patterns_label": "الگوهای سفارشی", "custom_patterns_label": "الگوهای سفارشی",
"custom_patterns_setup_description": "الگوهای سفارشی - تنظیم دایرکتوری برای الگوهای سفارشی شما", "custom_patterns_setup_description": "الگوهای سفارشی - تنظیم دایرکتوری برای الگوهای سفارشی شما",
"custom_patterns_warning_create_directory": "هشدار: امکان ایجاد پوشه الگوهای سفارشی %s وجود ندارد: %v\n",
"db_error_loading_env_file": "خطا در بارگذاری فایل .env: %s",
"defaults_model_context_length_question": "طول زمینه مدل را وارد کنید", "defaults_model_context_length_question": "طول زمینه مدل را وارد کنید",
"defaults_model_question": "شاخص یا نام مدل پیش‌فرض خود را وارد کنید", "defaults_model_question": "شاخص یا نام مدل پیش‌فرض خود را وارد کنید",
"defaults_setup_description": "ارائه‌دهنده و مدل هوش مصنوعی پیش‌فرض", "defaults_setup_description": "ارائه‌دهنده و مدل هوش مصنوعی پیش‌فرض",
"digitalocean_failed_parse_control_plane_url": "تجزیه URL صفحه کنترل DigitalOcean ناموفق بود: %w",
"digitalocean_model_list_unavailable": "لیست مدل‌های DigitalOcean در دسترس نیست. DIGITALOCEAN_TOKEN را تنظیم کنید تا مدل‌ها از صفحه کنترل دریافت شوند",
"disable_openai_responses_api": "غیرفعال کردن API OpenAI Responses (پیش‌فرض: false)", "disable_openai_responses_api": "غیرفعال کردن API OpenAI Responses (پیش‌فرض: false)",
"disable_pattern_variable_replacement": "غیرفعال کردن جایگزینی متغیرهای الگو", "disable_pattern_variable_replacement": "غیرفعال کردن جایگزینی متغیرهای الگو",
"enable_web_search_tool": "فعال‌سازی ابزار جستجوی وب برای مدل‌های پشتیبانی شده (Anthropic، OpenAI، Gemini)", "enable_web_search_tool": "فعال‌سازی ابزار جستجوی وب برای مدل‌های پشتیبانی شده (Anthropic، OpenAI، Gemini)",
@ -183,8 +193,14 @@
"gemini_stream_error": "خطا: %v", "gemini_stream_error": "خطا: %v",
"gemini_tts_failed": "تولید TTS ناموفق بود: %w", "gemini_tts_failed": "تولید TTS ناموفق بود: %w",
"gemini_unexpected_data_type": "نوع داده غیرمنتظره: %s، داده صوتی مورد انتظار بود", "gemini_unexpected_data_type": "نوع داده غیرمنتظره: %s، داده صوتی مورد انتظار بود",
"gemini_voice_not_found": "صدای '%s' یافت نشد",
"gemini_wav_data_invalid": "داده WAV تولید شده نامعتبر است: %d بایت، حداقل مورد نیاز: %d", "gemini_wav_data_invalid": "داده WAV تولید شده نامعتبر است: %d بایت، حداقل مورد نیاز: %d",
"gemini_wav_generation_failed": "تولید فایل WAV ناموفق بود: %w", "gemini_wav_generation_failed": "تولید فایل WAV ناموفق بود: %w",
"githelper_failed_clone_repository": "شبیه‌سازی مخزن ناموفق بود: %w",
"githelper_failed_create_dest_directory": "ایجاد پوشه مقصد ناموفق بود: %w",
"githelper_failed_get_commit": "دریافت کامیت ناموفق بود: %w",
"githelper_failed_get_head": "دریافت HEAD مخزن ناموفق بود: %w",
"githelper_failed_get_tree": "دریافت درخت ناموفق بود: %w",
"grab_comments_from_youtube": "دریافت نظرات از ویدیو یوتیوب و ارسال به گفتگو", "grab_comments_from_youtube": "دریافت نظرات از ویدیو یوتیوب و ارسال به گفتگو",
"grab_transcript_from_youtube": "دریافت رونوشت از ویدیو یوتیوب و ارسال به گفتگو (به طور پیش‌فرض استفاده می‌شود).", "grab_transcript_from_youtube": "دریافت رونوشت از ویدیو یوتیوب و ارسال به گفتگو (به طور پیش‌فرض استفاده می‌شود).",
"grab_transcript_with_timestamps": "دریافت رونوشت از ویدیو یوتیوب با مهر زمان و ارسال به گفتگو", "grab_transcript_with_timestamps": "دریافت رونوشت از ویدیو یوتیوب با مهر زمان و ارسال به گفتگو",
@ -239,6 +255,7 @@
"no_description_available": "توضیحی در دسترس نیست", "no_description_available": "توضیحی در دسترس نیست",
"no_items_found": "هیچ %s", "no_items_found": "هیچ %s",
"no_notification_system_available": "هیچ سیستم اعلان‌رسانی در دسترس نیست", "no_notification_system_available": "هیچ سیستم اعلان‌رسانی در دسترس نیست",
"notifications_no_provider_available": "ارائه‌دهنده اعلان در دسترس نیست",
"number_of_latest_patterns": "تعداد جدیدترین الگوها برای فهرست", "number_of_latest_patterns": "تعداد جدیدترین الگوها برای فهرست",
"ollama_cannot_parse_url": "نمی‌توان URL '%s' را تجزیه کرد: %v", "ollama_cannot_parse_url": "نمی‌توان URL '%s' را تجزیه کرد: %v",
"ollama_chat_request_failed": "درخواست چت ناموفق بود: %v", "ollama_chat_request_failed": "درخواست چت ناموفق بود: %v",
@ -293,6 +310,7 @@
"openai_audio_unable_to_split_acceptable_size_chunks": "امکان تقسیم فایل به بخش‌های قابل قبول وجود ندارد", "openai_audio_unable_to_split_acceptable_size_chunks": "امکان تقسیم فایل به بخش‌های قابل قبول وجود ندارد",
"openai_audio_unsupported_audio_format": "فرمت صوتی پشتیبانی نشده '%s'", "openai_audio_unsupported_audio_format": "فرمت صوتی پشتیبانی نشده '%s'",
"openai_audio_using_model_to_transcribe_part": "استفاده از مدل %s برای رونویسی بخش %d (نام فایل: %s)...", "openai_audio_using_model_to_transcribe_part": "استفاده از مدل %s برای رونویسی بخش %d (نام فایل: %s)...",
"openai_compatible_unknown_static_model_list": "لیست مدل ایستا ناشناخته: %s",
"openai_failed_to_create_models_url": "ایجاد URL مدل‌ها ناموفق بود: %w", "openai_failed_to_create_models_url": "ایجاد URL مدل‌ها ناموفق بود: %w",
"openai_image_failed_to_create_directory": "ایجاد پوشه %s ناموفق بود: %w", "openai_image_failed_to_create_directory": "ایجاد پوشه %s ناموفق بود: %w",
"openai_image_failed_to_decode_image_data": "رمزگشایی داده‌های تصویر ناموفق بود: %w", "openai_image_failed_to_decode_image_data": "رمزگشایی داده‌های تصویر ناموفق بود: %w",
@ -322,6 +340,13 @@
"patterns_download_success": "✅ الگوها با موفقیت در %s دانلود و نصب شدند\\n", "patterns_download_success": "✅ الگوها با موفقیت در %s دانلود و نصب شدند\\n",
"patterns_downloaded_temp": "%d الگو در پوشه موقت دانلود شد\\n", "patterns_downloaded_temp": "%d الگو در پوشه موقت دانلود شد\\n",
"patterns_downloading": "در حال دانلود الگوها و پر کردن %s...\\n", "patterns_downloading": "در حال دانلود الگوها و پر کردن %s...\\n",
"patterns_error_create_directory": "ایجاد پوشه الگو ناموفق بود: %v",
"patterns_error_get_home_directory": "دریافت پوشه خانگی ناموفق بود: %v",
"patterns_error_load_from_file": "بارگذاری الگو از فایل %s ناموفق بود: %w",
"patterns_error_read_pattern_file": "خواندن فایل الگو %s ناموفق بود: %v",
"patterns_error_read_unique_file": "خواندن فایل الگوهای یکتا ناموفق بود. لطفاً --updatepatterns را اجرا کنید (%s)",
"patterns_error_resolve_file_path": "حل مسیر فایل ناموفق بود: %v",
"patterns_error_save_pattern": "ذخیره الگو ناموفق بود: %v",
"patterns_failed_access_directory": "دسترسی به پوشه الگو '%s' ناموفق بود: %w", "patterns_failed_access_directory": "دسترسی به پوشه الگو '%s' ناموفق بود: %w",
"patterns_failed_create_temp_dir": "ایجاد پوشه موقت ناموفق بود: %w", "patterns_failed_create_temp_dir": "ایجاد پوشه موقت ناموفق بود: %w",
"patterns_failed_create_temp_folder": "ایجاد پوشه موقت الگوها ناموفق بود: %w", "patterns_failed_create_temp_folder": "ایجاد پوشه موقت الگوها ناموفق بود: %w",
@ -370,6 +395,8 @@
"plugin_question_bool": "%v%v (true/false، برای '%s' خالی بگذارید یا '%v' را برای حذف مقدار بنویسید):", "plugin_question_bool": "%v%v (true/false، برای '%s' خالی بگذارید یا '%v' را برای حذف مقدار بنویسید):",
"plugin_question_optional": "%v%v (برای رد کردن خالی بگذارید):", "plugin_question_optional": "%v%v (برای رد کردن خالی بگذارید):",
"plugin_question_with_default": "%v%v (برای '%s' خالی بگذارید یا '%v' را برای حذف مقدار بنویسید):", "plugin_question_with_default": "%v%v (برای '%s' خالی بگذارید یا '%v' را برای حذف مقدار بنویسید):",
"plugin_registry_error_configuring_custom_patterns": "خطا در پیکربندی CustomPatterns: %w",
"plugin_registry_model_not_available_for_vendor": "مدل %s برای ارائه‌دهنده %s در دسترس نیست",
"plugin_setting_not_valid": "%v=%v معتبر نیست", "plugin_setting_not_valid": "%v=%v معتبر نیست",
"plugin_setup_configured": "[%v] پیکربندی شد", "plugin_setup_configured": "[%v] پیکربندی شد",
"plugin_setup_skipped": "[%v] رد شد\\n", "plugin_setup_skipped": "[%v] رد شد\\n",
@ -389,6 +416,11 @@
"send_desktop_notification": "ارسال اعلان دسک‌تاپ هنگام تکمیل دستور", "send_desktop_notification": "ارسال اعلان دسک‌تاپ هنگام تکمیل دستور",
"serve_fabric_api_ollama_endpoints": "سرویس API REST Fabric با نقاط پایانی ollama", "serve_fabric_api_ollama_endpoints": "سرویس API REST Fabric با نقاط پایانی ollama",
"serve_fabric_rest_api": "سرویس API REST Fabric", "serve_fabric_rest_api": "سرویس API REST Fabric",
"server_chat_error": "خطا: %v",
"server_error_marshaling_response": "خطا در سریال‌سازی پاسخ: %v",
"server_error_writing_response": "خطا در نوشتن پاسخ: %v",
"server_invalid_request_format": "فرمت درخواست نامعتبر: %v",
"sessions_creating_new": "ایجاد نشست جدید: %s\n",
"set_debug_level": "تنظیم سطح اشکال‌زدایی (0=خاموش، 1=پایه، 2=تفصیلی، 3=ردیابی)", "set_debug_level": "تنظیم سطح اشکال‌زدایی (0=خاموش، 1=پایه، 2=تفصیلی، 3=ردیابی)",
"set_frequency_penalty": "تنظیم جریمه فرکانس", "set_frequency_penalty": "تنظیم جریمه فرکانس",
"set_location_web_search": "تنظیم مکان برای نتایج جستجوی وب (مثال: 'America/Los_Angeles')", "set_location_web_search": "تنظیم مکان برای نتایج جستجوی وب (مثال: 'America/Los_Angeles')",
@ -481,6 +513,15 @@
"spotify_total_episodes_label": "**مجموع اپیزودها**: %d", "spotify_total_episodes_label": "**مجموع اپیزودها**: %d",
"spotify_url_label": "**URL**: %s", "spotify_url_label": "**URL**: %s",
"start_tag_thinking_sections": "تگ شروع برای بخش‌های تفکر", "start_tag_thinking_sections": "تگ شروع برای بخش‌های تفکر",
"storage_error_delete": "حذف %s ناموفق بود: %v",
"storage_error_load": "بارگذاری %s ناموفق بود: %v",
"storage_error_marshal": "سریال‌سازی %s ناموفق بود: %s",
"storage_error_read_directory": "خواندن موارد از پوشه ناموفق بود: %v",
"storage_error_rename": "تغییر نام %s به %s ناموفق بود: %v",
"storage_error_resolve_directory": "حل مسیر پوشه ناموفق بود: %v",
"storage_error_save": "ذخیره %s ناموفق بود: %v",
"storage_error_stat_entry": "دریافت اطلاعات ورودی %s ناموفق بود: %v",
"storage_error_unmarshal": "بازسریال‌سازی %s ناموفق بود: %s",
"strategies_available_header": "راهبردهای موجود:", "strategies_available_header": "راهبردهای موجود:",
"strategies_cloning_repository": "در حال کلون کردن مخزن %s (مسیر: %s)...\\n", "strategies_cloning_repository": "در حال کلون کردن مخزن %s (مسیر: %s)...\\n",
"strategies_download_success": "✅ راهبردها با موفقیت در %s دانلود و نصب شدند\\n", "strategies_download_success": "✅ راهبردها با موفقیت در %s دانلود و نصب شدند\\n",
@ -503,6 +544,7 @@
"template_datetime_error_invalid_unit": "invalid time unit: %q", "template_datetime_error_invalid_unit": "invalid time unit: %q",
"template_datetime_error_relative_requires_value": "relative time requires a value", "template_datetime_error_relative_requires_value": "relative time requires a value",
"template_datetime_error_unknown_operation": "datetime: unknown operation %q", "template_datetime_error_unknown_operation": "datetime: unknown operation %q",
"template_extension_error": "خطای افزونه %s: %v",
"template_file_error_expand_home_dir": "فایل: گسترش پوشه خانگی ممکن نشد: %v", "template_file_error_expand_home_dir": "فایل: گسترش پوشه خانگی ممکن نشد: %v",
"template_file_error_invalid_line_count": "فایل: تعداد خط نامعتبر %q", "template_file_error_invalid_line_count": "فایل: تعداد خط نامعتبر %q",
"template_file_error_line_count_positive": "فایل: تعداد خط باید مثبت باشد", "template_file_error_line_count_positive": "فایل: تعداد خط باید مثبت باشد",
@ -525,12 +567,23 @@
"template_file_log_size_for_path": "فایل: size=%d برای مسیر %q", "template_file_log_size_for_path": "فایل: size=%d برای مسیر %q",
"template_file_log_tail_returning_lines": "فایل: tail در حال بازگرداندن %d خط است", "template_file_log_tail_returning_lines": "فایل: tail در حال بازگرداندن %d خط است",
"template_file_log_validating_path": "فایل: در حال اعتبارسنجی مسیر %q", "template_file_log_validating_path": "فایل: در حال اعتبارسنجی مسیر %q",
"template_hash_open_file": "باز کردن فایل: %w",
"template_hash_read_file": "خواندن فایل: %w",
"template_missing_required_variable": "متغیر الزامی موجود نیست: %s",
"template_plugin_error": "خطای پلاگین %s: %v",
"template_processing_stuck": "پردازش قالب متوقف شده - احتمال حلقه بی‌نهایت",
"template_sys_error_env_requires_var": "env: variable name required", "template_sys_error_env_requires_var": "env: variable name required",
"template_sys_error_home": "failed to get home directory: %v", "template_sys_error_home": "failed to get home directory: %v",
"template_sys_error_hostname": "failed to get hostname: %v", "template_sys_error_hostname": "failed to get hostname: %v",
"template_sys_error_pwd": "failed to get working directory: %v", "template_sys_error_pwd": "failed to get working directory: %v",
"template_sys_error_unknown_operation": "sys: unknown operation %q", "template_sys_error_unknown_operation": "sys: unknown operation %q",
"template_sys_error_user": "failed to get current user: %v", "template_sys_error_user": "failed to get current user: %v",
"template_text_empty_input": "متن: ورودی خالی برای عملیات %q",
"template_text_unknown_operation": "متن: عملیات متنی ناشناخته %q (پشتیبانی شده: upper, lower, title, trim)",
"template_unknown_plugin_namespace": "فضای نام پلاگین ناشناخته: %s",
"template_utils_failed_get_absolute_path": "دریافت مسیر مطلق ناموفق بود: %w",
"template_utils_failed_get_home_dir": "دریافت پوشه خانگی کاربر ناموفق بود: %w",
"template_utils_path_not_exist": "مسیر وجود ندارد: %w",
"transcription_model_required": "مدل رونویسی الزامی است (از --transcribe-model استفاده کنید)", "transcription_model_required": "مدل رونویسی الزامی است (از --transcribe-model استفاده کنید)",
"transparent_background_png_webp_only": "پس‌زمینه شفاف فقط با فرمت‌های PNG و WebP قابل استفاده است، نه %s", "transparent_background_png_webp_only": "پس‌زمینه شفاف فقط با فرمت‌های PNG و WebP قابل استفاده است، نه %s",
"tts_audio_generated_successfully": "صوت TTS با موفقیت ایجاد و ذخیره شد در: %s\n", "tts_audio_generated_successfully": "صوت TTS با موفقیت ایجاد و ذخیره شد در: %s\n",
@ -540,6 +593,12 @@
"update_patterns": "به‌روزرسانی الگوها", "update_patterns": "به‌روزرسانی الگوها",
"usage_header": "استفاده:", "usage_header": "استفاده:",
"use_model_defaults_raw_help": "از مقادیر پیش‌فرض مدل بدون ارسال گزینه‌های چت (temperature، top_p و غیره) استفاده می‌کند. فقط بر ارائه‌دهندگان سازگار با OpenAI تأثیر می‌گذارد. مدل‌های Anthropic همواره برای رعایت نیازهای خاص هر مدل از انتخاب هوشمند پارامتر استفاده می‌کنند.", "use_model_defaults_raw_help": "از مقادیر پیش‌فرض مدل بدون ارسال گزینه‌های چت (temperature، top_p و غیره) استفاده می‌کند. فقط بر ارائه‌دهندگان سازگار با OpenAI تأثیر می‌گذارد. مدل‌های Anthropic همواره برای رعایت نیازهای خاص هر مدل از انتخاب هوشمند پارامتر استفاده می‌کنند.",
"util_error_accessing_config_path": "خطا در دسترسی به مسیر پیکربندی پیش‌فرض: %w",
"util_error_determine_home_directory": "تعیین پوشه خانگی کاربر ناموفق بود: %w",
"util_error_get_absolute_path": "دریافت مسیر مطلق ناموفق بود",
"util_error_path_is_empty": "مسیر خالی است",
"util_error_resolve_home_directory": "حل پوشه خانگی ناموفق بود",
"util_error_resolve_symlinks": "حل پیوندهای نمادین ناموفق بود: %w",
"vendor_no_transcription_support": "تامین‌کننده %s از رونویسی صوتی پشتیبانی نمی‌کند", "vendor_no_transcription_support": "تامین‌کننده %s از رونویسی صوتی پشتیبانی نمی‌کند",
"vendor_not_configured": "تامین‌کننده %s پیکربندی نشده است", "vendor_not_configured": "تامین‌کننده %s پیکربندی نشده است",
"vendor_not_found": "ارائه‌دهنده %s یافت نشد", "vendor_not_found": "ارائه‌دهنده %s یافت نشد",

View file

@ -1,10 +1,15 @@
{ {
"abacus_models_endpoint_status": "Le point de terminaison des modèles Abacus a renvoyé le statut %d",
"additional_yt_dlp_args": "Arguments supplémentaires à passer à yt-dlp (ex. '--cookies-from-browser brave')", "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", "address_to_bind_rest_api": "Adresse pour lier l'API REST",
"anthropic_stream_error": "Erreur de flux : %v", "anthropic_stream_error": "Erreur de flux : %v",
"api_key_secure_server_routes": "Clé API utilisée pour sécuriser les routes du serveur", "api_key_secure_server_routes": "Clé API utilisée pour sécuriser les routes du serveur",
"application_options_header": "Options de l'application :", "application_options_header": "Options de l'application :",
"apply_variables_to_input": "Appliquer les variables à l'entrée utilisateur", "apply_variables_to_input": "Appliquer les variables à l'entrée utilisateur",
"attachment_could_not_determine_mimetype": "Impossible de déterminer le type MIME de l'URL",
"attachment_file_not_exist": "Le fichier %s n'existe pas",
"attachment_no_content_available": "Aucun contenu disponible",
"attachment_no_type_no_content": "La pièce jointe n'a ni type ni contenu pour le déduire",
"attachment_path_or_url_help": "Chemin de pièce jointe ou URL (ex. pour les messages de reconnaissance d'image OpenAI)", "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_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", "audio_video_file_transcribe": "Fichier audio ou vidéo à transcrire",
@ -15,12 +20,12 @@
"azure_api_version_question": "Entrez la version de l'API Azure (laissez vide pour la valeur par défaut)", "azure_api_version_question": "Entrez la version de l'API Azure (laissez vide pour la valeur par défaut)",
"azure_base_url_question": "URL de base de l'API", "azure_base_url_question": "URL de base de l'API",
"azure_base_url_required": "L'URL de base Azure est requise", "azure_base_url_required": "L'URL de base Azure est requise",
"azure_credential_failure": "Échec de la création des identifiants Azure",
"azure_deployments_question": "Entrez les noms de vos déploiements Azure (séparés par des virgules)", "azure_deployments_question": "Entrez les noms de vos déploiements Azure (séparés par des virgules)",
"azure_deployments_required": "Au moins un nom de déploiement Azure est requis", "azure_deployments_required": "Au moins un nom de déploiement Azure est requis",
"azure_failed_extract_deployment": "échec de l'extraction du nom de déploiement de la requête", "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_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", "azure_request_body_nil": "le corps de la requête est nil",
"azure_credential_failure": "Échec de la création des identifiants Azure",
"background_type_help": "Type d'arrière-plan : opaque, transparent (par défaut : opaque, seulement pour PNG/WebP)", "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_aws_region_label": "Région AWS",
"bedrock_converse_failed": "bedrock converse a échoué pour le modèle %s : %w", "bedrock_converse_failed": "bedrock converse a échoué pour le modèle %s : %w",
@ -37,6 +42,7 @@
"bedrock_unknown_stream_event_type": "type d'événement de flux inconnu : %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", "cannot_convert_string": "impossible de convertir la chaîne %q en %v",
"change_default_model": "Changer le modèle par défaut", "change_default_model": "Changer le modèle par défaut",
"chat_error_content_fields_misused": "Impossible d'utiliser Content et MultiContent simultanément",
"chatter_error_empty_response": "réponse vide", "chatter_error_empty_response": "réponse vide",
"chatter_error_find_context": "impossible de trouver le contexte %s : %v", "chatter_error_find_context": "impossible de trouver le contexte %s : %v",
"chatter_error_find_session": "impossible de trouver la session %s : %v", "chatter_error_find_session": "impossible de trouver la session %s : %v",
@ -81,9 +87,13 @@
"custom_patterns_directory_question": "Saisissez le chemin vers votre répertoire de patrons personnalisés", "custom_patterns_directory_question": "Saisissez le chemin vers votre répertoire de patrons personnalisés",
"custom_patterns_label": "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_setup_description": "Patrons personnalisés - Définir le répertoire pour vos patrons personnalisés",
"custom_patterns_warning_create_directory": "Avertissement : Impossible de créer le répertoire de modèles personnalisés %s : %v\n",
"db_error_loading_env_file": "Erreur lors du chargement du fichier .env : %s",
"defaults_model_context_length_question": "Saisissez la longueur du contexte du modèle", "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_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", "defaults_setup_description": "Fournisseur et modèle d'IA par défaut",
"digitalocean_failed_parse_control_plane_url": "Impossible d'analyser l'URL du plan de contrôle DigitalOcean : %w",
"digitalocean_model_list_unavailable": "Liste des modèles DigitalOcean non disponible. Définissez DIGITALOCEAN_TOKEN pour récupérer les modèles depuis le plan de contrôle",
"disable_openai_responses_api": "Désactiver l'API OpenAI Responses (par défaut : false)", "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", "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)", "enable_web_search_tool": "Activer l'outil de recherche web pour les modèles pris en charge (Anthropic, OpenAI, Gemini)",
@ -183,8 +193,14 @@
"gemini_stream_error": "Erreur : %v", "gemini_stream_error": "Erreur : %v",
"gemini_tts_failed": "échec de la génération TTS : %w", "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_unexpected_data_type": "type de données inattendu : %s, données audio attendues",
"gemini_voice_not_found": "Voix '%s' non trouvée",
"gemini_wav_data_invalid": "données WAV générées invalides : %d octets, minimum requis : %d", "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", "gemini_wav_generation_failed": "échec de la génération du fichier WAV : %w",
"githelper_failed_clone_repository": "Échec du clonage du dépôt : %w",
"githelper_failed_create_dest_directory": "Échec de la création du répertoire de destination : %w",
"githelper_failed_get_commit": "Échec de la récupération du commit : %w",
"githelper_failed_get_head": "Échec de la récupération du HEAD du dépôt : %w",
"githelper_failed_get_tree": "Échec de la récupération de l'arborescence : %w",
"grab_comments_from_youtube": "Récupérer les commentaires de la vidéo YouTube et envoyer au chat", "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_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_transcript_with_timestamps": "Récupérer la transcription de la vidéo YouTube avec horodatage et envoyer au chat",
@ -239,6 +255,7 @@
"no_description_available": "Aucune description disponible", "no_description_available": "Aucune description disponible",
"no_items_found": "Aucun %s", "no_items_found": "Aucun %s",
"no_notification_system_available": "aucun système de notification disponible", "no_notification_system_available": "aucun système de notification disponible",
"notifications_no_provider_available": "Aucun fournisseur de notifications disponible",
"number_of_latest_patterns": "Nombre des motifs les plus récents à lister", "number_of_latest_patterns": "Nombre des motifs les plus récents à lister",
"ollama_cannot_parse_url": "Impossible d'analyser l'URL '%s' : %v", "ollama_cannot_parse_url": "Impossible d'analyser l'URL '%s' : %v",
"ollama_chat_request_failed": "Requête de chat échouée : %v", "ollama_chat_request_failed": "Requête de chat échouée : %v",
@ -293,6 +310,7 @@
"openai_audio_unable_to_split_acceptable_size_chunks": "impossible de découper le fichier en morceaux de taille acceptable", "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_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_audio_using_model_to_transcribe_part": "Utilisation du modèle %s pour transcrire la partie %d (fichier : %s)...",
"openai_compatible_unknown_static_model_list": "Liste de modèles statique inconnue : %s",
"openai_failed_to_create_models_url": "échec de création de l'URL des modèles : %w", "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_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_decode_image_data": "échec du décodage des données d'image : %w",
@ -322,6 +340,13 @@
"patterns_download_success": "✅ Patrons téléchargés et installés avec succès dans %s\\n", "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_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_downloading": "Téléchargement des patrons et remplissage de %s...\\n",
"patterns_error_create_directory": "Impossible de créer le répertoire de modèles : %v",
"patterns_error_get_home_directory": "Impossible d'obtenir le répertoire personnel : %v",
"patterns_error_load_from_file": "Impossible de charger le modèle depuis le fichier %s : %w",
"patterns_error_read_pattern_file": "Impossible de lire le fichier de modèle %s : %v",
"patterns_error_read_unique_file": "Impossible de lire le fichier de modèles uniques. Veuillez exécuter --updatepatterns (%s)",
"patterns_error_resolve_file_path": "Impossible de résoudre le chemin du fichier : %v",
"patterns_error_save_pattern": "Impossible de sauvegarder le modèle : %v",
"patterns_failed_access_directory": "impossible d'accéder au répertoire des patrons '%s' : %w", "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_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_create_temp_folder": "impossible de créer le dossier temporaire des patrons : %w",
@ -370,6 +395,8 @@
"plugin_question_bool": "%v%v (true/false, laissez vide pour '%s' ou tapez '%v' pour supprimer la valeur) :", "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_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_question_with_default": "%v%v (laissez vide pour '%s' ou tapez '%v' pour supprimer la valeur) :",
"plugin_registry_error_configuring_custom_patterns": "Erreur lors de la configuration de CustomPatterns : %w",
"plugin_registry_model_not_available_for_vendor": "Modèle %s non disponible pour le fournisseur %s",
"plugin_setting_not_valid": "%v=%v n'est pas valide", "plugin_setting_not_valid": "%v=%v n'est pas valide",
"plugin_setup_configured": "[%v] configuré", "plugin_setup_configured": "[%v] configuré",
"plugin_setup_skipped": "[%v] ignoré\\n", "plugin_setup_skipped": "[%v] ignoré\\n",
@ -389,6 +416,11 @@
"send_desktop_notification": "Envoyer une notification de bureau quand la commande se termine", "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_api_ollama_endpoints": "Servir l'API REST Fabric avec les endpoints ollama",
"serve_fabric_rest_api": "Servir l'API REST Fabric", "serve_fabric_rest_api": "Servir l'API REST Fabric",
"server_chat_error": "Erreur : %v",
"server_error_marshaling_response": "erreur de sérialisation de la réponse : %v",
"server_error_writing_response": "erreur d'écriture de la réponse : %v",
"server_invalid_request_format": "Format de requête invalide : %v",
"sessions_creating_new": "Création d'une nouvelle session : %s\n",
"set_debug_level": "Définir le niveau de débogage (0=désactivé, 1=basique, 2=détaillé, 3=trace)", "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_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_location_web_search": "Définir l'emplacement pour les résultats de recherche web (ex. 'America/Los_Angeles')",
@ -481,6 +513,15 @@
"spotify_total_episodes_label": "**Épisodes au total** : %d", "spotify_total_episodes_label": "**Épisodes au total** : %d",
"spotify_url_label": "**URL** : %s", "spotify_url_label": "**URL** : %s",
"start_tag_thinking_sections": "Balise de début pour les sections de réflexion", "start_tag_thinking_sections": "Balise de début pour les sections de réflexion",
"storage_error_delete": "Impossible de supprimer %s : %v",
"storage_error_load": "Impossible de charger %s : %v",
"storage_error_marshal": "Impossible de sérialiser %s : %s",
"storage_error_read_directory": "Impossible de lire les éléments du répertoire : %v",
"storage_error_rename": "Impossible de renommer %s en %s : %v",
"storage_error_resolve_directory": "Impossible de résoudre le chemin du répertoire : %v",
"storage_error_save": "Impossible de sauvegarder %s : %v",
"storage_error_stat_entry": "Impossible d'obtenir les informations de l'entrée %s : %v",
"storage_error_unmarshal": "Impossible de désérialiser %s : %s",
"strategies_available_header": "Stratégies disponibles :", "strategies_available_header": "Stratégies disponibles :",
"strategies_cloning_repository": "Clonage du dépôt %s (chemin : %s)...\\n", "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_download_success": "✅ Stratégies téléchargées et installées avec succès dans %s\\n",
@ -503,6 +544,7 @@
"template_datetime_error_invalid_unit": "invalid time unit: %q", "template_datetime_error_invalid_unit": "invalid time unit: %q",
"template_datetime_error_relative_requires_value": "relative time requires a value", "template_datetime_error_relative_requires_value": "relative time requires a value",
"template_datetime_error_unknown_operation": "datetime: unknown operation %q", "template_datetime_error_unknown_operation": "datetime: unknown operation %q",
"template_extension_error": "Erreur d'extension %s : %v",
"template_file_error_expand_home_dir": "fichier : impossible d'étendre le répertoire personnel : %v", "template_file_error_expand_home_dir": "fichier : impossible d'étendre le répertoire personnel : %v",
"template_file_error_invalid_line_count": "fichier : nombre de lignes invalide %q", "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_error_line_count_positive": "fichier : le nombre de lignes doit être positif",
@ -525,12 +567,23 @@
"template_file_log_size_for_path": "Fichier : taille=%d pour le chemin %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_tail_returning_lines": "Fichier : tail renvoie %d lignes",
"template_file_log_validating_path": "Fichier : validation du chemin %q", "template_file_log_validating_path": "Fichier : validation du chemin %q",
"template_hash_open_file": "Ouverture du fichier : %w",
"template_hash_read_file": "Lecture du fichier : %w",
"template_missing_required_variable": "Variable requise manquante : %s",
"template_plugin_error": "Erreur du plugin %s : %v",
"template_processing_stuck": "Traitement du modèle bloqué - boucle infinie potentielle",
"template_sys_error_env_requires_var": "env: variable name required", "template_sys_error_env_requires_var": "env: variable name required",
"template_sys_error_home": "failed to get home directory: %v", "template_sys_error_home": "failed to get home directory: %v",
"template_sys_error_hostname": "failed to get hostname: %v", "template_sys_error_hostname": "failed to get hostname: %v",
"template_sys_error_pwd": "failed to get working directory: %v", "template_sys_error_pwd": "failed to get working directory: %v",
"template_sys_error_unknown_operation": "sys: unknown operation %q", "template_sys_error_unknown_operation": "sys: unknown operation %q",
"template_sys_error_user": "failed to get current user: %v", "template_sys_error_user": "failed to get current user: %v",
"template_text_empty_input": "Texte : entrée vide pour l'opération %q",
"template_text_unknown_operation": "Texte : opération de texte inconnue %q (supportées : upper, lower, title, trim)",
"template_unknown_plugin_namespace": "Espace de noms de plugin inconnu : %s",
"template_utils_failed_get_absolute_path": "Impossible d'obtenir le chemin absolu : %w",
"template_utils_failed_get_home_dir": "Impossible d'obtenir le répertoire personnel de l'utilisateur : %w",
"template_utils_path_not_exist": "Le chemin n'existe pas : %w",
"transcription_model_required": "un modèle de transcription est requis (utilisez --transcribe-model)", "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", "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_audio_generated_successfully": "Audio TTS généré avec succès et sauvegardé dans : %s\n",
@ -539,7 +592,13 @@
"unsupported_conversion": "conversion non prise en charge de %v vers %v", "unsupported_conversion": "conversion non prise en charge de %v vers %v",
"update_patterns": "Mettre à jour les motifs", "update_patterns": "Mettre à jour les motifs",
"usage_header": "Utilisation :", "usage_header": "Utilisation :",
"use_model_defaults_raw_help": "Utilise les valeurs par défaut du modèle sans envoyer doptions de discussion (temperature, top_p, etc.). Naffecte 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.", "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.",
"util_error_accessing_config_path": "Erreur d'accès au chemin de configuration par défaut : %w",
"util_error_determine_home_directory": "Impossible de déterminer le répertoire personnel de l'utilisateur : %w",
"util_error_get_absolute_path": "Impossible d'obtenir le chemin absolu",
"util_error_path_is_empty": "Le chemin est vide",
"util_error_resolve_home_directory": "Impossible de résoudre le répertoire personnel",
"util_error_resolve_symlinks": "Impossible de résoudre les liens symboliques : %w",
"vendor_no_transcription_support": "le fournisseur %s ne prend pas en charge la transcription audio", "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_configured": "le fournisseur %s n'est pas configuré",
"vendor_not_found": "fournisseur %s introuvable", "vendor_not_found": "fournisseur %s introuvable",

View file

@ -1,10 +1,15 @@
{ {
"abacus_models_endpoint_status": "L'endpoint dei modelli Abacus ha restituito lo stato %d",
"additional_yt_dlp_args": "Argomenti aggiuntivi da passare a yt-dlp (es. '--cookies-from-browser brave')", "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", "address_to_bind_rest_api": "Indirizzo per associare l'API REST",
"anthropic_stream_error": "Errore di streaming: %v", "anthropic_stream_error": "Errore di streaming: %v",
"api_key_secure_server_routes": "Chiave API utilizzata per proteggere le route del server", "api_key_secure_server_routes": "Chiave API utilizzata per proteggere le route del server",
"application_options_header": "Opzioni dell'applicazione:", "application_options_header": "Opzioni dell'applicazione:",
"apply_variables_to_input": "Applica variabili all'input utente", "apply_variables_to_input": "Applica variabili all'input utente",
"attachment_could_not_determine_mimetype": "Impossibile determinare il tipo MIME dell'URL",
"attachment_file_not_exist": "Il file %s non esiste",
"attachment_no_content_available": "Nessun contenuto disponibile",
"attachment_no_type_no_content": "L'allegato non ha tipo né contenuto da cui derivarlo",
"attachment_path_or_url_help": "Percorso allegato o URL (es. per messaggi di riconoscimento immagine OpenAI)", "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_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", "audio_video_file_transcribe": "File audio o video da trascrivere",
@ -15,12 +20,12 @@
"azure_api_version_question": "Inserire la versione dell'API Azure (lasciare vuoto per il valore predefinito)", "azure_api_version_question": "Inserire la versione dell'API Azure (lasciare vuoto per il valore predefinito)",
"azure_base_url_question": "URL base dell'API", "azure_base_url_question": "URL base dell'API",
"azure_base_url_required": "L'URL base di Azure è obbligatorio", "azure_base_url_required": "L'URL base di Azure è obbligatorio",
"azure_credential_failure": "Impossibile creare le credenziali Azure",
"azure_deployments_question": "Inserire i nomi delle distribuzioni Azure (separati da virgola)", "azure_deployments_question": "Inserire i nomi delle distribuzioni Azure (separati da virgola)",
"azure_deployments_required": "È necessario almeno un nome di distribuzione Azure", "azure_deployments_required": "È necessario almeno un nome di distribuzione Azure",
"azure_failed_extract_deployment": "impossibile estrarre il nome della distribuzione dalla richiesta", "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_model_field_empty": "il campo modello è vuoto nel corpo della richiesta",
"azure_request_body_nil": "il corpo della richiesta è nil", "azure_request_body_nil": "il corpo della richiesta è nil",
"azure_credential_failure": "Impossibile creare le credenziali Azure",
"background_type_help": "Tipo di sfondo: opaque, transparent (predefinito: opaque, solo per PNG/WebP)", "background_type_help": "Tipo di sfondo: opaque, transparent (predefinito: opaque, solo per PNG/WebP)",
"bedrock_aws_region_label": "Regione AWS", "bedrock_aws_region_label": "Regione AWS",
"bedrock_converse_failed": "bedrock converse fallito per il modello %s: %w", "bedrock_converse_failed": "bedrock converse fallito per il modello %s: %w",
@ -37,6 +42,7 @@
"bedrock_unknown_stream_event_type": "tipo di evento stream sconosciuto: %T", "bedrock_unknown_stream_event_type": "tipo di evento stream sconosciuto: %T",
"cannot_convert_string": "impossibile convertire la stringa %q in %v", "cannot_convert_string": "impossibile convertire la stringa %q in %v",
"change_default_model": "Cambia modello predefinito", "change_default_model": "Cambia modello predefinito",
"chat_error_content_fields_misused": "Impossibile usare Content e MultiContent simultaneamente",
"chatter_error_empty_response": "risposta vuota", "chatter_error_empty_response": "risposta vuota",
"chatter_error_find_context": "impossibile trovare il contesto %s: %v", "chatter_error_find_context": "impossibile trovare il contesto %s: %v",
"chatter_error_find_session": "impossibile trovare la sessione %s: %v", "chatter_error_find_session": "impossibile trovare la sessione %s: %v",
@ -81,9 +87,13 @@
"custom_patterns_directory_question": "Inserisci il percorso della directory dei tuoi pattern personalizzati", "custom_patterns_directory_question": "Inserisci il percorso della directory dei tuoi pattern personalizzati",
"custom_patterns_label": "Pattern personalizzati", "custom_patterns_label": "Pattern personalizzati",
"custom_patterns_setup_description": "Pattern personalizzati - Imposta la directory per i tuoi pattern personalizzati", "custom_patterns_setup_description": "Pattern personalizzati - Imposta la directory per i tuoi pattern personalizzati",
"custom_patterns_warning_create_directory": "Avviso: Impossibile creare la directory dei modelli personalizzati %s: %v\n",
"db_error_loading_env_file": "Errore nel caricamento del file .env: %s",
"defaults_model_context_length_question": "Inserisci la lunghezza del contesto del modello", "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_model_question": "Inserisci l'indice o il nome del tuo modello predefinito",
"defaults_setup_description": "Fornitore e modello AI predefiniti", "defaults_setup_description": "Fornitore e modello AI predefiniti",
"digitalocean_failed_parse_control_plane_url": "Impossibile analizzare l'URL del piano di controllo DigitalOcean: %w",
"digitalocean_model_list_unavailable": "Lista modelli DigitalOcean non disponibile. Impostare DIGITALOCEAN_TOKEN per recuperare i modelli dal piano di controllo",
"disable_openai_responses_api": "Disabilita API OpenAI Responses (predefinito: false)", "disable_openai_responses_api": "Disabilita API OpenAI Responses (predefinito: false)",
"disable_pattern_variable_replacement": "Disabilita sostituzione variabili pattern", "disable_pattern_variable_replacement": "Disabilita sostituzione variabili pattern",
"enable_web_search_tool": "Abilita strumento di ricerca web per modelli supportati (Anthropic, OpenAI, Gemini)", "enable_web_search_tool": "Abilita strumento di ricerca web per modelli supportati (Anthropic, OpenAI, Gemini)",
@ -183,8 +193,14 @@
"gemini_stream_error": "Errore: %v", "gemini_stream_error": "Errore: %v",
"gemini_tts_failed": "generazione TTS fallita: %w", "gemini_tts_failed": "generazione TTS fallita: %w",
"gemini_unexpected_data_type": "tipo di dato inaspettato: %s, attesi dati audio", "gemini_unexpected_data_type": "tipo di dato inaspettato: %s, attesi dati audio",
"gemini_voice_not_found": "Voce '%s' non trovata",
"gemini_wav_data_invalid": "dati WAV generati non validi: %d byte, minimo richiesto: %d", "gemini_wav_data_invalid": "dati WAV generati non validi: %d byte, minimo richiesto: %d",
"gemini_wav_generation_failed": "generazione file WAV fallita: %w", "gemini_wav_generation_failed": "generazione file WAV fallita: %w",
"githelper_failed_clone_repository": "Clonazione del repository fallita: %w",
"githelper_failed_create_dest_directory": "Creazione della directory di destinazione fallita: %w",
"githelper_failed_get_commit": "Recupero del commit fallito: %w",
"githelper_failed_get_head": "Recupero dell'HEAD del repository fallito: %w",
"githelper_failed_get_tree": "Recupero dell'albero fallito: %w",
"grab_comments_from_youtube": "Ottieni commenti dal video YouTube e invia alla chat", "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_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_transcript_with_timestamps": "Ottieni trascrizione dal video YouTube con timestamp e invia alla chat",
@ -239,6 +255,7 @@
"no_description_available": "Nessuna descrizione disponibile", "no_description_available": "Nessuna descrizione disponibile",
"no_items_found": "Nessun %s", "no_items_found": "Nessun %s",
"no_notification_system_available": "nessun sistema di notifica disponibile", "no_notification_system_available": "nessun sistema di notifica disponibile",
"notifications_no_provider_available": "Nessun provider di notifiche disponibile",
"number_of_latest_patterns": "Numero dei pattern più recenti da elencare", "number_of_latest_patterns": "Numero dei pattern più recenti da elencare",
"ollama_cannot_parse_url": "Impossibile analizzare l'URL '%s': %v", "ollama_cannot_parse_url": "Impossibile analizzare l'URL '%s': %v",
"ollama_chat_request_failed": "Richiesta di chat fallita: %v", "ollama_chat_request_failed": "Richiesta di chat fallita: %v",
@ -293,6 +310,7 @@
"openai_audio_unable_to_split_acceptable_size_chunks": "impossibile dividere il file in parti di dimensioni accettabili", "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_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_audio_using_model_to_transcribe_part": "Utilizzo del modello %s per trascrivere la parte %d (nome file: %s)...",
"openai_compatible_unknown_static_model_list": "Lista di modelli statica sconosciuta: %s",
"openai_failed_to_create_models_url": "impossibile creare URL modelli: %w", "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_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_decode_image_data": "decodifica dei dati dell'immagine fallita: %w",
@ -322,6 +340,13 @@
"patterns_download_success": "✅ Pattern scaricati e installati correttamente in %s\\n", "patterns_download_success": "✅ Pattern scaricati e installati correttamente in %s\\n",
"patterns_downloaded_temp": "%d pattern scaricati nella directory temporanea\\n", "patterns_downloaded_temp": "%d pattern scaricati nella directory temporanea\\n",
"patterns_downloading": "Download dei pattern e popolamento di %s...\\n", "patterns_downloading": "Download dei pattern e popolamento di %s...\\n",
"patterns_error_create_directory": "Impossibile creare la directory dei modelli: %v",
"patterns_error_get_home_directory": "Impossibile ottenere la directory home: %v",
"patterns_error_load_from_file": "Impossibile caricare il modello dal file %s: %w",
"patterns_error_read_pattern_file": "Impossibile leggere il file del modello %s: %v",
"patterns_error_read_unique_file": "Impossibile leggere il file dei modelli unici. Eseguire --updatepatterns (%s)",
"patterns_error_resolve_file_path": "Impossibile risolvere il percorso del file: %v",
"patterns_error_save_pattern": "Impossibile salvare il modello: %v",
"patterns_failed_access_directory": "impossibile accedere alla directory dei pattern '%s': %w", "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_dir": "impossibile creare la directory temporanea: %w",
"patterns_failed_create_temp_folder": "impossibile creare la cartella temporanea dei pattern: %w", "patterns_failed_create_temp_folder": "impossibile creare la cartella temporanea dei pattern: %w",
@ -370,6 +395,8 @@
"plugin_question_bool": "%v%v (true/false, lascia vuoto per '%s' o digita '%v' per rimuovere il valore):", "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_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_question_with_default": "%v%v (lascia vuoto per '%s' o digita '%v' per rimuovere il valore):",
"plugin_registry_error_configuring_custom_patterns": "Errore nella configurazione di CustomPatterns: %w",
"plugin_registry_model_not_available_for_vendor": "Modello %s non disponibile per il fornitore %s",
"plugin_setting_not_valid": "%v=%v non è valido", "plugin_setting_not_valid": "%v=%v non è valido",
"plugin_setup_configured": "[%v] configurato", "plugin_setup_configured": "[%v] configurato",
"plugin_setup_skipped": "[%v] saltato\\n", "plugin_setup_skipped": "[%v] saltato\\n",
@ -389,6 +416,11 @@
"send_desktop_notification": "Invia notifica desktop quando il comando è completato", "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_api_ollama_endpoints": "Servi l'API REST di Fabric con endpoint ollama",
"serve_fabric_rest_api": "Servi l'API REST di Fabric", "serve_fabric_rest_api": "Servi l'API REST di Fabric",
"server_chat_error": "Errore: %v",
"server_error_marshaling_response": "errore nella serializzazione della risposta: %v",
"server_error_writing_response": "errore nella scrittura della risposta: %v",
"server_invalid_request_format": "Formato della richiesta non valido: %v",
"sessions_creating_new": "Creazione nuova sessione: %s\n",
"set_debug_level": "Imposta livello di debug (0=spento, 1=base, 2=dettagliato, 3=traccia)", "set_debug_level": "Imposta livello di debug (0=spento, 1=base, 2=dettagliato, 3=traccia)",
"set_frequency_penalty": "Imposta penalità di frequenza", "set_frequency_penalty": "Imposta penalità di frequenza",
"set_location_web_search": "Imposta posizione per risultati ricerca web (es. 'America/Los_Angeles')", "set_location_web_search": "Imposta posizione per risultati ricerca web (es. 'America/Los_Angeles')",
@ -481,6 +513,15 @@
"spotify_total_episodes_label": "**Episodi totali**: %d", "spotify_total_episodes_label": "**Episodi totali**: %d",
"spotify_url_label": "**URL**: %s", "spotify_url_label": "**URL**: %s",
"start_tag_thinking_sections": "Tag di inizio per sezioni di pensiero", "start_tag_thinking_sections": "Tag di inizio per sezioni di pensiero",
"storage_error_delete": "Impossibile eliminare %s: %v",
"storage_error_load": "Impossibile caricare %s: %v",
"storage_error_marshal": "Impossibile serializzare %s: %s",
"storage_error_read_directory": "Impossibile leggere gli elementi dalla directory: %v",
"storage_error_rename": "Impossibile rinominare %s in %s: %v",
"storage_error_resolve_directory": "Impossibile risolvere il percorso della directory: %v",
"storage_error_save": "Impossibile salvare %s: %v",
"storage_error_stat_entry": "Impossibile ottenere informazioni sulla voce %s: %v",
"storage_error_unmarshal": "Impossibile deserializzare %s: %s",
"strategies_available_header": "Strategie disponibili:", "strategies_available_header": "Strategie disponibili:",
"strategies_cloning_repository": "Clonazione del repository %s (percorso: %s)...\\n", "strategies_cloning_repository": "Clonazione del repository %s (percorso: %s)...\\n",
"strategies_download_success": "✅ Strategie scaricate e installate correttamente in %s\\n", "strategies_download_success": "✅ Strategie scaricate e installate correttamente in %s\\n",
@ -503,6 +544,7 @@
"template_datetime_error_invalid_unit": "invalid time unit: %q", "template_datetime_error_invalid_unit": "invalid time unit: %q",
"template_datetime_error_relative_requires_value": "relative time requires a value", "template_datetime_error_relative_requires_value": "relative time requires a value",
"template_datetime_error_unknown_operation": "datetime: unknown operation %q", "template_datetime_error_unknown_operation": "datetime: unknown operation %q",
"template_extension_error": "Errore dell'estensione %s: %v",
"template_file_error_expand_home_dir": "file: impossibile espandere la directory home: %v", "template_file_error_expand_home_dir": "file: impossibile espandere la directory home: %v",
"template_file_error_invalid_line_count": "file: numero di righe non valido %q", "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_error_line_count_positive": "file: il numero di righe deve essere positivo",
@ -525,12 +567,23 @@
"template_file_log_size_for_path": "File: dimensione=%d per il percorso %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_tail_returning_lines": "File: tail restituisce %d righe",
"template_file_log_validating_path": "File: convalida del percorso %q", "template_file_log_validating_path": "File: convalida del percorso %q",
"template_hash_open_file": "Apertura file: %w",
"template_hash_read_file": "Lettura file: %w",
"template_missing_required_variable": "Variabile richiesta mancante: %s",
"template_plugin_error": "Errore del plugin %s: %v",
"template_processing_stuck": "Elaborazione del modello bloccata - possibile ciclo infinito",
"template_sys_error_env_requires_var": "env: variable name required", "template_sys_error_env_requires_var": "env: variable name required",
"template_sys_error_home": "failed to get home directory: %v", "template_sys_error_home": "failed to get home directory: %v",
"template_sys_error_hostname": "failed to get hostname: %v", "template_sys_error_hostname": "failed to get hostname: %v",
"template_sys_error_pwd": "failed to get working directory: %v", "template_sys_error_pwd": "failed to get working directory: %v",
"template_sys_error_unknown_operation": "sys: unknown operation %q", "template_sys_error_unknown_operation": "sys: unknown operation %q",
"template_sys_error_user": "failed to get current user: %v", "template_sys_error_user": "failed to get current user: %v",
"template_text_empty_input": "Testo: input vuoto per l'operazione %q",
"template_text_unknown_operation": "Testo: operazione di testo sconosciuta %q (supportate: upper, lower, title, trim)",
"template_unknown_plugin_namespace": "Namespace del plugin sconosciuto: %s",
"template_utils_failed_get_absolute_path": "Impossibile ottenere il percorso assoluto: %w",
"template_utils_failed_get_home_dir": "Impossibile ottenere la directory home dell'utente: %w",
"template_utils_path_not_exist": "Il percorso non esiste: %w",
"transcription_model_required": "è richiesto un modello di trascrizione (usa --transcribe-model)", "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", "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_audio_generated_successfully": "Audio TTS generato con successo e salvato in: %s\n",
@ -540,6 +593,12 @@
"update_patterns": "Aggiorna pattern", "update_patterns": "Aggiorna pattern",
"usage_header": "Uso:", "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.", "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.",
"util_error_accessing_config_path": "Errore nell'accesso al percorso di configurazione predefinito: %w",
"util_error_determine_home_directory": "Impossibile determinare la directory home dell'utente: %w",
"util_error_get_absolute_path": "Impossibile ottenere il percorso assoluto",
"util_error_path_is_empty": "Il percorso è vuoto",
"util_error_resolve_home_directory": "Impossibile risolvere la directory home",
"util_error_resolve_symlinks": "Impossibile risolvere i link simbolici: %w",
"vendor_no_transcription_support": "il fornitore %s non supporta la trascrizione audio", "vendor_no_transcription_support": "il fornitore %s non supporta la trascrizione audio",
"vendor_not_configured": "il fornitore %s non è configurato", "vendor_not_configured": "il fornitore %s non è configurato",
"vendor_not_found": "fornitore %s non trovato", "vendor_not_found": "fornitore %s non trovato",

View file

@ -1,10 +1,15 @@
{ {
"abacus_models_endpoint_status": "Abacusモデルエンドポイントがステータス%dを返しました",
"additional_yt_dlp_args": "yt-dlpに渡す追加の引数'--cookies-from-browser brave'", "additional_yt_dlp_args": "yt-dlpに渡す追加の引数'--cookies-from-browser brave'",
"address_to_bind_rest_api": "REST APIをバインドするアドレス", "address_to_bind_rest_api": "REST APIをバインドするアドレス",
"anthropic_stream_error": "ストリームエラー: %v", "anthropic_stream_error": "ストリームエラー: %v",
"api_key_secure_server_routes": "サーバールートを保護するために使用するAPIキー", "api_key_secure_server_routes": "サーバールートを保護するために使用するAPIキー",
"application_options_header": "アプリケーションオプション:", "application_options_header": "アプリケーションオプション:",
"apply_variables_to_input": "ユーザー入力に変数を適用", "apply_variables_to_input": "ユーザー入力に変数を適用",
"attachment_could_not_determine_mimetype": "URLのMIMEタイプを判定できませんでした",
"attachment_file_not_exist": "ファイル%sが存在しません",
"attachment_no_content_available": "利用可能なコンテンツがありません",
"attachment_no_type_no_content": "添付ファイルにタイプもコンテンツもありません",
"attachment_path_or_url_help": "添付ファイルのパスまたはURLOpenAI画像認識メッセージ用", "attachment_path_or_url_help": "添付ファイルのパスまたはURLOpenAI画像認識メッセージ用",
"audio_output_file_specified_but_not_tts_model": "音声出力ファイル '%s' が指定されましたが、モデル '%s' はTTSモデルではありません。gemini-2.5-flash-preview-tts などのTTSモデルを使用してください", "audio_output_file_specified_but_not_tts_model": "音声出力ファイル '%s' が指定されましたが、モデル '%s' はTTSモデルではありません。gemini-2.5-flash-preview-tts などのTTSモデルを使用してください",
"audio_video_file_transcribe": "転写する音声または動画ファイル", "audio_video_file_transcribe": "転写する音声または動画ファイル",
@ -15,12 +20,12 @@
"azure_api_version_question": "Azure APIバージョンを入力してくださいデフォルトの場合は空白のまま", "azure_api_version_question": "Azure APIバージョンを入力してくださいデフォルトの場合は空白のまま",
"azure_base_url_question": "API ベース URL", "azure_base_url_question": "API ベース URL",
"azure_base_url_required": "Azure ベースURLが必要です", "azure_base_url_required": "Azure ベースURLが必要です",
"azure_credential_failure": "Azure 認証情報の作成に失敗しました",
"azure_deployments_question": "Azureデプロイメント名を入力してくださいカンマ区切り", "azure_deployments_question": "Azureデプロイメント名を入力してくださいカンマ区切り",
"azure_deployments_required": "少なくとも1つのAzureデプロイメント名が必要です", "azure_deployments_required": "少なくとも1つのAzureデプロイメント名が必要です",
"azure_failed_extract_deployment": "リクエストからデプロイメント名を抽出できませんでした", "azure_failed_extract_deployment": "リクエストからデプロイメント名を抽出できませんでした",
"azure_model_field_empty": "リクエストボディのモデルフィールドが空です", "azure_model_field_empty": "リクエストボディのモデルフィールドが空です",
"azure_request_body_nil": "リクエストボディがnilです", "azure_request_body_nil": "リクエストボディがnilです",
"azure_credential_failure": "Azure 認証情報の作成に失敗しました",
"background_type_help": "背景タイプopaque、transparentデフォルトopaque、PNG/WebPのみ", "background_type_help": "背景タイプopaque、transparentデフォルトopaque、PNG/WebPのみ",
"bedrock_aws_region_label": "AWSリージョン", "bedrock_aws_region_label": "AWSリージョン",
"bedrock_converse_failed": "モデル %s のbedrock converseが失敗しました: %w", "bedrock_converse_failed": "モデル %s のbedrock converseが失敗しました: %w",
@ -37,6 +42,7 @@
"bedrock_unknown_stream_event_type": "不明なストリームイベントタイプ: %T", "bedrock_unknown_stream_event_type": "不明なストリームイベントタイプ: %T",
"cannot_convert_string": "文字列 %q を %v に変換できません", "cannot_convert_string": "文字列 %q を %v に変換できません",
"change_default_model": "デフォルトモデルを変更", "change_default_model": "デフォルトモデルを変更",
"chat_error_content_fields_misused": "ContentとMultiContentを同時に使用することはできません",
"chatter_error_empty_response": "空の応答", "chatter_error_empty_response": "空の応答",
"chatter_error_find_context": "コンテキスト %s が見つかりませんでした: %v", "chatter_error_find_context": "コンテキスト %s が見つかりませんでした: %v",
"chatter_error_find_session": "セッション %s が見つかりませんでした: %v", "chatter_error_find_session": "セッション %s が見つかりませんでした: %v",
@ -81,9 +87,13 @@
"custom_patterns_directory_question": "カスタムパターンディレクトリのパスを入力してください", "custom_patterns_directory_question": "カスタムパターンディレクトリのパスを入力してください",
"custom_patterns_label": "カスタムパターン", "custom_patterns_label": "カスタムパターン",
"custom_patterns_setup_description": "カスタムパターン - カスタムパターン用のディレクトリを設定", "custom_patterns_setup_description": "カスタムパターン - カスタムパターン用のディレクトリを設定",
"custom_patterns_warning_create_directory": "警告: カスタムパターンディレクトリ%sを作成できませんでした: %v\n",
"db_error_loading_env_file": ".envファイルの読み込みエラー: %s",
"defaults_model_context_length_question": "モデルのコンテキスト長を入力してください", "defaults_model_context_length_question": "モデルのコンテキスト長を入力してください",
"defaults_model_question": "デフォルトモデルのインデックスまたは名前を入力してください", "defaults_model_question": "デフォルトモデルのインデックスまたは名前を入力してください",
"defaults_setup_description": "デフォルトのAIプロバイダーとモデル", "defaults_setup_description": "デフォルトのAIプロバイダーとモデル",
"digitalocean_failed_parse_control_plane_url": "DigitalOceanコントロールプレーンURLの解析に失敗しました: %w",
"digitalocean_model_list_unavailable": "DigitalOceanモデルリストが利用できません。DIGITALOCEAN_TOKENを設定してコントロールプレーンからモデルを取得してください",
"disable_openai_responses_api": "OpenAI Responses APIを無効化デフォルトfalse", "disable_openai_responses_api": "OpenAI Responses APIを無効化デフォルトfalse",
"disable_pattern_variable_replacement": "パターン変数の置換を無効化", "disable_pattern_variable_replacement": "パターン変数の置換を無効化",
"enable_web_search_tool": "サポートされているモデルAnthropic、OpenAI、Geminiでウェブ検索ツールを有効化", "enable_web_search_tool": "サポートされているモデルAnthropic、OpenAI、Geminiでウェブ検索ツールを有効化",
@ -183,8 +193,14 @@
"gemini_stream_error": "エラー: %v", "gemini_stream_error": "エラー: %v",
"gemini_tts_failed": "TTS生成に失敗しました: %w", "gemini_tts_failed": "TTS生成に失敗しました: %w",
"gemini_unexpected_data_type": "予期しないデータ型: %s、オーディオデータが必要です", "gemini_unexpected_data_type": "予期しないデータ型: %s、オーディオデータが必要です",
"gemini_voice_not_found": "音声'%s'が見つかりません",
"gemini_wav_data_invalid": "生成されたWAVデータが無効です: %d バイト、最小要件: %d", "gemini_wav_data_invalid": "生成されたWAVデータが無効です: %d バイト、最小要件: %d",
"gemini_wav_generation_failed": "WAVファイルの生成に失敗しました: %w", "gemini_wav_generation_failed": "WAVファイルの生成に失敗しました: %w",
"githelper_failed_clone_repository": "リポジトリのクローンに失敗しました: %w",
"githelper_failed_create_dest_directory": "宛先ディレクトリの作成に失敗しました: %w",
"githelper_failed_get_commit": "コミットの取得に失敗しました: %w",
"githelper_failed_get_head": "リポジトリHEADの取得に失敗しました: %w",
"githelper_failed_get_tree": "ツリーの取得に失敗しました: %w",
"grab_comments_from_youtube": "YouTube動画からコメントを取得してチャットに送信", "grab_comments_from_youtube": "YouTube動画からコメントを取得してチャットに送信",
"grab_transcript_from_youtube": "YouTube動画から転写を取得してチャットに送信デフォルトで使用。", "grab_transcript_from_youtube": "YouTube動画から転写を取得してチャットに送信デフォルトで使用。",
"grab_transcript_with_timestamps": "YouTube動画からタイムスタンプ付きの転写を取得してチャットに送信", "grab_transcript_with_timestamps": "YouTube動画からタイムスタンプ付きの転写を取得してチャットに送信",
@ -239,6 +255,7 @@
"no_description_available": "説明がありません", "no_description_available": "説明がありません",
"no_items_found": "%s がありません", "no_items_found": "%s がありません",
"no_notification_system_available": "利用可能な通知システムがありません", "no_notification_system_available": "利用可能な通知システムがありません",
"notifications_no_provider_available": "通知プロバイダーが利用できません",
"number_of_latest_patterns": "一覧表示する最新パターンの数", "number_of_latest_patterns": "一覧表示する最新パターンの数",
"ollama_cannot_parse_url": "URL '%s' を解析できません: %v", "ollama_cannot_parse_url": "URL '%s' を解析できません: %v",
"ollama_chat_request_failed": "チャットリクエストが失敗しました: %v", "ollama_chat_request_failed": "チャットリクエストが失敗しました: %v",
@ -293,6 +310,7 @@
"openai_audio_unable_to_split_acceptable_size_chunks": "許容サイズのチャンクに分割できません", "openai_audio_unable_to_split_acceptable_size_chunks": "許容サイズのチャンクに分割できません",
"openai_audio_unsupported_audio_format": "サポートされていない音声フォーマット '%s'", "openai_audio_unsupported_audio_format": "サポートされていない音声フォーマット '%s'",
"openai_audio_using_model_to_transcribe_part": "モデル %s を使用してパート %d を文字起こし中(ファイル名: %s...", "openai_audio_using_model_to_transcribe_part": "モデル %s を使用してパート %d を文字起こし中(ファイル名: %s...",
"openai_compatible_unknown_static_model_list": "不明な静的モデルリスト: %s",
"openai_failed_to_create_models_url": "モデルURLの作成に失敗しました: %w", "openai_failed_to_create_models_url": "モデルURLの作成に失敗しました: %w",
"openai_image_failed_to_create_directory": "ディレクトリ %s の作成に失敗しました: %w", "openai_image_failed_to_create_directory": "ディレクトリ %s の作成に失敗しました: %w",
"openai_image_failed_to_decode_image_data": "画像データのデコードに失敗しました: %w", "openai_image_failed_to_decode_image_data": "画像データのデコードに失敗しました: %w",
@ -322,6 +340,13 @@
"patterns_download_success": "✅ パターンを %s に正常にダウンロードしてインストールしました\\n", "patterns_download_success": "✅ パターンを %s に正常にダウンロードしてインストールしました\\n",
"patterns_downloaded_temp": "%d 個のパターンを一時ディレクトリにダウンロードしました\\n", "patterns_downloaded_temp": "%d 個のパターンを一時ディレクトリにダウンロードしました\\n",
"patterns_downloading": "パターンをダウンロードして %s を構成しています...\\n", "patterns_downloading": "パターンをダウンロードして %s を構成しています...\\n",
"patterns_error_create_directory": "パターンディレクトリを作成できませんでした: %v",
"patterns_error_get_home_directory": "ホームディレクトリを取得できませんでした: %v",
"patterns_error_load_from_file": "ファイル%sからパターンを読み込めませんでした: %w",
"patterns_error_read_pattern_file": "パターンファイル%sを読み込めませんでした: %v",
"patterns_error_read_unique_file": "ユニークパターンファイルを読み込めませんでした。--updatepatternsを実行してください (%s)",
"patterns_error_resolve_file_path": "ファイルパスを解決できませんでした: %v",
"patterns_error_save_pattern": "パターンを保存できませんでした: %v",
"patterns_failed_access_directory": "パターンディレクトリ '%s' にアクセスできませんでした: %w", "patterns_failed_access_directory": "パターンディレクトリ '%s' にアクセスできませんでした: %w",
"patterns_failed_create_temp_dir": "一時ディレクトリの作成に失敗しました: %w", "patterns_failed_create_temp_dir": "一時ディレクトリの作成に失敗しました: %w",
"patterns_failed_create_temp_folder": "一時パターンフォルダーの作成に失敗しました: %w", "patterns_failed_create_temp_folder": "一時パターンフォルダーの作成に失敗しました: %w",
@ -370,6 +395,8 @@
"plugin_question_bool": "%v%v (true/false、'%s' を使うには空欄のまま、値を削除するには '%v' と入力):", "plugin_question_bool": "%v%v (true/false、'%s' を使うには空欄のまま、値を削除するには '%v' と入力):",
"plugin_question_optional": "%v%v (スキップするには空欄のまま):", "plugin_question_optional": "%v%v (スキップするには空欄のまま):",
"plugin_question_with_default": "%v%v ('%s' を使うには空欄のまま、値を削除するには '%v' と入力):", "plugin_question_with_default": "%v%v ('%s' を使うには空欄のまま、値を削除するには '%v' と入力):",
"plugin_registry_error_configuring_custom_patterns": "CustomPatternsの設定エラー: %w",
"plugin_registry_model_not_available_for_vendor": "モデル%sはベンダー%sでは利用できません",
"plugin_setting_not_valid": "%v=%v は無効です", "plugin_setting_not_valid": "%v=%v は無効です",
"plugin_setup_configured": "[%v] 設定済み", "plugin_setup_configured": "[%v] 設定済み",
"plugin_setup_skipped": "[%v] スキップされました\\n", "plugin_setup_skipped": "[%v] スキップされました\\n",
@ -389,6 +416,11 @@
"send_desktop_notification": "コマンド完了時にデスクトップ通知を送信", "send_desktop_notification": "コマンド完了時にデスクトップ通知を送信",
"serve_fabric_api_ollama_endpoints": "ollamaエンドポイント付きのFabric REST APIを提供", "serve_fabric_api_ollama_endpoints": "ollamaエンドポイント付きのFabric REST APIを提供",
"serve_fabric_rest_api": "Fabric REST APIを提供", "serve_fabric_rest_api": "Fabric REST APIを提供",
"server_chat_error": "エラー: %v",
"server_error_marshaling_response": "レスポンスのシリアライズエラー: %v",
"server_error_writing_response": "レスポンスの書き込みエラー: %v",
"server_invalid_request_format": "無効なリクエスト形式: %v",
"sessions_creating_new": "新しいセッションを作成中: %s\n",
"set_debug_level": "デバッグレベルを設定0=オフ、1=基本、2=詳細、3=トレース)", "set_debug_level": "デバッグレベルを設定0=オフ、1=基本、2=詳細、3=トレース)",
"set_frequency_penalty": "頻度ペナルティを設定", "set_frequency_penalty": "頻度ペナルティを設定",
"set_location_web_search": "ウェブ検索結果の場所を設定(例:'America/Los_Angeles'", "set_location_web_search": "ウェブ検索結果の場所を設定(例:'America/Los_Angeles'",
@ -481,6 +513,15 @@
"spotify_total_episodes_label": "**エピソード合計**: %d", "spotify_total_episodes_label": "**エピソード合計**: %d",
"spotify_url_label": "**URL**: %s", "spotify_url_label": "**URL**: %s",
"start_tag_thinking_sections": "思考セクションの開始タグ", "start_tag_thinking_sections": "思考セクションの開始タグ",
"storage_error_delete": "%sを削除できませんでした: %v",
"storage_error_load": "%sを読み込めませんでした: %v",
"storage_error_marshal": "%sをシリアライズできませんでした: %s",
"storage_error_read_directory": "ディレクトリからアイテムを読み込めませんでした: %v",
"storage_error_rename": "%sを%sにリネームできませんでした: %v",
"storage_error_resolve_directory": "ディレクトリパスを解決できませんでした: %v",
"storage_error_save": "%sを保存できませんでした: %v",
"storage_error_stat_entry": "エントリ%sの情報を取得できませんでした: %v",
"storage_error_unmarshal": "%sをデシリアライズできませんでした: %s",
"strategies_available_header": "利用可能な戦略:", "strategies_available_header": "利用可能な戦略:",
"strategies_cloning_repository": "リポジトリ %s をクローン中 (パス: %s)...\\n", "strategies_cloning_repository": "リポジトリ %s をクローン中 (パス: %s)...\\n",
"strategies_download_success": "✅ 戦略を %s に正常にダウンロードしてインストールしました\\n", "strategies_download_success": "✅ 戦略を %s に正常にダウンロードしてインストールしました\\n",
@ -503,6 +544,7 @@
"template_datetime_error_invalid_unit": "invalid time unit: %q", "template_datetime_error_invalid_unit": "invalid time unit: %q",
"template_datetime_error_relative_requires_value": "relative time requires a value", "template_datetime_error_relative_requires_value": "relative time requires a value",
"template_datetime_error_unknown_operation": "datetime: unknown operation %q", "template_datetime_error_unknown_operation": "datetime: unknown operation %q",
"template_extension_error": "拡張機能%sエラー: %v",
"template_file_error_expand_home_dir": "file: ホームディレクトリを展開できませんでした: %v", "template_file_error_expand_home_dir": "file: ホームディレクトリを展開できませんでした: %v",
"template_file_error_invalid_line_count": "file: 無効な行数 %q", "template_file_error_invalid_line_count": "file: 無効な行数 %q",
"template_file_error_line_count_positive": "file: 行数は正の値である必要があります", "template_file_error_line_count_positive": "file: 行数は正の値である必要があります",
@ -525,12 +567,23 @@
"template_file_log_size_for_path": "File: パス %q の size=%d", "template_file_log_size_for_path": "File: パス %q の size=%d",
"template_file_log_tail_returning_lines": "File: tail は %d 行を返します", "template_file_log_tail_returning_lines": "File: tail は %d 行を返します",
"template_file_log_validating_path": "File: パス %q を検証中", "template_file_log_validating_path": "File: パス %q を検証中",
"template_hash_open_file": "ファイルを開く: %w",
"template_hash_read_file": "ファイルを読む: %w",
"template_missing_required_variable": "必須変数が不足しています: %s",
"template_plugin_error": "プラグイン%sエラー: %v",
"template_processing_stuck": "テンプレート処理が停止 - 無限ループの可能性",
"template_sys_error_env_requires_var": "env: variable name required", "template_sys_error_env_requires_var": "env: variable name required",
"template_sys_error_home": "failed to get home directory: %v", "template_sys_error_home": "failed to get home directory: %v",
"template_sys_error_hostname": "failed to get hostname: %v", "template_sys_error_hostname": "failed to get hostname: %v",
"template_sys_error_pwd": "failed to get working directory: %v", "template_sys_error_pwd": "failed to get working directory: %v",
"template_sys_error_unknown_operation": "sys: unknown operation %q", "template_sys_error_unknown_operation": "sys: unknown operation %q",
"template_sys_error_user": "failed to get current user: %v", "template_sys_error_user": "failed to get current user: %v",
"template_text_empty_input": "テキスト: 操作%qに対する入力が空です",
"template_text_unknown_operation": "テキスト: 不明なテキスト操作%q (対応: upper, lower, title, trim)",
"template_unknown_plugin_namespace": "不明なプラグイン名前空間: %s",
"template_utils_failed_get_absolute_path": "絶対パスの取得に失敗しました: %w",
"template_utils_failed_get_home_dir": "ユーザーホームディレクトリの取得に失敗しました: %w",
"template_utils_path_not_exist": "パスが存在しません: %w",
"transcription_model_required": "転写モデルが必要です(--transcribe-model を使用)", "transcription_model_required": "転写モデルが必要です(--transcribe-model を使用)",
"transparent_background_png_webp_only": "透明背景はPNGおよびWebP形式でのみ使用できます。%s では使用できません", "transparent_background_png_webp_only": "透明背景はPNGおよびWebP形式でのみ使用できます。%s では使用できません",
"tts_audio_generated_successfully": "TTS音声が正常に生成され、保存されました%s\n", "tts_audio_generated_successfully": "TTS音声が正常に生成され、保存されました%s\n",
@ -540,6 +593,12 @@
"update_patterns": "パターンを更新", "update_patterns": "パターンを更新",
"usage_header": "使用法:", "usage_header": "使用法:",
"use_model_defaults_raw_help": "チャットオプションtemperature、top_p などを送信せずにモデルのデフォルトを使用します。OpenAI 互換プロバイダーにのみ適用されます。Anthropic モデルは常に、モデル固有の要件に準拠するためにスマートなパラメーター選択を使用します。", "use_model_defaults_raw_help": "チャットオプションtemperature、top_p などを送信せずにモデルのデフォルトを使用します。OpenAI 互換プロバイダーにのみ適用されます。Anthropic モデルは常に、モデル固有の要件に準拠するためにスマートなパラメーター選択を使用します。",
"util_error_accessing_config_path": "デフォルト設定パスへのアクセスエラー: %w",
"util_error_determine_home_directory": "ユーザーホームディレクトリを特定できませんでした: %w",
"util_error_get_absolute_path": "絶対パスを取得できませんでした",
"util_error_path_is_empty": "パスが空です",
"util_error_resolve_home_directory": "ホームディレクトリを解決できませんでした",
"util_error_resolve_symlinks": "シンボリックリンクを解決できませんでした: %w",
"vendor_no_transcription_support": "ベンダー %s は音声転写をサポートしていません", "vendor_no_transcription_support": "ベンダー %s は音声転写をサポートしていません",
"vendor_not_configured": "ベンダー %s が設定されていません", "vendor_not_configured": "ベンダー %s が設定されていません",
"vendor_not_found": "ベンダー %s が見つかりません", "vendor_not_found": "ベンダー %s が見つかりません",

View file

@ -1,10 +1,15 @@
{ {
"abacus_models_endpoint_status": "O endpoint de modelos do Abacus retornou o status %d",
"additional_yt_dlp_args": "Argumentos adicionais para passar ao yt-dlp (ex. '--cookies-from-browser brave')", "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", "address_to_bind_rest_api": "Endereço para vincular a API REST",
"anthropic_stream_error": "Erro de transmissão: %v", "anthropic_stream_error": "Erro de transmissão: %v",
"api_key_secure_server_routes": "Chave API usada para proteger rotas do servidor", "api_key_secure_server_routes": "Chave API usada para proteger rotas do servidor",
"application_options_header": "Opções da aplicação:", "application_options_header": "Opções da aplicação:",
"apply_variables_to_input": "Aplicar variáveis à entrada do usuário", "apply_variables_to_input": "Aplicar variáveis à entrada do usuário",
"attachment_could_not_determine_mimetype": "Não foi possível determinar o tipo MIME da URL",
"attachment_file_not_exist": "O arquivo %s não existe",
"attachment_no_content_available": "Nenhum conteúdo disponível",
"attachment_no_type_no_content": "O anexo não tem tipo nem conteúdo para derivá-lo",
"attachment_path_or_url_help": "Caminho para o anexo ou URL (ex. para mensagens de reconhecimento de imagem do OpenAI)", "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_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", "audio_video_file_transcribe": "Arquivo de áudio ou vídeo para transcrever",
@ -15,12 +20,12 @@
"azure_api_version_question": "Insira a versão da API do Azure (deixe em branco para o padrão)", "azure_api_version_question": "Insira a versão da API do Azure (deixe em branco para o padrão)",
"azure_base_url_question": "URL base da API", "azure_base_url_question": "URL base da API",
"azure_base_url_required": "A URL base do Azure é obrigatória", "azure_base_url_required": "A URL base do Azure é obrigatória",
"azure_credential_failure": "Falha ao criar a credencial do Azure",
"azure_deployments_question": "Insira os nomes das implantações do Azure (separados por vírgula)", "azure_deployments_question": "Insira os nomes das implantações do Azure (separados por vírgula)",
"azure_deployments_required": "Pelo menos um nome de implantação do Azure é obrigatório", "azure_deployments_required": "Pelo menos um nome de implantação do Azure é obrigatório",
"azure_failed_extract_deployment": "falha ao extrair o nome da implantação da requisição", "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_model_field_empty": "o campo de modelo está vazio no corpo da requisição",
"azure_request_body_nil": "o corpo da requisição é nil", "azure_request_body_nil": "o corpo da requisição é nil",
"azure_credential_failure": "Falha ao criar a credencial do Azure",
"background_type_help": "Tipo de fundo: opaque, transparent (padrão: opaque, apenas para PNG/WebP)", "background_type_help": "Tipo de fundo: opaque, transparent (padrão: opaque, apenas para PNG/WebP)",
"bedrock_aws_region_label": "Regiao AWS", "bedrock_aws_region_label": "Regiao AWS",
"bedrock_converse_failed": "bedrock converse falhou para o modelo %s: %w", "bedrock_converse_failed": "bedrock converse falhou para o modelo %s: %w",
@ -37,6 +42,7 @@
"bedrock_unknown_stream_event_type": "tipo de evento de stream desconhecido: %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", "cannot_convert_string": "não é possível converter a string %q para %v",
"change_default_model": "Mudar modelo padrão", "change_default_model": "Mudar modelo padrão",
"chat_error_content_fields_misused": "Não é possível usar Content e MultiContent simultaneamente",
"chatter_error_empty_response": "resposta vazia", "chatter_error_empty_response": "resposta vazia",
"chatter_error_find_context": "nao foi possivel encontrar o contexto %s: %v", "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_find_session": "nao foi possivel encontrar a sessao %s: %v",
@ -81,9 +87,13 @@
"custom_patterns_directory_question": "Informe o caminho para seu diretório de padrões personalizados", "custom_patterns_directory_question": "Informe o caminho para seu diretório de padrões personalizados",
"custom_patterns_label": "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_setup_description": "Padrões personalizados - Definir diretório para seus padrões personalizados",
"custom_patterns_warning_create_directory": "Aviso: Não foi possível criar o diretório de padrões personalizados %s: %v\n",
"db_error_loading_env_file": "Erro ao carregar o arquivo .env: %s",
"defaults_model_context_length_question": "Informe o comprimento do contexto do modelo", "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_model_question": "Informe o índice ou o nome do seu modelo padrão",
"defaults_setup_description": "Provedor e modelo de IA padrão", "defaults_setup_description": "Provedor e modelo de IA padrão",
"digitalocean_failed_parse_control_plane_url": "Falha ao analisar a URL do plano de controle do DigitalOcean: %w",
"digitalocean_model_list_unavailable": "Lista de modelos do DigitalOcean indisponível. Defina DIGITALOCEAN_TOKEN para buscar modelos do plano de controle",
"disable_openai_responses_api": "Desabilitar API OpenAI Responses (padrão: false)", "disable_openai_responses_api": "Desabilitar API OpenAI Responses (padrão: false)",
"disable_pattern_variable_replacement": "Desabilitar substituição de variáveis de padrão", "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)", "enable_web_search_tool": "Habilitar ferramenta de busca web para modelos suportados (Anthropic, OpenAI, Gemini)",
@ -183,8 +193,14 @@
"gemini_stream_error": "Erro: %v", "gemini_stream_error": "Erro: %v",
"gemini_tts_failed": "falha na geracao TTS: %w", "gemini_tts_failed": "falha na geracao TTS: %w",
"gemini_unexpected_data_type": "tipo de dado inesperado: %s, esperado dados de audio", "gemini_unexpected_data_type": "tipo de dado inesperado: %s, esperado dados de audio",
"gemini_voice_not_found": "Voz '%s' não encontrada",
"gemini_wav_data_invalid": "dados WAV gerados invalidos: %d bytes, minimo requerido: %d", "gemini_wav_data_invalid": "dados WAV gerados invalidos: %d bytes, minimo requerido: %d",
"gemini_wav_generation_failed": "falha ao gerar arquivo WAV: %w", "gemini_wav_generation_failed": "falha ao gerar arquivo WAV: %w",
"githelper_failed_clone_repository": "Falha ao clonar o repositório: %w",
"githelper_failed_create_dest_directory": "Falha ao criar o diretório de destino: %w",
"githelper_failed_get_commit": "Falha ao obter o commit: %w",
"githelper_failed_get_head": "Falha ao obter o HEAD do repositório: %w",
"githelper_failed_get_tree": "Falha ao obter a árvore: %w",
"grab_comments_from_youtube": "Obter comentários do vídeo do YouTube e enviar ao chat", "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_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_transcript_with_timestamps": "Obter transcrição do vídeo do YouTube com timestamps e enviar ao chat",
@ -239,6 +255,7 @@
"no_description_available": "Nenhuma descrição disponível", "no_description_available": "Nenhuma descrição disponível",
"no_items_found": "Nenhum %s", "no_items_found": "Nenhum %s",
"no_notification_system_available": "nenhum sistema de notificação disponível", "no_notification_system_available": "nenhum sistema de notificação disponível",
"notifications_no_provider_available": "Nenhum provedor de notificações disponível",
"number_of_latest_patterns": "Número dos padrões mais recentes a listar", "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_cannot_parse_url": "Não é possível analisar a URL '%s': %v",
"ollama_chat_request_failed": "Requisição de chat falhou: %v", "ollama_chat_request_failed": "Requisição de chat falhou: %v",
@ -293,6 +310,7 @@
"openai_audio_unable_to_split_acceptable_size_chunks": "não foi possível dividir o arquivo em partes de tamanho aceitável", "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_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_audio_using_model_to_transcribe_part": "Usando o modelo %s para transcrever a parte %d (arquivo: %s)...",
"openai_compatible_unknown_static_model_list": "Lista de modelos estática desconhecida: %s",
"openai_failed_to_create_models_url": "falha ao criar URL de modelos: %w", "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_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_decode_image_data": "falha ao decodificar os dados da imagem: %w",
@ -322,6 +340,13 @@
"patterns_download_success": "✅ Padrões baixados e instalados com sucesso em %s\\n", "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_downloaded_temp": "%d padrões baixados para o diretório temporário\\n",
"patterns_downloading": "Baixando padrões e populando %s...\\n", "patterns_downloading": "Baixando padrões e populando %s...\\n",
"patterns_error_create_directory": "Não foi possível criar o diretório de padrões: %v",
"patterns_error_get_home_directory": "Não foi possível obter o diretório home: %v",
"patterns_error_load_from_file": "Não foi possível carregar o padrão do arquivo %s: %w",
"patterns_error_read_pattern_file": "Não foi possível ler o arquivo de padrão %s: %v",
"patterns_error_read_unique_file": "Não foi possível ler o arquivo de padrões únicos. Execute --updatepatterns (%s)",
"patterns_error_resolve_file_path": "Não foi possível resolver o caminho do arquivo: %v",
"patterns_error_save_pattern": "Não foi possível salvar o padrão: %v",
"patterns_failed_access_directory": "falha ao acessar o diretório de padrões '%s': %w", "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_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_create_temp_folder": "falha ao criar a pasta temporária de padrões: %w",
@ -370,6 +395,8 @@
"plugin_question_bool": "%v%v (true/false, deixe em branco para '%s' ou digite '%v' para remover o valor):", "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_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_question_with_default": "%v%v (deixe em branco para '%s' ou digite '%v' para remover o valor):",
"plugin_registry_error_configuring_custom_patterns": "Erro ao configurar CustomPatterns: %w",
"plugin_registry_model_not_available_for_vendor": "Modelo %s não disponível para o fornecedor %s",
"plugin_setting_not_valid": "%v=%v não é válido", "plugin_setting_not_valid": "%v=%v não é válido",
"plugin_setup_configured": "[%v] configurado", "plugin_setup_configured": "[%v] configurado",
"plugin_setup_skipped": "[%v] ignorado\\n", "plugin_setup_skipped": "[%v] ignorado\\n",
@ -389,6 +416,11 @@
"send_desktop_notification": "Enviar notificação desktop quando o comando for concluído", "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_api_ollama_endpoints": "Servir a API REST do Fabric com endpoints ollama",
"serve_fabric_rest_api": "Servir a API REST do Fabric", "serve_fabric_rest_api": "Servir a API REST do Fabric",
"server_chat_error": "Erro: %v",
"server_error_marshaling_response": "erro ao serializar resposta: %v",
"server_error_writing_response": "erro ao escrever resposta: %v",
"server_invalid_request_format": "Formato de solicitação inválido: %v",
"sessions_creating_new": "Criando nova sessão: %s\n",
"set_debug_level": "Definir nível de debug (0=desligado, 1=básico, 2=detalhado, 3=rastreamento)", "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_frequency_penalty": "Definir penalidade de frequência",
"set_location_web_search": "Definir localização para resultados de busca web (ex. 'America/Los_Angeles')", "set_location_web_search": "Definir localização para resultados de busca web (ex. 'America/Los_Angeles')",
@ -481,6 +513,15 @@
"spotify_total_episodes_label": "**Total de episódios**: %d", "spotify_total_episodes_label": "**Total de episódios**: %d",
"spotify_url_label": "**URL**: %s", "spotify_url_label": "**URL**: %s",
"start_tag_thinking_sections": "Tag inicial para seções de pensamento", "start_tag_thinking_sections": "Tag inicial para seções de pensamento",
"storage_error_delete": "Não foi possível excluir %s: %v",
"storage_error_load": "Não foi possível carregar %s: %v",
"storage_error_marshal": "Não foi possível serializar %s: %s",
"storage_error_read_directory": "Não foi possível ler os itens do diretório: %v",
"storage_error_rename": "Não foi possível renomear %s para %s: %v",
"storage_error_resolve_directory": "Não foi possível resolver o caminho do diretório: %v",
"storage_error_save": "Não foi possível salvar %s: %v",
"storage_error_stat_entry": "Não foi possível obter informações da entrada %s: %v",
"storage_error_unmarshal": "Não foi possível desserializar %s: %s",
"strategies_available_header": "Estratégias disponíveis:", "strategies_available_header": "Estratégias disponíveis:",
"strategies_cloning_repository": "Clonando repositório %s (caminho: %s)...\\n", "strategies_cloning_repository": "Clonando repositório %s (caminho: %s)...\\n",
"strategies_download_success": "✅ Estratégias baixadas e instaladas com sucesso em %s\\n", "strategies_download_success": "✅ Estratégias baixadas e instaladas com sucesso em %s\\n",
@ -503,6 +544,7 @@
"template_datetime_error_invalid_unit": "invalid time unit: %q", "template_datetime_error_invalid_unit": "invalid time unit: %q",
"template_datetime_error_relative_requires_value": "relative time requires a value", "template_datetime_error_relative_requires_value": "relative time requires a value",
"template_datetime_error_unknown_operation": "datetime: unknown operation %q", "template_datetime_error_unknown_operation": "datetime: unknown operation %q",
"template_extension_error": "Erro na extensão %s: %v",
"template_file_error_expand_home_dir": "arquivo: não foi possível expandir o diretório home: %v", "template_file_error_expand_home_dir": "arquivo: não foi possível expandir o diretório home: %v",
"template_file_error_invalid_line_count": "arquivo: contagem de linhas inválida %q", "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_error_line_count_positive": "arquivo: a contagem de linhas deve ser positiva",
@ -525,12 +567,23 @@
"template_file_log_size_for_path": "Arquivo: tamanho=%d para o caminho %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_tail_returning_lines": "Arquivo: tail retornando %d linhas",
"template_file_log_validating_path": "Arquivo: validando caminho %q", "template_file_log_validating_path": "Arquivo: validando caminho %q",
"template_hash_open_file": "Abrir arquivo: %w",
"template_hash_read_file": "Ler arquivo: %w",
"template_missing_required_variable": "Variável obrigatória ausente: %s",
"template_plugin_error": "Erro no plugin %s: %v",
"template_processing_stuck": "Processamento do modelo travado - possível loop infinito",
"template_sys_error_env_requires_var": "env: variable name required", "template_sys_error_env_requires_var": "env: variable name required",
"template_sys_error_home": "failed to get home directory: %v", "template_sys_error_home": "failed to get home directory: %v",
"template_sys_error_hostname": "failed to get hostname: %v", "template_sys_error_hostname": "failed to get hostname: %v",
"template_sys_error_pwd": "failed to get working directory: %v", "template_sys_error_pwd": "failed to get working directory: %v",
"template_sys_error_unknown_operation": "sys: unknown operation %q", "template_sys_error_unknown_operation": "sys: unknown operation %q",
"template_sys_error_user": "failed to get current user: %v", "template_sys_error_user": "failed to get current user: %v",
"template_text_empty_input": "Texto: entrada vazia para a operação %q",
"template_text_unknown_operation": "Texto: operação de texto desconhecida %q (suportadas: upper, lower, title, trim)",
"template_unknown_plugin_namespace": "Namespace de plugin desconhecido: %s",
"template_utils_failed_get_absolute_path": "Falha ao obter o caminho absoluto: %w",
"template_utils_failed_get_home_dir": "Falha ao obter o diretório home do usuário: %w",
"template_utils_path_not_exist": "O caminho não existe: %w",
"transcription_model_required": "modelo de transcrição é necessário (use --transcribe-model)", "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", "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_audio_generated_successfully": "Áudio TTS gerado com sucesso e salvo em: %s\n",
@ -540,6 +593,12 @@
"update_patterns": "Atualizar os padrões/patterns", "update_patterns": "Atualizar os padrões/patterns",
"usage_header": "Uso:", "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.", "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.",
"util_error_accessing_config_path": "Erro ao acessar o caminho de configuração padrão: %w",
"util_error_determine_home_directory": "Não foi possível determinar o diretório home do usuário: %w",
"util_error_get_absolute_path": "Não foi possível obter o caminho absoluto",
"util_error_path_is_empty": "O caminho está vazio",
"util_error_resolve_home_directory": "Não foi possível resolver o diretório home",
"util_error_resolve_symlinks": "Não foi possível resolver os links simbólicos: %w",
"vendor_no_transcription_support": "o fornecedor %s não suporta transcrição de áudio", "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_configured": "o fornecedor %s não está configurado",
"vendor_not_found": "provedor %s não encontrado", "vendor_not_found": "provedor %s não encontrado",

View file

@ -1,10 +1,15 @@
{ {
"abacus_models_endpoint_status": "O endpoint de modelos do Abacus devolveu o estado %d",
"additional_yt_dlp_args": "Argumentos adicionais para passar ao yt-dlp (ex. '--cookies-from-browser brave')", "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", "address_to_bind_rest_api": "Endereço para associar a API REST",
"anthropic_stream_error": "Erro de transmissão: %v", "anthropic_stream_error": "Erro de transmissão: %v",
"api_key_secure_server_routes": "Chave API usada para proteger as rotas do servidor", "api_key_secure_server_routes": "Chave API usada para proteger as rotas do servidor",
"application_options_header": "Opções da aplicação:", "application_options_header": "Opções da aplicação:",
"apply_variables_to_input": "Aplicar variáveis à entrada do utilizador", "apply_variables_to_input": "Aplicar variáveis à entrada do utilizador",
"attachment_could_not_determine_mimetype": "Não foi possível determinar o tipo MIME do URL",
"attachment_file_not_exist": "O ficheiro %s não existe",
"attachment_no_content_available": "Nenhum conteúdo disponível",
"attachment_no_type_no_content": "O anexo não tem tipo nem conteúdo para o derivar",
"attachment_path_or_url_help": "Caminho do anexo ou URL (ex. para mensagens de reconhecimento de imagem do OpenAI)", "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_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", "audio_video_file_transcribe": "Ficheiro de áudio ou vídeo para transcrever",
@ -15,12 +20,12 @@
"azure_api_version_question": "Introduza a versão da API do Azure (deixe vazio para o padrão)", "azure_api_version_question": "Introduza a versão da API do Azure (deixe vazio para o padrão)",
"azure_base_url_question": "URL base da API", "azure_base_url_question": "URL base da API",
"azure_base_url_required": "O URL base do Azure é obrigatório", "azure_base_url_required": "O URL base do Azure é obrigatório",
"azure_credential_failure": "Falha ao criar a credencial do Azure",
"azure_deployments_question": "Introduza os nomes das implementações do Azure (separados por vírgula)", "azure_deployments_question": "Introduza os nomes das implementações do Azure (separados por vírgula)",
"azure_deployments_required": "É necessário pelo menos um nome de implementação do Azure", "azure_deployments_required": "É necessário pelo menos um nome de implementação do Azure",
"azure_failed_extract_deployment": "falha ao extrair o nome da implementação do pedido", "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_model_field_empty": "o campo de modelo está vazio no corpo do pedido",
"azure_request_body_nil": "o corpo do pedido é nil", "azure_request_body_nil": "o corpo do pedido é nil",
"azure_credential_failure": "Falha ao criar a credencial do Azure",
"background_type_help": "Tipo de fundo: opaque, transparent (por omissão: opaque, apenas para PNG/WebP)", "background_type_help": "Tipo de fundo: opaque, transparent (por omissão: opaque, apenas para PNG/WebP)",
"bedrock_aws_region_label": "Regiao AWS", "bedrock_aws_region_label": "Regiao AWS",
"bedrock_converse_failed": "bedrock converse falhou para o modelo %s: %w", "bedrock_converse_failed": "bedrock converse falhou para o modelo %s: %w",
@ -37,6 +42,7 @@
"bedrock_unknown_stream_event_type": "tipo de evento de stream desconhecido: %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", "cannot_convert_string": "não é possível converter a string %q para %v",
"change_default_model": "Mudar modelo predefinido", "change_default_model": "Mudar modelo predefinido",
"chat_error_content_fields_misused": "Não é possível utilizar Content e MultiContent simultaneamente",
"chatter_error_empty_response": "resposta vazia", "chatter_error_empty_response": "resposta vazia",
"chatter_error_find_context": "nao foi possivel encontrar o contexto %s: %v", "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_find_session": "nao foi possivel encontrar a sessao %s: %v",
@ -81,9 +87,13 @@
"custom_patterns_directory_question": "Indique o caminho para o seu diretório de padrões personalizados", "custom_patterns_directory_question": "Indique o caminho para o seu diretório de padrões personalizados",
"custom_patterns_label": "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_setup_description": "Padrões personalizados - Definir diretório para os seus padrões personalizados",
"custom_patterns_warning_create_directory": "Aviso: Não foi possível criar o diretório de padrões personalizados %s: %v\n",
"db_error_loading_env_file": "Erro ao carregar o ficheiro .env: %s",
"defaults_model_context_length_question": "Indique o comprimento do contexto do modelo", "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_model_question": "Indique o índice ou o nome do seu modelo padrão",
"defaults_setup_description": "Fornecedor e modelo de IA padrão", "defaults_setup_description": "Fornecedor e modelo de IA padrão",
"digitalocean_failed_parse_control_plane_url": "Falha ao analisar o URL do plano de controlo do DigitalOcean: %w",
"digitalocean_model_list_unavailable": "Lista de modelos do DigitalOcean indisponível. Defina DIGITALOCEAN_TOKEN para obter modelos do plano de controlo",
"disable_openai_responses_api": "Desabilitar API OpenAI Responses (por omissão: false)", "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", "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)", "enable_web_search_tool": "Habilitar ferramenta de pesquisa web para modelos suportados (Anthropic, OpenAI, Gemini)",
@ -183,8 +193,14 @@
"gemini_stream_error": "Erro: %v", "gemini_stream_error": "Erro: %v",
"gemini_tts_failed": "falha na geracao TTS: %w", "gemini_tts_failed": "falha na geracao TTS: %w",
"gemini_unexpected_data_type": "tipo de dado inesperado: %s, esperado dados de audio", "gemini_unexpected_data_type": "tipo de dado inesperado: %s, esperado dados de audio",
"gemini_voice_not_found": "Voz '%s' não encontrada",
"gemini_wav_data_invalid": "dados WAV gerados invalidos: %d bytes, minimo requerido: %d", "gemini_wav_data_invalid": "dados WAV gerados invalidos: %d bytes, minimo requerido: %d",
"gemini_wav_generation_failed": "falha ao gerar ficheiro WAV: %w", "gemini_wav_generation_failed": "falha ao gerar ficheiro WAV: %w",
"githelper_failed_clone_repository": "Falha ao clonar o repositório: %w",
"githelper_failed_create_dest_directory": "Falha ao criar o diretório de destino: %w",
"githelper_failed_get_commit": "Falha ao obter o commit: %w",
"githelper_failed_get_head": "Falha ao obter o HEAD do repositório: %w",
"githelper_failed_get_tree": "Falha ao obter a árvore: %w",
"grab_comments_from_youtube": "Obter comentários do vídeo do YouTube e enviar ao chat", "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_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_transcript_with_timestamps": "Obter transcrição do vídeo do YouTube com timestamps e enviar ao chat",
@ -239,6 +255,7 @@
"no_description_available": "Nenhuma descrição disponível", "no_description_available": "Nenhuma descrição disponível",
"no_items_found": "Nenhum %s", "no_items_found": "Nenhum %s",
"no_notification_system_available": "nenhum sistema de notificação disponível", "no_notification_system_available": "nenhum sistema de notificação disponível",
"notifications_no_provider_available": "Nenhum fornecedor de notificações disponível",
"number_of_latest_patterns": "Número dos padrões mais recentes a listar", "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_cannot_parse_url": "Não é possível analisar o URL '%s': %v",
"ollama_chat_request_failed": "Pedido de chat falhou: %v", "ollama_chat_request_failed": "Pedido de chat falhou: %v",
@ -293,6 +310,7 @@
"openai_audio_unable_to_split_acceptable_size_chunks": "não foi possível dividir o ficheiro em partes de tamanho aceitável", "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_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_audio_using_model_to_transcribe_part": "A utilizar o modelo %s para transcrever a parte %d (ficheiro: %s)...",
"openai_compatible_unknown_static_model_list": "Lista de modelos estática desconhecida: %s",
"openai_failed_to_create_models_url": "falha ao criar URL de modelos: %w", "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_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_decode_image_data": "falha ao descodificar os dados da imagem: %w",
@ -322,6 +340,13 @@
"patterns_download_success": "✅ Padrões transferidos e instalados com sucesso em %s\\n", "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_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_downloading": "A transferir padrões e a preencher %s...\\n",
"patterns_error_create_directory": "Não foi possível criar o diretório de padrões: %v",
"patterns_error_get_home_directory": "Não foi possível obter o diretório pessoal: %v",
"patterns_error_load_from_file": "Não foi possível carregar o padrão do ficheiro %s: %w",
"patterns_error_read_pattern_file": "Não foi possível ler o ficheiro de padrão %s: %v",
"patterns_error_read_unique_file": "Não foi possível ler o ficheiro de padrões únicos. Execute --updatepatterns (%s)",
"patterns_error_resolve_file_path": "Não foi possível resolver o caminho do ficheiro: %v",
"patterns_error_save_pattern": "Não foi possível guardar o padrão: %v",
"patterns_failed_access_directory": "falha ao aceder ao directório de padrões '%s': %w", "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_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_create_temp_folder": "falha ao criar a pasta temporária de padrões: %w",
@ -370,6 +395,8 @@
"plugin_question_bool": "%v%v (true/false, deixe em branco para '%s' ou escreva '%v' para remover o valor):", "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_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_question_with_default": "%v%v (deixe em branco para '%s' ou escreva '%v' para remover o valor):",
"plugin_registry_error_configuring_custom_patterns": "Erro ao configurar CustomPatterns: %w",
"plugin_registry_model_not_available_for_vendor": "Modelo %s não disponível para o fornecedor %s",
"plugin_setting_not_valid": "%v=%v não é válido", "plugin_setting_not_valid": "%v=%v não é válido",
"plugin_setup_configured": "[%v] configurado", "plugin_setup_configured": "[%v] configurado",
"plugin_setup_skipped": "[%v] ignorado\\n", "plugin_setup_skipped": "[%v] ignorado\\n",
@ -389,6 +416,11 @@
"send_desktop_notification": "Enviar notificação no ambiente de trabalho quando o comando for concluído", "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_api_ollama_endpoints": "Servir a API REST do Fabric com endpoints ollama",
"serve_fabric_rest_api": "Servir a API REST do Fabric", "serve_fabric_rest_api": "Servir a API REST do Fabric",
"server_chat_error": "Erro: %v",
"server_error_marshaling_response": "erro ao serializar resposta: %v",
"server_error_writing_response": "erro ao escrever resposta: %v",
"server_invalid_request_format": "Formato de pedido inválido: %v",
"sessions_creating_new": "A criar nova sessão: %s\n",
"set_debug_level": "Definir nível de debug (0=desligado, 1=básico, 2=detalhado, 3=rastreio)", "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_frequency_penalty": "Definir penalidade de frequência",
"set_location_web_search": "Definir localização para resultados de pesquisa web (ex. 'America/Los_Angeles')", "set_location_web_search": "Definir localização para resultados de pesquisa web (ex. 'America/Los_Angeles')",
@ -481,6 +513,15 @@
"spotify_total_episodes_label": "**Total de episódios**: %d", "spotify_total_episodes_label": "**Total de episódios**: %d",
"spotify_url_label": "**URL**: %s", "spotify_url_label": "**URL**: %s",
"start_tag_thinking_sections": "Tag inicial para secções de pensamento", "start_tag_thinking_sections": "Tag inicial para secções de pensamento",
"storage_error_delete": "Não foi possível eliminar %s: %v",
"storage_error_load": "Não foi possível carregar %s: %v",
"storage_error_marshal": "Não foi possível serializar %s: %s",
"storage_error_read_directory": "Não foi possível ler os itens do diretório: %v",
"storage_error_rename": "Não foi possível renomear %s para %s: %v",
"storage_error_resolve_directory": "Não foi possível resolver o caminho do diretório: %v",
"storage_error_save": "Não foi possível guardar %s: %v",
"storage_error_stat_entry": "Não foi possível obter informações da entrada %s: %v",
"storage_error_unmarshal": "Não foi possível desserializar %s: %s",
"strategies_available_header": "Estratégias disponíveis:", "strategies_available_header": "Estratégias disponíveis:",
"strategies_cloning_repository": "A clonar repositório %s (caminho: %s)...\\n", "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_download_success": "✅ Estratégias transferidas e instaladas com sucesso em %s\\n",
@ -503,6 +544,7 @@
"template_datetime_error_invalid_unit": "invalid time unit: %q", "template_datetime_error_invalid_unit": "invalid time unit: %q",
"template_datetime_error_relative_requires_value": "relative time requires a value", "template_datetime_error_relative_requires_value": "relative time requires a value",
"template_datetime_error_unknown_operation": "datetime: unknown operation %q", "template_datetime_error_unknown_operation": "datetime: unknown operation %q",
"template_extension_error": "Erro na extensão %s: %v",
"template_file_error_expand_home_dir": "ficheiro: não foi possível expandir a diretoria home: %v", "template_file_error_expand_home_dir": "ficheiro: não foi possível expandir a diretoria home: %v",
"template_file_error_invalid_line_count": "ficheiro: contagem de linhas inválida %q", "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_error_line_count_positive": "ficheiro: a contagem de linhas tem de ser positiva",
@ -525,12 +567,23 @@
"template_file_log_size_for_path": "Ficheiro: tamanho=%d para o caminho %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_tail_returning_lines": "Ficheiro: tail a devolver %d linhas",
"template_file_log_validating_path": "Ficheiro: a validar caminho %q", "template_file_log_validating_path": "Ficheiro: a validar caminho %q",
"template_hash_open_file": "Abrir ficheiro: %w",
"template_hash_read_file": "Ler ficheiro: %w",
"template_missing_required_variable": "Variável obrigatória em falta: %s",
"template_plugin_error": "Erro no plugin %s: %v",
"template_processing_stuck": "Processamento do modelo bloqueado - possível ciclo infinito",
"template_sys_error_env_requires_var": "env: variable name required", "template_sys_error_env_requires_var": "env: variable name required",
"template_sys_error_home": "failed to get home directory: %v", "template_sys_error_home": "failed to get home directory: %v",
"template_sys_error_hostname": "failed to get hostname: %v", "template_sys_error_hostname": "failed to get hostname: %v",
"template_sys_error_pwd": "failed to get working directory: %v", "template_sys_error_pwd": "failed to get working directory: %v",
"template_sys_error_unknown_operation": "sys: unknown operation %q", "template_sys_error_unknown_operation": "sys: unknown operation %q",
"template_sys_error_user": "failed to get current user: %v", "template_sys_error_user": "failed to get current user: %v",
"template_text_empty_input": "Texto: entrada vazia para a operação %q",
"template_text_unknown_operation": "Texto: operação de texto desconhecida %q (suportadas: upper, lower, title, trim)",
"template_unknown_plugin_namespace": "Espaço de nomes do plugin desconhecido: %s",
"template_utils_failed_get_absolute_path": "Falha ao obter o caminho absoluto: %w",
"template_utils_failed_get_home_dir": "Falha ao obter o diretório pessoal do utilizador: %w",
"template_utils_path_not_exist": "O caminho não existe: %w",
"transcription_model_required": "modelo de transcrição é necessário (use --transcribe-model)", "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", "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_audio_generated_successfully": "Áudio TTS gerado com sucesso e guardado em: %s\n",
@ -540,6 +593,12 @@
"update_patterns": "Atualizar padrões", "update_patterns": "Atualizar padrões",
"usage_header": "Uso:", "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.", "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.",
"util_error_accessing_config_path": "Erro ao aceder ao caminho de configuração predefinido: %w",
"util_error_determine_home_directory": "Não foi possível determinar o diretório pessoal do utilizador: %w",
"util_error_get_absolute_path": "Não foi possível obter o caminho absoluto",
"util_error_path_is_empty": "O caminho está vazio",
"util_error_resolve_home_directory": "Não foi possível resolver o diretório pessoal",
"util_error_resolve_symlinks": "Não foi possível resolver as ligações simbólicas: %w",
"vendor_no_transcription_support": "o fornecedor %s não suporta transcrição de áudio", "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_configured": "o fornecedor %s não está configurado",
"vendor_not_found": "fornecedor %s não encontrado", "vendor_not_found": "fornecedor %s não encontrado",

View file

@ -1,10 +1,15 @@
{ {
"abacus_models_endpoint_status": "Abacus模型端点返回状态%d",
"additional_yt_dlp_args": "传递给 yt-dlp 的其他参数(例如 '--cookies-from-browser brave'", "additional_yt_dlp_args": "传递给 yt-dlp 的其他参数(例如 '--cookies-from-browser brave'",
"address_to_bind_rest_api": "绑定 REST API 的地址", "address_to_bind_rest_api": "绑定 REST API 的地址",
"anthropic_stream_error": "流式传输错误: %v", "anthropic_stream_error": "流式传输错误: %v",
"api_key_secure_server_routes": "用于保护服务器路由的 API 密钥", "api_key_secure_server_routes": "用于保护服务器路由的 API 密钥",
"application_options_header": "应用程序选项:", "application_options_header": "应用程序选项:",
"apply_variables_to_input": "将变量应用于用户输入", "apply_variables_to_input": "将变量应用于用户输入",
"attachment_could_not_determine_mimetype": "无法确定URL的MIME类型",
"attachment_file_not_exist": "文件%s不存在",
"attachment_no_content_available": "没有可用内容",
"attachment_no_type_no_content": "附件没有类型也没有内容可供推导",
"attachment_path_or_url_help": "附件路径或 URL例如用于 OpenAI 图像识别消息)", "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_output_file_specified_but_not_tts_model": "指定了音频输出文件 '%s' 但模型 '%s' 不是 TTS 模型。请使用 TTS 模型,如 gemini-2.5-flash-preview-tts",
"audio_video_file_transcribe": "要转录的音频或视频文件", "audio_video_file_transcribe": "要转录的音频或视频文件",
@ -15,12 +20,12 @@
"azure_api_version_question": "请输入 Azure API 版本(留空使用默认值)", "azure_api_version_question": "请输入 Azure API 版本(留空使用默认值)",
"azure_base_url_question": "API 基础 URL", "azure_base_url_question": "API 基础 URL",
"azure_base_url_required": "Azure 基础 URL 是必需的", "azure_base_url_required": "Azure 基础 URL 是必需的",
"azure_credential_failure": "创建 Azure 凭据失败",
"azure_deployments_question": "请输入您的 Azure 部署名称(用逗号分隔)", "azure_deployments_question": "请输入您的 Azure 部署名称(用逗号分隔)",
"azure_deployments_required": "至少需要一个 Azure 部署名称", "azure_deployments_required": "至少需要一个 Azure 部署名称",
"azure_failed_extract_deployment": "无法从请求中提取部署名称", "azure_failed_extract_deployment": "无法从请求中提取部署名称",
"azure_model_field_empty": "请求正文中的模型字段为空", "azure_model_field_empty": "请求正文中的模型字段为空",
"azure_request_body_nil": "请求正文为空", "azure_request_body_nil": "请求正文为空",
"azure_credential_failure": "创建 Azure 凭据失败",
"background_type_help": "背景类型opaque、transparent默认opaque仅适用于 PNG/WebP", "background_type_help": "背景类型opaque、transparent默认opaque仅适用于 PNG/WebP",
"bedrock_aws_region_label": "AWS 区域", "bedrock_aws_region_label": "AWS 区域",
"bedrock_converse_failed": "模型 %s 的 bedrock converse 失败:%w", "bedrock_converse_failed": "模型 %s 的 bedrock converse 失败:%w",
@ -37,6 +42,7 @@
"bedrock_unknown_stream_event_type": "未知的流事件类型:%T", "bedrock_unknown_stream_event_type": "未知的流事件类型:%T",
"cannot_convert_string": "无法将字符串 %q 转换为 %v", "cannot_convert_string": "无法将字符串 %q 转换为 %v",
"change_default_model": "更改默认模型", "change_default_model": "更改默认模型",
"chat_error_content_fields_misused": "不能同时使用Content和MultiContent属性",
"chatter_error_empty_response": "空响应", "chatter_error_empty_response": "空响应",
"chatter_error_find_context": "找不到上下文 %s%v", "chatter_error_find_context": "找不到上下文 %s%v",
"chatter_error_find_session": "找不到会话 %s%v", "chatter_error_find_session": "找不到会话 %s%v",
@ -81,9 +87,13 @@
"custom_patterns_directory_question": "请输入您的自定义模式目录路径", "custom_patterns_directory_question": "请输入您的自定义模式目录路径",
"custom_patterns_label": "自定义模式", "custom_patterns_label": "自定义模式",
"custom_patterns_setup_description": "自定义模式 - 设置您的自定义模式目录", "custom_patterns_setup_description": "自定义模式 - 设置您的自定义模式目录",
"custom_patterns_warning_create_directory": "警告:无法创建自定义模式目录%s%v\n",
"db_error_loading_env_file": "加载.env文件错误%s",
"defaults_model_context_length_question": "请输入模型上下文长度", "defaults_model_context_length_question": "请输入模型上下文长度",
"defaults_model_question": "请输入您的默认模型的索引或名称", "defaults_model_question": "请输入您的默认模型的索引或名称",
"defaults_setup_description": "默认 AI 提供商和模型", "defaults_setup_description": "默认 AI 提供商和模型",
"digitalocean_failed_parse_control_plane_url": "解析DigitalOcean控制面板URL失败%w",
"digitalocean_model_list_unavailable": "DigitalOcean模型列表不可用。请设置DIGITALOCEAN_TOKEN以从控制面板获取模型",
"disable_openai_responses_api": "禁用 OpenAI 响应 API默认false", "disable_openai_responses_api": "禁用 OpenAI 响应 API默认false",
"disable_pattern_variable_replacement": "禁用模式变量替换", "disable_pattern_variable_replacement": "禁用模式变量替换",
"enable_web_search_tool": "为支持的模型启用网络搜索工具Anthropic、OpenAI、Gemini", "enable_web_search_tool": "为支持的模型启用网络搜索工具Anthropic、OpenAI、Gemini",
@ -183,8 +193,14 @@
"gemini_stream_error": "错误:%v", "gemini_stream_error": "错误:%v",
"gemini_tts_failed": "TTS 生成失败:%w", "gemini_tts_failed": "TTS 生成失败:%w",
"gemini_unexpected_data_type": "意外的数据类型:%s预期为音频数据", "gemini_unexpected_data_type": "意外的数据类型:%s预期为音频数据",
"gemini_voice_not_found": "未找到语音'%s'",
"gemini_wav_data_invalid": "生成的 WAV 数据无效:%d 字节,最少需要:%d", "gemini_wav_data_invalid": "生成的 WAV 数据无效:%d 字节,最少需要:%d",
"gemini_wav_generation_failed": "生成 WAV 文件失败:%w", "gemini_wav_generation_failed": "生成 WAV 文件失败:%w",
"githelper_failed_clone_repository": "克隆仓库失败:%w",
"githelper_failed_create_dest_directory": "创建目标目录失败:%w",
"githelper_failed_get_commit": "获取提交失败:%w",
"githelper_failed_get_head": "获取仓库HEAD失败%w",
"githelper_failed_get_tree": "获取树失败:%w",
"grab_comments_from_youtube": "从 YouTube 视频获取评论并发送到聊天", "grab_comments_from_youtube": "从 YouTube 视频获取评论并发送到聊天",
"grab_transcript_from_youtube": "从 YouTube 视频获取转录并发送到聊天(默认使用)。", "grab_transcript_from_youtube": "从 YouTube 视频获取转录并发送到聊天(默认使用)。",
"grab_transcript_with_timestamps": "从 YouTube 视频获取带时间戳的转录并发送到聊天", "grab_transcript_with_timestamps": "从 YouTube 视频获取带时间戳的转录并发送到聊天",
@ -239,6 +255,7 @@
"no_description_available": "没有可用描述", "no_description_available": "没有可用描述",
"no_items_found": "没有 %s", "no_items_found": "没有 %s",
"no_notification_system_available": "没有可用的通知系统", "no_notification_system_available": "没有可用的通知系统",
"notifications_no_provider_available": "没有可用的通知提供者",
"number_of_latest_patterns": "要列出的最新模式数量", "number_of_latest_patterns": "要列出的最新模式数量",
"ollama_cannot_parse_url": "无法解析 URL '%s': %v", "ollama_cannot_parse_url": "无法解析 URL '%s': %v",
"ollama_chat_request_failed": "聊天请求失败: %v", "ollama_chat_request_failed": "聊天请求失败: %v",
@ -293,6 +310,7 @@
"openai_audio_unable_to_split_acceptable_size_chunks": "无法将文件分割为可接受大小的片段", "openai_audio_unable_to_split_acceptable_size_chunks": "无法将文件分割为可接受大小的片段",
"openai_audio_unsupported_audio_format": "不支持的音频格式 '%s'", "openai_audio_unsupported_audio_format": "不支持的音频格式 '%s'",
"openai_audio_using_model_to_transcribe_part": "使用模型 %s 转录第 %d 部分(文件名: %s...", "openai_audio_using_model_to_transcribe_part": "使用模型 %s 转录第 %d 部分(文件名: %s...",
"openai_compatible_unknown_static_model_list": "未知的静态模型列表:%s",
"openai_failed_to_create_models_url": "创建模型 URL 失败:%w", "openai_failed_to_create_models_url": "创建模型 URL 失败:%w",
"openai_image_failed_to_create_directory": "创建目录 %s 失败: %w", "openai_image_failed_to_create_directory": "创建目录 %s 失败: %w",
"openai_image_failed_to_decode_image_data": "解码图像数据失败: %w", "openai_image_failed_to_decode_image_data": "解码图像数据失败: %w",
@ -322,6 +340,13 @@
"patterns_download_success": "✅ 已成功下载并安装模式到 %s\\n", "patterns_download_success": "✅ 已成功下载并安装模式到 %s\\n",
"patterns_downloaded_temp": "已将 %d 个模式下载到临时目录\\n", "patterns_downloaded_temp": "已将 %d 个模式下载到临时目录\\n",
"patterns_downloading": "正在下载模式并填充 %s...\\n", "patterns_downloading": "正在下载模式并填充 %s...\\n",
"patterns_error_create_directory": "无法创建模式目录:%v",
"patterns_error_get_home_directory": "无法获取主目录:%v",
"patterns_error_load_from_file": "无法从文件%s加载模式%w",
"patterns_error_read_pattern_file": "无法读取模式文件%s%v",
"patterns_error_read_unique_file": "无法读取唯一模式文件。请运行--updatepatterns (%s)",
"patterns_error_resolve_file_path": "无法解析文件路径:%v",
"patterns_error_save_pattern": "无法保存模式:%v",
"patterns_failed_access_directory": "访问模式目录 '%s' 失败:%w", "patterns_failed_access_directory": "访问模式目录 '%s' 失败:%w",
"patterns_failed_create_temp_dir": "创建临时目录失败:%w", "patterns_failed_create_temp_dir": "创建临时目录失败:%w",
"patterns_failed_create_temp_folder": "创建模式临时文件夹失败:%w", "patterns_failed_create_temp_folder": "创建模式临时文件夹失败:%w",
@ -370,6 +395,8 @@
"plugin_question_bool": "%v%vtrue/false留空表示使用 '%s',或输入 '%v' 清除值):", "plugin_question_bool": "%v%vtrue/false留空表示使用 '%s',或输入 '%v' 清除值):",
"plugin_question_optional": "%v%v留空以跳过", "plugin_question_optional": "%v%v留空以跳过",
"plugin_question_with_default": "%v%v留空表示使用 '%s',或输入 '%v' 清除值):", "plugin_question_with_default": "%v%v留空表示使用 '%s',或输入 '%v' 清除值):",
"plugin_registry_error_configuring_custom_patterns": "配置CustomPatterns错误%w",
"plugin_registry_model_not_available_for_vendor": "模型%s对供应商%s不可用",
"plugin_setting_not_valid": "%v=%v 无效", "plugin_setting_not_valid": "%v=%v 无效",
"plugin_setup_configured": "[%v] 已配置", "plugin_setup_configured": "[%v] 已配置",
"plugin_setup_skipped": "[%v] 已跳过\\n", "plugin_setup_skipped": "[%v] 已跳过\\n",
@ -389,6 +416,11 @@
"send_desktop_notification": "命令完成时发送桌面通知", "send_desktop_notification": "命令完成时发送桌面通知",
"serve_fabric_api_ollama_endpoints": "提供带有 ollama 端点的 Fabric REST API 服务", "serve_fabric_api_ollama_endpoints": "提供带有 ollama 端点的 Fabric REST API 服务",
"serve_fabric_rest_api": "提供 Fabric REST API 服务", "serve_fabric_rest_api": "提供 Fabric REST API 服务",
"server_chat_error": "错误: %v",
"server_error_marshaling_response": "序列化响应错误: %v",
"server_error_writing_response": "写入响应错误: %v",
"server_invalid_request_format": "无效的请求格式: %v",
"sessions_creating_new": "正在创建新会话:%s\n",
"set_debug_level": "设置调试级别0=关闭1=基本2=详细3=跟踪)", "set_debug_level": "设置调试级别0=关闭1=基本2=详细3=跟踪)",
"set_frequency_penalty": "设置频率惩罚", "set_frequency_penalty": "设置频率惩罚",
"set_location_web_search": "设置网络搜索结果的位置(例如,'America/Los_Angeles'", "set_location_web_search": "设置网络搜索结果的位置(例如,'America/Los_Angeles'",
@ -481,6 +513,15 @@
"spotify_total_episodes_label": "**总剧集数**: %d", "spotify_total_episodes_label": "**总剧集数**: %d",
"spotify_url_label": "**URL**: %s", "spotify_url_label": "**URL**: %s",
"start_tag_thinking_sections": "思考部分的开始标签", "start_tag_thinking_sections": "思考部分的开始标签",
"storage_error_delete": "无法删除%s%v",
"storage_error_load": "无法加载%s%v",
"storage_error_marshal": "无法序列化%s%s",
"storage_error_read_directory": "无法读取目录中的项目:%v",
"storage_error_rename": "无法将%s重命名为%s%v",
"storage_error_resolve_directory": "无法解析目录路径:%v",
"storage_error_save": "无法保存%s%v",
"storage_error_stat_entry": "无法获取条目%s的信息%v",
"storage_error_unmarshal": "无法反序列化%s%s",
"strategies_available_header": "可用的策略:", "strategies_available_header": "可用的策略:",
"strategies_cloning_repository": "正在克隆仓库 %s路径%s...\\n", "strategies_cloning_repository": "正在克隆仓库 %s路径%s...\\n",
"strategies_download_success": "✅ 已成功下载并安装策略到 %s\\n", "strategies_download_success": "✅ 已成功下载并安装策略到 %s\\n",
@ -503,6 +544,7 @@
"template_datetime_error_invalid_unit": "invalid time unit: %q", "template_datetime_error_invalid_unit": "invalid time unit: %q",
"template_datetime_error_relative_requires_value": "relative time requires a value", "template_datetime_error_relative_requires_value": "relative time requires a value",
"template_datetime_error_unknown_operation": "datetime: unknown operation %q", "template_datetime_error_unknown_operation": "datetime: unknown operation %q",
"template_extension_error": "扩展%s错误%v",
"template_file_error_expand_home_dir": "file: 无法展开主目录: %v", "template_file_error_expand_home_dir": "file: 无法展开主目录: %v",
"template_file_error_invalid_line_count": "file: 无效的行数 %q", "template_file_error_invalid_line_count": "file: 无效的行数 %q",
"template_file_error_line_count_positive": "file: 行数必须为正数", "template_file_error_line_count_positive": "file: 行数必须为正数",
@ -525,12 +567,23 @@
"template_file_log_size_for_path": "文件:路径 %q 的 size=%d", "template_file_log_size_for_path": "文件:路径 %q 的 size=%d",
"template_file_log_tail_returning_lines": "文件tail 返回 %d 行", "template_file_log_tail_returning_lines": "文件tail 返回 %d 行",
"template_file_log_validating_path": "文件:正在验证路径 %q", "template_file_log_validating_path": "文件:正在验证路径 %q",
"template_hash_open_file": "打开文件:%w",
"template_hash_read_file": "读取文件:%w",
"template_missing_required_variable": "缺少必需变量:%s",
"template_plugin_error": "插件%s错误%v",
"template_processing_stuck": "模板处理卡住 - 可能存在无限循环",
"template_sys_error_env_requires_var": "env: variable name required", "template_sys_error_env_requires_var": "env: variable name required",
"template_sys_error_home": "failed to get home directory: %v", "template_sys_error_home": "failed to get home directory: %v",
"template_sys_error_hostname": "failed to get hostname: %v", "template_sys_error_hostname": "failed to get hostname: %v",
"template_sys_error_pwd": "failed to get working directory: %v", "template_sys_error_pwd": "failed to get working directory: %v",
"template_sys_error_unknown_operation": "sys: unknown operation %q", "template_sys_error_unknown_operation": "sys: unknown operation %q",
"template_sys_error_user": "failed to get current user: %v", "template_sys_error_user": "failed to get current user: %v",
"template_text_empty_input": "文本:操作%q的输入为空",
"template_text_unknown_operation": "文本:未知文本操作%q支持upper、lower、title、trim",
"template_unknown_plugin_namespace": "未知的插件命名空间:%s",
"template_utils_failed_get_absolute_path": "获取绝对路径失败:%w",
"template_utils_failed_get_home_dir": "获取用户主目录失败:%w",
"template_utils_path_not_exist": "路径不存在:%w",
"transcription_model_required": "需要转录模型(使用 --transcribe-model", "transcription_model_required": "需要转录模型(使用 --transcribe-model",
"transparent_background_png_webp_only": "透明背景只能用于 PNG 和 WebP 格式,不支持 %s", "transparent_background_png_webp_only": "透明背景只能用于 PNG 和 WebP 格式,不支持 %s",
"tts_audio_generated_successfully": "TTS 音频生成成功并保存到: %s\n", "tts_audio_generated_successfully": "TTS 音频生成成功并保存到: %s\n",
@ -540,6 +593,12 @@
"update_patterns": "更新模式", "update_patterns": "更新模式",
"usage_header": "用法:", "usage_header": "用法:",
"use_model_defaults_raw_help": "在不发送聊天选项temperature、top_p 等)的情况下使用模型默认值。仅影响兼容 OpenAI 的提供商。Anthropic 模型始终使用智能参数选择以满足特定模型的要求。", "use_model_defaults_raw_help": "在不发送聊天选项temperature、top_p 等)的情况下使用模型默认值。仅影响兼容 OpenAI 的提供商。Anthropic 模型始终使用智能参数选择以满足特定模型的要求。",
"util_error_accessing_config_path": "访问默认配置路径错误:%w",
"util_error_determine_home_directory": "无法确定用户主目录:%w",
"util_error_get_absolute_path": "无法获取绝对路径",
"util_error_path_is_empty": "路径为空",
"util_error_resolve_home_directory": "无法解析主目录",
"util_error_resolve_symlinks": "无法解析符号链接:%w",
"vendor_no_transcription_support": "供应商 %s 不支持音频转录", "vendor_no_transcription_support": "供应商 %s 不支持音频转录",
"vendor_not_configured": "供应商 %s 未配置", "vendor_not_configured": "供应商 %s 未配置",
"vendor_not_found": "未找到供应商 %s", "vendor_not_found": "未找到供应商 %s",

View file

@ -63,7 +63,7 @@ func (c *Client) ListModels() ([]string, error) {
err, err,
) )
} }
return nil, fmt.Errorf("DigitalOcean model list unavailable. Set DIGITALOCEAN_TOKEN to fetch models from the control plane") return nil, fmt.Errorf("%s", i18n.T("digitalocean_model_list_unavailable"))
} }
return c.fetchModelsFromControlPlane(context.Background()) return c.fetchModelsFromControlPlane(context.Background())
} }
@ -75,7 +75,7 @@ func (c *Client) fetchModelsFromControlPlane(ctx context.Context) ([]string, err
fullURL, err := url.Parse(controlPlaneModelsURL) fullURL, err := url.Parse(controlPlaneModelsURL)
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to parse DigitalOcean control plane URL: %w", err) return nil, fmt.Errorf(i18n.T("digitalocean_failed_parse_control_plane_url"), err)
} }
req, err := http.NewRequestWithContext(ctx, http.MethodGet, fullURL.String(), nil) req, err := http.NewRequestWithContext(ctx, http.MethodGet, fullURL.String(), nil)

View file

@ -4,6 +4,8 @@ import (
"fmt" "fmt"
"sort" "sort"
"strings" "strings"
"github.com/danielmiessler/fabric/internal/i18n"
) )
// GeminiVoice represents a Gemini TTS voice with its characteristics // GeminiVoice represents a Gemini TTS voice with its characteristics
@ -119,7 +121,7 @@ func GetGeminiVoiceByName(name string) (*GeminiVoice, error) {
return &voice, nil return &voice, nil
} }
} }
return nil, fmt.Errorf("voice '%s' not found", name) return nil, fmt.Errorf(i18n.T("gemini_voice_not_found"), name)
} }
// ListGeminiVoices formats the voice list for display // ListGeminiVoices formats the voice list for display

View file

@ -9,6 +9,7 @@ import (
"strings" "strings"
"time" "time"
"github.com/danielmiessler/fabric/internal/i18n"
"github.com/danielmiessler/fabric/internal/plugins/ai/openai" "github.com/danielmiessler/fabric/internal/plugins/ai/openai"
) )
@ -92,7 +93,7 @@ func (c *Client) fetchAbacusModels() ([]string, error) {
defer resp.Body.Close() defer resp.Body.Close()
if resp.StatusCode != http.StatusOK { if resp.StatusCode != http.StatusOK {
return nil, fmt.Errorf("abacus models endpoint returned status %d", resp.StatusCode) return nil, fmt.Errorf(i18n.T("abacus_models_endpoint_status"), resp.StatusCode)
} }
var response struct { var response struct {
@ -200,7 +201,7 @@ func (c *Client) getStaticModels(modelsKey string) ([]string, error) {
"MiniMax-M2.1-lightning", "MiniMax-M2.1-lightning",
}, nil }, nil
default: default:
return nil, fmt.Errorf("unknown static model list: %s", modelsKey) return nil, fmt.Errorf(i18n.T("openai_compatible_unknown_static_model_list"), modelsKey)
} }
} }

View file

@ -7,6 +7,7 @@ import (
"strings" "strings"
"time" "time"
"github.com/danielmiessler/fabric/internal/i18n"
"github.com/joho/godotenv" "github.com/joho/godotenv"
) )
@ -80,7 +81,7 @@ func (o *Db) Configure() (err error) {
func (o *Db) LoadEnvFile() (err error) { func (o *Db) LoadEnvFile() (err error) {
if err = godotenv.Load(o.EnvFilePath); err != nil { if err = godotenv.Load(o.EnvFilePath); err != nil {
err = fmt.Errorf("error loading .env file: %s", err) err = fmt.Errorf(i18n.T("db_error_loading_env_file"), err)
} }
return return
} }

View file

@ -61,12 +61,12 @@ func (o *PatternsEntity) loadPattern(source string) (pattern *Pattern, err error
// Resolve the file path using GetAbsolutePath // Resolve the file path using GetAbsolutePath
var absPath string var absPath string
if absPath, err = util.GetAbsolutePath(source); err != nil { if absPath, err = util.GetAbsolutePath(source); err != nil {
return nil, fmt.Errorf("could not resolve file path: %v", err) return nil, fmt.Errorf(i18n.T("patterns_error_resolve_file_path"), err)
} }
// Use the resolved absolute path to get the pattern // Use the resolved absolute path to get the pattern
if pattern, err = o.getFromFile(absPath); err != nil { if pattern, err = o.getFromFile(absPath); err != nil {
return nil, fmt.Errorf("could not load pattern from file %s: %w", absPath, err) return nil, fmt.Errorf(i18n.T("patterns_error_load_from_file"), absPath, err)
} }
} else { } else {
// Otherwise, get the pattern from the database // Otherwise, get the pattern from the database
@ -154,7 +154,7 @@ func (o *PatternsEntity) getFromDB(name string) (ret *Pattern, err error) {
func (o *PatternsEntity) PrintLatestPatterns(latestNumber int) (err error) { func (o *PatternsEntity) PrintLatestPatterns(latestNumber int) (err error) {
var contents []byte var contents []byte
if contents, err = os.ReadFile(o.UniquePatternsFilePath); err != nil { if contents, err = os.ReadFile(o.UniquePatternsFilePath); err != nil {
err = fmt.Errorf("could not read unique patterns file. Please run --updatepatterns (%s)", err) err = fmt.Errorf(i18n.T("patterns_error_read_unique_file"), err)
return return
} }
uniquePatterns := strings.Split(string(contents), "\n") uniquePatterns := strings.Split(string(contents), "\n")
@ -174,7 +174,7 @@ func (o *PatternsEntity) getFromFile(pathStr string) (pattern *Pattern, err erro
if strings.HasPrefix(pathStr, "~/") { if strings.HasPrefix(pathStr, "~/") {
var homedir string var homedir string
if homedir, err = os.UserHomeDir(); err != nil { if homedir, err = os.UserHomeDir(); err != nil {
err = fmt.Errorf("could not get home directory: %v", err) err = fmt.Errorf(i18n.T("patterns_error_get_home_directory"), err)
return return
} }
pathStr = filepath.Join(homedir, pathStr[2:]) pathStr = filepath.Join(homedir, pathStr[2:])
@ -182,7 +182,7 @@ func (o *PatternsEntity) getFromFile(pathStr string) (pattern *Pattern, err erro
var content []byte var content []byte
if content, err = os.ReadFile(pathStr); err != nil { if content, err = os.ReadFile(pathStr); err != nil {
err = fmt.Errorf("could not read pattern file %s: %v", pathStr, err) err = fmt.Errorf(i18n.T("patterns_error_read_pattern_file"), pathStr, err)
return return
} }
pattern = &Pattern{ pattern = &Pattern{
@ -265,11 +265,11 @@ func (o *PatternsEntity) Get(name string) (*Pattern, error) {
func (o *PatternsEntity) Save(name string, content []byte) (err error) { func (o *PatternsEntity) Save(name string, content []byte) (err error) {
patternDir := filepath.Join(o.Dir, name) patternDir := filepath.Join(o.Dir, name)
if err = os.MkdirAll(patternDir, os.ModePerm); err != nil { if err = os.MkdirAll(patternDir, os.ModePerm); err != nil {
return fmt.Errorf("could not create pattern directory: %v", err) return fmt.Errorf(i18n.T("patterns_error_create_directory"), err)
} }
patternPath := filepath.Join(patternDir, o.SystemPatternFile) patternPath := filepath.Join(patternDir, o.SystemPatternFile)
if err = os.WriteFile(patternPath, content, 0644); err != nil { if err = os.WriteFile(patternPath, content, 0644); err != nil {
return fmt.Errorf("could not save pattern: %v", err) return fmt.Errorf(i18n.T("patterns_error_save_pattern"), err)
} }
return nil return nil
} }

View file

@ -5,6 +5,7 @@ import (
"github.com/danielmiessler/fabric/internal/chat" "github.com/danielmiessler/fabric/internal/chat"
"github.com/danielmiessler/fabric/internal/domain" "github.com/danielmiessler/fabric/internal/domain"
"github.com/danielmiessler/fabric/internal/i18n"
) )
type SessionsEntity struct { type SessionsEntity struct {
@ -17,7 +18,7 @@ func (o *SessionsEntity) Get(name string) (session *Session, err error) {
if o.Exists(name) { if o.Exists(name) {
err = o.LoadAsJson(name, &session.Messages) err = o.LoadAsJson(name, &session.Messages)
} else { } else {
fmt.Printf("Creating new session: %s\n", name) fmt.Printf(i18n.T("sessions_creating_new"), name)
} }
return return
} }

View file

@ -30,13 +30,13 @@ func (o *StorageEntity) GetNames() (ret []string, err error) {
// Resolve the directory path to an absolute path // Resolve the directory path to an absolute path
absDir, err := util.GetAbsolutePath(o.Dir) absDir, err := util.GetAbsolutePath(o.Dir)
if err != nil { if err != nil {
return nil, fmt.Errorf("could not resolve directory path: %v", err) return nil, fmt.Errorf(i18n.T("storage_error_resolve_directory"), err)
} }
// Read the directory entries // Read the directory entries
var entries []os.DirEntry var entries []os.DirEntry
if entries, err = os.ReadDir(absDir); err != nil { if entries, err = os.ReadDir(absDir); err != nil {
return nil, fmt.Errorf("could not read items from directory: %v", err) return nil, fmt.Errorf(i18n.T("storage_error_read_directory"), err)
} }
for _, entry := range entries { for _, entry := range entries {
@ -45,7 +45,7 @@ func (o *StorageEntity) GetNames() (ret []string, err error) {
// Get metadata for the entry, including symlink info // Get metadata for the entry, including symlink info
fileInfo, err := os.Lstat(entryPath) fileInfo, err := os.Lstat(entryPath)
if err != nil { if err != nil {
return nil, fmt.Errorf("could not stat entry %s: %v", entryPath, err) return nil, fmt.Errorf(i18n.T("storage_error_stat_entry"), entryPath, err)
} }
// Determine if the entry should be included // Determine if the entry should be included
@ -69,7 +69,7 @@ func (o *StorageEntity) GetNames() (ret []string, err error) {
func (o *StorageEntity) Delete(name string) (err error) { func (o *StorageEntity) Delete(name string) (err error) {
if err = os.RemoveAll(o.BuildFilePathByName(name)); err != nil { if err = os.RemoveAll(o.BuildFilePathByName(name)); err != nil {
err = fmt.Errorf("could not delete %s: %v", name, err) err = fmt.Errorf(i18n.T("storage_error_delete"), name, err)
} }
return return
} }
@ -82,21 +82,21 @@ func (o *StorageEntity) Exists(name string) (ret bool) {
func (o *StorageEntity) Rename(oldName, newName string) (err error) { func (o *StorageEntity) Rename(oldName, newName string) (err error) {
if err = os.Rename(o.BuildFilePathByName(oldName), o.BuildFilePathByName(newName)); err != nil { if err = os.Rename(o.BuildFilePathByName(oldName), o.BuildFilePathByName(newName)); err != nil {
err = fmt.Errorf("could not rename %s to %s: %v", oldName, newName, err) err = fmt.Errorf(i18n.T("storage_error_rename"), oldName, newName, err)
} }
return return
} }
func (o *StorageEntity) Save(name string, content []byte) (err error) { func (o *StorageEntity) Save(name string, content []byte) (err error) {
if err = os.WriteFile(o.BuildFilePathByName(name), content, 0644); err != nil { if err = os.WriteFile(o.BuildFilePathByName(name), content, 0644); err != nil {
err = fmt.Errorf("could not save %s: %v", name, err) err = fmt.Errorf(i18n.T("storage_error_save"), name, err)
} }
return return
} }
func (o *StorageEntity) Load(name string) (ret []byte, err error) { func (o *StorageEntity) Load(name string) (ret []byte, err error) {
if ret, err = os.ReadFile(o.BuildFilePathByName(name)); err != nil { if ret, err = os.ReadFile(o.BuildFilePathByName(name)); err != nil {
err = fmt.Errorf("could not load %s: %v", name, err) err = fmt.Errorf(i18n.T("storage_error_load"), name, err)
} }
return return
} }
@ -139,7 +139,7 @@ func (o *StorageEntity) SaveAsJson(name string, item any) (err error) {
if jsonString, err = json.Marshal(item); err == nil { if jsonString, err = json.Marshal(item); err == nil {
err = o.Save(name, jsonString) err = o.Save(name, jsonString)
} else { } else {
err = fmt.Errorf("could not marshal %s: %s", name, err) err = fmt.Errorf(i18n.T("storage_error_marshal"), name, err)
} }
return err return err
@ -152,7 +152,7 @@ func (o *StorageEntity) LoadAsJson(name string, item any) (err error) {
} }
if err = json.Unmarshal(content, &item); err != nil { if err = json.Unmarshal(content, &item); err != nil {
err = fmt.Errorf("could not unmarshal %s: %s", name, err) err = fmt.Errorf(i18n.T("storage_error_unmarshal"), name, err)
} }
return return
} }

View file

@ -6,6 +6,8 @@ import (
"fmt" "fmt"
"io" "io"
"os" "os"
"github.com/danielmiessler/fabric/internal/i18n"
) )
// ComputeHash computes SHA-256 hash of a file at given path. // ComputeHash computes SHA-256 hash of a file at given path.
@ -13,13 +15,13 @@ import (
func ComputeHash(path string) (string, error) { func ComputeHash(path string) (string, error) {
f, err := os.Open(path) f, err := os.Open(path)
if err != nil { if err != nil {
return "", fmt.Errorf("open file: %w", err) return "", fmt.Errorf(i18n.T("template_hash_open_file"), err)
} }
defer f.Close() defer f.Close()
h := sha256.New() h := sha256.New()
if _, err := io.Copy(h, f); err != nil { if _, err := io.Copy(h, f); err != nil {
return "", fmt.Errorf("read file: %w", err) return "", fmt.Errorf(i18n.T("template_hash_read_file"), err)
} }
return hex.EncodeToString(h.Sum(nil)), nil return hex.EncodeToString(h.Sum(nil)), nil

View file

@ -7,6 +7,7 @@ import (
"regexp" "regexp"
"strings" "strings"
"github.com/danielmiessler/fabric/internal/i18n"
debuglog "github.com/danielmiessler/fabric/internal/log" debuglog "github.com/danielmiessler/fabric/internal/log"
) )
@ -80,7 +81,7 @@ func ApplyTemplate(content string, variables map[string]string, input string) (s
debugf("Extension call: name=%s operation=%s value=%s\n", name, operation, value) debugf("Extension call: name=%s operation=%s value=%s\n", name, operation, value)
result, err := extensionManager.ProcessExtension(name, operation, value) result, err := extensionManager.ProcessExtension(name, operation, value)
if err != nil { if err != nil {
return "", fmt.Errorf("extension %s error: %v", name, err) return "", fmt.Errorf(i18n.T("template_extension_error"), name, err)
} }
content = strings.ReplaceAll(content, full, result) content = strings.ReplaceAll(content, full, result)
progress = true progress = true
@ -114,11 +115,11 @@ func ApplyTemplate(content string, variables map[string]string, input string) (s
debugf("Executing sys plugin\n") debugf("Executing sys plugin\n")
result, err = sysPlugin.Apply(operation, value) result, err = sysPlugin.Apply(operation, value)
default: default:
return "", fmt.Errorf("unknown plugin namespace: %s", namespace) return "", fmt.Errorf(i18n.T("template_unknown_plugin_namespace"), namespace)
} }
if err != nil { if err != nil {
debugf("Plugin error: %v\n", err) debugf("Plugin error: %v\n", err)
return "", fmt.Errorf("plugin %s error: %v", namespace, err) return "", fmt.Errorf(i18n.T("template_plugin_error"), namespace, err)
} }
content = strings.ReplaceAll(content, full, result) content = strings.ReplaceAll(content, full, result)
progress = true progress = true
@ -134,7 +135,7 @@ func ApplyTemplate(content string, variables map[string]string, input string) (s
default: default:
val, ok := variables[raw] val, ok := variables[raw]
if !ok { if !ok {
return "", fmt.Errorf("missing required variable: %s", raw) return "", fmt.Errorf(i18n.T("template_missing_required_variable"), raw)
} }
content = strings.ReplaceAll(content, full, val) content = strings.ReplaceAll(content, full, val)
progress = true progress = true
@ -142,7 +143,7 @@ func ApplyTemplate(content string, variables map[string]string, input string) (s
} }
if !progress { if !progress {
return "", fmt.Errorf("template processing stuck - potential infinite loop") return "", fmt.Errorf("%s", i18n.T("template_processing_stuck"))
} }
} }

View file

@ -5,6 +5,8 @@ import (
"fmt" "fmt"
"strings" "strings"
"unicode" "unicode"
"github.com/danielmiessler/fabric/internal/i18n"
) )
// TextPlugin provides string manipulation operations // TextPlugin provides string manipulation operations
@ -34,7 +36,7 @@ func (p *TextPlugin) Apply(operation string, value string) (string, error) {
debugf("TextPlugin: operation=%s value=%q", operation, value) debugf("TextPlugin: operation=%s value=%q", operation, value)
if value == "" { if value == "" {
return "", fmt.Errorf("text: empty input for operation %q", operation) return "", fmt.Errorf(i18n.T("template_text_empty_input"), operation)
} }
switch operation { switch operation {
@ -59,6 +61,6 @@ func (p *TextPlugin) Apply(operation string, value string) (string, error) {
return result, nil return result, nil
default: default:
return "", fmt.Errorf("text: unknown text operation %q (supported: upper, lower, title, trim)", operation) return "", fmt.Errorf(i18n.T("template_text_unknown_operation"), operation)
} }
} }

View file

@ -7,6 +7,8 @@ import (
"os/user" "os/user"
"path/filepath" "path/filepath"
"strings" "strings"
"github.com/danielmiessler/fabric/internal/i18n"
) )
// ExpandPath expands the ~ to user's home directory and returns absolute path // ExpandPath expands the ~ to user's home directory and returns absolute path
@ -20,7 +22,7 @@ func ExpandPath(path string) (string, error) {
if strings.HasPrefix(path, "~/") { if strings.HasPrefix(path, "~/") {
usr, err := user.Current() usr, err := user.Current()
if err != nil { if err != nil {
return "", fmt.Errorf("failed to get user home directory: %w", err) return "", fmt.Errorf(i18n.T("template_utils_failed_get_home_dir"), err)
} }
// Replace ~/ with actual home directory // Replace ~/ with actual home directory
path = filepath.Join(usr.HomeDir, path[2:]) path = filepath.Join(usr.HomeDir, path[2:])
@ -29,12 +31,12 @@ func ExpandPath(path string) (string, error) {
// Convert to absolute path // Convert to absolute path
absPath, err := filepath.Abs(path) absPath, err := filepath.Abs(path)
if err != nil { if err != nil {
return "", fmt.Errorf("failed to get absolute path: %w", err) return "", fmt.Errorf(i18n.T("template_utils_failed_get_absolute_path"), err)
} }
// Check if path exists // Check if path exists
if _, err := os.Stat(absPath); err != nil { if _, err := os.Stat(absPath); err != nil {
return "", fmt.Errorf("path does not exist: %w", err) return "", fmt.Errorf(i18n.T("template_utils_path_not_exist"), err)
} }
return absPath, nil return absPath, nil

View file

@ -13,6 +13,7 @@ import (
"github.com/danielmiessler/fabric/internal/core" "github.com/danielmiessler/fabric/internal/core"
"github.com/danielmiessler/fabric/internal/domain" "github.com/danielmiessler/fabric/internal/domain"
"github.com/danielmiessler/fabric/internal/i18n"
"github.com/danielmiessler/fabric/internal/plugins/db/fsdb" "github.com/danielmiessler/fabric/internal/plugins/db/fsdb"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
) )
@ -75,7 +76,7 @@ func (h *ChatHandler) HandleChat(c *gin.Context) {
if err := c.BindJSON(&request); err != nil { if err := c.BindJSON(&request); err != nil {
log.Printf("Error binding JSON: %v", err) log.Printf("Error binding JSON: %v", err)
c.Writer.Header().Set("Strict-Transport-Security", "max-age=63072000; includeSubDomains") c.Writer.Header().Set("Strict-Transport-Security", "max-age=63072000; includeSubDomains")
c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("Invalid request format: %v", err)}) c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf(i18n.T("server_invalid_request_format"), err)})
return return
} }
@ -122,7 +123,7 @@ func (h *ChatHandler) HandleChat(c *gin.Context) {
chatter, err := h.registry.GetChatter(p.Model, request.ModelContextLength, p.Vendor, "", true, false) chatter, err := h.registry.GetChatter(p.Model, request.ModelContextLength, p.Vendor, "", true, false)
if err != nil { if err != nil {
log.Printf("Error creating chatter: %v", err) log.Printf("Error creating chatter: %v", err)
streamChan <- domain.StreamUpdate{Type: domain.StreamTypeError, Content: fmt.Sprintf("Error: %v", err)} streamChan <- domain.StreamUpdate{Type: domain.StreamTypeError, Content: fmt.Sprintf(i18n.T("server_chat_error"), err)}
return return
} }
@ -209,11 +210,11 @@ func (h *ChatHandler) HandleChat(c *gin.Context) {
func writeSSEResponse(w gin.ResponseWriter, response StreamResponse) error { func writeSSEResponse(w gin.ResponseWriter, response StreamResponse) error {
data, err := json.Marshal(response) data, err := json.Marshal(response)
if err != nil { if err != nil {
return fmt.Errorf("error marshaling response: %v", err) return fmt.Errorf("%s", fmt.Sprintf(i18n.T("server_error_marshaling_response"), err))
} }
if _, err := fmt.Fprintf(w, "data: %s\n\n", string(data)); err != nil { if _, err := fmt.Fprintf(w, "data: %s\n\n", string(data)); err != nil {
return fmt.Errorf("error writing response: %v", err) return fmt.Errorf("%s", fmt.Sprintf(i18n.T("server_error_writing_response"), err))
} }
w.(http.Flusher).Flush() w.(http.Flusher).Flush()

View file

@ -50,7 +50,7 @@ func (o *CustomPatterns) configure() error {
if _, err := os.Stat(o.CustomPatternsDir.Value); os.IsNotExist(err) { if _, err := os.Stat(o.CustomPatternsDir.Value); os.IsNotExist(err) {
if err := os.MkdirAll(o.CustomPatternsDir.Value, 0755); err != nil { if err := os.MkdirAll(o.CustomPatternsDir.Value, 0755); err != nil {
// Log the error but don't clear the value - let it persist in env file // Log the error but don't clear the value - let it persist in env file
fmt.Printf("Warning: Could not create custom patterns directory %s: %v\n", o.CustomPatternsDir.Value, err) fmt.Printf(i18n.T("custom_patterns_warning_create_directory"), o.CustomPatternsDir.Value, err)
} }
} }
} }

View file

@ -7,6 +7,7 @@ import (
"path/filepath" "path/filepath"
"strings" "strings"
"github.com/danielmiessler/fabric/internal/i18n"
"github.com/go-git/go-git/v5" "github.com/go-git/go-git/v5"
"github.com/go-git/go-git/v5/plumbing/object" "github.com/go-git/go-git/v5/plumbing/object"
"github.com/go-git/go-git/v5/storage/memory" "github.com/go-git/go-git/v5/storage/memory"
@ -41,30 +42,30 @@ func FetchFilesFromRepo(opts FetchOptions) error {
Depth: 1, Depth: 1,
}) })
if err != nil { if err != nil {
return fmt.Errorf("failed to clone repository: %w", err) return fmt.Errorf(i18n.T("githelper_failed_clone_repository"), err)
} }
// Get HEAD reference // Get HEAD reference
ref, err := r.Head() ref, err := r.Head()
if err != nil { if err != nil {
return fmt.Errorf("failed to get repository HEAD: %w", err) return fmt.Errorf(i18n.T("githelper_failed_get_head"), err)
} }
// Get commit object // Get commit object
commit, err := r.CommitObject(ref.Hash()) commit, err := r.CommitObject(ref.Hash())
if err != nil { if err != nil {
return fmt.Errorf("failed to get commit: %w", err) return fmt.Errorf(i18n.T("githelper_failed_get_commit"), err)
} }
// Get the file tree // Get the file tree
tree, err := commit.Tree() tree, err := commit.Tree()
if err != nil { if err != nil {
return fmt.Errorf("failed to get tree: %w", err) return fmt.Errorf(i18n.T("githelper_failed_get_tree"), err)
} }
// Ensure destination directory exists // Ensure destination directory exists
if err := os.MkdirAll(opts.DestDir, 0755); err != nil { if err := os.MkdirAll(opts.DestDir, 0755); err != nil {
return fmt.Errorf("failed to create destination directory: %w", err) return fmt.Errorf(i18n.T("githelper_failed_create_dest_directory"), err)
} }
// Extract files from the tree // Extract files from the tree

View file

@ -5,6 +5,8 @@ import (
"os" "os"
"os/exec" "os/exec"
"runtime" "runtime"
"github.com/danielmiessler/fabric/internal/i18n"
) )
// NotificationProvider interface for different notification backends // NotificationProvider interface for different notification backends
@ -43,7 +45,7 @@ func NewNotificationManager() *NotificationManager {
// Send sends a notification using the configured provider // Send sends a notification using the configured provider
func (nm *NotificationManager) Send(title, message string) error { func (nm *NotificationManager) Send(title, message string) error {
if nm.provider == nil { if nm.provider == nil {
return fmt.Errorf("no notification provider available") return fmt.Errorf("%s", i18n.T("notifications_no_provider_available"))
} }
return nm.provider.Send(title, message) return nm.provider.Send(title, message)
} }

View file

@ -7,12 +7,14 @@ import (
"path/filepath" "path/filepath"
"runtime" "runtime"
"strings" "strings"
"github.com/danielmiessler/fabric/internal/i18n"
) )
// GetAbsolutePath resolves a given path to its absolute form, handling ~, ./, ../, UNC paths, and symlinks. // GetAbsolutePath resolves a given path to its absolute form, handling ~, ./, ../, UNC paths, and symlinks.
func GetAbsolutePath(path string) (string, error) { func GetAbsolutePath(path string) (string, error) {
if path == "" { if path == "" {
return "", errors.New("path is empty") return "", errors.New(i18n.T("util_error_path_is_empty"))
} }
// Handle UNC paths on Windows // Handle UNC paths on Windows
@ -24,7 +26,7 @@ func GetAbsolutePath(path string) (string, error) {
if strings.HasPrefix(path, "~") { if strings.HasPrefix(path, "~") {
home, err := os.UserHomeDir() home, err := os.UserHomeDir()
if err != nil { if err != nil {
return "", errors.New("could not resolve home directory") return "", errors.New(i18n.T("util_error_resolve_home_directory"))
} }
path = filepath.Join(home, path[1:]) path = filepath.Join(home, path[1:])
} }
@ -32,7 +34,7 @@ func GetAbsolutePath(path string) (string, error) {
// Convert to absolute path // Convert to absolute path
absPath, err := filepath.Abs(path) absPath, err := filepath.Abs(path)
if err != nil { if err != nil {
return "", errors.New("could not get absolute path") return "", errors.New(i18n.T("util_error_get_absolute_path"))
} }
// Resolve symlinks, but allow non-existent paths // Resolve symlinks, but allow non-existent paths
@ -45,7 +47,7 @@ func GetAbsolutePath(path string) (string, error) {
return absPath, nil return absPath, nil
} }
return "", fmt.Errorf("could not resolve symlinks: %w", err) return "", fmt.Errorf(i18n.T("util_error_resolve_symlinks"), err)
} }
// Helper function to check if a symlink points to a directory // Helper function to check if a symlink points to a directory
@ -77,7 +79,7 @@ func IsSymlinkToDir(path string) bool {
func GetDefaultConfigPath() (string, error) { func GetDefaultConfigPath() (string, error) {
homeDir, err := os.UserHomeDir() homeDir, err := os.UserHomeDir()
if err != nil { if err != nil {
return "", fmt.Errorf("could not determine user home directory: %w", err) return "", fmt.Errorf(i18n.T("util_error_determine_home_directory"), err)
} }
defaultConfigPath := filepath.Join(homeDir, ".config", "fabric", "config.yaml") defaultConfigPath := filepath.Join(homeDir, ".config", "fabric", "config.yaml")
@ -85,7 +87,7 @@ func GetDefaultConfigPath() (string, error) {
if os.IsNotExist(err) { if os.IsNotExist(err) {
return "", nil // Return no error for non-existent config path return "", nil // Return no error for non-existent config path
} }
return "", fmt.Errorf("error accessing default config path: %w", err) return "", fmt.Errorf(i18n.T("util_error_accessing_config_path"), err)
} }
return defaultConfigPath, nil return defaultConfigPath, nil
} }