From fc1492290ddf1ee63883626668dd13272952f2a5 Mon Sep 17 00:00:00 2001 From: Hongyu Shi Date: Tue, 21 Oct 2025 11:21:13 +0800 Subject: [PATCH 1/6] =?UTF-8?q?chore(i18n):=20=E6=9B=B4=E6=96=B0=20Tools?= =?UTF-8?q?=20=E5=9B=BD=E9=99=85=E5=8C=96=20(Part=202)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Hongyu Shi --- .../locales/en_US/LC_MESSAGES/messages.po | 326 ++++++++++++++++- .../locales/zh_CN/LC_MESSAGES/messages.po | 327 +++++++++++++++++- 2 files changed, 646 insertions(+), 7 deletions(-) diff --git a/src/i18n/locales/en_US/LC_MESSAGES/messages.po b/src/i18n/locales/en_US/LC_MESSAGES/messages.po index 9502e02..8e5ecdf 100644 --- a/src/i18n/locales/en_US/LC_MESSAGES/messages.po +++ b/src/i18n/locales/en_US/LC_MESSAGES/messages.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: oi-cli\n" "Report-Msgid-Bugs-To: contact@openeuler.org\n" -"POT-Creation-Date: 2025-10-21 10:23+0800\n" +"POT-Creation-Date: 2025-10-21 10:54+0800\n" "PO-Revision-Date: 2025-10-20 19:28+0800\n" "Last-Translator: openEuler Intelligence Team\n" "Language-Team: English\n" @@ -154,7 +154,7 @@ msgstr "Toggle Focus" #: src/app/tui.py:255 #, python-brace-format -msgid "Intelligent CLI Tool {version}" +msgid "Intelligent CLI Assistant {version}" msgstr "Command Line Tool {version}" #: src/app/tui.py:371 @@ -266,7 +266,8 @@ msgstr "Press any key to close" #: src/app/dialogs/agent.py:60 src/app/dialogs/agent.py:130 #: src/app/dialogs/agent.py:185 src/app/dialogs/agent.py:205 -#: src/app/dialogs/agent.py:208 +#: src/app/dialogs/agent.py:208 src/tool/oi_select_agent.py:67 +#: src/tool/oi_select_agent.py:94 msgid "智能问答" msgstr "Smart Chat" @@ -474,3 +475,322 @@ msgstr "✗ Unsupported language: {locale}\n" #: src/main.py:228 msgid "Fatal error in Intelligent Shell application" msgstr "Fatal error in Intelligent Shell application" + +#: src/tool/oi_select_agent.py:29 +msgid "退出" +msgstr "Exit" + +#: src/tool/oi_select_agent.py:123 +#, python-brace-format +msgid "✓ 默认智能体已设置为: {name}\n" +msgstr "✓ Default agent set to: {name}\n" + +#: src/tool/oi_select_agent.py:125 +#, python-brace-format +msgid " App ID: {app_id}\n" +msgstr " App ID: {app_id}\n" + +#: src/tool/oi_select_agent.py:127 +msgid " 已设置为智能问答模式(无智能体)\n" +msgstr " Set to Smart Q&A mode (no agent)\n" + +#: src/tool/oi_select_agent.py:129 +msgid "已取消选择\n" +msgstr "Selection cancelled\n" + +#: src/tool/oi_select_agent.py:143 +msgid "错误: 智能体功能需要使用 openEuler Intelligence 后端\n" +msgstr "Error: Agent functionality requires openEuler Intelligence backend\n" + +#: src/tool/oi_select_agent.py:144 +msgid "请先运行以下命令切换后端:\n" +msgstr "Please run the following command to switch backend:\n" + +#: src/tool/oi_select_agent.py:145 +msgid "" +" oi # 然后按下 Ctrl+S 进入设置界面切换到 openEuler Intelligence 后端\n" +msgstr "" +" oi # Then press Ctrl+S to enter settings and switch to openEuler " +"Intelligence backend\n" + +#: src/tool/oi_select_agent.py:163 +#, python-brace-format +msgid "错误: {error}\n" +msgstr "Error: {error}\n" + +#: src/tool/oi_llm_config.py:77 +msgid "需要管理员权限才能修改 openEuler Intelligence 配置文件" +msgstr "Administrator privileges are required to modify openEuler Intelligence configuration files" + +#: src/tool/oi_llm_config.py:84 +#, python-brace-format +msgid "配置文件不存在: {path}" +msgstr "Configuration file does not exist: {path}" + +#: src/tool/oi_llm_config.py:85 +msgid "请先运行 '(sudo) oi --init' 部署后端服务" +msgstr "Please run '(sudo) oi --init' first to deploy backend services" + +#: src/tool/oi_llm_config.py:89 src/tool/oi_llm_config.py:93 +#, python-brace-format +msgid "配置文件不可写: {path}" +msgstr "Configuration file is not writable: {path}" + +#: src/tool/oi_llm_config.py:96 +#, python-brace-format +msgid "访问配置文件时权限不足: {error}" +msgstr "Insufficient permissions when accessing configuration file: {error}" + +#: src/tool/oi_llm_config.py:98 +#, python-brace-format +msgid "访问配置文件时发生错误: {error}" +msgstr "Error occurred when accessing configuration file: {error}" + +#: src/tool/oi_llm_config.py:127 +#, python-brace-format +msgid "权限不足:无法访问配置文件 {filename},请以管理员身份运行" +msgstr "Insufficient permissions: Cannot access configuration file {filename}, please run as administrator" + +#: src/tool/validators.py:135 src/tool/validators.py:584 +#: src/tool/validators.py:647 +#, python-brace-format +msgid "连接超时 - 无法在 {timeout} 秒内连接到 {endpoint}" +msgstr "Connection timeout - Unable to connect to {endpoint} within {timeout} seconds" + +#: src/tool/validators.py:140 +#, python-brace-format +msgid "LLM 配置验证失败: {error}" +msgstr "LLM configuration validation failed: {error}" + +#: src/tool/validators.py:144 +msgid "LLM 配置验证成功" +msgstr "LLM configuration validation successful" + +#: src/tool/validators.py:146 +#, python-brace-format +msgid " - 支持工具调用,类型: {func_type}" +msgstr " - Tool calling supported, type: {func_type}" + +#: src/tool/validators.py:148 +msgid " - 不支持工具调用" +msgstr " - Tool calling not supported" + +#: src/tool/validators.py:201 +msgid "无法连接到 Embedding 模型服务。" +msgstr "Unable to connect to Embedding model service." + +#: src/tool/validators.py:241 +msgid "基本对话测试失败" +msgstr "Basic chat test failed" + +#: src/tool/validators.py:244 +msgid "基本对话功能正常" +msgstr "Basic chat functionality is working" + +#: src/tool/validators.py:246 +msgid "对话响应为空" +msgstr "Chat response is empty" + +#: src/tool/validators.py:318 +msgid "不支持任何 function_call 格式" +msgstr "No function_call format is supported" + +#: src/tool/validators.py:353 +#, python-brace-format +msgid "tools 格式测试失败: {error}" +msgstr "tools format test failed: {error}" + +#: src/tool/validators.py:358 +msgid "支持 tools 格式的 function_call" +msgstr "tools format function_call is supported" + +#: src/tool/validators.py:360 +msgid "不支持工具调用功能" +msgstr "Tool calling functionality is not supported" + +#: src/tool/validators.py:401 +#, python-brace-format +msgid "structured_output 格式测试失败: {error}" +msgstr "structured_output format test failed: {error}" + +#: src/tool/validators.py:409 +msgid "structured_output 响应不是有效 JSON" +msgstr "structured_output response is not valid JSON" + +#: src/tool/validators.py:411 +msgid "支持 structured_output 格式" +msgstr "structured_output format is supported" + +#: src/tool/validators.py:413 +msgid "structured_output 响应为空" +msgstr "structured_output response is empty" + +#: src/tool/validators.py:439 +#, python-brace-format +msgid "json_mode 格式测试失败: {error}" +msgstr "json_mode format test failed: {error}" + +#: src/tool/validators.py:447 +msgid "json_mode 响应不是有效 JSON" +msgstr "json_mode response is not valid JSON" + +#: src/tool/validators.py:449 +msgid "支持 json_mode 格式" +msgstr "json_mode format is supported" + +#: src/tool/validators.py:451 +msgid "json_mode 响应为空" +msgstr "json_mode response is empty" + +#: src/tool/validators.py:499 +msgid "支持 vLLM 结构化输出(部分支持)" +msgstr "vLLM structured output is supported (partial support)" + +#: src/tool/validators.py:504 +#, python-brace-format +msgid "不支持 vLLM guided_json 格式: {error}" +msgstr "vLLM guided_json format is not supported: {error}" + +#: src/tool/validators.py:508 +msgid "vLLM guided_json 响应无效" +msgstr "vLLM guided_json response is invalid" + +#: src/tool/validators.py:555 +msgid "支持 Ollama function_call 格式" +msgstr "Ollama function_call format is supported" + +#: src/tool/validators.py:558 +#, python-brace-format +msgid "不支持 Ollama function_call 格式: {error}" +msgstr "Ollama function_call format is not supported: {error}" + +#: src/tool/validators.py:561 +msgid "Ollama function_call 响应无效" +msgstr "Ollama function_call response is invalid" + +#: src/tool/validators.py:589 +#, python-brace-format +msgid "OpenAI Embedding 配置验证失败: {error}" +msgstr "OpenAI Embedding configuration validation failed: {error}" + +#: src/tool/validators.py:598 +#, python-brace-format +msgid "OpenAI Embedding 配置验证成功 - 维度: {dimension}" +msgstr "OpenAI Embedding configuration validation successful - Dimension: {dimension}" + +#: src/tool/validators.py:606 +msgid "OpenAI Embedding 响应为空" +msgstr "OpenAI Embedding response is empty" + +#: src/tool/validators.py:634 +#, python-brace-format +msgid "MindIE Embedding 配置验证成功 - 维度: {dimension}" +msgstr "MindIE Embedding configuration validation successful - Dimension: {dimension}" + +#: src/tool/validators.py:644 +msgid "MindIE Embedding 响应格式不正确" +msgstr "MindIE Embedding response format is incorrect" + +#: src/tool/validators.py:652 +#, python-brace-format +msgid "MindIE Embedding 配置验证失败: {error}" +msgstr "MindIE Embedding configuration validation failed: {error}" + +#: src/tool/validators.py:674 +msgid "服务 URL 必须以 http:// 或 https:// 开头" +msgstr "Service URL must start with http:// or https://" + +#: src/tool/validators.py:685 +msgid "访问令牌格式无效" +msgstr "Access token format is invalid" + +#: src/tool/validators.py:710 +msgid "服务返回的数据格式不正确" +msgstr "Service returned data in incorrect format" + +#: src/tool/validators.py:716 +msgid "连接成功" +msgstr "Connection successful" + +#: src/tool/validators.py:718 +#, python-brace-format +msgid "服务返回错误代码: {code}" +msgstr "Service returned error code: {code}" + +#: src/tool/validators.py:721 +msgid "无法连接到服务,请检查 URL 和网络连接" +msgstr "Unable to connect to service, please check URL and network connection" + +#: src/tool/validators.py:723 +msgid "连接超时,请检查网络连接或服务状态" +msgstr "Connection timeout, please check network connection or service status" + +#: src/tool/validators.py:726 +#, python-brace-format +msgid "连接验证失败: {error}" +msgstr "Connection validation failed: {error}" + +#: src/tool/validators.py:732 +msgid "访问令牌无效或已过期" +msgstr "Access token is invalid or expired" + +#: src/tool/validators.py:733 +msgid "访问权限不足" +msgstr "Insufficient access permissions" + +#: src/tool/validators.py:734 +msgid "API 接口不存在,请检查服务版本" +msgstr "API interface does not exist, please check service version" + +#: src/tool/validators.py:737 +#, python-brace-format +msgid "服务响应异常,状态码: {status_code}" +msgstr "Service response error, status code: {status_code}" + +#: src/tool/command_processor.py:56 +msgid "请输入有效命令或问题。" +msgstr "Please enter a valid command or question." + +#: src/tool/command_processor.py:75 +msgid "检测到不安全命令,已阻止执行。" +msgstr "Unsafe command detected, execution blocked." + +#: src/tool/command_processor.py:135 +msgid "[命令启动失败] 无法创建子进程" +msgstr "[Command start failed] Unable to create subprocess" + +#: src/tool/command_processor.py:136 +#, python-brace-format +msgid "无法启动命令 '{command}',请分析可能原因并给出解决建议。" +msgstr "Unable to start command '{command}', please analyze possible causes and provide solutions." + +#: src/tool/command_processor.py:165 +#, python-brace-format +msgid "" +"\n" +"[命令完成] 退出码: {returncode}" +msgstr "" +"\n" +"[Command completed] Exit code: {returncode}" + +#: src/tool/command_processor.py:183 +#, python-brace-format +msgid "[命令失败] 退出码: {returncode}" +msgstr "[Command failed] Exit code: {returncode}" + +#: src/tool/command_processor.py:188 +#, python-brace-format +msgid "" +"命令 '{command}' 以非零状态 {returncode} 退出。\n" +"标准错误输出如下:\n" +"{stderr_text}\n" +"请分析原因并提供解决建议。" +msgstr "" +"Command '{command}' exited with non-zero status {returncode}.\n" +"Standard error output:\n" +"{stderr_text}\n" +"Please analyze the cause and provide solutions." + +#: src/tool/command_processor.py:206 +msgid "读取 stderr 失败" +msgstr "Failed to read stderr" diff --git a/src/i18n/locales/zh_CN/LC_MESSAGES/messages.po b/src/i18n/locales/zh_CN/LC_MESSAGES/messages.po index ed9d147..c0926a4 100644 --- a/src/i18n/locales/zh_CN/LC_MESSAGES/messages.po +++ b/src/i18n/locales/zh_CN/LC_MESSAGES/messages.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: oi-cli\n" "Report-Msgid-Bugs-To: contact@openeuler.org\n" -"POT-Creation-Date: 2025-10-21 10:23+0800\n" +"POT-Creation-Date: 2025-10-21 10:54+0800\n" "PO-Revision-Date: 2025-10-21 09:40+0800\n" "Last-Translator: openEuler Intelligence Team\n" "Language-Team: Chinese (Simplified)\n" @@ -154,8 +154,8 @@ msgstr "切换焦点" #: src/app/tui.py:255 #, python-brace-format -msgid "Intelligent CLI Tool {version}" -msgstr "智能命令行工具 {version}" +msgid "Intelligent CLI Assistant {version}" +msgstr "智能命令行助手 {version}" #: src/app/tui.py:371 msgid "[Cancelled]" @@ -265,7 +265,8 @@ msgstr "按任意键关闭" #: src/app/dialogs/agent.py:60 src/app/dialogs/agent.py:130 #: src/app/dialogs/agent.py:185 src/app/dialogs/agent.py:205 -#: src/app/dialogs/agent.py:208 +#: src/app/dialogs/agent.py:208 src/tool/oi_select_agent.py:67 +#: src/tool/oi_select_agent.py:94 msgid "智能问答" msgstr "智能问答" @@ -469,3 +470,321 @@ msgstr "✗ 不支持的语言: {locale}\n" #: src/main.py:228 msgid "Fatal error in Intelligent Shell application" msgstr "智能 Shell 应用发生致命错误" + +#: src/tool/oi_select_agent.py:29 +msgid "退出" +msgstr "退出" + +#: src/tool/oi_select_agent.py:123 +#, python-brace-format +msgid "✓ 默认智能体已设置为: {name}\n" +msgstr "✓ 默认智能体已设置为: {name}\n" + +#: src/tool/oi_select_agent.py:125 +#, python-brace-format +msgid " App ID: {app_id}\n" +msgstr " App ID: {app_id}\n" + +#: src/tool/oi_select_agent.py:127 +msgid " 已设置为智能问答模式(无智能体)\n" +msgstr " 已设置为智能问答模式(无智能体)\n" + +#: src/tool/oi_select_agent.py:129 +msgid "已取消选择\n" +msgstr "已取消选择\n" + +#: src/tool/oi_select_agent.py:143 +msgid "错误: 智能体功能需要使用 openEuler Intelligence 后端\n" +msgstr "错误: 智能体功能需要使用 openEuler Intelligence 后端\n" + +#: src/tool/oi_select_agent.py:144 +msgid "请先运行以下命令切换后端:\n" +msgstr "请先运行以下命令切换后端:\n" + +#: src/tool/oi_select_agent.py:145 +msgid "" +" oi # 然后按下 Ctrl+S 进入设置界面切换到 openEuler Intelligence 后端\n" +msgstr "" +" oi # 然后按下 Ctrl+S 进入设置界面切换到 openEuler Intelligence 后端\n" + +#: src/tool/oi_select_agent.py:163 +#, python-brace-format +msgid "错误: {error}\n" +msgstr "错误: {error}\n" + +#: src/tool/oi_llm_config.py:77 +msgid "需要管理员权限才能修改 openEuler Intelligence 配置文件" +msgstr "需要管理员权限才能修改 openEuler Intelligence 配置文件" + +#: src/tool/oi_llm_config.py:84 +#, python-brace-format +msgid "配置文件不存在: {path}" +msgstr "配置文件不存在: {path}" + +#: src/tool/oi_llm_config.py:85 +msgid "请先运行 '(sudo) oi --init' 部署后端服务" +msgstr "请先运行 '(sudo) oi --init' 部署后端服务" + +#: src/tool/oi_llm_config.py:89 src/tool/oi_llm_config.py:93 +#, python-brace-format +msgid "配置文件不可写: {path}" +msgstr "配置文件不可写: {path}" + +#: src/tool/oi_llm_config.py:96 +#, python-brace-format +msgid "访问配置文件时权限不足: {error}" +msgstr "访问配置文件时权限不足: {error}" + +#: src/tool/oi_llm_config.py:98 +#, python-brace-format +msgid "访问配置文件时发生错误: {error}" +msgstr "访问配置文件时发生错误: {error}" + +#: src/tool/oi_llm_config.py:127 +#, python-brace-format +msgid "权限不足:无法访问配置文件 {filename},请以管理员身份运行" +msgstr "权限不足:无法访问配置文件 {filename},请以管理员身份运行" + +#: src/tool/validators.py:135 src/tool/validators.py:584 +#: src/tool/validators.py:647 +#, python-brace-format +msgid "连接超时 - 无法在 {timeout} 秒内连接到 {endpoint}" +msgstr "连接超时 - 无法在 {timeout} 秒内连接到 {endpoint}" + +#: src/tool/validators.py:140 +#, python-brace-format +msgid "LLM 配置验证失败: {error}" +msgstr "LLM 配置验证失败: {error}" + +#: src/tool/validators.py:144 +msgid "LLM 配置验证成功" +msgstr "LLM 配置验证成功" + +#: src/tool/validators.py:146 +#, python-brace-format +msgid " - 支持工具调用,类型: {func_type}" +msgstr " - 支持工具调用,类型: {func_type}" + +#: src/tool/validators.py:148 +msgid " - 不支持工具调用" +msgstr " - 不支持工具调用" + +#: src/tool/validators.py:201 +msgid "无法连接到 Embedding 模型服务。" +msgstr "无法连接到 Embedding 模型服务。" + +#: src/tool/validators.py:241 +msgid "基本对话测试失败" +msgstr "基本对话测试失败" + +#: src/tool/validators.py:244 +msgid "基本对话功能正常" +msgstr "基本对话功能正常" + +#: src/tool/validators.py:246 +msgid "对话响应为空" +msgstr "对话响应为空" + +#: src/tool/validators.py:318 +msgid "不支持任何 function_call 格式" +msgstr "不支持任何 function_call 格式" + +#: src/tool/validators.py:353 +#, python-brace-format +msgid "tools 格式测试失败: {error}" +msgstr "tools 格式测试失败: {error}" + +#: src/tool/validators.py:358 +msgid "支持 tools 格式的 function_call" +msgstr "支持 tools 格式的 function_call" + +#: src/tool/validators.py:360 +msgid "不支持工具调用功能" +msgstr "不支持工具调用功能" + +#: src/tool/validators.py:401 +#, python-brace-format +msgid "structured_output 格式测试失败: {error}" +msgstr "structured_output 格式测试失败: {error}" + +#: src/tool/validators.py:409 +msgid "structured_output 响应不是有效 JSON" +msgstr "structured_output 响应不是有效 JSON" + +#: src/tool/validators.py:411 +msgid "支持 structured_output 格式" +msgstr "支持 structured_output 格式" + +#: src/tool/validators.py:413 +msgid "structured_output 响应为空" +msgstr "structured_output 响应为空" + +#: src/tool/validators.py:439 +#, python-brace-format +msgid "json_mode 格式测试失败: {error}" +msgstr "json_mode 格式测试失败: {error}" + +#: src/tool/validators.py:447 +msgid "json_mode 响应不是有效 JSON" +msgstr "json_mode 响应不是有效 JSON" + +#: src/tool/validators.py:449 +msgid "支持 json_mode 格式" +msgstr "支持 json_mode 格式" + +#: src/tool/validators.py:451 +msgid "json_mode 响应为空" +msgstr "json_mode 响应为空" + +#: src/tool/validators.py:499 +msgid "支持 vLLM 结构化输出(部分支持)" +msgstr "支持 vLLM 结构化输出(部分支持)" + +#: src/tool/validators.py:504 +#, python-brace-format +msgid "不支持 vLLM guided_json 格式: {error}" +msgstr "不支持 vLLM guided_json 格式: {error}" + +#: src/tool/validators.py:508 +msgid "vLLM guided_json 响应无效" +msgstr "vLLM guided_json 响应无效" + +#: src/tool/validators.py:555 +msgid "支持 Ollama function_call 格式" +msgstr "支持 Ollama function_call 格式" + +#: src/tool/validators.py:558 +#, python-brace-format +msgid "不支持 Ollama function_call 格式: {error}" +msgstr "不支持 Ollama function_call 格式: {error}" + +#: src/tool/validators.py:561 +msgid "Ollama function_call 响应无效" +msgstr "Ollama function_call 响应无效" + +#: src/tool/validators.py:589 +#, python-brace-format +msgid "OpenAI Embedding 配置验证失败: {error}" +msgstr "OpenAI Embedding 配置验证失败: {error}" + +#: src/tool/validators.py:598 +#, python-brace-format +msgid "OpenAI Embedding 配置验证成功 - 维度: {dimension}" +msgstr "OpenAI Embedding 配置验证成功 - 维度: {dimension}" + +#: src/tool/validators.py:606 +msgid "OpenAI Embedding 响应为空" +msgstr "OpenAI Embedding 响应为空" + +#: src/tool/validators.py:634 +#, python-brace-format +msgid "MindIE Embedding 配置验证成功 - 维度: {dimension}" +msgstr "MindIE Embedding 配置验证成功 - 维度: {dimension}" + +#: src/tool/validators.py:644 +msgid "MindIE Embedding 响应格式不正确" +msgstr "MindIE Embedding 响应格式不正确" + +#: src/tool/validators.py:652 +#, python-brace-format +msgid "MindIE Embedding 配置验证失败: {error}" +msgstr "MindIE Embedding 配置验证失败: {error}" + +#: src/tool/validators.py:674 +msgid "服务 URL 必须以 http:// 或 https:// 开头" +msgstr "服务 URL 必须以 http:// 或 https:// 开头" + +#: src/tool/validators.py:685 +msgid "访问令牌格式无效" +msgstr "访问令牌格式无效" + +#: src/tool/validators.py:710 +msgid "服务返回的数据格式不正确" +msgstr "服务返回的数据格式不正确" + +#: src/tool/validators.py:716 +msgid "连接成功" +msgstr "连接成功" + +#: src/tool/validators.py:718 +#, python-brace-format +msgid "服务返回错误代码: {code}" +msgstr "服务返回错误代码: {code}" + +#: src/tool/validators.py:721 +msgid "无法连接到服务,请检查 URL 和网络连接" +msgstr "无法连接到服务,请检查 URL 和网络连接" + +#: src/tool/validators.py:723 +msgid "连接超时,请检查网络连接或服务状态" +msgstr "连接超时,请检查网络连接或服务状态" + +#: src/tool/validators.py:726 +#, python-brace-format +msgid "连接验证失败: {error}" +msgstr "连接验证失败: {error}" + +#: src/tool/validators.py:732 +msgid "访问令牌无效或已过期" +msgstr "访问令牌无效或已过期" + +#: src/tool/validators.py:733 +msgid "访问权限不足" +msgstr "访问权限不足" + +#: src/tool/validators.py:734 +msgid "API 接口不存在,请检查服务版本" +msgstr "API 接口不存在,请检查服务版本" + +#: src/tool/validators.py:737 +#, python-brace-format +msgid "服务响应异常,状态码: {status_code}" +msgstr "服务响应异常,状态码: {status_code}" + +#: src/tool/command_processor.py:56 +msgid "请输入有效命令或问题。" +msgstr "请输入有效命令或问题。" + +#: src/tool/command_processor.py:75 +msgid "检测到不安全命令,已阻止执行。" +msgstr "检测到不安全命令,已阻止执行。" + +#: src/tool/command_processor.py:135 +msgid "[命令启动失败] 无法创建子进程" +msgstr "[命令启动失败] 无法创建子进程" + +#: src/tool/command_processor.py:136 +#, python-brace-format +msgid "无法启动命令 '{command}',请分析可能原因并给出解决建议。" +msgstr "无法启动命令 '{command}',请分析可能原因并给出解决建议。" + +#: src/tool/command_processor.py:165 +#, python-brace-format +msgid "" +"\n" +"[命令完成] 退出码: {returncode}" +msgstr "" +"\n" +"[命令完成] 退出码: {returncode}" + +#: src/tool/command_processor.py:183 +#, python-brace-format +msgid "[命令失败] 退出码: {returncode}" +msgstr "[命令失败] 退出码: {returncode}" + +#: src/tool/command_processor.py:188 +#, python-brace-format +msgid "" +"命令 '{command}' 以非零状态 {returncode} 退出。\n" +"标准错误输出如下:\n" +"{stderr_text}\n" +"请分析原因并提供解决建议。" +msgstr "" +"命令 '{command}' 以非零状态 {returncode} 退出。\n" +"标准错误输出如下:\n" +"{stderr_text}\n" +"请分析原因并提供解决建议。" + +#: src/tool/command_processor.py:206 +msgid "读取 stderr 失败" +msgstr "读取 stderr 失败" -- Gitee From 1bc8c9297f6cd29f1d3f7a6af11e0f64a2974eb7 Mon Sep 17 00:00:00 2001 From: Hongyu Shi Date: Tue, 21 Oct 2025 14:18:00 +0800 Subject: [PATCH 2/6] =?UTF-8?q?fix(tui):=20=E7=A7=BB=E9=99=A4=E9=80=80?= =?UTF-8?q?=E5=87=BA=E4=BA=8B=E4=BB=B6=E7=AD=89=E5=BE=85=E8=B6=85=E6=97=B6?= =?UTF-8?q?=EF=BC=8C=E6=94=B9=E4=B8=BA=E6=97=A0=E9=99=90=E7=AD=89=E5=BE=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Hongyu Shi --- src/app/tui.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/app/tui.py b/src/app/tui.py index c8f4532..292662c 100644 --- a/src/app/tui.py +++ b/src/app/tui.py @@ -1380,11 +1380,9 @@ class IntelligentTerminal(App): # 启动监控任务 monitor_task = asyncio.create_task(monitor_screen_stack()) - # 等待退出事件或超时(5分钟) + # 等待退出事件 try: - await asyncio.wait_for(exit_event.wait(), timeout=300.0) - except TimeoutError: - self.logger.warning("等待设置页面退出超时") + await exit_event.wait() finally: # 取消监控任务 if not monitor_task.done(): -- Gitee From ca3783f2740c0fe91ebd12cf0ad1a49249ae5e43 Mon Sep 17 00:00:00 2001 From: Hongyu Shi Date: Tue, 21 Oct 2025 14:18:16 +0800 Subject: [PATCH 3/6] =?UTF-8?q?fix(i18n):=20=E5=BB=B6=E8=BF=9F=E5=AF=BC?= =?UTF-8?q?=E5=85=A5=20IntelligentTerminal=EF=BC=8C=E7=A1=AE=E4=BF=9D?= =?UTF-8?q?=E5=9C=A8=20i18n=20=E5=88=9D=E5=A7=8B=E5=8C=96=E4=B9=8B?= =?UTF-8?q?=E5=90=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Hongyu Shi --- src/main.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main.py b/src/main.py index 8585767..bc2dd29 100644 --- a/src/main.py +++ b/src/main.py @@ -6,7 +6,6 @@ import atexit import sys from __version__ import __version__ -from app.tui import IntelligentTerminal from config.manager import ConfigManager from config.model import LogLevel from i18n.manager import _, get_locale, get_supported_locales, init_i18n, set_locale @@ -222,6 +221,9 @@ def main() -> None: logger = get_logger(__name__) try: + # 延迟导入 IntelligentTerminal,确保在 i18n 初始化之后 + from app.tui import IntelligentTerminal # noqa: PLC0415 + app = IntelligentTerminal() app.run() except Exception: -- Gitee From 45c2c67237a675bec09fcdbdf0723106bb88d511 Mon Sep 17 00:00:00 2001 From: Hongyu Shi Date: Tue, 21 Oct 2025 14:33:55 +0800 Subject: [PATCH 4/6] =?UTF-8?q?fix(i18n):=20=E4=BC=98=E5=8C=96=E9=BB=98?= =?UTF-8?q?=E8=AE=A4=E8=AF=AD=E8=A8=80=E6=A3=80=E6=B5=8B=E9=80=BB=E8=BE=91?= =?UTF-8?q?=EF=BC=8C=E5=88=9D=E5=A7=8B=E4=BD=BF=E7=94=A8=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E8=AF=AD=E8=A8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Hongyu Shi --- src/i18n/manager.py | 55 +++++++++++++++++++++++++++++---------------- 1 file changed, 36 insertions(+), 19 deletions(-) diff --git a/src/i18n/manager.py b/src/i18n/manager.py index 7a04747..269c7c8 100644 --- a/src/i18n/manager.py +++ b/src/i18n/manager.py @@ -11,8 +11,40 @@ SUPPORTED_LOCALES = { "zh_CN": "简体中文", } -# 默认语言 - 英语 -DEFAULT_LOCALE = "en_US" +# 备用语言(当系统语言无法检测时使用) +FALLBACK_LOCALE = "en_US" + + +def _detect_default_locale() -> str: + """ + 检测默认语言环境(在模块加载时调用) + + Returns: + 检测到的语言代码,如果不支持则返回备用语言(英语) + + """ + try: + # 获取系统语言设置 + system_locale, _ = locale.getdefaultlocale() + if system_locale: + # 标准化语言代码 (如 zh_CN.UTF-8 -> zh_CN) + locale_code = system_locale.split(".")[0] + if locale_code.startswith("zh"): + locale_code = "zh_CN" + if locale_code.startswith("en"): + locale_code = "en_US" + if locale_code in SUPPORTED_LOCALES: + return locale_code + except (ValueError, TypeError, locale.Error): + # 捕获可能的 locale 相关异常 + pass + + # 无法检测或不支持时,返回备用语言 + return FALLBACK_LOCALE + + +# 默认语言 - 根据系统语言自动检测 +DEFAULT_LOCALE = _detect_default_locale() class I18nManager: @@ -86,25 +118,10 @@ class I18nManager: 检测系统语言环境 Returns: - 检测到的语言代码,如果不支持则返回默认语言(英语) + 检测到的语言代码,如果不支持则返回默认语言 """ - try: - # 获取系统语言设置 - system_locale, _ = locale.getdefaultlocale() - if system_locale: - # 标准化语言代码 (如 zh_CN.UTF-8 -> zh_CN) - locale_code = system_locale.split(".")[0] - if locale_code.startswith("zh"): - locale_code = "zh_CN" - if locale_code in SUPPORTED_LOCALES: - return locale_code - except (ValueError, TypeError, locale.Error): - # 捕获可能的 locale 相关异常 - pass - - # 无法检测或不支持时,返回默认语言 - return DEFAULT_LOCALE + return _detect_default_locale() def translate(self, message: str, **kwargs: str | float) -> str: """ -- Gitee From cc454079c9f2d376cc2b7c822d48ce8f375a20bf Mon Sep 17 00:00:00 2001 From: Hongyu Shi Date: Tue, 21 Oct 2025 14:52:30 +0800 Subject: [PATCH 5/6] =?UTF-8?q?feat(build):=20=E6=B7=BB=E5=8A=A0=E5=BC=80?= =?UTF-8?q?=E5=8F=91=E6=A8=A1=E5=BC=8F=E6=94=AF=E6=8C=81=EF=BC=8C=E5=85=81?= =?UTF-8?q?=E8=AE=B8=E5=9C=A8=E6=9E=84=E5=BB=BA=E6=97=B6=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E6=97=B6=E9=97=B4=E6=88=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Hongyu Shi --- distribution/linux/euler-copilot-shell.spec | 2 +- scripts/build/build_rpm.sh | 29 +++++++++++++++++++-- scripts/build/create_tarball.sh | 25 ++++++++++++++++++ 3 files changed, 53 insertions(+), 3 deletions(-) diff --git a/distribution/linux/euler-copilot-shell.spec b/distribution/linux/euler-copilot-shell.spec index 49801d5..b0a27fc 100644 --- a/distribution/linux/euler-copilot-shell.spec +++ b/distribution/linux/euler-copilot-shell.spec @@ -4,7 +4,7 @@ Name: euler-copilot-shell Version: 0.10.2 -Release: 1%{?dist} +Release: 1%{?dev_timestamp:.dev%{dev_timestamp}}%{?dist} Summary: openEuler Intelligence 智能命令行工具集 License: MulanPSL-2.0 URL: https://gitee.com/openeuler/euler-copilot-shell diff --git a/scripts/build/build_rpm.sh b/scripts/build/build_rpm.sh index 951e0df..f52c8b3 100755 --- a/scripts/build/build_rpm.sh +++ b/scripts/build/build_rpm.sh @@ -2,12 +2,32 @@ # build_rpm.sh: build RPM package using the tarball created by create_tarball.sh set -euo pipefail +# Parse arguments +DEV_MODE=0 +while [[ $# -gt 0 ]]; do + case "$1" in + --dev) + DEV_MODE=1 + shift + ;; + *) + echo "Unknown parameter: $1" >&2 + echo "Usage: $0 [--dev]" >&2 + exit 1 + ;; + esac +done + # Determine script directory and repo root SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" REPO_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)" # Create the tarball and set BUILD_DIR and TARBALL -eval "$("${SCRIPT_DIR}"/create_tarball.sh)" +if [[ ${DEV_MODE} -eq 1 ]]; then + eval "$("${SCRIPT_DIR}"/create_tarball.sh --dev)" +else + eval "$("${SCRIPT_DIR}"/create_tarball.sh)" +fi set +u if [[ -z "${BUILD_DIR:-}" || -z "${TARBALL:-}" ]]; then echo "Error: BUILD_DIR 或 TARBALL 变量未设置,create_tarball.sh 执行失败。" >&2 @@ -27,7 +47,12 @@ cp "${SPEC_FILE}" "${BUILD_DIR}/SPECS/" # Build the RPMs echo "Building RPM using topdir ${BUILD_DIR}" -rpmbuild --define "_topdir ${BUILD_DIR}" -ba "${BUILD_DIR}/SPECS/$(basename "${SPEC_FILE}")" +if [[ ${DEV_MODE} -eq 1 ]]; then + # 在 dev 模式下,传递时间戳给 rpmbuild + rpmbuild --define "_topdir ${BUILD_DIR}" --define "dev_timestamp ${TIMESTAMP}" -ba "${BUILD_DIR}/SPECS/$(basename "${SPEC_FILE}")" +else + rpmbuild --define "_topdir ${BUILD_DIR}" -ba "${BUILD_DIR}/SPECS/$(basename "${SPEC_FILE}")" +fi # Output locations echo "RPM build complete." diff --git a/scripts/build/create_tarball.sh b/scripts/build/create_tarball.sh index baeb498..93615dc 100755 --- a/scripts/build/create_tarball.sh +++ b/scripts/build/create_tarball.sh @@ -2,6 +2,22 @@ # create_tarball.sh: create a tarball of current repo for RPM build. set -euo pipefail +# Parse arguments +DEV_MODE=0 +while [[ $# -gt 0 ]]; do + case "$1" in + --dev) + DEV_MODE=1 + shift + ;; + *) + echo "Unknown parameter: $1" >&2 + echo "Usage: $0 [--dev]" >&2 + exit 1 + ;; + esac +done + # Locate spec file relative to repo root SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" REPO_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)" @@ -11,6 +27,12 @@ SPEC_FILE="${REPO_ROOT}/distribution/linux/euler-copilot-shell.spec" NAME=$(grep -E '^Name:' "$SPEC_FILE" | awk '{print $2}') VERSION=$(grep -E '^Version:' "$SPEC_FILE" | awk '{print $2}') +# 如果是 dev 模式,添加时间戳 +if [[ ${DEV_MODE} -eq 1 ]]; then + TIMESTAMP=$(date +%Y%m%d%H%M%S) + VERSION="${VERSION}.dev${TIMESTAMP}" +fi + # Create build directory in repo BUILD_DIR="${REPO_ROOT}/build" mkdir -p "${BUILD_DIR}" @@ -23,3 +45,6 @@ git archive --format=tar.gz --prefix="${NAME}-${VERSION}/" -o "${BUILD_DIR}/${TA # 输出变量用于 build_rpm.sh 的 eval echo "BUILD_DIR=${BUILD_DIR}" echo "TARBALL=${TARBALL}" +if [[ ${DEV_MODE} -eq 1 ]]; then + echo "TIMESTAMP=${TIMESTAMP}" +fi -- Gitee From a9ff25a799f8ae56a0b5fda9ceb7485e06da7ede Mon Sep 17 00:00:00 2001 From: Hongyu Shi Date: Tue, 21 Oct 2025 15:03:06 +0800 Subject: [PATCH 6/6] =?UTF-8?q?fix(build):=20=E7=A7=BB=E9=99=A4=E5=BC=80?= =?UTF-8?q?=E5=8F=91=E6=A8=A1=E5=BC=8F=E4=B8=8B=E7=89=88=E6=9C=AC=E5=8F=B7?= =?UTF-8?q?=E7=9A=84=E6=97=B6=E9=97=B4=E6=88=B3=E6=B7=BB=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Hongyu Shi --- scripts/build/create_tarball.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/build/create_tarball.sh b/scripts/build/create_tarball.sh index 93615dc..711e65e 100755 --- a/scripts/build/create_tarball.sh +++ b/scripts/build/create_tarball.sh @@ -30,7 +30,6 @@ VERSION=$(grep -E '^Version:' "$SPEC_FILE" | awk '{print $2}') # 如果是 dev 模式,添加时间戳 if [[ ${DEV_MODE} -eq 1 ]]; then TIMESTAMP=$(date +%Y%m%d%H%M%S) - VERSION="${VERSION}.dev${TIMESTAMP}" fi # Create build directory in repo -- Gitee