Files
LLeMbas-Desktop/scripts/gen-i18n.py
T
HomerandClaude Opus 5.5 4b4e63f622 The app's own interface: agent chats first, two explorers, a viewer
Plain HTML, CSS and ES modules in ui/, no build step. The sidebar opens on agent
chats (this computer first), with chats on the server as the second tab; the
transcript draws the /api/v2 steps, follows a reply as it is written, answers
cards, and starts agent chats in one of the agent's folders. Two explorers kept
apart (this computer's, the server's) and a viewer: Markdown drawn by a safe
renderer that never parses HTML, code in read-only CodeMirror with the server's
token colours, HTML in the sealed frame, show calls opened in it. Settings for
the sign-in, the agent and its folders, notifications and updates; no admin
pages. Layout on fixed and shared tracks; the sidebar is a drawer below 48rem,
the viewer goes over the chat below 64rem. All 124 sentences in the server's
nine languages.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 04:55:03 +00:00

1084 lines
76 KiB
Python
Executable File

#!/usr/bin/env python3
"""Write ui/i18n.js: the app's own pages' words in the server's nine languages.
scripts/gen-i18n.py [path/to/LLeMbas] (default: ../LLeMbas, or $LEMBAS_SERVER)
The server's catalogues (src/lembas/web/i18n/<lang>.py, keyed by the English sentence) are
the first source: a sentence the server also has is translated as the server translates it,
so the title bar says "Zavrieť" where the server's own Close button does. The sentences only
this app has -- the first-run page, the agent's states -- are in OWN below, and nowhere else.
Keep them few: a new string on the page is a new row here, in all eight languages.
The output is deterministic (languages and keys in a fixed order), so running this twice
writes the same file. ui/i18n.js is committed; this script runs when a string or a server
catalogue changes, not in CI, which has no server checkout.
"""
from __future__ import annotations
import importlib.util
import json
import os
import re
import sys
from pathlib import Path
# The server checkout is read, not written: no __pycache__ beside its catalogues.
sys.dont_write_bytecode = True
ROOT = Path(__file__).resolve().parent.parent
OUT = ROOT / "ui" / "i18n.js"
LANGS = ("cs", "de", "es", "fr", "hu", "it", "pl", "sk") # and "en", the keys themselves
# Every sentence the page uses (ui/index.html and ui/js/*.js),
# as `t("…")` and `data-i18n` name it. `%(name)s` fields are filled in by `t`.
KEYS = (
# index.html
"Menu",
"Minimise",
"Maximise",
"Close (LLeMbas stays in the tray)",
"Close",
"Chats",
"Read again",
"Send",
"Settings",
# chat.js
"Waiting for the reply before it",
"%(n)s tokens",
"Stopped.",
"Thought",
"Taken in while it ran:",
"Cut short here; the whole of it is in the web interface.",
"Open in the viewer",
"Shown by the agent",
"This computer",
"Server",
"Writing…",
"Thinking",
"The connection to the reply was lost: %(why)s",
"Waiting for your answer",
"The agent asks to run %(tool)s:",
"The agent asks:",
"Command",
"Recommended",
"Or type an answer",
"Your answer",
"Carry it out",
"Allow",
"Always allow",
"Not yet",
"Deny",
"Answer",
"New chat",
"Another device",
"Mode",
"Loading…",
"Earlier messages",
"New agent chat",
"Model",
"No model is available to this account.",
"An agent chat works in a folder on this computer, through the agent built into this app.",
"The agent is not connected to the server yet: start it, or link this computer, under Settings.",
"Folder",
"Only the agent's folders: Settings, Project folders.",
"No folder yet: add one under Settings, Project folders.",
"A chat asking for more than the folder allows is lowered to it.",
# explorer.js
"Empty folder",
"No project folder yet: the agent can open nothing on this computer.",
"Add folder…",
"This server does not offer its files to the app yet.",
# list.js
"No agent chat yet. Start one: it works in a folder on this computer.",
"No chat yet.",
"Other devices",
"More",
# main.js
"The reply is ready.",
"The agent has finished.",
# markdown.js
"Copy",
# settings.js
"The agent is off.",
"This computer is not linked to the server yet.",
"The agent is starting…",
"The agent is running: agent chats can use this computer.",
"A LLeMbas CLI service already runs here (pid %(pid)s); it is this computer's agent.",
"The agent stopped: %(why)s. Trying again shortly.",
"The agent is connected, but may open no folder yet: add one below.",
"Signed in as %(who)s.",
"Signing out gives the app's sign-in up on the server; the agent's link stays. Sign out to use another server.",
"Sign out",
"Agent",
"The agent lets agent chats on your server work in this computer's projects. It is the LLeMbas CLI, built in, running in the background while the app runs.",
"Approve this code in the page that opened in your browser:",
"Link again",
"Link this computer",
"Stop the agent",
"Start the agent",
"No folder yet: the agent can open nothing. Add the folder of a project.",
"Remove",
"Remove %(dir)s",
"Manual — asks first",
"Edit — asks before commands",
"Auto — asks nothing",
"Plan — changes nothing",
"Project folders",
"Agent chats can work in these folders and anything inside them — nowhere else on this computer.",
"The most an agent chat may do here",
"A chat asking for more is lowered to this.",
"Terminal",
"Let the server open a terminal here",
"A shell as you, in one of these folders.",
"Notifications",
"Tell me when a reply or an agent's work is finished while I am elsewhere",
"About",
"Install LLeMbas %(version)s…",
"Check for updates…",
# setup.js
"Looking for a LLeMbas server there…",
"%(name)s, LLeMbas %(version)s.",
"LLeMbas Desktop needs a LLeMbas 2.0 server or later.",
"Connect",
"Address of your LLeMbas server",
"Try again",
"Sign in",
"The app signs in to your server once, in your browser, as any device does. It may then read and write your chats, as the web interface does.",
"Open the page again",
"Cancel",
"Waiting for the browser…",
# titlebar.js
"agent off",
"not linked",
"agent starting…",
"agent running",
"agent running (service)",
"agent stopped",
"agent: no folders",
"Agent stopped: %(why)s",
"update %(version)s",
"update",
"LLeMbas %(version)s is available (this is %(current)s)",
"Restore",
# viewer.js
"This file is too big to show here (%(size)s).",
"This is not a text file; it cannot be shown here.",
"Page",
"Preview",
"Source",
)
# The app's own sentences. The mode names (Manual, Edit, Auto, Plan) stay English, as the
# server's catalogues keep them ("Režim Edit", "Modus Edit"); "Local" is the server's word for
# the device, as the server's catalogue has it.
OWN: dict[str, dict[str, str]] = {
"cs": {
"Menu": "Nabídka",
"Minimise": "Minimalizovat",
"Maximise": "Maximalizovat",
"Close (LLeMbas stays in the tray)": "Zavřít (LLeMbas zůstane v oznamovací oblasti)",
"Read again": "Načíst znovu",
"Waiting for the reply before it": "Čeká na odpověď před ní",
"Stopped.": "Zastaveno.",
"Taken in while it ran:": "Převzato během běhu:",
"Cut short here; the whole of it is in the web interface.": "Zde zkráceno; celé je to ve webovém rozhraní.",
"Open in the viewer": "Otevřít v prohlížeči souborů",
"Shown by the agent": "Ukázal agent",
"This computer": "Tento počítač",
"Server": "Server",
"Writing…": "Píše se…",
"The connection to the reply was lost: %(why)s": "Spojení s odpovědí se přerušilo: %(why)s",
"Waiting for your answer": "Čeká na vaši odpověď",
"The agent asks to run %(tool)s:": "Agent žádá o spuštění %(tool)s:",
"The agent asks:": "Agent se ptá:",
"Command": "Příkaz",
"Recommended": "Doporučeno",
"Or type an answer": "Nebo napište odpověď",
"Your answer": "Vaše odpověď",
"Always allow": "Vždy povolit",
"Not yet": "Ještě ne",
"Another device": "Jiné zařízení",
"Loading…": "Načítá se…",
"Earlier messages": "Starší zprávy",
"New agent chat": "Nová agentní konverzace",
"No model is available to this account.": "Tomuto účtu není dostupný žádný model.",
"An agent chat works in a folder on this computer, through the agent built into this app.": "Agentní konverzace pracuje ve složce na tomto počítači přes agenta vestavěného v této aplikaci.",
"The agent is not connected to the server yet: start it, or link this computer, under Settings.": "Agent ještě není připojený k serveru: spusťte ho nebo propojte tento počítač v Nastavení.",
"Folder": "Složka",
"Only the agent's folders: Settings, Project folders.": "Jen složky agenta: Nastavení, Složky projektů.",
"No folder yet: add one under Settings, Project folders.": "Zatím žádná složka: přidejte ji v Nastavení, Složky projektů.",
"A chat asking for more than the folder allows is lowered to it.": "Konverzace, která chce víc, než složka dovoluje, je snížena na to.",
"Empty folder": "Prázdná složka",
"No project folder yet: the agent can open nothing on this computer.": "Zatím žádná složka projektu: agent na tomto počítači nemůže nic otevřít.",
"Add folder…": "Přidat složku…",
"This server does not offer its files to the app yet.": "Tento server zatím nenabízí své soubory aplikaci.",
"No agent chat yet. Start one: it works in a folder on this computer.": "Zatím žádná agentní konverzace. Začněte ji: pracuje ve složce na tomto počítači.",
"No chat yet.": "Zatím žádná konverzace.",
"Other devices": "Jiná zařízení",
"More": "Více",
"The reply is ready.": "Odpověď je hotová.",
"The agent has finished.": "Agent dokončil práci.",
"The agent is off.": "Agent je vypnutý.",
"This computer is not linked to the server yet.": "Tento počítač ještě není propojený se serverem.",
"The agent is starting…": "Agent se spouští…",
"The agent is running: agent chats can use this computer.": "Agent běží: agentní konverzace mohou používat tento počítač.",
"A LLeMbas CLI service already runs here (pid %(pid)s); it is this computer's agent.": "Služba LLeMbas CLI už tu běží (pid %(pid)s); je agentem tohoto počítače.",
"The agent stopped: %(why)s. Trying again shortly.": "Agent se zastavil: %(why)s. Za chvíli to zkusí znovu.",
"The agent is connected, but may open no folder yet: add one below.": "Agent je připojený, ale zatím nesmí otevřít žádnou složku: přidejte ji níže.",
"Signed in as %(who)s.": "Přihlášen jako %(who)s.",
"Signing out gives the app's sign-in up on the server; the agent's link stays. Sign out to use another server.": "Odhlášením se přihlášení aplikace na serveru zruší; propojení agenta zůstane. Chcete-li použít jiný server, odhlaste se.",
"The agent lets agent chats on your server work in this computer's projects. It is the LLeMbas CLI, built in, running in the background while the app runs.": "Agent umožňuje agentním konverzacím na vašem serveru pracovat v projektech na tomto počítači. Je to vestavěné LLeMbas CLI, které běží na pozadí, dokud běží aplikace.",
"Approve this code in the page that opened in your browser:": "Potvrďte tento kód na stránce, která se otevřela ve vašem prohlížeči:",
"Link again": "Propojit znovu",
"Link this computer": "Propojit tento počítač",
"Stop the agent": "Zastavit agenta",
"Start the agent": "Spustit agenta",
"No folder yet: the agent can open nothing. Add the folder of a project.": "Zatím žádná složka: agent nemůže nic otevřít. Přidejte složku projektu.",
"Remove %(dir)s": "Odebrat %(dir)s",
"Manual — asks first": "Manual — nejdřív se zeptá",
"Edit — asks before commands": "Edit — ptá se před příkazy",
"Auto — asks nothing": "Auto — na nic se neptá",
"Plan — changes nothing": "Plan — nic nemění",
"Project folders": "Složky projektů",
"Agent chats can work in these folders and anything inside them — nowhere else on this computer.": "Agentní konverzace mohou pracovat v těchto složkách a ve všem uvnitř nich — nikde jinde na tomto počítači.",
"The most an agent chat may do here": "Nejvíc, co tu agentní konverzace smí",
"A chat asking for more is lowered to this.": "Konverzace, která chce víc, je snížena na tohle.",
"Let the server open a terminal here": "Dovolit serveru otevřít zde terminál",
"A shell as you, in one of these folders.": "Shell pod vaším účtem, v jedné z těchto složek.",
"Tell me when a reply or an agent's work is finished while I am elsewhere": "Upozornit mě, když je odpověď nebo práce agenta hotová, zatímco jsem jinde",
"About": "O aplikaci",
"Install LLeMbas %(version)s…": "Nainstalovat LLeMbas %(version)s…",
"Check for updates…": "Zkontrolovat aktualizace…",
"Looking for a LLeMbas server there…": "Hledám tam server LLeMbas…",
"%(name)s, LLeMbas %(version)s.": "%(name)s, LLeMbas %(version)s.",
"LLeMbas Desktop needs a LLeMbas 2.0 server or later.": "LLeMbas Desktop potřebuje server LLeMbas 2.0 nebo novější.",
"Connect": "Připojit",
"Address of your LLeMbas server": "Adresa vašeho serveru LLeMbas",
"The app signs in to your server once, in your browser, as any device does. It may then read and write your chats, as the web interface does.": "Aplikace se k vašemu serveru přihlásí jednou, ve vašem prohlížeči, jako každé zařízení. Pak může číst a psát vaše konverzace, jako webové rozhraní.",
"Open the page again": "Otevřít stránku znovu",
"Waiting for the browser…": "Čeká se na prohlížeč…",
"agent off": "agent vypnutý",
"not linked": "nepropojeno",
"agent starting…": "agent se spouští…",
"agent running": "agent běží",
"agent running (service)": "agent běží (služba)",
"agent stopped": "agent zastaven",
"agent: no folders": "agent: žádné složky",
"Agent stopped: %(why)s": "Agent se zastavil: %(why)s",
"update %(version)s": "aktualizace %(version)s",
"update": "aktualizace",
"LLeMbas %(version)s is available (this is %(current)s)": "Je k dispozici LLeMbas %(version)s (tohle je %(current)s)",
"This file is too big to show here (%(size)s).": "Tento soubor je příliš velký na zobrazení (%(size)s).",
"This is not a text file; it cannot be shown here.": "Toto není textový soubor; nelze ho zde zobrazit.",
"Page": "Stránka",
"Source": "Zdroj",
},
"de": {
"Menu": "Menü",
"Minimise": "Minimieren",
"Maximise": "Maximieren",
"Close (LLeMbas stays in the tray)": "Schließen (LLeMbas bleibt im Benachrichtigungsbereich)",
"Read again": "Neu lesen",
"Waiting for the reply before it": "Wartet auf die Antwort davor",
"Stopped.": "Angehalten.",
"Taken in while it ran:": "Während des Laufs übernommen:",
"Cut short here; the whole of it is in the web interface.": "Hier gekürzt; vollständig steht es in der Weboberfläche.",
"Open in the viewer": "Im Betrachter öffnen",
"Shown by the agent": "Vom Agenten gezeigt",
"This computer": "Dieser Computer",
"Server": "Server",
"Writing…": "Schreibt…",
"The connection to the reply was lost: %(why)s": "Die Verbindung zur Antwort ist abgebrochen: %(why)s",
"Waiting for your answer": "Wartet auf Ihre Antwort",
"The agent asks to run %(tool)s:": "Der Agent möchte %(tool)s ausführen:",
"The agent asks:": "Der Agent fragt:",
"Command": "Befehl",
"Recommended": "Empfohlen",
"Or type an answer": "Oder eine Antwort eingeben",
"Your answer": "Ihre Antwort",
"Always allow": "Immer erlauben",
"Not yet": "Noch nicht",
"Another device": "Ein anderes Gerät",
"Loading…": "Wird geladen…",
"Earlier messages": "Frühere Nachrichten",
"New agent chat": "Neuer Agenten-Chat",
"No model is available to this account.": "Diesem Konto steht kein Modell zur Verfügung.",
"An agent chat works in a folder on this computer, through the agent built into this app.": "Ein Agenten-Chat arbeitet in einem Ordner auf diesem Computer, über den in diese App eingebauten Agenten.",
"The agent is not connected to the server yet: start it, or link this computer, under Settings.": "Der Agent ist noch nicht mit dem Server verbunden: Starten Sie ihn oder verbinden Sie diesen Computer unter Einstellungen.",
"Folder": "Ordner",
"Only the agent's folders: Settings, Project folders.": "Nur die Ordner des Agenten: Einstellungen, Projektordner.",
"No folder yet: add one under Settings, Project folders.": "Noch kein Ordner: Fügen Sie einen unter Einstellungen, Projektordner hinzu.",
"A chat asking for more than the folder allows is lowered to it.": "Ein Chat, der mehr will, als der Ordner erlaubt, wird darauf herabgesetzt.",
"Empty folder": "Leerer Ordner",
"No project folder yet: the agent can open nothing on this computer.": "Noch kein Projektordner: Der Agent kann auf diesem Computer nichts öffnen.",
"Add folder…": "Ordner hinzufügen…",
"This server does not offer its files to the app yet.": "Dieser Server bietet der App seine Dateien noch nicht an.",
"No agent chat yet. Start one: it works in a folder on this computer.": "Noch kein Agenten-Chat. Starten Sie einen: Er arbeitet in einem Ordner auf diesem Computer.",
"No chat yet.": "Noch kein Chat.",
"Other devices": "Andere Geräte",
"More": "Mehr",
"The reply is ready.": "Die Antwort ist fertig.",
"The agent has finished.": "Der Agent ist fertig.",
"The agent is off.": "Der Agent ist aus.",
"This computer is not linked to the server yet.": "Dieser Computer ist noch nicht mit dem Server verbunden.",
"The agent is starting…": "Der Agent startet…",
"The agent is running: agent chats can use this computer.": "Der Agent läuft: Agent-Chats können diesen Computer nutzen.",
"A LLeMbas CLI service already runs here (pid %(pid)s); it is this computer's agent.": "Ein LLeMbas-CLI-Dienst läuft hier bereits (PID %(pid)s); er ist der Agent dieses Computers.",
"The agent stopped: %(why)s. Trying again shortly.": "Der Agent hat angehalten: %(why)s. Gleich wird es erneut versucht.",
"The agent is connected, but may open no folder yet: add one below.": "Der Agent ist verbunden, darf aber noch keinen Ordner öffnen: Fügen Sie unten einen hinzu.",
"Signed in as %(who)s.": "Angemeldet als %(who)s.",
"Signing out gives the app's sign-in up on the server; the agent's link stays. Sign out to use another server.": "Beim Abmelden gibt die App ihre Anmeldung am Server auf; die Verbindung des Agenten bleibt. Melden Sie sich ab, um einen anderen Server zu verwenden.",
"The agent lets agent chats on your server work in this computer's projects. It is the LLeMbas CLI, built in, running in the background while the app runs.": "Der Agent lässt Agent-Chats auf Ihrem Server in den Projekten dieses Computers arbeiten. Er ist das eingebaute LLeMbas CLI und läuft im Hintergrund, solange die App läuft.",
"Approve this code in the page that opened in your browser:": "Bestätigen Sie diesen Code auf der Seite, die sich in Ihrem Browser geöffnet hat:",
"Link again": "Erneut verbinden",
"Link this computer": "Diesen Computer verbinden",
"Stop the agent": "Agent anhalten",
"Start the agent": "Agent starten",
"No folder yet: the agent can open nothing. Add the folder of a project.": "Noch kein Ordner: Der Agent kann nichts öffnen. Fügen Sie den Ordner eines Projekts hinzu.",
"Remove %(dir)s": "%(dir)s entfernen",
"Manual — asks first": "Manual — fragt zuerst",
"Edit — asks before commands": "Edit — fragt vor Befehlen",
"Auto — asks nothing": "Auto — fragt nichts",
"Plan — changes nothing": "Plan — ändert nichts",
"Project folders": "Projektordner",
"Agent chats can work in these folders and anything inside them — nowhere else on this computer.": "Agenten-Chats können in diesen Ordnern und allem darin arbeiten — nirgendwo sonst auf diesem Computer.",
"The most an agent chat may do here": "Das Meiste, was ein Agent-Chat hier darf",
"A chat asking for more is lowered to this.": "Ein Chat, der mehr verlangt, wird hierauf begrenzt.",
"Let the server open a terminal here": "Dem Server erlauben, hier ein Terminal zu öffnen",
"A shell as you, in one of these folders.": "Eine Shell als Sie, in einem dieser Ordner.",
"Tell me when a reply or an agent's work is finished while I am elsewhere": "Benachrichtigen, wenn eine Antwort oder die Arbeit des Agenten fertig ist, während ich woanders bin",
"About": "Über",
"Install LLeMbas %(version)s…": "LLeMbas %(version)s installieren…",
"Check for updates…": "Nach Updates suchen…",
"Looking for a LLeMbas server there…": "Suche dort nach einem LLeMbas-Server…",
"%(name)s, LLeMbas %(version)s.": "%(name)s, LLeMbas %(version)s.",
"LLeMbas Desktop needs a LLeMbas 2.0 server or later.": "LLeMbas Desktop braucht einen LLeMbas-Server 2.0 oder neuer.",
"Connect": "Verbinden",
"Address of your LLeMbas server": "Adresse Ihres LLeMbas-Servers",
"The app signs in to your server once, in your browser, as any device does. It may then read and write your chats, as the web interface does.": "Die App meldet sich einmal an Ihrem Server an, in Ihrem Browser, wie jedes Gerät. Danach kann sie Ihre Chats lesen und schreiben, wie die Weboberfläche.",
"Open the page again": "Seite erneut öffnen",
"Waiting for the browser…": "Warte auf den Browser…",
"agent off": "Agent aus",
"not linked": "nicht verbunden",
"agent starting…": "Agent startet…",
"agent running": "Agent läuft",
"agent running (service)": "Agent läuft (Dienst)",
"agent stopped": "Agent angehalten",
"agent: no folders": "Agent: keine Ordner",
"Agent stopped: %(why)s": "Agent angehalten: %(why)s",
"update %(version)s": "Update %(version)s",
"update": "Update",
"LLeMbas %(version)s is available (this is %(current)s)": "LLeMbas %(version)s ist verfügbar (dies ist %(current)s)",
"This file is too big to show here (%(size)s).": "Diese Datei ist zu groß für die Anzeige (%(size)s).",
"This is not a text file; it cannot be shown here.": "Das ist keine Textdatei; sie kann hier nicht angezeigt werden.",
"Page": "Seite",
"Source": "Quelltext",
},
"es": {
"Menu": "Menú",
"Minimise": "Minimizar",
"Maximise": "Maximizar",
"Close (LLeMbas stays in the tray)": "Cerrar (LLeMbas sigue en la bandeja del sistema)",
"Read again": "Leer de nuevo",
"Waiting for the reply before it": "Esperando la respuesta anterior",
"Stopped.": "Detenido.",
"Taken in while it ran:": "Incorporado mientras se ejecutaba:",
"Cut short here; the whole of it is in the web interface.": "Recortado aquí; completo está en la interfaz web.",
"Open in the viewer": "Abrir en el visor",
"Shown by the agent": "Mostrado por el agente",
"This computer": "Este equipo",
"Server": "Servidor",
"Writing…": "Escribiendo…",
"The connection to the reply was lost: %(why)s": "Se perdió la conexión con la respuesta: %(why)s",
"Waiting for your answer": "Esperando su respuesta",
"The agent asks to run %(tool)s:": "El agente pide ejecutar %(tool)s:",
"The agent asks:": "El agente pregunta:",
"Command": "Comando",
"Recommended": "Recomendado",
"Or type an answer": "O escriba una respuesta",
"Your answer": "Su respuesta",
"Always allow": "Permitir siempre",
"Not yet": "Todavía no",
"Another device": "Otro dispositivo",
"Loading…": "Cargando…",
"Earlier messages": "Mensajes anteriores",
"New agent chat": "Nuevo chat de agente",
"No model is available to this account.": "Ningún modelo está disponible para esta cuenta.",
"An agent chat works in a folder on this computer, through the agent built into this app.": "Un chat de agente trabaja en una carpeta de este equipo, a través del agente integrado en esta aplicación.",
"The agent is not connected to the server yet: start it, or link this computer, under Settings.": "El agente aún no está conectado al servidor: inícielo o vincule este equipo en Ajustes.",
"Folder": "Carpeta",
"Only the agent's folders: Settings, Project folders.": "Solo las carpetas del agente: Ajustes, Carpetas de proyecto.",
"No folder yet: add one under Settings, Project folders.": "Aún no hay carpeta: añada una en Ajustes, Carpetas de proyecto.",
"A chat asking for more than the folder allows is lowered to it.": "Un chat que pide más de lo que la carpeta permite se rebaja a ello.",
"Empty folder": "Carpeta vacía",
"No project folder yet: the agent can open nothing on this computer.": "Aún no hay carpeta de proyecto: el agente no puede abrir nada en este equipo.",
"Add folder…": "Añadir carpeta…",
"This server does not offer its files to the app yet.": "Este servidor aún no ofrece sus archivos a la aplicación.",
"No agent chat yet. Start one: it works in a folder on this computer.": "Aún no hay chats de agente. Inicie uno: trabaja en una carpeta de este equipo.",
"No chat yet.": "Aún no hay chats.",
"Other devices": "Otros dispositivos",
"More": "Más",
"The reply is ready.": "La respuesta está lista.",
"The agent has finished.": "El agente ha terminado.",
"The agent is off.": "El agente está apagado.",
"This computer is not linked to the server yet.": "Este ordenador aún no está vinculado al servidor.",
"The agent is starting…": "El agente se está iniciando…",
"The agent is running: agent chats can use this computer.": "El agente está en marcha: los chats de agente pueden usar este ordenador.",
"A LLeMbas CLI service already runs here (pid %(pid)s); it is this computer's agent.": "Ya se está ejecutando aquí un servicio de LLeMbas CLI (pid %(pid)s); es el agente de este ordenador.",
"The agent stopped: %(why)s. Trying again shortly.": "El agente se detuvo: %(why)s. Se volverá a intentar en breve.",
"The agent is connected, but may open no folder yet: add one below.": "El agente está conectado, pero aún no puede abrir ninguna carpeta: añada una abajo.",
"Signed in as %(who)s.": "Sesión iniciada como %(who)s.",
"Signing out gives the app's sign-in up on the server; the agent's link stays. Sign out to use another server.": "Al cerrar sesión, la aplicación renuncia a su acceso en el servidor; la vinculación del agente se mantiene. Cierre sesión para usar otro servidor.",
"The agent lets agent chats on your server work in this computer's projects. It is the LLeMbas CLI, built in, running in the background while the app runs.": "El agente permite que los chats de agente de su servidor trabajen en los proyectos de este ordenador. Es el LLeMbas CLI, integrado, que se ejecuta en segundo plano mientras la aplicación está abierta.",
"Approve this code in the page that opened in your browser:": "Apruebe este código en la página que se abrió en su navegador:",
"Link again": "Vincular de nuevo",
"Link this computer": "Vincular este ordenador",
"Stop the agent": "Detener el agente",
"Start the agent": "Iniciar el agente",
"No folder yet: the agent can open nothing. Add the folder of a project.": "Aún no hay ninguna carpeta: el agente no puede abrir nada. Añada la carpeta de un proyecto.",
"Remove %(dir)s": "Quitar %(dir)s",
"Manual — asks first": "Manual — pregunta primero",
"Edit — asks before commands": "Edit — pregunta antes de los comandos",
"Auto — asks nothing": "Auto — no pregunta nada",
"Plan — changes nothing": "Plan — no cambia nada",
"Project folders": "Carpetas de proyectos",
"Agent chats can work in these folders and anything inside them — nowhere else on this computer.": "Los chats de agente pueden trabajar en estas carpetas y en todo lo que contienen — en ningún otro lugar de este equipo.",
"The most an agent chat may do here": "Lo máximo que un chat de agente puede hacer aquí",
"A chat asking for more is lowered to this.": "Un chat que pida más se limita a esto.",
"Let the server open a terminal here": "Permitir que el servidor abra un terminal aquí",
"A shell as you, in one of these folders.": "Un shell con su usuario, en una de estas carpetas.",
"Tell me when a reply or an agent's work is finished while I am elsewhere": "Avisarme cuando una respuesta o el trabajo de un agente termine mientras estoy en otra parte",
"About": "Acerca de",
"Install LLeMbas %(version)s…": "Instalar LLeMbas %(version)s…",
"Check for updates…": "Buscar actualizaciones…",
"Looking for a LLeMbas server there…": "Buscando un servidor LLeMbas allí…",
"%(name)s, LLeMbas %(version)s.": "%(name)s, LLeMbas %(version)s.",
"LLeMbas Desktop needs a LLeMbas 2.0 server or later.": "LLeMbas Desktop necesita un servidor LLeMbas 2.0 o posterior.",
"Connect": "Conectar",
"Address of your LLeMbas server": "Dirección de su servidor LLeMbas",
"The app signs in to your server once, in your browser, as any device does. It may then read and write your chats, as the web interface does.": "La aplicación inicia sesión en su servidor una vez, en su navegador, como cualquier dispositivo. Después puede leer y escribir sus chats, como la interfaz web.",
"Open the page again": "Abrir la página de nuevo",
"Waiting for the browser…": "Esperando al navegador…",
"agent off": "agente apagado",
"not linked": "no vinculado",
"agent starting…": "agente iniciando…",
"agent running": "agente en marcha",
"agent running (service)": "agente en marcha (servicio)",
"agent stopped": "agente detenido",
"agent: no folders": "agente: sin carpetas",
"Agent stopped: %(why)s": "El agente se detuvo: %(why)s",
"update %(version)s": "actualizar a %(version)s",
"update": "actualizar",
"LLeMbas %(version)s is available (this is %(current)s)": "LLeMbas %(version)s está disponible (esta es la %(current)s)",
"This file is too big to show here (%(size)s).": "Este archivo es demasiado grande para mostrarlo (%(size)s).",
"This is not a text file; it cannot be shown here.": "No es un archivo de texto; no se puede mostrar aquí.",
"Page": "Página",
"Source": "Código fuente",
},
"fr": {
"Menu": "Menu",
"Minimise": "Réduire",
"Maximise": "Agrandir",
"Close (LLeMbas stays in the tray)": "Fermer (LLeMbas reste dans la zone de notification)",
"Read again": "Relire",
"Waiting for the reply before it": "En attente de la réponse précédente",
"Stopped.": "Arrêté.",
"Taken in while it ran:": "Pris en compte pendant l'exécution :",
"Cut short here; the whole of it is in the web interface.": "Tronqué ici ; le tout est dans l'interface web.",
"Open in the viewer": "Ouvrir dans la visionneuse",
"Shown by the agent": "Montré par l'agent",
"This computer": "Cet ordinateur",
"Server": "Serveur",
"Writing…": "Rédaction…",
"The connection to the reply was lost: %(why)s": "La connexion à la réponse a été perdue : %(why)s",
"Waiting for your answer": "En attente de votre réponse",
"The agent asks to run %(tool)s:": "L'agent demande à exécuter %(tool)s :",
"The agent asks:": "L'agent demande :",
"Command": "Commande",
"Recommended": "Recommandé",
"Or type an answer": "Ou saisissez une réponse",
"Your answer": "Votre réponse",
"Always allow": "Toujours autoriser",
"Not yet": "Pas encore",
"Another device": "Un autre appareil",
"Loading…": "Chargement…",
"Earlier messages": "Messages précédents",
"New agent chat": "Nouvelle discussion d'agent",
"No model is available to this account.": "Aucun modèle n'est disponible pour ce compte.",
"An agent chat works in a folder on this computer, through the agent built into this app.": "Une discussion d'agent travaille dans un dossier de cet ordinateur, via l'agent intégré à cette application.",
"The agent is not connected to the server yet: start it, or link this computer, under Settings.": "L'agent n'est pas encore connecté au serveur : démarrez-le ou reliez cet ordinateur dans les Paramètres.",
"Folder": "Dossier",
"Only the agent's folders: Settings, Project folders.": "Uniquement les dossiers de l'agent : Paramètres, Dossiers de projet.",
"No folder yet: add one under Settings, Project folders.": "Aucun dossier pour l'instant : ajoutez-en un dans Paramètres, Dossiers de projet.",
"A chat asking for more than the folder allows is lowered to it.": "Une discussion qui demande plus que le dossier ne permet y est ramenée.",
"Empty folder": "Dossier vide",
"No project folder yet: the agent can open nothing on this computer.": "Aucun dossier de projet pour l'instant : l'agent ne peut rien ouvrir sur cet ordinateur.",
"Add folder…": "Ajouter un dossier…",
"This server does not offer its files to the app yet.": "Ce serveur n'offre pas encore ses fichiers à l'application.",
"No agent chat yet. Start one: it works in a folder on this computer.": "Aucune discussion d'agent pour l'instant. Commencez-en une : elle travaille dans un dossier de cet ordinateur.",
"No chat yet.": "Aucune discussion pour l'instant.",
"Other devices": "Autres appareils",
"More": "Plus",
"The reply is ready.": "La réponse est prête.",
"The agent has finished.": "L'agent a terminé.",
"The agent is off.": "L'agent est arrêté.",
"This computer is not linked to the server yet.": "Cet ordinateur n'est pas encore relié au serveur.",
"The agent is starting…": "L'agent démarre…",
"The agent is running: agent chats can use this computer.": "L'agent tourne : les conversations d'agent peuvent utiliser cet ordinateur.",
"A LLeMbas CLI service already runs here (pid %(pid)s); it is this computer's agent.": "Un service LLeMbas CLI tourne déjà ici (pid %(pid)s) ; c'est l'agent de cet ordinateur.",
"The agent stopped: %(why)s. Trying again shortly.": "L'agent s'est arrêté : %(why)s. Nouvel essai sous peu.",
"The agent is connected, but may open no folder yet: add one below.": "L'agent est connecté, mais ne peut encore ouvrir aucun dossier : ajoutez-en un ci-dessous.",
"Signed in as %(who)s.": "Connecté en tant que %(who)s.",
"Signing out gives the app's sign-in up on the server; the agent's link stays. Sign out to use another server.": "La déconnexion abandonne la connexion de l'application au serveur ; la liaison de l'agent reste. Déconnectez-vous pour utiliser un autre serveur.",
"The agent lets agent chats on your server work in this computer's projects. It is the LLeMbas CLI, built in, running in the background while the app runs.": "L'agent permet aux conversations d'agent de votre serveur de travailler dans les projets de cet ordinateur. C'est le LLeMbas CLI, intégré, qui tourne en arrière-plan tant que l'application est ouverte.",
"Approve this code in the page that opened in your browser:": "Approuvez ce code sur la page qui s'est ouverte dans votre navigateur :",
"Link again": "Relier à nouveau",
"Link this computer": "Relier cet ordinateur",
"Stop the agent": "Arrêter l'agent",
"Start the agent": "Démarrer l'agent",
"No folder yet: the agent can open nothing. Add the folder of a project.": "Aucun dossier pour l'instant : l'agent ne peut rien ouvrir. Ajoutez le dossier d'un projet.",
"Remove %(dir)s": "Retirer %(dir)s",
"Manual — asks first": "Manual — demande d'abord",
"Edit — asks before commands": "Edit — demande avant les commandes",
"Auto — asks nothing": "Auto — ne demande rien",
"Plan — changes nothing": "Plan — ne change rien",
"Project folders": "Dossiers de projets",
"Agent chats can work in these folders and anything inside them — nowhere else on this computer.": "Les discussions d'agent peuvent travailler dans ces dossiers et tout ce qu'ils contiennent — nulle part ailleurs sur cet ordinateur.",
"The most an agent chat may do here": "Le maximum qu'une conversation d'agent peut faire ici",
"A chat asking for more is lowered to this.": "Une conversation qui en demande plus est ramenée à ceci.",
"Let the server open a terminal here": "Laisser le serveur ouvrir un terminal ici",
"A shell as you, in one of these folders.": "Un shell en votre nom, dans l'un de ces dossiers.",
"Tell me when a reply or an agent's work is finished while I am elsewhere": "Me prévenir quand une réponse ou le travail d'un agent est terminé pendant que je suis ailleurs",
"About": "À propos",
"Install LLeMbas %(version)s…": "Installer LLeMbas %(version)s…",
"Check for updates…": "Rechercher des mises à jour…",
"Looking for a LLeMbas server there…": "Recherche d'un serveur LLeMbas à cette adresse…",
"%(name)s, LLeMbas %(version)s.": "%(name)s, LLeMbas %(version)s.",
"LLeMbas Desktop needs a LLeMbas 2.0 server or later.": "LLeMbas Desktop nécessite un serveur LLeMbas 2.0 ou plus récent.",
"Connect": "Se connecter",
"Address of your LLeMbas server": "Adresse de votre serveur LLeMbas",
"The app signs in to your server once, in your browser, as any device does. It may then read and write your chats, as the web interface does.": "L'application se connecte une fois à votre serveur, dans votre navigateur, comme tout appareil. Elle peut ensuite lire et écrire vos discussions, comme l'interface web.",
"Open the page again": "Rouvrir la page",
"Waiting for the browser…": "En attente du navigateur…",
"agent off": "agent arrêté",
"not linked": "non relié",
"agent starting…": "agent en démarrage…",
"agent running": "agent actif",
"agent running (service)": "agent actif (service)",
"agent stopped": "agent interrompu",
"agent: no folders": "agent : aucun dossier",
"Agent stopped: %(why)s": "L'agent s'est arrêté : %(why)s",
"update %(version)s": "mise à jour %(version)s",
"update": "mise à jour",
"LLeMbas %(version)s is available (this is %(current)s)": "LLeMbas %(version)s est disponible (ceci est la %(current)s)",
"This file is too big to show here (%(size)s).": "Ce fichier est trop volumineux pour être affiché (%(size)s).",
"This is not a text file; it cannot be shown here.": "Ce n'est pas un fichier texte ; il ne peut pas être affiché ici.",
"Page": "Page",
"Source": "Source",
},
"hu": {
"Menu": "Menü",
"Minimise": "Kis méret",
"Maximise": "Teljes méret",
"Close (LLeMbas stays in the tray)": "Bezárás (a LLeMbas a tálcán marad)",
"Read again": "Újraolvasás",
"Waiting for the reply before it": "Az előző válaszra vár",
"Stopped.": "Leállítva.",
"Taken in while it ran:": "Futás közben átvéve:",
"Cut short here; the whole of it is in the web interface.": "Itt rövidítve; a teljes a webes felületen van.",
"Open in the viewer": "Megnyitás a megjelenítőben",
"Shown by the agent": "Az ügynök mutatta",
"This computer": "Ez a számítógép",
"Server": "Kiszolgáló",
"Writing…": "Írás…",
"The connection to the reply was lost: %(why)s": "A kapcsolat a válasszal megszakadt: %(why)s",
"Waiting for your answer": "Az Ön válaszára vár",
"The agent asks to run %(tool)s:": "Az ügynök a(z) %(tool)s futtatását kéri:",
"The agent asks:": "Az ügynök kérdezi:",
"Command": "Parancs",
"Recommended": "Ajánlott",
"Or type an answer": "Vagy írjon választ",
"Your answer": "Az Ön válasza",
"Always allow": "Mindig engedélyez",
"Not yet": "Még nem",
"Another device": "Másik eszköz",
"Loading…": "Betöltés…",
"Earlier messages": "Korábbi üzenetek",
"New agent chat": "Új ügynökcsevegés",
"No model is available to this account.": "Ennek a fióknak nem érhető el modell.",
"An agent chat works in a folder on this computer, through the agent built into this app.": "Az ügynökcsevegés egy mappában dolgozik ezen a számítógépen, az alkalmazásba épített ügynökön keresztül.",
"The agent is not connected to the server yet: start it, or link this computer, under Settings.": "Az ügynök még nem kapcsolódik a szerverhez: indítsa el, vagy kapcsolja össze ezt a számítógépet a Beállításokban.",
"Folder": "Mappa",
"Only the agent's folders: Settings, Project folders.": "Csak az ügynök mappái: Beállítások, Projektmappák.",
"No folder yet: add one under Settings, Project folders.": "Még nincs mappa: adjon hozzá egyet a Beállítások, Projektmappák alatt.",
"A chat asking for more than the folder allows is lowered to it.": "A csevegés, amely többet kér, mint amit a mappa enged, erre lesz csökkentve.",
"Empty folder": "Üres mappa",
"No project folder yet: the agent can open nothing on this computer.": "Még nincs projektmappa: az ügynök semmit sem nyithat meg ezen a számítógépen.",
"Add folder…": "Mappa hozzáadása…",
"This server does not offer its files to the app yet.": "Ez a szerver még nem kínálja fel a fájljait az alkalmazásnak.",
"No agent chat yet. Start one: it works in a folder on this computer.": "Még nincs ügynökcsevegés. Indítson egyet: egy mappában dolgozik ezen a számítógépen.",
"No chat yet.": "Még nincs csevegés.",
"Other devices": "Más eszközök",
"More": "Több",
"The reply is ready.": "A válasz kész.",
"The agent has finished.": "Az ügynök befejezte.",
"The agent is off.": "Az ügynök ki van kapcsolva.",
"This computer is not linked to the server yet.": "Ez a számítógép még nincs összekapcsolva a kiszolgálóval.",
"The agent is starting…": "Az ügynök indul…",
"The agent is running: agent chats can use this computer.": "Az ügynök fut: az ügynök-csevegések használhatják ezt a számítógépet.",
"A LLeMbas CLI service already runs here (pid %(pid)s); it is this computer's agent.": "Itt már fut egy LLeMbas CLI szolgáltatás (pid %(pid)s); ez a számítógép ügynöke.",
"The agent stopped: %(why)s. Trying again shortly.": "Az ügynök leállt: %(why)s. Hamarosan újra próbálja.",
"The agent is connected, but may open no folder yet: add one below.": "Az ügynök csatlakozott, de még egy mappát sem nyithat meg: adjon hozzá egyet lent.",
"Signed in as %(who)s.": "Bejelentkezve: %(who)s.",
"Signing out gives the app's sign-in up on the server; the agent's link stays. Sign out to use another server.": "Kijelentkezéskor az alkalmazás lemond a szerveren lévő bejelentkezéséről; az ügynök kapcsolata megmarad. Más szerver használatához jelentkezzen ki.",
"The agent lets agent chats on your server work in this computer's projects. It is the LLeMbas CLI, built in, running in the background while the app runs.": "Az ügynök lehetővé teszi, hogy a kiszolgálón futó ügynök-csevegések ennek a számítógépnek a projektjeiben dolgozzanak. Ez a beépített LLeMbas CLI, amely a háttérben fut, amíg az alkalmazás fut.",
"Approve this code in the page that opened in your browser:": "Hagyja jóvá ezt a kódot a böngészőjében megnyílt oldalon:",
"Link again": "Újra összekapcsolás",
"Link this computer": "A számítógép összekapcsolása",
"Stop the agent": "Ügynök leállítása",
"Start the agent": "Ügynök indítása",
"No folder yet: the agent can open nothing. Add the folder of a project.": "Még nincs mappa: az ügynök semmit nem nyithat meg. Adja hozzá egy projekt mappáját.",
"Remove %(dir)s": "%(dir)s eltávolítása",
"Manual — asks first": "Manual — előbb kérdez",
"Edit — asks before commands": "Edit — parancsok előtt kérdez",
"Auto — asks nothing": "Auto — semmit nem kérdez",
"Plan — changes nothing": "Plan — semmit nem változtat",
"Project folders": "Projektmappák",
"Agent chats can work in these folders and anything inside them — nowhere else on this computer.": "Az ügynökcsevegések ezekben a mappákban és mindenben, ami bennük van, dolgozhatnak — sehol máshol ezen a számítógépen.",
"The most an agent chat may do here": "A legtöbb, amit egy ügynök-csevegés itt tehet",
"A chat asking for more is lowered to this.": "Az ennél többet kérő csevegés erre korlátozódik.",
"Let the server open a terminal here": "A kiszolgáló nyithasson itt terminált",
"A shell as you, in one of these folders.": "Egy shell az Ön nevében, ezek egyik mappájában.",
"Tell me when a reply or an agent's work is finished while I am elsewhere": "Szóljon, ha egy válasz vagy az ügynök munkája elkészül, amíg máshol vagyok",
"About": "Névjegy",
"Install LLeMbas %(version)s…": "LLeMbas %(version)s telepítése…",
"Check for updates…": "Frissítések keresése…",
"Looking for a LLeMbas server there…": "LLeMbas-kiszolgáló keresése ott…",
"%(name)s, LLeMbas %(version)s.": "%(name)s, LLeMbas %(version)s.",
"LLeMbas Desktop needs a LLeMbas 2.0 server or later.": "A LLeMbas Desktophoz LLeMbas 2.0 vagy újabb szerver kell.",
"Connect": "Csatlakozás",
"Address of your LLeMbas server": "A LLeMbas-kiszolgáló címe",
"The app signs in to your server once, in your browser, as any device does. It may then read and write your chats, as the web interface does.": "Az alkalmazás egyszer jelentkezik be a szerverére, a böngészőjében, mint bármely eszköz. Ezután olvashatja és írhatja a csevegéseit, mint a webes felület.",
"Open the page again": "Oldal újbóli megnyitása",
"Waiting for the browser…": "Várakozás a böngészőre…",
"agent off": "ügynök kikapcsolva",
"not linked": "nincs összekapcsolva",
"agent starting…": "ügynök indul…",
"agent running": "ügynök fut",
"agent running (service)": "ügynök fut (szolgáltatás)",
"agent stopped": "ügynök leállt",
"agent: no folders": "ügynök: nincs mappa",
"Agent stopped: %(why)s": "Az ügynök leállt: %(why)s",
"update %(version)s": "frissítés: %(version)s",
"update": "frissítés",
"LLeMbas %(version)s is available (this is %(current)s)": "Elérhető a LLeMbas %(version)s (ez a %(current)s)",
"This file is too big to show here (%(size)s).": "Ez a fájl túl nagy a megjelenítéshez (%(size)s).",
"This is not a text file; it cannot be shown here.": "Ez nem szövegfájl; itt nem jeleníthető meg.",
"Page": "Oldal",
"Source": "Forrás",
},
"it": {
"Menu": "Menu",
"Minimise": "Riduci a icona",
"Maximise": "Ingrandisci",
"Close (LLeMbas stays in the tray)": "Chiudi (LLeMbas resta nell'area di notifica)",
"Read again": "Rileggi",
"Waiting for the reply before it": "In attesa della risposta precedente",
"Stopped.": "Interrotto.",
"Taken in while it ran:": "Accolto durante l'esecuzione:",
"Cut short here; the whole of it is in the web interface.": "Troncato qui; il resto è nell'interfaccia web.",
"Open in the viewer": "Apri nel visualizzatore",
"Shown by the agent": "Mostrato dall'agente",
"This computer": "Questo computer",
"Server": "Server",
"Writing…": "Sta scrivendo…",
"The connection to the reply was lost: %(why)s": "La connessione alla risposta si è interrotta: %(why)s",
"Waiting for your answer": "In attesa della sua risposta",
"The agent asks to run %(tool)s:": "L'agente chiede di eseguire %(tool)s:",
"The agent asks:": "L'agente chiede:",
"Command": "Comando",
"Recommended": "Consigliato",
"Or type an answer": "Oppure scriva una risposta",
"Your answer": "La sua risposta",
"Always allow": "Consenti sempre",
"Not yet": "Non ancora",
"Another device": "Un altro dispositivo",
"Loading…": "Caricamento…",
"Earlier messages": "Messaggi precedenti",
"New agent chat": "Nuova chat con agente",
"No model is available to this account.": "Nessun modello è disponibile per questo account.",
"An agent chat works in a folder on this computer, through the agent built into this app.": "Una chat con agente lavora in una cartella di questo computer, tramite l'agente integrato in questa app.",
"The agent is not connected to the server yet: start it, or link this computer, under Settings.": "L'agente non è ancora connesso al server: lo avvii o colleghi questo computer nelle Impostazioni.",
"Folder": "Cartella",
"Only the agent's folders: Settings, Project folders.": "Solo le cartelle dell'agente: Impostazioni, Cartelle di progetto.",
"No folder yet: add one under Settings, Project folders.": "Nessuna cartella ancora: ne aggiunga una in Impostazioni, Cartelle di progetto.",
"A chat asking for more than the folder allows is lowered to it.": "Una chat che chiede più di quanto la cartella consente viene ridotta a quello.",
"Empty folder": "Cartella vuota",
"No project folder yet: the agent can open nothing on this computer.": "Nessuna cartella di progetto ancora: l'agente non può aprire nulla su questo computer.",
"Add folder…": "Aggiungi cartella…",
"This server does not offer its files to the app yet.": "Questo server non offre ancora i suoi file all'app.",
"No agent chat yet. Start one: it works in a folder on this computer.": "Nessuna chat con agente ancora. Ne inizi una: lavora in una cartella di questo computer.",
"No chat yet.": "Nessuna chat ancora.",
"Other devices": "Altri dispositivi",
"More": "Altro",
"The reply is ready.": "La risposta è pronta.",
"The agent has finished.": "L'agente ha finito.",
"The agent is off.": "L'agente è spento.",
"This computer is not linked to the server yet.": "Questo computer non è ancora collegato al server.",
"The agent is starting…": "L'agente si sta avviando…",
"The agent is running: agent chats can use this computer.": "L'agente è in esecuzione: le chat agente possono usare questo computer.",
"A LLeMbas CLI service already runs here (pid %(pid)s); it is this computer's agent.": "Un servizio LLeMbas CLI è già in esecuzione qui (pid %(pid)s); è l'agente di questo computer.",
"The agent stopped: %(why)s. Trying again shortly.": "L'agente si è fermato: %(why)s. Tra poco riprova.",
"The agent is connected, but may open no folder yet: add one below.": "L'agente è connesso, ma non può ancora aprire nessuna cartella: aggiungine una qui sotto.",
"Signed in as %(who)s.": "Accesso effettuato come %(who)s.",
"Signing out gives the app's sign-in up on the server; the agent's link stays. Sign out to use another server.": "Uscendo, l'app rinuncia al suo accesso sul server; il collegamento dell'agente resta. Esca per usare un altro server.",
"The agent lets agent chats on your server work in this computer's projects. It is the LLeMbas CLI, built in, running in the background while the app runs.": "L'agente permette alle chat agente del tuo server di lavorare nei progetti di questo computer. È il LLeMbas CLI, integrato, in esecuzione in background finché l'app è aperta.",
"Approve this code in the page that opened in your browser:": "Approvi questo codice nella pagina che si è aperta nel suo browser:",
"Link again": "Collega di nuovo",
"Link this computer": "Collega questo computer",
"Stop the agent": "Ferma l'agente",
"Start the agent": "Avvia l'agente",
"No folder yet: the agent can open nothing. Add the folder of a project.": "Ancora nessuna cartella: l'agente non può aprire nulla. Aggiungi la cartella di un progetto.",
"Remove %(dir)s": "Rimuovi %(dir)s",
"Manual — asks first": "Manual — chiede prima",
"Edit — asks before commands": "Edit — chiede prima dei comandi",
"Auto — asks nothing": "Auto — non chiede nulla",
"Plan — changes nothing": "Plan — non cambia nulla",
"Project folders": "Cartelle dei progetti",
"Agent chats can work in these folders and anything inside them — nowhere else on this computer.": "Le chat con agente possono lavorare in queste cartelle e in tutto ciò che contengono — in nessun altro punto di questo computer.",
"The most an agent chat may do here": "Il massimo che una chat agente può fare qui",
"A chat asking for more is lowered to this.": "Una chat che chiede di più viene limitata a questo.",
"Let the server open a terminal here": "Lascia che il server apra un terminale qui",
"A shell as you, in one of these folders.": "Una shell con il tuo utente, in una di queste cartelle.",
"Tell me when a reply or an agent's work is finished while I am elsewhere": "Avvisami quando una risposta o il lavoro di un agente è finito mentre sono altrove",
"About": "Informazioni",
"Install LLeMbas %(version)s…": "Installa LLeMbas %(version)s…",
"Check for updates…": "Cerca aggiornamenti…",
"Looking for a LLeMbas server there…": "Cerco un server LLeMbas lì…",
"%(name)s, LLeMbas %(version)s.": "%(name)s, LLeMbas %(version)s.",
"LLeMbas Desktop needs a LLeMbas 2.0 server or later.": "LLeMbas Desktop richiede un server LLeMbas 2.0 o successivo.",
"Connect": "Connetti",
"Address of your LLeMbas server": "Indirizzo del tuo server LLeMbas",
"The app signs in to your server once, in your browser, as any device does. It may then read and write your chats, as the web interface does.": "L'app accede al suo server una volta, nel suo browser, come ogni dispositivo. Poi può leggere e scrivere le sue chat, come l'interfaccia web.",
"Open the page again": "Riapri la pagina",
"Waiting for the browser…": "In attesa del browser…",
"agent off": "agente spento",
"not linked": "non collegato",
"agent starting…": "agente in avvio…",
"agent running": "agente attivo",
"agent running (service)": "agente attivo (servizio)",
"agent stopped": "agente fermato",
"agent: no folders": "agente: nessuna cartella",
"Agent stopped: %(why)s": "L'agente si è fermato: %(why)s",
"update %(version)s": "aggiorna a %(version)s",
"update": "aggiorna",
"LLeMbas %(version)s is available (this is %(current)s)": "È disponibile LLeMbas %(version)s (questa è la %(current)s)",
"This file is too big to show here (%(size)s).": "Questo file è troppo grande per essere mostrato (%(size)s).",
"This is not a text file; it cannot be shown here.": "Questo non è un file di testo; non può essere mostrato qui.",
"Page": "Pagina",
"Source": "Sorgente",
},
"pl": {
"Menu": "Menu",
"Minimise": "Minimalizuj",
"Maximise": "Maksymalizuj",
"Close (LLeMbas stays in the tray)": "Zamknij (LLeMbas zostaje w zasobniku systemowym)",
"Read again": "Wczytaj ponownie",
"Waiting for the reply before it": "Czeka na odpowiedź przed nią",
"Stopped.": "Zatrzymano.",
"Taken in while it ran:": "Przejęte w trakcie działania:",
"Cut short here; the whole of it is in the web interface.": "Tu skrócone; całość jest w interfejsie WWW.",
"Open in the viewer": "Otwórz w podglądzie",
"Shown by the agent": "Pokazane przez agenta",
"This computer": "Ten komputer",
"Server": "Serwer",
"Writing…": "Pisze…",
"The connection to the reply was lost: %(why)s": "Połączenie z odpowiedzią zostało zerwane: %(why)s",
"Waiting for your answer": "Czeka na Twoją odpowiedź",
"The agent asks to run %(tool)s:": "Agent prosi o uruchomienie %(tool)s:",
"The agent asks:": "Agent pyta:",
"Command": "Polecenie",
"Recommended": "Zalecane",
"Or type an answer": "Albo wpisz odpowiedź",
"Your answer": "Twoja odpowiedź",
"Always allow": "Zawsze zezwalaj",
"Not yet": "Jeszcze nie",
"Another device": "Inne urządzenie",
"Loading…": "Wczytywanie…",
"Earlier messages": "Wcześniejsze wiadomości",
"New agent chat": "Nowy czat z agentem",
"No model is available to this account.": "Dla tego konta nie jest dostępny żaden model.",
"An agent chat works in a folder on this computer, through the agent built into this app.": "Czat z agentem pracuje w folderze na tym komputerze, przez agenta wbudowanego w tę aplikację.",
"The agent is not connected to the server yet: start it, or link this computer, under Settings.": "Agent nie jest jeszcze połączony z serwerem: uruchom go lub połącz ten komputer w Ustawieniach.",
"Folder": "Folder",
"Only the agent's folders: Settings, Project folders.": "Tylko foldery agenta: Ustawienia, Foldery projektów.",
"No folder yet: add one under Settings, Project folders.": "Jeszcze nie ma folderu: dodaj go w Ustawieniach, Foldery projektów.",
"A chat asking for more than the folder allows is lowered to it.": "Czat, który chce więcej, niż folder pozwala, zostaje do tego obniżony.",
"Empty folder": "Pusty folder",
"No project folder yet: the agent can open nothing on this computer.": "Jeszcze nie ma folderu projektu: agent nie może niczego otworzyć na tym komputerze.",
"Add folder…": "Dodaj folder…",
"This server does not offer its files to the app yet.": "Ten serwer nie udostępnia jeszcze swoich plików aplikacji.",
"No agent chat yet. Start one: it works in a folder on this computer.": "Jeszcze nie ma czatu z agentem. Zacznij go: pracuje w folderze na tym komputerze.",
"No chat yet.": "Jeszcze nie ma czatu.",
"Other devices": "Inne urządzenia",
"More": "Więcej",
"The reply is ready.": "Odpowiedź jest gotowa.",
"The agent has finished.": "Agent skończył.",
"The agent is off.": "Agent jest wyłączony.",
"This computer is not linked to the server yet.": "Ten komputer nie jest jeszcze połączony z serwerem.",
"The agent is starting…": "Agent się uruchamia…",
"The agent is running: agent chats can use this computer.": "Agent działa: czaty agenta mogą używać tego komputera.",
"A LLeMbas CLI service already runs here (pid %(pid)s); it is this computer's agent.": "Usługa LLeMbas CLI już tu działa (pid %(pid)s); jest agentem tego komputera.",
"The agent stopped: %(why)s. Trying again shortly.": "Agent się zatrzymał: %(why)s. Za chwilę spróbuje ponownie.",
"The agent is connected, but may open no folder yet: add one below.": "Agent jest połączony, ale nie może jeszcze otworzyć żadnego folderu: dodaj go poniżej.",
"Signed in as %(who)s.": "Zalogowano jako %(who)s.",
"Signing out gives the app's sign-in up on the server; the agent's link stays. Sign out to use another server.": "Wylogowanie zrzeka się logowania aplikacji na serwerze; połączenie agenta zostaje. Wyloguj się, aby użyć innego serwera.",
"The agent lets agent chats on your server work in this computer's projects. It is the LLeMbas CLI, built in, running in the background while the app runs.": "Agent pozwala czatom agenta z Twojego serwera pracować w projektach na tym komputerze. To wbudowane LLeMbas CLI, działające w tle, dopóki działa aplikacja.",
"Approve this code in the page that opened in your browser:": "Zatwierdź ten kod na stronie, która otworzyła się w przeglądarce:",
"Link again": "Połącz ponownie",
"Link this computer": "Połącz ten komputer",
"Stop the agent": "Zatrzymaj agenta",
"Start the agent": "Uruchom agenta",
"No folder yet: the agent can open nothing. Add the folder of a project.": "Nie ma jeszcze folderu: agent nie może nic otworzyć. Dodaj folder projektu.",
"Remove %(dir)s": "Usuń %(dir)s",
"Manual — asks first": "Manual — najpierw pyta",
"Edit — asks before commands": "Edit — pyta przed poleceniami",
"Auto — asks nothing": "Auto — o nic nie pyta",
"Plan — changes nothing": "Plan — niczego nie zmienia",
"Project folders": "Foldery projektów",
"Agent chats can work in these folders and anything inside them — nowhere else on this computer.": "Czaty z agentem mogą pracować w tych folderach i we wszystkim, co zawierają — nigdzie indziej na tym komputerze.",
"The most an agent chat may do here": "Najwięcej, co czat agenta może tu zrobić",
"A chat asking for more is lowered to this.": "Czat, który prosi o więcej, zostaje ograniczony do tego.",
"Let the server open a terminal here": "Pozwól serwerowi otworzyć tu terminal",
"A shell as you, in one of these folders.": "Powłoka na Twoim koncie, w jednym z tych folderów.",
"Tell me when a reply or an agent's work is finished while I am elsewhere": "Powiadom mnie, gdy odpowiedź lub praca agenta jest gotowa, a ja jestem gdzie indziej",
"About": "O aplikacji",
"Install LLeMbas %(version)s…": "Zainstaluj LLeMbas %(version)s…",
"Check for updates…": "Sprawdź aktualizacje…",
"Looking for a LLeMbas server there…": "Szukam tam serwera LLeMbas…",
"%(name)s, LLeMbas %(version)s.": "%(name)s, LLeMbas %(version)s.",
"LLeMbas Desktop needs a LLeMbas 2.0 server or later.": "LLeMbas Desktop wymaga serwera LLeMbas 2.0 lub nowszego.",
"Connect": "Połącz",
"Address of your LLeMbas server": "Adres Twojego serwera LLeMbas",
"The app signs in to your server once, in your browser, as any device does. It may then read and write your chats, as the web interface does.": "Aplikacja loguje się do Twojego serwera raz, w przeglądarce, jak każde urządzenie. Potem może czytać i pisać Twoje czaty, jak interfejs WWW.",
"Open the page again": "Otwórz stronę ponownie",
"Waiting for the browser…": "Czekam na przeglądarkę…",
"agent off": "agent wyłączony",
"not linked": "niepołączony",
"agent starting…": "agent się uruchamia…",
"agent running": "agent działa",
"agent running (service)": "agent działa (usługa)",
"agent stopped": "agent zatrzymany",
"agent: no folders": "agent: brak folderów",
"Agent stopped: %(why)s": "Agent się zatrzymał: %(why)s",
"update %(version)s": "aktualizacja %(version)s",
"update": "aktualizacja",
"LLeMbas %(version)s is available (this is %(current)s)": "Dostępny jest LLeMbas %(version)s (to jest %(current)s)",
"This file is too big to show here (%(size)s).": "Ten plik jest za duży, by go tu pokazać (%(size)s).",
"This is not a text file; it cannot be shown here.": "To nie jest plik tekstowy; nie można go tu pokazać.",
"Page": "Strona",
"Source": "Źródło",
},
"sk": {
"Menu": "Ponuka",
"Minimise": "Minimalizovať",
"Maximise": "Maximalizovať",
"Close (LLeMbas stays in the tray)": "Zavrieť (LLeMbas zostane v oznamovacej oblasti)",
"Read again": "Načítať znova",
"Waiting for the reply before it": "Čaká na odpoveď pred ňou",
"Stopped.": "Zastavené.",
"Taken in while it ran:": "Prevzaté počas behu:",
"Cut short here; the whole of it is in the web interface.": "Tu skrátené; celé je to vo webovom rozhraní.",
"Open in the viewer": "Otvoriť v prehliadači súborov",
"Shown by the agent": "Ukázal agent",
"This computer": "Tento počítač",
"Server": "Server",
"Writing…": "Píše sa…",
"The connection to the reply was lost: %(why)s": "Spojenie s odpoveďou sa prerušilo: %(why)s",
"Waiting for your answer": "Čaká na vašu odpoveď",
"The agent asks to run %(tool)s:": "Agent žiada spustiť %(tool)s:",
"The agent asks:": "Agent sa pýta:",
"Command": "Príkaz",
"Recommended": "Odporúčané",
"Or type an answer": "Alebo napíšte odpoveď",
"Your answer": "Vaša odpoveď",
"Always allow": "Vždy povoliť",
"Not yet": "Ešte nie",
"Another device": "Iné zariadenie",
"Loading…": "Načítava sa…",
"Earlier messages": "Staršie správy",
"New agent chat": "Nová agentská konverzácia",
"No model is available to this account.": "Tomuto účtu nie je dostupný žiadny model.",
"An agent chat works in a folder on this computer, through the agent built into this app.": "Agentská konverzácia pracuje v priečinku na tomto počítači cez agenta vstavaného v tejto aplikácii.",
"The agent is not connected to the server yet: start it, or link this computer, under Settings.": "Agent ešte nie je pripojený k serveru: spustite ho alebo prepojte tento počítač v Nastaveniach.",
"Folder": "Priečinok",
"Only the agent's folders: Settings, Project folders.": "Len priečinky agenta: Nastavenia, Priečinky projektov.",
"No folder yet: add one under Settings, Project folders.": "Zatiaľ žiadny priečinok: pridajte ho v Nastaveniach, Priečinky projektov.",
"A chat asking for more than the folder allows is lowered to it.": "Konverzácia, ktorá chce viac, než priečinok dovoľuje, je znížená na to.",
"Empty folder": "Prázdny priečinok",
"No project folder yet: the agent can open nothing on this computer.": "Zatiaľ žiadny priečinok projektu: agent na tomto počítači nemôže nič otvoriť.",
"Add folder…": "Pridať priečinok…",
"This server does not offer its files to the app yet.": "Tento server zatiaľ neponúka svoje súbory aplikácii.",
"No agent chat yet. Start one: it works in a folder on this computer.": "Zatiaľ žiadna agentská konverzácia. Začnite ju: pracuje v priečinku na tomto počítači.",
"No chat yet.": "Zatiaľ žiadna konverzácia.",
"Other devices": "Iné zariadenia",
"More": "Viac",
"The reply is ready.": "Odpoveď je hotová.",
"The agent has finished.": "Agent dokončil prácu.",
"The agent is off.": "Agent je vypnutý.",
"This computer is not linked to the server yet.": "Tento počítač ešte nie je prepojený so serverom.",
"The agent is starting…": "Agent sa spúšťa…",
"The agent is running: agent chats can use this computer.": "Agent beží: agentské konverzácie môžu používať tento počítač.",
"A LLeMbas CLI service already runs here (pid %(pid)s); it is this computer's agent.": "Služba LLeMbas CLI tu už beží (pid %(pid)s); je agentom tohto počítača.",
"The agent stopped: %(why)s. Trying again shortly.": "Agent sa zastavil: %(why)s. O chvíľu to skúsi znova.",
"The agent is connected, but may open no folder yet: add one below.": "Agent je pripojený, ale zatiaľ nesmie otvoriť žiadny priečinok: pridajte ho nižšie.",
"Signed in as %(who)s.": "Prihlásený ako %(who)s.",
"Signing out gives the app's sign-in up on the server; the agent's link stays. Sign out to use another server.": "Odhlásením sa prihlásenie aplikácie na serveri zruší; prepojenie agenta zostane. Ak chcete použiť iný server, odhláste sa.",
"The agent lets agent chats on your server work in this computer's projects. It is the LLeMbas CLI, built in, running in the background while the app runs.": "Agent umožňuje agentským konverzáciám na vašom serveri pracovať v projektoch na tomto počítači. Je to vstavané LLeMbas CLI, ktoré beží na pozadí, kým beží aplikácia.",
"Approve this code in the page that opened in your browser:": "Potvrďte tento kód na stránke, ktorá sa otvorila vo vašom prehliadači:",
"Link again": "Prepojiť znova",
"Link this computer": "Prepojiť tento počítač",
"Stop the agent": "Zastaviť agenta",
"Start the agent": "Spustiť agenta",
"No folder yet: the agent can open nothing. Add the folder of a project.": "Zatiaľ žiadny priečinok: agent nemôže nič otvoriť. Pridajte priečinok projektu.",
"Remove %(dir)s": "Odstrániť %(dir)s",
"Manual — asks first": "Manual — najprv sa opýta",
"Edit — asks before commands": "Edit — pýta sa pred príkazmi",
"Auto — asks nothing": "Auto — na nič sa nepýta",
"Plan — changes nothing": "Plan — nič nemení",
"Project folders": "Priečinky projektov",
"Agent chats can work in these folders and anything inside them — nowhere else on this computer.": "Agentské konverzácie môžu pracovať v týchto priečinkoch a vo všetkom, čo obsahujú — nikde inde na tomto počítači.",
"The most an agent chat may do here": "Najviac, čo tu agentská konverzácia smie",
"A chat asking for more is lowered to this.": "Konverzácia, ktorá chce viac, je znížená na toto.",
"Let the server open a terminal here": "Dovoliť serveru otvoriť tu terminál",
"A shell as you, in one of these folders.": "Shell pod vaším účtom, v jednom z týchto priečinkov.",
"Tell me when a reply or an agent's work is finished while I am elsewhere": "Upozorniť ma, keď je odpoveď alebo práca agenta hotová, kým som inde",
"About": "O aplikácii",
"Install LLeMbas %(version)s…": "Nainštalovať LLeMbas %(version)s…",
"Check for updates…": "Skontrolovať aktualizácie…",
"Looking for a LLeMbas server there…": "Hľadám tam server LLeMbas…",
"%(name)s, LLeMbas %(version)s.": "%(name)s, LLeMbas %(version)s.",
"LLeMbas Desktop needs a LLeMbas 2.0 server or later.": "LLeMbas Desktop potrebuje server LLeMbas 2.0 alebo novší.",
"Connect": "Pripojiť",
"Address of your LLeMbas server": "Adresa vášho servera LLeMbas",
"The app signs in to your server once, in your browser, as any device does. It may then read and write your chats, as the web interface does.": "Aplikácia sa na váš server prihlási raz, vo vašom prehliadači, ako každé zariadenie. Potom môže čítať a písať vaše konverzácie, ako webové rozhranie.",
"Open the page again": "Otvoriť stránku znova",
"Waiting for the browser…": "Čaká sa na prehliadač…",
"agent off": "agent vypnutý",
"not linked": "neprepojené",
"agent starting…": "agent sa spúšťa…",
"agent running": "agent beží",
"agent running (service)": "agent beží (služba)",
"agent stopped": "agent zastavený",
"agent: no folders": "agent: žiadne priečinky",
"Agent stopped: %(why)s": "Agent sa zastavil: %(why)s",
"update %(version)s": "aktualizácia %(version)s",
"update": "aktualizácia",
"LLeMbas %(version)s is available (this is %(current)s)": "Je k dispozícii LLeMbas %(version)s (toto je %(current)s)",
"This file is too big to show here (%(size)s).": "Tento súbor je príliš veľký na zobrazenie (%(size)s).",
"This is not a text file; it cannot be shown here.": "Toto nie je textový súbor; nedá sa tu zobraziť.",
"Page": "Stránka",
"Source": "Zdroj",
},
}
FIELD = re.compile(r"%\((\w+)\)s")
def server_catalogue(server: Path, lang: str) -> dict[str, str]:
"""The server's MESSAGES for `lang`: the module loaded from its file, nothing imported."""
path = server / "src" / "lembas" / "web" / "i18n" / f"{lang}.py"
if not path.is_file():
sys.exit(f"gen-i18n: {path} is missing: is {server} the LLeMbas server checkout?")
spec = importlib.util.spec_from_file_location(f"lembas_i18n_{lang}", path)
assert spec and spec.loader
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)
messages = getattr(module, "MESSAGES", None)
if not isinstance(messages, dict):
sys.exit(f"gen-i18n: {path} has no MESSAGES")
return messages
def main() -> None:
server = Path(sys.argv[1] if len(sys.argv) > 1 else os.environ.get("LEMBAS_SERVER", ROOT.parent / "LLeMbas"))
catalogue: dict[str, dict[str, str]] = {}
problems = 0
for lang in LANGS:
theirs = server_catalogue(server, lang)
ours = OWN.get(lang, {})
table: dict[str, str] = {}
from_server = 0
for key in KEYS:
text = theirs.get(key)
if text:
from_server += 1
else:
text = ours.get(key)
if not text:
print(f"gen-i18n: {lang}: no translation of {key!r} (English will show)", file=sys.stderr)
problems += 1
continue
if set(FIELD.findall(text)) != set(FIELD.findall(key)):
print(f"gen-i18n: {lang}: the fields of {text!r} do not match {key!r}", file=sys.stderr)
problems += 1
continue
table[key] = text
for key in ours:
if key not in KEYS:
print(f"gen-i18n: {lang}: OWN has {key!r}, which no page uses", file=sys.stderr)
problems += 1
catalogue[lang] = table
print(f"gen-i18n: {lang}: {len(table)} of {len(KEYS)} ({from_server} from the server)")
body = json.dumps(catalogue, ensure_ascii=False, indent=2, sort_keys=True)
out = (
"// The app's own pages' words in the server's languages. GENERATED by scripts/gen-i18n.py:\n"
"// the sentences the server also has come from its web/i18n catalogues, the rest from the\n"
"// script's own table. Do not edit; run the script.\n"
"//\n"
"// `t(text, fields)` is the page's English with `%(name)s` fields, as on the server; a\n"
"// missing entry is the English. The language is the system's (navigator.language),\n"
"// English unless it is one of these. Elements marked `data-i18n` (their text) and\n"
"// `data-i18n-title`, `data-i18n-aria-label`, `data-i18n-placeholder` (that attribute)\n"
"// are translated once the page is parsed; this script is deferred, before the page's.\n"
'"use strict"\n'
"\n"
f"const LEMBAS_I18N = {body}\n"
"\n"
"const LEMBAS_LANG = (() => {\n"
' const code = String(navigator.language || "").slice(0, 2).toLowerCase()\n'
' return Object.prototype.hasOwnProperty.call(LEMBAS_I18N, code) ? code : "en"\n'
"})()\n"
"document.documentElement.lang = LEMBAS_LANG\n"
"\n"
"function t(text, fields) {\n"
' const key = String(text).replace(/\\s+/g, " ").trim()\n'
" const table = LEMBAS_I18N[LEMBAS_LANG] || {}\n"
" const out = Object.prototype.hasOwnProperty.call(table, key) ? table[key] : key\n"
" if (!fields) return out\n"
" return out.replace(/%\\((\\w+)\\)s/g, (all, name) =>\n"
" Object.prototype.hasOwnProperty.call(fields, name) ? String(fields[name]) : all)\n"
"}\n"
"\n"
"function translatePage() {\n"
' for (const el of document.querySelectorAll("[data-i18n]")) el.textContent = t(el.textContent)\n'
' for (const attr of ["title", "aria-label", "placeholder"]) {\n'
" for (const el of document.querySelectorAll(`[data-i18n-${attr}]`)) {\n"
" el.setAttribute(attr, t(el.getAttribute(attr)))\n"
" }\n"
" }\n"
"}\n"
'if (document.readyState === "loading") document.addEventListener("DOMContentLoaded", translatePage)\n'
"else translatePage()\n"
)
OUT.write_text(out, encoding="utf-8")
print(f"gen-i18n: wrote {OUT.relative_to(ROOT)} ({len(LANGS)} languages, {len(KEYS)} sentences)")
if problems:
sys.exit(1)
if __name__ == "__main__":
main()