feat(desktop): polish desktop shell and shared WebUI surfaces (#4195)

* feat(desktop): add native host scaffold

* feat(webui): track turns and usage in gateway

* feat(webui): polish desktop chat experience

* feat(apps): add ArcGIS and Joplin logos

* feat(desktop): polish shell and shared surfaces

* fix(webui): avoid preview chips for glob references

* test: align CI expectations for token fallback

* feat(webui): preview prompt rail entries

* feat(webui): add prompt navigator drawer

* style(webui): refine prompt navigator placement

* style(webui): align prompt navigator with header actions

* style(webui): simplify prompt navigator header

* refactor(webui): clean thread resource refresh

* feat(desktop): add native reply notifications

* fix(webui): preserve desktop restart and replay state

* fix(desktop): harden gateway proxy startup

* fix(web): fall back when readability is unavailable

* fix(desktop): hide window instead of closing on macos

* fix(webui): unify desktop header actions

* fix(webui): simplify prompt history rows

* fix(desktop): log notification delivery failures

* chore(desktop): clean source package artifacts

* fix(cron): support one-time relative reminders

* fix(webui): reveal scroll button in place

* Revert "fix(cron): support one-time relative reminders"

This reverts commit 4c4661da120a3c7283e0768412bae48604e7390b.

* refactor(webui): extract token usage heatmap

* docs(desktop): clarify contributor guides

---------

Co-authored-by: chengyongru <2755839590@qq.com>
This commit is contained in:
Xubin Ren
2026-06-06 19:49:33 +08:00
committed by GitHub
co-authored by chengyongru
parent a1b9577224
commit ab9f49970d
103 changed files with 10483 additions and 1003 deletions
+106 -4
View File
@@ -54,7 +54,10 @@
"label": "Language",
"ariaLabel": "Change language"
},
"apps": "Apps"
"apps": "Apps",
"skills": {
"title": "Skills"
}
},
"settings": {
"backToChat": "Back to chat",
@@ -75,7 +78,8 @@
"mcp": "MCP",
"runtime": "System",
"advanced": "Security",
"apps": "Apps"
"apps": "Apps",
"skills": "Skills"
},
"sections": {
"interface": "Interface",
@@ -295,6 +299,9 @@
"disabled": "Disabled",
"restartPending": "Restart pending",
"ready": "Ready",
"privateEngine": "Private engine",
"unixSocket": "Unix socket",
"defaultWorkspace": "Default workspace",
"comfortable": "Comfortable",
"compact": "Compact",
"auto": "Auto",
@@ -386,6 +393,31 @@
"imageGeneration": "Image generation",
"workspace": "Workspace"
},
"usage": {
"title": "Token activity",
"shortTitle": "Token Usage",
"subtitle": "Provider-reported usage over the last 12 months.",
"empty": "Token activity will appear after new model replies.",
"totalTokens": "Total tokens",
"peakTokens": "Peak tokens",
"thirtyDayTokens": "30-day tokens",
"currentStreak": "Current streak",
"longestStreak": "Longest streak",
"daysValue": "{{count}}d",
"last30": "30 days",
"activeDays": "Active days",
"requests": "Requests",
"estimated": "estimated",
"includesEstimates": "includes estimates",
"cellTitle": "{{date}}: {{tokens}} tokens, {{requests}} requests",
"sources": {
"user": "Chat",
"api": "API",
"cron": "Automations",
"dream": "Memory",
"system": "System"
}
},
"providers": {
"searchPlaceholder": "Search providers",
"noMatches": "No providers match this search.",
@@ -427,6 +459,33 @@
"signInBeforeSaving": "Sign in before saving this OAuth provider as the active model provider.",
"signedIn": "Signed in",
"notSignedIn": "Not signed in"
},
"skills": {
"description": "Review the instruction skills this agent can load during a conversation.",
"caption": "{{available}} available · {{total}} total",
"featured": "Agent skills",
"empty": "No skills are available.",
"sourceWorkspace": "Custom",
"sourceBuiltin": "Built-in",
"statusAvailable": "Available",
"statusUnavailable": "Unavailable",
"unavailableReason": "Missing: {{reason}}",
"openDetails": "Open details for {{name}}",
"loadingDetail": "Loading skill details...",
"loadFailed": "Could not load skill details.",
"descriptionTitle": "Description",
"source": "Source",
"status": "Status",
"requirements": "Requirements",
"noRequirements": "No explicit requirements.",
"commands": "Commands",
"environment": "Environment variables",
"missingCommands": "Missing CLI",
"missingEnvironment": "Missing ENV",
"unavailableReasonLabel": "Unavailable reason",
"rawInstructions": "Raw SKILL.md",
"rawInstructionsEmpty": "No raw instructions.",
"detailDescription": "Details for {{name}}."
}
},
"chat": {
@@ -548,7 +607,30 @@
"toggleSidebar": "Toggle sidebar",
"newChat": "Start a new chat",
"toggleTheme": "Toggle theme from header",
"settings": "Open settings"
"settings": "Open settings",
"sessionInfo": "Session details"
},
"sessionInfo": {
"title": "Session",
"untitled": "Untitled chat",
"automations": "Automations",
"count": "{{count}}",
"loading": "Loading automations...",
"loadFailed": "Could not load automations.",
"empty": "No automations in this session yet.",
"disabled": "Off",
"schedule": {
"at": "{{time}}",
"every": "Every {{duration}}",
"cron": "Cron {{expr}}",
"cronWithTz": "Cron {{expr}} · {{tz}}",
"unknown": "Custom schedule"
},
"next": {
"label": "{{time}}",
"disabled": "Paused",
"none": "No next run"
}
},
"composer": {
"placeholderThread": "Type your message…",
@@ -565,6 +647,8 @@
"goalStateCloseAria": "Close goal",
"send": "Send message",
"stop": "Stop response",
"modelNotConfigured": "Model not configured",
"configureModel": "Configure model",
"queued": {
"label": "Queued guidance",
"guide": "Guide",
@@ -691,7 +775,14 @@
}
},
"scrollToBottom": "Scroll to bottom",
"loadEarlier": "Load earlier messages"
"loadEarlier": "Load earlier messages",
"promptNavigator": {
"open": "Open prompt navigator",
"title": "Prompts",
"search": "Search prompts",
"noResults": "No matching prompts.",
"jumpTo": "Jump to prompt: {{label}}"
}
},
"message": {
"streaming": "streaming",
@@ -722,6 +813,8 @@
"cliRunRan": "Used",
"cliRunFailed": "Failed",
"imageAttachment": "Image attachment",
"automationSourceFallback": "Automation",
"automationTriggered": "Triggered automatically",
"copyReply": "Copy reply",
"copiedReply": "Copied reply",
"turnLatencyTitle": "Response time (end-to-end)"
@@ -733,6 +826,15 @@
"next": "Next image",
"close": "Close image preview"
},
"filePreview": {
"aria": "File preview",
"close": "Close file preview",
"loading": "Loading preview...",
"failed": "Could not preview this file.",
"routeMissing": "File preview needs the latest gateway. Restart nanobot gateway and try again.",
"resize": "Resize file preview",
"truncated": "Preview is truncated because this file is large."
},
"code": {
"fallbackLanguage": "code",
"copyAria": "Copy code",
+107 -5
View File
@@ -54,7 +54,10 @@
"label": "Idioma",
"ariaLabel": "Cambiar idioma"
},
"apps": "Apps"
"apps": "Apps",
"skills": {
"title": "Habilidades"
}
},
"settings": {
"backToChat": "Volver al chat",
@@ -75,7 +78,8 @@
"advanced": "Seguridad",
"cliApps": "Apps CLI",
"mcp": "MCP",
"apps": "Aplicaciones"
"apps": "Aplicaciones",
"skills": "Habilidades"
},
"sections": {
"interface": "Interfaz",
@@ -187,6 +191,9 @@
"disabled": "Desactivado",
"restartPending": "Reinicio pendiente",
"ready": "Listo",
"privateEngine": "Motor privado",
"unixSocket": "Socket Unix",
"defaultWorkspace": "Espacio predeterminado",
"comfortable": "Cómodo",
"compact": "Compacto",
"auto": "Automático",
@@ -278,6 +285,31 @@
"imageGeneration": "Generación de imágenes",
"workspace": "Espacio de trabajo"
},
"usage": {
"title": "Actividad de tokens",
"shortTitle": "Token Usage",
"subtitle": "Uso reportado por el proveedor durante los últimos 12 meses.",
"empty": "La actividad de tokens aparecerá después de nuevas respuestas del modelo.",
"totalTokens": "Tokens totales",
"peakTokens": "Pico de tokens",
"thirtyDayTokens": "Tokens en 30 días",
"currentStreak": "Racha actual",
"longestStreak": "Racha más larga",
"daysValue": "{{count}} d",
"last30": "30 días",
"activeDays": "Días activos",
"requests": "Solicitudes",
"estimated": "estimado",
"includesEstimates": "incluye estimaciones",
"cellTitle": "{{date}}: {{tokens}} tokens, {{requests}} solicitudes",
"sources": {
"user": "Chat",
"api": "API",
"cron": "Automatizaciones",
"dream": "Memoria",
"system": "Sistema"
}
},
"providers": {
"searchPlaceholder": "Buscar proveedores",
"noMatches": "Ningún proveedor coincide con esta búsqueda.",
@@ -427,6 +459,33 @@
"signInBeforeSaving": "Inicia sesión antes de guardar este proveedor OAuth como proveedor activo.",
"signedIn": "Sesión iniciada",
"notSignedIn": "Sin sesión"
},
"skills": {
"description": "Revisa las habilidades de instrucciones que este agente puede cargar durante una conversación.",
"caption": "{{available}} disponibles · {{total}} en total",
"featured": "Habilidades del agente",
"empty": "No hay habilidades disponibles.",
"sourceWorkspace": "Personalizada",
"sourceBuiltin": "Integradas",
"statusAvailable": "Disponible",
"statusUnavailable": "No disponible",
"unavailableReason": "Falta: {{reason}}",
"openDetails": "Abrir detalles de {{name}}",
"loadingDetail": "Cargando detalles de la habilidad...",
"loadFailed": "No se pudieron cargar los detalles.",
"descriptionTitle": "Descripción",
"source": "Origen",
"status": "Estado",
"requirements": "Requisitos",
"noRequirements": "Sin requisitos explícitos.",
"commands": "Comandos",
"environment": "Variables de entorno",
"missingCommands": "Falta CLI",
"missingEnvironment": "Falta ENV",
"unavailableReasonLabel": "Motivo de indisponibilidad",
"rawInstructions": "SKILL.md original",
"rawInstructionsEmpty": "No hay instrucciones originales.",
"detailDescription": "Detalles de {{name}}."
}
},
"chat": {
@@ -548,7 +607,30 @@
"toggleSidebar": "Mostrar u ocultar la barra lateral",
"newChat": "Iniciar un chat nuevo",
"toggleTheme": "Cambiar tema desde el encabezado",
"settings": "Abrir configuración"
"settings": "Abrir configuración",
"sessionInfo": "Detalles de la sesión"
},
"sessionInfo": {
"title": "Sesión",
"untitled": "Chat sin título",
"automations": "Automatizaciones",
"count": "{{count}}",
"loading": "Cargando automatizaciones...",
"loadFailed": "No se pudieron cargar las automatizaciones.",
"empty": "Esta sesión aún no tiene automatizaciones.",
"disabled": "Desactivado",
"schedule": {
"at": "A las {{time}}",
"every": "Cada {{duration}}",
"cron": "Cron {{expr}}",
"cronWithTz": "Cron {{expr}} · {{tz}}",
"unknown": "Programación personalizada"
},
"next": {
"label": "Siguiente {{time}}",
"disabled": "En pausa",
"none": "Sin próxima ejecución"
}
},
"composer": {
"placeholderThread": "Escribe tu mensaje…",
@@ -565,6 +647,8 @@
"goalStateCloseAria": "Cerrar objetivo",
"send": "Enviar mensaje",
"stop": "Detener respuesta",
"modelNotConfigured": "Modelo no configurado",
"configureModel": "Configurar modelo",
"queued": {
"label": "Guía en cola",
"guide": "Guiar",
@@ -691,7 +775,14 @@
}
},
"scrollToBottom": "Desplazarse al final",
"loadEarlier": "Cargar mensajes anteriores"
"loadEarlier": "Cargar mensajes anteriores",
"promptNavigator": {
"open": "Abrir navegador de prompts",
"title": "Prompts",
"search": "Buscar prompts",
"noResults": "No hay prompts coincidentes.",
"jumpTo": "Ir al prompt: {{label}}"
}
},
"message": {
"streaming": "transmitiendo",
@@ -724,7 +815,9 @@
"cliActivityFailedMany": "Fallaron {{count}} apps CLI",
"cliRunRunning": "Usando",
"cliRunRan": "Usado",
"cliRunFailed": "Falló"
"cliRunFailed": "Falló",
"automationSourceFallback": "Automatización",
"automationTriggered": "Activada automáticamente"
},
"lightbox": {
"title": "Vista previa de imagen",
@@ -733,6 +826,15 @@
"next": "Imagen siguiente",
"close": "Cerrar vista previa"
},
"filePreview": {
"aria": "Vista previa de archivo",
"close": "Cerrar vista previa de archivo",
"loading": "Cargando vista previa...",
"failed": "No se pudo previsualizar este archivo.",
"routeMissing": "La vista previa necesita el gateway más reciente. Reinicia nanobot gateway e inténtalo de nuevo.",
"resize": "Cambiar el tamaño de la vista previa",
"truncated": "La vista previa está truncada porque el archivo es grande."
},
"code": {
"fallbackLanguage": "código",
"copyAria": "Copiar código",
+107 -5
View File
@@ -54,7 +54,10 @@
"label": "Langue",
"ariaLabel": "Changer de langue"
},
"apps": "Apps"
"apps": "Apps",
"skills": {
"title": "Compétences"
}
},
"settings": {
"backToChat": "Retour au chat",
@@ -75,7 +78,8 @@
"advanced": "Sécurité",
"cliApps": "Apps CLI",
"mcp": "MCP",
"apps": "Applications"
"apps": "Applications",
"skills": "Compétences"
},
"sections": {
"interface": "Interface utilisateur",
@@ -187,6 +191,9 @@
"disabled": "Désactivé",
"restartPending": "Redémarrage en attente",
"ready": "Prêt",
"privateEngine": "Moteur privé",
"unixSocket": "Socket Unix",
"defaultWorkspace": "Espace par défaut",
"comfortable": "Confortable",
"compact": "Compacte",
"auto": "Automatique",
@@ -278,6 +285,31 @@
"imageGeneration": "Génération dimages",
"workspace": "Espace de travail"
},
"usage": {
"title": "Activité des tokens",
"shortTitle": "Token Usage",
"subtitle": "Usage signalé par le fournisseur sur les 12 derniers mois.",
"empty": "Lactivité des tokens apparaîtra après les nouvelles réponses du modèle.",
"totalTokens": "Tokens cumulés",
"peakTokens": "Pic de tokens",
"thirtyDayTokens": "Tokens sur 30 jours",
"currentStreak": "Série actuelle",
"longestStreak": "Plus longue série",
"daysValue": "{{count}} j",
"last30": "30 jours",
"activeDays": "Jours actifs",
"requests": "Requêtes",
"estimated": "estimé",
"includesEstimates": "inclut des estimations",
"cellTitle": "{{date}} : {{tokens}} tokens, {{requests}} requêtes",
"sources": {
"user": "Chat",
"api": "API",
"cron": "Automatisations",
"dream": "Mémoire",
"system": "Système"
}
},
"providers": {
"searchPlaceholder": "Rechercher des fournisseurs",
"noMatches": "Aucun fournisseur ne correspond.",
@@ -427,6 +459,33 @@
"signInBeforeSaving": "Inicia sesión antes de guardar este proveedor OAuth como proveedor activo.",
"signedIn": "Connecté",
"notSignedIn": "Non connecté"
},
"skills": {
"description": "Consultez les compétences dinstruction que cet agent peut charger pendant une conversation.",
"caption": "{{available}} disponibles · {{total}} au total",
"featured": "Compétences agent",
"empty": "Aucune compétence disponible.",
"sourceWorkspace": "Personnalisée",
"sourceBuiltin": "Intégrée",
"statusAvailable": "Disponible",
"statusUnavailable": "Indisponible",
"unavailableReason": "Manquant : {{reason}}",
"openDetails": "Ouvrir les détails de {{name}}",
"loadingDetail": "Chargement des détails...",
"loadFailed": "Impossible de charger les détails.",
"descriptionTitle": "Description",
"source": "Source",
"status": "Statut",
"requirements": "Prérequis",
"noRequirements": "Aucun prérequis explicite.",
"commands": "Commandes",
"environment": "Variables denvironnement",
"missingCommands": "CLI manquant",
"missingEnvironment": "ENV manquant",
"unavailableReasonLabel": "Raison dindisponibilité",
"rawInstructions": "SKILL.md brut",
"rawInstructionsEmpty": "Aucune instruction brute.",
"detailDescription": "Détails de {{name}}."
}
},
"chat": {
@@ -548,7 +607,30 @@
"toggleSidebar": "Afficher ou masquer la barre latérale",
"newChat": "Démarrer un nouveau chat",
"toggleTheme": "Changer le thème depuis len-tête",
"settings": "Ouvrir les paramètres"
"settings": "Ouvrir les paramètres",
"sessionInfo": "Détails de la session"
},
"sessionInfo": {
"title": "Session",
"untitled": "Chat sans titre",
"automations": "Automatisations",
"count": "{{count}}",
"loading": "Chargement des automatisations...",
"loadFailed": "Impossible de charger les automatisations.",
"empty": "Aucune automatisation dans cette session pour le moment.",
"disabled": "Désactivé",
"schedule": {
"at": "À {{time}}",
"every": "Toutes les {{duration}}",
"cron": "Cron {{expr}}",
"cronWithTz": "Cron {{expr}} · {{tz}}",
"unknown": "Planification personnalisée"
},
"next": {
"label": "Prochaine {{time}}",
"disabled": "En pause",
"none": "Aucune prochaine exécution"
}
},
"composer": {
"placeholderThread": "Saisissez votre message…",
@@ -565,6 +647,8 @@
"goalStateCloseAria": "Fermer lobjectif",
"send": "Envoyer le message",
"stop": "Arrêter la réponse",
"modelNotConfigured": "Modèle non configuré",
"configureModel": "Configurer le modèle",
"queued": {
"label": "Guidage en attente",
"guide": "Guider",
@@ -691,7 +775,14 @@
}
},
"scrollToBottom": "Faire défiler vers le bas",
"loadEarlier": "Charger les messages précédents"
"loadEarlier": "Charger les messages précédents",
"promptNavigator": {
"open": "Ouvrir le navigateur de prompts",
"title": "Prompts",
"search": "Rechercher des prompts",
"noResults": "Aucun prompt correspondant.",
"jumpTo": "Aller au prompt : {{label}}"
}
},
"message": {
"streaming": "en cours de génération",
@@ -724,7 +815,9 @@
"cliActivityFailedMany": "Échec de {{count}} apps CLI",
"cliRunRunning": "Utilisation",
"cliRunRan": "Utilisé",
"cliRunFailed": "Échec"
"cliRunFailed": "Échec",
"automationSourceFallback": "Automatisation",
"automationTriggered": "Déclenché automatiquement"
},
"lightbox": {
"title": "Aperçu de limage",
@@ -733,6 +826,15 @@
"next": "Image suivante",
"close": "Fermer laperçu"
},
"filePreview": {
"aria": "Aperçu du fichier",
"close": "Fermer laperçu du fichier",
"loading": "Chargement de laperçu...",
"failed": "Impossible de prévisualiser ce fichier.",
"routeMissing": "Laperçu du fichier nécessite le dernier gateway. Redémarrez nanobot gateway puis réessayez.",
"resize": "Redimensionner laperçu du fichier",
"truncated": "Laperçu est tronqué car le fichier est volumineux."
},
"code": {
"fallbackLanguage": "code",
"copyAria": "Copier le code",
+107 -5
View File
@@ -54,7 +54,10 @@
"label": "Bahasa",
"ariaLabel": "Ganti bahasa"
},
"apps": "Aplikasi"
"apps": "Aplikasi",
"skills": {
"title": "Skill"
}
},
"settings": {
"backToChat": "Kembali ke chat",
@@ -75,7 +78,8 @@
"advanced": "Keamanan",
"cliApps": "Aplikasi CLI",
"mcp": "MCP",
"apps": "Aplikasi"
"apps": "Aplikasi",
"skills": "Skill"
},
"sections": {
"interface": "Antarmuka",
@@ -187,6 +191,9 @@
"disabled": "Nonaktif",
"restartPending": "Menunggu mulai ulang",
"ready": "Siap",
"privateEngine": "Mesin privat",
"unixSocket": "Soket Unix",
"defaultWorkspace": "Workspace default",
"comfortable": "Nyaman",
"compact": "Ringkas",
"auto": "Otomatis",
@@ -278,6 +285,31 @@
"imageGeneration": "Pembuatan gambar",
"workspace": "Ruang kerja"
},
"usage": {
"title": "Aktivitas token",
"shortTitle": "Token Usage",
"subtitle": "Penggunaan yang dilaporkan penyedia selama 12 bulan terakhir.",
"empty": "Aktivitas token akan muncul setelah balasan model baru.",
"totalTokens": "Total token",
"peakTokens": "Puncak token",
"thirtyDayTokens": "Token 30 hari",
"currentStreak": "Rentetan saat ini",
"longestStreak": "Rentetan terpanjang",
"daysValue": "{{count}} h",
"last30": "30 hari",
"activeDays": "Hari aktif",
"requests": "Permintaan",
"estimated": "perkiraan",
"includesEstimates": "termasuk perkiraan",
"cellTitle": "{{date}}: {{tokens}} token, {{requests}} permintaan",
"sources": {
"user": "Chat",
"api": "API",
"cron": "Otomasi",
"dream": "Memori",
"system": "Sistem"
}
},
"providers": {
"searchPlaceholder": "Cari penyedia",
"noMatches": "Tidak ada penyedia yang cocok.",
@@ -427,6 +459,33 @@
"signInBeforeSaving": "Inicia sesión antes de guardar este proveedor OAuth como proveedor activo.",
"signedIn": "Sudah masuk",
"notSignedIn": "Belum masuk"
},
"skills": {
"description": "Tinjau skill instruksi yang dapat dimuat agent ini selama percakapan.",
"caption": "{{available}} tersedia · {{total}} total",
"featured": "Skill agent",
"empty": "Tidak ada skill yang tersedia.",
"sourceWorkspace": "Kustom",
"sourceBuiltin": "Bawaan",
"statusAvailable": "Tersedia",
"statusUnavailable": "Tidak tersedia",
"unavailableReason": "Kurang: {{reason}}",
"openDetails": "Buka detail {{name}}",
"loadingDetail": "Memuat detail skill...",
"loadFailed": "Tidak dapat memuat detail skill.",
"descriptionTitle": "Deskripsi",
"source": "Sumber",
"status": "Status",
"requirements": "Kebutuhan",
"noRequirements": "Tidak ada kebutuhan eksplisit.",
"commands": "Perintah",
"environment": "Variabel lingkungan",
"missingCommands": "CLI hilang",
"missingEnvironment": "ENV hilang",
"unavailableReasonLabel": "Alasan tidak tersedia",
"rawInstructions": "SKILL.md mentah",
"rawInstructionsEmpty": "Tidak ada instruksi mentah.",
"detailDescription": "Detail untuk {{name}}."
}
},
"chat": {
@@ -548,7 +607,30 @@
"toggleSidebar": "Tampilkan atau sembunyikan sidebar",
"newChat": "Mulai chat baru",
"toggleTheme": "Alihkan tema dari header",
"settings": "Buka pengaturan"
"settings": "Buka pengaturan",
"sessionInfo": "Detail sesi"
},
"sessionInfo": {
"title": "Sesi",
"untitled": "Chat tanpa judul",
"automations": "Otomasi",
"count": "{{count}}",
"loading": "Memuat otomasi...",
"loadFailed": "Tidak dapat memuat otomasi.",
"empty": "Belum ada otomasi dalam sesi ini.",
"disabled": "Mati",
"schedule": {
"at": "Pada {{time}}",
"every": "Setiap {{duration}}",
"cron": "Cron {{expr}}",
"cronWithTz": "Cron {{expr}} · {{tz}}",
"unknown": "Jadwal khusus"
},
"next": {
"label": "Berikutnya {{time}}",
"disabled": "Dijeda",
"none": "Tidak ada jadwal berikutnya"
}
},
"composer": {
"placeholderThread": "Ketik pesan Anda…",
@@ -565,6 +647,8 @@
"goalStateCloseAria": "Tutup tujuan",
"send": "Kirim pesan",
"stop": "Hentikan respons",
"modelNotConfigured": "Model belum dikonfigurasi",
"configureModel": "Konfigurasi model",
"queued": {
"label": "Panduan antrean",
"guide": "Pandu",
@@ -691,7 +775,14 @@
}
},
"scrollToBottom": "Gulir ke bawah",
"loadEarlier": "Muat pesan sebelumnya"
"loadEarlier": "Muat pesan sebelumnya",
"promptNavigator": {
"open": "Buka navigator prompt",
"title": "Prompt",
"search": "Cari prompt",
"noResults": "Tidak ada prompt yang cocok.",
"jumpTo": "Lompat ke prompt: {{label}}"
}
},
"message": {
"streaming": "sedang mengalir",
@@ -724,7 +815,9 @@
"cliActivityFailedMany": "{{count}} aplikasi CLI gagal",
"cliRunRunning": "Menggunakan",
"cliRunRan": "Digunakan",
"cliRunFailed": "Gagal"
"cliRunFailed": "Gagal",
"automationSourceFallback": "Otomatisasi",
"automationTriggered": "Dipicu otomatis"
},
"lightbox": {
"title": "Pratinjau gambar",
@@ -733,6 +826,15 @@
"next": "Gambar berikutnya",
"close": "Tutup pratinjau"
},
"filePreview": {
"aria": "Pratinjau file",
"close": "Tutup pratinjau file",
"loading": "Memuat pratinjau...",
"failed": "Tidak dapat mempratinjau file ini.",
"routeMissing": "Pratinjau file memerlukan gateway terbaru. Mulai ulang nanobot gateway lalu coba lagi.",
"resize": "Ubah ukuran pratinjau file",
"truncated": "Pratinjau dipotong karena file ini besar."
},
"code": {
"fallbackLanguage": "kode",
"copyAria": "Salin kode",
+107 -5
View File
@@ -54,7 +54,10 @@
"label": "言語",
"ariaLabel": "言語を変更"
},
"apps": "アプリ"
"apps": "アプリ",
"skills": {
"title": "スキル"
}
},
"settings": {
"backToChat": "チャットに戻る",
@@ -75,7 +78,8 @@
"advanced": "セキュリティ",
"cliApps": "CLI アプリ",
"mcp": "MCP",
"apps": "アプリ"
"apps": "アプリ",
"skills": "スキル"
},
"sections": {
"interface": "インターフェース",
@@ -187,6 +191,9 @@
"disabled": "無効",
"restartPending": "再起動待ち",
"ready": "準備完了",
"privateEngine": "プライベートエンジン",
"unixSocket": "Unix ソケット",
"defaultWorkspace": "デフォルトワークスペース",
"comfortable": "標準",
"compact": "コンパクト",
"auto": "自動",
@@ -278,6 +285,31 @@
"imageGeneration": "画像生成",
"workspace": "ワークスペース"
},
"usage": {
"title": "Token アクティビティ",
"shortTitle": "Token Usage",
"subtitle": "直近 12 か月にプロバイダーが報告した使用量。",
"empty": "新しいモデル返信の後に token アクティビティが表示されます。",
"totalTokens": "累計 Token 数",
"peakTokens": "ピーク Token 数",
"thirtyDayTokens": "30 日 Token 数",
"currentStreak": "現在の連続日数",
"longestStreak": "最長連続日数",
"daysValue": "{{count}} 日",
"last30": "30 日",
"activeDays": "アクティブ日数",
"requests": "リクエスト",
"estimated": "推定",
"includesEstimates": "推定を含む",
"cellTitle": "{{date}}: {{tokens}} tokens, {{requests}} 件のリクエスト",
"sources": {
"user": "チャット",
"api": "API",
"cron": "自動タスク",
"dream": "メモリ整理",
"system": "システム"
}
},
"providers": {
"searchPlaceholder": "プロバイダーを検索",
"noMatches": "一致するプロバイダーはありません。",
@@ -427,6 +459,33 @@
"signInBeforeSaving": "この OAuth プロバイダーをアクティブなモデルプロバイダーとして保存する前にサインインしてください。",
"signedIn": "サインイン済み",
"notSignedIn": "未サインイン"
},
"skills": {
"description": "このエージェントが会話中に読み込める指示スキルを確認します。",
"caption": "{{available}} 利用可能 · 合計 {{total}}",
"featured": "エージェントスキル",
"empty": "利用可能なスキルはありません。",
"sourceWorkspace": "カスタム",
"sourceBuiltin": "組み込み",
"statusAvailable": "利用可能",
"statusUnavailable": "利用不可",
"unavailableReason": "不足: {{reason}}",
"openDetails": "{{name}} の詳細を開く",
"loadingDetail": "スキル詳細を読み込み中...",
"loadFailed": "スキル詳細を読み込めませんでした。",
"descriptionTitle": "説明",
"source": "ソース",
"status": "状態",
"requirements": "要件",
"noRequirements": "明示的な要件はありません。",
"commands": "コマンド",
"environment": "環境変数",
"missingCommands": "CLI 不足",
"missingEnvironment": "ENV 不足",
"unavailableReasonLabel": "利用不可の理由",
"rawInstructions": "元の SKILL.md",
"rawInstructionsEmpty": "元の説明はありません。",
"detailDescription": "{{name}} の詳細。"
}
},
"chat": {
@@ -548,7 +607,30 @@
"toggleSidebar": "サイドバーを切り替える",
"newChat": "新しいチャットを開始",
"toggleTheme": "ヘッダーからテーマを切り替える",
"settings": "設定を開く"
"settings": "設定を開く",
"sessionInfo": "セッション詳細"
},
"sessionInfo": {
"title": "セッション",
"untitled": "無題のチャット",
"automations": "自動タスク",
"count": "{{count}}",
"loading": "自動タスクを読み込み中...",
"loadFailed": "自動タスクを読み込めませんでした。",
"empty": "このセッションにはまだ自動タスクがありません。",
"disabled": "オフ",
"schedule": {
"at": "{{time}}",
"every": "{{duration}}ごと",
"cron": "Cron {{expr}}",
"cronWithTz": "Cron {{expr}} · {{tz}}",
"unknown": "カスタムスケジュール"
},
"next": {
"label": "次回 {{time}}",
"disabled": "一時停止",
"none": "次回実行なし"
}
},
"composer": {
"placeholderThread": "メッセージを入力…",
@@ -565,6 +647,8 @@
"goalStateCloseAria": "目標を閉じる",
"send": "メッセージを送信",
"stop": "応答を停止",
"modelNotConfigured": "モデルが未設定です",
"configureModel": "モデルを設定",
"queued": {
"label": "保留中のガイド",
"guide": "ガイド",
@@ -691,7 +775,14 @@
}
},
"scrollToBottom": "一番下へスクロール",
"loadEarlier": "以前のメッセージを読み込む"
"loadEarlier": "以前のメッセージを読み込む",
"promptNavigator": {
"open": "プロンプトナビゲーターを開く",
"title": "プロンプト",
"search": "プロンプトを検索",
"noResults": "一致するプロンプトがありません。",
"jumpTo": "プロンプトへ移動: {{label}}"
}
},
"message": {
"streaming": "生成中",
@@ -724,7 +815,9 @@
"cliActivityFailedMany": "{{count}} 個の CLI アプリが失敗しました",
"cliRunRunning": "使用中",
"cliRunRan": "使用済み",
"cliRunFailed": "失敗"
"cliRunFailed": "失敗",
"automationSourceFallback": "自動化",
"automationTriggered": "自動実行"
},
"lightbox": {
"title": "画像プレビュー",
@@ -733,6 +826,15 @@
"next": "次の画像",
"close": "プレビューを閉じる"
},
"filePreview": {
"aria": "ファイルプレビュー",
"close": "ファイルプレビューを閉じる",
"loading": "プレビューを読み込み中...",
"failed": "このファイルをプレビューできませんでした。",
"routeMissing": "ファイルプレビューには最新の gateway が必要です。nanobot gateway を再起動してから再試行してください。",
"resize": "ファイルプレビューの幅を変更",
"truncated": "ファイルが大きいため、プレビューは途中まで表示されています。"
},
"code": {
"fallbackLanguage": "コード",
"copyAria": "コードをコピー",
+107 -5
View File
@@ -54,7 +54,10 @@
"label": "언어",
"ariaLabel": "언어 변경"
},
"apps": "앱"
"apps": "앱",
"skills": {
"title": "스킬"
}
},
"settings": {
"backToChat": "채팅으로 돌아가기",
@@ -75,7 +78,8 @@
"advanced": "보안",
"cliApps": "CLI 앱",
"mcp": "MCP",
"apps": "앱"
"apps": "앱",
"skills": "스킬"
},
"sections": {
"interface": "인터페이스",
@@ -187,6 +191,9 @@
"disabled": "비활성화됨",
"restartPending": "재시작 대기",
"ready": "준비됨",
"privateEngine": "비공개 엔진",
"unixSocket": "Unix 소켓",
"defaultWorkspace": "기본 작업 공간",
"comfortable": "편안함",
"compact": "컴팩트",
"auto": "자동",
@@ -278,6 +285,31 @@
"imageGeneration": "이미지 생성",
"workspace": "작업공간"
},
"usage": {
"title": "Token 활동",
"shortTitle": "Token Usage",
"subtitle": "최근 12개월 동안 제공자가 보고한 사용량입니다.",
"empty": "새 모델 응답 이후 token 활동이 표시됩니다.",
"totalTokens": "누적 Token 수",
"peakTokens": "최고 Token 수",
"thirtyDayTokens": "30일 Token 수",
"currentStreak": "현재 연속 일수",
"longestStreak": "최장 연속 일수",
"daysValue": "{{count}}일",
"last30": "30일",
"activeDays": "활성 일수",
"requests": "요청",
"estimated": "추정",
"includesEstimates": "추정 포함",
"cellTitle": "{{date}}: {{tokens}} tokens, 요청 {{requests}}회",
"sources": {
"user": "채팅",
"api": "API",
"cron": "자동화",
"dream": "메모리 정리",
"system": "시스템"
}
},
"providers": {
"searchPlaceholder": "제공자 검색",
"noMatches": "일치하는 제공자가 없습니다.",
@@ -427,6 +459,33 @@
"signInBeforeSaving": "이 OAuth 제공자를 활성 모델 제공자로 저장하기 전에 로그인하세요.",
"signedIn": "로그인됨",
"notSignedIn": "로그인 안 됨"
},
"skills": {
"description": "이 에이전트가 대화 중에 불러올 수 있는 지시 스킬을 확인합니다.",
"caption": "{{available}}개 사용 가능 · 총 {{total}}개",
"featured": "에이전트 스킬",
"empty": "사용 가능한 스킬이 없습니다.",
"sourceWorkspace": "사용자 지정",
"sourceBuiltin": "내장",
"statusAvailable": "사용 가능",
"statusUnavailable": "사용 불가",
"unavailableReason": "누락: {{reason}}",
"openDetails": "{{name}} 상세 열기",
"loadingDetail": "스킬 상세를 불러오는 중...",
"loadFailed": "스킬 상세를 불러올 수 없습니다.",
"descriptionTitle": "설명",
"source": "출처",
"status": "상태",
"requirements": "요구 사항",
"noRequirements": "명시된 요구 사항이 없습니다.",
"commands": "명령",
"environment": "환경 변수",
"missingCommands": "CLI 누락",
"missingEnvironment": "ENV 누락",
"unavailableReasonLabel": "사용 불가 이유",
"rawInstructions": "원본 SKILL.md",
"rawInstructionsEmpty": "원본 지침이 없습니다.",
"detailDescription": "{{name}} 세부 정보."
}
},
"chat": {
@@ -548,7 +607,30 @@
"toggleSidebar": "사이드바 전환",
"newChat": "새 채팅 시작",
"toggleTheme": "헤더에서 테마 전환",
"settings": "설정 열기"
"settings": "설정 열기",
"sessionInfo": "세션 세부 정보"
},
"sessionInfo": {
"title": "세션",
"untitled": "제목 없는 채팅",
"automations": "자동화",
"count": "{{count}}",
"loading": "자동화를 불러오는 중...",
"loadFailed": "자동화를 불러오지 못했습니다.",
"empty": "이 세션에는 아직 자동화가 없습니다.",
"disabled": "꺼짐",
"schedule": {
"at": "{{time}}",
"every": "{{duration}}마다",
"cron": "Cron {{expr}}",
"cronWithTz": "Cron {{expr}} · {{tz}}",
"unknown": "사용자 지정 일정"
},
"next": {
"label": "다음 {{time}}",
"disabled": "일시 중지됨",
"none": "다음 실행 없음"
}
},
"composer": {
"placeholderThread": "메시지를 입력하세요…",
@@ -565,6 +647,8 @@
"goalStateCloseAria": "목표 닫기",
"send": "메시지 보내기",
"stop": "응답 중지",
"modelNotConfigured": "모델이 설정되지 않음",
"configureModel": "모델 설정",
"queued": {
"label": "대기 중인 안내",
"guide": "안내",
@@ -691,7 +775,14 @@
}
},
"scrollToBottom": "맨 아래로 스크롤",
"loadEarlier": "이전 메시지 불러오기"
"loadEarlier": "이전 메시지 불러오기",
"promptNavigator": {
"open": "프롬프트 탐색기 열기",
"title": "프롬프트",
"search": "프롬프트 검색",
"noResults": "일치하는 프롬프트가 없습니다.",
"jumpTo": "프롬프트로 이동: {{label}}"
}
},
"message": {
"streaming": "생성 중",
@@ -724,7 +815,9 @@
"cliActivityFailedMany": "CLI 앱 {{count}}개 실패",
"cliRunRunning": "사용 중",
"cliRunRan": "사용함",
"cliRunFailed": "실패"
"cliRunFailed": "실패",
"automationSourceFallback": "자동화",
"automationTriggered": "자동 실행됨"
},
"lightbox": {
"title": "이미지 미리보기",
@@ -733,6 +826,15 @@
"next": "다음 이미지",
"close": "미리보기 닫기"
},
"filePreview": {
"aria": "파일 미리보기",
"close": "파일 미리보기 닫기",
"loading": "미리보기 로딩 중...",
"failed": "이 파일을 미리 볼 수 없습니다.",
"routeMissing": "파일 미리보기에는 최신 gateway가 필요합니다. nanobot gateway를 다시 시작한 뒤 다시 시도하세요.",
"resize": "파일 미리보기 크기 조절",
"truncated": "파일이 커서 미리보기가 잘렸습니다."
},
"code": {
"fallbackLanguage": "코드",
"copyAria": "코드 복사",
+107 -5
View File
@@ -54,7 +54,10 @@
"label": "Ngôn ngữ",
"ariaLabel": "Đổi ngôn ngữ"
},
"apps": "Ứng dụng"
"apps": "Ứng dụng",
"skills": {
"title": "Kỹ năng"
}
},
"settings": {
"backToChat": "Quay lại chat",
@@ -75,7 +78,8 @@
"advanced": "Bảo mật",
"cliApps": "Ứng dụng CLI",
"mcp": "MCP",
"apps": "Ứng dụng"
"apps": "Ứng dụng",
"skills": "Kỹ năng"
},
"sections": {
"interface": "Giao diện",
@@ -187,6 +191,9 @@
"disabled": "Đã tắt",
"restartPending": "Chờ khởi động lại",
"ready": "Sẵn sàng",
"privateEngine": "Bộ máy riêng",
"unixSocket": "Socket Unix",
"defaultWorkspace": "Workspace mặc định",
"comfortable": "Thoải mái",
"compact": "Gọn",
"auto": "Tự động",
@@ -278,6 +285,31 @@
"imageGeneration": "Tạo hình ảnh",
"workspace": "Không gian làm việc"
},
"usage": {
"title": "Hoạt động token",
"shortTitle": "Token Usage",
"subtitle": "Mức dùng do nhà cung cấp báo cáo trong 12 tháng gần nhất.",
"empty": "Hoạt động token sẽ xuất hiện sau các phản hồi mô hình mới.",
"totalTokens": "Tổng token",
"peakTokens": "Đỉnh token",
"thirtyDayTokens": "Token 30 ngày",
"currentStreak": "Chuỗi hiện tại",
"longestStreak": "Chuỗi dài nhất",
"daysValue": "{{count}} ngày",
"last30": "30 ngày",
"activeDays": "Ngày hoạt động",
"requests": "Yêu cầu",
"estimated": "ước tính",
"includesEstimates": "bao gồm ước tính",
"cellTitle": "{{date}}: {{tokens}} tokens, {{requests}} yêu cầu",
"sources": {
"user": "Trò chuyện",
"api": "API",
"cron": "Tự động hóa",
"dream": "Bộ nhớ",
"system": "Hệ thống"
}
},
"providers": {
"searchPlaceholder": "Tìm nhà cung cấp",
"noMatches": "Không có nhà cung cấp phù hợp.",
@@ -427,6 +459,33 @@
"signInBeforeSaving": "Inicia sesión antes de guardar este proveedor OAuth como proveedor activo.",
"signedIn": "Đã đăng nhập",
"notSignedIn": "Chưa đăng nhập"
},
"skills": {
"description": "Xem các kỹ năng chỉ dẫn mà agent này có thể tải trong cuộc trò chuyện.",
"caption": "{{available}} khả dụng · tổng {{total}}",
"featured": "Kỹ năng agent",
"empty": "Không có kỹ năng nào khả dụng.",
"sourceWorkspace": "Tùy chỉnh",
"sourceBuiltin": "Tích hợp",
"statusAvailable": "Khả dụng",
"statusUnavailable": "Không khả dụng",
"unavailableReason": "Thiếu: {{reason}}",
"openDetails": "Mở chi tiết {{name}}",
"loadingDetail": "Đang tải chi tiết kỹ năng...",
"loadFailed": "Không tải được chi tiết kỹ năng.",
"descriptionTitle": "Mô tả",
"source": "Nguồn",
"status": "Trạng thái",
"requirements": "Yêu cầu",
"noRequirements": "Không có yêu cầu rõ ràng.",
"commands": "Lệnh",
"environment": "Biến môi trường",
"missingCommands": "Thiếu CLI",
"missingEnvironment": "Thiếu ENV",
"unavailableReasonLabel": "Lý do không khả dụng",
"rawInstructions": "SKILL.md gốc",
"rawInstructionsEmpty": "Không có hướng dẫn gốc.",
"detailDescription": "Chi tiết cho {{name}}."
}
},
"chat": {
@@ -548,7 +607,30 @@
"toggleSidebar": "Bật/tắt thanh bên",
"newChat": "Bắt đầu chat mới",
"toggleTheme": "Chuyển chủ đề từ header",
"settings": "Mở cài đặt"
"settings": "Mở cài đặt",
"sessionInfo": "Chi tiết phiên"
},
"sessionInfo": {
"title": "Phiên",
"untitled": "Chat chưa đặt tên",
"automations": "Tự động hóa",
"count": "{{count}}",
"loading": "Đang tải tự động hóa...",
"loadFailed": "Không thể tải tự động hóa.",
"empty": "Phiên này chưa có tự động hóa.",
"disabled": "Tắt",
"schedule": {
"at": "Lúc {{time}}",
"every": "Mỗi {{duration}}",
"cron": "Cron {{expr}}",
"cronWithTz": "Cron {{expr}} · {{tz}}",
"unknown": "Lịch tùy chỉnh"
},
"next": {
"label": "Tiếp theo {{time}}",
"disabled": "Đã tạm dừng",
"none": "Không có lần chạy tiếp theo"
}
},
"composer": {
"placeholderThread": "Nhập tin nhắn…",
@@ -565,6 +647,8 @@
"goalStateCloseAria": "Đóng mục tiêu",
"send": "Gửi tin nhắn",
"stop": "Dừng phản hồi",
"modelNotConfigured": "Chưa cấu hình mô hình",
"configureModel": "Cấu hình mô hình",
"queued": {
"label": "Hướng dẫn đang chờ",
"guide": "Hướng dẫn",
@@ -691,7 +775,14 @@
}
},
"scrollToBottom": "Cuộn xuống cuối",
"loadEarlier": "Tải tin nhắn trước đó"
"loadEarlier": "Tải tin nhắn trước đó",
"promptNavigator": {
"open": "Mở trình điều hướng prompt",
"title": "Prompt",
"search": "Tìm prompt",
"noResults": "Không có prompt phù hợp.",
"jumpTo": "Nhảy tới prompt: {{label}}"
}
},
"message": {
"streaming": "đang truyền",
@@ -724,7 +815,9 @@
"cliActivityFailedMany": "{{count}} ứng dụng CLI thất bại",
"cliRunRunning": "Đang dùng",
"cliRunRan": "Đã dùng",
"cliRunFailed": "Thất bại"
"cliRunFailed": "Thất bại",
"automationSourceFallback": "Tự động hóa",
"automationTriggered": "Tự động kích hoạt"
},
"lightbox": {
"title": "Xem trước ảnh",
@@ -733,6 +826,15 @@
"next": "Ảnh tiếp theo",
"close": "Đóng xem trước"
},
"filePreview": {
"aria": "Xem trước tệp",
"close": "Đóng xem trước tệp",
"loading": "Đang tải bản xem trước...",
"failed": "Không thể xem trước tệp này.",
"routeMissing": "Xem trước tệp cần gateway mới nhất. Hãy khởi động lại nanobot gateway rồi thử lại.",
"resize": "Đổi kích thước bản xem trước tệp",
"truncated": "Bản xem trước bị cắt vì tệp này lớn."
},
"code": {
"fallbackLanguage": "mã",
"copyAria": "Sao chép mã",
+106 -4
View File
@@ -54,7 +54,10 @@
"label": "语言",
"ariaLabel": "切换语言"
},
"apps": "应用"
"apps": "应用",
"skills": {
"title": "技能"
}
},
"settings": {
"backToChat": "返回聊天",
@@ -75,7 +78,8 @@
"mcp": "MCP",
"runtime": "系统",
"advanced": "安全",
"apps": "应用"
"apps": "应用",
"skills": "技能"
},
"sections": {
"interface": "界面",
@@ -295,6 +299,9 @@
"disabled": "已禁用",
"restartPending": "等待重启",
"ready": "就绪",
"privateEngine": "私有引擎",
"unixSocket": "Unix socket",
"defaultWorkspace": "默认工作区",
"comfortable": "舒适",
"compact": "紧凑",
"auto": "自动",
@@ -386,6 +393,31 @@
"imageGeneration": "图片生成",
"workspace": "工作区"
},
"usage": {
"title": "Token 活动",
"shortTitle": "Token Usage",
"subtitle": "最近 12 个月由提供商上报的 token 用量。",
"empty": "新的模型回复产生后,这里会显示 token 活动。",
"totalTokens": "累计 Token 数",
"peakTokens": "峰值 Token 数",
"thirtyDayTokens": "30 天 Token 数",
"currentStreak": "当前连续天数",
"longestStreak": "最长连续天数",
"daysValue": "{{count}} 天",
"last30": "30 天",
"activeDays": "活跃天数",
"requests": "请求数",
"estimated": "估算",
"includesEstimates": "包含估算",
"cellTitle": "{{date}}{{tokens}} tokens{{requests}} 次请求",
"sources": {
"user": "对话",
"api": "API",
"cron": "自动任务",
"dream": "记忆整理",
"system": "系统"
}
},
"providers": {
"searchPlaceholder": "搜索提供商",
"noMatches": "没有匹配的提供商。",
@@ -427,6 +459,33 @@
"signInBeforeSaving": "将此 OAuth 提供商设为当前模型提供商前,请先登录。",
"signedIn": "已登录",
"notSignedIn": "未登录"
},
"skills": {
"description": "查看此 agent 在对话中可以加载的指令技能。",
"caption": "{{available}} 个可用 · 共 {{total}} 个",
"featured": "Agent 技能",
"empty": "暂无可用技能。",
"sourceWorkspace": "自定义",
"sourceBuiltin": "内置",
"statusAvailable": "可用",
"statusUnavailable": "不可用",
"unavailableReason": "缺少:{{reason}}",
"openDetails": "查看 {{name}} 详情",
"loadingDetail": "正在加载技能详情...",
"loadFailed": "无法加载技能详情。",
"descriptionTitle": "完整描述",
"source": "来源",
"status": "状态",
"requirements": "需求",
"noRequirements": "没有显式需求。",
"commands": "命令",
"environment": "环境变量",
"missingCommands": "缺 CLI",
"missingEnvironment": "缺 ENV",
"unavailableReasonLabel": "不可用原因",
"rawInstructions": "原始 SKILL.md",
"rawInstructionsEmpty": "没有原始说明。",
"detailDescription": "{{name}} 的详情。"
}
},
"chat": {
@@ -548,7 +607,30 @@
"toggleSidebar": "切换侧边栏",
"newChat": "从顶部新建对话",
"toggleTheme": "从顶部切换主题",
"settings": "打开设置"
"settings": "打开设置",
"sessionInfo": "会话详情"
},
"sessionInfo": {
"title": "会话",
"untitled": "未命名对话",
"automations": "自动任务",
"count": "{{count}}",
"loading": "正在加载自动任务...",
"loadFailed": "无法加载自动任务。",
"empty": "这个会话暂时没有自动任务。",
"disabled": "已关闭",
"schedule": {
"at": "{{time}}",
"every": "每 {{duration}}",
"cron": "Cron {{expr}}",
"cronWithTz": "Cron {{expr}} · {{tz}}",
"unknown": "自定义计划"
},
"next": {
"label": "下次 {{time}}",
"disabled": "已暂停",
"none": "没有下次运行"
}
},
"composer": {
"placeholderThread": "输入消息…",
@@ -564,6 +646,8 @@
"goalStateSheetTitle": "目标",
"send": "发送消息",
"stop": "停止响应",
"modelNotConfigured": "模型未配置",
"configureModel": "配置模型",
"queued": {
"label": "待引导提示",
"guide": "引导",
@@ -691,7 +775,14 @@
}
},
"scrollToBottom": "滚动到底部",
"loadEarlier": "加载更早消息"
"loadEarlier": "加载更早消息",
"promptNavigator": {
"open": "打开输入导航",
"title": "输入列表",
"search": "搜索输入",
"noResults": "没有匹配的输入。",
"jumpTo": "跳转到输入:{{label}}"
}
},
"message": {
"streaming": "流式输出中",
@@ -722,6 +813,8 @@
"cliRunRan": "已使用",
"cliRunFailed": "失败",
"imageAttachment": "图片附件",
"automationSourceFallback": "自动化",
"automationTriggered": "自动触发",
"copyReply": "复制回复",
"copiedReply": "已复制回复",
"turnLatencyTitle": "本轮耗时(端到端)"
@@ -733,6 +826,15 @@
"next": "下一张",
"close": "关闭预览"
},
"filePreview": {
"aria": "文件预览",
"close": "关闭文件预览",
"loading": "正在加载预览...",
"failed": "无法预览这个文件。",
"routeMissing": "文件预览需要最新的 gateway。请重启 nanobot gateway 后再试。",
"resize": "调整文件预览宽度",
"truncated": "文件较大,当前只显示前半部分预览。"
},
"code": {
"fallbackLanguage": "代码",
"copyAria": "复制代码",
+107 -5
View File
@@ -54,7 +54,10 @@
"label": "語言",
"ariaLabel": "切換語言"
},
"apps": "應用"
"apps": "應用",
"skills": {
"title": "技能"
}
},
"settings": {
"backToChat": "返回聊天",
@@ -75,7 +78,8 @@
"advanced": "安全",
"cliApps": "CLI 應用",
"mcp": "MCP",
"apps": "應用"
"apps": "應用",
"skills": "技能"
},
"sections": {
"interface": "介面",
@@ -187,6 +191,9 @@
"disabled": "已停用",
"restartPending": "等待重啟",
"ready": "就緒",
"privateEngine": "私有引擎",
"unixSocket": "Unix socket",
"defaultWorkspace": "預設工作區",
"comfortable": "舒適",
"compact": "緊湊",
"auto": "自動",
@@ -278,6 +285,31 @@
"imageGeneration": "圖片生成",
"workspace": "工作區"
},
"usage": {
"title": "Token 活動",
"shortTitle": "Token Usage",
"subtitle": "最近 12 個月由供應商回報的 token 用量。",
"empty": "新的模型回覆產生後,這裡會顯示 token 活動。",
"totalTokens": "累計 Token 數",
"peakTokens": "峰值 Token 數",
"thirtyDayTokens": "30 天 Token 數",
"currentStreak": "目前連續天數",
"longestStreak": "最長連續天數",
"daysValue": "{{count}} 天",
"last30": "30 天",
"activeDays": "活躍天數",
"requests": "請求數",
"estimated": "估算",
"includesEstimates": "包含估算",
"cellTitle": "{{date}}{{tokens}} tokens{{requests}} 次請求",
"sources": {
"user": "對話",
"api": "API",
"cron": "自動任務",
"dream": "記憶整理",
"system": "系統"
}
},
"providers": {
"searchPlaceholder": "搜尋供應商",
"noMatches": "沒有符合的供應商。",
@@ -427,6 +459,33 @@
"signInBeforeSaving": "將此 OAuth 供應商設為目前模型供應商前,請先登入。",
"signedIn": "已登入",
"notSignedIn": "未登入"
},
"skills": {
"description": "查看此 agent 在對話中可以載入的指令技能。",
"caption": "{{available}} 個可用 · 共 {{total}} 個",
"featured": "Agent 技能",
"empty": "暫無可用技能。",
"sourceWorkspace": "自訂",
"sourceBuiltin": "內建",
"statusAvailable": "可用",
"statusUnavailable": "不可用",
"unavailableReason": "缺少:{{reason}}",
"openDetails": "查看 {{name}} 詳情",
"loadingDetail": "正在載入技能詳情...",
"loadFailed": "無法載入技能詳情。",
"descriptionTitle": "完整描述",
"source": "來源",
"status": "狀態",
"requirements": "需求",
"noRequirements": "沒有明確需求。",
"commands": "命令",
"environment": "環境變數",
"missingCommands": "缺 CLI",
"missingEnvironment": "缺 ENV",
"unavailableReasonLabel": "不可用原因",
"rawInstructions": "原始 SKILL.md",
"rawInstructionsEmpty": "沒有原始說明。",
"detailDescription": "{{name}} 的詳細資訊。"
}
},
"chat": {
@@ -548,7 +607,30 @@
"toggleSidebar": "切換側邊欄",
"newChat": "開始新對話",
"toggleTheme": "從頂部切換主題",
"settings": "開啟設定"
"settings": "開啟設定",
"sessionInfo": "會話詳情"
},
"sessionInfo": {
"title": "會話",
"untitled": "未命名對話",
"automations": "自動任務",
"count": "{{count}}",
"loading": "正在載入自動任務...",
"loadFailed": "無法載入自動任務。",
"empty": "這個會話暫時沒有自動任務。",
"disabled": "已關閉",
"schedule": {
"at": "{{time}}",
"every": "每 {{duration}}",
"cron": "Cron {{expr}}",
"cronWithTz": "Cron {{expr}} · {{tz}}",
"unknown": "自訂計畫"
},
"next": {
"label": "下次 {{time}}",
"disabled": "已暫停",
"none": "沒有下次執行"
}
},
"composer": {
"placeholderThread": "輸入訊息…",
@@ -565,6 +647,8 @@
"goalStateCloseAria": "關閉目標",
"send": "送出訊息",
"stop": "停止回覆",
"modelNotConfigured": "模型未配置",
"configureModel": "配置模型",
"queued": {
"label": "待引導提示",
"guide": "引導",
@@ -691,7 +775,14 @@
}
},
"scrollToBottom": "捲動到底部",
"loadEarlier": "載入更早訊息"
"loadEarlier": "載入更早訊息",
"promptNavigator": {
"open": "開啟輸入導覽",
"title": "輸入列表",
"search": "搜尋輸入",
"noResults": "沒有符合的輸入。",
"jumpTo": "跳到輸入:{{label}}"
}
},
"message": {
"streaming": "串流輸出中",
@@ -724,7 +815,9 @@
"cliActivityFailedMany": "{{count}} 個 CLI 應用失敗",
"cliRunRunning": "使用中",
"cliRunRan": "已使用",
"cliRunFailed": "失敗"
"cliRunFailed": "失敗",
"automationSourceFallback": "自動化",
"automationTriggered": "自動觸發"
},
"lightbox": {
"title": "圖片預覽",
@@ -733,6 +826,15 @@
"next": "下一張",
"close": "關閉預覽"
},
"filePreview": {
"aria": "檔案預覽",
"close": "關閉檔案預覽",
"loading": "正在載入預覽...",
"failed": "無法預覽這個檔案。",
"routeMissing": "檔案預覽需要最新的 gateway。請重啟 nanobot gateway 後再試。",
"resize": "調整檔案預覽寬度",
"truncated": "檔案較大,目前只顯示前半部分預覽。"
},
"code": {
"fallbackLanguage": "程式碼",
"copyAria": "複製程式碼",