diff --git a/cmd/picoclaw-launcher/internal/ui/i18n.json b/cmd/picoclaw-launcher/internal/ui/i18n.json new file mode 100644 index 000000000..42c672a13 --- /dev/null +++ b/cmd/picoclaw-launcher/internal/ui/i18n.json @@ -0,0 +1,734 @@ +{ + "en": { + "start": "Start", + "stop": "Stop", + "save": "Save", + "cancel": "Cancel", + "edit": "Edit", + "delete": "Delete", + "enabled": "Enabled", + "comingSoon": "Coming soon", + "sidebar.providers": "Providers", + "sidebar.models": "Models", + "sidebar.auth": "Auth", + "sidebar.channels": "Channels", + "sidebar.feishu": "Feishu", + "channel.telegram": "Telegram", + "channel.discord": "Discord", + "channel.slack": "Slack", + "channel.wecom": "WeCom", + "channel.wecom_app": "WeCom App", + "channel.dingtalk": "DingTalk", + "channel.feishu": "Feishu", + "channel.line": "LINE", + "channel.whatsapp": "WhatsApp", + "channel.qq": "QQ", + "channel.onebot": "OneBot", + "channel.maixcam": "MaixCAM", + "sidebar.logs": "Logs", + "sidebar.rawjson": "Raw JSON", + "models.title": "Models", + "models.desc": "Manage LLM model configurations. Models without an API key are grayed out. Only available models can be set as primary.", + "models.add": "+ Add Custom Model", + "models.noModels": "No models configured.", + "models.primary": "Primary", + "models.noKey": "No Key", + "models.setPrimary": "Set Primary", + "models.editModel": "Edit Model", + "models.addModel": "Add Model", + "models.advancedOptions": "Advanced Options", + "models.deleteConfirm": "Delete model \"{name}\"?", + "models.requiredFields": "Model Name and Model ID are required", + "field.modelName": "Model Name", + "field.modelId": "Model ID", + "field.modelIdHint": "Format: protocol/model-id", + "field.apiKey": "API Key", + "field.apiBase": "API Base", + "field.proxy": "Proxy", + "field.authMethod": "Auth Method", + "field.connectMode": "Connect Mode", + "field.workspace": "Workspace", + "field.rpm": "RPM Limit", + "field.requestTimeout": "Request Timeout (s)", + "auth.title": "Provider Authentication", + "auth.desc": "Login to providers using OAuth or API tokens. Credentials are stored locally in ~/.picoclaw/auth.json.", + "auth.notLoggedIn": "Not logged in", + "auth.active": "Active", + "auth.expired": "Expired", + "auth.needsRefresh": "Needs Refresh", + "auth.authenticating": "Authenticating...", + "auth.loginDevice": "Login (Device Code)", + "auth.loginToken": "Login (API Token)", + "auth.loginOAuth": "Login (Browser OAuth)", + "auth.logout": "Logout", + "auth.retry": "Retry", + "auth.waiting": "Waiting...", + "auth.pasteKey": "Paste your API key here...", + "auth.step1": "Step 1: Click the link below", + "auth.step2": "Step 2: Enter this code", + "auth.step3": "Step 3: Complete auth in browser, this page updates automatically", + "auth.method": "Method", + "auth.email": "Email", + "auth.account": "Account", + "auth.project": "Project", + "auth.expires": "Expires", + "ch.configure": "Configure {name} channel settings.", + "ch.docLink": "Configuration Guide", + "ch.accessControl": "Access Control", + "ch.allowFrom": "Allow From (User IDs)", + "ch.addItem": "+ Add", + "ch.mentionOnly": "Mention Only", + "ch.mentionOnlyHint": "Only respond when mentioned", + "ch.groupTrigger": "Group Trigger Prefixes", + "logs.title": "Gateway Logs", + "logs.desc": "Real-time output from the gateway process.", + "logs.clear": "Clear Display", + "logs.autoScroll": "Auto-scroll", + "logs.noLogs": "No logs available. Start the gateway to see output here.", + "logs.noCapture": "Logs are not available. The gateway was not started from this launcher.", + "raw.title": "Raw JSON", + "raw.desc": "Directly edit the configuration file.", + "raw.reload": "Reload", + "raw.format": "Format", + "status.configLoaded": "Config loaded", + "status.configSaved": "Config saved", + "status.loadFailed": "Load failed", + "status.saveFailed": "Save failed", + "status.formatted": "Formatted", + "status.invalidJson": "Invalid JSON, please fix before saving", + "status.jsonValid": "JSON valid", + "status.jsonInvalid": "JSON invalid", + "status.saved": "{name} saved", + "status.tokenEmpty": "Token cannot be empty", + "status.tokenSaved": "Token saved for {name}", + "status.loggedOut": "Logged out from {name}", + "status.loginFailed": "Login failed", + "status.logoutFailed": "Logout failed", + "status.openingBrowser": "Opening browser for authentication...", + "status.loginStarted": "Login started...", + "status.loginSuccess": "Login successful!", + "process.running": "Service running", + "process.notRunning": "Service not running", + "process.starting": "Starting gateway...", + "process.started": "Gateway started", + "process.startFailed": "Failed to start gateway", + "process.stopping": "Stopping gateway...", + "process.stopped": "Gateway stopped", + "process.stopFailed": "Failed to stop gateway", + "process.needModel": "At least one model with API key is required", + "process.needChannel": "At least one channel must be enabled", + "process.checkLogs": "Check Logs for details", + "process.needBoth": "Need model with API key and enabled channel to start", + "process.picoclawNotFoundHint": "Hint: put picoclaw-launcher and the picoclaw executable in the same directory, or add picoclaw's directory to PATH." + }, + "zh": { + "start": "启动", + "stop": "停止", + "save": "保存", + "cancel": "取消", + "edit": "编辑", + "delete": "删除", + "enabled": "启用", + "comingSoon": "即将推出", + "sidebar.providers": "提供商", + "sidebar.models": "模型", + "sidebar.auth": "认证", + "sidebar.channels": "通道", + "sidebar.feishu": "飞书", + "channel.telegram": "Telegram", + "channel.discord": "Discord", + "channel.slack": "Slack", + "channel.wecom": "企业微信机器人", + "channel.wecom_app": "企业微信应用", + "channel.dingtalk": "钉钉", + "channel.feishu": "飞书", + "channel.line": "LINE", + "channel.whatsapp": "WhatsApp", + "channel.qq": "QQ", + "channel.onebot": "OneBot", + "channel.maixcam": "MaixCAM", + "sidebar.logs": "日志", + "sidebar.rawjson": "原始 JSON", + "models.title": "模型", + "models.desc": "管理 LLM 模型配置。没有 API Key 的模型会灰显。只有可用模型才能设为主模型。", + "models.add": "+ 添加自定义模型", + "models.noModels": "暂无模型配置。", + "models.primary": "主模型", + "models.noKey": "无 Key", + "models.setPrimary": "设为主模型", + "models.editModel": "编辑模型", + "models.addModel": "添加模型", + "models.advancedOptions": "高级选项", + "models.deleteConfirm": "确定删除模型“{name}”?", + "models.requiredFields": "模型名称和模型 ID 为必填项", + "field.modelName": "模型名称", + "field.modelId": "模型 ID", + "field.modelIdHint": "格式:协议/模型标识", + "field.apiKey": "API Key", + "field.apiBase": "API 地址", + "field.proxy": "代理", + "field.authMethod": "认证方式", + "field.connectMode": "连接模式", + "field.workspace": "工作区", + "field.rpm": "RPM 限制", + "field.requestTimeout": "请求超时(秒)", + "auth.title": "提供商认证", + "auth.desc": "通过 OAuth 或 API Token 登录提供商。凭证会保存在本地 ~/.picoclaw/auth.json。", + "auth.notLoggedIn": "未登录", + "auth.active": "已激活", + "auth.expired": "已过期", + "auth.needsRefresh": "需要刷新", + "auth.authenticating": "认证中...", + "auth.loginDevice": "登录(设备码)", + "auth.loginToken": "登录(API Token)", + "auth.loginOAuth": "登录(浏览器 OAuth)", + "auth.logout": "登出", + "auth.retry": "重试", + "auth.waiting": "等待中...", + "auth.pasteKey": "请粘贴 API Key...", + "auth.step1": "第 1 步:点击下方链接", + "auth.step2": "第 2 步:输入以下代码", + "auth.step3": "第 3 步:在浏览器完成认证后,本页会自动更新", + "auth.method": "方式", + "auth.email": "邮箱", + "auth.account": "账号", + "auth.project": "项目", + "auth.expires": "过期时间", + "ch.configure": "配置 {name} 通道设置。", + "ch.docLink": "配置指南", + "ch.accessControl": "访问控制", + "ch.allowFrom": "允许的用户 ID", + "ch.addItem": "+ 添加", + "ch.mentionOnly": "仅提及时响应", + "ch.mentionOnlyHint": "只在被 @ 提及时回复", + "ch.groupTrigger": "群聊触发前缀", + "logs.title": "Gateway 日志", + "logs.desc": "Gateway 进程的实时输出。", + "logs.clear": "清除显示", + "logs.autoScroll": "自动滚动", + "logs.noLogs": "暂无日志。启动 Gateway 后可在此查看输出。", + "logs.noCapture": "日志不可用。Gateway 不是通过此启动器启动的。", + "raw.title": "原始 JSON", + "raw.desc": "直接编辑配置文件。", + "raw.reload": "重新加载", + "raw.format": "格式化", + "status.configLoaded": "配置已加载", + "status.configSaved": "配置已保存", + "status.loadFailed": "加载失败", + "status.saveFailed": "保存失败", + "status.formatted": "已格式化", + "status.invalidJson": "JSON 格式无效,请修正后再保存", + "status.jsonValid": "JSON 有效", + "status.jsonInvalid": "JSON 无效", + "status.saved": "{name} 已保存", + "status.tokenEmpty": "Token 不能为空", + "status.tokenSaved": "已保存 {name} 的 Token", + "status.loggedOut": "已从 {name} 登出", + "status.loginFailed": "登录失败", + "status.logoutFailed": "登出失败", + "status.openingBrowser": "正在打开浏览器进行认证...", + "status.loginStarted": "登录已启动...", + "status.loginSuccess": "登录成功!", + "process.running": "服务已启动", + "process.notRunning": "服务未启动", + "process.starting": "正在启动 Gateway...", + "process.started": "Gateway 已启动", + "process.startFailed": "Gateway 启动失败", + "process.stopping": "正在停止 Gateway...", + "process.stopped": "Gateway 已停止", + "process.stopFailed": "Gateway 停止失败", + "process.needModel": "至少需要一个配置了 API Key 的模型", + "process.needChannel": "至少需要启用一个通道", + "process.checkLogs": "请查看日志了解详情", + "process.needBoth": "需要可用模型和启用通道后才能启动", + "process.picoclawNotFoundHint": "提示:请将 picoclaw-launcher 和 picoclaw 可执行文件放在同一目录,或把 picoclaw 所在目录加入 PATH。" + }, + "ja": { + "start": "Start", + "stop": "Stop", + "save": "Save", + "cancel": "Cancel", + "edit": "Edit", + "delete": "Delete", + "enabled": "Enabled", + "comingSoon": "Coming soon", + "sidebar.providers": "Providers", + "sidebar.models": "Models", + "sidebar.auth": "Auth", + "sidebar.channels": "Channels", + "sidebar.feishu": "Feishu", + "channel.telegram": "Telegram", + "channel.discord": "Discord", + "channel.slack": "Slack", + "channel.wecom": "WeCom", + "channel.wecom_app": "WeCom App", + "channel.dingtalk": "DingTalk", + "channel.feishu": "Feishu", + "channel.line": "LINE", + "channel.whatsapp": "WhatsApp", + "channel.qq": "QQ", + "channel.onebot": "OneBot", + "channel.maixcam": "MaixCAM", + "sidebar.logs": "Logs", + "sidebar.rawjson": "Raw JSON", + "models.title": "Models", + "models.desc": "Manage LLM model configurations. Models without an API key are grayed out. Only available models can be set as primary.", + "models.add": "+ Add Custom Model", + "models.noModels": "No models configured.", + "models.primary": "Primary", + "models.noKey": "No Key", + "models.setPrimary": "Set Primary", + "models.editModel": "Edit Model", + "models.addModel": "Add Model", + "models.advancedOptions": "Advanced Options", + "models.deleteConfirm": "Delete model \"{name}\"?", + "models.requiredFields": "Model Name and Model ID are required", + "field.modelName": "Model Name", + "field.modelId": "Model ID", + "field.modelIdHint": "Format: protocol/model-id", + "field.apiKey": "API Key", + "field.apiBase": "API Base", + "field.proxy": "Proxy", + "field.authMethod": "Auth Method", + "field.connectMode": "Connect Mode", + "field.workspace": "Workspace", + "field.rpm": "RPM Limit", + "field.requestTimeout": "Request Timeout (s)", + "auth.title": "Provider Authentication", + "auth.desc": "Login to providers using OAuth or API tokens. Credentials are stored locally in ~/.picoclaw/auth.json.", + "auth.notLoggedIn": "Not logged in", + "auth.active": "Active", + "auth.expired": "Expired", + "auth.needsRefresh": "Needs Refresh", + "auth.authenticating": "Authenticating...", + "auth.loginDevice": "Login (Device Code)", + "auth.loginToken": "Login (API Token)", + "auth.loginOAuth": "Login (Browser OAuth)", + "auth.logout": "Logout", + "auth.retry": "Retry", + "auth.waiting": "Waiting...", + "auth.pasteKey": "Paste your API key here...", + "auth.step1": "Step 1: Click the link below", + "auth.step2": "Step 2: Enter this code", + "auth.step3": "Step 3: Complete auth in browser, this page updates automatically", + "auth.method": "Method", + "auth.email": "Email", + "auth.account": "Account", + "auth.project": "Project", + "auth.expires": "Expires", + "ch.configure": "Configure {name} channel settings.", + "ch.docLink": "Configuration Guide", + "ch.accessControl": "Access Control", + "ch.allowFrom": "Allow From (User IDs)", + "ch.addItem": "+ Add", + "ch.mentionOnly": "Mention Only", + "ch.mentionOnlyHint": "Only respond when mentioned", + "ch.groupTrigger": "Group Trigger Prefixes", + "logs.title": "Gateway Logs", + "logs.desc": "Real-time output from the gateway process.", + "logs.clear": "Clear Display", + "logs.autoScroll": "Auto-scroll", + "logs.noLogs": "No logs available. Start the gateway to see output here.", + "logs.noCapture": "Logs are not available. The gateway was not started from this launcher.", + "raw.title": "Raw JSON", + "raw.desc": "Directly edit the configuration file.", + "raw.reload": "Reload", + "raw.format": "Format", + "status.configLoaded": "Config loaded", + "status.configSaved": "Config saved", + "status.loadFailed": "Load failed", + "status.saveFailed": "Save failed", + "status.formatted": "Formatted", + "status.invalidJson": "Invalid JSON, please fix before saving", + "status.jsonValid": "JSON valid", + "status.jsonInvalid": "JSON invalid", + "status.saved": "{name} saved", + "status.tokenEmpty": "Token cannot be empty", + "status.tokenSaved": "Token saved for {name}", + "status.loggedOut": "Logged out from {name}", + "status.loginFailed": "Login failed", + "status.logoutFailed": "Logout failed", + "status.openingBrowser": "Opening browser for authentication...", + "status.loginStarted": "Login started...", + "status.loginSuccess": "Login successful!", + "process.running": "Service running", + "process.notRunning": "Service not running", + "process.starting": "Starting gateway...", + "process.started": "Gateway started", + "process.startFailed": "Failed to start gateway", + "process.stopping": "Stopping gateway...", + "process.stopped": "Gateway stopped", + "process.stopFailed": "Failed to stop gateway", + "process.needModel": "At least one model with API key is required", + "process.needChannel": "At least one channel must be enabled", + "process.checkLogs": "Check Logs for details", + "process.needBoth": "Need model with API key and enabled channel to start", + "process.picoclawNotFoundHint": "Hint: put picoclaw-launcher and the picoclaw executable in the same directory, or add picoclaw's directory to PATH." + }, + "pt-br": { + "start": "Start", + "stop": "Stop", + "save": "Save", + "cancel": "Cancel", + "edit": "Edit", + "delete": "Delete", + "enabled": "Enabled", + "comingSoon": "Coming soon", + "sidebar.providers": "Providers", + "sidebar.models": "Models", + "sidebar.auth": "Auth", + "sidebar.channels": "Channels", + "sidebar.feishu": "Feishu", + "channel.telegram": "Telegram", + "channel.discord": "Discord", + "channel.slack": "Slack", + "channel.wecom": "WeCom", + "channel.wecom_app": "WeCom App", + "channel.dingtalk": "DingTalk", + "channel.feishu": "Feishu", + "channel.line": "LINE", + "channel.whatsapp": "WhatsApp", + "channel.qq": "QQ", + "channel.onebot": "OneBot", + "channel.maixcam": "MaixCAM", + "sidebar.logs": "Logs", + "sidebar.rawjson": "Raw JSON", + "models.title": "Models", + "models.desc": "Manage LLM model configurations. Models without an API key are grayed out. Only available models can be set as primary.", + "models.add": "+ Add Custom Model", + "models.noModels": "No models configured.", + "models.primary": "Primary", + "models.noKey": "No Key", + "models.setPrimary": "Set Primary", + "models.editModel": "Edit Model", + "models.addModel": "Add Model", + "models.advancedOptions": "Advanced Options", + "models.deleteConfirm": "Delete model \"{name}\"?", + "models.requiredFields": "Model Name and Model ID are required", + "field.modelName": "Model Name", + "field.modelId": "Model ID", + "field.modelIdHint": "Format: protocol/model-id", + "field.apiKey": "API Key", + "field.apiBase": "API Base", + "field.proxy": "Proxy", + "field.authMethod": "Auth Method", + "field.connectMode": "Connect Mode", + "field.workspace": "Workspace", + "field.rpm": "RPM Limit", + "field.requestTimeout": "Request Timeout (s)", + "auth.title": "Provider Authentication", + "auth.desc": "Login to providers using OAuth or API tokens. Credentials are stored locally in ~/.picoclaw/auth.json.", + "auth.notLoggedIn": "Not logged in", + "auth.active": "Active", + "auth.expired": "Expired", + "auth.needsRefresh": "Needs Refresh", + "auth.authenticating": "Authenticating...", + "auth.loginDevice": "Login (Device Code)", + "auth.loginToken": "Login (API Token)", + "auth.loginOAuth": "Login (Browser OAuth)", + "auth.logout": "Logout", + "auth.retry": "Retry", + "auth.waiting": "Waiting...", + "auth.pasteKey": "Paste your API key here...", + "auth.step1": "Step 1: Click the link below", + "auth.step2": "Step 2: Enter this code", + "auth.step3": "Step 3: Complete auth in browser, this page updates automatically", + "auth.method": "Method", + "auth.email": "Email", + "auth.account": "Account", + "auth.project": "Project", + "auth.expires": "Expires", + "ch.configure": "Configure {name} channel settings.", + "ch.docLink": "Configuration Guide", + "ch.accessControl": "Access Control", + "ch.allowFrom": "Allow From (User IDs)", + "ch.addItem": "+ Add", + "ch.mentionOnly": "Mention Only", + "ch.mentionOnlyHint": "Only respond when mentioned", + "ch.groupTrigger": "Group Trigger Prefixes", + "logs.title": "Gateway Logs", + "logs.desc": "Real-time output from the gateway process.", + "logs.clear": "Clear Display", + "logs.autoScroll": "Auto-scroll", + "logs.noLogs": "No logs available. Start the gateway to see output here.", + "logs.noCapture": "Logs are not available. The gateway was not started from this launcher.", + "raw.title": "Raw JSON", + "raw.desc": "Directly edit the configuration file.", + "raw.reload": "Reload", + "raw.format": "Format", + "status.configLoaded": "Config loaded", + "status.configSaved": "Config saved", + "status.loadFailed": "Load failed", + "status.saveFailed": "Save failed", + "status.formatted": "Formatted", + "status.invalidJson": "Invalid JSON, please fix before saving", + "status.jsonValid": "JSON valid", + "status.jsonInvalid": "JSON invalid", + "status.saved": "{name} saved", + "status.tokenEmpty": "Token cannot be empty", + "status.tokenSaved": "Token saved for {name}", + "status.loggedOut": "Logged out from {name}", + "status.loginFailed": "Login failed", + "status.logoutFailed": "Logout failed", + "status.openingBrowser": "Opening browser for authentication...", + "status.loginStarted": "Login started...", + "status.loginSuccess": "Login successful!", + "process.running": "Service running", + "process.notRunning": "Service not running", + "process.starting": "Starting gateway...", + "process.started": "Gateway started", + "process.startFailed": "Failed to start gateway", + "process.stopping": "Stopping gateway...", + "process.stopped": "Gateway stopped", + "process.stopFailed": "Failed to stop gateway", + "process.needModel": "At least one model with API key is required", + "process.needChannel": "At least one channel must be enabled", + "process.checkLogs": "Check Logs for details", + "process.needBoth": "Need model with API key and enabled channel to start", + "process.picoclawNotFoundHint": "Hint: put picoclaw-launcher and the picoclaw executable in the same directory, or add picoclaw's directory to PATH." + }, + "vi": { + "start": "Start", + "stop": "Stop", + "save": "Save", + "cancel": "Cancel", + "edit": "Edit", + "delete": "Delete", + "enabled": "Enabled", + "comingSoon": "Coming soon", + "sidebar.providers": "Providers", + "sidebar.models": "Models", + "sidebar.auth": "Auth", + "sidebar.channels": "Channels", + "sidebar.feishu": "Feishu", + "channel.telegram": "Telegram", + "channel.discord": "Discord", + "channel.slack": "Slack", + "channel.wecom": "WeCom", + "channel.wecom_app": "WeCom App", + "channel.dingtalk": "DingTalk", + "channel.feishu": "Feishu", + "channel.line": "LINE", + "channel.whatsapp": "WhatsApp", + "channel.qq": "QQ", + "channel.onebot": "OneBot", + "channel.maixcam": "MaixCAM", + "sidebar.logs": "Logs", + "sidebar.rawjson": "Raw JSON", + "models.title": "Models", + "models.desc": "Manage LLM model configurations. Models without an API key are grayed out. Only available models can be set as primary.", + "models.add": "+ Add Custom Model", + "models.noModels": "No models configured.", + "models.primary": "Primary", + "models.noKey": "No Key", + "models.setPrimary": "Set Primary", + "models.editModel": "Edit Model", + "models.addModel": "Add Model", + "models.advancedOptions": "Advanced Options", + "models.deleteConfirm": "Delete model \"{name}\"?", + "models.requiredFields": "Model Name and Model ID are required", + "field.modelName": "Model Name", + "field.modelId": "Model ID", + "field.modelIdHint": "Format: protocol/model-id", + "field.apiKey": "API Key", + "field.apiBase": "API Base", + "field.proxy": "Proxy", + "field.authMethod": "Auth Method", + "field.connectMode": "Connect Mode", + "field.workspace": "Workspace", + "field.rpm": "RPM Limit", + "field.requestTimeout": "Request Timeout (s)", + "auth.title": "Provider Authentication", + "auth.desc": "Login to providers using OAuth or API tokens. Credentials are stored locally in ~/.picoclaw/auth.json.", + "auth.notLoggedIn": "Not logged in", + "auth.active": "Active", + "auth.expired": "Expired", + "auth.needsRefresh": "Needs Refresh", + "auth.authenticating": "Authenticating...", + "auth.loginDevice": "Login (Device Code)", + "auth.loginToken": "Login (API Token)", + "auth.loginOAuth": "Login (Browser OAuth)", + "auth.logout": "Logout", + "auth.retry": "Retry", + "auth.waiting": "Waiting...", + "auth.pasteKey": "Paste your API key here...", + "auth.step1": "Step 1: Click the link below", + "auth.step2": "Step 2: Enter this code", + "auth.step3": "Step 3: Complete auth in browser, this page updates automatically", + "auth.method": "Method", + "auth.email": "Email", + "auth.account": "Account", + "auth.project": "Project", + "auth.expires": "Expires", + "ch.configure": "Configure {name} channel settings.", + "ch.docLink": "Configuration Guide", + "ch.accessControl": "Access Control", + "ch.allowFrom": "Allow From (User IDs)", + "ch.addItem": "+ Add", + "ch.mentionOnly": "Mention Only", + "ch.mentionOnlyHint": "Only respond when mentioned", + "ch.groupTrigger": "Group Trigger Prefixes", + "logs.title": "Gateway Logs", + "logs.desc": "Real-time output from the gateway process.", + "logs.clear": "Clear Display", + "logs.autoScroll": "Auto-scroll", + "logs.noLogs": "No logs available. Start the gateway to see output here.", + "logs.noCapture": "Logs are not available. The gateway was not started from this launcher.", + "raw.title": "Raw JSON", + "raw.desc": "Directly edit the configuration file.", + "raw.reload": "Reload", + "raw.format": "Format", + "status.configLoaded": "Config loaded", + "status.configSaved": "Config saved", + "status.loadFailed": "Load failed", + "status.saveFailed": "Save failed", + "status.formatted": "Formatted", + "status.invalidJson": "Invalid JSON, please fix before saving", + "status.jsonValid": "JSON valid", + "status.jsonInvalid": "JSON invalid", + "status.saved": "{name} saved", + "status.tokenEmpty": "Token cannot be empty", + "status.tokenSaved": "Token saved for {name}", + "status.loggedOut": "Logged out from {name}", + "status.loginFailed": "Login failed", + "status.logoutFailed": "Logout failed", + "status.openingBrowser": "Opening browser for authentication...", + "status.loginStarted": "Login started...", + "status.loginSuccess": "Login successful!", + "process.running": "Service running", + "process.notRunning": "Service not running", + "process.starting": "Starting gateway...", + "process.started": "Gateway started", + "process.startFailed": "Failed to start gateway", + "process.stopping": "Stopping gateway...", + "process.stopped": "Gateway stopped", + "process.stopFailed": "Failed to stop gateway", + "process.needModel": "At least one model with API key is required", + "process.needChannel": "At least one channel must be enabled", + "process.checkLogs": "Check Logs for details", + "process.needBoth": "Need model with API key and enabled channel to start", + "process.picoclawNotFoundHint": "Hint: put picoclaw-launcher and the picoclaw executable in the same directory, or add picoclaw's directory to PATH." + }, + "fr": { + "start": "Start", + "stop": "Stop", + "save": "Save", + "cancel": "Cancel", + "edit": "Edit", + "delete": "Delete", + "enabled": "Enabled", + "comingSoon": "Coming soon", + "sidebar.providers": "Providers", + "sidebar.models": "Models", + "sidebar.auth": "Auth", + "sidebar.channels": "Channels", + "sidebar.feishu": "Feishu", + "channel.telegram": "Telegram", + "channel.discord": "Discord", + "channel.slack": "Slack", + "channel.wecom": "WeCom", + "channel.wecom_app": "WeCom App", + "channel.dingtalk": "DingTalk", + "channel.feishu": "Feishu", + "channel.line": "LINE", + "channel.whatsapp": "WhatsApp", + "channel.qq": "QQ", + "channel.onebot": "OneBot", + "channel.maixcam": "MaixCAM", + "sidebar.logs": "Logs", + "sidebar.rawjson": "Raw JSON", + "models.title": "Models", + "models.desc": "Manage LLM model configurations. Models without an API key are grayed out. Only available models can be set as primary.", + "models.add": "+ Add Custom Model", + "models.noModels": "No models configured.", + "models.primary": "Primary", + "models.noKey": "No Key", + "models.setPrimary": "Set Primary", + "models.editModel": "Edit Model", + "models.addModel": "Add Model", + "models.advancedOptions": "Advanced Options", + "models.deleteConfirm": "Delete model \"{name}\"?", + "models.requiredFields": "Model Name and Model ID are required", + "field.modelName": "Model Name", + "field.modelId": "Model ID", + "field.modelIdHint": "Format: protocol/model-id", + "field.apiKey": "API Key", + "field.apiBase": "API Base", + "field.proxy": "Proxy", + "field.authMethod": "Auth Method", + "field.connectMode": "Connect Mode", + "field.workspace": "Workspace", + "field.rpm": "RPM Limit", + "field.requestTimeout": "Request Timeout (s)", + "auth.title": "Provider Authentication", + "auth.desc": "Login to providers using OAuth or API tokens. Credentials are stored locally in ~/.picoclaw/auth.json.", + "auth.notLoggedIn": "Not logged in", + "auth.active": "Active", + "auth.expired": "Expired", + "auth.needsRefresh": "Needs Refresh", + "auth.authenticating": "Authenticating...", + "auth.loginDevice": "Login (Device Code)", + "auth.loginToken": "Login (API Token)", + "auth.loginOAuth": "Login (Browser OAuth)", + "auth.logout": "Logout", + "auth.retry": "Retry", + "auth.waiting": "Waiting...", + "auth.pasteKey": "Paste your API key here...", + "auth.step1": "Step 1: Click the link below", + "auth.step2": "Step 2: Enter this code", + "auth.step3": "Step 3: Complete auth in browser, this page updates automatically", + "auth.method": "Method", + "auth.email": "Email", + "auth.account": "Account", + "auth.project": "Project", + "auth.expires": "Expires", + "ch.configure": "Configure {name} channel settings.", + "ch.docLink": "Configuration Guide", + "ch.accessControl": "Access Control", + "ch.allowFrom": "Allow From (User IDs)", + "ch.addItem": "+ Add", + "ch.mentionOnly": "Mention Only", + "ch.mentionOnlyHint": "Only respond when mentioned", + "ch.groupTrigger": "Group Trigger Prefixes", + "logs.title": "Gateway Logs", + "logs.desc": "Real-time output from the gateway process.", + "logs.clear": "Clear Display", + "logs.autoScroll": "Auto-scroll", + "logs.noLogs": "No logs available. Start the gateway to see output here.", + "logs.noCapture": "Logs are not available. The gateway was not started from this launcher.", + "raw.title": "Raw JSON", + "raw.desc": "Directly edit the configuration file.", + "raw.reload": "Reload", + "raw.format": "Format", + "status.configLoaded": "Config loaded", + "status.configSaved": "Config saved", + "status.loadFailed": "Load failed", + "status.saveFailed": "Save failed", + "status.formatted": "Formatted", + "status.invalidJson": "Invalid JSON, please fix before saving", + "status.jsonValid": "JSON valid", + "status.jsonInvalid": "JSON invalid", + "status.saved": "{name} saved", + "status.tokenEmpty": "Token cannot be empty", + "status.tokenSaved": "Token saved for {name}", + "status.loggedOut": "Logged out from {name}", + "status.loginFailed": "Login failed", + "status.logoutFailed": "Logout failed", + "status.openingBrowser": "Opening browser for authentication...", + "status.loginStarted": "Login started...", + "status.loginSuccess": "Login successful!", + "process.running": "Service running", + "process.notRunning": "Service not running", + "process.starting": "Starting gateway...", + "process.started": "Gateway started", + "process.startFailed": "Failed to start gateway", + "process.stopping": "Stopping gateway...", + "process.stopped": "Gateway stopped", + "process.stopFailed": "Failed to stop gateway", + "process.needModel": "At least one model with API key is required", + "process.needChannel": "At least one channel must be enabled", + "process.checkLogs": "Check Logs for details", + "process.needBoth": "Need model with API key and enabled channel to start", + "process.picoclawNotFoundHint": "Hint: put picoclaw-launcher and the picoclaw executable in the same directory, or add picoclaw's directory to PATH." + } +} diff --git a/cmd/picoclaw-launcher/internal/ui/index.html b/cmd/picoclaw-launcher/internal/ui/index.html index 93893fd75..08e89821f 100644 --- a/cmd/picoclaw-launcher/internal/ui/index.html +++ b/cmd/picoclaw-launcher/internal/ui/index.html @@ -1,1999 +1,929 @@ - - PicoClaw Config - + PicoClaw Config (Bulma) + - + + - - -
-
- -

PicoClaw Config

-
-
- - -
-
- - -
-
- -
- -
-
- -
+ - -