- Configuration Details (from {editingMcpServer.scope === 'global' ? '~/.claude.json' : 'project config'})
+ {t('mcpForm.configDetails', { configFile: editingMcpServer.scope === 'global' ? '~/.claude.json' : 'project config' })}
{JSON.stringify(mcpFormData.raw, null, 2)}
@@ -1639,7 +1639,7 @@ function Settings({ isOpen, onClose, projects = [], initialTab = 'agents' }) {
- JSON Configuration *
+ {t('mcpForm.fields.jsonConfig')} *
{/* Help Section */}
-
About Codex MCP
+
{t('mcpServers.help.title')}
- Codex supports stdio-based MCP servers. You can add servers that extend Codex's capabilities
- with additional tools and resources.
+ {t('mcpServers.help.description')}
diff --git a/src/components/settings/PermissionsContent.jsx b/src/components/settings/PermissionsContent.jsx
index 608d43e..7bbd53d 100644
--- a/src/components/settings/PermissionsContent.jsx
+++ b/src/components/settings/PermissionsContent.jsx
@@ -1,6 +1,7 @@
import { Button } from '../ui/button';
import { Input } from '../ui/input';
import { Shield, AlertTriangle, Plus, X } from 'lucide-react';
+import { useTranslation } from 'react-i18next';
// Common tool patterns for Claude
const commonClaudeTools = [
@@ -49,6 +50,7 @@ function ClaudePermissions({
newDisallowedTool,
setNewDisallowedTool,
}) {
+ const { t } = useTranslation('settings');
const addAllowedTool = (tool) => {
if (tool && !allowedTools.includes(tool)) {
setAllowedTools([...allowedTools, tool]);
@@ -78,7 +80,7 @@ function ClaudePermissions({
- Permission Settings
+ {t('permissions.title')}
@@ -91,10 +93,10 @@ function ClaudePermissions({
/>
- Skip permission prompts (use with caution)
+ {t('permissions.skipPermissions.label')}
- Equivalent to --dangerously-skip-permissions flag
+ {t('permissions.skipPermissions.claudeDescription')}
@@ -106,18 +108,18 @@ function ClaudePermissions({
- Allowed Tools
+ {t('permissions.allowedTools.title')}
- Tools that are automatically allowed without prompting for permission
+ {t('permissions.allowedTools.description')}
setNewAllowedTool(e.target.value)}
- placeholder='e.g., "Bash(git log:*)" or "Write"'
+ placeholder={t('permissions.allowedTools.placeholder')}
onKeyPress={(e) => {
if (e.key === 'Enter') {
e.preventDefault();
@@ -133,14 +135,14 @@ function ClaudePermissions({
className="h-10 px-4"
>
-
Add
+
{t('permissions.actions.add')}
{/* Quick add buttons */}
- Quick add common tools:
+ {t('permissions.allowedTools.quickAdd')}
{commonClaudeTools.map(tool => (
@@ -176,7 +178,7 @@ function ClaudePermissions({
))}
{allowedTools.length === 0 && (
- No allowed tools configured
+ {t('permissions.allowedTools.empty')}
)}
@@ -187,18 +189,18 @@ function ClaudePermissions({
- Blocked Tools
+ {t('permissions.blockedTools.title')}
- Tools that are automatically blocked without prompting for permission
+ {t('permissions.blockedTools.description')}
setNewDisallowedTool(e.target.value)}
- placeholder='e.g., "Bash(rm:*)"'
+ placeholder={t('permissions.blockedTools.placeholder')}
onKeyPress={(e) => {
if (e.key === 'Enter') {
e.preventDefault();
@@ -214,7 +216,7 @@ function ClaudePermissions({
className="h-10 px-4"
>
-
Add
+
{t('permissions.actions.add')}
@@ -236,7 +238,7 @@ function ClaudePermissions({
))}
{disallowedTools.length === 0 && (
- No blocked tools configured
+ {t('permissions.blockedTools.empty')}
)}
@@ -245,13 +247,13 @@ function ClaudePermissions({
{/* Help Section */}
- Tool Pattern Examples:
+ {t('permissions.toolExamples.title')}
- "Bash(git log:*)" - Allow all git log commands
- "Bash(git diff:*)" - Allow all git diff commands
- "Write" - Allow all Write tool usage
- "Bash(rm:*)" - Block all rm commands (dangerous)
+ "Bash(git log:*)" {t('permissions.toolExamples.bashGitLog')}
+ "Bash(git diff:*)" {t('permissions.toolExamples.bashGitDiff')}
+ "Write" {t('permissions.toolExamples.write')}
+ "Bash(rm:*)" {t('permissions.toolExamples.bashRm')}
@@ -271,6 +273,7 @@ function CursorPermissions({
newDisallowedCommand,
setNewDisallowedCommand,
}) {
+ const { t } = useTranslation('settings');
const addAllowedCommand = (cmd) => {
if (cmd && !allowedCommands.includes(cmd)) {
setAllowedCommands([...allowedCommands, cmd]);
@@ -300,7 +303,7 @@ function CursorPermissions({
- Permission Settings
+ {t('permissions.title')}
@@ -313,10 +316,10 @@ function CursorPermissions({
/>
- Skip permission prompts (use with caution)
+ {t('permissions.skipPermissions.label')}
- Equivalent to -f flag in Cursor CLI
+ {t('permissions.skipPermissions.cursorDescription')}
@@ -328,18 +331,18 @@ function CursorPermissions({
- Allowed Shell Commands
+ {t('permissions.allowedCommands.title')}
- Shell commands that are automatically allowed without prompting
+ {t('permissions.allowedCommands.description')}
setNewAllowedCommand(e.target.value)}
- placeholder='e.g., "Shell(ls)" or "Shell(git status)"'
+ placeholder={t('permissions.allowedCommands.placeholder')}
onKeyPress={(e) => {
if (e.key === 'Enter') {
e.preventDefault();
@@ -355,14 +358,14 @@ function CursorPermissions({
className="h-10 px-4"
>
-
Add
+
{t('permissions.actions.add')}
{/* Quick add buttons */}
- Quick add common commands:
+ {t('permissions.allowedCommands.quickAdd')}
{commonCursorCommands.map(cmd => (
@@ -398,7 +401,7 @@ function CursorPermissions({
))}
{allowedCommands.length === 0 && (
- No allowed commands configured
+ {t('permissions.allowedCommands.empty')}
)}
@@ -409,18 +412,18 @@ function CursorPermissions({
- Blocked Shell Commands
+ {t('permissions.blockedCommands.title')}
- Shell commands that are automatically blocked
+ {t('permissions.blockedCommands.description')}
setNewDisallowedCommand(e.target.value)}
- placeholder='e.g., "Shell(rm -rf)" or "Shell(sudo)"'
+ placeholder={t('permissions.blockedCommands.placeholder')}
onKeyPress={(e) => {
if (e.key === 'Enter') {
e.preventDefault();
@@ -436,7 +439,7 @@ function CursorPermissions({
className="h-10 px-4"
>
-
Add
+
{t('permissions.actions.add')}
@@ -458,7 +461,7 @@ function CursorPermissions({
))}
{disallowedCommands.length === 0 && (
- No blocked commands configured
+ {t('permissions.blockedCommands.empty')}
)}
@@ -467,13 +470,13 @@ function CursorPermissions({
{/* Help Section */}
- Shell Command Examples:
+ {t('permissions.shellExamples.title')}
- "Shell(ls)" - Allow ls command
- "Shell(git status)" - Allow git status
- "Shell(npm install)" - Allow npm install
- "Shell(rm -rf)" - Block recursive delete
+ "Shell(ls)" {t('permissions.shellExamples.ls')}
+ "Shell(git status)" {t('permissions.shellExamples.gitStatus')}
+ "Shell(npm install)" {t('permissions.shellExamples.npmInstall')}
+ "Shell(rm -rf)" {t('permissions.shellExamples.rmRf')}
@@ -482,17 +485,18 @@ function CursorPermissions({
// Codex Permissions
function CodexPermissions({ permissionMode, setPermissionMode }) {
+ const { t } = useTranslation('settings');
return (
- Permission Mode
+ {t('permissions.codex.permissionMode')}
- Controls how Codex handles file modifications and command execution
+ {t('permissions.codex.description')}
{/* Default Mode */}
@@ -513,10 +517,9 @@ function CodexPermissions({ permissionMode, setPermissionMode }) {
className="mt-1 w-4 h-4 text-green-600"
/>
-
Default
+
{t('permissions.codex.modes.default.title')}
- Only trusted commands (ls, cat, grep, git status, etc.) run automatically.
- Other commands are skipped. Can write to workspace.
+ {t('permissions.codex.modes.default.description')}
@@ -540,10 +543,9 @@ function CodexPermissions({ permissionMode, setPermissionMode }) {
className="mt-1 w-4 h-4 text-green-600"
/>
-
Accept Edits
+
{t('permissions.codex.modes.acceptEdits.title')}
- All commands run automatically within the workspace.
- Full auto mode with sandboxed execution.
+ {t('permissions.codex.modes.acceptEdits.description')}
@@ -568,12 +570,11 @@ function CodexPermissions({ permissionMode, setPermissionMode }) {
/>
- Bypass Permissions
+ {t('permissions.codex.modes.bypassPermissions.title')}
- Full system access with no restrictions. All commands run automatically
- with full disk and network access. Use with caution.
+ {t('permissions.codex.modes.bypassPermissions.description')}
@@ -582,13 +583,13 @@ function CodexPermissions({ permissionMode, setPermissionMode }) {
{/* Technical Details */}
- Technical details
+ {t('permissions.codex.technicalDetails')}
-
Default: sandboxMode=workspace-write, approvalPolicy=untrusted. Trusted commands: cat, cd, grep, head, ls, pwd, tail, git status/log/diff/show, find (without -exec), etc.
-
Accept Edits: sandboxMode=workspace-write, approvalPolicy=never. All commands auto-execute within project directory.
-
Bypass Permissions: sandboxMode=danger-full-access, approvalPolicy=never. Full system access, use only in trusted environments.
-
You can override this per-session using the mode button in the chat interface.
+
{t('permissions.codex.modes.default.title')}: {t('permissions.codex.technicalInfo.default')}
+
{t('permissions.codex.modes.acceptEdits.title')}: {t('permissions.codex.technicalInfo.acceptEdits')}
+
{t('permissions.codex.modes.bypassPermissions.title')}: {t('permissions.codex.technicalInfo.bypassPermissions')}
+
{t('permissions.codex.technicalInfo.overrideNote')}
diff --git a/src/i18n/config.js b/src/i18n/config.js
index 334a411..789b993 100644
--- a/src/i18n/config.js
+++ b/src/i18n/config.js
@@ -18,11 +18,13 @@ import enCommon from './locales/en/common.json';
import enSettings from './locales/en/settings.json';
import enAuth from './locales/en/auth.json';
import enSidebar from './locales/en/sidebar.json';
+import enChat from './locales/en/chat.json';
import zhCommon from './locales/zh-CN/common.json';
import zhSettings from './locales/zh-CN/settings.json';
import zhAuth from './locales/zh-CN/auth.json';
import zhSidebar from './locales/zh-CN/sidebar.json';
+import zhChat from './locales/zh-CN/chat.json';
// Import supported languages configuration
import { languages } from './languages.js';
@@ -53,12 +55,14 @@ i18n
settings: enSettings,
auth: enAuth,
sidebar: enSidebar,
+ chat: enChat,
},
'zh-CN': {
common: zhCommon,
settings: zhSettings,
auth: zhAuth,
sidebar: zhSidebar,
+ chat: zhChat,
},
},
@@ -72,7 +76,7 @@ i18n
debug: import.meta.env.DEV,
// Namespaces - load only what's needed
- ns: ['common', 'settings', 'auth', 'sidebar'],
+ ns: ['common', 'settings', 'auth', 'sidebar', 'chat'],
defaultNS: 'common',
// Key separator for nested keys (default: '.')
diff --git a/src/i18n/locales/en/chat.json b/src/i18n/locales/en/chat.json
new file mode 100644
index 0000000..4083a49
--- /dev/null
+++ b/src/i18n/locales/en/chat.json
@@ -0,0 +1,111 @@
+{
+ "codeBlock": {
+ "copy": "Copy",
+ "copied": "Copied",
+ "copyCode": "Copy code"
+ },
+ "messageTypes": {
+ "user": "U",
+ "error": "Error",
+ "tool": "Tool",
+ "claude": "Claude",
+ "cursor": "Cursor",
+ "codex": "Codex"
+ },
+ "tools": {
+ "settings": "Tool Settings",
+ "error": "Tool Error",
+ "result": "Tool Result",
+ "viewParams": "View input parameters",
+ "viewRawParams": "View raw parameters",
+ "viewDiff": "View edit diff for",
+ "creatingFile": "Creating new file:",
+ "updatingTodo": "Updating Todo List",
+ "read": "Read",
+ "readFile": "Read file",
+ "updateTodo": "Update todo list",
+ "readTodo": "Read todo list",
+ "searchResults": "results"
+ },
+ "search": {
+ "found": "Found {{count}} {{type}}",
+ "file": "file",
+ "files": "files",
+ "pattern": "pattern:",
+ "in": "in:"
+ },
+ "fileOperations": {
+ "updated": "File updated successfully",
+ "created": "File created successfully",
+ "written": "File written successfully",
+ "diff": "Diff",
+ "newFile": "New File",
+ "viewContent": "View file content",
+ "viewFullOutput": "View full output ({{count}} chars)",
+ "contentDisplayed": "The file content is displayed in the diff view above"
+ },
+ "interactive": {
+ "title": "Interactive Prompt",
+ "waiting": "Waiting for your response in the CLI",
+ "instruction": "Please select an option in your terminal where Claude is running.",
+ "selectedOption": "✓ Claude selected option {{number}}",
+ "instructionDetail": "In the CLI, you would select this option interactively using arrow keys or by typing the number."
+ },
+ "thinking": {
+ "title": "Thinking...",
+ "emoji": "💭 Thinking..."
+ },
+ "json": {
+ "response": "JSON Response"
+ },
+ "permissions": {
+ "grant": "Grant permission for {{tool}}",
+ "added": "Permission added",
+ "addTo": "Adds
{{entry}} to Allowed Tools.",
+ "retry": "Permission saved. Retry the request to use the tool.",
+ "error": "Unable to update permissions. Please try again.",
+ "openSettings": "Open settings"
+ },
+ "todo": {
+ "updated": "Todo list has been updated successfully",
+ "current": "Current Todo List"
+ },
+ "plan": {
+ "viewPlan": "📋 View implementation plan",
+ "title": "Implementation Plan"
+ },
+ "usageLimit": {
+ "resetAt": "Claude usage limit reached. Your limit will reset at **{{time}} {{timezone}}** - {{date}}"
+ },
+ "codex": {
+ "permissionMode": "Permission Mode",
+ "modes": {
+ "default": "Default Mode",
+ "acceptEdits": "Accept Edits",
+ "bypassPermissions": "Bypass Permissions",
+ "plan": "Plan Mode"
+ },
+ "descriptions": {
+ "default": "Only trusted commands (ls, cat, grep, git status, etc.) run automatically. Other commands are skipped. Can write to workspace.",
+ "acceptEdits": "All commands run automatically within the workspace. Full auto mode with sandboxed execution.",
+ "bypassPermissions": "Full system access with no restrictions. All commands run automatically with full disk and network access. Use with caution.",
+ "plan": "Planning mode - no commands are executed"
+ },
+ "technicalDetails": "Technical details"
+ },
+ "input": {
+ "placeholder": "Type / for commands, @ for files, or ask {{provider}} anything...",
+ "placeholderDefault": "Type your message...",
+ "disabled": "Input disabled",
+ "attachFiles": "Attach files",
+ "attachImages": "Attach images",
+ "send": "Send",
+ "stop": "Stop",
+ "hintText": {
+ "ctrlEnter": "Ctrl+Enter to send • Shift+Enter for new line • Tab to change modes • / for slash commands",
+ "enter": "Enter to send • Shift+Enter for new line • Tab to change modes • / for slash commands"
+ },
+ "clickToChangeMode": "Click to change permission mode (or press Tab in input)",
+ "showAllCommands": "Show all commands"
+ }
+}
diff --git a/src/i18n/locales/en/settings.json b/src/i18n/locales/en/settings.json
index c23233f..b8a5f71 100644
--- a/src/i18n/locales/en/settings.json
+++ b/src/i18n/locales/en/settings.json
@@ -7,6 +7,7 @@
"appearance": "Appearance"
},
"account": {
+ "title": "Account",
"language": "Language",
"languageLabel": "Display Language",
"languageDescription": "Choose your preferred language for the interface",
@@ -15,13 +16,6 @@
"profile": "Profile",
"changePassword": "Change Password"
},
- "permissions": {
- "allowedTools": "Allowed Tools",
- "disallowedTools": "Disallowed Tools",
- "addTool": "Add Tool",
- "removeTool": "Remove Tool",
- "description": "Configure which tools Claude can use. Tools must be enabled here before Claude can access them."
- },
"mcp": {
"title": "MCP Servers",
"addServer": "Add Server",
@@ -71,5 +65,337 @@
"autoScrollToBottom": "Auto-scroll to bottom",
"sendByCtrlEnter": "Send by Ctrl+Enter",
"sendByCtrlEnterDescription": "When enabled, pressing Ctrl+Enter will send the message instead of just Enter. This is useful for IME users to avoid accidental sends."
+ },
+ "mainTabs": {
+ "agents": "Agents",
+ "appearance": "Appearance",
+ "git": "Git",
+ "apiTokens": "API & Tokens",
+ "tasks": "Tasks"
+ },
+ "appearanceSettings": {
+ "darkMode": {
+ "label": "Dark Mode",
+ "description": "Toggle between light and dark themes"
+ },
+ "projectSorting": {
+ "label": "Project Sorting",
+ "description": "How projects are ordered in the sidebar",
+ "alphabetical": "Alphabetical",
+ "recentActivity": "Recent Activity"
+ },
+ "codeEditor": {
+ "title": "Code Editor",
+ "theme": {
+ "label": "Editor Theme",
+ "description": "Default theme for the code editor"
+ },
+ "wordWrap": {
+ "label": "Word Wrap",
+ "description": "Enable word wrapping by default in the editor"
+ },
+ "showMinimap": {
+ "label": "Show Minimap",
+ "description": "Display a minimap for easier navigation in diff view"
+ },
+ "lineNumbers": {
+ "label": "Show Line Numbers",
+ "description": "Display line numbers in the editor"
+ },
+ "fontSize": {
+ "label": "Font Size",
+ "description": "Editor font size in pixels"
+ }
+ }
+ },
+ "mcpForm": {
+ "title": {
+ "add": "Add MCP Server",
+ "edit": "Edit MCP Server"
+ },
+ "importMode": {
+ "form": "Form Input",
+ "json": "JSON Import"
+ },
+ "scope": {
+ "label": "Scope",
+ "userGlobal": "User (Global)",
+ "projectLocal": "Project (Local)",
+ "userDescription": "User scope: Available across all projects on your machine",
+ "projectDescription": "Local scope: Only available in the selected project",
+ "cannotChange": "Scope cannot be changed when editing an existing server"
+ },
+ "fields": {
+ "serverName": "Server Name",
+ "transportType": "Transport Type",
+ "command": "Command",
+ "arguments": "Arguments (one per line)",
+ "jsonConfig": "JSON Configuration",
+ "url": "URL",
+ "envVars": "Environment Variables (KEY=value, one per line)",
+ "headers": "Headers (KEY=value, one per line)",
+ "selectProject": "Select a project..."
+ },
+ "placeholders": {
+ "serverName": "my-server"
+ },
+ "validation": {
+ "missingType": "Missing required field: type",
+ "stdioRequiresCommand": "stdio type requires a command field",
+ "httpRequiresUrl": "{{type}} type requires a url field",
+ "invalidJson": "Invalid JSON format",
+ "jsonHelp": "Paste your MCP server configuration in JSON format. Example formats:",
+ "jsonExampleStdio": "• stdio: {\"type\":\"stdio\",\"command\":\"npx\",\"args\":[\"@upstash/context7-mcp\"]}",
+ "jsonExampleHttp": "• http/sse: {\"type\":\"http\",\"url\":\"https://api.example.com/mcp\"}"
+ },
+ "configDetails": "Configuration Details (from {{configFile}})",
+ "projectPath": "Path: {{path}}",
+ "actions": {
+ "cancel": "Cancel",
+ "saving": "Saving...",
+ "addServer": "Add Server",
+ "updateServer": "Update Server"
+ }
+ },
+ "saveStatus": {
+ "success": "Settings saved successfully!",
+ "error": "Failed to save settings",
+ "saving": "Saving..."
+ },
+ "footerActions": {
+ "save": "Save Settings",
+ "cancel": "Cancel"
+ },
+ "git": {
+ "title": "Git Configuration",
+ "description": "Configure your git identity for commits. These settings will be applied globally via
git config --global
",
+ "name": {
+ "label": "Git Name",
+ "help": "Your name for git commits"
+ },
+ "email": {
+ "label": "Git Email",
+ "help": "Your email for git commits"
+ },
+ "actions": {
+ "save": "Save Configuration",
+ "saving": "Saving..."
+ },
+ "status": {
+ "success": "Saved successfully"
+ }
+ },
+ "apiKeys": {
+ "title": "API Keys",
+ "description": "Generate API keys to access the external API from other applications.",
+ "newKey": {
+ "alertTitle": "⚠️ Save Your API Key",
+ "alertMessage": "This is the only time you'll see this key. Store it securely.",
+ "iveSavedIt": "I've saved it"
+ },
+ "form": {
+ "placeholder": "API Key Name (e.g., Production Server)",
+ "createButton": "Create",
+ "cancelButton": "Cancel"
+ },
+ "newButton": "New API Key",
+ "empty": "No API keys created yet.",
+ "list": {
+ "created": "Created:",
+ "lastUsed": "Last used:"
+ },
+ "confirmDelete": "Are you sure you want to delete this API key?",
+ "status": {
+ "active": "Active",
+ "inactive": "Inactive"
+ },
+ "github": {
+ "title": "GitHub Tokens",
+ "description": "Add GitHub Personal Access Tokens to clone private repositories via the external API.",
+ "descriptionAlt": "Add GitHub Personal Access Tokens to clone private repositories. You can also pass tokens directly in API requests without storing them.",
+ "addButton": "Add Token",
+ "form": {
+ "namePlaceholder": "Token Name (e.g., Personal Repos)",
+ "tokenPlaceholder": "GitHub Personal Access Token (ghp_...)",
+ "descriptionPlaceholder": "Description (optional)",
+ "addButton": "Add Token",
+ "cancelButton": "Cancel",
+ "howToCreate": "How to create a GitHub Personal Access Token →"
+ },
+ "empty": "No GitHub tokens added yet.",
+ "added": "Added:",
+ "confirmDelete": "Are you sure you want to delete this GitHub token?"
+ },
+ "apiDocsLink": "API Documentation",
+ "documentation": {
+ "title": "External API Documentation",
+ "description": "Learn how to use the external API to trigger Claude/Cursor sessions from your applications.",
+ "viewLink": "View API Documentation →"
+ },
+ "loading": "Loading...",
+ "version": {
+ "updateAvailable": "Update available: v{{version}}"
+ }
+ },
+ "tasks": {
+ "checking": "Checking TaskMaster installation...",
+ "notInstalled": {
+ "title": "TaskMaster AI CLI Not Installed",
+ "description": "TaskMaster CLI is required to use task management features. Install it to get started:",
+ "installCommand": "npm install -g task-master-ai",
+ "viewOnGitHub": "View on GitHub",
+ "afterInstallation": "After installation:",
+ "steps": {
+ "restart": "Restart this application",
+ "autoAvailable": "TaskMaster features will automatically become available",
+ "initCommand": "Use task-master init in your project directory"
+ }
+ },
+ "settings": {
+ "enableLabel": "Enable TaskMaster Integration",
+ "enableDescription": "Show TaskMaster tasks, banners, and sidebar indicators across the interface"
+ }
+ },
+ "agents": {
+ "authStatus": {
+ "checking": "Checking...",
+ "connected": "Connected",
+ "notConnected": "Not connected",
+ "disconnected": "Disconnected",
+ "checkingAuth": "Checking authentication status...",
+ "loggedInAs": "Logged in as {{email}}",
+ "authenticatedUser": "authenticated user"
+ },
+ "account": {
+ "claude": {
+ "description": "Anthropic Claude AI assistant"
+ },
+ "cursor": {
+ "description": "Cursor AI-powered code editor"
+ },
+ "codex": {
+ "description": "OpenAI Codex AI assistant"
+ }
+ },
+ "connectionStatus": "Connection Status",
+ "login": {
+ "title": "Login",
+ "reAuthenticate": "Re-authenticate",
+ "description": "Sign in to your {{agent}} account to enable AI features",
+ "reAuthDescription": "Sign in with a different account or refresh credentials",
+ "button": "Login",
+ "reLoginButton": "Re-login"
+ },
+ "error": "Error: {{error}}"
+ },
+ "permissions": {
+ "title": "Permission Settings",
+ "skipPermissions": {
+ "label": "Skip permission prompts (use with caution)",
+ "claudeDescription": "Equivalent to --dangerously-skip-permissions flag",
+ "cursorDescription": "Equivalent to -f flag in Cursor CLI"
+ },
+ "allowedTools": {
+ "title": "Allowed Tools",
+ "description": "Tools that are automatically allowed without prompting for permission",
+ "placeholder": "e.g., \"Bash(git log:*)\" or \"Write\"",
+ "quickAdd": "Quick add common tools:",
+ "empty": "No allowed tools configured"
+ },
+ "blockedTools": {
+ "title": "Blocked Tools",
+ "description": "Tools that are automatically blocked without prompting for permission",
+ "placeholder": "e.g., \"Bash(rm:*)\"",
+ "empty": "No blocked tools configured"
+ },
+ "allowedCommands": {
+ "title": "Allowed Shell Commands",
+ "description": "Shell commands that are automatically allowed without prompting",
+ "placeholder": "e.g., \"Shell(ls)\" or \"Shell(git status)\"",
+ "quickAdd": "Quick add common commands:",
+ "empty": "No allowed commands configured"
+ },
+ "blockedCommands": {
+ "title": "Blocked Shell Commands",
+ "description": "Shell commands that are automatically blocked",
+ "placeholder": "e.g., \"Shell(rm -rf)\" or \"Shell(sudo)\"",
+ "empty": "No blocked commands configured"
+ },
+ "toolExamples": {
+ "title": "Tool Pattern Examples:",
+ "bashGitLog": "- Allow all git log commands",
+ "bashGitDiff": "- Allow all git diff commands",
+ "write": "- Allow all Write tool usage",
+ "bashRm": "- Block all rm commands (dangerous)"
+ },
+ "shellExamples": {
+ "title": "Shell Command Examples:",
+ "ls": "- Allow ls command",
+ "gitStatus": "- Allow git status",
+ "npmInstall": "- Allow npm install",
+ "rmRf": "- Block recursive delete"
+ },
+ "codex": {
+ "permissionMode": "Permission Mode",
+ "description": "Controls how Codex handles file modifications and command execution",
+ "modes": {
+ "default": {
+ "title": "Default",
+ "description": "Only trusted commands (ls, cat, grep, git status, etc.) run automatically. Other commands are skipped. Can write to workspace."
+ },
+ "acceptEdits": {
+ "title": "Accept Edits",
+ "description": "All commands run automatically within the workspace. Full auto mode with sandboxed execution."
+ },
+ "bypassPermissions": {
+ "title": "Bypass Permissions",
+ "description": "Full system access with no restrictions. All commands run automatically with full disk and network access. Use with caution."
+ }
+ },
+ "technicalDetails": "Technical details",
+ "technicalInfo": {
+ "default": "sandboxMode=workspace-write, approvalPolicy=untrusted. Trusted commands: cat, cd, grep, head, ls, pwd, tail, git status/log/diff/show, find (without -exec), etc.",
+ "acceptEdits": "sandboxMode=workspace-write, approvalPolicy=never. All commands auto-execute within project directory.",
+ "bypassPermissions": "sandboxMode=danger-full-access, approvalPolicy=never. Full system access, use only in trusted environments.",
+ "overrideNote": "You can override this per-session using the mode button in the chat interface."
+ }
+ },
+ "actions": {
+ "add": "Add"
+ }
+ },
+ "mcpServers": {
+ "title": "MCP Servers",
+ "description": {
+ "claude": "Model Context Protocol servers provide additional tools and data sources to Claude",
+ "cursor": "Model Context Protocol servers provide additional tools and data sources to Cursor",
+ "codex": "Model Context Protocol servers provide additional tools and data sources to Codex"
+ },
+ "addButton": "Add MCP Server",
+ "empty": "No MCP servers configured",
+ "serverType": "Type",
+ "scope": {
+ "local": "local",
+ "user": "user"
+ },
+ "config": {
+ "command": "Command",
+ "url": "URL",
+ "args": "Args",
+ "environment": "Environment"
+ },
+ "tools": {
+ "title": "Tools",
+ "count": "({{count}}):",
+ "more": "+{{count}} more"
+ },
+ "actions": {
+ "edit": "Edit server",
+ "delete": "Delete server"
+ },
+ "help": {
+ "title": "About Codex MCP",
+ "description": "Codex supports stdio-based MCP servers. You can add servers that extend Codex's capabilities with additional tools and resources."
+ }
}
}
diff --git a/src/i18n/locales/zh-CN/chat.json b/src/i18n/locales/zh-CN/chat.json
new file mode 100644
index 0000000..6f20225
--- /dev/null
+++ b/src/i18n/locales/zh-CN/chat.json
@@ -0,0 +1,111 @@
+{
+ "codeBlock": {
+ "copy": "复制",
+ "copied": "已复制",
+ "copyCode": "复制代码"
+ },
+ "messageTypes": {
+ "user": "U",
+ "error": "错误",
+ "tool": "工具",
+ "claude": "Claude",
+ "cursor": "Cursor",
+ "codex": "Codex"
+ },
+ "tools": {
+ "settings": "工具设置",
+ "error": "工具错误",
+ "result": "工具结果",
+ "viewParams": "查看输入参数",
+ "viewRawParams": "查看原始参数",
+ "viewDiff": "查看编辑差异",
+ "creatingFile": "创建新文件:",
+ "updatingTodo": "更新待办事项",
+ "read": "读取",
+ "readFile": "读取文件",
+ "updateTodo": "更新待办列表",
+ "readTodo": "读取待办列表",
+ "searchResults": "结果"
+ },
+ "search": {
+ "found": "找到 {{count}} 个{{type}}",
+ "file": "文件",
+ "files": "文件",
+ "pattern": "模式:",
+ "in": "在:"
+ },
+ "fileOperations": {
+ "updated": "文件更新成功",
+ "created": "文件创建成功",
+ "written": "文件写入成功",
+ "diff": "差异",
+ "newFile": "新文件",
+ "viewContent": "查看文件内容",
+ "viewFullOutput": "查看完整输出({{count}} 个字符)",
+ "contentDisplayed": "文件内容显示在上面的差异视图中"
+ },
+ "interactive": {
+ "title": "交互式提示",
+ "waiting": "等待您在 CLI 中响应",
+ "instruction": "请在 Claude 运行的终端中选择一个选项。",
+ "selectedOption": "✓ Claude 选择了选项 {{number}}",
+ "instructionDetail": "在 CLI 中,您可以使用方向键或输入数字来交互式地选择此选项。"
+ },
+ "thinking": {
+ "title": "思考中...",
+ "emoji": "💭 思考中..."
+ },
+ "json": {
+ "response": "JSON 响应"
+ },
+ "permissions": {
+ "grant": "授予 {{tool}} 权限",
+ "added": "权限已添加",
+ "addTo": "将
{{entry}} 添加到允许的工具。",
+ "retry": "权限已保存。重试请求以使用该工具。",
+ "error": "无法更新权限。请重试。",
+ "openSettings": "打开设置"
+ },
+ "todo": {
+ "updated": "待办列表已成功更新",
+ "current": "当前待办列表"
+ },
+ "plan": {
+ "viewPlan": "📋 查看实施计划",
+ "title": "实施计划"
+ },
+ "usageLimit": {
+ "resetAt": "Claude 使用限制已达到。您的限制将在 **{{time}} {{timezone}}** - {{date}} 重置"
+ },
+ "codex": {
+ "permissionMode": "权限模式",
+ "modes": {
+ "default": "默认模式",
+ "acceptEdits": "编辑模式",
+ "bypassPermissions": "无限制模式",
+ "plan": "计划模式"
+ },
+ "descriptions": {
+ "default": "只有受信任的命令(ls、cat、grep、git status 等)自动运行。其他命令将被跳过。可以写入工作区。",
+ "acceptEdits": "工作区内的所有命令自动运行。完全自动模式,具有沙盒执行功能。",
+ "bypassPermissions": "完全的系统访问,无限制。所有命令自动运行,具有完整的磁盘和网络访问权限。请谨慎使用。",
+ "plan": "计划模式 - 不执行任何命令"
+ },
+ "technicalDetails": "技术细节"
+ },
+ "input": {
+ "placeholder": "输入 / 调用命令,@ 选择文件,或向 {{provider}} 提问...",
+ "placeholderDefault": "输入您的消息...",
+ "disabled": "输入已禁用",
+ "attachFiles": "附加文件",
+ "attachImages": "附加图片",
+ "send": "发送",
+ "stop": "停止",
+ "hintText": {
+ "ctrlEnter": "Ctrl+Enter 发送 • Shift+Enter 换行 • Tab 切换模式 • / 斜杠命令",
+ "enter": "Enter 发送 • Shift+Enter 换行 • Tab 切换模式 • / 斜杠命令"
+ },
+ "clickToChangeMode": "点击更改权限模式(或在输入框中按 Tab)",
+ "showAllCommands": "显示所有命令"
+ }
+}
diff --git a/src/i18n/locales/zh-CN/settings.json b/src/i18n/locales/zh-CN/settings.json
index 2814fb5..f8a60f2 100644
--- a/src/i18n/locales/zh-CN/settings.json
+++ b/src/i18n/locales/zh-CN/settings.json
@@ -7,6 +7,7 @@
"appearance": "外观"
},
"account": {
+ "title": "账户",
"language": "语言",
"languageLabel": "显示语言",
"languageDescription": "选择您偏好的界面语言",
@@ -15,13 +16,6 @@
"profile": "个人资料",
"changePassword": "修改密码"
},
- "permissions": {
- "allowedTools": "允许的工具",
- "disallowedTools": "禁止的工具",
- "addTool": "添加工具",
- "removeTool": "移除工具",
- "description": "配置 Claude 可以使用的工具。工具必须在此处启用后,Claude 才能访问它们。"
- },
"mcp": {
"title": "MCP 服务器",
"addServer": "添加服务器",
@@ -71,5 +65,337 @@
"autoScrollToBottom": "自动滚动到底部",
"sendByCtrlEnter": "使用 Ctrl+Enter 发送",
"sendByCtrlEnterDescription": "启用后,按 Ctrl+Enter 发送消息,而不是仅按 Enter。这对于使用输入法的用户可以避免意外发送。"
+ },
+ "mainTabs": {
+ "agents": "智能体",
+ "appearance": "外观",
+ "git": "Git",
+ "apiTokens": "API 和令牌",
+ "tasks": "任务"
+ },
+ "appearanceSettings": {
+ "darkMode": {
+ "label": "深色模式",
+ "description": "切换浅色和深色主题"
+ },
+ "projectSorting": {
+ "label": "项目排序",
+ "description": "项目在侧边栏中的排列方式",
+ "alphabetical": "按字母顺序",
+ "recentActivity": "最近活动"
+ },
+ "codeEditor": {
+ "title": "代码编辑器",
+ "theme": {
+ "label": "编辑器主题",
+ "description": "代码编辑器的默认主题"
+ },
+ "wordWrap": {
+ "label": "自动换行",
+ "description": "在编辑器中默认启用自动换行"
+ },
+ "showMinimap": {
+ "label": "显示缩略图",
+ "description": "在差异视图中显示缩略图以便于导航"
+ },
+ "lineNumbers": {
+ "label": "显示行号",
+ "description": "在编辑器中显示行号"
+ },
+ "fontSize": {
+ "label": "字体大小",
+ "description": "编辑器字体大小(px)"
+ }
+ }
+ },
+ "mcpForm": {
+ "title": {
+ "add": "添加 MCP 服务器",
+ "edit": "编辑 MCP 服务器"
+ },
+ "importMode": {
+ "form": "表单输入",
+ "json": "JSON 导入"
+ },
+ "scope": {
+ "label": "范围",
+ "userGlobal": "用户(全局)",
+ "projectLocal": "项目(本地)",
+ "userDescription": "用户范围:在您机器上的所有项目中可用",
+ "projectDescription": "本地范围:仅在选定项目中可用",
+ "cannotChange": "编辑现有服务器时无法更改范围"
+ },
+ "fields": {
+ "serverName": "服务器名称",
+ "transportType": "传输类型",
+ "command": "命令",
+ "arguments": "参数(每行一个)",
+ "jsonConfig": "JSON 配置",
+ "url": "URL",
+ "envVars": "环境变量(KEY=值,每行一个)",
+ "headers": "请求头(KEY=值,每行一个)",
+ "selectProject": "选择项目..."
+ },
+ "placeholders": {
+ "serverName": "我的服务"
+ },
+ "validation": {
+ "missingType": "缺少必填字段:type",
+ "stdioRequiresCommand": "stdio 类型需要 command 字段",
+ "httpRequiresUrl": "{{type}} 类型需要 url 字段",
+ "invalidJson": "无效的 JSON 格式",
+ "jsonHelp": "粘贴您的 MCP 服务器配置(JSON 格式)。示例格式:",
+ "jsonExampleStdio": "• stdio: {\"type\":\"stdio\",\"command\":\"npx\",\"args\":[\"@upstash/context7-mcp\"]}",
+ "jsonExampleHttp": "• http/sse: {\"type\":\"http\",\"url\":\"https://api.example.com/mcp\"}"
+ },
+ "configDetails": "配置详细信息(来自 {{configFile}})",
+ "projectPath": "路径:{{path}}",
+ "actions": {
+ "cancel": "取消",
+ "saving": "保存中...",
+ "addServer": "添加服务器",
+ "updateServer": "更新服务器"
+ }
+ },
+ "saveStatus": {
+ "success": "设置保存成功!",
+ "error": "保存设置失败",
+ "saving": "保存中..."
+ },
+ "footerActions": {
+ "save": "保存设置",
+ "cancel": "取消"
+ },
+ "git": {
+ "title": "Git 配置",
+ "description": "配置您的 git 提交身份。这些设置将通过
git config --global
全局应用",
+ "name": {
+ "label": "Git 名称",
+ "help": "您的 git 提交名称"
+ },
+ "email": {
+ "label": "Git 邮箱",
+ "help": "您的 git 提交邮箱"
+ },
+ "actions": {
+ "save": "保存配置",
+ "saving": "保存中..."
+ },
+ "status": {
+ "success": "保存成功"
+ }
+ },
+ "apiKeys": {
+ "title": "API 密钥",
+ "description": "生成 API 密钥以从其他应用访问外部 API。",
+ "newKey": {
+ "alertTitle": "⚠️ 保存您的 API 密钥",
+ "alertMessage": "这是您唯一一次看到此密钥。请妥善保存。",
+ "iveSavedIt": "我已保存"
+ },
+ "form": {
+ "placeholder": "API 密钥名称(例如:生产服务器)",
+ "createButton": "创建",
+ "cancelButton": "取消"
+ },
+ "newButton": "新建 API 密钥",
+ "empty": "尚未创建 API 密钥。",
+ "list": {
+ "created": "创建时间:",
+ "lastUsed": "最后使用:"
+ },
+ "confirmDelete": "确定要删除此 API 密钥吗?",
+ "status": {
+ "active": "激活",
+ "inactive": "未激活"
+ },
+ "github": {
+ "title": "GitHub 令牌",
+ "description": "添加 GitHub 个人访问令牌以通过外部 API 克隆私有仓库。",
+ "descriptionAlt": "添加 GitHub 个人访问令牌以克隆私有仓库。您也可以直接在 API 请求中传递令牌而无需存储。",
+ "addButton": "添加令牌",
+ "form": {
+ "namePlaceholder": "令牌名称(例如:个人仓库)",
+ "tokenPlaceholder": "GitHub 个人访问令牌(ghp_...)",
+ "descriptionPlaceholder": "描述(可选)",
+ "addButton": "添加令牌",
+ "cancelButton": "取消",
+ "howToCreate": "如何创建 GitHub 个人访问令牌 →"
+ },
+ "empty": "尚未添加 GitHub 令牌。",
+ "added": "添加时间:",
+ "confirmDelete": "确定要删除此 GitHub 令牌吗?"
+ },
+ "apiDocsLink": "API 文档",
+ "documentation": {
+ "title": "外部 API 文档",
+ "description": "了解如何使用外部 API 从您的应用程序触发 Claude/Cursor 会话。",
+ "viewLink": "查看 API 文档 →"
+ },
+ "loading": "加载中...",
+ "version": {
+ "updateAvailable": "有可用更新:v{{version}}"
+ }
+ },
+ "tasks": {
+ "checking": "正在检查 TaskMaster 安装...",
+ "notInstalled": {
+ "title": "未安装 TaskMaster AI CLI",
+ "description": "需要 TaskMaster CLI 才能使用任务管理功能。安装它以开始使用:",
+ "installCommand": "npm install -g task-master-ai",
+ "viewOnGitHub": "在 GitHub 上查看",
+ "afterInstallation": "安装后:",
+ "steps": {
+ "restart": "重启此应用程序",
+ "autoAvailable": "TaskMaster 功能将自动可用",
+ "initCommand": "在项目目录中使用 task-master init"
+ }
+ },
+ "settings": {
+ "enableLabel": "启用 TaskMaster 集成",
+ "enableDescription": "在整个界面中显示 TaskMaster 任务、横幅和侧边栏指示器"
+ }
+ },
+ "agents": {
+ "authStatus": {
+ "checking": "检查中...",
+ "connected": "已连接",
+ "notConnected": "未连接",
+ "disconnected": "已断开",
+ "checkingAuth": "正在检查认证状态...",
+ "loggedInAs": "登录为 {{email}}",
+ "authenticatedUser": "已认证用户"
+ },
+ "account": {
+ "claude": {
+ "description": "Anthropic Claude AI 助手"
+ },
+ "cursor": {
+ "description": "Cursor AI 驱动的代码编辑器"
+ },
+ "codex": {
+ "description": "OpenAI Codex AI 助手"
+ }
+ },
+ "connectionStatus": "连接状态",
+ "login": {
+ "title": "登录",
+ "reAuthenticate": "重新认证",
+ "description": "登录您的 {{agent}} 账户以启用 AI 功能",
+ "reAuthDescription": "使用其他账户登录或刷新凭据",
+ "button": "登录",
+ "reLoginButton": "重新登录"
+ },
+ "error": "错误:{{error}}"
+ },
+ "permissions": {
+ "title": "权限设置",
+ "skipPermissions": {
+ "label": "跳过权限提示(请谨慎使用)",
+ "claudeDescription": "等同于 --dangerously-skip-permissions 标志",
+ "cursorDescription": "等同于 Cursor CLI 中的 -f 标志"
+ },
+ "allowedTools": {
+ "title": "允许的工具",
+ "description": "无需权限提示即可自动使用的工具",
+ "placeholder": "例如:\"Bash(git log:*)\" 或 \"Write\"",
+ "quickAdd": "快速添加常用工具:",
+ "empty": "未配置允许的工具"
+ },
+ "blockedTools": {
+ "title": "禁用的工具",
+ "description": "无需权限提示即可自动禁用的工具",
+ "placeholder": "例如:\"Bash(rm:*)\"",
+ "empty": "未配置禁用的工具"
+ },
+ "allowedCommands": {
+ "title": "允许的 Shell 命令",
+ "description": "无需权限提示即可自动执行的 Shell 命令",
+ "placeholder": "例如:\"Shell(ls)\" 或 \"Shell(git status)\"",
+ "quickAdd": "快速添加常用命令:",
+ "empty": "未配置允许的命令"
+ },
+ "blockedCommands": {
+ "title": "阻止的 Shell 命令",
+ "description": "自动阻止的 Shell 命令",
+ "placeholder": "例如:\"Shell(rm -rf)\" 或 \"Shell(sudo)\"",
+ "empty": "未配置阻止的命令"
+ },
+ "toolExamples": {
+ "title": "工具模式示例:",
+ "bashGitLog": "- 允许所有 git log 命令",
+ "bashGitDiff": "- 允许所有 git diff 命令",
+ "write": "- 允许所有 Write 工具使用",
+ "bashRm": "- 阻止所有 rm 命令(危险)"
+ },
+ "shellExamples": {
+ "title": "Shell 命令示例:",
+ "ls": "- 允许 ls 命令",
+ "gitStatus": "- 允许 git status",
+ "npmInstall": "- 允许 npm install",
+ "rmRf": "- 阻止递归删除"
+ },
+ "codex": {
+ "permissionMode": "权限模式",
+ "description": "控制 Codex 如何处理文件修改和命令执行",
+ "modes": {
+ "default": {
+ "title": "默认",
+ "description": "只有受信任的命令(ls、cat、grep、git status 等)会自动运行。其他命令将被跳过。可以写入工作区。"
+ },
+ "acceptEdits": {
+ "title": "接受编辑",
+ "description": "所有命令在工作区内自动运行。具有沙箱执行的全自动模式。"
+ },
+ "bypassPermissions": {
+ "title": "绕过权限",
+ "description": "完全系统访问,无任何限制。所有命令自动运行,具有完整的磁盘和网络访问权限。请谨慎使用。"
+ }
+ },
+ "technicalDetails": "技术详情",
+ "technicalInfo": {
+ "default": "sandboxMode=workspace-write, approvalPolicy=untrusted。受信任的命令:cat、cd、grep、head、ls、pwd、tail、git status/log/diff/show、find(不带 -exec)等。",
+ "acceptEdits": "sandboxMode=workspace-write, approvalPolicy=never。所有命令在项目目录内自动执行。",
+ "bypassPermissions": "sandboxMode=danger-full-access, approvalPolicy=never。完全系统访问权限,仅在可信环境中使用。",
+ "overrideNote": "您可以使用聊天界面中的模式按钮按会话覆盖此设置。"
+ }
+ },
+ "actions": {
+ "add": "添加"
+ }
+ },
+ "mcpServers": {
+ "title": "MCP 服务器",
+ "description": {
+ "claude": "Model Context Protocol 服务器为 Claude 提供额外的工具和数据源",
+ "cursor": "Model Context Protocol 服务器为 Cursor 提供额外的工具和数据源",
+ "codex": "Model Context Protocol 服务器为 Codex 提供额外的工具和数据源"
+ },
+ "addButton": "添加 MCP 服务器",
+ "empty": "未配置 MCP 服务器",
+ "serverType": "类型",
+ "scope": {
+ "local": "本地",
+ "user": "用户"
+ },
+ "config": {
+ "command": "命令",
+ "url": "URL",
+ "args": "参数",
+ "environment": "环境变量"
+ },
+ "tools": {
+ "title": "工具",
+ "count": "({{count}}):",
+ "more": "还有 {{count}} 个"
+ },
+ "actions": {
+ "edit": "编辑服务器",
+ "delete": "删除服务器"
+ },
+ "help": {
+ "title": "关于 Codex MCP",
+ "description": "Codex 支持基于 stdio 的 MCP 服务器。您可以添加服务器,通过额外的工具和资源来扩展 Codex 的功能。"
+ }
}
}
From 7928285ed0bfb3ead268cac2f74241ece8f1c7b0 Mon Sep 17 00:00:00 2001
From: YuanNiancai
Date: Wed, 21 Jan 2026 14:09:32 +0800
Subject: [PATCH 10/24] resolve conflict
---
src/components/ProjectCreationWizard.jsx | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/components/ProjectCreationWizard.jsx b/src/components/ProjectCreationWizard.jsx
index db31fa3..2109e56 100644
--- a/src/components/ProjectCreationWizard.jsx
+++ b/src/components/ProjectCreationWizard.jsx
@@ -380,7 +380,7 @@ const ProjectCreationWizard = ({ onClose, onProjectCreated }) => {
type="text"
value={githubUrl}
onChange={(e) => setGithubUrl(e.target.value)}
- placeholder={t('projectWizard.step2.githubPlaceholder')}
+ placeholder="https://github.com/username/repository"
className="w-full"
/>
@@ -475,7 +475,7 @@ const ProjectCreationWizard = ({ onClose, onProjectCreated }) => {
type="password"
value={newGithubToken}
onChange={(e) => setNewGithubToken(e.target.value)}
- placeholder={t('projectWizard.step2.tokenPlaceholder')}
+ placeholder="ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
className="w-full"
/>
From 73375d76536436821a13128443ac54257630ef2f Mon Sep 17 00:00:00 2001
From: YuanNiancai
Date: Wed, 21 Jan 2026 14:29:16 +0800
Subject: [PATCH 11/24] fix: improve i18n translation strings based on code
review
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Refactored translation strings to follow best practices:
1. Removed HTML tags from translation strings (en/chat.json)
- Changed "Adds {{entry}} " to "Adds {{entry}}"
2. Simplified TasksSettings.jsx component (TasksSettings.jsx)
- Moved command code directly into translation file
3. Updated both English and Chinese translation files
- en/chat.json: Removed HTML markup from permissions.addTo
- zh-CN/chat.json: Corresponding Chinese translation update
- en/settings.json: Added task-master init command
-zh-CN/settings.json: Added task-master init command in Chinese
根据代码审查改进 i18n 翻译字符串:
1. 从翻译字符串中移除 HTML 标签(en/chat.json)
- 将 "Adds {{entry}} " 改为 "Adds {{entry}}"
2. 简化 TasksSettings.jsx 组件
- 将命令代码直接移到翻译文件中
3. 更新英文和中文翻译文件
- en/chat.json: 从 permissions.addTo 移除 HTML 标记
- zh-CN/chat.json: 对应的中文翻译更新
- en/settings.json: 添加 task-master init 命令
- zh-CN/settings.json: 添加 task-master init 命令的中文翻译
---
src/components/TasksSettings.jsx | 2 +-
src/i18n/locales/en/chat.json | 2 +-
src/i18n/locales/en/settings.json | 2 +-
src/i18n/locales/zh-CN/chat.json | 2 +-
src/i18n/locales/zh-CN/settings.json | 2 +-
5 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/src/components/TasksSettings.jsx b/src/components/TasksSettings.jsx
index dda0cf1..99f35c3 100644
--- a/src/components/TasksSettings.jsx
+++ b/src/components/TasksSettings.jsx
@@ -65,7 +65,7 @@ function TasksSettings() {
{t('tasks.notInstalled.steps.restart')}
{t('tasks.notInstalled.steps.autoAvailable')}
- Use task-master init {t('tasks.notInstalled.steps.initCommand')}
+ {t('tasks.notInstalled.steps.initCommand')}