mirror of
https://github.com/danielmiessler/Fabric.git
synced 2026-01-07 21:44:02 -05:00
feat: localize setup process and add funding configuration
- Add GitHub and Buy Me a Coffee funding configuration. - Localize setup prompts and error messages across multiple languages. - Implement helper for localized questions with static environment keys. - Update environment variable builder to handle hyphenated plugin names. - Replace hardcoded console output with localized i18n translation strings. - Expand locale files with comprehensive pattern and strategy translations. - Add new i18n keys for optional and required markers - Remove hardcoded `[required]` markers from description strings - Add custom patterns, Jina AI, YouTube, and language labels - Switch plugin descriptions to use i18n translation keys - Append markers dynamically to setup descriptions in Go code - Remove trailing newlines from plugin question prompt strings - Standardize all locale files with consistent formatting changes
This commit is contained in:
2
.github/FUNDING.yml
vendored
Normal file
2
.github/FUNDING.yml
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
github: [danielmiessler, ksylvan]
|
||||
buy_me_a_coffee: kayvansylvan
|
||||
7
cmd/generate_changelog/incoming/1895.txt
Normal file
7
cmd/generate_changelog/incoming/1895.txt
Normal file
@@ -0,0 +1,7 @@
|
||||
### PR [#1895](https://github.com/danielmiessler/Fabric/pull/1895) by [ksylvan](https://github.com/ksylvan): Localize setup process and add funding configuration
|
||||
|
||||
- Localize setup prompts and error messages across multiple languages
|
||||
- Implement helper for localized questions with static environment keys
|
||||
- Update environment variable builder to handle hyphenated plugin names
|
||||
- Replace hardcoded console output with localized i18n translation strings
|
||||
- Add GitHub and Buy Me a Coffee funding configuration
|
||||
@@ -320,7 +320,7 @@ func (o *PluginRegistry) runVendorSetup() (err error) {
|
||||
|
||||
// runInteractiveSetup runs the standard interactive setup menu
|
||||
func (o *PluginRegistry) runInteractiveSetup() (err error) {
|
||||
setupQuestion := plugins.NewSetupQuestion("Enter the number of the plugin to setup")
|
||||
setupQuestion := plugins.NewSetupQuestion(i18n.T("setup_plugin_prompt"))
|
||||
groupsPlugins := util.NewGroupsItemsSelector(i18n.T("setup_available_plugins"),
|
||||
func(plugin plugins.Plugin) string {
|
||||
var configuredLabel string
|
||||
|
||||
@@ -183,6 +183,7 @@
|
||||
"setup_enter_ai_provider_number": "KI-Anbieter-Nummer",
|
||||
"setup_available_plugins": "Verfügbare Plugins:",
|
||||
"setup_plugin_number": "Plugin-Nummer",
|
||||
"setup_plugin_prompt": "Geben Sie die Nummer des Plugins ein, das eingerichtet werden soll",
|
||||
"setup_required_configuration_header": "━━━ ERFORDERLICHE KONFIGURATION ━━━\n\nKI-Anbieter [mindestens einer erforderlich]",
|
||||
"setup_required_tools": "Erforderliche Werkzeuge",
|
||||
"setup_optional_configuration_header": "━━━ OPTIONALE KONFIGURATION ━━━\n\nOptionale Werkzeuge",
|
||||
@@ -207,5 +208,82 @@
|
||||
"pattern_not_found_no_patterns": "Pattern '%s' nicht gefunden.\n\nKeine Patterns installiert! Um dies zu beheben:\n • Führen Sie 'fabric --setup' aus, um Patterns zu konfigurieren und herunterzuladen\n • Oder führen Sie 'fabric -U' aus, um Patterns direkt herunterzuladen/zu aktualisieren",
|
||||
"pattern_not_found_list_available": "Pattern '%s' nicht gefunden. Führen Sie 'fabric -l' aus, um verfügbare Patterns anzuzeigen",
|
||||
"plugin_configured": " ✓",
|
||||
"plugin_not_configured": " ⚠️ NICHT KONFIGURIERT"
|
||||
"plugin_not_configured": " ⚠️ NICHT KONFIGURIERT",
|
||||
"defaults_setup_description": "Standard-KI-Anbieter und -Modell",
|
||||
"defaults_model_question": "Geben Sie den Index oder den Namen Ihres Standardmodells ein",
|
||||
"defaults_model_context_length_question": "Geben Sie die Kontextlänge des Modells ein",
|
||||
"custom_patterns_label": "Benutzerdefinierte Patterns",
|
||||
"custom_patterns_setup_description": "Benutzerdefinierte Patterns - Verzeichnis für Ihre benutzerdefinierten Patterns festlegen",
|
||||
"custom_patterns_directory_question": "Geben Sie den Pfad zu Ihrem benutzerdefinierten Pattern-Verzeichnis ein",
|
||||
"jina_label": "Jina AI",
|
||||
"jina_setup_description": "Jina AI Service - zum Erfassen einer Webseite als sauberer, LLM-freundlicher Text",
|
||||
"youtube_label": "YouTube",
|
||||
"youtube_setup_description": "YouTube - zum Erfassen von Video-Transkripten (via yt-dlp) und Kommentaren/Metadaten (via YouTube API)",
|
||||
"language_label": "Sprache",
|
||||
"language_setup_description": "Sprache - Standard-Ausgabesprache des AI-Anbieters",
|
||||
"language_output_question": "Geben Sie Ihre Standard-Ausgabesprache ein (zum Beispiel: zh_CN)",
|
||||
"optional_marker": "(optional)",
|
||||
"required_marker": "[erforderlich]",
|
||||
"patterns_loader_label": "Pattern-Loader",
|
||||
"patterns_setup_description": "Patterns – lädt Patterns herunter",
|
||||
"patterns_git_repo_url_label": "Git Repo URL",
|
||||
"patterns_git_repo_url_question": "Geben Sie die Standard-Git-Repository-URL für die Patterns ein",
|
||||
"patterns_git_repo_folder_label": "Git Repo Patterns Ordner",
|
||||
"patterns_git_repo_folder_question": "Geben Sie den Standardordner im Git-Repository an, in dem die Patterns gespeichert sind",
|
||||
"patterns_failed_create_temp_folder": "Fehler beim Erstellen des temporären Pattern-Ordners: %w",
|
||||
"patterns_downloading": "Lade Patterns herunter und befülle %s...\\n",
|
||||
"patterns_failed_download_from_git": "Fehler beim Herunterladen der Patterns aus dem Git-Repository: %w",
|
||||
"patterns_saving_updated_configuration": "💾 Aktualisierte Konfiguration wird gespeichert (Pfad geändert von '%s' zu '%s')...\\n",
|
||||
"patterns_failed_move_patterns": "Fehler beim Verschieben der Patterns in das Konfigurationsverzeichnis: %w",
|
||||
"patterns_download_success": "✅ Patterns erfolgreich nach %s heruntergeladen und installiert\\n",
|
||||
"patterns_failed_unique_file": "Fehler beim Erstellen der Datei mit eindeutigen Patterns: %w",
|
||||
"patterns_failed_access_directory": "Fehler beim Zugriff auf den Pattern-Ordner '%s': %w",
|
||||
"patterns_preserve_warning": "Warnung: Benutzerdefiniertes Pattern '%s' konnte nicht erhalten werden: %v\\n",
|
||||
"patterns_preserved_custom_pattern": "Benutzerdefiniertes Pattern beibehalten: %s\\n",
|
||||
"patterns_failed_create_temp_dir": "Fehler beim Erstellen des temporären Verzeichnisses: %w",
|
||||
"patterns_cloning_repository": "Repository %s wird geklont (Pfad: %s)...\\n",
|
||||
"patterns_failed_download_from_repo": "Fehler beim Herunterladen der Patterns von %s: %w",
|
||||
"patterns_failed_read_temp_directory": "Fehler beim Lesen des temporären Pattern-Verzeichnisses: %w",
|
||||
"patterns_no_patterns_migration_failed": "Keine Patterns im Repository unter Pfad %s gefunden und Migration fehlgeschlagen: %w",
|
||||
"patterns_downloaded_temp": "%d Patterns in temporäres Verzeichnis heruntergeladen\\n",
|
||||
"patterns_detected_old_path": "🔄 Alter Pattern-Pfad 'patterns' erkannt, versuche Migration zu 'data/patterns'...",
|
||||
"patterns_warning_remove_test_folder": "Warnung: Der temporäre Testordner '%s' konnte nicht entfernt werden: %v\\n",
|
||||
"patterns_found_new_path": "✅ %d Patterns im neuen Pfad '%s' gefunden, Konfiguration wird aktualisiert...\\n",
|
||||
"patterns_failed_move_test_patterns": "Fehler beim Verschieben der Test-Patterns in den temporären Ordner: %w",
|
||||
"patterns_unable_to_find_or_migrate": "Keine Patterns im aktuellen Pfad '%s' gefunden oder Migration auf neue Struktur fehlgeschlagen",
|
||||
"patterns_failed_read_directory": "Fehler beim Lesen des Pattern-Verzeichnisses: %w",
|
||||
"patterns_debug_included_custom_directory": "📂 Auch Patterns aus dem benutzerdefinierten Verzeichnis aufgenommen: %s\\n",
|
||||
"patterns_warning_custom_directory": "Warnung: Benutzerdefiniertes Pattern-Verzeichnis %s konnte nicht gelesen werden: %v\\n",
|
||||
"patterns_no_patterns_found_in_directories": "Keine Patterns in den Verzeichnissen %s und %s gefunden",
|
||||
"patterns_no_patterns_found_in_directory": "Keine Patterns im Verzeichnis %s gefunden",
|
||||
"patterns_failed_write_unique_file": "Fehler beim Schreiben der Datei mit eindeutigen Patterns: %w",
|
||||
"patterns_unique_file_created": "📝 Datei mit eindeutigen Patterns mit %d Einträgen erstellt\\n",
|
||||
"patterns_no_patterns_copied": "Keine Patterns wurden erfolgreich nach %s kopiert",
|
||||
"patterns_failed_loaded_marker": "Marker-Datei '%s' konnte nicht erstellt werden: %w",
|
||||
"strategies_label": "Prompt-Strategien",
|
||||
"strategies_setup_description": "Strategien – lädt Prompt-Strategien herunter (z. B. Chain of Thought)",
|
||||
"strategies_git_repo_url_label": "Git Repo URL",
|
||||
"strategies_git_repo_url_question": "Geben Sie die Standard-Git-Repository-URL für die Strategien ein",
|
||||
"strategies_git_repo_folder_label": "Git Repo Strategien Ordner",
|
||||
"strategies_git_repo_folder_question": "Geben Sie den Standardordner im Git-Repository an, in dem Strategien gespeichert sind",
|
||||
"strategies_downloading": "Lade Strategien herunter und befülle %s...\\n",
|
||||
"strategies_download_success": "✅ Strategien erfolgreich nach %s heruntergeladen und installiert\\n",
|
||||
"strategies_home_dir_error": "Startverzeichnis konnte nicht ermittelt werden: %v",
|
||||
"strategies_failed_create_directory": "Strategie-Verzeichnis konnte nicht erstellt werden: %w",
|
||||
"strategies_cloning_repository": "Repository %s wird geklont (Pfad: %s)...\\n",
|
||||
"strategies_failed_download": "Fehler beim Herunterladen der Strategien: %w",
|
||||
"strategies_downloaded_count": "%d Strategien heruntergeladen\\n",
|
||||
"strategies_home_dir_fallback": "Startverzeichnis konnte nicht ermittelt werden: %v, verwende stattdessen aktuelles Verzeichnis",
|
||||
"strategy_not_found": "Strategie %s nicht gefunden. Führen Sie 'fabric --liststrategies' aus, um eine Liste zu erhalten",
|
||||
"strategies_none_found": "Keine Strategien gefunden. Führen Sie 'fabric --setup' aus, um Strategien herunterzuladen",
|
||||
"strategies_available_header": "Verfügbare Strategien:",
|
||||
"plugin_enter_value": "Geben Sie Ihren %v %v ein",
|
||||
"plugin_enable_bool_question": "%v %v aktivieren (true/false)",
|
||||
"plugin_setup_skipped": "[%v] übersprungen\\n",
|
||||
"plugin_question_bool": "%v%v (true/false, leer lassen für '%s' oder '%v' eingeben, um den Wert zu entfernen):",
|
||||
"plugin_question_with_default": "%v%v (leer lassen für '%s' oder '%v' eingeben, um den Wert zu entfernen):",
|
||||
"plugin_question_optional": "%v%v (leer lassen zum Überspringen):",
|
||||
"plugin_invalid_boolean_value": "Ungültiger Boolescher Wert: %v",
|
||||
"plugin_setting_not_valid": "%v=%v ist nicht gültig",
|
||||
"plugin_invalid_bool": "Ungültiger boolescher Wert: %q"
|
||||
}
|
||||
|
||||
@@ -183,6 +183,7 @@
|
||||
"setup_enter_ai_provider_number": "AI Provider Number",
|
||||
"setup_available_plugins": "Available plugins:",
|
||||
"setup_plugin_number": "Plugin Number",
|
||||
"setup_plugin_prompt": "Enter the number of the plugin to setup",
|
||||
"setup_required_configuration_header": "━━━ REQUIRED CONFIGURATION ━━━\n\nAI Vendors [at least one required]",
|
||||
"setup_required_tools": "Required Tools",
|
||||
"setup_optional_configuration_header": "━━━ OPTIONAL CONFIGURATION ━━━\n\nOptional Tools",
|
||||
@@ -207,5 +208,82 @@
|
||||
"pattern_not_found_no_patterns": "pattern '%s' not found.\n\nNo patterns are installed! To fix this:\n • Run 'fabric --setup' to configure and download patterns\n • Or run 'fabric -U' to download/update patterns directly",
|
||||
"pattern_not_found_list_available": "pattern '%s' not found. Run 'fabric -l' to see available patterns",
|
||||
"plugin_configured": " ✓",
|
||||
"plugin_not_configured": " ⚠️ NOT CONFIGURED"
|
||||
"plugin_not_configured": " ⚠️ NOT CONFIGURED",
|
||||
"defaults_setup_description": "Default AI Vendor and Model",
|
||||
"defaults_model_question": "Enter the index or the name of your default model",
|
||||
"defaults_model_context_length_question": "Enter model context length",
|
||||
"custom_patterns_label": "Custom Patterns",
|
||||
"custom_patterns_setup_description": "Custom Patterns - Set directory for your custom patterns",
|
||||
"custom_patterns_directory_question": "Enter the path to your custom patterns directory",
|
||||
"jina_label": "Jina AI",
|
||||
"jina_setup_description": "Jina AI Service - to grab a webpage as clean, LLM-friendly text",
|
||||
"youtube_label": "YouTube",
|
||||
"youtube_setup_description": "YouTube - to grab video transcripts (via yt-dlp) and comments/metadata (via YouTube API)",
|
||||
"language_label": "Language",
|
||||
"language_setup_description": "Language - Default AI Vendor Output Language",
|
||||
"language_output_question": "Enter your default output language (for example: zh_CN)",
|
||||
"optional_marker": "(optional)",
|
||||
"required_marker": "[required]",
|
||||
"patterns_loader_label": "Patterns Loader",
|
||||
"patterns_setup_description": "Patterns - Downloads patterns",
|
||||
"patterns_git_repo_url_label": "Git Repo Url",
|
||||
"patterns_git_repo_url_question": "Enter the default Git repository URL for the patterns",
|
||||
"patterns_git_repo_folder_label": "Git Repo Patterns Folder",
|
||||
"patterns_git_repo_folder_question": "Enter the default folder in the Git repository where patterns are stored",
|
||||
"patterns_failed_create_temp_folder": "failed to create temporary patterns folder: %w",
|
||||
"patterns_downloading": "Downloading patterns and Populating %s...\n",
|
||||
"patterns_failed_download_from_git": "failed to download patterns from git repository: %w",
|
||||
"patterns_saving_updated_configuration": "💾 Saving updated configuration (path changed from '%s' to '%s')...\n",
|
||||
"patterns_failed_move_patterns": "failed to move patterns to config directory: %w",
|
||||
"patterns_download_success": "✅ Successfully downloaded and installed patterns to %s\n",
|
||||
"patterns_failed_unique_file": "failed to create unique patterns file: %w",
|
||||
"patterns_failed_access_directory": "failed to access patterns directory '%s': %w",
|
||||
"patterns_preserve_warning": "Warning: failed to preserve custom pattern '%s': %v\n",
|
||||
"patterns_preserved_custom_pattern": "Preserved custom pattern: %s\n",
|
||||
"patterns_failed_create_temp_dir": "failed to create temp directory: %w",
|
||||
"patterns_cloning_repository": "Cloning repository %s (path: %s)...\n",
|
||||
"patterns_failed_download_from_repo": "failed to download patterns from %s: %w",
|
||||
"patterns_failed_read_temp_directory": "failed to read temp patterns directory: %w",
|
||||
"patterns_no_patterns_migration_failed": "no patterns found in repository at path %s and migration failed: %w",
|
||||
"patterns_downloaded_temp": "Downloaded %d patterns to temporary directory\n",
|
||||
"patterns_detected_old_path": "🔄 Detected old pattern path 'patterns', trying migration to 'data/patterns'...",
|
||||
"patterns_warning_remove_test_folder": "Warning: failed to remove test temporary folder '%s': %v\n",
|
||||
"patterns_found_new_path": "✅ Found %d patterns at new path '%s', updating configuration...\n",
|
||||
"patterns_failed_move_test_patterns": "failed to move test patterns to temp folder: %w",
|
||||
"patterns_unable_to_find_or_migrate": "unable to find patterns at current path '%s' or migrate to new structure",
|
||||
"patterns_failed_read_directory": "failed to read patterns directory: %w",
|
||||
"patterns_debug_included_custom_directory": "📂 Also included patterns from custom directory: %s\n",
|
||||
"patterns_warning_custom_directory": "Warning: Could not read custom patterns directory %s: %v\n",
|
||||
"patterns_no_patterns_found_in_directories": "no patterns found in directories %s and %s",
|
||||
"patterns_no_patterns_found_in_directory": "no patterns found in directory %s",
|
||||
"patterns_failed_write_unique_file": "failed to write unique patterns file: %w",
|
||||
"patterns_unique_file_created": "📝 Created unique patterns file with %d patterns\n",
|
||||
"patterns_no_patterns_copied": "no patterns were successfully copied to %s",
|
||||
"patterns_failed_loaded_marker": "failed to create loaded marker file '%s': %w",
|
||||
"strategies_label": "Prompt Strategies",
|
||||
"strategies_setup_description": "Strategies - Downloads Prompting Strategies (like chain of thought)",
|
||||
"strategies_git_repo_url_label": "Git Repo Url",
|
||||
"strategies_git_repo_url_question": "Enter the default Git repository URL for the strategies",
|
||||
"strategies_git_repo_folder_label": "Git Repo Strategies Folder",
|
||||
"strategies_git_repo_folder_question": "Enter the default folder in the Git repository where strategies are stored",
|
||||
"strategies_downloading": "Downloading strategies and Populating %s...\n",
|
||||
"strategies_download_success": "✅ Successfully downloaded and installed strategies to %s\n",
|
||||
"strategies_home_dir_error": "could not get home directory: %v",
|
||||
"strategies_failed_create_directory": "failed to create strategies directory: %w",
|
||||
"strategies_cloning_repository": "Cloning repository %s (path: %s)...\n",
|
||||
"strategies_failed_download": "failed to download strategies: %w",
|
||||
"strategies_downloaded_count": "Downloaded %d strategies\n",
|
||||
"strategies_home_dir_fallback": "could not get home directory: %v, using current directory instead",
|
||||
"strategy_not_found": "strategy %s not found. Please run 'fabric --liststrategies' for list",
|
||||
"strategies_none_found": "no strategies found. Please run 'fabric --setup' to download strategies",
|
||||
"strategies_available_header": "Available Strategies:",
|
||||
"plugin_enter_value": "Enter your %v %v",
|
||||
"plugin_enable_bool_question": "Enable %v %v (true/false)",
|
||||
"plugin_setup_skipped": "[%v] skipped\n",
|
||||
"plugin_question_bool": "%v%v (true/false, leave empty for '%s' or type '%v' to remove the value):",
|
||||
"plugin_question_with_default": "%v%v (leave empty for '%s' or type '%v' to remove the value):",
|
||||
"plugin_question_optional": "%v%v (leave empty to skip):",
|
||||
"plugin_invalid_boolean_value": "invalid boolean value: %v",
|
||||
"plugin_setting_not_valid": "%v=%v, is not valid",
|
||||
"plugin_invalid_bool": "invalid bool: %q"
|
||||
}
|
||||
|
||||
@@ -183,6 +183,7 @@
|
||||
"setup_enter_ai_provider_number": "Número de Proveedor de IA",
|
||||
"setup_available_plugins": "Plugins disponibles:",
|
||||
"setup_plugin_number": "Número de Plugin",
|
||||
"setup_plugin_prompt": "Introduce el número del plugin a configurar",
|
||||
"setup_required_configuration_header": "━━━ CONFIGURACIÓN REQUERIDA ━━━\n\nProveedores de IA [se requiere al menos uno]",
|
||||
"setup_required_tools": "Herramientas Requeridas",
|
||||
"setup_optional_configuration_header": "━━━ CONFIGURACIÓN OPCIONAL ━━━\n\nHerramientas Opcionales",
|
||||
@@ -207,5 +208,82 @@
|
||||
"pattern_not_found_no_patterns": "patrón '%s' no encontrado.\n\n¡No hay patrones instalados! Para solucionar esto:\n • Ejecuta 'fabric --setup' para configurar y descargar patrones\n • O ejecuta 'fabric -U' para descargar/actualizar patrones directamente",
|
||||
"pattern_not_found_list_available": "patrón '%s' no encontrado. Ejecuta 'fabric -l' para ver los patrones disponibles",
|
||||
"plugin_configured": " ✓",
|
||||
"plugin_not_configured": " ⚠️ NO CONFIGURADO"
|
||||
"plugin_not_configured": " ⚠️ NO CONFIGURADO",
|
||||
"defaults_setup_description": "Proveedor y modelo de IA predeterminados",
|
||||
"defaults_model_question": "Introduce el índice o el nombre de tu modelo predeterminado",
|
||||
"defaults_model_context_length_question": "Introduce la longitud del contexto del modelo",
|
||||
"custom_patterns_label": "Patrones personalizados",
|
||||
"custom_patterns_setup_description": "Patrones personalizados - Establecer directorio para tus patrones personalizados",
|
||||
"custom_patterns_directory_question": "Introduce la ruta a tu directorio de patrones personalizados",
|
||||
"jina_label": "Jina AI",
|
||||
"jina_setup_description": "Servicio Jina AI - para obtener una página web como texto limpio y compatible con LLM",
|
||||
"youtube_label": "YouTube",
|
||||
"youtube_setup_description": "YouTube - para obtener transcripciones de video (vía yt-dlp) y comentarios/metadatos (vía API de YouTube)",
|
||||
"language_label": "Idioma",
|
||||
"language_setup_description": "Idioma - Idioma de salida predeterminado del proveedor de IA",
|
||||
"language_output_question": "Ingrese su idioma de salida predeterminado (por ejemplo: zh_CN)",
|
||||
"optional_marker": "(opcional)",
|
||||
"required_marker": "[obligatorio]",
|
||||
"patterns_loader_label": "Cargador de patrones",
|
||||
"patterns_setup_description": "Patrones - Descarga patrones",
|
||||
"patterns_git_repo_url_label": "URL del repositorio Git",
|
||||
"patterns_git_repo_url_question": "Introduce la URL predeterminada del repositorio Git para los patrones",
|
||||
"patterns_git_repo_folder_label": "Carpeta de patrones en el repositorio Git",
|
||||
"patterns_git_repo_folder_question": "Introduce la carpeta predeterminada en el repositorio Git donde se almacenan los patrones",
|
||||
"patterns_failed_create_temp_folder": "no se pudo crear la carpeta temporal de patrones: %w",
|
||||
"patterns_downloading": "Descargando patrones y llenando %s...\\n",
|
||||
"patterns_failed_download_from_git": "error al descargar patrones del repositorio Git: %w",
|
||||
"patterns_saving_updated_configuration": "💾 Guardando configuración actualizada (ruta cambiada de '%s' a '%s')...\\n",
|
||||
"patterns_failed_move_patterns": "error al mover los patrones al directorio de configuración: %w",
|
||||
"patterns_download_success": "✅ Patrones descargados e instalados correctamente en %s\\n",
|
||||
"patterns_failed_unique_file": "error al crear el archivo de patrones únicos: %w",
|
||||
"patterns_failed_access_directory": "error al acceder al directorio de patrones '%s': %w",
|
||||
"patterns_preserve_warning": "Advertencia: no se pudo conservar el patrón personalizado '%s': %v\\n",
|
||||
"patterns_preserved_custom_pattern": "Patrón personalizado conservado: %s\\n",
|
||||
"patterns_failed_create_temp_dir": "no se pudo crear el directorio temporal: %w",
|
||||
"patterns_cloning_repository": "Clonando el repositorio %s (ruta: %s)...\\n",
|
||||
"patterns_failed_download_from_repo": "error al descargar patrones de %s: %w",
|
||||
"patterns_failed_read_temp_directory": "error al leer el directorio temporal de patrones: %w",
|
||||
"patterns_no_patterns_migration_failed": "no se encontraron patrones en el repositorio en la ruta %s y la migración falló: %w",
|
||||
"patterns_downloaded_temp": "Se descargaron %d patrones al directorio temporal\\n",
|
||||
"patterns_detected_old_path": "🔄 Se detectó la ruta antigua de patrones 'patterns', intentando migrar a 'data/patterns'...",
|
||||
"patterns_warning_remove_test_folder": "Advertencia: no se pudo eliminar la carpeta temporal de prueba '%s': %v\\n",
|
||||
"patterns_found_new_path": "✅ Se encontraron %d patrones en la nueva ruta '%s', actualizando configuración...\\n",
|
||||
"patterns_failed_move_test_patterns": "error al mover los patrones de prueba al directorio temporal: %w",
|
||||
"patterns_unable_to_find_or_migrate": "no se pudieron encontrar patrones en la ruta actual '%s' ni migrar a la nueva estructura",
|
||||
"patterns_failed_read_directory": "error al leer el directorio de patrones: %w",
|
||||
"patterns_debug_included_custom_directory": "📂 También se incluyeron patrones del directorio personalizado: %s\\n",
|
||||
"patterns_warning_custom_directory": "Advertencia: no se pudo leer el directorio de patrones personalizado %s: %v\\n",
|
||||
"patterns_no_patterns_found_in_directories": "no se encontraron patrones en los directorios %s y %s",
|
||||
"patterns_no_patterns_found_in_directory": "no se encontraron patrones en el directorio %s",
|
||||
"patterns_failed_write_unique_file": "error al escribir el archivo de patrones únicos: %w",
|
||||
"patterns_unique_file_created": "📝 Archivo de patrones únicos creado con %d patrones\\n",
|
||||
"patterns_no_patterns_copied": "no se copiaron patrones correctamente en %s",
|
||||
"patterns_failed_loaded_marker": "no se pudo crear el archivo indicador '%s': %w",
|
||||
"strategies_label": "Estrategias de prompts",
|
||||
"strategies_setup_description": "Estrategias - Descarga estrategias de prompting (como chain of thought)",
|
||||
"strategies_git_repo_url_label": "URL del repositorio Git",
|
||||
"strategies_git_repo_url_question": "Introduce la URL predeterminada del repositorio Git para las estrategias",
|
||||
"strategies_git_repo_folder_label": "Carpeta de estrategias en el repositorio Git",
|
||||
"strategies_git_repo_folder_question": "Introduce la carpeta predeterminada en el repositorio Git donde se almacenan las estrategias",
|
||||
"strategies_downloading": "Descargando estrategias y llenando %s...\\n",
|
||||
"strategies_download_success": "✅ Estrategias descargadas e instaladas correctamente en %s\\n",
|
||||
"strategies_home_dir_error": "no se pudo obtener el directorio personal: %v",
|
||||
"strategies_failed_create_directory": "no se pudo crear el directorio de estrategias: %w",
|
||||
"strategies_cloning_repository": "Clonando el repositorio %s (ruta: %s)...\\n",
|
||||
"strategies_failed_download": "error al descargar estrategias: %w",
|
||||
"strategies_downloaded_count": "Se descargaron %d estrategias\\n",
|
||||
"strategies_home_dir_fallback": "no se pudo obtener el directorio personal: %v, usando el directorio actual en su lugar",
|
||||
"strategy_not_found": "estrategia %s no encontrada. Ejecuta 'fabric --liststrategies' para ver la lista",
|
||||
"strategies_none_found": "no se encontraron estrategias. Ejecuta 'fabric --setup' para descargar estrategias",
|
||||
"strategies_available_header": "Estrategias disponibles:",
|
||||
"plugin_enter_value": "Introduce tu %v %v",
|
||||
"plugin_enable_bool_question": "Habilitar %v %v (true/false)",
|
||||
"plugin_setup_skipped": "[%v] omitido\\n",
|
||||
"plugin_question_bool": "%v%v (true/false, deja vacío para '%s' o escribe '%v' para eliminar el valor):",
|
||||
"plugin_question_with_default": "%v%v (deja vacío para '%s' o escribe '%v' para eliminar el valor):",
|
||||
"plugin_question_optional": "%v%v (deja vacío para omitir):",
|
||||
"plugin_invalid_boolean_value": "valor booleano no válido: %v",
|
||||
"plugin_setting_not_valid": "%v=%v no es válido",
|
||||
"plugin_invalid_bool": "bool no válido: %q"
|
||||
}
|
||||
|
||||
@@ -183,6 +183,7 @@
|
||||
"setup_enter_ai_provider_number": "شماره ارائهدهنده هوش مصنوعی",
|
||||
"setup_available_plugins": "افزونههای موجود:",
|
||||
"setup_plugin_number": "شماره افزونه",
|
||||
"setup_plugin_prompt": "شماره افزونهای را که میخواهید راهاندازی کنید وارد کنید",
|
||||
"setup_required_configuration_header": "━━━ پیکربندی ضروری ━━━\n\nارائهدهندگان هوش مصنوعی [حداقل یکی ضروری است]",
|
||||
"setup_required_tools": "ابزارهای ضروری",
|
||||
"setup_optional_configuration_header": "━━━ پیکربندی اختیاری ━━━\n\nابزارهای اختیاری",
|
||||
@@ -207,5 +208,82 @@
|
||||
"pattern_not_found_no_patterns": "الگوی '%s' یافت نشد.\n\nهیچ الگویی نصب نشده است! برای رفع این مشکل:\n • 'fabric --setup' را برای پیکربندی و دانلود الگوها اجرا کنید\n • یا 'fabric -U' را برای دانلود/بهروزرسانی الگوها اجرا کنید",
|
||||
"pattern_not_found_list_available": "الگوی '%s' یافت نشد. برای مشاهده الگوهای موجود 'fabric -l' را اجرا کنید",
|
||||
"plugin_configured": " ✓",
|
||||
"plugin_not_configured": " ⚠️ پیکربندی نشده"
|
||||
"plugin_not_configured": " ⚠️ پیکربندی نشده",
|
||||
"defaults_setup_description": "ارائهدهنده و مدل هوش مصنوعی پیشفرض",
|
||||
"defaults_model_question": "شاخص یا نام مدل پیشفرض خود را وارد کنید",
|
||||
"defaults_model_context_length_question": "طول زمینه مدل را وارد کنید",
|
||||
"custom_patterns_label": "الگوهای سفارشی",
|
||||
"custom_patterns_setup_description": "الگوهای سفارشی - تنظیم دایرکتوری برای الگوهای سفارشی شما",
|
||||
"custom_patterns_directory_question": "مسیر دایرکتوری الگوهای سفارشی خود را وارد کنید",
|
||||
"jina_label": "Jina AI",
|
||||
"jina_setup_description": "سرویس Jina AI - برای دریافت صفحه وب بهصورت متن تمیز و سازگار با LLM",
|
||||
"youtube_label": "YouTube",
|
||||
"youtube_setup_description": "YouTube - برای دریافت رونوشت ویدیو (از طریق yt-dlp) و نظرات/متادیتا (از طریق API یوتیوب)",
|
||||
"language_label": "زبان",
|
||||
"language_setup_description": "زبان - زبان خروجی پیشفرض ارائهدهنده هوش مصنوعی",
|
||||
"language_output_question": "زبان خروجی پیشفرض خود را وارد کنید (به عنوان مثال: zh_CN)",
|
||||
"optional_marker": "(اختیاری)",
|
||||
"required_marker": "[الزامی]",
|
||||
"patterns_loader_label": "بارگذار الگوها",
|
||||
"patterns_setup_description": "الگوها - دانلود الگوها",
|
||||
"patterns_git_repo_url_label": "آدرس مخزن گیت",
|
||||
"patterns_git_repo_url_question": "آدرس مخزن گیت پیشفرض برای الگوها را وارد کنید",
|
||||
"patterns_git_repo_folder_label": "پوشه الگوها در مخزن گیت",
|
||||
"patterns_git_repo_folder_question": "پوشه پیشفرض در مخزن گیت که الگوها در آن ذخیره میشوند را وارد کنید",
|
||||
"patterns_failed_create_temp_folder": "ایجاد پوشه موقت الگوها ناموفق بود: %w",
|
||||
"patterns_downloading": "در حال دانلود الگوها و پر کردن %s...\\n",
|
||||
"patterns_failed_download_from_git": "دانلود الگوها از مخزن گیت ناموفق بود: %w",
|
||||
"patterns_saving_updated_configuration": "💾 ذخیره پیکربندی بهروزشده (مسیر از '%s' به '%s' تغییر کرد)...\\n",
|
||||
"patterns_failed_move_patterns": "انتقال الگوها به شاخه پیکربندی ناموفق بود: %w",
|
||||
"patterns_download_success": "✅ الگوها با موفقیت در %s دانلود و نصب شدند\\n",
|
||||
"patterns_failed_unique_file": "ایجاد فایل الگوهای یکتا ناموفق بود: %w",
|
||||
"patterns_failed_access_directory": "دسترسی به پوشه الگو '%s' ناموفق بود: %w",
|
||||
"patterns_preserve_warning": "هشدار: الگوی سفارشی '%s' حفظ نشد: %v\\n",
|
||||
"patterns_preserved_custom_pattern": "الگوی سفارشی حفظ شد: %s\\n",
|
||||
"patterns_failed_create_temp_dir": "ایجاد پوشه موقت ناموفق بود: %w",
|
||||
"patterns_cloning_repository": "در حال کلون کردن مخزن %s (مسیر: %s)...\\n",
|
||||
"patterns_failed_download_from_repo": "دانلود الگوها از %s ناموفق بود: %w",
|
||||
"patterns_failed_read_temp_directory": "خواندن پوشه موقت الگوها ناموفق بود: %w",
|
||||
"patterns_no_patterns_migration_failed": "هیچ الگویی در مخزن با مسیر %s یافت نشد و مهاجرت هم ناموفق بود: %w",
|
||||
"patterns_downloaded_temp": "%d الگو در پوشه موقت دانلود شد\\n",
|
||||
"patterns_detected_old_path": "🔄 مسیر قدیمی الگو 'patterns' شناسایی شد، تلاش برای مهاجرت به 'data/patterns'...",
|
||||
"patterns_warning_remove_test_folder": "هشدار: پوشه موقت آزمایشی '%s' حذف نشد: %v\\n",
|
||||
"patterns_found_new_path": "✅ %d الگو در مسیر جدید '%s' پیدا شد، پیکربندی بهروزرسانی میشود...\\n",
|
||||
"patterns_failed_move_test_patterns": "انتقال الگوهای آزمایشی به پوشه موقت ناموفق بود: %w",
|
||||
"patterns_unable_to_find_or_migrate": "الگویی در مسیر فعلی '%s' یافت نشد یا مهاجرت به ساختار جدید ممکن نبود",
|
||||
"patterns_failed_read_directory": "خواندن پوشه الگوها ناموفق بود: %w",
|
||||
"patterns_debug_included_custom_directory": "📂 الگوهای پوشه سفارشی نیز اضافه شد: %s\\n",
|
||||
"patterns_warning_custom_directory": "هشدار: پوشه الگوی سفارشی %s قابل خواندن نیست: %v\\n",
|
||||
"patterns_no_patterns_found_in_directories": "هیچ الگویی در پوشههای %s و %s پیدا نشد",
|
||||
"patterns_no_patterns_found_in_directory": "هیچ الگویی در پوشه %s پیدا نشد",
|
||||
"patterns_failed_write_unique_file": "نوشتن فایل الگوهای یکتا ناموفق بود: %w",
|
||||
"patterns_unique_file_created": "📝 فایل الگوهای یکتا با %d الگو ایجاد شد\\n",
|
||||
"patterns_no_patterns_copied": "هیچ الگویی با موفقیت به %s کپی نشد",
|
||||
"patterns_failed_loaded_marker": "ایجاد فایل نشانه '%s' ناموفق بود: %w",
|
||||
"strategies_label": "راهبردهای پرامپت",
|
||||
"strategies_setup_description": "راهبردها - دانلود راهبردهای پرامپت (مثل chain of thought)",
|
||||
"strategies_git_repo_url_label": "آدرس مخزن گیت",
|
||||
"strategies_git_repo_url_question": "آدرس مخزن گیت پیشفرض برای راهبردها را وارد کنید",
|
||||
"strategies_git_repo_folder_label": "پوشه راهبردها در مخزن گیت",
|
||||
"strategies_git_repo_folder_question": "پوشه پیشفرض در مخزن گیت که راهبردها در آن ذخیره میشوند را وارد کنید",
|
||||
"strategies_downloading": "در حال دانلود راهبردها و پر کردن %s...\\n",
|
||||
"strategies_download_success": "✅ راهبردها با موفقیت در %s دانلود و نصب شدند\\n",
|
||||
"strategies_home_dir_error": "دریافت پوشه خانگی ممکن نبود: %v",
|
||||
"strategies_failed_create_directory": "ایجاد پوشه راهبردها ناموفق بود: %w",
|
||||
"strategies_cloning_repository": "در حال کلون کردن مخزن %s (مسیر: %s)...\\n",
|
||||
"strategies_failed_download": "دانلود راهبردها ناموفق بود: %w",
|
||||
"strategies_downloaded_count": "%d راهبرد دانلود شد\\n",
|
||||
"strategies_home_dir_fallback": "دریافت پوشه خانگی ممکن نبود: %v، از پوشه فعلی استفاده میشود",
|
||||
"strategy_not_found": "راهبرد %s یافت نشد. برای مشاهده فهرست 'fabric --liststrategies' را اجرا کنید",
|
||||
"strategies_none_found": "هیچ راهبردی پیدا نشد. برای دانلود راهبردها 'fabric --setup' را اجرا کنید",
|
||||
"strategies_available_header": "راهبردهای موجود:",
|
||||
"plugin_enter_value": "مقدار %v %v خود را وارد کنید",
|
||||
"plugin_enable_bool_question": "%v %v را فعال کنید (true/false)",
|
||||
"plugin_setup_skipped": "[%v] رد شد\\n",
|
||||
"plugin_question_bool": "%v%v (true/false، برای '%s' خالی بگذارید یا '%v' را برای حذف مقدار بنویسید):",
|
||||
"plugin_question_with_default": "%v%v (برای '%s' خالی بگذارید یا '%v' را برای حذف مقدار بنویسید):",
|
||||
"plugin_question_optional": "%v%v (برای رد کردن خالی بگذارید):",
|
||||
"plugin_invalid_boolean_value": "مقدار بولی نامعتبر: %v",
|
||||
"plugin_setting_not_valid": "%v=%v معتبر نیست",
|
||||
"plugin_invalid_bool": "مقدار bool نامعتبر: %q"
|
||||
}
|
||||
|
||||
@@ -183,6 +183,7 @@
|
||||
"setup_enter_ai_provider_number": "Numéro du fournisseur d'IA",
|
||||
"setup_available_plugins": "Plugins disponibles :",
|
||||
"setup_plugin_number": "Numéro du plugin",
|
||||
"setup_plugin_prompt": "Entrez le numéro du plugin à configurer",
|
||||
"setup_required_configuration_header": "━━━ CONFIGURATION REQUISE ━━━\n\nFournisseurs d'IA [au moins un requis]",
|
||||
"setup_required_tools": "Outils requis",
|
||||
"setup_optional_configuration_header": "━━━ CONFIGURATION OPTIONNELLE ━━━\n\nOutils optionnels",
|
||||
@@ -207,5 +208,82 @@
|
||||
"pattern_not_found_no_patterns": "modèle '%s' non trouvé.\n\nAucun modèle n'est installé ! Pour résoudre ce problème :\n • Exécutez 'fabric --setup' pour configurer et télécharger les modèles\n • Ou exécutez 'fabric -U' pour télécharger/mettre à jour les modèles directement",
|
||||
"pattern_not_found_list_available": "modèle '%s' non trouvé. Exécutez 'fabric -l' pour voir les modèles disponibles",
|
||||
"plugin_configured": " ✓",
|
||||
"plugin_not_configured": " ⚠️ NON CONFIGURÉ"
|
||||
"plugin_not_configured": " ⚠️ NON CONFIGURÉ",
|
||||
"defaults_setup_description": "Fournisseur et modèle d'IA par défaut",
|
||||
"defaults_model_question": "Saisissez l'index ou le nom de votre modèle par défaut",
|
||||
"defaults_model_context_length_question": "Saisissez la longueur du contexte du modèle",
|
||||
"custom_patterns_label": "Patrons personnalisés",
|
||||
"custom_patterns_setup_description": "Patrons personnalisés - Définir le répertoire pour vos patrons personnalisés",
|
||||
"custom_patterns_directory_question": "Saisissez le chemin vers votre répertoire de patrons personnalisés",
|
||||
"jina_label": "Jina AI",
|
||||
"jina_setup_description": "Service Jina AI - pour récupérer une page web sous forme de texte propre et compatible LLM",
|
||||
"youtube_label": "YouTube",
|
||||
"youtube_setup_description": "YouTube - pour récupérer les transcriptions vidéo (via yt-dlp) et les commentaires/métadonnées (via l'API YouTube)",
|
||||
"language_label": "Langue",
|
||||
"language_setup_description": "Langue - Langue de sortie par défaut du fournisseur d'IA",
|
||||
"language_output_question": "Entrez votre langue de sortie par défaut (par exemple : zh_CN)",
|
||||
"optional_marker": "(optionnel)",
|
||||
"required_marker": "[obligatoire]",
|
||||
"patterns_loader_label": "Chargeur de patrons",
|
||||
"patterns_setup_description": "Patrons - Télécharge les patrons",
|
||||
"patterns_git_repo_url_label": "URL du dépôt Git",
|
||||
"patterns_git_repo_url_question": "Saisissez l'URL du dépôt Git par défaut pour les patrons",
|
||||
"patterns_git_repo_folder_label": "Dossier des patrons dans le dépôt Git",
|
||||
"patterns_git_repo_folder_question": "Saisissez le dossier par défaut du dépôt Git où sont stockés les patrons",
|
||||
"patterns_failed_create_temp_folder": "impossible de créer le dossier temporaire des patrons : %w",
|
||||
"patterns_downloading": "Téléchargement des patrons et remplissage de %s...\\n",
|
||||
"patterns_failed_download_from_git": "échec du téléchargement des patrons depuis le dépôt Git : %w",
|
||||
"patterns_saving_updated_configuration": "💾 Enregistrement de la configuration mise à jour (chemin changé de '%s' à '%s')...\\n",
|
||||
"patterns_failed_move_patterns": "échec du déplacement des patrons vers le répertoire de configuration : %w",
|
||||
"patterns_download_success": "✅ Patrons téléchargés et installés avec succès dans %s\\n",
|
||||
"patterns_failed_unique_file": "échec de création du fichier de patrons uniques : %w",
|
||||
"patterns_failed_access_directory": "impossible d'accéder au répertoire des patrons '%s' : %w",
|
||||
"patterns_preserve_warning": "Avertissement : impossible de conserver le patron personnalisé '%s' : %v\\n",
|
||||
"patterns_preserved_custom_pattern": "Patron personnalisé conservé : %s\\n",
|
||||
"patterns_failed_create_temp_dir": "impossible de créer le répertoire temporaire : %w",
|
||||
"patterns_cloning_repository": "Clonage du dépôt %s (chemin : %s)...\\n",
|
||||
"patterns_failed_download_from_repo": "échec du téléchargement des patrons depuis %s : %w",
|
||||
"patterns_failed_read_temp_directory": "échec de lecture du répertoire temporaire des patrons : %w",
|
||||
"patterns_no_patterns_migration_failed": "aucun patron trouvé dans le dépôt au chemin %s et la migration a échoué : %w",
|
||||
"patterns_downloaded_temp": "%d patrons téléchargés dans le répertoire temporaire\\n",
|
||||
"patterns_detected_old_path": "🔄 Ancien chemin 'patterns' détecté, tentative de migration vers 'data/patterns'...",
|
||||
"patterns_warning_remove_test_folder": "Avertissement : impossible de supprimer le dossier temporaire de test '%s' : %v\\n",
|
||||
"patterns_found_new_path": "✅ %d patrons trouvés au nouveau chemin '%s', mise à jour de la configuration...\\n",
|
||||
"patterns_failed_move_test_patterns": "échec du déplacement des patrons de test vers le dossier temporaire : %w",
|
||||
"patterns_unable_to_find_or_migrate": "impossible de trouver des patrons au chemin actuel '%s' ou de migrer vers la nouvelle structure",
|
||||
"patterns_failed_read_directory": "échec de lecture du répertoire des patrons : %w",
|
||||
"patterns_debug_included_custom_directory": "📂 Patrons du répertoire personnalisé également inclus : %s\\n",
|
||||
"patterns_warning_custom_directory": "Avertissement : impossible de lire le répertoire de patrons personnalisé %s : %v\\n",
|
||||
"patterns_no_patterns_found_in_directories": "aucun patron trouvé dans les répertoires %s et %s",
|
||||
"patterns_no_patterns_found_in_directory": "aucun patron trouvé dans le répertoire %s",
|
||||
"patterns_failed_write_unique_file": "échec d'écriture du fichier de patrons uniques : %w",
|
||||
"patterns_unique_file_created": "📝 Fichier de patrons uniques créé avec %d patrons\\n",
|
||||
"patterns_no_patterns_copied": "aucun patron n'a été copié avec succès vers %s",
|
||||
"patterns_failed_loaded_marker": "impossible de créer le fichier indicateur '%s' : %w",
|
||||
"strategies_label": "Stratégies de prompt",
|
||||
"strategies_setup_description": "Stratégies - Télécharge des stratégies de prompting (comme chain of thought)",
|
||||
"strategies_git_repo_url_label": "URL du dépôt Git",
|
||||
"strategies_git_repo_url_question": "Saisissez l'URL du dépôt Git par défaut pour les stratégies",
|
||||
"strategies_git_repo_folder_label": "Dossier des stratégies dans le dépôt Git",
|
||||
"strategies_git_repo_folder_question": "Saisissez le dossier par défaut du dépôt Git où sont stockées les stratégies",
|
||||
"strategies_downloading": "Téléchargement des stratégies et remplissage de %s...\\n",
|
||||
"strategies_download_success": "✅ Stratégies téléchargées et installées avec succès dans %s\\n",
|
||||
"strategies_home_dir_error": "impossible d'obtenir le répertoire personnel : %v",
|
||||
"strategies_failed_create_directory": "échec de création du répertoire des stratégies : %w",
|
||||
"strategies_cloning_repository": "Clonage du dépôt %s (chemin : %s)...\\n",
|
||||
"strategies_failed_download": "échec du téléchargement des stratégies : %w",
|
||||
"strategies_downloaded_count": "%d stratégies téléchargées\\n",
|
||||
"strategies_home_dir_fallback": "impossible d'obtenir le répertoire personnel : %v, utilisation du répertoire courant à la place",
|
||||
"strategy_not_found": "stratégie %s introuvable. Exécutez 'fabric --liststrategies' pour voir la liste",
|
||||
"strategies_none_found": "aucune stratégie trouvée. Exécutez 'fabric --setup' pour télécharger les stratégies",
|
||||
"strategies_available_header": "Stratégies disponibles :",
|
||||
"plugin_enter_value": "Saisissez votre %v %v",
|
||||
"plugin_enable_bool_question": "Activer %v %v (true/false)",
|
||||
"plugin_setup_skipped": "[%v] ignoré\\n",
|
||||
"plugin_question_bool": "%v%v (true/false, laissez vide pour '%s' ou tapez '%v' pour supprimer la valeur) :",
|
||||
"plugin_question_with_default": "%v%v (laissez vide pour '%s' ou tapez '%v' pour supprimer la valeur) :",
|
||||
"plugin_question_optional": "%v%v (laissez vide pour passer) :",
|
||||
"plugin_invalid_boolean_value": "valeur booléenne invalide : %v",
|
||||
"plugin_setting_not_valid": "%v=%v n'est pas valide",
|
||||
"plugin_invalid_bool": "booléen invalide : %q"
|
||||
}
|
||||
|
||||
@@ -183,6 +183,7 @@
|
||||
"setup_enter_ai_provider_number": "Numero del fornitore di IA",
|
||||
"setup_available_plugins": "Plugin disponibili:",
|
||||
"setup_plugin_number": "Numero del plugin",
|
||||
"setup_plugin_prompt": "Inserisci il numero del plugin da configurare",
|
||||
"setup_required_configuration_header": "━━━ CONFIGURAZIONE RICHIESTA ━━━\n\nFornitori di IA [almeno uno richiesto]",
|
||||
"setup_required_tools": "Strumenti richiesti",
|
||||
"setup_optional_configuration_header": "━━━ CONFIGURAZIONE OPZIONALE ━━━\n\nStrumenti opzionali",
|
||||
@@ -207,5 +208,82 @@
|
||||
"pattern_not_found_no_patterns": "pattern '%s' non trovato.\n\nNessun pattern installato! Per risolvere:\n • Esegui 'fabric --setup' per configurare e scaricare i pattern\n • Oppure esegui 'fabric -U' per scaricare/aggiornare i pattern direttamente",
|
||||
"pattern_not_found_list_available": "pattern '%s' non trovato. Esegui 'fabric -l' per vedere i pattern disponibili",
|
||||
"plugin_configured": " ✓",
|
||||
"plugin_not_configured": " ⚠️ NON CONFIGURATO"
|
||||
"plugin_not_configured": " ⚠️ NON CONFIGURATO",
|
||||
"defaults_setup_description": "Fornitore e modello AI predefiniti",
|
||||
"defaults_model_question": "Inserisci l'indice o il nome del tuo modello predefinito",
|
||||
"defaults_model_context_length_question": "Inserisci la lunghezza del contesto del modello",
|
||||
"custom_patterns_label": "Pattern personalizzati",
|
||||
"custom_patterns_setup_description": "Pattern personalizzati - Imposta la directory per i tuoi pattern personalizzati",
|
||||
"custom_patterns_directory_question": "Inserisci il percorso della directory dei tuoi pattern personalizzati",
|
||||
"jina_label": "Jina AI",
|
||||
"jina_setup_description": "Servizio Jina AI - per ottenere una pagina web come testo pulito e compatibile con LLM",
|
||||
"youtube_label": "YouTube",
|
||||
"youtube_setup_description": "YouTube - per ottenere trascrizioni video (tramite yt-dlp) e commenti/metadati (tramite API YouTube)",
|
||||
"language_label": "Lingua",
|
||||
"language_setup_description": "Lingua - Lingua di output predefinita del fornitore di IA",
|
||||
"language_output_question": "Inserisci la tua lingua di output predefinita (ad esempio: zh_CN)",
|
||||
"optional_marker": "(opzionale)",
|
||||
"required_marker": "[obbligatorio]",
|
||||
"patterns_loader_label": "Caricatore pattern",
|
||||
"patterns_setup_description": "Pattern - Scarica i pattern",
|
||||
"patterns_git_repo_url_label": "URL repository Git",
|
||||
"patterns_git_repo_url_question": "Inserisci l'URL del repository Git predefinito per i pattern",
|
||||
"patterns_git_repo_folder_label": "Cartella dei pattern nel repository Git",
|
||||
"patterns_git_repo_folder_question": "Inserisci la cartella predefinita nel repository Git dove sono memorizzati i pattern",
|
||||
"patterns_failed_create_temp_folder": "impossibile creare la cartella temporanea dei pattern: %w",
|
||||
"patterns_downloading": "Download dei pattern e popolamento di %s...\\n",
|
||||
"patterns_failed_download_from_git": "impossibile scaricare i pattern dal repository Git: %w",
|
||||
"patterns_saving_updated_configuration": "💾 Salvataggio configurazione aggiornata (percorso cambiato da '%s' a '%s')...\\n",
|
||||
"patterns_failed_move_patterns": "impossibile spostare i pattern nella directory di configurazione: %w",
|
||||
"patterns_download_success": "✅ Pattern scaricati e installati correttamente in %s\\n",
|
||||
"patterns_failed_unique_file": "impossibile creare il file dei pattern univoci: %w",
|
||||
"patterns_failed_access_directory": "impossibile accedere alla directory dei pattern '%s': %w",
|
||||
"patterns_preserve_warning": "Avviso: impossibile conservare il pattern personalizzato '%s': %v\\n",
|
||||
"patterns_preserved_custom_pattern": "Pattern personalizzato conservato: %s\\n",
|
||||
"patterns_failed_create_temp_dir": "impossibile creare la directory temporanea: %w",
|
||||
"patterns_cloning_repository": "Clonazione del repository %s (percorso: %s)...\\n",
|
||||
"patterns_failed_download_from_repo": "impossibile scaricare i pattern da %s: %w",
|
||||
"patterns_failed_read_temp_directory": "impossibile leggere la directory temporanea dei pattern: %w",
|
||||
"patterns_no_patterns_migration_failed": "nessun pattern trovato nel repository al percorso %s e migrazione non riuscita: %w",
|
||||
"patterns_downloaded_temp": "%d pattern scaricati nella directory temporanea\\n",
|
||||
"patterns_detected_old_path": "🔄 Rilevato vecchio percorso 'patterns', tentativo di migrazione a 'data/patterns'...",
|
||||
"patterns_warning_remove_test_folder": "Avviso: impossibile rimuovere la cartella temporanea di test '%s': %v\\n",
|
||||
"patterns_found_new_path": "✅ Trovati %d pattern nel nuovo percorso '%s', aggiornamento configurazione...\\n",
|
||||
"patterns_failed_move_test_patterns": "impossibile spostare i pattern di test nella cartella temporanea: %w",
|
||||
"patterns_unable_to_find_or_migrate": "impossibile trovare pattern nel percorso attuale '%s' o migrare alla nuova struttura",
|
||||
"patterns_failed_read_directory": "impossibile leggere la directory dei pattern: %w",
|
||||
"patterns_debug_included_custom_directory": "📂 Inclusi anche i pattern dalla directory personalizzata: %s\\n",
|
||||
"patterns_warning_custom_directory": "Avviso: impossibile leggere la directory dei pattern personalizzata %s: %v\\n",
|
||||
"patterns_no_patterns_found_in_directories": "nessun pattern trovato nelle directory %s e %s",
|
||||
"patterns_no_patterns_found_in_directory": "nessun pattern trovato nella directory %s",
|
||||
"patterns_failed_write_unique_file": "impossibile scrivere il file dei pattern univoci: %w",
|
||||
"patterns_unique_file_created": "📝 File dei pattern univoci creato con %d pattern\\n",
|
||||
"patterns_no_patterns_copied": "nessun pattern copiato correttamente in %s",
|
||||
"patterns_failed_loaded_marker": "impossibile creare il file di marker '%s': %w",
|
||||
"strategies_label": "Strategie di prompt",
|
||||
"strategies_setup_description": "Strategie - Scarica strategie di prompting (come chain of thought)",
|
||||
"strategies_git_repo_url_label": "URL repository Git",
|
||||
"strategies_git_repo_url_question": "Inserisci l'URL del repository Git predefinito per le strategie",
|
||||
"strategies_git_repo_folder_label": "Cartella delle strategie nel repository Git",
|
||||
"strategies_git_repo_folder_question": "Inserisci la cartella predefinita nel repository Git dove sono memorizzate le strategie",
|
||||
"strategies_downloading": "Download delle strategie e popolamento di %s...\\n",
|
||||
"strategies_download_success": "✅ Strategie scaricate e installate correttamente in %s\\n",
|
||||
"strategies_home_dir_error": "impossibile ottenere la home directory: %v",
|
||||
"strategies_failed_create_directory": "impossibile creare la directory delle strategie: %w",
|
||||
"strategies_cloning_repository": "Clonazione del repository %s (percorso: %s)...\\n",
|
||||
"strategies_failed_download": "impossibile scaricare le strategie: %w",
|
||||
"strategies_downloaded_count": "%d strategie scaricate\\n",
|
||||
"strategies_home_dir_fallback": "impossibile ottenere la home directory: %v, uso la directory corrente",
|
||||
"strategy_not_found": "strategia %s non trovata. Esegui 'fabric --liststrategies' per l'elenco",
|
||||
"strategies_none_found": "nessuna strategia trovata. Esegui 'fabric --setup' per scaricare le strategie",
|
||||
"strategies_available_header": "Strategie disponibili:",
|
||||
"plugin_enter_value": "Inserisci il tuo %v %v",
|
||||
"plugin_enable_bool_question": "Abilita %v %v (true/false)",
|
||||
"plugin_setup_skipped": "[%v] saltato\\n",
|
||||
"plugin_question_bool": "%v%v (true/false, lascia vuoto per '%s' o digita '%v' per rimuovere il valore):",
|
||||
"plugin_question_with_default": "%v%v (lascia vuoto per '%s' o digita '%v' per rimuovere il valore):",
|
||||
"plugin_question_optional": "%v%v (lascia vuoto per saltare):",
|
||||
"plugin_invalid_boolean_value": "valore booleano non valido: %v",
|
||||
"plugin_setting_not_valid": "%v=%v non è valido",
|
||||
"plugin_invalid_bool": "bool non valido: %q"
|
||||
}
|
||||
|
||||
@@ -183,6 +183,7 @@
|
||||
"setup_enter_ai_provider_number": "AIプロバイダー番号",
|
||||
"setup_available_plugins": "利用可能なプラグイン:",
|
||||
"setup_plugin_number": "プラグイン番号",
|
||||
"setup_plugin_prompt": "セットアップするプラグインの番号を入力してください",
|
||||
"setup_required_configuration_header": "━━━ 必須設定 ━━━\n\nAIベンダー [少なくとも1つ必要]",
|
||||
"setup_required_tools": "必須ツール",
|
||||
"setup_optional_configuration_header": "━━━ オプション設定 ━━━\n\nオプションツール",
|
||||
@@ -207,5 +208,82 @@
|
||||
"pattern_not_found_no_patterns": "パターン '%s' が見つかりません。\n\nパターンがインストールされていません!解決するには:\n • 'fabric --setup'を実行してパターンを設定・ダウンロード\n • または'fabric -U'を実行してパターンをダウンロード/更新",
|
||||
"pattern_not_found_list_available": "パターン '%s' が見つかりません。'fabric -l'で利用可能なパターンを確認してください",
|
||||
"plugin_configured": " ✓",
|
||||
"plugin_not_configured": " ⚠️ 未設定"
|
||||
"plugin_not_configured": " ⚠️ 未設定",
|
||||
"defaults_setup_description": "デフォルトのAIプロバイダーとモデル",
|
||||
"defaults_model_question": "デフォルトモデルのインデックスまたは名前を入力してください",
|
||||
"defaults_model_context_length_question": "モデルのコンテキスト長を入力してください",
|
||||
"custom_patterns_label": "カスタムパターン",
|
||||
"custom_patterns_setup_description": "カスタムパターン - カスタムパターン用のディレクトリを設定",
|
||||
"custom_patterns_directory_question": "カスタムパターンディレクトリのパスを入力してください",
|
||||
"jina_label": "Jina AI",
|
||||
"jina_setup_description": "Jina AI サービス - ウェブページをクリーンでLLMフレンドリーなテキストとして取得",
|
||||
"youtube_label": "YouTube",
|
||||
"youtube_setup_description": "YouTube - 動画の転写(yt-dlp経由)とコメント/メタデータ(YouTube API経由)を取得",
|
||||
"language_label": "言語",
|
||||
"language_setup_description": "言語 - AIプロバイダーのデフォルト出力言語",
|
||||
"language_output_question": "デフォルト出力言語を入力してください(例:zh_CN)",
|
||||
"optional_marker": "(オプション)",
|
||||
"required_marker": "【必須】",
|
||||
"patterns_loader_label": "パターンローダー",
|
||||
"patterns_setup_description": "パターン - パターンをダウンロードします",
|
||||
"patterns_git_repo_url_label": "Git リポジトリ URL",
|
||||
"patterns_git_repo_url_question": "パターン用のデフォルト Git リポジトリ URL を入力してください",
|
||||
"patterns_git_repo_folder_label": "Git リポジトリ内のパターンフォルダー",
|
||||
"patterns_git_repo_folder_question": "パターンが格納されている Git リポジトリ内のデフォルトフォルダーを入力してください",
|
||||
"patterns_failed_create_temp_folder": "一時パターンフォルダーの作成に失敗しました: %w",
|
||||
"patterns_downloading": "パターンをダウンロードして %s を構成しています...\\n",
|
||||
"patterns_failed_download_from_git": "Git リポジトリからパターンをダウンロードできませんでした: %w",
|
||||
"patterns_saving_updated_configuration": "💾 更新された設定を保存しています (パスを '%s' から '%s' に変更)...\\n",
|
||||
"patterns_failed_move_patterns": "パターンを設定ディレクトリへ移動できませんでした: %w",
|
||||
"patterns_download_success": "✅ パターンを %s に正常にダウンロードしてインストールしました\\n",
|
||||
"patterns_failed_unique_file": "ユニークパターンファイルの作成に失敗しました: %w",
|
||||
"patterns_failed_access_directory": "パターンディレクトリ '%s' にアクセスできませんでした: %w",
|
||||
"patterns_preserve_warning": "警告: カスタムパターン '%s' を保持できませんでした: %v\\n",
|
||||
"patterns_preserved_custom_pattern": "カスタムパターンを保持しました: %s\\n",
|
||||
"patterns_failed_create_temp_dir": "一時ディレクトリの作成に失敗しました: %w",
|
||||
"patterns_cloning_repository": "リポジトリ %s をクローン中 (パス: %s)...\\n",
|
||||
"patterns_failed_download_from_repo": "%s からパターンをダウンロードできませんでした: %w",
|
||||
"patterns_failed_read_temp_directory": "一時パターンディレクトリの読み取りに失敗しました: %w",
|
||||
"patterns_no_patterns_migration_failed": "リポジトリのパス %s にパターンが見つからず、移行にも失敗しました: %w",
|
||||
"patterns_downloaded_temp": "%d 個のパターンを一時ディレクトリにダウンロードしました\\n",
|
||||
"patterns_detected_old_path": "🔄 旧パス 'patterns' を検出、'data/patterns' への移行を試みます...",
|
||||
"patterns_warning_remove_test_folder": "警告: テスト用の一時フォルダー '%s' を削除できませんでした: %v\\n",
|
||||
"patterns_found_new_path": "✅ 新しいパス '%s' で %d 個のパターンを確認、設定を更新します...\\n",
|
||||
"patterns_failed_move_test_patterns": "テストパターンを一時フォルダーへ移動できませんでした: %w",
|
||||
"patterns_unable_to_find_or_migrate": "現在のパス '%s' でパターンが見つからず、新しい構成への移行もできません",
|
||||
"patterns_failed_read_directory": "パターンディレクトリの読み取りに失敗しました: %w",
|
||||
"patterns_debug_included_custom_directory": "📂 カスタムディレクトリのパターンも含めました: %s\\n",
|
||||
"patterns_warning_custom_directory": "警告: カスタムパターンディレクトリ %s を読み取れませんでした: %v\\n",
|
||||
"patterns_no_patterns_found_in_directories": "%s と %s にパターンが見つかりません",
|
||||
"patterns_no_patterns_found_in_directory": "ディレクトリ %s にパターンが見つかりません",
|
||||
"patterns_failed_write_unique_file": "ユニークパターンファイルの書き込みに失敗しました: %w",
|
||||
"patterns_unique_file_created": "📝 %d 個のパターンでユニークパターンファイルを作成しました\\n",
|
||||
"patterns_no_patterns_copied": "%s にパターンをコピーできませんでした",
|
||||
"patterns_failed_loaded_marker": "マーカーファイル '%s' を作成できませんでした: %w",
|
||||
"strategies_label": "プロンプト戦略",
|
||||
"strategies_setup_description": "戦略 - プロンプト戦略(chain of thought など)をダウンロード",
|
||||
"strategies_git_repo_url_label": "Git リポジトリ URL",
|
||||
"strategies_git_repo_url_question": "戦略用のデフォルト Git リポジトリ URL を入力してください",
|
||||
"strategies_git_repo_folder_label": "Git リポジトリ内の戦略フォルダー",
|
||||
"strategies_git_repo_folder_question": "戦略が保存されている Git リポジトリ内のデフォルトフォルダーを入力してください",
|
||||
"strategies_downloading": "戦略をダウンロードして %s を構成しています...\\n",
|
||||
"strategies_download_success": "✅ 戦略を %s に正常にダウンロードしてインストールしました\\n",
|
||||
"strategies_home_dir_error": "ホームディレクトリを取得できませんでした: %v",
|
||||
"strategies_failed_create_directory": "戦略ディレクトリを作成できませんでした: %w",
|
||||
"strategies_cloning_repository": "リポジトリ %s をクローン中 (パス: %s)...\\n",
|
||||
"strategies_failed_download": "戦略のダウンロードに失敗しました: %w",
|
||||
"strategies_downloaded_count": "%d 件の戦略をダウンロードしました\\n",
|
||||
"strategies_home_dir_fallback": "ホームディレクトリを取得できませんでした: %v、代わりにカレントディレクトリを使用します",
|
||||
"strategy_not_found": "戦略 %s が見つかりません。'fabric --liststrategies' を実行して一覧を確認してください",
|
||||
"strategies_none_found": "戦略が見つかりません。'fabric --setup' を実行して戦略をダウンロードしてください",
|
||||
"strategies_available_header": "利用可能な戦略:",
|
||||
"plugin_enter_value": "%v の %v を入力してください",
|
||||
"plugin_enable_bool_question": "%v の %v を有効にしますか (true/false)",
|
||||
"plugin_setup_skipped": "[%v] スキップされました\\n",
|
||||
"plugin_question_bool": "%v%v (true/false、'%s' を使うには空欄のまま、値を削除するには '%v' と入力):",
|
||||
"plugin_question_with_default": "%v%v ('%s' を使うには空欄のまま、値を削除するには '%v' と入力):",
|
||||
"plugin_question_optional": "%v%v (スキップするには空欄のまま):",
|
||||
"plugin_invalid_boolean_value": "無効なブール値です: %v",
|
||||
"plugin_setting_not_valid": "%v=%v は無効です",
|
||||
"plugin_invalid_bool": "無効な bool です: %q"
|
||||
}
|
||||
|
||||
@@ -183,6 +183,7 @@
|
||||
"setup_enter_ai_provider_number": "Número do Provedor de IA",
|
||||
"setup_available_plugins": "Plugins disponíveis:",
|
||||
"setup_plugin_number": "Número do Plugin",
|
||||
"setup_plugin_prompt": "Informe o número do plugin a configurar",
|
||||
"setup_required_configuration_header": "━━━ CONFIGURAÇÃO OBRIGATÓRIA ━━━\n\nProvedores de IA [pelo menos um obrigatório]",
|
||||
"setup_required_tools": "Ferramentas Obrigatórias",
|
||||
"setup_optional_configuration_header": "━━━ CONFIGURAÇÃO OPCIONAL ━━━\n\nFerramentas Opcionais",
|
||||
@@ -207,5 +208,82 @@
|
||||
"pattern_not_found_no_patterns": "padrão '%s' não encontrado.\n\nNenhum padrão instalado! Para resolver:\n • Execute 'fabric --setup' para configurar e baixar padrões\n • Ou execute 'fabric -U' para baixar/atualizar padrões diretamente",
|
||||
"pattern_not_found_list_available": "padrão '%s' não encontrado. Execute 'fabric -l' para ver os padrões disponíveis",
|
||||
"plugin_configured": " ✓",
|
||||
"plugin_not_configured": " ⚠️ NÃO CONFIGURADO"
|
||||
"plugin_not_configured": " ⚠️ NÃO CONFIGURADO",
|
||||
"defaults_setup_description": "Provedor e modelo de IA padrão",
|
||||
"defaults_model_question": "Informe o índice ou o nome do seu modelo padrão",
|
||||
"defaults_model_context_length_question": "Informe o comprimento do contexto do modelo",
|
||||
"custom_patterns_label": "Padrões personalizados",
|
||||
"custom_patterns_setup_description": "Padrões personalizados - Definir diretório para seus padrões personalizados",
|
||||
"custom_patterns_directory_question": "Informe o caminho para seu diretório de padrões personalizados",
|
||||
"jina_label": "Jina AI",
|
||||
"jina_setup_description": "Serviço Jina AI - para obter uma página web como texto limpo e compatível com LLM",
|
||||
"youtube_label": "YouTube",
|
||||
"youtube_setup_description": "YouTube - para obter transcrições de vídeo (via yt-dlp) e comentários/metadados (via API do YouTube)",
|
||||
"language_label": "Idioma",
|
||||
"language_setup_description": "Idioma - Idioma de saída padrão do provedor de IA",
|
||||
"language_output_question": "Informe o seu idioma de saída padrão (por exemplo: zh_CN)",
|
||||
"optional_marker": "(opcional)",
|
||||
"required_marker": "[obrigatório]",
|
||||
"patterns_loader_label": "Carregador de padrões",
|
||||
"patterns_setup_description": "Padrões - Baixa os padrões",
|
||||
"patterns_git_repo_url_label": "URL do repositório Git",
|
||||
"patterns_git_repo_url_question": "Informe a URL padrão do repositório Git para os padrões",
|
||||
"patterns_git_repo_folder_label": "Pasta de padrões no repositório Git",
|
||||
"patterns_git_repo_folder_question": "Informe a pasta padrão no repositório Git onde os padrões ficam armazenados",
|
||||
"patterns_failed_create_temp_folder": "falha ao criar a pasta temporária de padrões: %w",
|
||||
"patterns_downloading": "Baixando padrões e populando %s...\\n",
|
||||
"patterns_failed_download_from_git": "falha ao baixar padrões do repositório Git: %w",
|
||||
"patterns_saving_updated_configuration": "💾 Salvando configuração atualizada (caminho alterado de '%s' para '%s')...\\n",
|
||||
"patterns_failed_move_patterns": "falha ao mover os padrões para o diretório de configuração: %w",
|
||||
"patterns_download_success": "✅ Padrões baixados e instalados com sucesso em %s\\n",
|
||||
"patterns_failed_unique_file": "falha ao criar o arquivo de padrões únicos: %w",
|
||||
"patterns_failed_access_directory": "falha ao acessar o diretório de padrões '%s': %w",
|
||||
"patterns_preserve_warning": "Aviso: não foi possível preservar o padrão personalizado '%s': %v\\n",
|
||||
"patterns_preserved_custom_pattern": "Padrão personalizado preservado: %s\\n",
|
||||
"patterns_failed_create_temp_dir": "falha ao criar diretório temporário: %w",
|
||||
"patterns_cloning_repository": "Clonando repositório %s (caminho: %s)...\\n",
|
||||
"patterns_failed_download_from_repo": "falha ao baixar padrões de %s: %w",
|
||||
"patterns_failed_read_temp_directory": "falha ao ler o diretório temporário de padrões: %w",
|
||||
"patterns_no_patterns_migration_failed": "nenhum padrão encontrado no repositório no caminho %s e a migração falhou: %w",
|
||||
"patterns_downloaded_temp": "%d padrões baixados para o diretório temporário\\n",
|
||||
"patterns_detected_old_path": "🔄 Caminho antigo 'patterns' detectado, tentando migrar para 'data/patterns'...",
|
||||
"patterns_warning_remove_test_folder": "Aviso: não foi possível remover a pasta temporária de teste '%s': %v\\n",
|
||||
"patterns_found_new_path": "✅ %d padrões encontrados no novo caminho '%s', atualizando configuração...\\n",
|
||||
"patterns_failed_move_test_patterns": "falha ao mover padrões de teste para a pasta temporária: %w",
|
||||
"patterns_unable_to_find_or_migrate": "não foi possível encontrar padrões no caminho atual '%s' ou migrar para a nova estrutura",
|
||||
"patterns_failed_read_directory": "falha ao ler o diretório de padrões: %w",
|
||||
"patterns_debug_included_custom_directory": "📂 Também incluídos os padrões do diretório personalizado: %s\\n",
|
||||
"patterns_warning_custom_directory": "Aviso: não foi possível ler o diretório de padrões personalizado %s: %v\\n",
|
||||
"patterns_no_patterns_found_in_directories": "nenhum padrão encontrado nos diretórios %s e %s",
|
||||
"patterns_no_patterns_found_in_directory": "nenhum padrão encontrado no diretório %s",
|
||||
"patterns_failed_write_unique_file": "falha ao gravar o arquivo de padrões únicos: %w",
|
||||
"patterns_unique_file_created": "📝 Arquivo de padrões únicos criado com %d padrões\\n",
|
||||
"patterns_no_patterns_copied": "nenhum padrão foi copiado com sucesso para %s",
|
||||
"patterns_failed_loaded_marker": "falha ao criar o arquivo marcador '%s': %w",
|
||||
"strategies_label": "Estratégias de prompt",
|
||||
"strategies_setup_description": "Estratégias - Baixa estratégias de prompting (como chain of thought)",
|
||||
"strategies_git_repo_url_label": "URL do repositório Git",
|
||||
"strategies_git_repo_url_question": "Informe a URL padrão do repositório Git para as estratégias",
|
||||
"strategies_git_repo_folder_label": "Pasta de estratégias no repositório Git",
|
||||
"strategies_git_repo_folder_question": "Informe a pasta padrão no repositório Git onde as estratégias ficam armazenadas",
|
||||
"strategies_downloading": "Baixando estratégias e populando %s...\\n",
|
||||
"strategies_download_success": "✅ Estratégias baixadas e instaladas com sucesso em %s\\n",
|
||||
"strategies_home_dir_error": "não foi possível obter o diretório home: %v",
|
||||
"strategies_failed_create_directory": "falha ao criar diretório de estratégias: %w",
|
||||
"strategies_cloning_repository": "Clonando repositório %s (caminho: %s)...\\n",
|
||||
"strategies_failed_download": "falha ao baixar estratégias: %w",
|
||||
"strategies_downloaded_count": "%d estratégias baixadas\\n",
|
||||
"strategies_home_dir_fallback": "não foi possível obter o diretório home: %v, usando o diretório atual",
|
||||
"strategy_not_found": "estratégia %s não encontrada. Execute 'fabric --liststrategies' para ver a lista",
|
||||
"strategies_none_found": "nenhuma estratégia encontrada. Execute 'fabric --setup' para baixar estratégias",
|
||||
"strategies_available_header": "Estratégias disponíveis:",
|
||||
"plugin_enter_value": "Informe seu %v %v",
|
||||
"plugin_enable_bool_question": "Ativar %v %v (true/false)",
|
||||
"plugin_setup_skipped": "[%v] ignorado\\n",
|
||||
"plugin_question_bool": "%v%v (true/false, deixe em branco para '%s' ou digite '%v' para remover o valor):",
|
||||
"plugin_question_with_default": "%v%v (deixe em branco para '%s' ou digite '%v' para remover o valor):",
|
||||
"plugin_question_optional": "%v%v (deixe em branco para pular):",
|
||||
"plugin_invalid_boolean_value": "valor booleano inválido: %v",
|
||||
"plugin_setting_not_valid": "%v=%v não é válido",
|
||||
"plugin_invalid_bool": "bool inválido: %q"
|
||||
}
|
||||
|
||||
@@ -183,6 +183,7 @@
|
||||
"setup_enter_ai_provider_number": "Número do Fornecedor de IA",
|
||||
"setup_available_plugins": "Plugins disponíveis:",
|
||||
"setup_plugin_number": "Número do Plugin",
|
||||
"setup_plugin_prompt": "Indique o número do plugin a configurar",
|
||||
"setup_required_configuration_header": "━━━ CONFIGURAÇÃO OBRIGATÓRIA ━━━\n\nFornecedores de IA [pelo menos um obrigatório]",
|
||||
"setup_required_tools": "Ferramentas Obrigatórias",
|
||||
"setup_optional_configuration_header": "━━━ CONFIGURAÇÃO OPCIONAL ━━━\n\nFerramentas Opcionais",
|
||||
@@ -207,5 +208,82 @@
|
||||
"pattern_not_found_no_patterns": "padrão '%s' não encontrado.\n\nNenhum padrão instalado! Para resolver:\n • Execute 'fabric --setup' para configurar e descarregar padrões\n • Ou execute 'fabric -U' para descarregar/atualizar padrões diretamente",
|
||||
"pattern_not_found_list_available": "padrão '%s' não encontrado. Execute 'fabric -l' para ver os padrões disponíveis",
|
||||
"plugin_configured": " ✓",
|
||||
"plugin_not_configured": " ⚠️ NÃO CONFIGURADO"
|
||||
"plugin_not_configured": " ⚠️ NÃO CONFIGURADO",
|
||||
"defaults_setup_description": "Fornecedor e modelo de IA padrão",
|
||||
"defaults_model_question": "Indique o índice ou o nome do seu modelo padrão",
|
||||
"defaults_model_context_length_question": "Indique o comprimento do contexto do modelo",
|
||||
"custom_patterns_label": "Padrões personalizados",
|
||||
"custom_patterns_setup_description": "Padrões personalizados - Definir diretório para os seus padrões personalizados",
|
||||
"custom_patterns_directory_question": "Indique o caminho para o seu diretório de padrões personalizados",
|
||||
"jina_label": "Jina AI",
|
||||
"jina_setup_description": "Serviço Jina AI - para obter uma página web como texto limpo e compatível com LLM",
|
||||
"youtube_label": "YouTube",
|
||||
"youtube_setup_description": "YouTube - para obter transcrições de vídeo (via yt-dlp) e comentários/metadados (via API do YouTube)",
|
||||
"language_label": "Idioma",
|
||||
"language_setup_description": "Idioma - Idioma de saída predefinido do fornecedor de IA",
|
||||
"language_output_question": "Indique o seu idioma de saída predefinido (por exemplo: zh_CN)",
|
||||
"optional_marker": "(opcional)",
|
||||
"required_marker": "[obrigatório]",
|
||||
"patterns_loader_label": "Carregador de padrões",
|
||||
"patterns_setup_description": "Padrões - Transfere os padrões",
|
||||
"patterns_git_repo_url_label": "URL do repositório Git",
|
||||
"patterns_git_repo_url_question": "Indique o URL padrão do repositório Git para os padrões",
|
||||
"patterns_git_repo_folder_label": "Pasta de padrões no repositório Git",
|
||||
"patterns_git_repo_folder_question": "Indique a pasta padrão no repositório Git onde os padrões estão guardados",
|
||||
"patterns_failed_create_temp_folder": "falha ao criar a pasta temporária de padrões: %w",
|
||||
"patterns_downloading": "A transferir padrões e a preencher %s...\\n",
|
||||
"patterns_failed_download_from_git": "falha ao transferir padrões do repositório Git: %w",
|
||||
"patterns_saving_updated_configuration": "💾 A guardar a configuração actualizada (caminho alterado de '%s' para '%s')...\\n",
|
||||
"patterns_failed_move_patterns": "falha ao mover os padrões para o directório de configuração: %w",
|
||||
"patterns_download_success": "✅ Padrões transferidos e instalados com sucesso em %s\\n",
|
||||
"patterns_failed_unique_file": "falha ao criar o ficheiro de padrões únicos: %w",
|
||||
"patterns_failed_access_directory": "falha ao aceder ao directório de padrões '%s': %w",
|
||||
"patterns_preserve_warning": "Aviso: não foi possível preservar o padrão personalizado '%s': %v\\n",
|
||||
"patterns_preserved_custom_pattern": "Padrão personalizado preservado: %s\\n",
|
||||
"patterns_failed_create_temp_dir": "falha ao criar directório temporário: %w",
|
||||
"patterns_cloning_repository": "A clonar repositório %s (caminho: %s)...\\n",
|
||||
"patterns_failed_download_from_repo": "falha ao transferir padrões de %s: %w",
|
||||
"patterns_failed_read_temp_directory": "falha ao ler o directório temporário de padrões: %w",
|
||||
"patterns_no_patterns_migration_failed": "nenhum padrão encontrado no repositório no caminho %s e a migração falhou: %w",
|
||||
"patterns_downloaded_temp": "%d padrões transferidos para o directório temporário\\n",
|
||||
"patterns_detected_old_path": "🔄 Caminho antigo 'patterns' detectado, a tentar migração para 'data/patterns'...",
|
||||
"patterns_warning_remove_test_folder": "Aviso: não foi possível remover a pasta temporária de teste '%s': %v\\n",
|
||||
"patterns_found_new_path": "✅ %d padrões encontrados no novo caminho '%s', a actualizar configuração...\\n",
|
||||
"patterns_failed_move_test_patterns": "falha ao mover padrões de teste para a pasta temporária: %w",
|
||||
"patterns_unable_to_find_or_migrate": "não foi possível encontrar padrões no caminho actual '%s' nem migrar para a nova estrutura",
|
||||
"patterns_failed_read_directory": "falha ao ler o directório de padrões: %w",
|
||||
"patterns_debug_included_custom_directory": "📂 Padrões do directório personalizado também incluídos: %s\\n",
|
||||
"patterns_warning_custom_directory": "Aviso: não foi possível ler o directório de padrões personalizado %s: %v\\n",
|
||||
"patterns_no_patterns_found_in_directories": "nenhum padrão encontrado nos directórios %s e %s",
|
||||
"patterns_no_patterns_found_in_directory": "nenhum padrão encontrado no directório %s",
|
||||
"patterns_failed_write_unique_file": "falha ao gravar o ficheiro de padrões únicos: %w",
|
||||
"patterns_unique_file_created": "📝 Ficheiro de padrões únicos criado com %d padrões\\n",
|
||||
"patterns_no_patterns_copied": "nenhum padrão foi copiado com sucesso para %s",
|
||||
"patterns_failed_loaded_marker": "falha ao criar o ficheiro marcador '%s': %w",
|
||||
"strategies_label": "Estratégias de prompt",
|
||||
"strategies_setup_description": "Estratégias - Transfere estratégias de prompting (como chain of thought)",
|
||||
"strategies_git_repo_url_label": "URL do repositório Git",
|
||||
"strategies_git_repo_url_question": "Indique o URL padrão do repositório Git para as estratégias",
|
||||
"strategies_git_repo_folder_label": "Pasta de estratégias no repositório Git",
|
||||
"strategies_git_repo_folder_question": "Indique a pasta padrão no repositório Git onde as estratégias estão guardadas",
|
||||
"strategies_downloading": "A transferir estratégias e a preencher %s...\\n",
|
||||
"strategies_download_success": "✅ Estratégias transferidas e instaladas com sucesso em %s\\n",
|
||||
"strategies_home_dir_error": "não foi possível obter o directório home: %v",
|
||||
"strategies_failed_create_directory": "falha ao criar directório de estratégias: %w",
|
||||
"strategies_cloning_repository": "A clonar repositório %s (caminho: %s)...\\n",
|
||||
"strategies_failed_download": "falha ao transferir estratégias: %w",
|
||||
"strategies_downloaded_count": "%d estratégias transferidas\\n",
|
||||
"strategies_home_dir_fallback": "não foi possível obter o directório home: %v, a usar o directório actual",
|
||||
"strategy_not_found": "estratégia %s não encontrada. Execute 'fabric --liststrategies' para ver a lista",
|
||||
"strategies_none_found": "nenhuma estratégia encontrada. Execute 'fabric --setup' para transferir estratégias",
|
||||
"strategies_available_header": "Estratégias disponíveis:",
|
||||
"plugin_enter_value": "Indique o seu %v %v",
|
||||
"plugin_enable_bool_question": "Ativar %v %v (true/false)",
|
||||
"plugin_setup_skipped": "[%v] ignorado\\n",
|
||||
"plugin_question_bool": "%v%v (true/false, deixe em branco para '%s' ou escreva '%v' para remover o valor):",
|
||||
"plugin_question_with_default": "%v%v (deixe em branco para '%s' ou escreva '%v' para remover o valor):",
|
||||
"plugin_question_optional": "%v%v (deixe em branco para ignorar):",
|
||||
"plugin_invalid_boolean_value": "valor booleano inválido: %v",
|
||||
"plugin_setting_not_valid": "%v=%v não é válido",
|
||||
"plugin_invalid_bool": "bool inválido: %q"
|
||||
}
|
||||
|
||||
@@ -183,6 +183,7 @@
|
||||
"setup_enter_ai_provider_number": "AI 提供商编号",
|
||||
"setup_available_plugins": "可用的插件:",
|
||||
"setup_plugin_number": "插件编号",
|
||||
"setup_plugin_prompt": "请输入要设置的插件编号",
|
||||
"setup_required_configuration_header": "━━━ 必需配置 ━━━\n\nAI 提供商 [至少需要一个]",
|
||||
"setup_required_tools": "必需工具",
|
||||
"setup_optional_configuration_header": "━━━ 可选配置 ━━━\n\n可选工具",
|
||||
@@ -207,5 +208,82 @@
|
||||
"pattern_not_found_no_patterns": "未找到模式 '%s'。\n\n未安装任何模式!要解决此问题:\n • 运行 'fabric --setup' 配置并下载模式\n • 或运行 'fabric -U' 直接下载/更新模式",
|
||||
"pattern_not_found_list_available": "未找到模式 '%s'。运行 'fabric -l' 查看可用模式",
|
||||
"plugin_configured": " ✓",
|
||||
"plugin_not_configured": " ⚠️ 未配置"
|
||||
"plugin_not_configured": " ⚠️ 未配置",
|
||||
"defaults_setup_description": "默认 AI 提供商和模型",
|
||||
"defaults_model_question": "请输入您的默认模型的索引或名称",
|
||||
"defaults_model_context_length_question": "请输入模型上下文长度",
|
||||
"custom_patterns_label": "自定义模式",
|
||||
"custom_patterns_setup_description": "自定义模式 - 设置您的自定义模式目录",
|
||||
"custom_patterns_directory_question": "请输入您的自定义模式目录路径",
|
||||
"jina_label": "Jina AI",
|
||||
"jina_setup_description": "Jina AI 服务 - 将网页获取为干净、LLM 友好的文本",
|
||||
"youtube_label": "YouTube",
|
||||
"youtube_setup_description": "YouTube - 获取视频转录(通过 yt-dlp)和评论/元数据(通过 YouTube API)",
|
||||
"language_label": "语言",
|
||||
"language_setup_description": "语言 - AI 提供商的默认输出语言",
|
||||
"language_output_question": "请输入您的默认输出语言(例如:zh_CN)",
|
||||
"optional_marker": "(可选)",
|
||||
"required_marker": "(必需)",
|
||||
"patterns_loader_label": "模式加载器",
|
||||
"patterns_setup_description": "模式 - 下载模式",
|
||||
"patterns_git_repo_url_label": "Git 仓库 URL",
|
||||
"patterns_git_repo_url_question": "请输入用于模式的默认 Git 仓库 URL",
|
||||
"patterns_git_repo_folder_label": "Git 仓库中的模式文件夹",
|
||||
"patterns_git_repo_folder_question": "请输入存储模式的 Git 仓库默认文件夹",
|
||||
"patterns_failed_create_temp_folder": "创建模式临时文件夹失败:%w",
|
||||
"patterns_downloading": "正在下载模式并填充 %s...\\n",
|
||||
"patterns_failed_download_from_git": "从 Git 仓库下载模式失败:%w",
|
||||
"patterns_saving_updated_configuration": "💾 正在保存更新的配置(路径从 '%s' 更改为 '%s')...\\n",
|
||||
"patterns_failed_move_patterns": "将模式移动到配置目录失败:%w",
|
||||
"patterns_download_success": "✅ 已成功下载并安装模式到 %s\\n",
|
||||
"patterns_failed_unique_file": "创建唯一模式文件失败:%w",
|
||||
"patterns_failed_access_directory": "访问模式目录 '%s' 失败:%w",
|
||||
"patterns_preserve_warning": "警告:未能保留自定义模式 '%s':%v\\n",
|
||||
"patterns_preserved_custom_pattern": "已保留自定义模式:%s\\n",
|
||||
"patterns_failed_create_temp_dir": "创建临时目录失败:%w",
|
||||
"patterns_cloning_repository": "正在克隆仓库 %s(路径:%s)...\\n",
|
||||
"patterns_failed_download_from_repo": "从 %s 下载模式失败:%w",
|
||||
"patterns_failed_read_temp_directory": "读取模式临时目录失败:%w",
|
||||
"patterns_no_patterns_migration_failed": "在仓库路径 %s 未找到模式且迁移失败:%w",
|
||||
"patterns_downloaded_temp": "已将 %d 个模式下载到临时目录\\n",
|
||||
"patterns_detected_old_path": "🔄 检测到旧的模式路径“patterns”,尝试迁移到“data/patterns”...",
|
||||
"patterns_warning_remove_test_folder": "警告:无法删除测试临时文件夹 '%s':%v\\n",
|
||||
"patterns_found_new_path": "✅ 在新路径“%s”找到 %d 个模式,正在更新配置...\\n",
|
||||
"patterns_failed_move_test_patterns": "将测试模式移动到临时文件夹失败:%w",
|
||||
"patterns_unable_to_find_or_migrate": "在当前路径“%s”未找到模式,也无法迁移到新结构",
|
||||
"patterns_failed_read_directory": "读取模式目录失败:%w",
|
||||
"patterns_debug_included_custom_directory": "📂 还包含了自定义目录中的模式:%s\\n",
|
||||
"patterns_warning_custom_directory": "警告:无法读取自定义模式目录 %s:%v\\n",
|
||||
"patterns_no_patterns_found_in_directories": "在目录 %s 和 %s 中未找到模式",
|
||||
"patterns_no_patterns_found_in_directory": "在目录 %s 中未找到模式",
|
||||
"patterns_failed_write_unique_file": "写入唯一模式文件失败:%w",
|
||||
"patterns_unique_file_created": "📝 已创建包含 %d 个模式的唯一模式文件\\n",
|
||||
"patterns_no_patterns_copied": "未能成功将模式复制到 %s",
|
||||
"patterns_failed_loaded_marker": "创建标记文件 '%s' 失败:%w",
|
||||
"strategies_label": "提示策略",
|
||||
"strategies_setup_description": "策略 - 下载提示策略(如 chain of thought)",
|
||||
"strategies_git_repo_url_label": "Git 仓库 URL",
|
||||
"strategies_git_repo_url_question": "请输入用于策略的默认 Git 仓库 URL",
|
||||
"strategies_git_repo_folder_label": "Git 仓库中的策略文件夹",
|
||||
"strategies_git_repo_folder_question": "请输入存储策略的 Git 仓库默认文件夹",
|
||||
"strategies_downloading": "正在下载策略并填充 %s...\\n",
|
||||
"strategies_download_success": "✅ 已成功下载并安装策略到 %s\\n",
|
||||
"strategies_home_dir_error": "无法获取主目录:%v",
|
||||
"strategies_failed_create_directory": "创建策略目录失败:%w",
|
||||
"strategies_cloning_repository": "正在克隆仓库 %s(路径:%s)...\\n",
|
||||
"strategies_failed_download": "下载策略失败:%w",
|
||||
"strategies_downloaded_count": "已下载 %d 个策略\\n",
|
||||
"strategies_home_dir_fallback": "无法获取主目录:%v,改用当前目录",
|
||||
"strategy_not_found": "未找到策略 %s。运行 'fabric --liststrategies' 查看列表",
|
||||
"strategies_none_found": "未找到任何策略。请运行 'fabric --setup' 下载策略",
|
||||
"strategies_available_header": "可用的策略:",
|
||||
"plugin_enter_value": "请输入您的 %v %v",
|
||||
"plugin_enable_bool_question": "启用 %v %v(true/false)",
|
||||
"plugin_setup_skipped": "[%v] 已跳过\\n",
|
||||
"plugin_question_bool": "%v%v(true/false,留空表示使用 '%s',或输入 '%v' 清除值):",
|
||||
"plugin_question_with_default": "%v%v(留空表示使用 '%s',或输入 '%v' 清除值):",
|
||||
"plugin_question_optional": "%v%v(留空以跳过):",
|
||||
"plugin_invalid_boolean_value": "无效的布尔值:%v",
|
||||
"plugin_setting_not_valid": "%v=%v 无效",
|
||||
"plugin_invalid_bool": "无效的 bool:%q"
|
||||
}
|
||||
|
||||
@@ -5,6 +5,8 @@ import (
|
||||
"fmt"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"github.com/danielmiessler/fabric/internal/i18n"
|
||||
)
|
||||
|
||||
const AnswerReset = "reset"
|
||||
@@ -55,12 +57,22 @@ func (o *PluginBase) AddSetupQuestionCustom(name string, required bool, question
|
||||
setting := o.AddSetting(name, required)
|
||||
ret = &SetupQuestion{Setting: setting, Question: question}
|
||||
if ret.Question == "" {
|
||||
ret.Question = fmt.Sprintf("Enter your %v %v", o.Name, strings.ToUpper(name))
|
||||
ret.Question = fmt.Sprintf(i18n.T("plugin_enter_value"), o.Name, strings.ToUpper(name))
|
||||
}
|
||||
o.SetupQuestions = append(o.SetupQuestions, ret)
|
||||
return
|
||||
}
|
||||
|
||||
// AddSetupQuestionWithEnvName creates a setup question with an explicit environment variable name.
|
||||
// This is useful when you want the environment variable name to remain constant across languages.
|
||||
// The envVarName is used for the environment variable, while the question is localized.
|
||||
func (o *PluginBase) AddSetupQuestionWithEnvName(envVarName string, required bool, question string) (ret *SetupQuestion) {
|
||||
setting := o.AddSetting(envVarName, required)
|
||||
ret = &SetupQuestion{Setting: setting, Question: question}
|
||||
o.SetupQuestions = append(o.SetupQuestions, ret)
|
||||
return
|
||||
}
|
||||
|
||||
func (o *PluginBase) AddSetupQuestionBool(name string, required bool) (ret *SetupQuestion) {
|
||||
return o.AddSetupQuestionCustomBool(name, required, "")
|
||||
}
|
||||
@@ -70,7 +82,7 @@ func (o *PluginBase) AddSetupQuestionCustomBool(name string, required bool, ques
|
||||
setting.Type = SettingTypeBool
|
||||
ret = &SetupQuestion{Setting: setting, Question: question}
|
||||
if ret.Question == "" {
|
||||
ret.Question = fmt.Sprintf("Enable %v %v (true/false)", o.Name, strings.ToUpper(name))
|
||||
ret.Question = fmt.Sprintf(i18n.T("plugin_enable_bool_question"), o.Name, strings.ToUpper(name))
|
||||
}
|
||||
o.SetupQuestions = append(o.SetupQuestions, ret)
|
||||
return
|
||||
@@ -102,7 +114,7 @@ func (o *PluginBase) Setup() (err error) {
|
||||
|
||||
func (o *PluginBase) SetupOrSkip() (err error) {
|
||||
if err = o.Setup(); err != nil {
|
||||
fmt.Printf("[%v] skipped\n", o.GetName())
|
||||
fmt.Printf(i18n.T("plugin_setup_skipped"), o.GetName())
|
||||
}
|
||||
return
|
||||
}
|
||||
@@ -170,7 +182,7 @@ func ParseBool(val string) (bool, error) {
|
||||
case "0", "false", "no", "off":
|
||||
return false, nil
|
||||
}
|
||||
return false, fmt.Errorf("invalid bool: %q", val)
|
||||
return false, fmt.Errorf(i18n.T("plugin_invalid_bool"), val)
|
||||
}
|
||||
|
||||
type SetupQuestion struct {
|
||||
@@ -191,13 +203,11 @@ func (o *SetupQuestion) Ask(label string) (err error) {
|
||||
if v, err := ParseBool(o.Value); err == nil && v {
|
||||
current = "true"
|
||||
}
|
||||
fmt.Printf("%v%v (true/false, leave empty for '%s' or type '%v' to remove the value):\n",
|
||||
prefix, o.Question, current, AnswerReset)
|
||||
fmt.Printf(i18n.T("plugin_question_bool"), prefix, o.Question, current, AnswerReset)
|
||||
} else if o.Value != "" {
|
||||
fmt.Printf("%v%v (leave empty for '%s' or type '%v' to remove the value):\n",
|
||||
prefix, o.Question, o.Value, AnswerReset)
|
||||
fmt.Printf(i18n.T("plugin_question_with_default"), prefix, o.Question, o.Value, AnswerReset)
|
||||
} else {
|
||||
fmt.Printf("%v%v (leave empty to skip):\n", prefix, o.Question)
|
||||
fmt.Printf(i18n.T("plugin_question_optional"), prefix, o.Question)
|
||||
}
|
||||
var answer string
|
||||
fmt.Scanln(&answer)
|
||||
@@ -223,7 +233,7 @@ func (o *SetupQuestion) OnAnswerWithReset(answer string, isReset bool) (err erro
|
||||
} else {
|
||||
_, err := ParseBool(answer)
|
||||
if err != nil {
|
||||
return fmt.Errorf("invalid boolean value: %v", answer)
|
||||
return fmt.Errorf(i18n.T("plugin_invalid_boolean_value"), answer)
|
||||
}
|
||||
o.Value = strings.ToLower(answer)
|
||||
}
|
||||
@@ -246,7 +256,7 @@ func (o *SetupQuestion) OnAnswerWithReset(answer string, isReset bool) (err erro
|
||||
|
||||
func (o *Setting) IsValidErr() (err error) {
|
||||
if !o.IsValid() {
|
||||
err = fmt.Errorf("%v=%v, is not valid", o.EnvVariable, o.Value)
|
||||
err = fmt.Errorf(i18n.T("plugin_setting_not_valid"), o.EnvVariable, o.Value)
|
||||
}
|
||||
return
|
||||
}
|
||||
@@ -317,5 +327,8 @@ func BuildEnvVariablePrefix(name string) (ret string) {
|
||||
|
||||
func BuildEnvVariable(name string) string {
|
||||
name = strings.TrimSpace(name)
|
||||
return strings.ReplaceAll(strings.ToUpper(name), " ", "_")
|
||||
name = strings.ToUpper(name)
|
||||
name = strings.ReplaceAll(name, " ", "_")
|
||||
name = strings.ReplaceAll(name, "-", "_")
|
||||
return name
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ import (
|
||||
"sort"
|
||||
"strings"
|
||||
|
||||
"github.com/danielmiessler/fabric/internal/i18n"
|
||||
"github.com/danielmiessler/fabric/internal/plugins"
|
||||
"github.com/danielmiessler/fabric/internal/tools/githelper"
|
||||
)
|
||||
@@ -26,18 +27,18 @@ func NewStrategiesManager() (sm *StrategiesManager) {
|
||||
Strategies: strategies,
|
||||
}
|
||||
sm.PluginBase = &plugins.PluginBase{
|
||||
Name: label,
|
||||
SetupDescription: "Strategies - Downloads Prompting Strategies (like chain of thought) [required]",
|
||||
Name: i18n.T("strategies_label"),
|
||||
SetupDescription: i18n.T("strategies_setup_description") + " " + i18n.T("required_marker"),
|
||||
EnvNamePrefix: plugins.BuildEnvVariablePrefix(label),
|
||||
ConfigureCustom: sm.configure,
|
||||
}
|
||||
|
||||
sm.DefaultGitRepoUrl = sm.AddSetupQuestionCustom("Git Repo Url", true,
|
||||
"Enter the default Git repository URL for the strategies")
|
||||
sm.DefaultGitRepoUrl = sm.AddSetupQuestionWithEnvName("Git Repo Url", true,
|
||||
i18n.T("strategies_git_repo_url_question"))
|
||||
sm.DefaultGitRepoUrl.Value = DefaultStrategiesGitRepoUrl
|
||||
|
||||
sm.DefaultFolder = sm.AddSetupQuestionCustom("Git Repo Strategies Folder", true,
|
||||
"Enter the default folder in the Git repository where strategies are stored")
|
||||
sm.DefaultFolder = sm.AddSetupQuestionWithEnvName("Git Repo Strategies Folder", true,
|
||||
i18n.T("strategies_git_repo_folder_question"))
|
||||
sm.DefaultFolder.Value = DefaultStrategiesGitRepoFolder
|
||||
|
||||
return
|
||||
@@ -111,29 +112,30 @@ func (sm *StrategiesManager) Setup() (err error) {
|
||||
// PopulateDB downloads strategies from the internet and populates the strategies folder
|
||||
func (sm *StrategiesManager) PopulateDB() (err error) {
|
||||
strategyDir, _ := getStrategyDir()
|
||||
fmt.Printf("Downloading strategies and Populating %s...\n", strategyDir)
|
||||
fmt.Printf(i18n.T("strategies_downloading"), strategyDir)
|
||||
fmt.Println()
|
||||
fmt.Println()
|
||||
if err = sm.gitCloneAndCopy(); err != nil {
|
||||
return
|
||||
}
|
||||
fmt.Printf("✅ Successfully downloaded and installed strategies to %s\n", strategyDir)
|
||||
fmt.Printf(i18n.T("strategies_download_success"), strategyDir)
|
||||
return
|
||||
}
|
||||
|
||||
func (sm *StrategiesManager) gitCloneAndCopy() (err error) {
|
||||
homeDir, err := os.UserHomeDir()
|
||||
if err != nil {
|
||||
err = fmt.Errorf("could not get home directory: %v", err)
|
||||
err = fmt.Errorf(i18n.T("strategies_home_dir_error"), err)
|
||||
return
|
||||
}
|
||||
strategyDir := filepath.Join(homeDir, ".config", "fabric", "strategies")
|
||||
|
||||
// Create the directory if it doesn't exist
|
||||
if err = os.MkdirAll(strategyDir, os.ModePerm); err != nil {
|
||||
return fmt.Errorf("failed to create strategies directory: %w", err)
|
||||
return fmt.Errorf(i18n.T("strategies_failed_create_directory"), err)
|
||||
}
|
||||
|
||||
fmt.Printf("Cloning repository %s (path: %s)...\n", sm.DefaultGitRepoUrl.Value, sm.DefaultFolder.Value)
|
||||
fmt.Printf(i18n.T("strategies_cloning_repository"), sm.DefaultGitRepoUrl.Value, sm.DefaultFolder.Value)
|
||||
|
||||
// Use the helper to fetch files
|
||||
err = githelper.FetchFilesFromRepo(githelper.FetchOptions{
|
||||
@@ -143,7 +145,7 @@ func (sm *StrategiesManager) gitCloneAndCopy() (err error) {
|
||||
SingleDirectory: true,
|
||||
})
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to download strategies: %w", err)
|
||||
return fmt.Errorf(i18n.T("strategies_failed_download"), err)
|
||||
}
|
||||
|
||||
// Count downloaded strategies
|
||||
@@ -155,7 +157,7 @@ func (sm *StrategiesManager) gitCloneAndCopy() (err error) {
|
||||
strategyCount++
|
||||
}
|
||||
}
|
||||
fmt.Printf("Downloaded %d strategies\n", strategyCount)
|
||||
fmt.Printf(i18n.T("strategies_downloaded_count"), strategyCount)
|
||||
}
|
||||
|
||||
return nil
|
||||
@@ -170,7 +172,7 @@ func (sm *StrategiesManager) configure() (err error) {
|
||||
func getStrategyDir() (ret string, err error) {
|
||||
homeDir, err := os.UserHomeDir()
|
||||
if err != nil {
|
||||
err = fmt.Errorf("could not get home directory: %v, using current directory instead", err)
|
||||
err = fmt.Errorf(i18n.T("strategies_home_dir_fallback"), err)
|
||||
ret = filepath.Join(".", "data/strategies")
|
||||
return
|
||||
}
|
||||
@@ -195,7 +197,7 @@ func LoadStrategy(filename string) (*Strategy, error) {
|
||||
// Try without extension
|
||||
strategyPath = filepath.Join(strategyDir, filename)
|
||||
if _, err := os.Stat(strategyPath); os.IsNotExist(err) {
|
||||
return nil, fmt.Errorf("strategy %s not found. Please run 'fabric --liststrategies' for list", filename)
|
||||
return nil, fmt.Errorf(i18n.T("strategy_not_found"), filename)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -216,10 +218,10 @@ func LoadStrategy(filename string) (*Strategy, error) {
|
||||
// ListStrategies prints available strategies
|
||||
func (sm *StrategiesManager) ListStrategies(shellCompleteList bool) error {
|
||||
if len(sm.Strategies) == 0 {
|
||||
return fmt.Errorf("no strategies found. Please run 'fabric --setup' to download strategies")
|
||||
return fmt.Errorf("%s", i18n.T("strategies_none_found"))
|
||||
}
|
||||
if !shellCompleteList {
|
||||
fmt.Print("Available Strategies:\n\n")
|
||||
fmt.Print(i18n.T("strategies_available_header"), "\n\n")
|
||||
}
|
||||
// Get all strategy names for sorting
|
||||
names := []string{}
|
||||
|
||||
@@ -6,6 +6,7 @@ import (
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
"github.com/danielmiessler/fabric/internal/i18n"
|
||||
"github.com/danielmiessler/fabric/internal/plugins"
|
||||
)
|
||||
|
||||
@@ -14,14 +15,14 @@ func NewCustomPatterns() (ret *CustomPatterns) {
|
||||
ret = &CustomPatterns{}
|
||||
|
||||
ret.PluginBase = &plugins.PluginBase{
|
||||
Name: label,
|
||||
SetupDescription: "Custom Patterns - Set directory for your custom patterns (optional)",
|
||||
Name: i18n.T("custom_patterns_label"),
|
||||
SetupDescription: i18n.T("custom_patterns_setup_description") + " " + i18n.T("optional_marker"),
|
||||
EnvNamePrefix: plugins.BuildEnvVariablePrefix(label),
|
||||
ConfigureCustom: ret.configure,
|
||||
}
|
||||
|
||||
ret.CustomPatternsDir = ret.AddSetupQuestionCustom("Directory", false,
|
||||
"Enter the path to your custom patterns directory (leave empty to skip)")
|
||||
ret.CustomPatternsDir = ret.AddSetupQuestionWithEnvName("Directory", false,
|
||||
i18n.T("custom_patterns_directory_question"))
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ import (
|
||||
|
||||
"github.com/pkg/errors"
|
||||
|
||||
"github.com/danielmiessler/fabric/internal/i18n"
|
||||
"github.com/danielmiessler/fabric/internal/plugins"
|
||||
"github.com/danielmiessler/fabric/internal/plugins/ai"
|
||||
)
|
||||
@@ -15,7 +16,7 @@ func NeeDefaults(getVendorsModels func() (*ai.VendorsModels, error)) (ret *Defau
|
||||
ret = &Defaults{
|
||||
PluginBase: &plugins.PluginBase{
|
||||
Name: vendorName,
|
||||
SetupDescription: "Default AI Vendor and Model [required]",
|
||||
SetupDescription: i18n.T("defaults_setup_description") + " " + i18n.T("required_marker"),
|
||||
EnvNamePrefix: plugins.BuildEnvVariablePrefix(vendorName),
|
||||
},
|
||||
GetVendorsModels: getVendorsModels,
|
||||
@@ -23,11 +24,11 @@ func NeeDefaults(getVendorsModels func() (*ai.VendorsModels, error)) (ret *Defau
|
||||
|
||||
ret.Vendor = ret.AddSetting("Vendor", true)
|
||||
|
||||
ret.Model = ret.AddSetupQuestionCustom("Model", true,
|
||||
"Enter the index the name of your default model")
|
||||
ret.Model = ret.AddSetupQuestionWithEnvName("Model", true,
|
||||
i18n.T("defaults_model_question"))
|
||||
|
||||
ret.ModelContextLength = ret.AddSetupQuestionCustom("Model Context Length", false,
|
||||
"Enter model context length")
|
||||
ret.ModelContextLength = ret.AddSetupQuestionWithEnvName("Model Context Length", false,
|
||||
i18n.T("defaults_model_context_length_question"))
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ import (
|
||||
"io"
|
||||
"net/http"
|
||||
|
||||
"github.com/danielmiessler/fabric/internal/i18n"
|
||||
"github.com/danielmiessler/fabric/internal/plugins"
|
||||
)
|
||||
|
||||
@@ -21,8 +22,8 @@ func NewClient() (ret *Client) {
|
||||
|
||||
ret = &Client{
|
||||
PluginBase: &plugins.PluginBase{
|
||||
Name: label,
|
||||
SetupDescription: "Jina AI Service - to grab a webpage as clean, LLM-friendly text",
|
||||
Name: i18n.T("jina_label"),
|
||||
SetupDescription: i18n.T("jina_setup_description") + " " + i18n.T("optional_marker"),
|
||||
EnvNamePrefix: plugins.BuildEnvVariablePrefix(label),
|
||||
},
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package lang
|
||||
|
||||
import (
|
||||
"github.com/danielmiessler/fabric/internal/i18n"
|
||||
"github.com/danielmiessler/fabric/internal/plugins"
|
||||
"golang.org/x/text/language"
|
||||
)
|
||||
@@ -11,14 +12,14 @@ func NewLanguage() (ret *Language) {
|
||||
ret = &Language{}
|
||||
|
||||
ret.PluginBase = &plugins.PluginBase{
|
||||
Name: label,
|
||||
SetupDescription: "Language - Default AI Vendor Output Language",
|
||||
Name: i18n.T("language_label"),
|
||||
SetupDescription: i18n.T("language_setup_description") + " " + i18n.T("optional_marker"),
|
||||
EnvNamePrefix: plugins.BuildEnvVariablePrefix(label),
|
||||
ConfigureCustom: ret.configure,
|
||||
}
|
||||
|
||||
ret.DefaultLanguage = ret.AddSetupQuestionCustom("Output", false,
|
||||
"Enter your default output language (for example: zh_CN)")
|
||||
ret.DefaultLanguage = ret.AddSetupQuestionWithEnvName("Output", false,
|
||||
i18n.T("language_output_question"))
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ import (
|
||||
"sort"
|
||||
"strings"
|
||||
|
||||
"github.com/danielmiessler/fabric/internal/i18n"
|
||||
debuglog "github.com/danielmiessler/fabric/internal/log"
|
||||
"github.com/danielmiessler/fabric/internal/plugins"
|
||||
"github.com/danielmiessler/fabric/internal/plugins/db/fsdb"
|
||||
@@ -26,18 +27,18 @@ func NewPatternsLoader(patterns *fsdb.PatternsEntity) (ret *PatternsLoader) {
|
||||
}
|
||||
|
||||
ret.PluginBase = &plugins.PluginBase{
|
||||
Name: label,
|
||||
SetupDescription: "Patterns - Downloads patterns [required]",
|
||||
Name: i18n.T("patterns_loader_label"),
|
||||
SetupDescription: i18n.T("patterns_setup_description") + " " + i18n.T("required_marker"),
|
||||
EnvNamePrefix: plugins.BuildEnvVariablePrefix(label),
|
||||
ConfigureCustom: ret.configure,
|
||||
}
|
||||
|
||||
ret.DefaultGitRepoUrl = ret.AddSetupQuestionCustom("Git Repo Url", true,
|
||||
"Enter the default Git repository URL for the patterns")
|
||||
ret.DefaultGitRepoUrl = ret.AddSetupQuestionWithEnvName("Git Repo Url", true,
|
||||
i18n.T("patterns_git_repo_url_question"))
|
||||
ret.DefaultGitRepoUrl.Value = DefaultPatternsGitRepoUrl
|
||||
|
||||
ret.DefaultFolder = ret.AddSetupQuestionCustom("Git Repo Patterns Folder", true,
|
||||
"Enter the default folder in the Git repository where patterns are stored")
|
||||
ret.DefaultFolder = ret.AddSetupQuestionWithEnvName("Git Repo Patterns Folder", true,
|
||||
i18n.T("patterns_git_repo_folder_question"))
|
||||
ret.DefaultFolder.Value = DefaultPatternsGitRepoFolder
|
||||
|
||||
return
|
||||
@@ -61,7 +62,7 @@ func (o *PatternsLoader) configure() (err error) {
|
||||
// Use a consistent temp folder name regardless of the source path structure
|
||||
tempDir, err := os.MkdirTemp("", "fabric-patterns-")
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to create temporary patterns folder: %w", err)
|
||||
return fmt.Errorf(i18n.T("patterns_failed_create_temp_folder"), err)
|
||||
}
|
||||
o.tempPatternsFolder = tempDir
|
||||
|
||||
@@ -91,29 +92,30 @@ func (o *PatternsLoader) Setup() (err error) {
|
||||
|
||||
// PopulateDB downloads patterns from the internet and populates the patterns folder
|
||||
func (o *PatternsLoader) PopulateDB() (err error) {
|
||||
fmt.Printf("Downloading patterns and Populating %s...\n", o.Patterns.Dir)
|
||||
fmt.Printf(i18n.T("patterns_downloading"), o.Patterns.Dir)
|
||||
fmt.Println()
|
||||
fmt.Println()
|
||||
|
||||
originalPath := o.DefaultFolder.Value
|
||||
if err = o.gitCloneAndCopy(); err != nil {
|
||||
return fmt.Errorf("failed to download patterns from git repository: %w", err)
|
||||
return fmt.Errorf(i18n.T("patterns_failed_download_from_git"), err)
|
||||
}
|
||||
|
||||
// If the path was migrated during gitCloneAndCopy, we need to save the updated configuration
|
||||
if o.DefaultFolder.Value != originalPath {
|
||||
fmt.Printf("💾 Saving updated configuration (path changed from '%s' to '%s')...\n", originalPath, o.DefaultFolder.Value)
|
||||
fmt.Printf(i18n.T("patterns_saving_updated_configuration"), originalPath, o.DefaultFolder.Value)
|
||||
// The configuration will be saved by the calling code after this returns successfully
|
||||
}
|
||||
|
||||
if err = o.movePatterns(); err != nil {
|
||||
return fmt.Errorf("failed to move patterns to config directory: %w", err)
|
||||
return fmt.Errorf(i18n.T("patterns_failed_move_patterns"), err)
|
||||
}
|
||||
|
||||
fmt.Printf("✅ Successfully downloaded and installed patterns to %s\n", o.Patterns.Dir)
|
||||
fmt.Printf(i18n.T("patterns_download_success"), o.Patterns.Dir)
|
||||
|
||||
// Create the unique patterns file after patterns are successfully moved
|
||||
if err = o.createUniquePatternsFile(); err != nil {
|
||||
return fmt.Errorf("failed to create unique patterns file: %w", err)
|
||||
return fmt.Errorf(i18n.T("patterns_failed_unique_file"), err)
|
||||
}
|
||||
|
||||
return
|
||||
@@ -128,7 +130,7 @@ func (o *PatternsLoader) PersistPatterns() (err error) {
|
||||
return nil
|
||||
}
|
||||
// Return unexpected errors (e.g., permission issues)
|
||||
return fmt.Errorf("failed to access patterns directory '%s': %w", o.Patterns.Dir, err)
|
||||
return fmt.Errorf(i18n.T("patterns_failed_access_directory"), o.Patterns.Dir, err)
|
||||
}
|
||||
|
||||
var currentPatterns []os.DirEntry
|
||||
@@ -157,9 +159,9 @@ func (o *PatternsLoader) PersistPatterns() (err error) {
|
||||
src := filepath.Join(o.Patterns.Dir, currentPattern.Name())
|
||||
dst := filepath.Join(newPatternsFolder, currentPattern.Name())
|
||||
if copyErr := copy.Copy(src, dst); copyErr != nil {
|
||||
fmt.Printf("Warning: failed to preserve custom pattern '%s': %v\n", currentPattern.Name(), copyErr)
|
||||
fmt.Printf(i18n.T("patterns_preserve_warning"), currentPattern.Name(), copyErr)
|
||||
} else {
|
||||
fmt.Printf("Preserved custom pattern: %s\n", currentPattern.Name())
|
||||
fmt.Printf(i18n.T("patterns_preserved_custom_pattern"), currentPattern.Name())
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -196,13 +198,13 @@ func (o *PatternsLoader) movePatterns() (err error) {
|
||||
}
|
||||
|
||||
if patternCount == 0 {
|
||||
err = fmt.Errorf("no patterns were successfully copied to %s", o.Patterns.Dir)
|
||||
err = fmt.Errorf(i18n.T("patterns_no_patterns_copied"), o.Patterns.Dir)
|
||||
return
|
||||
}
|
||||
|
||||
//create an empty file to indicate that the patterns have been updated if not exists
|
||||
if _, err = os.Create(o.loadedFilePath); err != nil {
|
||||
return fmt.Errorf("failed to create loaded marker file '%s': %w", o.loadedFilePath, err)
|
||||
return fmt.Errorf(i18n.T("patterns_failed_loaded_marker"), o.loadedFilePath, err)
|
||||
}
|
||||
|
||||
err = os.RemoveAll(patternsDir)
|
||||
@@ -212,10 +214,10 @@ func (o *PatternsLoader) movePatterns() (err error) {
|
||||
func (o *PatternsLoader) gitCloneAndCopy() (err error) {
|
||||
// Create temp folder if it doesn't exist
|
||||
if err = os.MkdirAll(filepath.Dir(o.tempPatternsFolder), os.ModePerm); err != nil {
|
||||
return fmt.Errorf("failed to create temp directory: %w", err)
|
||||
return fmt.Errorf(i18n.T("patterns_failed_create_temp_dir"), err)
|
||||
}
|
||||
|
||||
fmt.Printf("Cloning repository %s (path: %s)...\n", o.DefaultGitRepoUrl.Value, o.DefaultFolder.Value)
|
||||
fmt.Printf(i18n.T("patterns_cloning_repository"), o.DefaultGitRepoUrl.Value, o.DefaultFolder.Value)
|
||||
|
||||
// Try to fetch files with the current path
|
||||
err = githelper.FetchFilesFromRepo(githelper.FetchOptions{
|
||||
@@ -224,21 +226,21 @@ func (o *PatternsLoader) gitCloneAndCopy() (err error) {
|
||||
DestDir: o.tempPatternsFolder,
|
||||
})
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to download patterns from %s: %w", o.DefaultGitRepoUrl.Value, err)
|
||||
return fmt.Errorf(i18n.T("patterns_failed_download_from_repo"), o.DefaultGitRepoUrl.Value, err)
|
||||
}
|
||||
|
||||
// Check if patterns were downloaded
|
||||
if patternCount, checkErr := o.countPatternsInDirectory(o.tempPatternsFolder); checkErr != nil {
|
||||
return fmt.Errorf("failed to read temp patterns directory: %w", checkErr)
|
||||
return fmt.Errorf(i18n.T("patterns_failed_read_temp_directory"), checkErr)
|
||||
} else if patternCount == 0 {
|
||||
// No patterns found with current path, try automatic migration
|
||||
if migrationErr := o.tryPathMigration(); migrationErr != nil {
|
||||
return fmt.Errorf("no patterns found in repository at path %s and migration failed: %w", o.DefaultFolder.Value, migrationErr)
|
||||
return fmt.Errorf(i18n.T("patterns_no_patterns_migration_failed"), o.DefaultFolder.Value, migrationErr)
|
||||
}
|
||||
// Migration successful, try downloading again
|
||||
return o.gitCloneAndCopy()
|
||||
} else {
|
||||
fmt.Printf("Downloaded %d patterns to temporary directory\n", patternCount)
|
||||
fmt.Printf(i18n.T("patterns_downloaded_temp"), patternCount)
|
||||
}
|
||||
|
||||
return nil
|
||||
@@ -248,7 +250,7 @@ func (o *PatternsLoader) gitCloneAndCopy() (err error) {
|
||||
func (o *PatternsLoader) tryPathMigration() (err error) {
|
||||
// Check if current path is the old "patterns" path
|
||||
if o.DefaultFolder.Value == "patterns" {
|
||||
fmt.Println("🔄 Detected old pattern path 'patterns', trying migration to 'data/patterns'...")
|
||||
fmt.Println(i18n.T("patterns_detected_old_path"))
|
||||
|
||||
// Try the new restructured path
|
||||
newPath := "data/patterns"
|
||||
@@ -256,7 +258,7 @@ func (o *PatternsLoader) tryPathMigration() (err error) {
|
||||
|
||||
// Clean up any existing test temp folder
|
||||
if err := os.RemoveAll(testTempFolder); err != nil {
|
||||
fmt.Printf("Warning: failed to remove test temporary folder '%s': %v\n", testTempFolder, err)
|
||||
fmt.Printf(i18n.T("patterns_warning_remove_test_folder"), testTempFolder, err)
|
||||
}
|
||||
|
||||
// Test if the new path works
|
||||
@@ -269,7 +271,7 @@ func (o *PatternsLoader) tryPathMigration() (err error) {
|
||||
if testErr == nil {
|
||||
// Check if patterns exist in the new path
|
||||
if patternCount, countErr := o.countPatternsInDirectory(testTempFolder); countErr == nil && patternCount > 0 {
|
||||
fmt.Printf("✅ Found %d patterns at new path '%s', updating configuration...\n", patternCount, newPath)
|
||||
fmt.Printf(i18n.T("patterns_found_new_path"), patternCount, newPath)
|
||||
|
||||
// Update the configuration
|
||||
o.DefaultFolder.Value = newPath
|
||||
@@ -278,7 +280,7 @@ func (o *PatternsLoader) tryPathMigration() (err error) {
|
||||
if renameErr := os.Rename(testTempFolder, o.tempPatternsFolder); renameErr != nil {
|
||||
// If rename fails, try copy
|
||||
if copyErr := copy.Copy(testTempFolder, o.tempPatternsFolder); copyErr != nil {
|
||||
return fmt.Errorf("failed to move test patterns to temp folder: %w", copyErr)
|
||||
return fmt.Errorf(i18n.T("patterns_failed_move_test_patterns"), copyErr)
|
||||
}
|
||||
os.RemoveAll(testTempFolder)
|
||||
}
|
||||
@@ -291,7 +293,7 @@ func (o *PatternsLoader) tryPathMigration() (err error) {
|
||||
os.RemoveAll(testTempFolder)
|
||||
}
|
||||
|
||||
return fmt.Errorf("unable to find patterns at current path '%s' or migrate to new structure", o.DefaultFolder.Value)
|
||||
return fmt.Errorf(i18n.T("patterns_unable_to_find_or_migrate"), o.DefaultFolder.Value)
|
||||
}
|
||||
|
||||
// countPatternsInDirectory counts the number of pattern directories in a given directory
|
||||
@@ -316,7 +318,7 @@ func (o *PatternsLoader) createUniquePatternsFile() (err error) {
|
||||
// Read patterns from the main patterns directory
|
||||
entries, err := os.ReadDir(o.Patterns.Dir)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to read patterns directory: %w", err)
|
||||
return fmt.Errorf(i18n.T("patterns_failed_read_directory"), err)
|
||||
}
|
||||
|
||||
patternNamesMap := make(map[string]bool) // Use map to avoid duplicates
|
||||
@@ -336,17 +338,17 @@ func (o *PatternsLoader) createUniquePatternsFile() (err error) {
|
||||
patternNamesMap[entry.Name()] = true
|
||||
}
|
||||
}
|
||||
debuglog.Log("📂 Also included patterns from custom directory: %s\n", o.Patterns.CustomPatternsDir)
|
||||
debuglog.Log(i18n.T("patterns_debug_included_custom_directory"), o.Patterns.CustomPatternsDir)
|
||||
} else {
|
||||
debuglog.Log("Warning: Could not read custom patterns directory %s: %v\n", o.Patterns.CustomPatternsDir, customErr)
|
||||
debuglog.Log(i18n.T("patterns_warning_custom_directory"), o.Patterns.CustomPatternsDir, customErr)
|
||||
}
|
||||
}
|
||||
|
||||
if len(patternNamesMap) == 0 {
|
||||
if o.Patterns.CustomPatternsDir != "" {
|
||||
return fmt.Errorf("no patterns found in directories %s and %s", o.Patterns.Dir, o.Patterns.CustomPatternsDir)
|
||||
return fmt.Errorf(i18n.T("patterns_no_patterns_found_in_directories"), o.Patterns.Dir, o.Patterns.CustomPatternsDir)
|
||||
}
|
||||
return fmt.Errorf("no patterns found in directory %s", o.Patterns.Dir)
|
||||
return fmt.Errorf(i18n.T("patterns_no_patterns_found_in_directory"), o.Patterns.Dir)
|
||||
}
|
||||
|
||||
// Convert map to sorted slice
|
||||
@@ -361,9 +363,9 @@ func (o *PatternsLoader) createUniquePatternsFile() (err error) {
|
||||
// Join pattern names with newlines
|
||||
content := strings.Join(patternNames, "\n") + "\n"
|
||||
if err = os.WriteFile(o.Patterns.UniquePatternsFilePath, []byte(content), 0644); err != nil {
|
||||
return fmt.Errorf("failed to write unique patterns file: %w", err)
|
||||
return fmt.Errorf(i18n.T("patterns_failed_write_unique_file"), err)
|
||||
}
|
||||
|
||||
fmt.Printf("📝 Created unique patterns file with %d patterns\n", len(patternNames))
|
||||
fmt.Printf(i18n.T("patterns_unique_file_created"), len(patternNames))
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -65,8 +65,8 @@ func NewYouTube() (ret *YouTube) {
|
||||
ret = &YouTube{}
|
||||
|
||||
ret.PluginBase = &plugins.PluginBase{
|
||||
Name: label,
|
||||
SetupDescription: label + " - to grab video transcripts (via yt-dlp) and comments/metadata (via YouTube API)",
|
||||
Name: i18n.T("youtube_label"),
|
||||
SetupDescription: i18n.T("youtube_setup_description") + " " + i18n.T("optional_marker"),
|
||||
EnvNamePrefix: plugins.BuildEnvVariablePrefix(label),
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user