fix: localize ai workspace copy

This commit is contained in:
lucaronin
2026-05-30 04:19:51 +02:00
parent cba038766c
commit 0cdf758f7d
23 changed files with 245 additions and 74 deletions

View File

@@ -317,6 +317,8 @@ files:
ai.message.regenerate: e464a5330788a9f79d06c96989f840cb
ai.message.copy: 53fa249ce3d02c8a686b657b31d02ee7
ai.message.fork: f5aace5e5b5e7b0954651a2da44b6755
ai.message.reasoning: 87a222577e9c7b7a0739d92337f4fe46
ai.message.toolUse: d6093cfe0c95f805875e5724eecd20aa
ai.workspace.title: 375099f0c804e924c1dc275370710d92
ai.workspace.newChat: a917baaf1484ec5dc85f19ab8fc4f4e9
ai.workspace.collapseSidebar: 9ecc763686b7c61547281f3e05ffd06f
@@ -358,6 +360,10 @@ files:
ai.workspace.target.installedVersion: 8677756d761e4cce240a637805482946
ai.workspace.target.localModel: d34f4b997ce78da5aa57d657a5d6fcb5
ai.workspace.target.apiModel: 589a257cbd265eaa7de93de8b4084dff
window.minimize: d27532d90ecd513e97ab811c0f34dbfd
window.maximize: 9369ba148ee259473fc1fb4939b6c2e8
window.restore: 2bd339d85ee3b33e513359ce781b60cc
window.close: d3d2e617335f08df83599665eef8a418
mcp.setup.manageTitle: d786c7b9ab9b2406258648931bca0e01
mcp.setup.setupTitle: b4b373f690c8a0008885b31e78e93a5c
mcp.setup.connectedDescription: a2a3be70c0ac9fa7ef112df5252249fa

View File

@@ -38,6 +38,21 @@ describe('AiMessage', () => {
expect(screen.getByRole('button', { name: 'Fork chat from here' })).toBeTruthy()
})
it('localizes reasoning and tool use chrome', () => {
render(
<AiMessage
userMessage="Fai qualcosa"
locale="it-IT"
reasoning="Sto pensando..."
reasoningDone
actions={[{ tool: 'search_notes', toolId: 't1', label: 'Cercato', status: 'done' }]}
/>,
)
expect(screen.getByRole('button', { name: /ragionamento/i })).toBeTruthy()
expect(screen.getByRole('button', { name: /uso degli strumenti/i })).toBeTruthy()
})
it('shows reasoning expanded while streaming (reasoningDone=false)', () => {
render(<AiMessage userMessage="Ask" reasoning="Thinking about it..." reasoningDone={false} actions={[]} />)
expect(screen.getByTestId('reasoning-toggle')).toBeTruthy()

View File

@@ -106,8 +106,8 @@ function UserBubble({ content, references, onOpenNote }: {
)
}
function ReasoningBlock({ text, expanded, onToggle }: {
text: string; expanded: boolean; onToggle: () => void
function ReasoningBlock({ locale, text, expanded, onToggle }: {
locale: AppLocale; text: string; expanded: boolean; onToggle: () => void
}) {
const contentRef = useRef<HTMLDivElement>(null)
@@ -127,7 +127,7 @@ function ReasoningBlock({ text, expanded, onToggle }: {
data-testid="reasoning-toggle"
>
<Brain size={14} />
<span>Reasoning</span>
<span>{translate(locale, 'ai.message.reasoning')}</span>
{expanded ? <CaretDown size={12} /> : <CaretRight size={12} />}
</button>
{expanded && (
@@ -174,6 +174,7 @@ function ToolUseBlock({
actions,
expanded,
expandedActionIds,
locale,
onOpenNote,
onToggle,
onToggleAction,
@@ -181,6 +182,7 @@ function ToolUseBlock({
actions: AiAction[]
expanded: boolean
expandedActionIds: Set<string>
locale: AppLocale
onOpenNote?: (path: string) => void
onToggle: () => void
onToggleAction: (toolId: string) => void
@@ -198,7 +200,7 @@ function ToolUseBlock({
data-testid="tool-use-toggle"
>
<Terminal size={14} />
<span>Tool use</span>
<span>{translate(locale, 'ai.message.toolUse')}</span>
<span
className={`inline-flex h-4 min-w-4 items-center justify-center rounded-full ${pending ? 'animate-pulse' : ''}`}
style={{
@@ -372,6 +374,7 @@ function ConversationMessage({ userMessage, references, locale = 'en', messageId
<UserBubble content={userMessage} references={references} onOpenNote={onOpenNote} />
{reasoning && (
<ReasoningBlock
locale={locale}
text={reasoning}
expanded={reasoningExpanded}
onToggle={() => setUserOverride(prev => !prev)}
@@ -382,6 +385,7 @@ function ConversationMessage({ userMessage, references, locale = 'en', messageId
actions={actions}
expanded={toolUseExpanded}
expandedActionIds={expandedActions}
locale={locale}
onOpenNote={onOpenNote}
onToggle={() => setToolUseExpanded((current) => !current)}
onToggleAction={toggleAction}

View File

@@ -79,4 +79,12 @@ describe('LinuxTitlebar', () => {
expect(toggleMaximize).toHaveBeenCalledOnce()
expect(close).toHaveBeenCalledOnce()
})
it('localizes titlebar window control labels', () => {
render(<LinuxTitlebar locale="it-IT" />)
expect(screen.getByRole('button', { name: 'Riduci a icona' })).toBeTruthy()
expect(screen.getByRole('button', { name: 'Ingrandisci' })).toBeTruthy()
expect(screen.getByRole('button', { name: 'Chiudi' })).toBeTruthy()
})
})

View File

@@ -2,6 +2,7 @@ import type { CSSProperties, MouseEvent, ReactNode } from 'react'
import { useEffect, useState } from 'react'
import { getCurrentWindow } from '@tauri-apps/api/window'
import { useDragRegion } from '../hooks/useDragRegion'
import { resolveEffectiveLocale, translate, type AppLocale } from '../lib/i18n'
import { shouldUseCustomWindowChrome } from '../utils/platform'
import { cleanupTauriEventListener } from '../utils/tauriEventCleanup'
import { LinuxMenuButton } from './LinuxMenuButton'
@@ -21,6 +22,10 @@ type ResizeDirection =
| 'SouthWest'
| 'West'
type LinuxTitlebarProps = {
locale?: AppLocale
}
const RESIZE_HANDLES: ReadonlyArray<{
cursor: CSSProperties['cursor']
direction: ResizeDirection
@@ -36,11 +41,25 @@ const RESIZE_HANDLES: ReadonlyArray<{
{ direction: 'SouthEast', cursor: 'nwse-resize', style: { bottom: 0, right: 0, width: RESIZE_EDGE, height: RESIZE_EDGE } },
]
export function LinuxTitlebar() {
export function LinuxTitlebar({ locale: localeOverride }: LinuxTitlebarProps = {}) {
const customChromeEnabled = shouldUseCustomWindowChrome()
const [documentLocale, setDocumentLocale] = useState(readDocumentLocale)
const locale = localeOverride ?? documentLocale
const { dragRegionRef } = useDragRegion<HTMLDivElement>()
const maximized = useLinuxMaximizedState(customChromeEnabled)
useEffect(() => {
if (localeOverride || !customChromeEnabled || typeof document === 'undefined') return
const syncLocale = () => setDocumentLocale(readDocumentLocale())
syncLocale()
const observer = new MutationObserver(syncLocale)
observer.observe(document.documentElement, { attributeFilter: ['lang'], attributes: true })
return () => observer.disconnect()
}, [customChromeEnabled, localeOverride])
if (!customChromeEnabled) return null
const appWindow = getCurrentWindow()
@@ -57,12 +76,17 @@ export function LinuxTitlebar() {
<div className="flex h-full items-center" data-no-drag>
<LinuxMenuButton />
</div>
<TitlebarWindowControls appWindow={appWindow} maximized={maximized} />
<TitlebarWindowControls appWindow={appWindow} locale={locale} maximized={maximized} />
</div>
</>
)
}
function readDocumentLocale(): AppLocale {
if (typeof document === 'undefined') return 'en'
return resolveEffectiveLocale(document.documentElement.lang)
}
function useLinuxMaximizedState(enabled: boolean): boolean {
const [maximized, setMaximized] = useState(false)
@@ -118,24 +142,30 @@ function ResizeHandles() {
function TitlebarWindowControls({
appWindow,
locale,
maximized,
}: {
appWindow: ReturnType<typeof getCurrentWindow>
locale: AppLocale
maximized: boolean
}) {
const minimizeLabel = translate(locale, 'window.minimize')
const resizeLabel = translate(locale, maximized ? 'window.restore' : 'window.maximize')
const closeLabel = translate(locale, 'window.close')
return (
<div className="flex h-full items-center" data-no-drag>
<TitlebarButton ariaLabel="Minimize" onClick={() => void appWindow.minimize().catch(() => {})}>
<TitlebarButton ariaLabel={minimizeLabel} onClick={() => void appWindow.minimize().catch(() => {})}>
<MinimizeIcon />
</TitlebarButton>
<TitlebarButton
ariaLabel={maximized ? 'Restore' : 'Maximize'}
ariaLabel={resizeLabel}
onClick={() => void appWindow.toggleMaximize().catch(() => {})}
>
{maximized ? <RestoreIcon /> : <MaximizeIcon />}
</TitlebarButton>
<TitlebarButton
ariaLabel="Close"
ariaLabel={closeLabel}
close
onClick={() => void appWindow.close().catch(() => {})}
>

View File

@@ -312,9 +312,11 @@
"ai.panel.placeholder.missing": "{agent} не ўсталяваны. Адкрыйце Налады.",
"ai.panel.placeholder.ready": "Запытаць {agent}",
"ai.panel.send": "Адправіць паведамленне",
"ai.message.regenerate": "Regenerate response",
"ai.message.copy": "Copy response",
"ai.message.fork": "Fork chat from here",
"ai.message.regenerate": "Згенераваць адказ нанова",
"ai.message.copy": "Скапіяваць адказ",
"ai.message.fork": "Адгалінаваць чат адсюль",
"ai.message.reasoning": "Аргументацыя",
"ai.message.toolUse": "Выкарыстанне інструментаў",
"ai.workspace.title": "Агенты",
"ai.workspace.newChat": "Новы чат",
"ai.workspace.collapseSidebar": "Згарнуць спіс чатаў са ШІ",
@@ -322,7 +324,7 @@
"ai.workspace.close": "Зачыніць працоўную прастору ШІ",
"ai.workspace.expandPanel": "Разгарнуць працоўную вобласць AI",
"ai.workspace.restorePanel": "Аднавіць панэль працоўнай прасторы ШІ",
"ai.workspace.restoreGuidance": "Restore",
"ai.workspace.restoreGuidance": "Аднавіць",
"ai.workspace.closeChat": "Зачыніць {title}",
"ai.workspace.popOut": "Адкрыць у асобным акне",
"ai.workspace.dock": "Закрыць працоўную прастору ШІ",
@@ -356,6 +358,10 @@
"ai.workspace.target.installedVersion": "Усталявана {version}",
"ai.workspace.target.localModel": "Лакальная мадэль",
"ai.workspace.target.apiModel": "Мадэль API",
"window.minimize": "Мінімізаваць",
"window.maximize": "Максімізаваць",
"window.restore": "Аднавіць",
"window.close": "Зачыніць",
"mcp.setup.manageTitle": "Кіраванне вонкавымі ШІ",
"mcp.setup.setupTitle": "Наладзіць вонкавыя ШІ",
"mcp.setup.connectedDescription": "Tolaria паспяхова злучана з вонкавымі ШІ інструментамі.",

View File

@@ -312,9 +312,11 @@
"ai.panel.placeholder.missing": "{agent} nie ŭstaliavany. Adkryjcie Nalady.",
"ai.panel.placeholder.ready": "Zapytać {agent}",
"ai.panel.send": "Adpravić paviedamliennie",
"ai.message.regenerate": "Regenerate response",
"ai.message.copy": "Copy response",
"ai.message.fork": "Fork chat from here",
"ai.message.regenerate": "Stvaryć adkaz nanova",
"ai.message.copy": "Skapijavać adkaz",
"ai.message.fork": "Adhalinavać čat adsiul",
"ai.message.reasoning": "Razvažannie",
"ai.message.toolUse": "Vykarystannie instrumientaŭ",
"ai.workspace.title": "ŠI prastora",
"ai.workspace.newChat": "Novy čat",
"ai.workspace.collapseSidebar": "Zharnuć spis čataŭ sa ŠI",
@@ -322,7 +324,7 @@
"ai.workspace.close": "Zakryć ŠI prastoru",
"ai.workspace.expandPanel": "Razhornuć ŠI prastoru",
"ai.workspace.restorePanel": "Adnavić panel ŠI prastory",
"ai.workspace.restoreGuidance": "Restore",
"ai.workspace.restoreGuidance": "Adnavić",
"ai.workspace.closeChat": "Zakryć {title}",
"ai.workspace.popOut": "Adkryć u asobnym aknie",
"ai.workspace.dock": "Prymacavać ŠI prastoru",
@@ -356,6 +358,10 @@
"ai.workspace.target.installedVersion": "Ustaliavana {version}",
"ai.workspace.target.localModel": "Lakaĺnaja madel",
"ai.workspace.target.apiModel": "API madel",
"window.minimize": "Minimizavać",
"window.maximize": "Maksimizavać",
"window.restore": "Adnavić",
"window.close": "Začynić",
"status.ai.openWorkspace": "Adkryć ŠI prastoru",
"mcp.setup.manageTitle": "Kiravannie vonkavymi ŠI",
"mcp.setup.setupTitle": "Naladzić vonkavyja ŠI",

View File

@@ -312,9 +312,11 @@
"ai.panel.placeholder.missing": "{agent} ist nicht installiert. Öffnen Sie „AI Agents“ in den Einstellungen.",
"ai.panel.placeholder.ready": "{agent} fragen",
"ai.panel.send": "Nachricht senden",
"ai.message.regenerate": "Regenerate response",
"ai.message.copy": "Copy response",
"ai.message.fork": "Fork chat from here",
"ai.message.regenerate": "Antwort erneut generieren",
"ai.message.copy": "Antwort kopieren",
"ai.message.fork": "Chat ab hier verzweigen",
"ai.message.reasoning": "Begründung",
"ai.message.toolUse": "Verwendung von Tools",
"ai.workspace.title": "Agenten",
"ai.workspace.newChat": "Neuer Chat",
"ai.workspace.collapseSidebar": "AI-Chat-Liste einklappen",
@@ -322,7 +324,7 @@
"ai.workspace.close": "AI-Workspace schließen",
"ai.workspace.expandPanel": "AI-Workspace erweitern",
"ai.workspace.restorePanel": "AI-Workspace-Panel wiederherstellen",
"ai.workspace.restoreGuidance": "Restore",
"ai.workspace.restoreGuidance": "Wiederherstellen",
"ai.workspace.closeChat": "{title} schließen",
"ai.workspace.popOut": "In einem separaten Fenster öffnen",
"ai.workspace.dock": "AI-Workspace andocken",
@@ -356,6 +358,10 @@
"ai.workspace.target.installedVersion": "{version} installiert",
"ai.workspace.target.localModel": "Lokales Modell",
"ai.workspace.target.apiModel": "API-Modell",
"window.minimize": "Minimieren",
"window.maximize": "Maximieren",
"window.restore": "Wiederherstellen",
"window.close": "Schließen",
"mcp.setup.manageTitle": "Externe KI-Tools verwalten",
"mcp.setup.setupTitle": "Externe KI-Tools einrichten",
"mcp.setup.connectedDescription": "Tolaria ist für diesen Vault bereits mit externen KI-Tools verbunden. Stellen Sie die Verbindung erneut her, um die Konfiguration zu aktualisieren, oder trennen Sie die Verbindung, um Tolaria aus diesen Konfigurationsdateien von Drittanbietern zu entfernen.",

View File

@@ -315,6 +315,8 @@
"ai.message.regenerate": "Regenerate response",
"ai.message.copy": "Copy response",
"ai.message.fork": "Fork chat from here",
"ai.message.reasoning": "Reasoning",
"ai.message.toolUse": "Tool use",
"ai.workspace.title": "Agents",
"ai.workspace.newChat": "New chat",
"ai.workspace.collapseSidebar": "Collapse AI chat list",
@@ -356,6 +358,10 @@
"ai.workspace.target.installedVersion": "Installed {version}",
"ai.workspace.target.localModel": "Local model",
"ai.workspace.target.apiModel": "API model",
"window.minimize": "Minimize",
"window.maximize": "Maximize",
"window.restore": "Restore",
"window.close": "Close",
"mcp.setup.manageTitle": "Manage External AI Tools",
"mcp.setup.setupTitle": "Set Up External AI Tools",
"mcp.setup.connectedDescription": "Tolaria is already connected to external AI tools for this vault. Reconnect to refresh the configuration, or disconnect to remove Tolaria from those third-party config files.",

View File

@@ -312,9 +312,11 @@
"ai.panel.placeholder.missing": "{agent} no está instalado. Abra Agentes de IA en Configuración.",
"ai.panel.placeholder.ready": "Preguntar a {agent}",
"ai.panel.send": "Enviar mensaje",
"ai.message.regenerate": "Regenerate response",
"ai.message.copy": "Copy response",
"ai.message.fork": "Fork chat from here",
"ai.message.regenerate": "Regenerar respuesta",
"ai.message.copy": "Copiar respuesta",
"ai.message.fork": "Bifurcar chat desde aquí",
"ai.message.reasoning": "Razonamiento",
"ai.message.toolUse": "Uso de herramientas",
"ai.workspace.title": "Agentes",
"ai.workspace.newChat": "Nuevo chat",
"ai.workspace.collapseSidebar": "Contraer la lista de chat de IA",
@@ -322,7 +324,7 @@
"ai.workspace.close": "Cerrar el espacio de trabajo de IA",
"ai.workspace.expandPanel": "Expandir el espacio de trabajo de IA",
"ai.workspace.restorePanel": "Restaurar el panel del espacio de trabajo de IA",
"ai.workspace.restoreGuidance": "Restore",
"ai.workspace.restoreGuidance": "Restaurar",
"ai.workspace.closeChat": "Cerrar {title}",
"ai.workspace.popOut": "Abrir en una ventana separada",
"ai.workspace.dock": "Acoplar el espacio de trabajo de IA",
@@ -356,6 +358,10 @@
"ai.workspace.target.installedVersion": "{version} instalada",
"ai.workspace.target.localModel": "Modelo local",
"ai.workspace.target.apiModel": "Modelo de API",
"window.minimize": "Minimizar",
"window.maximize": "Maximizar",
"window.restore": "Restaurar",
"window.close": "Cerrar",
"mcp.setup.manageTitle": "Administrar herramientas de IA externas",
"mcp.setup.setupTitle": "Configurar herramientas de IA externas",
"mcp.setup.connectedDescription": "Tolaria ya está conectada a herramientas de IA externas para esta bóveda. Vuelva a conectarse para actualizar la configuración o desconéctese para eliminar Tolaria de esos archivos de configuración de terceros.",

View File

@@ -312,9 +312,11 @@
"ai.panel.placeholder.missing": "{agent} no está instalado. Abre Agentes de IA en Ajustes.",
"ai.panel.placeholder.ready": "Preguntar a {agent}",
"ai.panel.send": "Enviar mensaje",
"ai.message.regenerate": "Regenerate response",
"ai.message.copy": "Copy response",
"ai.message.fork": "Fork chat from here",
"ai.message.regenerate": "Regenerar respuesta",
"ai.message.copy": "Copiar respuesta",
"ai.message.fork": "Bifurcar chat desde aquí",
"ai.message.reasoning": "Razonamiento",
"ai.message.toolUse": "Uso de herramientas",
"ai.workspace.title": "Agentes",
"ai.workspace.newChat": "Nuevo chat",
"ai.workspace.collapseSidebar": "Contraer la lista de chat de IA",
@@ -322,7 +324,7 @@
"ai.workspace.close": "Cerrar el espacio de trabajo de IA",
"ai.workspace.expandPanel": "Expandir el espacio de trabajo de IA",
"ai.workspace.restorePanel": "Restaurar el panel del espacio de trabajo de IA",
"ai.workspace.restoreGuidance": "Restore",
"ai.workspace.restoreGuidance": "Restaurar",
"ai.workspace.closeChat": "Cerrar {title}",
"ai.workspace.popOut": "Abrir en una ventana separada",
"ai.workspace.dock": "Acoplar el espacio de trabajo de IA",
@@ -356,6 +358,10 @@
"ai.workspace.target.installedVersion": "{version} instalada",
"ai.workspace.target.localModel": "Modelo local",
"ai.workspace.target.apiModel": "Modelo de API",
"window.minimize": "Minimizar",
"window.maximize": "Maximizar",
"window.restore": "Restaurar",
"window.close": "Cerrar",
"mcp.setup.manageTitle": "Gestionar herramientas externas de IA",
"mcp.setup.setupTitle": "Configurar herramientas de IA externas",
"mcp.setup.connectedDescription": "Tolaria ya está conectada a herramientas de IA externas para este almacén. Vuelve a conectar Tolaria para actualizar la configuración o desconéctala para eliminarla de esos archivos de configuración de terceros.",

View File

@@ -312,9 +312,11 @@
"ai.panel.placeholder.missing": "{agent} n'est pas installé. Ouvrez Agents IA dans les Paramètres.",
"ai.panel.placeholder.ready": "Demander à {agent}",
"ai.panel.send": "Envoyer un message",
"ai.message.regenerate": "Regenerate response",
"ai.message.copy": "Copy response",
"ai.message.fork": "Fork chat from here",
"ai.message.regenerate": "Régénérer la réponse",
"ai.message.copy": "Copier la réponse",
"ai.message.fork": "Créer une branche du chat ici",
"ai.message.reasoning": "Raisonnement",
"ai.message.toolUse": "Utilisation de l'outil",
"ai.workspace.title": "Agents",
"ai.workspace.newChat": "Nouveau chat",
"ai.workspace.collapseSidebar": "Réduire la liste de chat IA",
@@ -322,7 +324,7 @@
"ai.workspace.close": "Fermer l'espace de travail IA",
"ai.workspace.expandPanel": "Développer l'espace de travail IA",
"ai.workspace.restorePanel": "Restaurer le panneau de l'espace de travail IA",
"ai.workspace.restoreGuidance": "Restore",
"ai.workspace.restoreGuidance": "Restaurer",
"ai.workspace.closeChat": "Fermer {title}",
"ai.workspace.popOut": "Ouvrir dans une fenêtre séparée",
"ai.workspace.dock": "Ancrer l'espace de travail IA",
@@ -356,6 +358,10 @@
"ai.workspace.target.installedVersion": "{version} installée",
"ai.workspace.target.localModel": "Modèle local",
"ai.workspace.target.apiModel": "Modèle API",
"window.minimize": "Réduire",
"window.maximize": "Agrandir",
"window.restore": "Restaurer",
"window.close": "Fermer",
"mcp.setup.manageTitle": "Gérer les outils d'IA externes",
"mcp.setup.setupTitle": "Configurer des outils d'IA externes",
"mcp.setup.connectedDescription": "Tolaria est déjà connectée à des outils d'IA externes pour ce coffre-fort. Reconnectez-vous pour actualiser la configuration, ou déconnectez-vous pour supprimer Tolaria de ces fichiers de configuration tiers.",

View File

@@ -314,7 +314,9 @@
"ai.panel.send": "Kirim pesan",
"ai.message.regenerate": "Buat ulang respons",
"ai.message.copy": "Salin respons",
"ai.message.fork": "Fork obrolan dari sini",
"ai.message.fork": "Cabangkan obrolan dari sini",
"ai.message.reasoning": "Penalaran",
"ai.message.toolUse": "Penggunaan alat",
"ai.workspace.title": "Agen",
"ai.workspace.newChat": "Obrolan baru",
"ai.workspace.collapseSidebar": "Ciutkan daftar obrolan AI",
@@ -356,6 +358,10 @@
"ai.workspace.target.installedVersion": "{version} terinstal",
"ai.workspace.target.localModel": "Model lokal",
"ai.workspace.target.apiModel": "Model API",
"window.minimize": "Minimalkan",
"window.maximize": "Perbesar",
"window.restore": "Pulihkan",
"window.close": "Tutup",
"mcp.setup.manageTitle": "Kelola Alat AI Eksternal",
"mcp.setup.setupTitle": "Siapkan Alat AI Eksternal",
"mcp.setup.connectedDescription": "Tolaria sudah terhubung ke alat AI eksternal untuk brankas ini. Hubungkan kembali untuk menyegarkan konfigurasi, atau putuskan sambungan untuk menghapus Tolaria dari file konfigurasi pihak ketiga tersebut.",

View File

@@ -312,9 +312,11 @@
"ai.panel.placeholder.missing": "{agent} non è installato. Apri Agenti IA in Impostazioni.",
"ai.panel.placeholder.ready": "Chiedi a {agent}",
"ai.panel.send": "Invia messaggio",
"ai.message.regenerate": "Regenerate response",
"ai.message.copy": "Copy response",
"ai.message.fork": "Fork chat from here",
"ai.message.regenerate": "Rigenera risposta",
"ai.message.copy": "Copia risposta",
"ai.message.fork": "Crea una chat derivata da qui",
"ai.message.reasoning": "Ragionamento",
"ai.message.toolUse": "Uso degli strumenti",
"ai.workspace.title": "Agenti",
"ai.workspace.newChat": "Nuova chat",
"ai.workspace.collapseSidebar": "Comprimi l'elenco delle chat con l'IA",
@@ -322,7 +324,7 @@
"ai.workspace.close": "Chiudi l'area di lavoro IA",
"ai.workspace.expandPanel": "Espandi l'area di lavoro AI",
"ai.workspace.restorePanel": "Ripristina il pannello AI workspace",
"ai.workspace.restoreGuidance": "Restore",
"ai.workspace.restoreGuidance": "Ripristina",
"ai.workspace.closeChat": "Chiudi {title}",
"ai.workspace.popOut": "Apri in una finestra separata",
"ai.workspace.dock": "Ancora l'area di lavoro IA",
@@ -356,6 +358,10 @@
"ai.workspace.target.installedVersion": "{version} installata",
"ai.workspace.target.localModel": "Modello locale",
"ai.workspace.target.apiModel": "Modello API",
"window.minimize": "Riduci a icona",
"window.maximize": "Ingrandisci",
"window.restore": "Ripristina",
"window.close": "Chiudi",
"mcp.setup.manageTitle": "Gestisci strumenti di IA esterni",
"mcp.setup.setupTitle": "Configura strumenti di IA esterni",
"mcp.setup.connectedDescription": "Tolaria è già connessa a strumenti di IA esterni per questo vault. Riconnetti per aggiornare la configurazione o disconnetti per rimuovere Tolaria da quei file di configurazione di terze parti.",

View File

@@ -312,9 +312,11 @@
"ai.panel.placeholder.missing": "{agent}がインストールされていません。[設定] で [AI エージェント] を開きます。",
"ai.panel.placeholder.ready": "{agent}に尋ねる",
"ai.panel.send": "メッセージを送信",
"ai.message.regenerate": "Regenerate response",
"ai.message.copy": "Copy response",
"ai.message.fork": "Fork chat from here",
"ai.message.regenerate": "応答を再生成",
"ai.message.copy": "応答をコピー",
"ai.message.fork": "ここからチャットを分岐",
"ai.message.reasoning": "推論",
"ai.message.toolUse": "ツールの使用",
"ai.workspace.title": "エージェント",
"ai.workspace.newChat": "新しいチャット",
"ai.workspace.collapseSidebar": "AIチャットリストを折りたたむ",
@@ -322,7 +324,7 @@
"ai.workspace.close": "AIワークスペースを閉じる",
"ai.workspace.expandPanel": "AIワークスペースを展開",
"ai.workspace.restorePanel": "AIワークスペースパネルを復元",
"ai.workspace.restoreGuidance": "Restore",
"ai.workspace.restoreGuidance": "復元",
"ai.workspace.closeChat": "{title}を閉じる",
"ai.workspace.popOut": "別のウィンドウで開く",
"ai.workspace.dock": "AIワークスペースをドック",
@@ -356,6 +358,10 @@
"ai.workspace.target.installedVersion": "{version}がインストールされています",
"ai.workspace.target.localModel": "ローカルモデル",
"ai.workspace.target.apiModel": "APIモデル",
"window.minimize": "最小化",
"window.maximize": "最大化",
"window.restore": "復元",
"window.close": "閉じる",
"mcp.setup.manageTitle": "外部AIツールの管理",
"mcp.setup.setupTitle": "外部AIツールを設定する",
"mcp.setup.connectedDescription": "Tolariaは、このVaultで既に外部AIツールに接続されています。再接続して構成を更新するか、接続を解除してこれらのサードパーティ構成ファイルからTolariaを削除してください。",

View File

@@ -312,9 +312,11 @@
"ai.panel.placeholder.missing": "{agent}이(가) 설치되어 있지 않습니다. 설정에서 AI Agents를 여세요.",
"ai.panel.placeholder.ready": "{agent}에게 물어보기",
"ai.panel.send": "메시지 보내기",
"ai.message.regenerate": "Regenerate response",
"ai.message.copy": "Copy response",
"ai.message.fork": "Fork chat from here",
"ai.message.regenerate": "응답 다시 생성",
"ai.message.copy": "응답 복사",
"ai.message.fork": "여기서 채팅 분기",
"ai.message.reasoning": "추론",
"ai.message.toolUse": "도구 사용",
"ai.workspace.title": "에이전트",
"ai.workspace.newChat": "새 채팅",
"ai.workspace.collapseSidebar": "AI 채팅 목록 접기",
@@ -322,7 +324,7 @@
"ai.workspace.close": "AI 작업 공간 닫기",
"ai.workspace.expandPanel": "AI 작업 공간 펼치기",
"ai.workspace.restorePanel": "AI 작업 영역 패널 복원",
"ai.workspace.restoreGuidance": "Restore",
"ai.workspace.restoreGuidance": "복원",
"ai.workspace.closeChat": "{title} 닫기",
"ai.workspace.popOut": "별도의 창에서 열기",
"ai.workspace.dock": "AI 작업 공간 고정",
@@ -356,6 +358,10 @@
"ai.workspace.target.installedVersion": "{version} 설치됨",
"ai.workspace.target.localModel": "로컬 모델",
"ai.workspace.target.apiModel": "API 모델",
"window.minimize": "최소화",
"window.maximize": "최대화",
"window.restore": "복원",
"window.close": "닫기",
"mcp.setup.manageTitle": "외부 AI 도구 관리",
"mcp.setup.setupTitle": "외부 AI 도구 설정",
"mcp.setup.connectedDescription": "Tolaria는 이미 이 Vault에 대해 외부 AI 도구에 연결되어 있습니다. 구성을 새로 고치려면 다시 연결하고, 해당 타사 구성 파일에서 Tolaria를 제거하려면 연결을 해제하세요.",

View File

@@ -312,9 +312,11 @@
"ai.panel.placeholder.missing": "{agent} nie jest zainstalowany. Otwórz Agentów AI w Ustawieniach.",
"ai.panel.placeholder.ready": "Zapytaj {agent}",
"ai.panel.send": "Wyślij wiadomość",
"ai.message.regenerate": "Regenerate response",
"ai.message.copy": "Copy response",
"ai.message.fork": "Fork chat from here",
"ai.message.regenerate": "Wygeneruj odpowiedź ponownie",
"ai.message.copy": "Skopiuj odpowiedź",
"ai.message.fork": "Rozgałęź czat od tego miejsca",
"ai.message.reasoning": "Rozumowanie",
"ai.message.toolUse": "Korzystanie z narzędzi",
"ai.workspace.title": "Agenci",
"ai.workspace.newChat": "Nowy czat",
"ai.workspace.collapseSidebar": "Zwiń listę czatów AI",
@@ -322,7 +324,7 @@
"ai.workspace.close": "Zamknij obszar roboczy AI",
"ai.workspace.expandPanel": "Rozwiń obszar roboczy AI",
"ai.workspace.restorePanel": "Przywróć panel obszaru roboczego AI",
"ai.workspace.restoreGuidance": "Restore",
"ai.workspace.restoreGuidance": "Przywróć",
"ai.workspace.closeChat": "Zamknij {title}",
"ai.workspace.popOut": "Otwórz w oddzielnym oknie",
"ai.workspace.dock": "Zadokuj obszar roboczy AI",
@@ -356,6 +358,10 @@
"ai.workspace.target.installedVersion": "Zainstalowano {version}",
"ai.workspace.target.localModel": "Model lokalny",
"ai.workspace.target.apiModel": "Model API",
"window.minimize": "Minimalizuj",
"window.maximize": "Maksymalizuj",
"window.restore": "Przywróć",
"window.close": "Zamknij",
"mcp.setup.manageTitle": "Zarządzaj zewnętrznymi narzędziami AI",
"mcp.setup.setupTitle": "Skonfiguruj zewnętrzne narzędzia AI",
"mcp.setup.connectedDescription": "Tolaria jest już połączona z zewnętrznymi narzędziami AI dla tego sejfu. Połącz ponownie, aby odświeżyć konfigurację, lub rozłącz, aby usunąć Tolaria z plików konfiguracyjnych narzędzi zewnętrznych.",

View File

@@ -312,9 +312,11 @@
"ai.panel.placeholder.missing": "{agent} não está instalado. Abra Agentes de IA em Configurações.",
"ai.panel.placeholder.ready": "Perguntar ao {agent}",
"ai.panel.send": "Enviar mensagem",
"ai.message.regenerate": "Regenerate response",
"ai.message.copy": "Copy response",
"ai.message.fork": "Fork chat from here",
"ai.message.regenerate": "Gerar resposta novamente",
"ai.message.copy": "Copiar resposta",
"ai.message.fork": "Criar ramificação do chat a partir daqui",
"ai.message.reasoning": "Raciocínio",
"ai.message.toolUse": "Uso da ferramenta",
"ai.workspace.title": "Agentes",
"ai.workspace.newChat": "Novo chat",
"ai.workspace.collapseSidebar": "Recolher lista de chat de IA",
@@ -322,7 +324,7 @@
"ai.workspace.close": "Fechar o espaço de trabalho de IA",
"ai.workspace.expandPanel": "Expandir o espaço de trabalho de IA",
"ai.workspace.restorePanel": "Restaurar painel do AI Workspace",
"ai.workspace.restoreGuidance": "Restore",
"ai.workspace.restoreGuidance": "Restaurar",
"ai.workspace.closeChat": "Fechar {title}",
"ai.workspace.popOut": "Abrir em uma janela separada",
"ai.workspace.dock": "Encaixar o espaço de trabalho de IA",
@@ -356,6 +358,10 @@
"ai.workspace.target.installedVersion": "{version} instalada",
"ai.workspace.target.localModel": "Modelo local",
"ai.workspace.target.apiModel": "Modelo de API",
"window.minimize": "Minimizar",
"window.maximize": "Maximizar",
"window.restore": "Restaurar",
"window.close": "Fechar",
"mcp.setup.manageTitle": "Gerenciar ferramentas externas de IA",
"mcp.setup.setupTitle": "Configurar ferramentas externas de IA",
"mcp.setup.connectedDescription": "O Tolaria já está conectado a ferramentas externas de IA para este vault. Reconecte-se para atualizar a configuração ou desconecte-se para remover o Tolaria desses arquivos de configuração de terceiros.",

View File

@@ -312,9 +312,11 @@
"ai.panel.placeholder.missing": "O {agent} não está instalado. Abra Agentes de IA em Definições.",
"ai.panel.placeholder.ready": "Perguntar ao {agent}",
"ai.panel.send": "Enviar mensagem",
"ai.message.regenerate": "Regenerate response",
"ai.message.copy": "Copy response",
"ai.message.fork": "Fork chat from here",
"ai.message.regenerate": "Gerar novamente a resposta",
"ai.message.copy": "Copiar resposta",
"ai.message.fork": "Criar ramificação da conversa a partir daqui",
"ai.message.reasoning": "Raciocínio",
"ai.message.toolUse": "Utilização da ferramenta",
"ai.workspace.title": "Agentes",
"ai.workspace.newChat": "Novo chat",
"ai.workspace.collapseSidebar": "Recolher a lista de chat de IA",
@@ -322,7 +324,7 @@
"ai.workspace.close": "Fechar espaço de trabalho de IA",
"ai.workspace.expandPanel": "Expandir o espaço de trabalho de IA",
"ai.workspace.restorePanel": "Restaurar o painel do espaço de trabalho de IA",
"ai.workspace.restoreGuidance": "Restore",
"ai.workspace.restoreGuidance": "Restaurar",
"ai.workspace.closeChat": "Fechar {title}",
"ai.workspace.popOut": "Abrir numa janela separada",
"ai.workspace.dock": "Afixar espaço de trabalho de IA",
@@ -356,6 +358,10 @@
"ai.workspace.target.installedVersion": "{version} instalada",
"ai.workspace.target.localModel": "Modelo local",
"ai.workspace.target.apiModel": "Modelo de API",
"window.minimize": "Minimizar",
"window.maximize": "Maximizar",
"window.restore": "Restaurar",
"window.close": "Fechar",
"mcp.setup.manageTitle": "Gerir ferramentas de IA externas",
"mcp.setup.setupTitle": "Configurar ferramentas de IA externas",
"mcp.setup.connectedDescription": "A Tolaria já está ligada a ferramentas de IA externas para este cofre. Volte a ligar para atualizar a configuração ou desligue para remover a Tolaria desses ficheiros de configuração de terceiros.",

View File

@@ -312,9 +312,11 @@
"ai.panel.placeholder.missing": "{agent} не установлен. Откройте «AI Agents» в настройках.",
"ai.panel.placeholder.ready": "Спросить {agent}",
"ai.panel.send": "Отправить сообщение",
"ai.message.regenerate": "Regenerate response",
"ai.message.copy": "Copy response",
"ai.message.fork": "Fork chat from here",
"ai.message.regenerate": "Сгенерировать ответ заново",
"ai.message.copy": "Скопировать ответ",
"ai.message.fork": "Разветвить чат отсюда",
"ai.message.reasoning": "Обоснование",
"ai.message.toolUse": "Использование инструмента",
"ai.workspace.title": "Агенты",
"ai.workspace.newChat": "Новый чат",
"ai.workspace.collapseSidebar": "Свернуть список чатов с ИИ",
@@ -322,7 +324,7 @@
"ai.workspace.close": "Закрыть рабочее пространство ИИ",
"ai.workspace.expandPanel": "Развернуть рабочее пространство ИИ",
"ai.workspace.restorePanel": "Восстановить панель рабочего пространства ИИ",
"ai.workspace.restoreGuidance": "Restore",
"ai.workspace.restoreGuidance": "Восстановить",
"ai.workspace.closeChat": "Закрыть {title}",
"ai.workspace.popOut": "Открыть в отдельном окне",
"ai.workspace.dock": "Закрепить рабочее пространство ИИ",
@@ -356,6 +358,10 @@
"ai.workspace.target.installedVersion": "Установлена версия {version}",
"ai.workspace.target.localModel": "Локальная модель",
"ai.workspace.target.apiModel": "Модель API",
"window.minimize": "Свернуть",
"window.maximize": "Развернуть",
"window.restore": "Восстановить",
"window.close": "Закрыть",
"mcp.setup.manageTitle": "Управление внешними инструментами ИИ",
"mcp.setup.setupTitle": "Настроить внешние инструменты ИИ",
"mcp.setup.connectedDescription": "Tolaria уже подключена к внешним инструментам ИИ для этого хранилища. Подключитесь повторно, чтобы обновить конфигурацию, или отключитесь, чтобы удалить Tolaria из этих сторонних файлов конфигурации.",

View File

@@ -312,9 +312,11 @@
"ai.panel.placeholder.missing": "{agent} is not installed. Open AI Agents in Settings.",
"ai.panel.placeholder.ready": "Ask {agent}",
"ai.panel.send": "Send message",
"ai.message.regenerate": "Regenerate response",
"ai.message.copy": "Copy response",
"ai.message.fork": "Fork chat from here",
"ai.message.regenerate": "Tạo lại phản hồi",
"ai.message.copy": "Sao chép phản hồi",
"ai.message.fork": "Tách nhánh cuộc trò chuyện từ đây",
"ai.message.reasoning": "Lập luận",
"ai.message.toolUse": "Sử dụng công cụ",
"ai.workspace.title": "Đại lý",
"ai.workspace.newChat": "Trò chuyện mới",
"ai.workspace.collapseSidebar": "Thu gọn danh sách trò chuyện AI",
@@ -322,7 +324,7 @@
"ai.workspace.close": "Đóng không gian làm việc AI",
"ai.workspace.expandPanel": "Mở rộng không gian làm việc AI",
"ai.workspace.restorePanel": "Khôi phục bảng điều khiển không gian làm việc AI",
"ai.workspace.restoreGuidance": "Restore",
"ai.workspace.restoreGuidance": "Khôi phục",
"ai.workspace.closeChat": "Đóng {title}",
"ai.workspace.popOut": "Mở trong cửa sổ riêng",
"ai.workspace.dock": "Gắn không gian làm việc AI vào màn hình",
@@ -356,6 +358,10 @@
"ai.workspace.target.installedVersion": "Đã cài đặt {version}",
"ai.workspace.target.localModel": "Mô hình cục bộ",
"ai.workspace.target.apiModel": "Mô hình API",
"window.minimize": "Thu nhỏ",
"window.maximize": "Phóng to",
"window.restore": "Khôi phục",
"window.close": "Đóng",
"mcp.setup.manageTitle": "Manage External AI Tools",
"mcp.setup.setupTitle": "Set Up External AI Tools",
"mcp.setup.connectedDescription": "Tolaria is already connected to external AI tools for this vault. Reconnect to refresh the configuration, or disconnect to remove Tolaria from those third-party config files.",

View File

@@ -312,9 +312,11 @@
"ai.panel.placeholder.missing": "未安装 {agent}。在“设置”中打开 AI 代理。",
"ai.panel.placeholder.ready": "询问 {agent}",
"ai.panel.send": "发送消息",
"ai.message.regenerate": "Regenerate response",
"ai.message.copy": "Copy response",
"ai.message.fork": "Fork chat from here",
"ai.message.regenerate": "重新生成回复",
"ai.message.copy": "复制回复",
"ai.message.fork": "从此处分叉聊天",
"ai.message.reasoning": "推理",
"ai.message.toolUse": "工具使用",
"ai.workspace.title": "代理",
"ai.workspace.newChat": "新聊天",
"ai.workspace.collapseSidebar": "收起 AI 聊天列表",
@@ -322,7 +324,7 @@
"ai.workspace.close": "关闭 AI 工作区",
"ai.workspace.expandPanel": "展开 AI 工作区",
"ai.workspace.restorePanel": "恢复 AI 工作区面板",
"ai.workspace.restoreGuidance": "Restore",
"ai.workspace.restoreGuidance": "还原",
"ai.workspace.closeChat": "关闭{title}",
"ai.workspace.popOut": "在单独窗口中打开",
"ai.workspace.dock": "停靠 AI 工作区",
@@ -356,6 +358,10 @@
"ai.workspace.target.installedVersion": "已安装 {version}",
"ai.workspace.target.localModel": "本地模型",
"ai.workspace.target.apiModel": "API 模型",
"window.minimize": "最小化",
"window.maximize": "最大化",
"window.restore": "还原",
"window.close": "关闭",
"mcp.setup.manageTitle": "管理外部 AI 工具",
"mcp.setup.setupTitle": "设置外部 AI 工具",
"mcp.setup.connectedDescription": "对于此 VaultTolaria 已经连接到外部 AI 工具。重新连接以刷新配置,或断开连接以从这些第三方配置文件中删除 Tolaria。",

View File

@@ -312,9 +312,11 @@
"ai.panel.placeholder.missing": "未安裝 {agent}。在「設定」中開啟 AI 代理程式。",
"ai.panel.placeholder.ready": "詢問 {agent}",
"ai.panel.send": "傳送訊息",
"ai.message.regenerate": "Regenerate response",
"ai.message.copy": "Copy response",
"ai.message.fork": "Fork chat from here",
"ai.message.regenerate": "重新產生回覆",
"ai.message.copy": "複製回覆",
"ai.message.fork": "從此處分支聊天",
"ai.message.reasoning": "推理",
"ai.message.toolUse": "工具使用",
"ai.workspace.title": "代理人",
"ai.workspace.newChat": "新對話",
"ai.workspace.collapseSidebar": "收合 AI 聊天清單",
@@ -322,7 +324,7 @@
"ai.workspace.close": "關閉 AI 工作區",
"ai.workspace.expandPanel": "展開 AI 工作區",
"ai.workspace.restorePanel": "還原 AI 工作區面板",
"ai.workspace.restoreGuidance": "Restore",
"ai.workspace.restoreGuidance": "還原",
"ai.workspace.closeChat": "關閉{title}",
"ai.workspace.popOut": "在單獨視窗中開啟",
"ai.workspace.dock": "固定 AI 工作區",
@@ -356,6 +358,10 @@
"ai.workspace.target.installedVersion": "已安裝 {version}",
"ai.workspace.target.localModel": "本機模型",
"ai.workspace.target.apiModel": "API 模型",
"window.minimize": "最小化",
"window.maximize": "最大化",
"window.restore": "還原",
"window.close": "關閉",
"mcp.setup.manageTitle": "管理外部 AI 工具",
"mcp.setup.setupTitle": "設定外部 AI 工具",
"mcp.setup.connectedDescription": "Tolaria 已經連接到此 Vault 的外部 AI 工具。重新連線以重新載入設定,或中斷連線以從這些第三方設定檔案中移除 Tolaria。",