diff --git a/crates/ironclaw_webui/frontend/src/i18n/ar.ts b/crates/ironclaw_webui/frontend/src/i18n/ar.ts index 9bf10f5ee7c..ba8cf653817 100644 --- a/crates/ironclaw_webui/frontend/src/i18n/ar.ts +++ b/crates/ironclaw_webui/frontend/src/i18n/ar.ts @@ -222,7 +222,7 @@ registerPack("ar", { // Extensions tabs "extensions.installed": "مثبتة", "extensions.channels": "القنوات", - "extensions.tools": "Tools", + "extensions.tools": "الأدوات", "extensions.registry": "السجل", // Settings tabs @@ -1237,7 +1237,7 @@ registerPack("ar", { "extensions.reconfigure": "إعادة تكوين", "extensions.configureName": "تكوين {name}", "extensions.allInstalled": "جميع الامتدادات المثبتة", - "tools.installed": "Installed tools", + "tools.installed": "الأدوات المثبتة", "extensions.scope.shared": "مشترك", "extensions.scope.private": "خاص بي", "mcp.installed": "خوادم MCP المثبتة", @@ -1253,49 +1253,49 @@ registerPack("ar", { "extensions.installedSuccess": "تم تثبيت {name}", "extensions.removedSuccess": "تمت إزالة {name}", "extensions.installFailed": "فشل التثبيت", - "extensions.addCustomMcp": "Add MCP server", - "extensions.customMcpPhase.connection": "Connection · Step 1 of 3", - "extensions.customMcpPhase.authentication": "Review · Step 2 of 3", - "extensions.customMcpPhase.review": "Step 2 of 3", - "extensions.customMcpPhase.result": "Result · Step 3 of 3", - "extensions.customMcpPhase.connectionLabel": "Connection", - "extensions.customMcpPhase.authenticationLabel": "Review", - "extensions.customMcpPhase.reviewLabel": "Review", - "extensions.customMcpPhase.resultLabel": "Result", - "extensions.customMcpProgress": "Add an MCP server in three steps", - "extensions.customMcpName": "Server name", - "extensions.customMcpNameHint": "Use a name you will recognize in Extensions.", - "extensions.customMcpId": "Server ID", + "extensions.addCustomMcp": "إضافة خادم MCP", + "extensions.customMcpPhase.connection": "الخطوة 1 من 3", + "extensions.customMcpPhase.authentication": "الخطوة 2 من 3", + "extensions.customMcpPhase.review": "الخطوة 2 من 3", + "extensions.customMcpPhase.result": "الخطوة 3 من 3", + "extensions.customMcpPhase.connectionLabel": "الاتصال", + "extensions.customMcpPhase.authenticationLabel": "المراجعة", + "extensions.customMcpPhase.reviewLabel": "المراجعة", + "extensions.customMcpPhase.resultLabel": "النتيجة", + "extensions.customMcpProgress": "أضف خادم MCP في ثلاث خطوات", + "extensions.customMcpName": "اسم الخادم", + "extensions.customMcpNameHint": "استخدم اسمًا يسهل تمييزه في الإضافات.", + "extensions.customMcpId": "معرّف الخادم", "extensions.customMcpIdGenerated": "ID: {id}", - "extensions.customMcpIdHint": "A unique ID: lowercase letters, numbers, underscores, hyphens, or dots, starting with a letter or number (128 chars max).", - "extensions.customMcpAdvanced": "Advanced options", - "extensions.customMcpRecommended": "Recommended", - "extensions.customMcpEndpoint": "Server address", - "extensions.customMcpRequired": "Name, ID, and endpoint are required.", - "extensions.customMcpHttpsOnly": "The endpoint must use HTTPS.", - "extensions.customMcpNameRequired": "Enter a server name.", - "extensions.customMcpNameTooLong": "Server name must be 256 characters or fewer.", - "extensions.customMcpNameControls": "Server name cannot contain control characters.", - "extensions.customMcpIdRequired": "Enter a server ID.", - "extensions.customMcpIdInvalid": "Server ID must use lowercase letters, numbers, underscores, hyphens, or dots, starting with a letter or number (128 chars max).", - "extensions.customMcpEndpointRequired": "Enter a server address.", - "extensions.customMcpEndpointHttps": "Enter a public HTTPS URL without credentials, fragments, localhost, or an IP address.", - "extensions.customMcpAuthHint": "Choose how this server authenticates. Credentials are configured only after registration.", - "extensions.customMcpReviewHint": "Add it now, then install it from Extensions. Connect an account or add a token if needed.", - "extensions.customMcpAuth.no_auth": "No authentication", - "extensions.customMcpAuth.bearer": "Bearer token", + "extensions.customMcpIdHint": "معرّف فريد يتكون من أحرف صغيرة وأرقام وشرطات سفلية أو واصلات أو نقاط، ويبدأ بحرف أو رقم (128 حرفًا كحد أقصى).", + "extensions.customMcpAdvanced": "خيارات متقدمة", + "extensions.customMcpRecommended": "موصى به", + "extensions.customMcpEndpoint": "عنوان الخادم", + "extensions.customMcpRequired": "الاسم والمعرّف ونقطة النهاية مطلوبة.", + "extensions.customMcpHttpsOnly": "يجب أن تستخدم نقطة النهاية HTTPS.", + "extensions.customMcpNameRequired": "أدخل اسم الخادم.", + "extensions.customMcpNameTooLong": "يجب ألا يتجاوز اسم الخادم 256 حرفًا.", + "extensions.customMcpNameControls": "لا يمكن أن يحتوي اسم الخادم على أحرف تحكم.", + "extensions.customMcpIdRequired": "أدخل معرّف الخادم.", + "extensions.customMcpIdInvalid": "يجب أن يستخدم معرّف الخادم أحرفًا صغيرة وأرقامًا وشرطات سفلية أو واصلات أو نقاط، وأن يبدأ بحرف أو رقم وألا يتجاوز 128 حرفًا.", + "extensions.customMcpEndpointRequired": "أدخل عنوان الخادم.", + "extensions.customMcpEndpointHttps": "أدخل رابط HTTPS عامًا بلا بيانات اعتماد أو أجزاء أو localhost أو عنوان IP.", + "extensions.customMcpAuthHint": "يتصل IronClaw أولًا بلا بيانات اعتماد لاكتشاف الحاجة إلى OAuth أو رمز Bearer. يمكنك تغيير ذلك من الخيارات المتقدمة.", + "extensions.customMcpReviewHint": "أضفه الآن ثم ثبّته من الإضافات. اربط حسابًا أو أضف رمزًا عند الحاجة.", + "extensions.customMcpAuth.no_auth": "بدون مصادقة", + "extensions.customMcpAuth.bearer": "رمز Bearer", "extensions.customMcpAuth.oauth": "OAuth", - "extensions.customMcpAuth.auto": "Automatic detection", - "extensions.customMcpRegister": "Add server", - "extensions.customMcpRegistered": "{name} added", - "extensions.customMcpRegisterFailed": "Could not add this server. Try again.", - "extensions.customMcpSetupRequired": "Registration complete — setup required", - "extensions.customMcpSetupRequiredHint": "Credentials can be added later from this extension's Setup action in the Extensions list.", - "extensions.customMcpReady": "Server added", - "extensions.customMcpReadyHint": "Find it in Extensions. Install it before using it. If it asks for access, connect an account or add a token.", - "extensions.customMcpFinishLater": "Finish later", - "extensions.customMcpContinueSetup": "Continue setup", - "extensions.customMcpProjectionMissing": "The server was added, but it is not showing in Extensions yet. Try again.", + "extensions.customMcpAuth.auto": "الكشف التلقائي", + "extensions.customMcpRegister": "إضافة الخادم", + "extensions.customMcpRegistered": "تمت إضافة {name}", + "extensions.customMcpRegisterFailed": "تعذرت إضافة هذا الخادم. حاول مرة أخرى.", + "extensions.customMcpSetupRequired": "تمت إضافة الخادم — أكمل الإعداد", + "extensions.customMcpSetupRequiredHint": "ابحث عنه في الإضافات، ثم اربط حسابًا أو أضف رمزًا عند الحاجة.", + "extensions.customMcpReady": "تمت إضافة الخادم", + "extensions.customMcpReadyHint": "ابحث عنه في الإضافات وثبّته، ثم اربط حسابًا أو أضف رمزًا عند الحاجة.", + "extensions.customMcpFinishLater": "الإنهاء لاحقًا", + "extensions.customMcpContinueSetup": "متابعة الإعداد", + "extensions.customMcpProjectionMissing": "تمت إضافة الخادم، لكنه لا يظهر في الإضافات بعد. حاول مرة أخرى.", "extensions.removeFailed": "فشلت الإزالة", "extensions.openingAuth": "جارٍ فتح المصادقة...", "extensions.configurationRequired": "التكوين مطلوب", @@ -1343,8 +1343,8 @@ registerPack("ar", { "extensions.reconnect": "إعادة الاتصال", "extensions.emptyInstalledTitle": "لم يتم تثبيت أي ملحقات", "extensions.emptyInstalledDesc": "تصفح علامة التبويب \"التسجيل\" لاكتشاف وتثبيت أدوات وقنوات WASM وخوادم MCP.", - "extensions.emptyToolsTitle": "No tool extensions yet", - "extensions.emptyToolsDesc": "Install an extension with tool capabilities from the registry to see it here.", + "extensions.emptyToolsTitle": "لا توجد إضافات أدوات بعد", + "extensions.emptyToolsDesc": "ثبّت إضافة ذات إمكانات أدوات من السجل لتظهر هنا.", "common.dismiss": "تجاهل", "common.pin": "تثبيت", "common.unpin": "إلغاء التثبيت", @@ -1453,6 +1453,8 @@ registerPack("ar", { "chat.generatedImageUnavailable": "الصورة المولدة غير متاحة في سجل المحادثة", "chat.messageAttachmentAlt": "مرفق الرسالة", "chat.copyMessage": "نسخ الرسالة", + "chat.downloadRunArtifact": "تنزيل هذا التشغيل", + "chat.downloadThreadArtifact": "تنزيل المحادثة كاملة", "chat.retryMessage": "إعادة محاولة الرسالة", "chat.history.loadFailed": "فشل تحميل سجل المحادثة.", "chat.failure.connectionLost": "فُقد الاتصال بالخادم. أعد الاتصال وحاول مرة أخرى.", @@ -1479,7 +1481,7 @@ registerPack("ar", { "pairing.connectFromExtensions": "اربط {name} من صفحة الإضافات للمتابعة.", "pairing.connectFailedRetry": "فشل الاتصال. حاول مرة أخرى.", "extensions.authUrlHttpsRequired": "يجب أن يستخدم عنوان URL للمصادقة HTTPS.", - "tools.available": "Available tools", + "tools.available": "الأدوات المتاحة", "slackSetup.placeholder.keepSecret": "مكوّن؛ اتركه فارغًا للإبقاء عليه", // Telegram setup + pairing @@ -1499,6 +1501,19 @@ registerPack("ar", { "telegramSetup.remove": "إزالة البوت", "telegramSetup.removeConfirm": "هل تريد إزالة بوت تيليجرام؟ ستتوقف القناة حتى يُحفظ رمز جديد.", "telegramSetup.removeFailed": "فشلت إزالة بوت تيليجرام.", + "pairing.web.title": "ربط {name}", + "pairing.web.instructions": "امسح رمز QR أو افتح الرابط، ثم أرسل الرمز إلى بوت {name} لإقران هذا الحساب.", + "pairing.web.instructionsNoLink": "أرسل الرمز أدناه إلى بوت {name} لإقران هذا الحساب.", + "pairing.web.copyCode": "نسخ الرمز", + "pairing.web.openIn": "فتح في {name}", + "pairing.web.qrAlt": "رمز QR لإقران {name}", + "pairing.web.expiresIn": "تنتهي الصلاحية خلال {time}", + "pairing.web.expired": "انتهت صلاحية رمز الإقران هذا.", + "pairing.web.getNewCode": "الحصول على رمز جديد", + "pairing.web.paired": "تم إقران {name}", + "pairing.web.disconnect": "قطع الاتصال", + "pairing.web.disconnectFailed": "تعذر قطع اتصال {name}.", + "pairing.web.loadFailed": "تعذر الحصول على رمز إقران لـ {name}.", "telegramPairing.title": "ربط تيليجرام", "telegramPairing.instructions": "امسح رمز QR أو افتح الرابط ثم اضغط «ابدأ» في تيليجرام لإقران هذا الحساب.", "telegramPairing.copyCode": "نسخ الرمز", diff --git a/crates/ironclaw_webui/frontend/src/i18n/de.ts b/crates/ironclaw_webui/frontend/src/i18n/de.ts index b0119f8114e..228ed7f2864 100644 --- a/crates/ironclaw_webui/frontend/src/i18n/de.ts +++ b/crates/ironclaw_webui/frontend/src/i18n/de.ts @@ -222,7 +222,7 @@ registerPack("de", { // Extensions tabs "extensions.installed": "Installiert", "extensions.channels": "Kanaele", - "extensions.tools": "Tools", + "extensions.tools": "Werkzeuge", "extensions.registry": "Registrierung", // Settings tabs @@ -1237,7 +1237,7 @@ registerPack("de", { "extensions.reconfigure": "Neu konfigurieren", "extensions.configureName": "{name} konfigurieren", "extensions.allInstalled": "Alle installierten Erweiterungen", - "tools.installed": "Installed tools", + "tools.installed": "Installierte Werkzeuge", "extensions.scope.shared": "geteilt", "extensions.scope.private": "meine", "mcp.installed": "Installierte MCP-Server", @@ -1253,49 +1253,49 @@ registerPack("de", { "extensions.installedSuccess": "{name} installiert", "extensions.removedSuccess": "{name} entfernt", "extensions.installFailed": "Installation fehlgeschlagen", - "extensions.addCustomMcp": "Add MCP server", - "extensions.customMcpPhase.connection": "Connection · Step 1 of 3", - "extensions.customMcpPhase.authentication": "Review · Step 2 of 3", - "extensions.customMcpPhase.review": "Step 2 of 3", - "extensions.customMcpPhase.result": "Result · Step 3 of 3", - "extensions.customMcpPhase.connectionLabel": "Connection", - "extensions.customMcpPhase.authenticationLabel": "Review", - "extensions.customMcpPhase.reviewLabel": "Review", - "extensions.customMcpPhase.resultLabel": "Result", - "extensions.customMcpProgress": "Add an MCP server in three steps", - "extensions.customMcpName": "Server name", - "extensions.customMcpNameHint": "Use a name you will recognize in Extensions.", - "extensions.customMcpId": "Server ID", + "extensions.addCustomMcp": "MCP-Server hinzufügen", + "extensions.customMcpPhase.connection": "Schritt 1 von 3", + "extensions.customMcpPhase.authentication": "Schritt 2 von 3", + "extensions.customMcpPhase.review": "Schritt 2 von 3", + "extensions.customMcpPhase.result": "Schritt 3 von 3", + "extensions.customMcpPhase.connectionLabel": "Verbindung", + "extensions.customMcpPhase.authenticationLabel": "Prüfung", + "extensions.customMcpPhase.reviewLabel": "Prüfung", + "extensions.customMcpPhase.resultLabel": "Ergebnis", + "extensions.customMcpProgress": "MCP-Server in drei Schritten hinzufügen", + "extensions.customMcpName": "Servername", + "extensions.customMcpNameHint": "Verwenden Sie einen Namen, den Sie unter Erweiterungen wiedererkennen.", + "extensions.customMcpId": "Server-ID", "extensions.customMcpIdGenerated": "ID: {id}", - "extensions.customMcpIdHint": "A unique ID: lowercase letters, numbers, underscores, hyphens, or dots, starting with a letter or number (128 chars max).", - "extensions.customMcpAdvanced": "Advanced options", - "extensions.customMcpRecommended": "Recommended", - "extensions.customMcpEndpoint": "Server address", - "extensions.customMcpRequired": "Name, ID, and endpoint are required.", - "extensions.customMcpHttpsOnly": "The endpoint must use HTTPS.", - "extensions.customMcpNameRequired": "Enter a server name.", - "extensions.customMcpNameTooLong": "Server name must be 256 characters or fewer.", - "extensions.customMcpNameControls": "Server name cannot contain control characters.", - "extensions.customMcpIdRequired": "Enter a server ID.", - "extensions.customMcpIdInvalid": "Server ID must use lowercase letters, numbers, underscores, hyphens, or dots, starting with a letter or number (128 chars max).", - "extensions.customMcpEndpointRequired": "Enter a server address.", - "extensions.customMcpEndpointHttps": "Enter a public HTTPS URL without credentials, fragments, localhost, or an IP address.", - "extensions.customMcpAuthHint": "Choose how this server authenticates. Credentials are configured only after registration.", - "extensions.customMcpReviewHint": "Add it now, then install it from Extensions. Connect an account or add a token if needed.", - "extensions.customMcpAuth.no_auth": "No authentication", - "extensions.customMcpAuth.bearer": "Bearer token", + "extensions.customMcpIdHint": "Eine eindeutige ID aus Kleinbuchstaben, Zahlen, Unterstrichen, Bindestrichen oder Punkten, beginnend mit einem Buchstaben oder einer Zahl (maximal 128 Zeichen).", + "extensions.customMcpAdvanced": "Erweiterte Optionen", + "extensions.customMcpRecommended": "Empfohlen", + "extensions.customMcpEndpoint": "Serveradresse", + "extensions.customMcpRequired": "Name, ID und Endpunkt sind erforderlich.", + "extensions.customMcpHttpsOnly": "Der Endpunkt muss HTTPS verwenden.", + "extensions.customMcpNameRequired": "Geben Sie einen Servernamen ein.", + "extensions.customMcpNameTooLong": "Der Servername darf höchstens 256 Zeichen lang sein.", + "extensions.customMcpNameControls": "Der Servername darf keine Steuerzeichen enthalten.", + "extensions.customMcpIdRequired": "Geben Sie eine Server-ID ein.", + "extensions.customMcpIdInvalid": "Die Server-ID darf nur Kleinbuchstaben, Zahlen, Unterstriche, Bindestriche oder Punkte verwenden, muss mit einem Buchstaben oder einer Zahl beginnen und darf höchstens 128 Zeichen lang sein.", + "extensions.customMcpEndpointRequired": "Geben Sie eine Serveradresse ein.", + "extensions.customMcpEndpointHttps": "Geben Sie eine öffentliche HTTPS-URL ohne Zugangsdaten, Fragmente, localhost oder IP-Adresse ein.", + "extensions.customMcpAuthHint": "IronClaw stellt zunächst ohne Zugangsdaten eine Verbindung her, um zu erkennen, ob OAuth oder ein Bearer-Token erforderlich ist. Dies kann unter „Erweiterte Optionen“ überschrieben werden.", + "extensions.customMcpReviewHint": "Fügen Sie ihn jetzt hinzu und installieren Sie ihn anschließend über Erweiterungen. Verbinden Sie bei Bedarf ein Konto oder fügen Sie ein Token hinzu.", + "extensions.customMcpAuth.no_auth": "Keine Authentifizierung", + "extensions.customMcpAuth.bearer": "Bearer-Token", "extensions.customMcpAuth.oauth": "OAuth", - "extensions.customMcpAuth.auto": "Automatic detection", - "extensions.customMcpRegister": "Add server", - "extensions.customMcpRegistered": "{name} added", - "extensions.customMcpRegisterFailed": "Could not add this server. Try again.", - "extensions.customMcpSetupRequired": "Registration complete — setup required", - "extensions.customMcpSetupRequiredHint": "Credentials can be added later from this extension's Setup action in the Extensions list.", - "extensions.customMcpReady": "Server added", - "extensions.customMcpReadyHint": "Find it in Extensions. Install it before using it. If it asks for access, connect an account or add a token.", - "extensions.customMcpFinishLater": "Finish later", - "extensions.customMcpContinueSetup": "Continue setup", - "extensions.customMcpProjectionMissing": "The server was added, but it is not showing in Extensions yet. Try again.", + "extensions.customMcpAuth.auto": "Automatische Erkennung", + "extensions.customMcpRegister": "Server hinzufügen", + "extensions.customMcpRegistered": "{name} hinzugefügt", + "extensions.customMcpRegisterFailed": "Dieser Server konnte nicht hinzugefügt werden. Versuchen Sie es erneut.", + "extensions.customMcpSetupRequired": "Server hinzugefügt — Einrichtung abschließen", + "extensions.customMcpSetupRequiredHint": "Sie finden ihn unter Erweiterungen. Verbinden Sie anschließend bei Bedarf ein Konto oder fügen Sie ein Token hinzu.", + "extensions.customMcpReady": "Server hinzugefügt", + "extensions.customMcpReadyHint": "Sie finden ihn unter Erweiterungen. Installieren Sie ihn und verbinden Sie anschließend bei Bedarf ein Konto oder fügen Sie ein Token hinzu.", + "extensions.customMcpFinishLater": "Später abschließen", + "extensions.customMcpContinueSetup": "Einrichtung fortsetzen", + "extensions.customMcpProjectionMissing": "Der Server wurde hinzugefügt, wird aber noch nicht unter Erweiterungen angezeigt. Versuchen Sie es erneut.", "extensions.removeFailed": "Entfernen fehlgeschlagen", "extensions.openingAuth": "Authentifizierung wird geöffnet...", "extensions.configurationRequired": "Konfiguration erforderlich", @@ -1343,8 +1343,8 @@ registerPack("de", { "extensions.reconnect": "Neu verbinden", "extensions.emptyInstalledTitle": "Keine Erweiterungen installiert", "extensions.emptyInstalledDesc": "Durchsuchen Sie die Registerkarte „Registrierung“, um WASM-Tools, Kanäle und MCP-Server zu entdecken und zu installieren.", - "extensions.emptyToolsTitle": "No tool extensions yet", - "extensions.emptyToolsDesc": "Install an extension with tool capabilities from the registry to see it here.", + "extensions.emptyToolsTitle": "Noch keine Werkzeug-Erweiterungen", + "extensions.emptyToolsDesc": "Installieren Sie eine Erweiterung mit Werkzeugfunktionen aus der Registry, damit sie hier angezeigt wird.", "common.dismiss": "Schließen", "common.pin": "Anheften", "common.unpin": "Lösen", @@ -1453,6 +1453,8 @@ registerPack("de", { "chat.generatedImageUnavailable": "Generiertes Bild im Verlauf nicht verfügbar", "chat.messageAttachmentAlt": "Nachrichtenanhang", "chat.copyMessage": "Nachricht kopieren", + "chat.downloadRunArtifact": "Diesen Lauf herunterladen", + "chat.downloadThreadArtifact": "Vollständigen Thread herunterladen", "chat.retryMessage": "Nachricht erneut versuchen", "chat.history.loadFailed": "Konversationsverlauf konnte nicht geladen werden.", "chat.failure.connectionLost": "Die Verbindung zum Server wurde unterbrochen. Stelle die Verbindung wieder her und versuche es erneut.", @@ -1479,7 +1481,7 @@ registerPack("de", { "pairing.connectFromExtensions": "Verbinde {name} über die Erweiterungsseite, um fortzufahren.", "pairing.connectFailedRetry": "Verbindung fehlgeschlagen. Versuche es erneut.", "extensions.authUrlHttpsRequired": "Die Authentifizierungs-URL muss HTTPS verwenden.", - "tools.available": "Available tools", + "tools.available": "Verfügbare Werkzeuge", "slackSetup.placeholder.keepSecret": "Konfiguriert; leer lassen, um beizubehalten", // Telegram setup + pairing @@ -1499,6 +1501,19 @@ registerPack("de", { "telegramSetup.remove": "Bot entfernen", "telegramSetup.removeConfirm": "Telegram-Bot entfernen? Der Kanal stoppt, bis ein neues Token gespeichert wird.", "telegramSetup.removeFailed": "Entfernen des Telegram-Bots fehlgeschlagen.", + "pairing.web.title": "{name} verbinden", + "pairing.web.instructions": "Scannen Sie den QR-Code oder öffnen Sie den Link und senden Sie den Code an den {name}-Bot, um dieses Konto zu koppeln.", + "pairing.web.instructionsNoLink": "Senden Sie den folgenden Code an den {name}-Bot, um dieses Konto zu koppeln.", + "pairing.web.copyCode": "Code kopieren", + "pairing.web.openIn": "In {name} öffnen", + "pairing.web.qrAlt": "QR-Code zur Kopplung mit {name}", + "pairing.web.expiresIn": "Läuft in {time} ab", + "pairing.web.expired": "Dieser Kopplungscode ist abgelaufen.", + "pairing.web.getNewCode": "Neuen Code abrufen", + "pairing.web.paired": "{name} gekoppelt", + "pairing.web.disconnect": "Verbindung trennen", + "pairing.web.disconnectFailed": "Die Verbindung mit {name} konnte nicht getrennt werden.", + "pairing.web.loadFailed": "Es konnte kein Kopplungscode für {name} abgerufen werden.", "telegramPairing.title": "Telegram verbinden", "telegramPairing.instructions": "Scanne den QR-Code oder öffne den Link und tippe in Telegram auf „Start“, um dieses Konto zu koppeln.", "telegramPairing.copyCode": "Code kopieren", diff --git a/crates/ironclaw_webui/frontend/src/i18n/es.ts b/crates/ironclaw_webui/frontend/src/i18n/es.ts index 9346310bf63..036b5ff6b25 100644 --- a/crates/ironclaw_webui/frontend/src/i18n/es.ts +++ b/crates/ironclaw_webui/frontend/src/i18n/es.ts @@ -222,7 +222,7 @@ registerPack("es", { // Extensions tabs "extensions.installed": "Instaladas", "extensions.channels": "Canales", - "extensions.tools": "Tools", + "extensions.tools": "Herramientas", "extensions.registry": "Registro", // Settings tabs @@ -1238,7 +1238,7 @@ registerPack("es", { "extensions.reconfigure": "Reconfigurar", "extensions.configureName": "Configurar {name}", "extensions.allInstalled": "Todas las extensiones instaladas", - "tools.installed": "Installed tools", + "tools.installed": "Herramientas instaladas", "extensions.scope.shared": "compartidas", "extensions.scope.private": "mías", "mcp.installed": "Servidores MCP instalados", @@ -1254,49 +1254,49 @@ registerPack("es", { "extensions.installedSuccess": "{name} se instaló", "extensions.removedSuccess": "{name} se eliminó", "extensions.installFailed": "Error al instalar", - "extensions.addCustomMcp": "Add MCP server", - "extensions.customMcpPhase.connection": "Connection · Step 1 of 3", - "extensions.customMcpPhase.authentication": "Review · Step 2 of 3", - "extensions.customMcpPhase.review": "Step 2 of 3", - "extensions.customMcpPhase.result": "Result · Step 3 of 3", - "extensions.customMcpPhase.connectionLabel": "Connection", - "extensions.customMcpPhase.authenticationLabel": "Review", - "extensions.customMcpPhase.reviewLabel": "Review", - "extensions.customMcpPhase.resultLabel": "Result", - "extensions.customMcpProgress": "Add an MCP server in three steps", - "extensions.customMcpName": "Server name", - "extensions.customMcpNameHint": "Use a name you will recognize in Extensions.", - "extensions.customMcpId": "Server ID", + "extensions.addCustomMcp": "Agregar servidor MCP", + "extensions.customMcpPhase.connection": "Paso 1 de 3", + "extensions.customMcpPhase.authentication": "Paso 2 de 3", + "extensions.customMcpPhase.review": "Paso 2 de 3", + "extensions.customMcpPhase.result": "Paso 3 de 3", + "extensions.customMcpPhase.connectionLabel": "Conexión", + "extensions.customMcpPhase.authenticationLabel": "Revisión", + "extensions.customMcpPhase.reviewLabel": "Revisión", + "extensions.customMcpPhase.resultLabel": "Resultado", + "extensions.customMcpProgress": "Agrega un servidor MCP en tres pasos", + "extensions.customMcpName": "Nombre del servidor", + "extensions.customMcpNameHint": "Usa un nombre que reconozcas en Extensiones.", + "extensions.customMcpId": "ID del servidor", "extensions.customMcpIdGenerated": "ID: {id}", - "extensions.customMcpIdHint": "A unique ID: lowercase letters, numbers, underscores, hyphens, or dots, starting with a letter or number (128 chars max).", - "extensions.customMcpAdvanced": "Advanced options", - "extensions.customMcpRecommended": "Recommended", - "extensions.customMcpEndpoint": "Server address", - "extensions.customMcpRequired": "Name, ID, and endpoint are required.", - "extensions.customMcpHttpsOnly": "The endpoint must use HTTPS.", - "extensions.customMcpNameRequired": "Enter a server name.", - "extensions.customMcpNameTooLong": "Server name must be 256 characters or fewer.", - "extensions.customMcpNameControls": "Server name cannot contain control characters.", - "extensions.customMcpIdRequired": "Enter a server ID.", - "extensions.customMcpIdInvalid": "Server ID must use lowercase letters, numbers, underscores, hyphens, or dots, starting with a letter or number (128 chars max).", - "extensions.customMcpEndpointRequired": "Enter a server address.", - "extensions.customMcpEndpointHttps": "Enter a public HTTPS URL without credentials, fragments, localhost, or an IP address.", - "extensions.customMcpAuthHint": "Choose how this server authenticates. Credentials are configured only after registration.", - "extensions.customMcpReviewHint": "Add it now, then install it from Extensions. Connect an account or add a token if needed.", - "extensions.customMcpAuth.no_auth": "No authentication", - "extensions.customMcpAuth.bearer": "Bearer token", + "extensions.customMcpIdHint": "Un ID único con letras minúsculas, números, guiones bajos, guiones o puntos, que empiece por una letra o un número (máximo 128 caracteres).", + "extensions.customMcpAdvanced": "Opciones avanzadas", + "extensions.customMcpRecommended": "Recomendado", + "extensions.customMcpEndpoint": "Dirección del servidor", + "extensions.customMcpRequired": "El nombre, el ID y el endpoint son obligatorios.", + "extensions.customMcpHttpsOnly": "El endpoint debe usar HTTPS.", + "extensions.customMcpNameRequired": "Introduce un nombre de servidor.", + "extensions.customMcpNameTooLong": "El nombre del servidor debe tener 256 caracteres o menos.", + "extensions.customMcpNameControls": "El nombre del servidor no puede contener caracteres de control.", + "extensions.customMcpIdRequired": "Introduce un ID de servidor.", + "extensions.customMcpIdInvalid": "El ID del servidor debe usar letras minúsculas, números, guiones bajos, guiones o puntos, empezar por una letra o un número y tener un máximo de 128 caracteres.", + "extensions.customMcpEndpointRequired": "Introduce una dirección de servidor.", + "extensions.customMcpEndpointHttps": "Introduce una URL HTTPS pública sin credenciales, fragmentos, localhost ni una dirección IP.", + "extensions.customMcpAuthHint": "IronClaw se conecta primero sin credenciales para detectar si se necesita OAuth o un token Bearer. Puedes cambiarlo en Opciones avanzadas.", + "extensions.customMcpReviewHint": "Agrégalo ahora y luego instálalo desde Extensiones. Conecta una cuenta o agrega un token si es necesario.", + "extensions.customMcpAuth.no_auth": "Sin autenticación", + "extensions.customMcpAuth.bearer": "Token Bearer", "extensions.customMcpAuth.oauth": "OAuth", - "extensions.customMcpAuth.auto": "Automatic detection", - "extensions.customMcpRegister": "Add server", - "extensions.customMcpRegistered": "{name} added", - "extensions.customMcpRegisterFailed": "Could not add this server. Try again.", - "extensions.customMcpSetupRequired": "Registration complete — setup required", - "extensions.customMcpSetupRequiredHint": "Credentials can be added later from this extension's Setup action in the Extensions list.", - "extensions.customMcpReady": "Server added", - "extensions.customMcpReadyHint": "Find it in Extensions. Install it before using it. If it asks for access, connect an account or add a token.", - "extensions.customMcpFinishLater": "Finish later", - "extensions.customMcpContinueSetup": "Continue setup", - "extensions.customMcpProjectionMissing": "The server was added, but it is not showing in Extensions yet. Try again.", + "extensions.customMcpAuth.auto": "Detección automática", + "extensions.customMcpRegister": "Agregar servidor", + "extensions.customMcpRegistered": "Se agregó {name}", + "extensions.customMcpRegisterFailed": "No se pudo agregar este servidor. Inténtalo de nuevo.", + "extensions.customMcpSetupRequired": "Servidor agregado — completa la configuración", + "extensions.customMcpSetupRequiredHint": "Encuéntralo en Extensiones y luego conecta una cuenta o agrega un token si es necesario.", + "extensions.customMcpReady": "Servidor agregado", + "extensions.customMcpReadyHint": "Encuéntralo en Extensiones, instálalo y luego conecta una cuenta o agrega un token si es necesario.", + "extensions.customMcpFinishLater": "Completar más tarde", + "extensions.customMcpContinueSetup": "Continuar configuración", + "extensions.customMcpProjectionMissing": "El servidor se agregó, pero todavía no aparece en Extensiones. Inténtalo de nuevo.", "extensions.removeFailed": "Error al quitar", "extensions.openingAuth": "Abriendo autenticación...", "extensions.configurationRequired": "Configuración requerida", @@ -1344,8 +1344,8 @@ registerPack("es", { "extensions.reconnect": "Reconectar", "extensions.emptyInstalledTitle": "No hay extensiones instaladas", "extensions.emptyInstalledDesc": "Explore la pestaña Registro para descubrir e instalar herramientas, canales y servidores WASM.", - "extensions.emptyToolsTitle": "No tool extensions yet", - "extensions.emptyToolsDesc": "Install an extension with tool capabilities from the registry to see it here.", + "extensions.emptyToolsTitle": "Aún no hay extensiones de herramientas", + "extensions.emptyToolsDesc": "Instala desde el registro una extensión con capacidades de herramientas para verla aquí.", "common.dismiss": "Descartar", "common.pin": "Fijar", "common.unpin": "Desfijar", @@ -1454,6 +1454,8 @@ registerPack("es", { "chat.generatedImageUnavailable": "Imagen generada no disponible en el historial", "chat.messageAttachmentAlt": "Adjunto del mensaje", "chat.copyMessage": "Copiar mensaje", + "chat.downloadRunArtifact": "Descargar esta ejecución", + "chat.downloadThreadArtifact": "Descargar el hilo completo", "chat.retryMessage": "Reintentar mensaje", "chat.history.loadFailed": "No se pudo cargar el historial de conversación.", "chat.failure.connectionLost": "Se perdió la conexión con el servidor. Vuelve a conectarte e inténtalo de nuevo.", @@ -1480,7 +1482,7 @@ registerPack("es", { "pairing.connectFromExtensions": "Conecta {name} desde la página de Extensiones para continuar.", "pairing.connectFailedRetry": "La conexión falló. Inténtalo de nuevo.", "extensions.authUrlHttpsRequired": "La URL de autenticación debe usar HTTPS.", - "tools.available": "Available tools", + "tools.available": "Herramientas disponibles", "slackSetup.placeholder.keepSecret": "Configurado; deja en blanco para conservarlo", // Telegram setup + pairing @@ -1500,6 +1502,19 @@ registerPack("es", { "telegramSetup.remove": "Quitar bot", "telegramSetup.removeConfirm": "¿Quitar el bot de Telegram? El canal se detiene hasta guardar un token nuevo.", "telegramSetup.removeFailed": "No se pudo quitar el bot de Telegram.", + "pairing.web.title": "Conectar {name}", + "pairing.web.instructions": "Escanea el código QR o abre el enlace y envía el código al bot de {name} para vincular esta cuenta.", + "pairing.web.instructionsNoLink": "Envía el siguiente código al bot de {name} para vincular esta cuenta.", + "pairing.web.copyCode": "Copiar código", + "pairing.web.openIn": "Abrir en {name}", + "pairing.web.qrAlt": "QR para vincular {name}", + "pairing.web.expiresIn": "Caduca en {time}", + "pairing.web.expired": "Este código de vinculación ha caducado.", + "pairing.web.getNewCode": "Obtener un código nuevo", + "pairing.web.paired": "{name} vinculado", + "pairing.web.disconnect": "Desconectar", + "pairing.web.disconnectFailed": "No se pudo desconectar {name}.", + "pairing.web.loadFailed": "No se pudo obtener un código de vinculación para {name}.", "telegramPairing.title": "Conectar Telegram", "telegramPairing.instructions": "Escanea el código QR o abre el enlace y pulsa Iniciar en Telegram para vincular esta cuenta.", "telegramPairing.copyCode": "Copiar código", diff --git a/crates/ironclaw_webui/frontend/src/i18n/fr.ts b/crates/ironclaw_webui/frontend/src/i18n/fr.ts index a1c01bd27b2..d0d9ebd489a 100644 --- a/crates/ironclaw_webui/frontend/src/i18n/fr.ts +++ b/crates/ironclaw_webui/frontend/src/i18n/fr.ts @@ -222,7 +222,7 @@ registerPack("fr", { // Extensions tabs "extensions.installed": "Installees", "extensions.channels": "Canaux", - "extensions.tools": "Tools", + "extensions.tools": "Outils", "extensions.registry": "Registre", // Settings tabs @@ -1237,7 +1237,7 @@ registerPack("fr", { "extensions.reconfigure": "Reconfigurer", "extensions.configureName": "Configurer {name}", "extensions.allInstalled": "Toutes les extensions installées", - "tools.installed": "Installed tools", + "tools.installed": "Outils installés", "extensions.scope.shared": "partagées", "extensions.scope.private": "les miennes", "mcp.installed": "Serveurs MCP installés", @@ -1253,49 +1253,49 @@ registerPack("fr", { "extensions.installedSuccess": "{name} a été installée", "extensions.removedSuccess": "{name} a été supprimée", "extensions.installFailed": "Échec de l'installation", - "extensions.addCustomMcp": "Add MCP server", - "extensions.customMcpPhase.connection": "Connection · Step 1 of 3", - "extensions.customMcpPhase.authentication": "Review · Step 2 of 3", - "extensions.customMcpPhase.review": "Step 2 of 3", - "extensions.customMcpPhase.result": "Result · Step 3 of 3", - "extensions.customMcpPhase.connectionLabel": "Connection", - "extensions.customMcpPhase.authenticationLabel": "Review", - "extensions.customMcpPhase.reviewLabel": "Review", - "extensions.customMcpPhase.resultLabel": "Result", - "extensions.customMcpProgress": "Add an MCP server in three steps", - "extensions.customMcpName": "Server name", - "extensions.customMcpNameHint": "Use a name you will recognize in Extensions.", - "extensions.customMcpId": "Server ID", + "extensions.addCustomMcp": "Ajouter un serveur MCP", + "extensions.customMcpPhase.connection": "Étape 1 sur 3", + "extensions.customMcpPhase.authentication": "Étape 2 sur 3", + "extensions.customMcpPhase.review": "Étape 2 sur 3", + "extensions.customMcpPhase.result": "Étape 3 sur 3", + "extensions.customMcpPhase.connectionLabel": "Connexion", + "extensions.customMcpPhase.authenticationLabel": "Vérification", + "extensions.customMcpPhase.reviewLabel": "Vérification", + "extensions.customMcpPhase.resultLabel": "Résultat", + "extensions.customMcpProgress": "Ajoutez un serveur MCP en trois étapes", + "extensions.customMcpName": "Nom du serveur", + "extensions.customMcpNameHint": "Utilisez un nom que vous reconnaîtrez dans Extensions.", + "extensions.customMcpId": "Identifiant du serveur", "extensions.customMcpIdGenerated": "ID: {id}", - "extensions.customMcpIdHint": "A unique ID: lowercase letters, numbers, underscores, hyphens, or dots, starting with a letter or number (128 chars max).", - "extensions.customMcpAdvanced": "Advanced options", - "extensions.customMcpRecommended": "Recommended", - "extensions.customMcpEndpoint": "Server address", - "extensions.customMcpRequired": "Name, ID, and endpoint are required.", - "extensions.customMcpHttpsOnly": "The endpoint must use HTTPS.", - "extensions.customMcpNameRequired": "Enter a server name.", - "extensions.customMcpNameTooLong": "Server name must be 256 characters or fewer.", - "extensions.customMcpNameControls": "Server name cannot contain control characters.", - "extensions.customMcpIdRequired": "Enter a server ID.", - "extensions.customMcpIdInvalid": "Server ID must use lowercase letters, numbers, underscores, hyphens, or dots, starting with a letter or number (128 chars max).", - "extensions.customMcpEndpointRequired": "Enter a server address.", - "extensions.customMcpEndpointHttps": "Enter a public HTTPS URL without credentials, fragments, localhost, or an IP address.", - "extensions.customMcpAuthHint": "Choose how this server authenticates. Credentials are configured only after registration.", - "extensions.customMcpReviewHint": "Add it now, then install it from Extensions. Connect an account or add a token if needed.", - "extensions.customMcpAuth.no_auth": "No authentication", - "extensions.customMcpAuth.bearer": "Bearer token", + "extensions.customMcpIdHint": "Un identifiant unique composé de lettres minuscules, chiffres, traits de soulignement, tirets ou points, commençant par une lettre ou un chiffre (128 caractères maximum).", + "extensions.customMcpAdvanced": "Options avancées", + "extensions.customMcpRecommended": "Recommandé", + "extensions.customMcpEndpoint": "Adresse du serveur", + "extensions.customMcpRequired": "Le nom, l’identifiant et le point de terminaison sont obligatoires.", + "extensions.customMcpHttpsOnly": "Le point de terminaison doit utiliser HTTPS.", + "extensions.customMcpNameRequired": "Saisissez un nom de serveur.", + "extensions.customMcpNameTooLong": "Le nom du serveur doit contenir au maximum 256 caractères.", + "extensions.customMcpNameControls": "Le nom du serveur ne peut pas contenir de caractères de contrôle.", + "extensions.customMcpIdRequired": "Saisissez un identifiant de serveur.", + "extensions.customMcpIdInvalid": "L’identifiant du serveur doit utiliser des lettres minuscules, chiffres, traits de soulignement, tirets ou points, commencer par une lettre ou un chiffre et contenir au maximum 128 caractères.", + "extensions.customMcpEndpointRequired": "Saisissez une adresse de serveur.", + "extensions.customMcpEndpointHttps": "Saisissez une URL HTTPS publique sans identifiants, fragments, localhost ni adresse IP.", + "extensions.customMcpAuthHint": "IronClaw se connecte d’abord sans identifiants pour détecter si OAuth ou un jeton Bearer est nécessaire. Modifiez ce choix dans les options avancées.", + "extensions.customMcpReviewHint": "Ajoutez-le maintenant, puis installez-le depuis Extensions. Connectez un compte ou ajoutez un jeton si nécessaire.", + "extensions.customMcpAuth.no_auth": "Aucune authentification", + "extensions.customMcpAuth.bearer": "Jeton Bearer", "extensions.customMcpAuth.oauth": "OAuth", - "extensions.customMcpAuth.auto": "Automatic detection", - "extensions.customMcpRegister": "Add server", - "extensions.customMcpRegistered": "{name} added", - "extensions.customMcpRegisterFailed": "Could not add this server. Try again.", - "extensions.customMcpSetupRequired": "Registration complete — setup required", - "extensions.customMcpSetupRequiredHint": "Credentials can be added later from this extension's Setup action in the Extensions list.", - "extensions.customMcpReady": "Server added", - "extensions.customMcpReadyHint": "Find it in Extensions. Install it before using it. If it asks for access, connect an account or add a token.", - "extensions.customMcpFinishLater": "Finish later", - "extensions.customMcpContinueSetup": "Continue setup", - "extensions.customMcpProjectionMissing": "The server was added, but it is not showing in Extensions yet. Try again.", + "extensions.customMcpAuth.auto": "Détection automatique", + "extensions.customMcpRegister": "Ajouter le serveur", + "extensions.customMcpRegistered": "{name} ajouté", + "extensions.customMcpRegisterFailed": "Impossible d’ajouter ce serveur. Réessayez.", + "extensions.customMcpSetupRequired": "Serveur ajouté — terminez la configuration", + "extensions.customMcpSetupRequiredHint": "Retrouvez-le dans Extensions, puis connectez un compte ou ajoutez un jeton si nécessaire.", + "extensions.customMcpReady": "Serveur ajouté", + "extensions.customMcpReadyHint": "Retrouvez-le dans Extensions, installez-le, puis connectez un compte ou ajoutez un jeton si nécessaire.", + "extensions.customMcpFinishLater": "Terminer plus tard", + "extensions.customMcpContinueSetup": "Continuer la configuration", + "extensions.customMcpProjectionMissing": "Le serveur a été ajouté, mais n’apparaît pas encore dans Extensions. Réessayez.", "extensions.removeFailed": "Échec de la suppression", "extensions.openingAuth": "Ouverture de l'authentification...", "extensions.configurationRequired": "Configuration requise", @@ -1343,8 +1343,8 @@ registerPack("fr", { "extensions.reconnect": "Reconnecter", "extensions.emptyInstalledTitle": "Aucune extension installée", "extensions.emptyInstalledDesc": "Parcourez l'onglet Registre pour découvrir et installer les outils, canaux et serveurs MCP WASM.", - "extensions.emptyToolsTitle": "No tool extensions yet", - "extensions.emptyToolsDesc": "Install an extension with tool capabilities from the registry to see it here.", + "extensions.emptyToolsTitle": "Aucune extension d’outil pour le moment", + "extensions.emptyToolsDesc": "Installez depuis le registre une extension dotée de fonctionnalités d’outil pour la voir ici.", "common.dismiss": "Ignorer", "common.pin": "Épingler", "common.unpin": "Désépingler", @@ -1453,6 +1453,8 @@ registerPack("fr", { "chat.generatedImageUnavailable": "Image générée indisponible dans l'historique", "chat.messageAttachmentAlt": "Pièce jointe du message", "chat.copyMessage": "Copier le message", + "chat.downloadRunArtifact": "Télécharger cette exécution", + "chat.downloadThreadArtifact": "Télécharger le fil complet", "chat.retryMessage": "Réessayer le message", "chat.history.loadFailed": "Impossible de charger l'historique de la conversation.", "chat.failure.connectionLost": "La connexion au serveur a été perdue. Reconnectez-vous et réessayez.", @@ -1479,7 +1481,7 @@ registerPack("fr", { "pairing.connectFromExtensions": "Connectez {name} depuis la page Extensions pour continuer.", "pairing.connectFailedRetry": "La connexion a échoué. Réessayez.", "extensions.authUrlHttpsRequired": "L'URL d'authentification doit utiliser HTTPS.", - "tools.available": "Available tools", + "tools.available": "Outils disponibles", "slackSetup.placeholder.keepSecret": "Configuré ; laissez vide pour conserver", // Telegram setup + pairing @@ -1499,6 +1501,19 @@ registerPack("fr", { "telegramSetup.remove": "Retirer le bot", "telegramSetup.removeConfirm": "Retirer le bot Telegram ? Le canal s'arrête jusqu'à l'enregistrement d'un nouveau jeton.", "telegramSetup.removeFailed": "Échec du retrait du bot Telegram.", + "pairing.web.title": "Connecter {name}", + "pairing.web.instructions": "Scannez le code QR ou ouvrez le lien, puis envoyez le code au bot {name} pour associer ce compte.", + "pairing.web.instructionsNoLink": "Envoyez le code ci-dessous au bot {name} pour associer ce compte.", + "pairing.web.copyCode": "Copier le code", + "pairing.web.openIn": "Ouvrir dans {name}", + "pairing.web.qrAlt": "Code QR d’association {name}", + "pairing.web.expiresIn": "Expire dans {time}", + "pairing.web.expired": "Ce code d’association a expiré.", + "pairing.web.getNewCode": "Obtenir un nouveau code", + "pairing.web.paired": "{name} associé", + "pairing.web.disconnect": "Déconnecter", + "pairing.web.disconnectFailed": "Échec de la déconnexion de {name}.", + "pairing.web.loadFailed": "Impossible d’obtenir un code d’association pour {name}.", "telegramPairing.title": "Connecter Telegram", "telegramPairing.instructions": "Scannez le code QR ou ouvrez le lien, puis appuyez sur Démarrer dans Telegram pour associer ce compte.", "telegramPairing.copyCode": "Copier le code", diff --git a/crates/ironclaw_webui/frontend/src/i18n/hi.ts b/crates/ironclaw_webui/frontend/src/i18n/hi.ts index 03742e71927..501314ab035 100644 --- a/crates/ironclaw_webui/frontend/src/i18n/hi.ts +++ b/crates/ironclaw_webui/frontend/src/i18n/hi.ts @@ -222,7 +222,7 @@ registerPack("hi", { // Extensions tabs "extensions.installed": "इंस्टॉल किए गए", "extensions.channels": "चैनल", - "extensions.tools": "Tools", + "extensions.tools": "उपकरण", "extensions.registry": "रजिस्ट्री", // Settings tabs @@ -1237,7 +1237,7 @@ registerPack("hi", { "extensions.reconfigure": "पुन: कॉन्फ़िगर करें", "extensions.configureName": "{name} कॉन्फ़िगर करें", "extensions.allInstalled": "सभी स्थापित एक्सटेंशन", - "tools.installed": "Installed tools", + "tools.installed": "इंस्टॉल किए गए उपकरण", "extensions.scope.shared": "साझा", "extensions.scope.private": "मेरे", "mcp.installed": "स्थापित MCP सर्वर", @@ -1253,49 +1253,49 @@ registerPack("hi", { "extensions.installedSuccess": "{name} इंस्टॉल किया गया", "extensions.removedSuccess": "{name} हटाया गया", "extensions.installFailed": "इंस्टॉल विफल", - "extensions.addCustomMcp": "Add MCP server", - "extensions.customMcpPhase.connection": "Connection · Step 1 of 3", - "extensions.customMcpPhase.authentication": "Review · Step 2 of 3", - "extensions.customMcpPhase.review": "Step 2 of 3", - "extensions.customMcpPhase.result": "Result · Step 3 of 3", - "extensions.customMcpPhase.connectionLabel": "Connection", - "extensions.customMcpPhase.authenticationLabel": "Review", - "extensions.customMcpPhase.reviewLabel": "Review", - "extensions.customMcpPhase.resultLabel": "Result", - "extensions.customMcpProgress": "Add an MCP server in three steps", - "extensions.customMcpName": "Server name", - "extensions.customMcpNameHint": "Use a name you will recognize in Extensions.", - "extensions.customMcpId": "Server ID", + "extensions.addCustomMcp": "MCP सर्वर जोड़ें", + "extensions.customMcpPhase.connection": "3 में से चरण 1", + "extensions.customMcpPhase.authentication": "3 में से चरण 2", + "extensions.customMcpPhase.review": "3 में से चरण 2", + "extensions.customMcpPhase.result": "3 में से चरण 3", + "extensions.customMcpPhase.connectionLabel": "कनेक्शन", + "extensions.customMcpPhase.authenticationLabel": "समीक्षा", + "extensions.customMcpPhase.reviewLabel": "समीक्षा", + "extensions.customMcpPhase.resultLabel": "परिणाम", + "extensions.customMcpProgress": "तीन चरणों में MCP सर्वर जोड़ें", + "extensions.customMcpName": "सर्वर का नाम", + "extensions.customMcpNameHint": "ऐसा नाम इस्तेमाल करें जिसे आप एक्सटेंशन में आसानी से पहचान सकें।", + "extensions.customMcpId": "सर्वर ID", "extensions.customMcpIdGenerated": "ID: {id}", - "extensions.customMcpIdHint": "A unique ID: lowercase letters, numbers, underscores, hyphens, or dots, starting with a letter or number (128 chars max).", - "extensions.customMcpAdvanced": "Advanced options", - "extensions.customMcpRecommended": "Recommended", - "extensions.customMcpEndpoint": "Server address", - "extensions.customMcpRequired": "Name, ID, and endpoint are required.", - "extensions.customMcpHttpsOnly": "The endpoint must use HTTPS.", - "extensions.customMcpNameRequired": "Enter a server name.", - "extensions.customMcpNameTooLong": "Server name must be 256 characters or fewer.", - "extensions.customMcpNameControls": "Server name cannot contain control characters.", - "extensions.customMcpIdRequired": "Enter a server ID.", - "extensions.customMcpIdInvalid": "Server ID must use lowercase letters, numbers, underscores, hyphens, or dots, starting with a letter or number (128 chars max).", - "extensions.customMcpEndpointRequired": "Enter a server address.", - "extensions.customMcpEndpointHttps": "Enter a public HTTPS URL without credentials, fragments, localhost, or an IP address.", - "extensions.customMcpAuthHint": "Choose how this server authenticates. Credentials are configured only after registration.", - "extensions.customMcpReviewHint": "Add it now, then install it from Extensions. Connect an account or add a token if needed.", - "extensions.customMcpAuth.no_auth": "No authentication", - "extensions.customMcpAuth.bearer": "Bearer token", + "extensions.customMcpIdHint": "छोटे अक्षरों, संख्याओं, अंडरस्कोर, हाइफ़न या बिंदुओं वाली एक विशिष्ट ID, जो किसी अक्षर या संख्या से शुरू हो (अधिकतम 128 वर्ण)।", + "extensions.customMcpAdvanced": "उन्नत विकल्प", + "extensions.customMcpRecommended": "सुझाया गया", + "extensions.customMcpEndpoint": "सर्वर का पता", + "extensions.customMcpRequired": "नाम, ID और एंडपॉइंट आवश्यक हैं।", + "extensions.customMcpHttpsOnly": "एंडपॉइंट को HTTPS का उपयोग करना चाहिए।", + "extensions.customMcpNameRequired": "सर्वर का नाम दर्ज करें।", + "extensions.customMcpNameTooLong": "सर्वर का नाम 256 वर्ण या उससे कम होना चाहिए।", + "extensions.customMcpNameControls": "सर्वर के नाम में नियंत्रण वर्ण नहीं हो सकते।", + "extensions.customMcpIdRequired": "सर्वर ID दर्ज करें।", + "extensions.customMcpIdInvalid": "सर्वर ID में छोटे अक्षर, संख्याएँ, अंडरस्कोर, हाइफ़न या बिंदु होने चाहिए, यह किसी अक्षर या संख्या से शुरू हो और अधिकतम 128 वर्ण की हो।", + "extensions.customMcpEndpointRequired": "सर्वर का पता दर्ज करें।", + "extensions.customMcpEndpointHttps": "क्रेडेंशियल, फ़्रैगमेंट, localhost या IP पते के बिना सार्वजनिक HTTPS URL दर्ज करें।", + "extensions.customMcpAuthHint": "IronClaw पहले बिना क्रेडेंशियल के कनेक्ट होकर पता लगाता है कि OAuth या Bearer टोकन की आवश्यकता है या नहीं। इसे उन्नत विकल्पों में बदला जा सकता है।", + "extensions.customMcpReviewHint": "इसे अभी जोड़ें, फिर एक्सटेंशन से इंस्टॉल करें। आवश्यकता होने पर कोई खाता कनेक्ट करें या टोकन जोड़ें।", + "extensions.customMcpAuth.no_auth": "कोई प्रमाणीकरण नहीं", + "extensions.customMcpAuth.bearer": "Bearer टोकन", "extensions.customMcpAuth.oauth": "OAuth", - "extensions.customMcpAuth.auto": "Automatic detection", - "extensions.customMcpRegister": "Add server", - "extensions.customMcpRegistered": "{name} added", - "extensions.customMcpRegisterFailed": "Could not add this server. Try again.", - "extensions.customMcpSetupRequired": "Registration complete — setup required", - "extensions.customMcpSetupRequiredHint": "Credentials can be added later from this extension's Setup action in the Extensions list.", - "extensions.customMcpReady": "Server added", - "extensions.customMcpReadyHint": "Find it in Extensions. Install it before using it. If it asks for access, connect an account or add a token.", - "extensions.customMcpFinishLater": "Finish later", - "extensions.customMcpContinueSetup": "Continue setup", - "extensions.customMcpProjectionMissing": "The server was added, but it is not showing in Extensions yet. Try again.", + "extensions.customMcpAuth.auto": "स्वचालित पहचान", + "extensions.customMcpRegister": "सर्वर जोड़ें", + "extensions.customMcpRegistered": "{name} जोड़ा गया", + "extensions.customMcpRegisterFailed": "यह सर्वर नहीं जोड़ा जा सका। फिर से प्रयास करें।", + "extensions.customMcpSetupRequired": "सर्वर जोड़ा गया — सेटअप पूरा करें", + "extensions.customMcpSetupRequiredHint": "इसे एक्सटेंशन में खोजें, फिर आवश्यकता होने पर खाता कनेक्ट करें या टोकन जोड़ें।", + "extensions.customMcpReady": "सर्वर जोड़ा गया", + "extensions.customMcpReadyHint": "इसे एक्सटेंशन में खोजें और इंस्टॉल करें, फिर आवश्यकता होने पर खाता कनेक्ट करें या टोकन जोड़ें।", + "extensions.customMcpFinishLater": "बाद में पूरा करें", + "extensions.customMcpContinueSetup": "सेटअप जारी रखें", + "extensions.customMcpProjectionMissing": "सर्वर जोड़ दिया गया है, लेकिन अभी एक्सटेंशन में दिखाई नहीं दे रहा। फिर से प्रयास करें।", "extensions.removeFailed": "हटाना विफल", "extensions.openingAuth": "प्रमाणीकरण खुल रहा है...", "extensions.configurationRequired": "कॉन्फ़िगरेशन आवश्यक है", @@ -1343,8 +1343,8 @@ registerPack("hi", { "extensions.reconnect": "पुनः कनेक्ट करें", "extensions.emptyInstalledTitle": "कोई एक्सटेंशन इंस्टॉल नहीं है", "extensions.emptyInstalledDesc": "WASM टूल, चैनल और MCP सर्वर को खोजने और इंस्टॉल करने के लिए रजिस्ट्री टैब ब्राउज़ करें।", - "extensions.emptyToolsTitle": "No tool extensions yet", - "extensions.emptyToolsDesc": "Install an extension with tool capabilities from the registry to see it here.", + "extensions.emptyToolsTitle": "अभी कोई उपकरण एक्सटेंशन नहीं है", + "extensions.emptyToolsDesc": "इसे यहाँ देखने के लिए रजिस्ट्री से उपकरण क्षमताओं वाला एक्सटेंशन इंस्टॉल करें।", "common.dismiss": "खारिज करें", "common.pin": "पिन करें", "common.unpin": "अनपिन करें", @@ -1453,6 +1453,8 @@ registerPack("hi", { "chat.generatedImageUnavailable": "इतिहास पेलोड में जनरेट की गई इमेज उपलब्ध नहीं है", "chat.messageAttachmentAlt": "संदेश अटैचमेंट", "chat.copyMessage": "संदेश कॉपी करें", + "chat.downloadRunArtifact": "यह रन डाउनलोड करें", + "chat.downloadThreadArtifact": "पूरी थ्रेड डाउनलोड करें", "chat.retryMessage": "संदेश फिर से आज़माएं", "chat.history.loadFailed": "वार्तालाप इतिहास लोड करने में विफल।", "chat.failure.connectionLost": "सर्वर से कनेक्शन टूट गया। दोबारा कनेक्ट करके फिर प्रयास करें।", @@ -1479,7 +1481,7 @@ registerPack("hi", { "pairing.connectFromExtensions": "जारी रखने के लिए एक्सटेंशन पेज से {name} कनेक्ट करें।", "pairing.connectFailedRetry": "कनेक्शन विफल रहा। फिर से प्रयास करें।", "extensions.authUrlHttpsRequired": "ऑथेंटिकेशन URL में HTTPS होना चाहिए।", - "tools.available": "Available tools", + "tools.available": "उपलब्ध उपकरण", "slackSetup.placeholder.keepSecret": "कॉन्फ़िगर है; बनाए रखने के लिए खाली छोड़ें", // Telegram setup + pairing @@ -1499,6 +1501,19 @@ registerPack("hi", { "telegramSetup.remove": "बॉट हटाएँ", "telegramSetup.removeConfirm": "Telegram बॉट हटाएँ? नया टोकन सहेजे जाने तक चैनल रुक जाएगा।", "telegramSetup.removeFailed": "Telegram बॉट हटाना विफल रहा।", + "pairing.web.title": "{name} कनेक्ट करें", + "pairing.web.instructions": "QR कोड स्कैन करें या लिंक खोलें, फिर इस खाते को पेयर करने के लिए कोड {name} बॉट को भेजें।", + "pairing.web.instructionsNoLink": "इस खाते को पेयर करने के लिए नीचे दिया गया कोड {name} बॉट को भेजें।", + "pairing.web.copyCode": "कोड कॉपी करें", + "pairing.web.openIn": "{name} में खोलें", + "pairing.web.qrAlt": "{name} पेयरिंग QR", + "pairing.web.expiresIn": "{time} में समाप्त होगा", + "pairing.web.expired": "यह पेयरिंग कोड समाप्त हो गया है।", + "pairing.web.getNewCode": "नया कोड पाएँ", + "pairing.web.paired": "{name} पेयर किया गया", + "pairing.web.disconnect": "डिस्कनेक्ट करें", + "pairing.web.disconnectFailed": "{name} को डिस्कनेक्ट नहीं किया जा सका।", + "pairing.web.loadFailed": "{name} के लिए पेयरिंग कोड नहीं मिल सका।", "telegramPairing.title": "Telegram कनेक्ट करें", "telegramPairing.instructions": "QR कोड स्कैन करें या लिंक खोलें, फिर इस खाते को पेयर करने के लिए Telegram में Start दबाएँ।", "telegramPairing.copyCode": "कोड कॉपी करें", diff --git a/crates/ironclaw_webui/frontend/src/i18n/ja.ts b/crates/ironclaw_webui/frontend/src/i18n/ja.ts index 1bb671ee469..ddeb3fa5fdf 100644 --- a/crates/ironclaw_webui/frontend/src/i18n/ja.ts +++ b/crates/ironclaw_webui/frontend/src/i18n/ja.ts @@ -222,7 +222,7 @@ registerPack("ja", { // Extensions tabs "extensions.installed": "インストール済み", "extensions.channels": "チャネル", - "extensions.tools": "Tools", + "extensions.tools": "ツール", "extensions.registry": "レジストリ", // Settings tabs @@ -1237,7 +1237,7 @@ registerPack("ja", { "extensions.reconfigure": "再設定", "extensions.configureName": "{name} を設定します", "extensions.allInstalled": "インストール済み", - "tools.installed": "Installed tools", + "tools.installed": "インストール済みのツール", "extensions.scope.shared": "共有", "extensions.scope.private": "自分のもの", "mcp.installed": "インストール済みの MCP サーバー", @@ -1253,49 +1253,49 @@ registerPack("ja", { "extensions.installedSuccess": "{name} をインストールしました", "extensions.removedSuccess": "{name} を削除しました", "extensions.installFailed": "インストールに失敗しました", - "extensions.addCustomMcp": "Add MCP server", - "extensions.customMcpPhase.connection": "Connection · Step 1 of 3", - "extensions.customMcpPhase.authentication": "Review · Step 2 of 3", - "extensions.customMcpPhase.review": "Step 2 of 3", - "extensions.customMcpPhase.result": "Result · Step 3 of 3", - "extensions.customMcpPhase.connectionLabel": "Connection", - "extensions.customMcpPhase.authenticationLabel": "Review", - "extensions.customMcpPhase.reviewLabel": "Review", - "extensions.customMcpPhase.resultLabel": "Result", - "extensions.customMcpProgress": "Add an MCP server in three steps", - "extensions.customMcpName": "Server name", - "extensions.customMcpNameHint": "Use a name you will recognize in Extensions.", - "extensions.customMcpId": "Server ID", + "extensions.addCustomMcp": "MCPサーバーを追加", + "extensions.customMcpPhase.connection": "3ステップ中1", + "extensions.customMcpPhase.authentication": "3ステップ中2", + "extensions.customMcpPhase.review": "3ステップ中2", + "extensions.customMcpPhase.result": "3ステップ中3", + "extensions.customMcpPhase.connectionLabel": "接続", + "extensions.customMcpPhase.authenticationLabel": "確認", + "extensions.customMcpPhase.reviewLabel": "確認", + "extensions.customMcpPhase.resultLabel": "結果", + "extensions.customMcpProgress": "3つのステップでMCPサーバーを追加", + "extensions.customMcpName": "サーバー名", + "extensions.customMcpNameHint": "拡張機能で識別しやすい名前を使用してください。", + "extensions.customMcpId": "サーバーID", "extensions.customMcpIdGenerated": "ID: {id}", - "extensions.customMcpIdHint": "A unique ID: lowercase letters, numbers, underscores, hyphens, or dots, starting with a letter or number (128 chars max).", - "extensions.customMcpAdvanced": "Advanced options", - "extensions.customMcpRecommended": "Recommended", - "extensions.customMcpEndpoint": "Server address", - "extensions.customMcpRequired": "Name, ID, and endpoint are required.", - "extensions.customMcpHttpsOnly": "The endpoint must use HTTPS.", - "extensions.customMcpNameRequired": "Enter a server name.", - "extensions.customMcpNameTooLong": "Server name must be 256 characters or fewer.", - "extensions.customMcpNameControls": "Server name cannot contain control characters.", - "extensions.customMcpIdRequired": "Enter a server ID.", - "extensions.customMcpIdInvalid": "Server ID must use lowercase letters, numbers, underscores, hyphens, or dots, starting with a letter or number (128 chars max).", - "extensions.customMcpEndpointRequired": "Enter a server address.", - "extensions.customMcpEndpointHttps": "Enter a public HTTPS URL without credentials, fragments, localhost, or an IP address.", - "extensions.customMcpAuthHint": "Choose how this server authenticates. Credentials are configured only after registration.", - "extensions.customMcpReviewHint": "Add it now, then install it from Extensions. Connect an account or add a token if needed.", - "extensions.customMcpAuth.no_auth": "No authentication", - "extensions.customMcpAuth.bearer": "Bearer token", + "extensions.customMcpIdHint": "小文字、数字、アンダースコア、ハイフン、ピリオドを使用し、文字または数字で始まる一意のID(最大128文字)。", + "extensions.customMcpAdvanced": "詳細オプション", + "extensions.customMcpRecommended": "推奨", + "extensions.customMcpEndpoint": "サーバーアドレス", + "extensions.customMcpRequired": "名前、ID、エンドポイントは必須です。", + "extensions.customMcpHttpsOnly": "エンドポイントにはHTTPSを使用する必要があります。", + "extensions.customMcpNameRequired": "サーバー名を入力してください。", + "extensions.customMcpNameTooLong": "サーバー名は256文字以内にしてください。", + "extensions.customMcpNameControls": "サーバー名に制御文字は使用できません。", + "extensions.customMcpIdRequired": "サーバーIDを入力してください。", + "extensions.customMcpIdInvalid": "サーバーIDには小文字、数字、アンダースコア、ハイフン、ピリオドを使用し、文字または数字で始めてください(最大128文字)。", + "extensions.customMcpEndpointRequired": "サーバーアドレスを入力してください。", + "extensions.customMcpEndpointHttps": "認証情報、フラグメント、localhost、IPアドレスを含まない公開HTTPS URLを入力してください。", + "extensions.customMcpAuthHint": "IronClawはまず認証情報なしで接続し、OAuthまたはBearerトークンが必要かどうかを検出します。詳細オプションで変更できます。", + "extensions.customMcpReviewHint": "今すぐ追加し、拡張機能からインストールしてください。必要に応じてアカウントを接続するか、トークンを追加してください。", + "extensions.customMcpAuth.no_auth": "認証なし", + "extensions.customMcpAuth.bearer": "Bearerトークン", "extensions.customMcpAuth.oauth": "OAuth", - "extensions.customMcpAuth.auto": "Automatic detection", - "extensions.customMcpRegister": "Add server", - "extensions.customMcpRegistered": "{name} added", - "extensions.customMcpRegisterFailed": "Could not add this server. Try again.", - "extensions.customMcpSetupRequired": "Registration complete — setup required", - "extensions.customMcpSetupRequiredHint": "Credentials can be added later from this extension's Setup action in the Extensions list.", - "extensions.customMcpReady": "Server added", - "extensions.customMcpReadyHint": "Find it in Extensions. Install it before using it. If it asks for access, connect an account or add a token.", - "extensions.customMcpFinishLater": "Finish later", - "extensions.customMcpContinueSetup": "Continue setup", - "extensions.customMcpProjectionMissing": "The server was added, but it is not showing in Extensions yet. Try again.", + "extensions.customMcpAuth.auto": "自動検出", + "extensions.customMcpRegister": "サーバーを追加", + "extensions.customMcpRegistered": "{name}を追加しました", + "extensions.customMcpRegisterFailed": "このサーバーを追加できませんでした。もう一度お試しください。", + "extensions.customMcpSetupRequired": "サーバーを追加しました — セットアップを完了してください", + "extensions.customMcpSetupRequiredHint": "拡張機能で確認し、必要に応じてアカウントを接続するかトークンを追加してください。", + "extensions.customMcpReady": "サーバーを追加しました", + "extensions.customMcpReadyHint": "拡張機能で確認してインストールし、必要に応じてアカウントを接続するかトークンを追加してください。", + "extensions.customMcpFinishLater": "後で完了する", + "extensions.customMcpContinueSetup": "セットアップを続ける", + "extensions.customMcpProjectionMissing": "サーバーは追加されましたが、まだ拡張機能に表示されていません。もう一度お試しください。", "extensions.removeFailed": "削除に失敗しました", "extensions.openingAuth": "認証を開いています...", "extensions.configurationRequired": "設定が必要です", @@ -1343,8 +1343,8 @@ registerPack("ja", { "extensions.reconnect": "再接続", "extensions.emptyInstalledTitle": "拡張機能がインストールされていません", "extensions.emptyInstalledDesc": "レジストリタブを参照して、WASMツール、チャネル、およびMCPサーバーをインストールしてください。", - "extensions.emptyToolsTitle": "No tool extensions yet", - "extensions.emptyToolsDesc": "Install an extension with tool capabilities from the registry to see it here.", + "extensions.emptyToolsTitle": "ツール拡張機能はまだありません", + "extensions.emptyToolsDesc": "レジストリからツール機能を持つ拡張機能をインストールすると、ここに表示されます。", "common.dismiss": "閉じる", "common.pin": "ピン留め", "common.unpin": "ピン留め解除", @@ -1453,6 +1453,8 @@ registerPack("ja", { "chat.generatedImageUnavailable": "履歴ペイロードに生成画像がありません", "chat.messageAttachmentAlt": "メッセージ添付ファイル", "chat.copyMessage": "メッセージをコピー", + "chat.downloadRunArtifact": "この実行をダウンロード", + "chat.downloadThreadArtifact": "スレッド全体をダウンロード", "chat.retryMessage": "メッセージを再試行", "chat.history.loadFailed": "会話履歴を読み込めませんでした。", "chat.failure.connectionLost": "サーバーとの接続が切れました。再接続してもう一度お試しください。", @@ -1479,7 +1481,7 @@ registerPack("ja", { "pairing.connectFromExtensions": "続行するには、拡張機能ページで {name} に接続してください。", "pairing.connectFailedRetry": "接続に失敗しました。もう一度お試しください。", "extensions.authUrlHttpsRequired": "認証 URL には HTTPS が必要です。", - "tools.available": "Available tools", + "tools.available": "利用可能なツール", "slackSetup.placeholder.keepSecret": "設定済み。保持する場合は空欄", // Telegram setup + pairing @@ -1499,6 +1501,19 @@ registerPack("ja", { "telegramSetup.remove": "ボットを削除", "telegramSetup.removeConfirm": "Telegramボットを削除しますか?新しいトークンを保存するまでチャネルは停止します。", "telegramSetup.removeFailed": "Telegramボットの削除に失敗しました。", + "pairing.web.title": "{name}に接続", + "pairing.web.instructions": "QRコードをスキャンするかリンクを開き、コードを{name}ボットに送信してこのアカウントをペアリングしてください。", + "pairing.web.instructionsNoLink": "以下のコードを{name}ボットに送信して、このアカウントをペアリングしてください。", + "pairing.web.copyCode": "コードをコピー", + "pairing.web.openIn": "{name}で開く", + "pairing.web.qrAlt": "{name}ペアリング用QRコード", + "pairing.web.expiresIn": "有効期限まで{time}", + "pairing.web.expired": "このペアリングコードは期限切れです。", + "pairing.web.getNewCode": "新しいコードを取得", + "pairing.web.paired": "{name}をペアリングしました", + "pairing.web.disconnect": "接続を解除", + "pairing.web.disconnectFailed": "{name}の接続解除に失敗しました。", + "pairing.web.loadFailed": "{name}のペアリングコードを取得できませんでした。", "telegramPairing.title": "Telegramを接続", "telegramPairing.instructions": "QRコードをスキャンするかリンクを開き、Telegramで「開始」を押してこのアカウントをペアリングしてください。", "telegramPairing.copyCode": "コードをコピー", diff --git a/crates/ironclaw_webui/frontend/src/i18n/ko.ts b/crates/ironclaw_webui/frontend/src/i18n/ko.ts index ec3009745bd..a5bae6f0a82 100644 --- a/crates/ironclaw_webui/frontend/src/i18n/ko.ts +++ b/crates/ironclaw_webui/frontend/src/i18n/ko.ts @@ -222,7 +222,7 @@ registerPack("ko", { // Extensions tabs "extensions.installed": "설치됨", "extensions.channels": "채널", - "extensions.tools": "Tools", + "extensions.tools": "도구", "extensions.registry": "레지스트리", // Settings tabs @@ -1237,7 +1237,7 @@ registerPack("ko", { "extensions.reconfigure": "재구성", "extensions.configureName": "{name} 구성", "extensions.allInstalled": "설치된 모든 확장 프로그램", - "tools.installed": "Installed tools", + "tools.installed": "설치된 도구", "extensions.scope.shared": "공유", "extensions.scope.private": "내 것", "mcp.installed": "설치된 MCP 서버", @@ -1253,49 +1253,49 @@ registerPack("ko", { "extensions.installedSuccess": "{name} 설치됨", "extensions.removedSuccess": "{name} 제거됨", "extensions.installFailed": "설치 실패", - "extensions.addCustomMcp": "Add MCP server", - "extensions.customMcpPhase.connection": "Connection · Step 1 of 3", - "extensions.customMcpPhase.authentication": "Review · Step 2 of 3", - "extensions.customMcpPhase.review": "Step 2 of 3", - "extensions.customMcpPhase.result": "Result · Step 3 of 3", - "extensions.customMcpPhase.connectionLabel": "Connection", - "extensions.customMcpPhase.authenticationLabel": "Review", - "extensions.customMcpPhase.reviewLabel": "Review", - "extensions.customMcpPhase.resultLabel": "Result", - "extensions.customMcpProgress": "Add an MCP server in three steps", - "extensions.customMcpName": "Server name", - "extensions.customMcpNameHint": "Use a name you will recognize in Extensions.", - "extensions.customMcpId": "Server ID", + "extensions.addCustomMcp": "MCP 서버 추가", + "extensions.customMcpPhase.connection": "3단계 중 1단계", + "extensions.customMcpPhase.authentication": "3단계 중 2단계", + "extensions.customMcpPhase.review": "3단계 중 2단계", + "extensions.customMcpPhase.result": "3단계 중 3단계", + "extensions.customMcpPhase.connectionLabel": "연결", + "extensions.customMcpPhase.authenticationLabel": "검토", + "extensions.customMcpPhase.reviewLabel": "검토", + "extensions.customMcpPhase.resultLabel": "결과", + "extensions.customMcpProgress": "세 단계로 MCP 서버 추가", + "extensions.customMcpName": "서버 이름", + "extensions.customMcpNameHint": "확장 프로그램에서 알아보기 쉬운 이름을 사용하세요.", + "extensions.customMcpId": "서버 ID", "extensions.customMcpIdGenerated": "ID: {id}", - "extensions.customMcpIdHint": "A unique ID: lowercase letters, numbers, underscores, hyphens, or dots, starting with a letter or number (128 chars max).", - "extensions.customMcpAdvanced": "Advanced options", - "extensions.customMcpRecommended": "Recommended", - "extensions.customMcpEndpoint": "Server address", - "extensions.customMcpRequired": "Name, ID, and endpoint are required.", - "extensions.customMcpHttpsOnly": "The endpoint must use HTTPS.", - "extensions.customMcpNameRequired": "Enter a server name.", - "extensions.customMcpNameTooLong": "Server name must be 256 characters or fewer.", - "extensions.customMcpNameControls": "Server name cannot contain control characters.", - "extensions.customMcpIdRequired": "Enter a server ID.", - "extensions.customMcpIdInvalid": "Server ID must use lowercase letters, numbers, underscores, hyphens, or dots, starting with a letter or number (128 chars max).", - "extensions.customMcpEndpointRequired": "Enter a server address.", - "extensions.customMcpEndpointHttps": "Enter a public HTTPS URL without credentials, fragments, localhost, or an IP address.", - "extensions.customMcpAuthHint": "Choose how this server authenticates. Credentials are configured only after registration.", - "extensions.customMcpReviewHint": "Add it now, then install it from Extensions. Connect an account or add a token if needed.", - "extensions.customMcpAuth.no_auth": "No authentication", - "extensions.customMcpAuth.bearer": "Bearer token", + "extensions.customMcpIdHint": "소문자, 숫자, 밑줄, 하이픈 또는 점을 사용하고 문자나 숫자로 시작하는 고유 ID입니다(최대 128자).", + "extensions.customMcpAdvanced": "고급 옵션", + "extensions.customMcpRecommended": "권장", + "extensions.customMcpEndpoint": "서버 주소", + "extensions.customMcpRequired": "이름, ID, 엔드포인트는 필수입니다.", + "extensions.customMcpHttpsOnly": "엔드포인트는 HTTPS를 사용해야 합니다.", + "extensions.customMcpNameRequired": "서버 이름을 입력하세요.", + "extensions.customMcpNameTooLong": "서버 이름은 256자 이하여야 합니다.", + "extensions.customMcpNameControls": "서버 이름에는 제어 문자를 사용할 수 없습니다.", + "extensions.customMcpIdRequired": "서버 ID를 입력하세요.", + "extensions.customMcpIdInvalid": "서버 ID는 소문자, 숫자, 밑줄, 하이픈 또는 점을 사용하고 문자나 숫자로 시작해야 하며 최대 128자여야 합니다.", + "extensions.customMcpEndpointRequired": "서버 주소를 입력하세요.", + "extensions.customMcpEndpointHttps": "자격 증명, 프래그먼트, localhost 또는 IP 주소가 없는 공개 HTTPS URL을 입력하세요.", + "extensions.customMcpAuthHint": "IronClaw는 먼저 자격 증명 없이 연결하여 OAuth 또는 Bearer 토큰이 필요한지 감지합니다. 고급 옵션에서 변경할 수 있습니다.", + "extensions.customMcpReviewHint": "지금 추가한 다음 확장 프로그램에서 설치하세요. 필요한 경우 계정을 연결하거나 토큰을 추가하세요.", + "extensions.customMcpAuth.no_auth": "인증 없음", + "extensions.customMcpAuth.bearer": "Bearer 토큰", "extensions.customMcpAuth.oauth": "OAuth", - "extensions.customMcpAuth.auto": "Automatic detection", - "extensions.customMcpRegister": "Add server", - "extensions.customMcpRegistered": "{name} added", - "extensions.customMcpRegisterFailed": "Could not add this server. Try again.", - "extensions.customMcpSetupRequired": "Registration complete — setup required", - "extensions.customMcpSetupRequiredHint": "Credentials can be added later from this extension's Setup action in the Extensions list.", - "extensions.customMcpReady": "Server added", - "extensions.customMcpReadyHint": "Find it in Extensions. Install it before using it. If it asks for access, connect an account or add a token.", - "extensions.customMcpFinishLater": "Finish later", - "extensions.customMcpContinueSetup": "Continue setup", - "extensions.customMcpProjectionMissing": "The server was added, but it is not showing in Extensions yet. Try again.", + "extensions.customMcpAuth.auto": "자동 감지", + "extensions.customMcpRegister": "서버 추가", + "extensions.customMcpRegistered": "{name} 추가됨", + "extensions.customMcpRegisterFailed": "이 서버를 추가하지 못했습니다. 다시 시도하세요.", + "extensions.customMcpSetupRequired": "서버 추가됨 — 설정을 완료하세요", + "extensions.customMcpSetupRequiredHint": "확장 프로그램에서 찾은 다음 필요한 경우 계정을 연결하거나 토큰을 추가하세요.", + "extensions.customMcpReady": "서버 추가됨", + "extensions.customMcpReadyHint": "확장 프로그램에서 찾아 설치한 다음 필요한 경우 계정을 연결하거나 토큰을 추가하세요.", + "extensions.customMcpFinishLater": "나중에 완료", + "extensions.customMcpContinueSetup": "설정 계속", + "extensions.customMcpProjectionMissing": "서버가 추가되었지만 아직 확장 프로그램에 표시되지 않습니다. 다시 시도하세요.", "extensions.removeFailed": "제거 실패", "extensions.openingAuth": "인증 여는 중...", "extensions.configurationRequired": "설정 필요", @@ -1343,8 +1343,8 @@ registerPack("ko", { "extensions.reconnect": "다시 연결", "extensions.emptyInstalledTitle": "설치된 확장 프로그램 없음", "extensions.emptyInstalledDesc": "WASM 도구, 채널 및 MCP 서버를 검색하고 설치하려면 레지스트리 탭을 탐색하세요.", - "extensions.emptyToolsTitle": "No tool extensions yet", - "extensions.emptyToolsDesc": "Install an extension with tool capabilities from the registry to see it here.", + "extensions.emptyToolsTitle": "아직 도구 확장 프로그램이 없습니다", + "extensions.emptyToolsDesc": "레지스트리에서 도구 기능이 있는 확장 프로그램을 설치하면 여기에 표시됩니다.", "common.dismiss": "닫기", "common.pin": "고정", "common.unpin": "고정 해제", @@ -1453,6 +1453,8 @@ registerPack("ko", { "chat.generatedImageUnavailable": "기록 페이로드에서 생성된 이미지를 사용할 수 없습니다", "chat.messageAttachmentAlt": "메시지 첨부 파일", "chat.copyMessage": "메시지 복사", + "chat.downloadRunArtifact": "이 실행 다운로드", + "chat.downloadThreadArtifact": "전체 스레드 다운로드", "chat.retryMessage": "메시지 다시 시도", "chat.history.loadFailed": "대화 기록을 불러오지 못했습니다.", "chat.failure.connectionLost": "서버 연결이 끊어졌습니다. 다시 연결한 후 재시도하세요.", @@ -1479,7 +1481,7 @@ registerPack("ko", { "pairing.connectFromExtensions": "계속하려면 확장 페이지에서 {name}을 연결하세요.", "pairing.connectFailedRetry": "연결에 실패했습니다. 다시 시도하세요.", "extensions.authUrlHttpsRequired": "인증 URL은 HTTPS를 사용해야 합니다.", - "tools.available": "Available tools", + "tools.available": "사용 가능한 도구", "slackSetup.placeholder.keepSecret": "구성됨; 유지하려면 비워두세요", // Telegram setup + pairing @@ -1499,6 +1501,19 @@ registerPack("ko", { "telegramSetup.remove": "봇 제거", "telegramSetup.removeConfirm": "Telegram 봇을 제거할까요? 새 토큰을 저장할 때까지 채널이 중지됩니다.", "telegramSetup.removeFailed": "Telegram 봇 제거에 실패했습니다.", + "pairing.web.title": "{name} 연결", + "pairing.web.instructions": "QR 코드를 스캔하거나 링크를 연 다음 {name} 봇에 코드를 보내 이 계정을 페어링하세요.", + "pairing.web.instructionsNoLink": "아래 코드를 {name} 봇에 보내 이 계정을 페어링하세요.", + "pairing.web.copyCode": "코드 복사", + "pairing.web.openIn": "{name}에서 열기", + "pairing.web.qrAlt": "{name} 페어링 QR 코드", + "pairing.web.expiresIn": "{time} 후 만료", + "pairing.web.expired": "이 페어링 코드는 만료되었습니다.", + "pairing.web.getNewCode": "새 코드 받기", + "pairing.web.paired": "{name} 페어링됨", + "pairing.web.disconnect": "연결 해제", + "pairing.web.disconnectFailed": "{name} 연결을 해제하지 못했습니다.", + "pairing.web.loadFailed": "{name} 페어링 코드를 가져오지 못했습니다.", "telegramPairing.title": "Telegram 연결", "telegramPairing.instructions": "QR 코드를 스캔하거나 링크를 연 뒤 Telegram에서 시작을 눌러 이 계정을 페어링하세요.", "telegramPairing.copyCode": "코드 복사", diff --git a/crates/ironclaw_webui/frontend/src/i18n/pt-BR.ts b/crates/ironclaw_webui/frontend/src/i18n/pt-BR.ts index 166f657b9cc..64fe54b50bc 100644 --- a/crates/ironclaw_webui/frontend/src/i18n/pt-BR.ts +++ b/crates/ironclaw_webui/frontend/src/i18n/pt-BR.ts @@ -222,7 +222,7 @@ registerPack("pt-BR", { // Extensions tabs "extensions.installed": "Instaladas", "extensions.channels": "Canais", - "extensions.tools": "Tools", + "extensions.tools": "Ferramentas", "extensions.registry": "Registro", // Settings tabs @@ -1237,7 +1237,7 @@ registerPack("pt-BR", { "extensions.reconfigure": "Reconfigurar", "extensions.configureName": "Configurar {name}", "extensions.allInstalled": "Todas as extensões instaladas", - "tools.installed": "Installed tools", + "tools.installed": "Ferramentas instaladas", "extensions.scope.shared": "compartilhadas", "extensions.scope.private": "minhas", "mcp.installed": "Servidores MCP instalados", @@ -1253,49 +1253,49 @@ registerPack("pt-BR", { "extensions.installedSuccess": "{name} foi instalada", "extensions.removedSuccess": "{name} foi removida", "extensions.installFailed": "Falha na instalação", - "extensions.addCustomMcp": "Add MCP server", - "extensions.customMcpPhase.connection": "Connection · Step 1 of 3", - "extensions.customMcpPhase.authentication": "Review · Step 2 of 3", - "extensions.customMcpPhase.review": "Step 2 of 3", - "extensions.customMcpPhase.result": "Result · Step 3 of 3", - "extensions.customMcpPhase.connectionLabel": "Connection", - "extensions.customMcpPhase.authenticationLabel": "Review", - "extensions.customMcpPhase.reviewLabel": "Review", - "extensions.customMcpPhase.resultLabel": "Result", - "extensions.customMcpProgress": "Add an MCP server in three steps", - "extensions.customMcpName": "Server name", - "extensions.customMcpNameHint": "Use a name you will recognize in Extensions.", - "extensions.customMcpId": "Server ID", + "extensions.addCustomMcp": "Adicionar servidor MCP", + "extensions.customMcpPhase.connection": "Etapa 1 de 3", + "extensions.customMcpPhase.authentication": "Etapa 2 de 3", + "extensions.customMcpPhase.review": "Etapa 2 de 3", + "extensions.customMcpPhase.result": "Etapa 3 de 3", + "extensions.customMcpPhase.connectionLabel": "Conexão", + "extensions.customMcpPhase.authenticationLabel": "Revisão", + "extensions.customMcpPhase.reviewLabel": "Revisão", + "extensions.customMcpPhase.resultLabel": "Resultado", + "extensions.customMcpProgress": "Adicione um servidor MCP em três etapas", + "extensions.customMcpName": "Nome do servidor", + "extensions.customMcpNameHint": "Use um nome que você reconheça em Extensões.", + "extensions.customMcpId": "ID do servidor", "extensions.customMcpIdGenerated": "ID: {id}", - "extensions.customMcpIdHint": "A unique ID: lowercase letters, numbers, underscores, hyphens, or dots, starting with a letter or number (128 chars max).", - "extensions.customMcpAdvanced": "Advanced options", - "extensions.customMcpRecommended": "Recommended", - "extensions.customMcpEndpoint": "Server address", - "extensions.customMcpRequired": "Name, ID, and endpoint are required.", - "extensions.customMcpHttpsOnly": "The endpoint must use HTTPS.", - "extensions.customMcpNameRequired": "Enter a server name.", - "extensions.customMcpNameTooLong": "Server name must be 256 characters or fewer.", - "extensions.customMcpNameControls": "Server name cannot contain control characters.", - "extensions.customMcpIdRequired": "Enter a server ID.", - "extensions.customMcpIdInvalid": "Server ID must use lowercase letters, numbers, underscores, hyphens, or dots, starting with a letter or number (128 chars max).", - "extensions.customMcpEndpointRequired": "Enter a server address.", - "extensions.customMcpEndpointHttps": "Enter a public HTTPS URL without credentials, fragments, localhost, or an IP address.", - "extensions.customMcpAuthHint": "Choose how this server authenticates. Credentials are configured only after registration.", - "extensions.customMcpReviewHint": "Add it now, then install it from Extensions. Connect an account or add a token if needed.", - "extensions.customMcpAuth.no_auth": "No authentication", - "extensions.customMcpAuth.bearer": "Bearer token", + "extensions.customMcpIdHint": "Um ID exclusivo com letras minúsculas, números, sublinhados, hífens ou pontos, começando com uma letra ou número (máximo de 128 caracteres).", + "extensions.customMcpAdvanced": "Opções avançadas", + "extensions.customMcpRecommended": "Recomendado", + "extensions.customMcpEndpoint": "Endereço do servidor", + "extensions.customMcpRequired": "Nome, ID e endpoint são obrigatórios.", + "extensions.customMcpHttpsOnly": "O endpoint deve usar HTTPS.", + "extensions.customMcpNameRequired": "Digite um nome de servidor.", + "extensions.customMcpNameTooLong": "O nome do servidor deve ter no máximo 256 caracteres.", + "extensions.customMcpNameControls": "O nome do servidor não pode conter caracteres de controle.", + "extensions.customMcpIdRequired": "Digite um ID de servidor.", + "extensions.customMcpIdInvalid": "O ID do servidor deve usar letras minúsculas, números, sublinhados, hífens ou pontos, começar com uma letra ou número e ter no máximo 128 caracteres.", + "extensions.customMcpEndpointRequired": "Digite um endereço de servidor.", + "extensions.customMcpEndpointHttps": "Digite uma URL HTTPS pública sem credenciais, fragmentos, localhost ou endereço IP.", + "extensions.customMcpAuthHint": "O IronClaw se conecta primeiro sem credenciais para detectar se OAuth ou um token Bearer é necessário. Altere essa opção em Opções avançadas.", + "extensions.customMcpReviewHint": "Adicione-o agora e depois instale-o em Extensões. Conecte uma conta ou adicione um token, se necessário.", + "extensions.customMcpAuth.no_auth": "Sem autenticação", + "extensions.customMcpAuth.bearer": "Token Bearer", "extensions.customMcpAuth.oauth": "OAuth", - "extensions.customMcpAuth.auto": "Automatic detection", - "extensions.customMcpRegister": "Add server", - "extensions.customMcpRegistered": "{name} added", - "extensions.customMcpRegisterFailed": "Could not add this server. Try again.", - "extensions.customMcpSetupRequired": "Registration complete — setup required", - "extensions.customMcpSetupRequiredHint": "Credentials can be added later from this extension's Setup action in the Extensions list.", - "extensions.customMcpReady": "Server added", - "extensions.customMcpReadyHint": "Find it in Extensions. Install it before using it. If it asks for access, connect an account or add a token.", - "extensions.customMcpFinishLater": "Finish later", - "extensions.customMcpContinueSetup": "Continue setup", - "extensions.customMcpProjectionMissing": "The server was added, but it is not showing in Extensions yet. Try again.", + "extensions.customMcpAuth.auto": "Detecção automática", + "extensions.customMcpRegister": "Adicionar servidor", + "extensions.customMcpRegistered": "{name} adicionado", + "extensions.customMcpRegisterFailed": "Não foi possível adicionar este servidor. Tente novamente.", + "extensions.customMcpSetupRequired": "Servidor adicionado — conclua a configuração", + "extensions.customMcpSetupRequiredHint": "Encontre-o em Extensões e depois conecte uma conta ou adicione um token, se necessário.", + "extensions.customMcpReady": "Servidor adicionado", + "extensions.customMcpReadyHint": "Encontre-o em Extensões, instale-o e depois conecte uma conta ou adicione um token, se necessário.", + "extensions.customMcpFinishLater": "Concluir depois", + "extensions.customMcpContinueSetup": "Continuar configuração", + "extensions.customMcpProjectionMissing": "O servidor foi adicionado, mas ainda não aparece em Extensões. Tente novamente.", "extensions.removeFailed": "Falha ao remover", "extensions.openingAuth": "Abrindo autenticação...", "extensions.configurationRequired": "Configuração obrigatória", @@ -1343,8 +1343,8 @@ registerPack("pt-BR", { "extensions.reconnect": "Reconectar", "extensions.emptyInstalledTitle": "Nenhuma extensão instalada", "extensions.emptyInstalledDesc": "Navegue pela guia Registro para descobrir e instalar ferramentas WASM, canais e servidores MCP.", - "extensions.emptyToolsTitle": "No tool extensions yet", - "extensions.emptyToolsDesc": "Install an extension with tool capabilities from the registry to see it here.", + "extensions.emptyToolsTitle": "Ainda não há extensões de ferramentas", + "extensions.emptyToolsDesc": "Instale pelo registro uma extensão com recursos de ferramentas para vê-la aqui.", "common.dismiss": "Dispensar", "common.pin": "Fixar", "common.unpin": "Desafixar", @@ -1453,6 +1453,8 @@ registerPack("pt-BR", { "chat.generatedImageUnavailable": "Imagem gerada indisponível no histórico", "chat.messageAttachmentAlt": "Anexo da mensagem", "chat.copyMessage": "Copiar mensagem", + "chat.downloadRunArtifact": "Baixar esta execução", + "chat.downloadThreadArtifact": "Baixar a conversa completa", "chat.retryMessage": "Tentar mensagem novamente", "chat.history.loadFailed": "Falha ao carregar o histórico da conversa.", "chat.failure.connectionLost": "A conexão com o servidor foi perdida. Reconecte e tente novamente.", @@ -1479,7 +1481,7 @@ registerPack("pt-BR", { "pairing.connectFromExtensions": "Conecte {name} pela página Extensões para continuar.", "pairing.connectFailedRetry": "A conexão falhou. Tente novamente.", "extensions.authUrlHttpsRequired": "A URL de autenticação deve usar HTTPS.", - "tools.available": "Available tools", + "tools.available": "Ferramentas disponíveis", "slackSetup.placeholder.keepSecret": "Configurado; deixe em branco para manter", // Telegram setup + pairing @@ -1499,6 +1501,19 @@ registerPack("pt-BR", { "telegramSetup.remove": "Remover bot", "telegramSetup.removeConfirm": "Remover o bot do Telegram? O canal para até um novo token ser salvo.", "telegramSetup.removeFailed": "Falha ao remover o bot do Telegram.", + "pairing.web.title": "Conectar {name}", + "pairing.web.instructions": "Escaneie o código QR ou abra o link e envie o código ao bot do {name} para vincular esta conta.", + "pairing.web.instructionsNoLink": "Envie o código abaixo ao bot do {name} para vincular esta conta.", + "pairing.web.copyCode": "Copiar código", + "pairing.web.openIn": "Abrir no {name}", + "pairing.web.qrAlt": "QR de vinculação do {name}", + "pairing.web.expiresIn": "Expira em {time}", + "pairing.web.expired": "Este código de vinculação expirou.", + "pairing.web.getNewCode": "Obter novo código", + "pairing.web.paired": "{name} vinculado", + "pairing.web.disconnect": "Desconectar", + "pairing.web.disconnectFailed": "Falha ao desconectar o {name}.", + "pairing.web.loadFailed": "Não foi possível obter um código de vinculação para o {name}.", "telegramPairing.title": "Conectar Telegram", "telegramPairing.instructions": "Escaneie o código QR ou abra o link e toque em Iniciar no Telegram para parear esta conta.", "telegramPairing.copyCode": "Copiar código", diff --git a/crates/ironclaw_webui/frontend/src/i18n/uk.ts b/crates/ironclaw_webui/frontend/src/i18n/uk.ts index e1e2cba64ec..9342fcd6c4b 100644 --- a/crates/ironclaw_webui/frontend/src/i18n/uk.ts +++ b/crates/ironclaw_webui/frontend/src/i18n/uk.ts @@ -222,7 +222,7 @@ registerPack("uk", { // Extensions tabs "extensions.installed": "Встановлені", "extensions.channels": "Канали", - "extensions.tools": "Tools", + "extensions.tools": "Інструменти", "extensions.registry": "Реєстр", // Settings tabs @@ -1237,7 +1237,7 @@ registerPack("uk", { "extensions.reconfigure": "Повторно налаштувати", "extensions.configureName": "Налаштувати {name}", "extensions.allInstalled": "Усі встановлені розширення", - "tools.installed": "Installed tools", + "tools.installed": "Встановлені інструменти", "extensions.scope.shared": "спільні", "extensions.scope.private": "мої", "mcp.installed": "Встановлені сервери MCP", @@ -1253,49 +1253,49 @@ registerPack("uk", { "extensions.installedSuccess": "{name} установлено", "extensions.removedSuccess": "{name} видалено", "extensions.installFailed": "Не вдалося встановити", - "extensions.addCustomMcp": "Add MCP server", - "extensions.customMcpPhase.connection": "Connection · Step 1 of 3", - "extensions.customMcpPhase.authentication": "Review · Step 2 of 3", - "extensions.customMcpPhase.review": "Step 2 of 3", - "extensions.customMcpPhase.result": "Result · Step 3 of 3", - "extensions.customMcpPhase.connectionLabel": "Connection", - "extensions.customMcpPhase.authenticationLabel": "Review", - "extensions.customMcpPhase.reviewLabel": "Review", - "extensions.customMcpPhase.resultLabel": "Result", - "extensions.customMcpProgress": "Add an MCP server in three steps", - "extensions.customMcpName": "Server name", - "extensions.customMcpNameHint": "Use a name you will recognize in Extensions.", - "extensions.customMcpId": "Server ID", + "extensions.addCustomMcp": "Додати MCP-сервер", + "extensions.customMcpPhase.connection": "Крок 1 із 3", + "extensions.customMcpPhase.authentication": "Крок 2 із 3", + "extensions.customMcpPhase.review": "Крок 2 із 3", + "extensions.customMcpPhase.result": "Крок 3 із 3", + "extensions.customMcpPhase.connectionLabel": "Підключення", + "extensions.customMcpPhase.authenticationLabel": "Перевірка", + "extensions.customMcpPhase.reviewLabel": "Перевірка", + "extensions.customMcpPhase.resultLabel": "Результат", + "extensions.customMcpProgress": "Додайте MCP-сервер за три кроки", + "extensions.customMcpName": "Назва сервера", + "extensions.customMcpNameHint": "Використовуйте назву, яку легко впізнати в розділі «Розширення».", + "extensions.customMcpId": "Ідентифікатор сервера", "extensions.customMcpIdGenerated": "ID: {id}", - "extensions.customMcpIdHint": "A unique ID: lowercase letters, numbers, underscores, hyphens, or dots, starting with a letter or number (128 chars max).", - "extensions.customMcpAdvanced": "Advanced options", - "extensions.customMcpRecommended": "Recommended", - "extensions.customMcpEndpoint": "Server address", - "extensions.customMcpRequired": "Name, ID, and endpoint are required.", - "extensions.customMcpHttpsOnly": "The endpoint must use HTTPS.", - "extensions.customMcpNameRequired": "Enter a server name.", - "extensions.customMcpNameTooLong": "Server name must be 256 characters or fewer.", - "extensions.customMcpNameControls": "Server name cannot contain control characters.", - "extensions.customMcpIdRequired": "Enter a server ID.", - "extensions.customMcpIdInvalid": "Server ID must use lowercase letters, numbers, underscores, hyphens, or dots, starting with a letter or number (128 chars max).", - "extensions.customMcpEndpointRequired": "Enter a server address.", - "extensions.customMcpEndpointHttps": "Enter a public HTTPS URL without credentials, fragments, localhost, or an IP address.", - "extensions.customMcpAuthHint": "Choose how this server authenticates. Credentials are configured only after registration.", - "extensions.customMcpReviewHint": "Add it now, then install it from Extensions. Connect an account or add a token if needed.", - "extensions.customMcpAuth.no_auth": "No authentication", - "extensions.customMcpAuth.bearer": "Bearer token", + "extensions.customMcpIdHint": "Унікальний ідентифікатор із малих літер, цифр, підкреслень, дефісів або крапок, що починається з літери чи цифри (не більше 128 символів).", + "extensions.customMcpAdvanced": "Розширені параметри", + "extensions.customMcpRecommended": "Рекомендовано", + "extensions.customMcpEndpoint": "Адреса сервера", + "extensions.customMcpRequired": "Назва, ідентифікатор і кінцева точка є обов’язковими.", + "extensions.customMcpHttpsOnly": "Кінцева точка має використовувати HTTPS.", + "extensions.customMcpNameRequired": "Введіть назву сервера.", + "extensions.customMcpNameTooLong": "Назва сервера має містити не більше 256 символів.", + "extensions.customMcpNameControls": "Назва сервера не може містити керівні символи.", + "extensions.customMcpIdRequired": "Введіть ідентифікатор сервера.", + "extensions.customMcpIdInvalid": "Ідентифікатор сервера має містити малі літери, цифри, підкреслення, дефіси або крапки, починатися з літери чи цифри й бути не довшим за 128 символів.", + "extensions.customMcpEndpointRequired": "Введіть адресу сервера.", + "extensions.customMcpEndpointHttps": "Введіть загальнодоступну HTTPS-URL без облікових даних, фрагментів, localhost або IP-адреси.", + "extensions.customMcpAuthHint": "IronClaw спочатку підключається без облікових даних, щоб визначити потребу в OAuth або Bearer-токені. Це можна змінити в розширених параметрах.", + "extensions.customMcpReviewHint": "Додайте його зараз, а потім установіть у розділі «Розширення». За потреби підключіть обліковий запис або додайте токен.", + "extensions.customMcpAuth.no_auth": "Без автентифікації", + "extensions.customMcpAuth.bearer": "Bearer-токен", "extensions.customMcpAuth.oauth": "OAuth", - "extensions.customMcpAuth.auto": "Automatic detection", - "extensions.customMcpRegister": "Add server", - "extensions.customMcpRegistered": "{name} added", - "extensions.customMcpRegisterFailed": "Could not add this server. Try again.", - "extensions.customMcpSetupRequired": "Registration complete — setup required", - "extensions.customMcpSetupRequiredHint": "Credentials can be added later from this extension's Setup action in the Extensions list.", - "extensions.customMcpReady": "Server added", - "extensions.customMcpReadyHint": "Find it in Extensions. Install it before using it. If it asks for access, connect an account or add a token.", - "extensions.customMcpFinishLater": "Finish later", - "extensions.customMcpContinueSetup": "Continue setup", - "extensions.customMcpProjectionMissing": "The server was added, but it is not showing in Extensions yet. Try again.", + "extensions.customMcpAuth.auto": "Автоматичне визначення", + "extensions.customMcpRegister": "Додати сервер", + "extensions.customMcpRegistered": "{name} додано", + "extensions.customMcpRegisterFailed": "Не вдалося додати цей сервер. Спробуйте ще раз.", + "extensions.customMcpSetupRequired": "Сервер додано — завершіть налаштування", + "extensions.customMcpSetupRequiredHint": "Знайдіть його в розділі «Розширення», а потім за потреби підключіть обліковий запис або додайте токен.", + "extensions.customMcpReady": "Сервер додано", + "extensions.customMcpReadyHint": "Знайдіть його в розділі «Розширення», установіть, а потім за потреби підключіть обліковий запис або додайте токен.", + "extensions.customMcpFinishLater": "Завершити пізніше", + "extensions.customMcpContinueSetup": "Продовжити налаштування", + "extensions.customMcpProjectionMissing": "Сервер додано, але він ще не відображається в розділі «Розширення». Спробуйте ще раз.", "extensions.removeFailed": "Не вдалося видалити", "extensions.openingAuth": "Відкриття автентифікації...", "extensions.configurationRequired": "Потрібна конфігурація", @@ -1343,8 +1343,8 @@ registerPack("uk", { "extensions.reconnect": "Перепідключити", "extensions.emptyInstalledTitle": "Розширень не встановлено", "extensions.emptyInstalledDesc": "Перегляньте вкладку Реєстр, щоб знайти та встановити інструменти, канали та сервери WASM.", - "extensions.emptyToolsTitle": "No tool extensions yet", - "extensions.emptyToolsDesc": "Install an extension with tool capabilities from the registry to see it here.", + "extensions.emptyToolsTitle": "Розширень з інструментами ще немає", + "extensions.emptyToolsDesc": "Установіть із реєстру розширення з можливостями інструментів, щоб воно з’явилося тут.", "common.dismiss": "Закрити", "common.pin": "Закріпити", "common.unpin": "Відкріпити", @@ -1453,6 +1453,8 @@ registerPack("uk", { "chat.generatedImageUnavailable": "Згенероване зображення недоступне в історії", "chat.messageAttachmentAlt": "Вкладення повідомлення", "chat.copyMessage": "Копіювати повідомлення", + "chat.downloadRunArtifact": "Завантажити цей запуск", + "chat.downloadThreadArtifact": "Завантажити всю гілку", "chat.retryMessage": "Повторити повідомлення", "chat.history.loadFailed": "Не вдалося завантажити історію розмови.", "chat.failure.connectionLost": "З’єднання із сервером втрачено. Підключіться знову та повторіть спробу.", @@ -1479,7 +1481,7 @@ registerPack("uk", { "pairing.connectFromExtensions": "Підключіть {name} на сторінці Розширення, щоб продовжити.", "pairing.connectFailedRetry": "Не вдалося підключитися. Спробуйте ще раз.", "extensions.authUrlHttpsRequired": "URL автентифікації має використовувати HTTPS.", - "tools.available": "Available tools", + "tools.available": "Доступні інструменти", "slackSetup.placeholder.keepSecret": "Налаштовано; залиште порожнім, щоб зберегти", // Telegram setup + pairing @@ -1499,6 +1501,19 @@ registerPack("uk", { "telegramSetup.remove": "Видалити бота", "telegramSetup.removeConfirm": "Видалити бота Telegram? Канал зупиниться, доки не буде збережено новий токен.", "telegramSetup.removeFailed": "Не вдалося видалити бота Telegram.", + "pairing.web.title": "Підключити {name}", + "pairing.web.instructions": "Відскануйте QR-код або відкрийте посилання, а потім надішліть код боту {name}, щоб пов’язати цей обліковий запис.", + "pairing.web.instructionsNoLink": "Надішліть наведений нижче код боту {name}, щоб пов’язати цей обліковий запис.", + "pairing.web.copyCode": "Копіювати код", + "pairing.web.openIn": "Відкрити в {name}", + "pairing.web.qrAlt": "QR-код для підключення {name}", + "pairing.web.expiresIn": "Термін дії спливає через {time}", + "pairing.web.expired": "Термін дії цього коду підключення минув.", + "pairing.web.getNewCode": "Отримати новий код", + "pairing.web.paired": "{name} підключено", + "pairing.web.disconnect": "Відключити", + "pairing.web.disconnectFailed": "Не вдалося відключити {name}.", + "pairing.web.loadFailed": "Не вдалося отримати код підключення для {name}.", "telegramPairing.title": "Підключити Telegram", "telegramPairing.instructions": "Проскануйте QR-код або відкрийте посилання, потім натисніть «Почати» в Telegram, щоб зв'язати цей обліковий запис.", "telegramPairing.copyCode": "Копіювати код", diff --git a/crates/ironclaw_webui/frontend/src/i18n/zh-CN.ts b/crates/ironclaw_webui/frontend/src/i18n/zh-CN.ts index 2805c59579c..c8129f21b46 100644 --- a/crates/ironclaw_webui/frontend/src/i18n/zh-CN.ts +++ b/crates/ironclaw_webui/frontend/src/i18n/zh-CN.ts @@ -222,7 +222,7 @@ registerPack("zh-CN", { // Extensions tabs "extensions.installed": "已安装", "extensions.channels": "渠道", - "extensions.tools": "Tools", + "extensions.tools": "工具", "extensions.registry": "注册表", // Settings tabs @@ -1237,7 +1237,7 @@ registerPack("zh-CN", { "extensions.reconfigure": "重新配置", "extensions.configureName": "配置 {name}", "extensions.allInstalled": "所有已安装扩展", - "tools.installed": "Installed tools", + "tools.installed": "已安装的工具", "extensions.scope.shared": "共享", "extensions.scope.private": "我的", "mcp.installed": "已安装的 MCP 服务", @@ -1253,49 +1253,49 @@ registerPack("zh-CN", { "extensions.installedSuccess": "已安装 {name}", "extensions.removedSuccess": "已移除 {name}", "extensions.installFailed": "安装失败", - "extensions.addCustomMcp": "Add MCP server", - "extensions.customMcpPhase.connection": "Connection · Step 1 of 3", - "extensions.customMcpPhase.authentication": "Review · Step 2 of 3", - "extensions.customMcpPhase.review": "Step 2 of 3", - "extensions.customMcpPhase.result": "Result · Step 3 of 3", - "extensions.customMcpPhase.connectionLabel": "Connection", - "extensions.customMcpPhase.authenticationLabel": "Review", - "extensions.customMcpPhase.reviewLabel": "Review", - "extensions.customMcpPhase.resultLabel": "Result", - "extensions.customMcpProgress": "Add an MCP server in three steps", - "extensions.customMcpName": "Server name", - "extensions.customMcpNameHint": "Use a name you will recognize in Extensions.", - "extensions.customMcpId": "Server ID", + "extensions.addCustomMcp": "添加 MCP 服务器", + "extensions.customMcpPhase.connection": "第 1 步,共 3 步", + "extensions.customMcpPhase.authentication": "第 2 步,共 3 步", + "extensions.customMcpPhase.review": "第 2 步,共 3 步", + "extensions.customMcpPhase.result": "第 3 步,共 3 步", + "extensions.customMcpPhase.connectionLabel": "连接", + "extensions.customMcpPhase.authenticationLabel": "检查", + "extensions.customMcpPhase.reviewLabel": "检查", + "extensions.customMcpPhase.resultLabel": "结果", + "extensions.customMcpProgress": "分三步添加 MCP 服务器", + "extensions.customMcpName": "服务器名称", + "extensions.customMcpNameHint": "使用一个便于在扩展中识别的名称。", + "extensions.customMcpId": "服务器 ID", "extensions.customMcpIdGenerated": "ID: {id}", - "extensions.customMcpIdHint": "A unique ID: lowercase letters, numbers, underscores, hyphens, or dots, starting with a letter or number (128 chars max).", - "extensions.customMcpAdvanced": "Advanced options", - "extensions.customMcpRecommended": "Recommended", - "extensions.customMcpEndpoint": "Server address", - "extensions.customMcpRequired": "Name, ID, and endpoint are required.", - "extensions.customMcpHttpsOnly": "The endpoint must use HTTPS.", - "extensions.customMcpNameRequired": "Enter a server name.", - "extensions.customMcpNameTooLong": "Server name must be 256 characters or fewer.", - "extensions.customMcpNameControls": "Server name cannot contain control characters.", - "extensions.customMcpIdRequired": "Enter a server ID.", - "extensions.customMcpIdInvalid": "Server ID must use lowercase letters, numbers, underscores, hyphens, or dots, starting with a letter or number (128 chars max).", - "extensions.customMcpEndpointRequired": "Enter a server address.", - "extensions.customMcpEndpointHttps": "Enter a public HTTPS URL without credentials, fragments, localhost, or an IP address.", - "extensions.customMcpAuthHint": "Choose how this server authenticates. Credentials are configured only after registration.", - "extensions.customMcpReviewHint": "Add it now, then install it from Extensions. Connect an account or add a token if needed.", - "extensions.customMcpAuth.no_auth": "No authentication", - "extensions.customMcpAuth.bearer": "Bearer token", + "extensions.customMcpIdHint": "唯一 ID:使用小写字母、数字、下划线、连字符或点,并以字母或数字开头(最多 128 个字符)。", + "extensions.customMcpAdvanced": "高级选项", + "extensions.customMcpRecommended": "推荐", + "extensions.customMcpEndpoint": "服务器地址", + "extensions.customMcpRequired": "名称、ID 和端点均为必填项。", + "extensions.customMcpHttpsOnly": "端点必须使用 HTTPS。", + "extensions.customMcpNameRequired": "请输入服务器名称。", + "extensions.customMcpNameTooLong": "服务器名称不能超过 256 个字符。", + "extensions.customMcpNameControls": "服务器名称不能包含控制字符。", + "extensions.customMcpIdRequired": "请输入服务器 ID。", + "extensions.customMcpIdInvalid": "服务器 ID 必须使用小写字母、数字、下划线、连字符或点,并以字母或数字开头(最多 128 个字符)。", + "extensions.customMcpEndpointRequired": "请输入服务器地址。", + "extensions.customMcpEndpointHttps": "请输入不含凭据、片段、localhost 或 IP 地址的公共 HTTPS URL。", + "extensions.customMcpAuthHint": "IronClaw 会先在不使用凭据的情况下连接,以检测是否需要 OAuth 或持有者令牌。可在高级选项中覆盖此设置。", + "extensions.customMcpReviewHint": "立即添加,然后从扩展中安装。如有需要,请连接账户或添加令牌。", + "extensions.customMcpAuth.no_auth": "无需身份验证", + "extensions.customMcpAuth.bearer": "持有者令牌", "extensions.customMcpAuth.oauth": "OAuth", - "extensions.customMcpAuth.auto": "Automatic detection", - "extensions.customMcpRegister": "Add server", - "extensions.customMcpRegistered": "{name} added", - "extensions.customMcpRegisterFailed": "Could not add this server. Try again.", - "extensions.customMcpSetupRequired": "Registration complete — setup required", - "extensions.customMcpSetupRequiredHint": "Credentials can be added later from this extension's Setup action in the Extensions list.", - "extensions.customMcpReady": "Server added", - "extensions.customMcpReadyHint": "Find it in Extensions. Install it before using it. If it asks for access, connect an account or add a token.", - "extensions.customMcpFinishLater": "Finish later", - "extensions.customMcpContinueSetup": "Continue setup", - "extensions.customMcpProjectionMissing": "The server was added, but it is not showing in Extensions yet. Try again.", + "extensions.customMcpAuth.auto": "自动检测", + "extensions.customMcpRegister": "添加服务器", + "extensions.customMcpRegistered": "已添加 {name}", + "extensions.customMcpRegisterFailed": "无法添加此服务器,请重试。", + "extensions.customMcpSetupRequired": "服务器已添加 — 完成设置", + "extensions.customMcpSetupRequiredHint": "可在扩展中找到它,然后根据需要连接账户或添加令牌。", + "extensions.customMcpReady": "服务器已添加", + "extensions.customMcpReadyHint": "可在扩展中找到并安装它,然后根据需要连接账户或添加令牌。", + "extensions.customMcpFinishLater": "稍后完成", + "extensions.customMcpContinueSetup": "继续设置", + "extensions.customMcpProjectionMissing": "服务器已添加,但尚未显示在扩展中,请重试。", "extensions.removeFailed": "移除失败", "extensions.openingAuth": "正在打开认证...", "extensions.configurationRequired": "需要配置", @@ -1343,8 +1343,8 @@ registerPack("zh-CN", { "extensions.reconnect": "重新连接", "extensions.emptyInstalledTitle": "还未安装任何扩展", "extensions.emptyInstalledDesc": "浏览扩展注册表去发现并安装 WASM 工具、服务通道 和各种 MCP 协议服务服务器。", - "extensions.emptyToolsTitle": "No tool extensions yet", - "extensions.emptyToolsDesc": "Install an extension with tool capabilities from the registry to see it here.", + "extensions.emptyToolsTitle": "尚无工具扩展", + "extensions.emptyToolsDesc": "从注册表安装具有工具能力的扩展后,它将显示在此处。", "common.dismiss": "关闭", "common.pin": "置顶", "common.unpin": "取消置顶", @@ -1452,6 +1452,8 @@ registerPack("zh-CN", { "chat.generatedImageUnavailable": "历史载荷中没有可用的生成图片", "chat.messageAttachmentAlt": "消息附件", "chat.copyMessage": "复制消息", + "chat.downloadRunArtifact": "下载本次运行", + "chat.downloadThreadArtifact": "下载完整对话", "chat.retryMessage": "重试消息", "chat.history.loadFailed": "加载会话历史失败。", "chat.failure.connectionLost": "与服务器的连接已断开。请重新连接后重试。", @@ -1478,7 +1480,7 @@ registerPack("zh-CN", { "pairing.connectFromExtensions": "请从扩展页面连接 {name} 后继续。", "pairing.connectFailedRetry": "连接失败。请重试。", "extensions.authUrlHttpsRequired": "认证 URL 必须使用 HTTPS。", - "tools.available": "Available tools", + "tools.available": "可用工具", "slackSetup.placeholder.keepSecret": "已配置;留空则保留", // Telegram setup + pairing @@ -1498,6 +1500,19 @@ registerPack("zh-CN", { "telegramSetup.remove": "移除机器人", "telegramSetup.removeConfirm": "移除 Telegram 机器人?在保存新令牌之前该频道将停止工作。", "telegramSetup.removeFailed": "移除 Telegram 机器人失败。", + "pairing.web.title": "连接 {name}", + "pairing.web.instructions": "扫描二维码或打开链接,然后将代码发送给 {name} 机器人以配对此账户。", + "pairing.web.instructionsNoLink": "将下面的代码发送给 {name} 机器人以配对此账户。", + "pairing.web.copyCode": "复制代码", + "pairing.web.openIn": "在 {name} 中打开", + "pairing.web.qrAlt": "{name} 配对二维码", + "pairing.web.expiresIn": "{time} 后过期", + "pairing.web.expired": "此配对代码已过期。", + "pairing.web.getNewCode": "获取新代码", + "pairing.web.paired": "{name} 已配对", + "pairing.web.disconnect": "断开连接", + "pairing.web.disconnectFailed": "断开 {name} 连接失败。", + "pairing.web.loadFailed": "无法获取 {name} 配对代码。", "telegramPairing.title": "连接 Telegram", "telegramPairing.instructions": "扫描二维码或打开链接,然后在 Telegram 中点击“开始”以配对此账户。", "telegramPairing.copyCode": "复制代码", diff --git a/crates/ironclaw_webui/frontend/src/lib/i18n.test.ts b/crates/ironclaw_webui/frontend/src/lib/i18n.test.ts index 9284df24a0c..07768d12868 100644 --- a/crates/ironclaw_webui/frontend/src/lib/i18n.test.ts +++ b/crates/ironclaw_webui/frontend/src/lib/i18n.test.ts @@ -92,6 +92,62 @@ function loadLocalePack(locale) { return registeredPack; } +function interpolationParams(value) { + return [...value.matchAll(/\{([^}]+)\}/g)].map((match) => match[1]).sort(); +} + +test("non-English locale packs cover the English key set and interpolation params", () => { + const english = loadLocalePack("en"); + const englishKeys = Object.keys(english).sort(); + + for (const locale of LOCALES.filter((candidate) => candidate !== "en")) { + const pack = loadLocalePack(locale); + const missing = englishKeys.filter((key) => typeof pack[key] !== "string"); + + assert.deepEqual(missing, [], `${locale} missing keys: ${missing.join(", ")}`); + for (const key of englishKeys) { + assert.deepEqual( + interpolationParams(pack[key]), + interpolationParams(english[key]), + `${locale} interpolation params differ for ${key}`, + ); + } + } +}); + +test("non-English locale packs localize exposed workflow copy", () => { + const english = loadLocalePack("en"); + const technicalTerms = new Set([ + "extensions.customMcpIdGenerated", + "extensions.customMcpAuth.oauth", + ]); + const exposedWorkflowKeys = Object.keys(english).filter( + (key) => + !technicalTerms.has(key) && + (key === "chat.downloadRunArtifact" || + key === "chat.downloadThreadArtifact" || + key.startsWith("pairing.web.") || + key === "extensions.tools" || + key === "tools.installed" || + key === "tools.available" || + key === "extensions.addCustomMcp" || + key === "extensions.emptyToolsTitle" || + key === "extensions.emptyToolsDesc" || + key.startsWith("extensions.customMcp")), + ); + + for (const locale of LOCALES.filter((candidate) => candidate !== "en")) { + const pack = loadLocalePack(locale); + for (const key of exposedWorkflowKeys) { + assert.strictEqual( + pack[key] === english[key], + false, + `${locale} must localize ${key}`, + ); + } + } +}); + test("ensurePack: unknown locale resolves null (no loader, not registered)", async () => { const { ensurePack } = loadI18n(); assert.equal(await ensurePack("zz-unknown"), null);