crush-level-web/scripts/translation-report.json

5044 lines
161 KiB
JSON
Raw Normal View History

2025-11-13 08:38:25 +00:00
{
"timestamp": "2025-10-19T13:02:25.634Z",
"stats": {
"total": 378,
"success": 334,
"conflicts": 0,
"fileNotFound": 0,
"textNotFound": 24,
"multipleMatches": 20
},
"successfulReplacements": [
{
"route": "shared",
"file": "src/components/mock-provider.tsx",
"componentOrFn": "MockProvider",
"kind": "text",
"keyOrLocator": "div",
"text": "正在初始化开发环境...",
"line": 61,
"count": 2,
"notes": "",
"corrected_text": "Initializing development environment...",
"actualLine": 61,
"replacementType": "jsx-text"
},
{
"route": "shared",
"file": "src/hooks/auth.ts",
"componentOrFn": "useLogout",
"kind": "toast",
"keyOrLocator": "toast.success",
"text": "已退出登录",
"line": 45,
"count": 1,
"notes": "",
"corrected_text": "Logged out",
"actualLine": 45,
"replacementType": "function-arg"
},
{
"route": "shared",
"file": "src/hooks/auth.ts",
"componentOrFn": "useRegister",
"kind": "toast",
"keyOrLocator": "toast.success",
"text": "注册成功!",
"line": 129,
"count": 1,
"notes": "",
"corrected_text": "Successful registration!",
"actualLine": 129,
"replacementType": "function-arg"
},
{
"route": "shared",
"file": "src/hooks/auth.ts",
"componentOrFn": "useRegister",
"kind": "toast",
"keyOrLocator": "toast.error",
"text": "注册失败",
"line": 140,
"count": 1,
"notes": "",
"corrected_text": "Registration failed.",
"actualLine": 140,
"replacementType": "function-arg"
},
{
"route": "debug-mock",
"file": "src/app/debug-mock/page.tsx",
"componentOrFn": "DebugMockPage",
"kind": "text",
"keyOrLocator": "div",
"text": "测试选项",
"line": 90,
"count": 3,
"notes": "",
"corrected_text": "test options",
"actualLine": 90,
"replacementType": "jsx-text"
},
{
"route": "debug-mock",
"file": "src/app/debug-mock/page.tsx",
"componentOrFn": "DebugMockPage",
"kind": "text",
"keyOrLocator": "div",
"text": "测试直接 API 请求",
"line": 97,
"count": 3,
"notes": "",
"corrected_text": "Testing direct API requests",
"actualLine": 97,
"replacementType": "jsx-text"
},
{
"route": "debug-mock",
"file": "src/app/debug-mock/page.tsx",
"componentOrFn": "DebugMockPage",
"kind": "text",
"keyOrLocator": "div",
"text": "测试 Mock API 请求",
"line": 101,
"count": 3,
"notes": "",
"corrected_text": "Testing Mock API Requests",
"actualLine": 101,
"replacementType": "jsx-text"
},
{
"route": "debug-mock",
"file": "src/app/debug-mock/page.tsx",
"componentOrFn": "DebugMockPage",
"kind": "text",
"keyOrLocator": "div",
"text": "清除结果",
"line": 105,
"count": 3,
"notes": "",
"corrected_text": "Clear result",
"actualLine": 105,
"replacementType": "jsx-text"
},
{
"route": "debug-mock",
"file": "src/app/debug-mock/page.tsx",
"componentOrFn": "DebugMockPage",
"kind": "text",
"keyOrLocator": "div",
"text": "环境信息",
"line": 111,
"count": 3,
"notes": "",
"corrected_text": "Environmental information",
"actualLine": 111,
"replacementType": "jsx-text"
},
{
"route": "debug-mock",
"file": "src/app/debug-mock/page.tsx",
"componentOrFn": "DebugMockPage",
"kind": "text",
"keyOrLocator": "div",
"text": "测试结果",
"line": 131,
"count": 2,
"notes": "",
"corrected_text": "Test Results",
"actualLine": 131,
"replacementType": "jsx-text"
},
{
"route": "debug-mock",
"file": "src/app/debug-mock/page.tsx",
"componentOrFn": "DebugMockPage",
"kind": "text",
"keyOrLocator": "div",
"text": "等待测试结果...",
"line": 134,
"count": 4,
"notes": "",
"corrected_text": "Waiting for the test results...",
"actualLine": 134,
"replacementType": "jsx-text"
},
{
"route": "demo",
"file": "src/app/demo/page.tsx",
"componentOrFn": "DemoPage",
"kind": "text",
"keyOrLocator": "div",
"text": "组件演示",
"line": 61,
"count": 3,
"notes": "",
"corrected_text": "Component demo",
"actualLine": 61,
"replacementType": "jsx-text"
},
{
"route": "demo",
"file": "src/app/demo/page.tsx",
"componentOrFn": "DemoPage",
"kind": "text",
"keyOrLocator": "div",
"text": "可折叠侧边栏",
"line": 65,
"count": 3,
"notes": "",
"corrected_text": "Collapsible Sidebar",
"actualLine": 65,
"replacementType": "jsx-text"
},
{
"route": "demo",
"file": "src/app/demo/page.tsx",
"componentOrFn": "DemoPage",
"kind": "text",
"keyOrLocator": "div",
"text": "左侧侧边栏支持以下功能:",
"line": 68,
"count": 4,
"notes": "",
"corrected_text": "The left sidebar supports the following functions:",
"actualLine": 68,
"replacementType": "jsx-text"
},
{
"route": "demo",
"file": "src/app/demo/page.tsx",
"componentOrFn": "DemoPage",
"kind": "text",
"keyOrLocator": "div",
"text": "点击顶部折叠/展开按钮切换侧边栏宽度",
"line": 71,
"count": 4,
"notes": "",
"corrected_text": "Click the top fold/expand button to toggle the sidebar width",
"actualLine": 71,
"replacementType": "jsx-text"
},
{
"route": "demo",
"file": "src/app/demo/page.tsx",
"componentOrFn": "DemoPage",
"kind": "text",
"keyOrLocator": "div",
"text": "导航菜单支持选中状态和图标切换",
"line": 72,
"count": 4,
"notes": "",
"corrected_text": "Navigation menu supports selection status and icon switching",
"actualLine": 72,
"replacementType": "jsx-text"
},
{
"route": "demo",
"file": "src/app/demo/page.tsx",
"componentOrFn": "DemoPage",
"kind": "text",
"keyOrLocator": "div",
"text": "聊天列表显示用户头像、消息预览、时间和未读数量",
"line": 73,
"count": 4,
"notes": "",
"corrected_text": "Chat list shows user avatar, message preview, time, and unread count",
"actualLine": 73,
"replacementType": "jsx-text"
},
{
"route": "demo",
"file": "src/app/demo/page.tsx",
"componentOrFn": "DemoPage",
"kind": "text",
"keyOrLocator": "div",
"text": "支持用户标签和温度显示",
"line": 74,
"count": 4,
"notes": "",
"corrected_text": "Support user label and temperature display",
"actualLine": 74,
"replacementType": "jsx-text"
},
{
"route": "demo",
"file": "src/app/demo/page.tsx",
"componentOrFn": "DemoPage",
"kind": "text",
"keyOrLocator": "div",
"text": "底部通知功能带有数量徽章",
"line": 75,
"count": 4,
"notes": "",
"corrected_text": "The bottom notification function comes with a quantity badge.",
"actualLine": 75,
"replacementType": "jsx-text"
},
{
"route": "demo",
"file": "src/app/demo/page.tsx",
"componentOrFn": "DemoPage",
"kind": "text",
"keyOrLocator": "div",
"text": "流畅的动画过渡效果",
"line": 76,
"count": 4,
"notes": "",
"corrected_text": "Smooth animation transitions",
"actualLine": 76,
"replacementType": "jsx-text"
},
{
"route": "demo",
"file": "src/app/demo/page.tsx",
"componentOrFn": "DemoPage",
"kind": "text",
"keyOrLocator": "div",
"text": "Alert Dialog 对话框",
"line": 83,
"count": 3,
"notes": "",
"corrected_text": "Alert Dialog dialog box",
"actualLine": 83,
"replacementType": "jsx-text"
},
{
"route": "demo",
"file": "src/app/demo/page.tsx",
"componentOrFn": "DemoPage",
"kind": "text",
"keyOrLocator": "div",
"text": "删除警告",
"line": 88,
"count": 4,
"notes": "",
"corrected_text": "Remove warning",
"actualLine": 88,
"replacementType": "jsx-text"
},
{
"route": "demo",
"file": "src/app/demo/page.tsx",
"componentOrFn": "DemoPage",
"kind": "text",
"keyOrLocator": "div",
"text": "AI 生成确认",
"line": 107,
"count": 4,
"notes": "",
"corrected_text": "AI generated confirmation",
"actualLine": 107,
"replacementType": "jsx-text"
},
{
"route": "demo",
"file": "src/app/demo/page.tsx",
"componentOrFn": "DemoPage",
"kind": "text",
"keyOrLocator": "div",
"text": "Loading 对话框",
"line": 128,
"count": 4,
"notes": "",
"corrected_text": "Loading dialog box",
"actualLine": 128,
"replacementType": "jsx-text"
},
{
"route": "demo",
"file": "src/app/demo/page.tsx",
"componentOrFn": "DemoPage",
"kind": "text",
"keyOrLocator": "div",
"text": "确认操作",
"line": 132,
"count": 4,
"notes": "",
"corrected_text": "confirm operation",
"actualLine": 132,
"replacementType": "jsx-text"
},
{
"route": "demo",
"file": "src/app/demo/page.tsx",
"componentOrFn": "DemoPage",
"kind": "text",
"keyOrLocator": "div",
"text": "此操作将永久删除您的数据,确定要继续吗?",
"line": 134,
"count": 4,
"notes": "",
"corrected_text": "This operation will permanently delete your data. Are you sure you want to continue?",
"actualLine": 134,
"replacementType": "jsx-text"
},
{
"route": "demo",
"file": "src/app/demo/page.tsx",
"componentOrFn": "DemoPage",
"kind": "text",
"keyOrLocator": "div",
"text": "无关闭按钮",
"line": 155,
"count": 4,
"notes": "",
"corrected_text": "No close button",
"actualLine": 155,
"replacementType": "jsx-text"
},
{
"route": "demo",
"file": "src/app/demo/page.tsx",
"componentOrFn": "DemoPage",
"kind": "text",
"keyOrLocator": "div",
"text": "重要提示",
"line": 159,
"count": 4,
"notes": "",
"corrected_text": "Important Note",
"actualLine": 159,
"replacementType": "jsx-text"
},
{
"route": "demo",
"file": "src/app/demo/page.tsx",
"componentOrFn": "DemoPage",
"kind": "text",
"keyOrLocator": "div",
"text": "这是一个重要提示,您必须选择一个选项才能继续。",
"line": 161,
"count": 4,
"notes": "",
"corrected_text": "This is an important reminder that you must choose an option to proceed.",
"actualLine": 161,
"replacementType": "jsx-text"
},
{
"route": "demo",
"file": "src/app/demo/page.tsx",
"componentOrFn": "DemoPage",
"kind": "text",
"keyOrLocator": "div",
"text": "我知道了",
"line": 165,
"count": 4,
"notes": "",
"corrected_text": "Oh, I see.",
"actualLine": 165,
"replacementType": "jsx-text"
},
{
"route": "demo",
"file": "src/app/demo/page.tsx",
"componentOrFn": "DemoPage",
"kind": "text",
"keyOrLocator": "div",
"text": "继续操作",
"line": 166,
"count": 4,
"notes": "",
"corrected_text": "Continue operation",
"actualLine": 166,
"replacementType": "jsx-text"
},
{
"route": "demo",
"file": "src/app/demo/page.tsx",
"componentOrFn": "DemoPage",
"kind": "text",
"keyOrLocator": "div",
"text": "普通按钮 Loading 效果",
"line": 175,
"count": 3,
"notes": "",
"corrected_text": "Normal Button Loading Effect",
"actualLine": 175,
"replacementType": "jsx-text"
},
{
"route": "demo",
"file": "src/app/demo/page.tsx",
"componentOrFn": "DemoPage",
"kind": "text",
"keyOrLocator": "div",
"text": "小按钮",
"line": 207,
"count": 4,
"notes": "",
"corrected_text": "Small button",
"actualLine": 207,
"replacementType": "jsx-text"
},
{
"route": "demo",
"file": "src/app/demo/page.tsx",
"componentOrFn": "DemoPage",
"kind": "text",
"keyOrLocator": "div",
"text": "图标按钮 Loading 效果",
"line": 214,
"count": 3,
"notes": "",
"corrected_text": "Icon button Loading effect",
"actualLine": 214,
"replacementType": "jsx-text"
},
{
"route": "demo",
"file": "src/app/demo/page.tsx",
"componentOrFn": "DemoPage",
"kind": "text",
"keyOrLocator": "div",
"text": "块级按钮 Loading 效果",
"line": 247,
"count": 3,
"notes": "",
"corrected_text": "Block Button Loading Effect",
"actualLine": 247,
"replacementType": "jsx-text"
},
{
"route": "demo",
"file": "src/app/demo/page.tsx",
"componentOrFn": "DemoPage",
"kind": "text",
"keyOrLocator": "div",
"text": "手动控制 Loading 状态",
"line": 260,
"count": 3,
"notes": "",
"corrected_text": "Manually Control Loading Status",
"actualLine": 260,
"replacementType": "jsx-text"
},
{
"route": "demo",
"file": "src/app/demo/page.tsx",
"componentOrFn": "DemoPage",
"kind": "text",
"keyOrLocator": "div",
"text": "切换 Loading 1",
"line": 266,
"count": 4,
"notes": "",
"corrected_text": "Switch Loading 1",
"actualLine": 266,
"replacementType": "jsx-text"
},
{
"route": "demo",
"file": "src/app/demo/page.tsx",
"componentOrFn": "DemoPage",
"kind": "text",
"keyOrLocator": "div",
"text": "切换 Loading 2",
"line": 272,
"count": 4,
"notes": "",
"corrected_text": "Toggle Loading 2",
"actualLine": 272,
"replacementType": "jsx-text"
},
{
"route": "demo",
"file": "src/app/demo/page.tsx",
"componentOrFn": "DemoPage",
"kind": "text",
"keyOrLocator": "div",
"text": "切换 Loading 3",
"line": 278,
"count": 4,
"notes": "",
"corrected_text": "Toggle Loading 3",
"actualLine": 278,
"replacementType": "jsx-text"
},
{
"route": "demo",
"file": "src/app/demo/page.tsx",
"componentOrFn": "DemoPage",
"kind": "text",
"keyOrLocator": "div",
"text": "切换 Loading 4",
"line": 284,
"count": 4,
"notes": "",
"corrected_text": "Toggle Loading 4",
"actualLine": 284,
"replacementType": "jsx-text"
},
{
"route": "server-device-test",
"file": "src/app/server-device-test/page.tsx",
"componentOrFn": "ServerDeviceTestPage",
"kind": "text",
"keyOrLocator": "div",
"text": "测试服务端渲染时的设备ID生成和管理",
"line": 18,
"count": 2,
"notes": "",
"corrected_text": "Device ID generation and management when testing server-side rendering",
"actualLine": 18,
"replacementType": "jsx-text"
},
{
"route": "server-device-test",
"file": "src/app/server-device-test/page.tsx",
"componentOrFn": "ServerDeviceTestPage",
"kind": "text",
"keyOrLocator": "div",
"text": "当前设备ID (Cookie)",
"line": 29,
"count": 3,
"notes": "",
"corrected_text": "Current Device ID (Cookie)",
"actualLine": 29,
"replacementType": "jsx-text"
},
{
"route": "server-device-test",
"file": "src/app/server-device-test/page.tsx",
"componentOrFn": "ServerDeviceTestPage",
"kind": "text",
"keyOrLocator": "div",
"text": "中间件传递的设备ID (Header)",
"line": 38,
"count": 3,
"notes": "",
"corrected_text": "Device ID passed by middleware (Header)",
"actualLine": 38,
"replacementType": "jsx-text"
},
{
"route": "server-device-test",
"file": "src/app/server-device-test/page.tsx",
"componentOrFn": "ServerDeviceTestPage",
"kind": "text",
"keyOrLocator": "div",
"text": "状态说明:",
"line": 47,
"count": 3,
"notes": "",
"corrected_text": "Status description:",
"actualLine": 47,
"replacementType": "jsx-text"
},
{
"route": "server-device-test",
"file": "src/app/server-device-test/page.tsx",
"componentOrFn": "ServerDeviceTestPage",
"kind": "text",
"keyOrLocator": "div",
"text": "• 首次访问: 中间件生成设备ID并设置cookie",
"line": 49,
"count": 3,
"notes": "",
"corrected_text": "• First visit: Middleware generates device ID and sets cookies",
"actualLine": 49,
"replacementType": "jsx-text"
},
{
"route": "server-device-test",
"file": "src/app/server-device-test/page.tsx",
"componentOrFn": "ServerDeviceTestPage",
"kind": "text",
"keyOrLocator": "div",
"text": "• 后续访问: 从cookie读取现有设备ID",
"line": 50,
"count": 3,
"notes": "",
"corrected_text": "• Subsequent visits: Read the existing device ID from the cookie",
"actualLine": 50,
"replacementType": "jsx-text"
},
{
"route": "server-device-test",
"file": "src/app/server-device-test/page.tsx",
"componentOrFn": "ServerDeviceTestPage",
"kind": "text",
"keyOrLocator": "div",
"text": "• 设备ID通过header传递给服务端组件",
"line": 51,
"count": 3,
"notes": "",
"corrected_text": "• Device ID is passed to server level component via header",
"actualLine": 51,
"replacementType": "jsx-text"
},
{
"route": "server-device-test",
"file": "src/app/server-device-test/page.tsx",
"componentOrFn": "ServerDeviceTestPage",
"kind": "text",
"keyOrLocator": "div",
"text": "渲染时间",
"line": 71,
"count": 3,
"notes": "",
"corrected_text": "render time",
"actualLine": 71,
"replacementType": "jsx-text"
},
{
"route": "server-device-test",
"file": "src/app/server-device-test/page.tsx",
"componentOrFn": "ServerDeviceTestPage",
"kind": "text",
"keyOrLocator": "div",
"text": "渲染环境",
"line": 78,
"count": 3,
"notes": "",
"corrected_text": "rendering environment",
"actualLine": 78,
"replacementType": "jsx-text"
},
{
"route": "server-device-test",
"file": "src/app/server-device-test/page.tsx",
"componentOrFn": "ServerDeviceTestPage",
"kind": "text",
"keyOrLocator": "div",
"text": "服务端渲染 (SSR)",
"line": 80,
"count": 4,
"notes": "",
"corrected_text": "Server-side rendering (SSR)",
"actualLine": 80,
"replacementType": "jsx-text"
},
{
"route": "server-device-test",
"file": "src/app/server-device-test/page.tsx",
"componentOrFn": "ServerDeviceTestPage",
"kind": "text",
"keyOrLocator": "div",
"text": "1. 中间件处理 (middleware.ts)",
"line": 95,
"count": 3,
"notes": "",
"corrected_text": "1. Middleware processing (middleware.ts)",
"actualLine": 95,
"replacementType": "jsx-text"
},
{
"route": "server-device-test",
"file": "src/app/server-device-test/page.tsx",
"componentOrFn": "ServerDeviceTestPage",
"kind": "text",
"keyOrLocator": "div",
"text": "• 检查请求中是否已有设备ID cookie",
"line": 97,
"count": 3,
"notes": "",
"corrected_text": "• Check if there is a device ID cookie in the request",
"actualLine": 97,
"replacementType": "jsx-text"
},
{
"route": "server-device-test",
"file": "src/app/server-device-test/page.tsx",
"componentOrFn": "ServerDeviceTestPage",
"kind": "text",
"keyOrLocator": "div",
"text": "• 如果没有,使用 User-Agent 生成新的设备ID",
"line": 98,
"count": 3,
"notes": "",
"corrected_text": "• If not, use User-Agent to generate a new device ID",
"actualLine": 98,
"replacementType": "jsx-text"
},
{
"route": "server-device-test",
"file": "src/app/server-device-test/page.tsx",
"componentOrFn": "ServerDeviceTestPage",
"kind": "text",
"keyOrLocator": "div",
"text": "• 将设备ID设置为响应cookie",
"line": 99,
"count": 3,
"notes": "",
"corrected_text": "• Set the device ID to respond to cookies",
"actualLine": 99,
"replacementType": "jsx-text"
},
{
"route": "server-device-test",
"file": "src/app/server-device-test/page.tsx",
"componentOrFn": "ServerDeviceTestPage",
"kind": "text",
"keyOrLocator": "div",
"text": "• 通过 x-device-id header 传递给服务端组件",
"line": 100,
"count": 3,
"notes": "",
"corrected_text": "Pass to server level component via x-device-id header",
"actualLine": 100,
"replacementType": "jsx-text"
},
{
"route": "server-device-test",
"file": "src/app/server-device-test/page.tsx",
"componentOrFn": "ServerDeviceTestPage",
"kind": "text",
"keyOrLocator": "div",
"text": "• 在根布局中检查设备ID状态",
"line": 107,
"count": 3,
"notes": "",
"corrected_text": "• Check device ID status in root layout",
"actualLine": 107,
"replacementType": "jsx-text"
},
{
"route": "server-device-test",
"file": "src/app/server-device-test/page.tsx",
"componentOrFn": "ServerDeviceTestPage",
"kind": "text",
"keyOrLocator": "div",
"text": "• 从cookie和header两个来源获取设备ID",
"line": 108,
"count": 3,
"notes": "",
"corrected_text": "Get the device ID from both cookies and headers",
"actualLine": 108,
"replacementType": "jsx-text"
},
{
"route": "server-device-test",
"file": "src/app/server-device-test/page.tsx",
"componentOrFn": "ServerDeviceTestPage",
"kind": "text",
"keyOrLocator": "div",
"text": "• 记录设备ID状态用于调试",
"line": 109,
"count": 3,
"notes": "",
"corrected_text": "• Record device ID status for debugging",
"actualLine": 109,
"replacementType": "jsx-text"
},
{
"route": "server-device-test",
"file": "src/app/server-device-test/page.tsx",
"componentOrFn": "ServerDeviceTestPage",
"kind": "text",
"keyOrLocator": "div",
"text": "3. 服务端API调用",
"line": 114,
"count": 3,
"notes": "",
"corrected_text": "3. API calls at the server level",
"actualLine": 114,
"replacementType": "jsx-text"
},
{
"route": "server-device-test",
"file": "src/app/server-device-test/page.tsx",
"componentOrFn": "ServerDeviceTestPage",
"kind": "text",
"keyOrLocator": "div",
"text": "• 所有服务端API请求都会尝试携带设备ID",
"line": 116,
"count": 3,
"notes": "",
"corrected_text": "All server level API requests attempt to carry the device ID",
"actualLine": 116,
"replacementType": "jsx-text"
},
{
"route": "server-device-test",
"file": "src/app/server-device-test/page.tsx",
"componentOrFn": "ServerDeviceTestPage",
"kind": "text",
"keyOrLocator": "div",
"text": "• 通过 AUTH_DID 请求头发送",
"line": 117,
"count": 3,
"notes": "",
"corrected_text": "• Send via AUTH_DID request header",
"actualLine": 117,
"replacementType": "jsx-text"
},
{
"route": "server-device-test",
"file": "src/app/server-device-test/page.tsx",
"componentOrFn": "ServerDeviceTestPage",
"kind": "text",
"keyOrLocator": "div",
"text": "• 支持服务端渲染的预请求功能",
"line": 118,
"count": 3,
"notes": "",
"corrected_text": "• Pre-request function that supports server-side rendering",
"actualLine": 118,
"replacementType": "jsx-text"
},
{
"route": "server-device-test",
"file": "src/app/server-device-test/page.tsx",
"componentOrFn": "ServerDeviceTestPage",
"kind": "text",
"keyOrLocator": "div",
"text": "4. 限制说明",
"line": 123,
"count": 3,
"notes": "",
"corrected_text": "4. Restrictions",
"actualLine": 123,
"replacementType": "jsx-text"
},
{
"route": "server-device-test",
"file": "src/app/server-device-test/page.tsx",
"componentOrFn": "ServerDeviceTestPage",
"kind": "text",
"keyOrLocator": "div",
"text": "• App Router 中只能在中间件或 Route Handler 中修改 cookies",
"line": 125,
"count": 3,
"notes": "",
"corrected_text": "• App Router can only modify cookies in middleware or Route Handler",
"actualLine": 125,
"replacementType": "jsx-text"
},
{
"route": "server-device-test",
"file": "src/app/server-device-test/page.tsx",
"componentOrFn": "ServerDeviceTestPage",
"kind": "text",
"keyOrLocator": "div",
"text": "• 服务端组件只能读取cookies不能修改",
"line": 126,
"count": 3,
"notes": "",
"corrected_text": "• Server level components can only read cookies and cannot be modified",
"actualLine": 126,
"replacementType": "jsx-text"
},
{
"route": "server-device-test",
"file": "src/app/server-device-test/page.tsx",
"componentOrFn": "ServerDeviceTestPage",
"kind": "text",
"keyOrLocator": "div",
"text": "• 首次访问时设备ID可能在后续请求中才可用",
"line": 127,
"count": 3,
"notes": "",
"corrected_text": "The device ID may not be available on subsequent requests until the first visit",
"actualLine": 127,
"replacementType": "jsx-text"
},
{
"route": "server-device-test",
"file": "src/app/server-device-test/page.tsx",
"componentOrFn": "ServerDeviceTestPage",
"kind": "text",
"keyOrLocator": "div",
"text": "• 这是 Next.js 13+ 的架构限制",
"line": 128,
"count": 3,
"notes": "",
"corrected_text": "This is an architectural limitation of Next.js 13 +",
"actualLine": 128,
"replacementType": "jsx-text"
},
{
"route": "test-avatar-crop",
"file": "src/app/test-avatar-crop/page.tsx",
"componentOrFn": "TestAvatarCropPage",
"kind": "text",
"keyOrLocator": "div",
"text": "头像裁剪组件测试",
"line": 68,
"count": 3,
"notes": "",
"corrected_text": "Avatar Crop Component Test",
"actualLine": 68,
"replacementType": "jsx-text"
},
{
"route": "test-avatar-crop",
"file": "src/app/test-avatar-crop/page.tsx",
"componentOrFn": "TestAvatarCropPage",
"kind": "text",
"keyOrLocator": "div",
"text": "基于设计稿还原的头像裁剪弹窗",
"line": 71,
"count": 3,
"notes": "",
"corrected_text": "Avatar clipping pop-up window based on design draft restoration",
"actualLine": 71,
"replacementType": "jsx-text"
},
{
"route": "test-avatar-crop",
"file": "src/app/test-avatar-crop/page.tsx",
"componentOrFn": "TestAvatarCropPage",
"kind": "text",
"keyOrLocator": "div",
"text": "重置",
"line": 94,
"count": 3,
"notes": "",
"corrected_text": "reset",
"actualLine": 94,
"replacementType": "jsx-text"
},
{
"route": "test-avatar-crop",
"file": "src/app/test-avatar-crop/page.tsx",
"componentOrFn": "TestAvatarCropPage",
"kind": "text",
"keyOrLocator": "div",
"text": "已选择:",
"line": 99,
"count": 3,
"notes": "",
"corrected_text": "Selected:",
"actualLine": 99,
"replacementType": "jsx-text"
},
{
"route": "test-avatar-crop",
"file": "src/app/test-avatar-crop/page.tsx",
"componentOrFn": "TestAvatarCropPage",
"kind": "text",
"keyOrLocator": "div",
"text": "裁剪头像",
"line": 108,
"count": 2,
"notes": "",
"corrected_text": "crop avatar",
"actualLine": 108,
"replacementType": "jsx-text"
},
{
"route": "test-avatar-crop",
"file": "src/app/test-avatar-crop/page.tsx",
"componentOrFn": "TestAvatarCropPage",
"kind": "text",
"keyOrLocator": "div",
"text": "打开头像裁剪器",
"line": 115,
"count": 3,
"notes": "",
"corrected_text": "Open avatar clipper",
"actualLine": 115,
"replacementType": "jsx-text"
},
{
"route": "test-avatar-crop",
"file": "src/app/test-avatar-crop/page.tsx",
"componentOrFn": "TestAvatarCropPage",
"kind": "text",
"keyOrLocator": "div",
"text": "点击按钮打开裁剪弹窗,调整图片位置和大小",
"line": 118,
"count": 4,
"notes": "",
"corrected_text": "Click the button to open the cropping pop-up window and adjust the position and size of the picture.",
"actualLine": 118,
"replacementType": "jsx-text"
},
{
"route": "test-avatar-crop",
"file": "src/app/test-avatar-crop/page.tsx",
"componentOrFn": "TestAvatarCropPage",
"kind": "text",
"keyOrLocator": "div",
"text": "原图",
"line": 129,
"count": 3,
"notes": "",
"corrected_text": "original image",
"actualLine": 129,
"replacementType": "jsx-text"
},
{
"route": "test-avatar-crop",
"file": "src/app/test-avatar-crop/page.tsx",
"componentOrFn": "TestAvatarCropPage",
"kind": "text",
"keyOrLocator": "div",
"text": "裁剪后的头像",
"line": 144,
"count": 3,
"notes": "",
"corrected_text": "Cropped avatar",
"actualLine": 144,
"replacementType": "jsx-text"
},
{
"route": "test-avatar-crop",
"file": "src/app/test-avatar-crop/page.tsx",
"componentOrFn": "TestAvatarCropPage",
"kind": "text",
"keyOrLocator": "div",
"text": "下载头像",
"line": 160,
"count": 5,
"notes": "",
"corrected_text": "Download avatar",
"actualLine": 160,
"replacementType": "jsx-text"
},
{
"route": "test-avatar-crop",
"file": "src/app/test-avatar-crop/page.tsx",
"componentOrFn": "TestAvatarCropPage",
"kind": "text",
"keyOrLocator": "div",
"text": "功能说明",
"line": 170,
"count": 2,
"notes": "",
"corrected_text": "Function Description",
"actualLine": 170,
"replacementType": "jsx-text"
},
{
"route": "test-avatar-crop",
"file": "src/app/test-avatar-crop/page.tsx",
"componentOrFn": "TestAvatarCropPage",
"kind": "text",
"keyOrLocator": "div",
"text": "• 支持拖拽调整图片位置",
"line": 172,
"count": 4,
"notes": "",
"corrected_text": "• Support drag and drop to adjust the position of the picture",
"actualLine": 172,
"replacementType": "jsx-text"
},
{
"route": "test-avatar-crop",
"file": "src/app/test-avatar-crop/page.tsx",
"componentOrFn": "TestAvatarCropPage",
"kind": "text",
"keyOrLocator": "div",
"text": "• 使用滑块或 +/- 按钮调整缩放",
"line": 173,
"count": 4,
"notes": "",
"corrected_text": "• Use sliders or +/- buttons to adjust zoom",
"actualLine": 173,
"replacementType": "jsx-text"
},
{
"route": "test-avatar-crop",
"file": "src/app/test-avatar-crop/page.tsx",
"componentOrFn": "TestAvatarCropPage",
"kind": "text",
"keyOrLocator": "div",
"text": "• 自动生成圆形头像",
"line": 174,
"count": 4,
"notes": "",
"corrected_text": "• Automatically generate round avatars",
"actualLine": 174,
"replacementType": "jsx-text"
},
{
"route": "test-avatar-crop",
"file": "src/app/test-avatar-crop/page.tsx",
"componentOrFn": "TestAvatarCropPage",
"kind": "text",
"keyOrLocator": "div",
"text": "• 点击背景或 X 按钮关闭弹窗",
"line": 175,
"count": 4,
"notes": "",
"corrected_text": "• Click the background or X button to close the pop-up window",
"actualLine": 175,
"replacementType": "jsx-text"
},
{
"route": "test-avatar-crop",
"file": "src/app/test-avatar-crop/page.tsx",
"componentOrFn": "TestAvatarCropPage",
"kind": "text",
"keyOrLocator": "div",
"text": "• Cancel 取消操作Confirm 确认裁剪",
"line": 176,
"count": 4,
"notes": "",
"corrected_text": "• Cancel Cancel operation, Confirm crop",
"actualLine": 176,
"replacementType": "jsx-text"
},
{
"route": "test-avatar-crop",
"file": "src/app/test-avatar-crop/page.tsx",
"componentOrFn": "TestAvatarCropPage",
"kind": "text",
"keyOrLocator": "div",
"text": "设计还原",
"line": 182,
"count": 2,
"notes": "",
"corrected_text": "Design Restore",
"actualLine": 182,
"replacementType": "jsx-text"
},
{
"route": "test-avatar-crop",
"file": "src/app/test-avatar-crop/page.tsx",
"componentOrFn": "TestAvatarCropPage",
"kind": "text",
"keyOrLocator": "div",
"text": "✅ 已实现的设计元素",
"line": 185,
"count": 4,
"notes": "",
"corrected_text": "✅ Implemented design elements",
"actualLine": 185,
"replacementType": "jsx-text"
},
{
"route": "test-avatar-crop",
"file": "src/app/test-avatar-crop/page.tsx",
"componentOrFn": "TestAvatarCropPage",
"kind": "text",
"keyOrLocator": "div",
"text": "• 深色半透明背景遮罩",
"line": 187,
"count": 6,
"notes": "",
"corrected_text": "• Dark translucent background mask",
"actualLine": 187,
"replacementType": "jsx-text"
},
{
"route": "test-avatar-crop",
"file": "src/app/test-avatar-crop/page.tsx",
"componentOrFn": "TestAvatarCropPage",
"kind": "text",
"keyOrLocator": "div",
"text": "• 圆形裁剪区域高亮显示",
"line": 188,
"count": 6,
"notes": "",
"corrected_text": "• Highlight the circular cropping area",
"actualLine": 188,
"replacementType": "jsx-text"
},
{
"route": "test-avatar-crop",
"file": "src/app/test-avatar-crop/page.tsx",
"componentOrFn": "TestAvatarCropPage",
"kind": "text",
"keyOrLocator": "div",
"text": "• 底部缩放控制滑块",
"line": 189,
"count": 6,
"notes": "",
"corrected_text": "• Bottom zoom control slider",
"actualLine": 189,
"replacementType": "jsx-text"
},
{
"route": "test-avatar-crop",
"file": "src/app/test-avatar-crop/page.tsx",
"componentOrFn": "TestAvatarCropPage",
"kind": "text",
"keyOrLocator": "div",
"text": "• +/- 缩放按钮",
"line": 190,
"count": 6,
"notes": "",
"corrected_text": "• +/- zoom button",
"actualLine": 190,
"replacementType": "jsx-text"
},
{
"route": "test-avatar-crop",
"file": "src/app/test-avatar-crop/page.tsx",
"componentOrFn": "TestAvatarCropPage",
"kind": "text",
"keyOrLocator": "div",
"text": "• 左上角关闭按钮",
"line": 192,
"count": 6,
"notes": "",
"corrected_text": "• Close button in the upper left corner",
"actualLine": 192,
"replacementType": "jsx-text"
},
{
"route": "test-avatar-crop",
"file": "src/app/test-avatar-crop/page.tsx",
"componentOrFn": "TestAvatarCropPage",
"kind": "text",
"keyOrLocator": "div",
"text": "• 渐变色 Confirm 按钮",
"line": 193,
"count": 6,
"notes": "",
"corrected_text": "• Confirm button for gradual color change",
"actualLine": 193,
"replacementType": "jsx-text"
},
{
"route": "test-avatar-crop",
"file": "src/app/test-avatar-crop/page.tsx",
"componentOrFn": "TestAvatarCropPage",
"kind": "text",
"keyOrLocator": "div",
"text": "• 按钮采用毛玻璃效果",
"line": 199,
"count": 6,
"notes": "",
"corrected_text": "• The button adopts frosted glass effect",
"actualLine": 199,
"replacementType": "jsx-text"
},
{
"route": "test-avatar-crop",
"file": "src/app/test-avatar-crop/page.tsx",
"componentOrFn": "TestAvatarCropPage",
"kind": "text",
"keyOrLocator": "div",
"text": "• 滑块使用白色圆形按钮",
"line": 200,
"count": 6,
"notes": "",
"corrected_text": "• Slider uses white round buttons",
"actualLine": 200,
"replacementType": "jsx-text"
},
{
"route": "test-avatar-crop",
"file": "src/app/test-avatar-crop/page.tsx",
"componentOrFn": "TestAvatarCropPage",
"kind": "text",
"keyOrLocator": "div",
"text": "• 完全覆盖屏幕的全屏弹窗",
"line": 201,
"count": 6,
"notes": "",
"corrected_text": "• A full-screen pop-up window that completely covers the screen",
"actualLine": 201,
"replacementType": "jsx-text"
},
{
"route": "test-avatar-crop",
"file": "src/app/test-avatar-crop/page.tsx",
"componentOrFn": "TestAvatarCropPage",
"kind": "text",
"keyOrLocator": "div",
"text": "• 响应式布局适配移动端",
"line": 202,
"count": 6,
"notes": "",
"corrected_text": "• Responsive layout for mobile end",
"actualLine": 202,
"replacementType": "jsx-text"
},
{
"route": "test-avatar-crop",
"file": "src/app/test-avatar-crop/page.tsx",
"componentOrFn": "TestAvatarCropPage",
"kind": "text",
"keyOrLocator": "div",
"text": "• 平滑的交互动画效果",
"line": 203,
"count": 6,
"notes": "",
"corrected_text": "• Smooth interactive animation effects",
"actualLine": 203,
"replacementType": "jsx-text"
},
{
"route": "test-avatar-crop",
"file": "src/app/test-avatar-crop/page.tsx",
"componentOrFn": "TestAvatarCropPage",
"kind": "alt",
"keyOrLocator": "Image.alt",
"text": "原图",
"line": 133,
"count": 1,
"notes": "",
"corrected_text": "original image",
"actualLine": 133,
"replacementType": "jsx-attribute"
},
{
"route": "test-avatar-crop",
"file": "src/app/test-avatar-crop/page.tsx",
"componentOrFn": "TestAvatarCropPage",
"kind": "alt",
"keyOrLocator": "Image.alt",
"text": "裁剪后的头像",
"line": 149,
"count": 1,
"notes": "",
"corrected_text": "Cropped avatar",
"actualLine": 149,
"replacementType": "jsx-attribute"
},
{
"route": "test-avatar-setting",
"file": "src/app/test-avatar-setting/page.tsx",
"componentOrFn": "TestAvatarSettingPage",
"kind": "text",
"keyOrLocator": "div",
"text": "头像设置测试",
"line": 33,
"count": 2,
"notes": "",
"corrected_text": "avatar setup test",
"actualLine": 33,
"replacementType": "jsx-text"
},
{
"route": "test-avatar-setting",
"file": "src/app/test-avatar-setting/page.tsx",
"componentOrFn": "TestAvatarSettingPage",
"kind": "text",
"keyOrLocator": "div",
"text": "打开头像设置",
"line": 55,
"count": 1,
"notes": "",
"corrected_text": "Open avatar settings",
"actualLine": 55,
"replacementType": "jsx-text"
},
{
"route": "test-discord",
"file": "src/app/test-discord/page.tsx",
"componentOrFn": "TestDiscordPage",
"kind": "toast",
"keyOrLocator": "toast.error",
"text": "Discord登录失败",
"line": 38,
"count": 1,
"notes": "",
"corrected_text": "Discord login failed",
"actualLine": 38,
"replacementType": "function-arg"
},
{
"route": "test-discord",
"file": "src/app/test-discord/page.tsx",
"componentOrFn": "TestDiscordPage",
"kind": "toast",
"keyOrLocator": "toast.error",
"text": "Mock登录失败",
"line": 83,
"count": 1,
"notes": "",
"corrected_text": "Mock login failed",
"actualLine": 83,
"replacementType": "function-arg"
},
{
"route": "test-discord",
"file": "src/app/test-discord/page.tsx",
"componentOrFn": "TestDiscordPage",
"kind": "toast",
"keyOrLocator": "toast.warning",
"text": "配置缺失",
"line": 109,
"count": 1,
"notes": "",
"corrected_text": "Missing configuration",
"actualLine": 109,
"replacementType": "function-arg"
},
{
"route": "test-discord",
"file": "src/app/test-discord/page.tsx",
"componentOrFn": "TestDiscordPage",
"kind": "toast",
"keyOrLocator": "toast.success",
"text": "登录成功",
"line": 116,
"count": 1,
"notes": "",
"corrected_text": "Login successful",
"actualLine": 116,
"replacementType": "function-arg"
},
{
"route": "test-discord",
"file": "src/app/test-discord/page.tsx",
"componentOrFn": "TestDiscordPage",
"kind": "toast",
"keyOrLocator": "toast.success",
"text": "退出成功",
"line": 126,
"count": 1,
"notes": "",
"corrected_text": "Exit successfully",
"actualLine": 126,
"replacementType": "function-arg"
},
{
"route": "test-discord",
"file": "src/app/test-discord/page.tsx",
"componentOrFn": "TestDiscordPage",
"kind": "text",
"keyOrLocator": "div",
"text": "Discord登录测试页面",
"line": 136,
"count": 2,
"notes": "",
"corrected_text": "Discord login test page",
"actualLine": 136,
"replacementType": "jsx-text"
},
{
"route": "test-discord",
"file": "src/app/test-discord/page.tsx",
"componentOrFn": "TestDiscordPage",
"kind": "text",
"keyOrLocator": "div",
"text": "测试Discord OAuth登录功能和Mock接口",
"line": 137,
"count": 2,
"notes": "",
"corrected_text": "Testing Discord OAuth Login Function and Mock Interface",
"actualLine": 137,
"replacementType": "jsx-text"
},
{
"route": "test-discord",
"file": "src/app/test-discord/page.tsx",
"componentOrFn": "TestDiscordPage",
"kind": "text",
"keyOrLocator": "div",
"text": "用户状态",
"line": 143,
"count": 1,
"notes": "",
"corrected_text": "user status",
"actualLine": 143,
"replacementType": "jsx-text"
},
{
"route": "test-discord",
"file": "src/app/test-discord/page.tsx",
"componentOrFn": "TestDiscordPage",
"kind": "text",
"keyOrLocator": "div",
"text": "加载中...",
"line": 147,
"count": 1,
"notes": "",
"corrected_text": "Loading...",
"actualLine": 147,
"replacementType": "jsx-text"
},
{
"route": "test-discord",
"file": "src/app/test-discord/page.tsx",
"componentOrFn": "TestDiscordPage",
"kind": "text",
"keyOrLocator": "div",
"text": "用户ID:",
"line": 150,
"count": 2,
"notes": "",
"corrected_text": "User ID:",
"actualLine": 150,
"replacementType": "jsx-text"
},
{
"route": "test-discord",
"file": "src/app/test-discord/page.tsx",
"componentOrFn": "TestDiscordPage",
"kind": "text",
"keyOrLocator": "div",
"text": "昵称:",
"line": 151,
"count": 2,
"notes": "",
"corrected_text": "Nickname:",
"actualLine": 151,
"replacementType": "jsx-text"
},
{
"route": "test-discord",
"file": "src/app/test-discord/page.tsx",
"componentOrFn": "TestDiscordPage",
"kind": "text",
"keyOrLocator": "div",
"text": "头像:",
"line": 152,
"count": 2,
"notes": "",
"corrected_text": "Avatar:",
"actualLine": 152,
"replacementType": "jsx-text"
},
{
"route": "test-discord",
"file": "src/app/test-discord/page.tsx",
"componentOrFn": "TestDiscordPage",
"kind": "text",
"keyOrLocator": "div",
"text": "性别:",
"line": 153,
"count": 2,
"notes": "",
"corrected_text": "Gender:",
"actualLine": 153,
"replacementType": "jsx-text"
},
{
"route": "test-discord",
"file": "src/app/test-discord/page.tsx",
"componentOrFn": "TestDiscordPage",
"kind": "text",
"keyOrLocator": "div",
"text": "生日:",
"line": 154,
"count": 2,
"notes": "",
"corrected_text": "Birthday:",
"actualLine": 154,
"replacementType": "jsx-text"
},
{
"route": "test-discord",
"file": "src/app/test-discord/page.tsx",
"componentOrFn": "TestDiscordPage",
"kind": "text",
"keyOrLocator": "div",
"text": "需要完善信息:",
"line": 155,
"count": 2,
"notes": "",
"corrected_text": "Need to improve information:",
"actualLine": 155,
"replacementType": "jsx-text"
},
{
"route": "test-discord",
"file": "src/app/test-discord/page.tsx",
"componentOrFn": "TestDiscordPage",
"kind": "text",
"keyOrLocator": "div",
"text": "未登录",
"line": 158,
"count": 1,
"notes": "",
"corrected_text": "Not logged in",
"actualLine": 158,
"replacementType": "jsx-text"
},
{
"route": "test-discord",
"file": "src/app/test-discord/page.tsx",
"componentOrFn": "TestDiscordPage",
"kind": "text",
"keyOrLocator": "div",
"text": "测试操作",
"line": 166,
"count": 1,
"notes": "",
"corrected_text": "test operation",
"actualLine": 166,
"replacementType": "jsx-text"
},
{
"route": "test-discord",
"file": "src/app/test-discord/page.tsx",
"componentOrFn": "TestDiscordPage",
"kind": "text",
"keyOrLocator": "div",
"text": "操作日志",
"line": 191,
"count": 1,
"notes": "",
"corrected_text": "operation log",
"actualLine": 191,
"replacementType": "jsx-text"
},
{
"route": "test-discord",
"file": "src/app/test-discord/page.tsx",
"componentOrFn": "TestDiscordPage",
"kind": "text",
"keyOrLocator": "div",
"text": "清空日志",
"line": 193,
"count": 1,
"notes": "",
"corrected_text": "clear log",
"actualLine": 193,
"replacementType": "jsx-text"
},
{
"route": "test-discord",
"file": "src/app/test-discord/page.tsx",
"componentOrFn": "TestDiscordPage",
"kind": "text",
"keyOrLocator": "div",
"text": "暂无日志",
"line": 199,
"count": 2,
"notes": "",
"corrected_text": "No log yet",
"actualLine": 199,
"replacementType": "jsx-text"
},
{
"route": "test-discord",
"file": "src/app/test-discord/page.tsx",
"componentOrFn": "TestDiscordPage",
"kind": "text",
"keyOrLocator": "div",
"text": "配置说明",
"line": 216,
"count": 1,
"notes": "",
"corrected_text": "configuration instructions",
"actualLine": 216,
"replacementType": "jsx-text"
},
{
"route": "test-discord",
"file": "src/app/test-discord/page.tsx",
"componentOrFn": "TestDiscordPage",
"kind": "text",
"keyOrLocator": "div",
"text": "新流程说明:",
"line": 221,
"count": 3,
"notes": "",
"corrected_text": "New process description:",
"actualLine": 221,
"replacementType": "jsx-text"
},
{
"route": "test-discord",
"file": "src/app/test-discord/page.tsx",
"componentOrFn": "TestDiscordPage",
"kind": "text",
"keyOrLocator": "div",
"text": "用户点击Discord登录",
"line": 224,
"count": 4,
"notes": "",
"corrected_text": "Users click on Discord to log in",
"actualLine": 224,
"replacementType": "jsx-text"
},
{
"route": "test-discord",
"file": "src/app/test-discord/page.tsx",
"componentOrFn": "TestDiscordPage",
"kind": "text",
"keyOrLocator": "div",
"text": "跳转到Discord授权页面",
"line": 225,
"count": 4,
"notes": "",
"corrected_text": "Go to the Discord license page",
"actualLine": 225,
"replacementType": "jsx-text"
},
{
"route": "test-discord",
"file": "src/app/test-discord/page.tsx",
"componentOrFn": "TestDiscordPage",
"kind": "text",
"keyOrLocator": "div",
"text": "回调路由获取code并重定向到 /login?discord_code=xxx",
"line": 227,
"count": 4,
"notes": "",
"corrected_text": "Callback route gets code and redirects to /login? discord_code = xxx",
"actualLine": 227,
"replacementType": "jsx-text"
},
{
"route": "test-discord",
"file": "src/app/test-discord/page.tsx",
"componentOrFn": "TestDiscordPage",
"kind": "text",
"keyOrLocator": "div",
"text": "前端登录页面检测到code调用后端API完成登录",
"line": 228,
"count": 4,
"notes": "",
"corrected_text": "The front-end login page detects the code, and calls the back-end API to complete the login.",
"actualLine": 228,
"replacementType": "jsx-text"
},
{
"route": "test-discord",
"file": "src/app/test-discord/page.tsx",
"componentOrFn": "TestDiscordPage",
"kind": "text",
"keyOrLocator": "div",
"text": "环境变量配置:",
"line": 233,
"count": 3,
"notes": "",
"corrected_text": "Environment variables:",
"actualLine": 233,
"replacementType": "jsx-text"
},
{
"route": "test-discord",
"file": "src/app/test-discord/page.tsx",
"componentOrFn": "TestDiscordPage",
"kind": "text",
"keyOrLocator": "div",
"text": "http://localhost:3000/api/auth/discord/callback",
"line": 244,
"count": 3,
"notes": "",
"corrected_text": "Http://localhost:3000/api/auth/discord/callback",
"actualLine": 244,
"replacementType": "jsx-text"
},
{
"route": "test-discord",
"file": "src/app/test-discord/page.tsx",
"componentOrFn": "TestDiscordPage",
"kind": "text",
"keyOrLocator": "div",
"text": "API接口:",
"line": 248,
"count": 3,
"notes": "",
"corrected_text": "API interface:",
"actualLine": 248,
"replacementType": "jsx-text"
},
{
"route": "test-image-crop",
"file": "src/app/test-image-crop/page.tsx",
"componentOrFn": "TestImageCropPage",
"kind": "text",
"keyOrLocator": "div",
"text": "图片裁剪组件测试",
"line": 61,
"count": 3,
"notes": "",
"corrected_text": "Image cropping test",
"actualLine": 61,
"replacementType": "jsx-text"
},
{
"route": "test-image-crop",
"file": "src/app/test-image-crop/page.tsx",
"componentOrFn": "TestImageCropPage",
"kind": "text",
"keyOrLocator": "div",
"text": "测试各种图片裁剪功能和预设配置",
"line": 64,
"count": 3,
"notes": "",
"corrected_text": "Test various image cropping features and preset configurations",
"actualLine": 64,
"replacementType": "jsx-text"
},
{
"route": "test-image-crop",
"file": "src/app/test-image-crop/page.tsx",
"componentOrFn": "TestImageCropPage",
"kind": "text",
"keyOrLocator": "div",
"text": "重置",
"line": 87,
"count": 3,
"notes": "",
"corrected_text": "reset",
"actualLine": 87,
"replacementType": "jsx-text"
},
{
"route": "test-image-crop",
"file": "src/app/test-image-crop/page.tsx",
"componentOrFn": "TestImageCropPage",
"kind": "text",
"keyOrLocator": "div",
"text": "已选择:",
"line": 92,
"count": 3,
"notes": "",
"corrected_text": "Selected:",
"actualLine": 92,
"replacementType": "jsx-text"
},
{
"route": "test-image-crop",
"file": "src/app/test-image-crop/page.tsx",
"componentOrFn": "TestImageCropPage",
"kind": "text",
"keyOrLocator": "div",
"text": "选择裁剪预设",
"line": 101,
"count": 2,
"notes": "",
"corrected_text": "Select crop preset",
"actualLine": 101,
"replacementType": "jsx-text"
},
{
"route": "test-image-crop",
"file": "src/app/test-image-crop/page.tsx",
"componentOrFn": "TestImageCropPage",
"kind": "text",
"keyOrLocator": "div",
"text": "裁剪操作",
"line": 123,
"count": 2,
"notes": "",
"corrected_text": "cropping operation",
"actualLine": 123,
"replacementType": "jsx-text"
},
{
"route": "test-image-crop",
"file": "src/app/test-image-crop/page.tsx",
"componentOrFn": "TestImageCropPage",
"kind": "text",
"keyOrLocator": "div",
"text": "打开高级裁剪弹窗",
"line": 129,
"count": 3,
"notes": "",
"corrected_text": "Open the advanced cropping pop-up",
"actualLine": 129,
"replacementType": "jsx-text"
},
{
"route": "test-image-crop",
"file": "src/app/test-image-crop/page.tsx",
"componentOrFn": "TestImageCropPage",
"kind": "text",
"keyOrLocator": "div",
"text": "打开简单裁剪弹窗",
"line": 135,
"count": 3,
"notes": "",
"corrected_text": "Open the simple crop pop-up window",
"actualLine": 135,
"replacementType": "jsx-text"
},
{
"route": "test-image-crop",
"file": "src/app/test-image-crop/page.tsx",
"componentOrFn": "TestImageCropPage",
"kind": "text",
"keyOrLocator": "div",
"text": "内联裁剪器",
"line": 144,
"count": 2,
"notes": "",
"corrected_text": "Internal connection clipper",
"actualLine": 144,
"replacementType": "jsx-text"
},
{
"route": "test-image-crop",
"file": "src/app/test-image-crop/page.tsx",
"componentOrFn": "TestImageCropPage",
"kind": "text",
"keyOrLocator": "div",
"text": "裁剪结果",
"line": 157,
"count": 2,
"notes": "",
"corrected_text": "crop result",
"actualLine": 157,
"replacementType": "jsx-text"
},
{
"route": "test-image-crop",
"file": "src/app/test-image-crop/page.tsx",
"componentOrFn": "TestImageCropPage",
"kind": "text",
"keyOrLocator": "div",
"text": "下载",
"line": 175,
"count": 4,
"notes": "",
"corrected_text": "download",
"actualLine": 175,
"replacementType": "jsx-text"
},
{
"route": "test-image-crop",
"file": "src/app/test-image-crop/page.tsx",
"componentOrFn": "TestImageCropPage",
"kind": "text",
"keyOrLocator": "div",
"text": "原图预览",
"line": 186,
"count": 2,
"notes": "",
"corrected_text": "Original image preview",
"actualLine": 186,
"replacementType": "jsx-text"
},
{
"route": "test-image-crop",
"file": "src/app/test-image-crop/page.tsx",
"componentOrFn": "TestImageCropPage",
"kind": "alt",
"keyOrLocator": "Image.alt",
"text": "原图",
"line": 190,
"count": 1,
"notes": "",
"corrected_text": "original image",
"actualLine": 190,
"replacementType": "jsx-attribute"
},
{
"route": "test-image-crop",
"file": "src/app/test-image-crop/page.tsx",
"componentOrFn": "TestImageCropPage",
"kind": "title",
"keyOrLocator": "ImageCropModal.title",
"text": "高级图片裁剪",
"line": 206,
"count": 1,
"notes": "",
"corrected_text": "Advanced image crop",
"actualLine": 206,
"replacementType": "jsx-attribute"
},
{
"route": "test-image-crop",
"file": "src/app/test-image-crop/page.tsx",
"componentOrFn": "TestImageCropPage",
"kind": "title",
"keyOrLocator": "SimpleImageCropModal.title",
"text": "简单图片裁剪",
"line": 222,
"count": 1,
"notes": "",
"corrected_text": "Simple image cropping",
"actualLine": 222,
"replacementType": "jsx-attribute"
},
{
"route": "test-middleware",
"file": "src/app/test-middleware/page.tsx",
"componentOrFn": "TestMiddlewarePage",
"kind": "text",
"keyOrLocator": "div",
"text": "MSW 状态",
"line": 55,
"count": 2,
"notes": "",
"corrected_text": "MSW status",
"actualLine": 55,
"replacementType": "jsx-text"
},
{
"route": "test-middleware",
"file": "src/app/test-middleware/page.tsx",
"componentOrFn": "TestMiddlewarePage",
"kind": "text",
"keyOrLocator": "div",
"text": "页面信息",
"line": 60,
"count": 2,
"notes": "",
"corrected_text": "page information",
"actualLine": 60,
"replacementType": "jsx-text"
},
{
"route": "test-middleware",
"file": "src/app/test-middleware/page.tsx",
"componentOrFn": "TestMiddlewarePage",
"kind": "text",
"keyOrLocator": "div",
"text": "导航测试",
"line": 65,
"count": 2,
"notes": "",
"corrected_text": "Navigation test",
"actualLine": 65,
"replacementType": "jsx-text"
},
{
"route": "test-middleware",
"file": "src/app/test-middleware/page.tsx",
"componentOrFn": "TestMiddlewarePage",
"kind": "text",
"keyOrLocator": "div",
"text": "直接导航到 /profile",
"line": 71,
"count": 3,
"notes": "",
"corrected_text": "Navigate directly to /profile",
"actualLine": 71,
"replacementType": "jsx-text"
},
{
"route": "test-middleware",
"file": "src/app/test-middleware/page.tsx",
"componentOrFn": "TestMiddlewarePage",
"kind": "text",
"keyOrLocator": "div",
"text": "编程式导航到 /profile",
"line": 77,
"count": 3,
"notes": "",
"corrected_text": "Programmatically navigate to /profile",
"actualLine": 77,
"replacementType": "jsx-text"
},
{
"route": "test-middleware",
"file": "src/app/test-middleware/page.tsx",
"componentOrFn": "TestMiddlewarePage",
"kind": "text",
"keyOrLocator": "div",
"text": "说明",
"line": 83,
"count": 2,
"notes": "",
"corrected_text": "explain",
"actualLine": 83,
"replacementType": "jsx-text"
},
{
"route": "test-middleware",
"file": "src/app/test-middleware/page.tsx",
"componentOrFn": "TestMiddlewarePage",
"kind": "text",
"keyOrLocator": "div",
"text": "如果点击上述按钮导航到 /profile 时没有在控制台看到 middleware 日志, 说明 MSW 或其他因素阻止了 middleware 的执行。",
"line": 85,
"count": 2,
"notes": "",
"corrected_text": "If you click the above button to navigate to /profile and do not see the middleware log in the console, MSW or something else is preventing middleware from executing.",
"actualLine": 85,
"replacementType": "jsx-text"
},
{
"route": "test-s3-upload",
"file": "src/app/test-s3-upload/page.tsx",
"componentOrFn": "TestS3UploadPage",
"kind": "text",
"keyOrLocator": "div",
"text": "AWS S3 上传测试",
"line": 9,
"count": 3,
"notes": "",
"corrected_text": "AWS S3 Upload Test",
"actualLine": 9,
"replacementType": "jsx-text"
},
{
"route": "test-s3-upload",
"file": "src/app/test-s3-upload/page.tsx",
"componentOrFn": "TestS3UploadPage",
"kind": "text",
"keyOrLocator": "div",
"text": "测试使用 AWS S3 SDK 的文件上传功能",
"line": 12,
"count": 3,
"notes": "",
"corrected_text": "Testing the file upload feature using the AWS S3 SDK",
"actualLine": 12,
"replacementType": "jsx-text"
},
{
"route": "test-s3-upload",
"file": "src/app/test-s3-upload/page.tsx",
"componentOrFn": "TestS3UploadPage",
"kind": "text",
"keyOrLocator": "div",
"text": "Hook 使用方法",
"line": 20,
"count": 3,
"notes": "",
"corrected_text": "How to use Hook",
"actualLine": 20,
"replacementType": "jsx-text"
},
{
"route": "shared",
"file": "src/components/layout/Sidebar.tsx",
"componentOrFn": "Sidebar",
"kind": "alt",
"keyOrLocator": "Image.alt",
"text": "fold",
"line": 95,
"count": 1,
"notes": "",
"corrected_text": "Fold",
"actualLine": 98,
"replacementType": "jsx-attribute"
},
{
"route": "shared",
"file": "src/components/layout/Sidebar.tsx",
"componentOrFn": "Sidebar",
"kind": "alt",
"keyOrLocator": "Image.alt",
"text": "expand",
"line": 97,
"count": 1,
"notes": "",
"corrected_text": "Expand",
"actualLine": 100,
"replacementType": "jsx-attribute"
},
{
"route": "shared",
"file": "src/components/layout/TopBarWithoutLogin.tsx",
"componentOrFn": "TopbarWithoutLogin",
"kind": "alt",
"keyOrLocator": "Image.alt",
"text": "logo",
"line": 34,
"count": 2,
"notes": "",
"corrected_text": "Logo",
"actualLine": 34,
"replacementType": "jsx-attribute"
},
{
"route": "shared",
"file": "src/components/features/S3UploadDemo.tsx",
"componentOrFn": "S3UploadDemo",
"kind": "text",
"keyOrLocator": "div",
"text": "S3 文件上传演示",
"line": 65,
"count": 1,
"notes": "",
"corrected_text": "S3 file upload demo",
"actualLine": 65,
"replacementType": "jsx-text"
},
{
"route": "shared",
"file": "src/components/features/S3UploadDemo.tsx",
"componentOrFn": "S3UploadDemo",
"kind": "text",
"keyOrLocator": "div",
"text": "已选择文件:",
"line": 84,
"count": 2,
"notes": "",
"corrected_text": "Selected file:",
"actualLine": 84,
"replacementType": "jsx-text"
},
{
"route": "shared",
"file": "src/components/features/S3UploadDemo.tsx",
"componentOrFn": "S3UploadDemo",
"kind": "text",
"keyOrLocator": "div",
"text": "取消上传",
"line": 106,
"count": 2,
"notes": "",
"corrected_text": "Cancel upload",
"actualLine": 106,
"replacementType": "jsx-text"
},
{
"route": "shared",
"file": "src/components/features/S3UploadDemo.tsx",
"componentOrFn": "S3UploadDemo",
"kind": "text",
"keyOrLocator": "div",
"text": "重置",
"line": 116,
"count": 2,
"notes": "",
"corrected_text": "reset",
"actualLine": 116,
"replacementType": "jsx-text"
},
{
"route": "shared",
"file": "src/components/features/S3UploadDemo.tsx",
"componentOrFn": "S3UploadDemo",
"kind": "text",
"keyOrLocator": "div",
"text": "上传进度:",
"line": 130,
"count": 3,
"notes": "",
"corrected_text": "Upload progress:",
"actualLine": 130,
"replacementType": "jsx-text"
},
{
"route": "shared",
"file": "src/components/features/S3UploadDemo.tsx",
"componentOrFn": "S3UploadDemo",
"kind": "text",
"keyOrLocator": "div",
"text": "重试次数:",
"line": 137,
"count": 3,
"notes": "",
"corrected_text": "Number of retries:",
"actualLine": 137,
"replacementType": "jsx-text"
},
{
"route": "shared",
"file": "src/components/features/S3UploadDemo.tsx",
"componentOrFn": "S3UploadDemo",
"kind": "text",
"keyOrLocator": "div",
"text": "上传错误",
"line": 146,
"count": 3,
"notes": "",
"corrected_text": "Upload error",
"actualLine": 146,
"replacementType": "jsx-text"
},
{
"route": "shared",
"file": "src/components/features/S3UploadDemo.tsx",
"componentOrFn": "S3UploadDemo",
"kind": "text",
"keyOrLocator": "div",
"text": "功能特性:",
"line": 153,
"count": 2,
"notes": "",
"corrected_text": "Functional features:",
"actualLine": 153,
"replacementType": "jsx-text"
},
{
"route": "shared",
"file": "src/components/features/S3UploadDemo.tsx",
"componentOrFn": "S3UploadDemo",
"kind": "text",
"keyOrLocator": "div",
"text": "✅ 真实的 AWS S3 上传(使用 STS token",
"line": 155,
"count": 2,
"notes": "",
"corrected_text": "✅ Real AWS S3 upload (using STS token)",
"actualLine": 155,
"replacementType": "jsx-text"
},
{
"route": "shared",
"file": "src/components/features/S3UploadDemo.tsx",
"componentOrFn": "S3UploadDemo",
"kind": "text",
"keyOrLocator": "div",
"text": "✅ 实时上传进度追踪",
"line": 156,
"count": 2,
"notes": "",
"corrected_text": "✅ real-time upload progress tracking",
"actualLine": 156,
"replacementType": "jsx-text"
},
{
"route": "shared",
"file": "src/components/features/S3UploadDemo.tsx",
"componentOrFn": "S3UploadDemo",
"kind": "text",
"keyOrLocator": "div",
"text": "✅ 自动重试机制最多3次间隔2秒",
"line": 157,
"count": 2,
"notes": "",
"corrected_text": "✅ Automatic retry mechanism (up to 3 times at 2-second intervals)",
"actualLine": 157,
"replacementType": "jsx-text"
},
{
"route": "shared",
"file": "src/components/features/S3UploadDemo.tsx",
"componentOrFn": "S3UploadDemo",
"kind": "text",
"keyOrLocator": "div",
"text": "✅ 支持取消上传",
"line": 158,
"count": 2,
"notes": "",
"corrected_text": "✅ Support cancel upload",
"actualLine": 158,
"replacementType": "jsx-text"
},
{
"route": "shared",
"file": "src/components/features/S3UploadDemo.tsx",
"componentOrFn": "S3UploadDemo",
"kind": "text",
"keyOrLocator": "div",
"text": "✅ 完整的错误处理",
"line": 159,
"count": 2,
"notes": "",
"corrected_text": "✅ Complete error handling",
"actualLine": 159,
"replacementType": "jsx-text"
},
{
"route": "shared",
"file": "src/components/features/S3UploadDemo.tsx",
"componentOrFn": "S3UploadDemo",
"kind": "text",
"keyOrLocator": "div",
"text": "✅ TypeScript 类型支持",
"line": 160,
"count": 2,
"notes": "",
"corrected_text": "✅ TypeScript type support",
"actualLine": 160,
"replacementType": "jsx-text"
},
{
"route": "shared",
"file": "src/components/features/S3UploadDemo.tsx",
"componentOrFn": "S3UploadDemo",
"kind": "text",
"keyOrLocator": "div",
"text": "✅ 唯一文件名生成",
"line": 161,
"count": 2,
"notes": "",
"corrected_text": "✅ unique filename generation",
"actualLine": 161,
"replacementType": "jsx-text"
},
{
"route": "shared",
"file": "src/components/features/S3UploadDemo.tsx",
"componentOrFn": "S3UploadDemo",
"kind": "text",
"keyOrLocator": "div",
"text": "✅ 预签名 URL 安全上传",
"line": 162,
"count": 2,
"notes": "",
"corrected_text": "✅ Presigned URL secure upload",
"actualLine": 162,
"replacementType": "jsx-text"
},
{
"route": "shared",
"file": "src/components/features/abandon-creation-dialog.tsx",
"componentOrFn": "AbandonCreationDialog",
"kind": "text",
"keyOrLocator": "AlertDialog",
"text": "放弃创作",
"line": 40,
"count": 1,
"notes": "",
"corrected_text": "Give up creation",
"actualLine": 40,
"replacementType": "jsx-text"
},
{
"route": "shared",
"file": "src/components/features/abandon-creation-dialog.tsx",
"componentOrFn": "AbandonCreationDialog",
"kind": "text",
"keyOrLocator": "AlertDialog",
"text": "选择退出或重新生图片已经创作的图片将消失同时消耗1次创作次数。",
"line": 43,
"count": 1,
"notes": "",
"corrected_text": "If you choose to exit or regenerate the image, the already created image will disappear, and the number of creations will be consumed once.",
"actualLine": 43,
"replacementType": "jsx-text"
},
{
"route": "shared",
"file": "src/components/features/abandon-creation-dialog.tsx",
"componentOrFn": "AbandonCreationDialog",
"kind": "text",
"keyOrLocator": "AlertDialog",
"text": "取消",
"line": 46,
"count": 1,
"notes": "",
"corrected_text": "cancel",
"actualLine": 46,
"replacementType": "jsx-text"
},
{
"route": "shared",
"file": "src/components/features/album-price-setting.tsx",
"componentOrFn": "AlbumPriceSetting",
"kind": "text",
"keyOrLocator": "AlertDialog",
"text": "对话者通过付费方式解锁角色的图片,可以增加创作者的收入分成",
"line": 115,
"count": 1,
"notes": "",
"corrected_text": "The interlocutor pays to unlock the character's image, which can increase the creator's revenue share",
"actualLine": 151,
"replacementType": "jsx-text"
},
{
"route": "shared",
"file": "src/components/features/album-price-setting.tsx",
"componentOrFn": "AlbumPriceSetting",
"kind": "text",
"keyOrLocator": "AlertDialog",
"text": "Crushlevel平台会从每张图片的销售收入中分成20%作为平台服务费",
"line": 116,
"count": 1,
"notes": "",
"corrected_text": "The Crushlevel platform will take 20% of the sales revenue of each image as a platform service fee.",
"actualLine": 152,
"replacementType": "jsx-text"
},
{
"route": "shared",
"file": "src/components/features/album-price-setting.tsx",
"componentOrFn": "AlbumPriceSetting",
"kind": "text",
"keyOrLocator": "AlertDialog",
"text": "设置若干免费图片,可以吸引对话者与你的虚拟角色互动",
"line": 117,
"count": 1,
"notes": "",
"corrected_text": "Set up several free images to attract interlocutors to interact with your avatar",
"actualLine": 153,
"replacementType": "jsx-text"
},
{
"route": "shared",
"file": "src/components/features/album-price-setting.tsx",
"componentOrFn": "AlbumPriceSetting",
"kind": "alt",
"keyOrLocator": "Image.alt",
"text": "diamond",
"line": 180,
"count": 3,
"notes": "",
"corrected_text": "Diamond",
"actualLine": 216,
"replacementType": "jsx-attribute"
},
{
"route": "shared",
"file": "src/components/features/charge-drawer.tsx",
"componentOrFn": "handlePayment",
"kind": "toast",
"keyOrLocator": "toast.error",
"text": "支付失败,请重试",
"line": 97,
"count": 1,
"notes": "",
"corrected_text": "Payment failure, please try again",
"actualLine": 97,
"replacementType": "function-arg"
},
{
"route": "shared",
"file": "src/components/features/coin-insufficient-dialog.tsx",
"componentOrFn": "QuestionIcon",
"kind": "text",
"keyOrLocator": "Tooltip",
"text": "文本消息价格是指与角色进行文本消息对话的价格,含发送语音,含发送图片,发送礼物。",
"line": 36,
"count": 1,
"notes": "",
"corrected_text": "The text message price refers to the price of a text message conversation with a character, including sending voice, sending pictures, and sending gifts.",
"actualLine": 36,
"replacementType": "jsx-text"
},
{
"route": "shared",
"file": "src/components/features/coin-insufficient-dialog.tsx",
"componentOrFn": "QuestionIcon",
"kind": "text",
"keyOrLocator": "Tooltip",
"text": "语音通话消息价格是指与角色进行语音电话对话的价格,按条计算",
"line": 37,
"count": 1,
"notes": "",
"corrected_text": "Voice call message price refers to the price of a voice call conversation with the character, calculated by item",
"actualLine": 37,
"replacementType": "jsx-text"
},
{
"route": "shared",
"file": "src/components/features/device-info.tsx",
"componentOrFn": "DeviceInfo",
"kind": "text",
"keyOrLocator": "Card",
"text": "设备ID (sd)",
"line": 45,
"count": 1,
"notes": "",
"corrected_text": "Device ID (sd)",
"actualLine": 45,
"replacementType": "jsx-text"
},
{
"route": "shared",
"file": "src/components/features/device-info.tsx",
"componentOrFn": "DeviceInfo",
"kind": "text",
"keyOrLocator": "Card",
"text": "存储在cookie中字段名为'sd',在请求头中作为'AUTH_DID'发送",
"line": 50,
"count": 1,
"notes": "",
"corrected_text": "Stored in a cookie, field named'sd ', sent as AUTH_DID' in the request header",
"actualLine": 50,
"replacementType": "jsx-text"
},
{
"route": "shared",
"file": "src/components/features/device-info.tsx",
"componentOrFn": "DeviceInfo",
"kind": "text",
"keyOrLocator": "Card",
"text": "认证令牌 (st)",
"line": 55,
"count": 1,
"notes": "",
"corrected_text": "Authentication token (st)",
"actualLine": 55,
"replacementType": "jsx-text"
},
{
"route": "shared",
"file": "src/components/features/device-info.tsx",
"componentOrFn": "DeviceInfo",
"kind": "text",
"keyOrLocator": "Card",
"text": "存储在cookie中字段名为'st',在请求头中作为'AUTH_TK'发送",
"line": 60,
"count": 1,
"notes": "",
"corrected_text": "Stored in a cookie, field named'st ', sent as AUTH_TK in the request header",
"actualLine": 60,
"replacementType": "jsx-text"
},
{
"route": "shared",
"file": "src/components/features/device-info.tsx",
"componentOrFn": "DeviceInfo",
"kind": "text",
"keyOrLocator": "Card",
"text": "刷新设备ID",
"line": 70,
"count": 1,
"notes": "",
"corrected_text": "Refresh device ID",
"actualLine": 70,
"replacementType": "jsx-text"
},
{
"route": "shared",
"file": "src/components/features/device-info.tsx",
"componentOrFn": "DeviceInfo",
"kind": "text",
"keyOrLocator": "Card",
"text": "清除所有数据",
"line": 77,
"count": 1,
"notes": "",
"corrected_text": "Clear all data",
"actualLine": 77,
"replacementType": "jsx-text"
},
{
"route": "shared",
"file": "src/components/features/device-info.tsx",
"componentOrFn": "DeviceInfo",
"kind": "text",
"keyOrLocator": "Card",
"text": "• 用户第一次访问时自动生成",
"line": 84,
"count": 1,
"notes": "",
"corrected_text": "Automatically generated when a user visits for the first time",
"actualLine": 84,
"replacementType": "jsx-text"
},
{
"route": "shared",
"file": "src/components/features/device-info.tsx",
"componentOrFn": "DeviceInfo",
"kind": "text",
"keyOrLocator": "Card",
"text": "• 包含时间戳、随机字符串和浏览器信息",
"line": 85,
"count": 1,
"notes": "",
"corrected_text": "• Contains timestamp, random string and browser information",
"actualLine": 85,
"replacementType": "jsx-text"
},
{
"route": "shared",
"file": "src/components/features/device-info.tsx",
"componentOrFn": "DeviceInfo",
"kind": "text",
"keyOrLocator": "Card",
"text": "• 存储在cookie中有效期365天",
"line": 86,
"count": 1,
"notes": "",
"corrected_text": "Store in a cookie with a valid period of 365 days",
"actualLine": 86,
"replacementType": "jsx-text"
},
{
"route": "shared",
"file": "src/components/features/device-info.tsx",
"componentOrFn": "DeviceInfo",
"kind": "text",
"keyOrLocator": "Card",
"text": "• 用于设备识别和安全验证",
"line": 87,
"count": 1,
"notes": "",
"corrected_text": "• For device identification and security verification",
"actualLine": 87,
"replacementType": "jsx-text"
},
{
"route": "shared",
"file": "src/components/features/device-info.tsx",
"componentOrFn": "DeviceInfo",
"kind": "text",
"keyOrLocator": "Card",
"text": "• 退出登录时不会被清除只有clearAll才会清除",
"line": 88,
"count": 1,
"notes": "",
"corrected_text": "• Will not be cleared when logging out (only clearAll will be cleared)",
"actualLine": 88,
"replacementType": "jsx-text"
},
{
"route": "shared",
"file": "src/components/ui/empty.tsx",
"componentOrFn": "Empty",
"kind": "alt",
"keyOrLocator": "Image.alt",
"text": "empty",
"line": 10,
"count": 1,
"notes": "",
"corrected_text": "Empty",
"actualLine": 10,
"replacementType": "jsx-attribute"
},
{
"route": "shared",
"file": "src/components/ui/image-crop.tsx",
"componentOrFn": "ImageCrop",
"kind": "text",
"keyOrLocator": "div",
"text": "正在加载图片...",
"line": 206,
"count": 2,
"notes": "",
"corrected_text": "Loading pictures...",
"actualLine": 206,
"replacementType": "jsx-text"
},
{
"route": "shared",
"file": "src/components/ui/image-crop.tsx",
"componentOrFn": "ImageCrop",
"kind": "text",
"keyOrLocator": "div",
"text": "缩放:",
"line": 256,
"count": 3,
"notes": "",
"corrected_text": "Zoom:",
"actualLine": 256,
"replacementType": "jsx-text"
},
{
"route": "shared",
"file": "src/components/ui/image-crop.tsx",
"componentOrFn": "ImageCrop",
"kind": "text",
"keyOrLocator": "div",
"text": "旋转:",
"line": 288,
"count": 3,
"notes": "",
"corrected_text": "Rotate:",
"actualLine": 288,
"replacementType": "jsx-text"
},
{
"route": "shared",
"file": "src/components/ui/select.tsx",
"componentOrFn": "SelectItem",
"kind": "alt",
"keyOrLocator": "Image.alt",
"text": "check",
"line": 157,
"count": 1,
"notes": "",
"corrected_text": "Check",
"actualLine": 157,
"replacementType": "jsx-attribute"
},
{
"route": "(main)/contact",
"file": "src/app/(main)/contact/contact-page.tsx",
"componentOrFn": "ContactCard",
"kind": "alt",
"keyOrLocator": "img.alt",
"text": "heart",
"line": 80,
"count": 1,
"notes": "",
"corrected_text": "Heart",
"actualLine": 80,
"replacementType": "jsx-attribute"
},
{
"route": "(main)/contact",
"file": "src/app/(main)/contact/contact-page.tsx",
"componentOrFn": "EmptyState",
"kind": "alt",
"keyOrLocator": "img.alt",
"text": "empty",
"line": 149,
"count": 1,
"notes": "",
"corrected_text": "Empty",
"actualLine": 149,
"replacementType": "jsx-attribute"
},
{
"route": "(main)/crushcoin",
"file": "src/app/(main)/crushcoin/crushcoin-page.tsx",
"componentOrFn": "CrushCoinPage",
"kind": "text",
"keyOrLocator": "div",
"text": "consecutive days",
"line": 20,
"count": 3,
"notes": "",
"corrected_text": "Consecutive days",
"actualLine": 20,
"replacementType": "jsx-text"
},
{
"route": "(auth)/about",
"file": "src/app/(auth)/about/page.tsx",
"componentOrFn": "AboutPage",
"kind": "alt",
"keyOrLocator": "img.alt",
"text": "banner",
"line": 12,
"count": 1,
"notes": "",
"corrected_text": "Banner",
"actualLine": 12,
"replacementType": "jsx-attribute"
},
{
"route": "(main)/explore",
"file": "src/app/(main)/explore/page.tsx",
"componentOrFn": "ExplorePage",
"kind": "text",
"keyOrLocator": "div",
"text": "第三期功能正在打磨中, *&*……*……%……%……&%&……%&%……&%&……。",
"line": 9,
"count": 2,
"notes": "",
"corrected_text": "The third phase function is being polished, * & *... *...%...%... &% &...% &%... &% &...",
"actualLine": 9,
"replacementType": "jsx-text"
},
{
"route": "(main)/explore",
"file": "src/app/(main)/explore/page.tsx",
"componentOrFn": "ExplorePage",
"kind": "alt",
"keyOrLocator": "Image.alt",
"text": "logo",
"line": 7,
"count": 1,
"notes": "",
"corrected_text": "Logo",
"actualLine": 7,
"replacementType": "jsx-attribute"
},
{
"route": "(main)/leaderboard",
"file": "src/app/(main)/leaderboard/leaderboard-page.tsx",
"componentOrFn": "LeaderboardPage",
"kind": "text",
"keyOrLocator": "div",
"text": "热聊榜以AI聊天会话数高低排名。",
"line": 76,
"count": 2,
"notes": "",
"corrected_text": "The hot chat list is ranked by the number of AI chat sessions.",
"actualLine": 76,
"replacementType": "jsx-text"
},
{
"route": "(main)/leaderboard",
"file": "src/app/(main)/leaderboard/leaderboard-page.tsx",
"componentOrFn": "LeaderboardPage",
"kind": "text",
"keyOrLocator": "div",
"text": "心动榜以AI角色所有对话者产生的心动值之和的高低排名。",
"line": 77,
"count": 2,
"notes": "",
"corrected_text": "The heart list is ranked by the sum of the heart values generated by all the interlocutors of the AI character.",
"actualLine": 77,
"replacementType": "jsx-text"
},
{
"route": "(main)/leaderboard",
"file": "src/app/(main)/leaderboard/leaderboard-page.tsx",
"componentOrFn": "LeaderboardPage",
"kind": "text",
"keyOrLocator": "div",
"text": "礼物榜以AI角色所收到礼物打赏价值之和排名。",
"line": 78,
"count": 2,
"notes": "",
"corrected_text": "The gift list is ranked by the sum of the gift value received by the AI character.",
"actualLine": 78,
"replacementType": "jsx-text"
},
{
"route": "(main)/leaderboard",
"file": "src/app/(main)/leaderboard/leaderboard-page.tsx",
"componentOrFn": "LeaderboardPage",
"kind": "alt",
"keyOrLocator": "Image.alt",
"text": "bg",
"line": 60,
"count": 1,
"notes": "",
"corrected_text": "Bg",
"actualLine": 60,
"replacementType": "jsx-attribute"
},
{
"route": "(main)/profile",
"file": "src/app/(main)/profile/profile-page.tsx",
"componentOrFn": "ProfilePage",
"kind": "alt",
"keyOrLocator": "Image.alt",
"text": "gender",
"line": 59,
"count": 1,
"notes": "",
"corrected_text": "Gender",
"actualLine": 59,
"replacementType": "jsx-attribute"
},
{
"route": "(main)/test-voice-wave",
"file": "src/app/(main)/test-voice-wave/page.tsx",
"componentOrFn": "TestVoiceWavePage",
"kind": "text",
"keyOrLocator": "div",
"text": "语音波纹动画效果展示",
"line": 31,
"count": 2,
"notes": "",
"corrected_text": "Voice ripple animation effect display",
"actualLine": 31,
"replacementType": "jsx-text"
},
{
"route": "(main)/test-voice-wave",
"file": "src/app/(main)/test-voice-wave/page.tsx",
"componentOrFn": "TestVoiceWavePage",
"kind": "text",
"keyOrLocator": "div",
"text": "技术实现说明",
"line": 35,
"count": 3,
"notes": "",
"corrected_text": "Technology implementation note",
"actualLine": 35,
"replacementType": "jsx-text"
},
{
"route": "(main)/test-voice-wave",
"file": "src/app/(main)/test-voice-wave/page.tsx",
"componentOrFn": "TestVoiceWavePage",
"kind": "text",
"keyOrLocator": "div",
"text": "✅ 使用纯CSS实现",
"line": 37,
"count": 4,
"notes": "",
"corrected_text": "✅ Implemented using pure CSS:",
"actualLine": 37,
"replacementType": "jsx-text"
},
{
"route": "(main)/test-voice-wave",
"file": "src/app/(main)/test-voice-wave/page.tsx",
"componentOrFn": "TestVoiceWavePage",
"kind": "text",
"keyOrLocator": "div",
"text": "性能优秀GPU加速文件体积小",
"line": 37,
"count": 4,
"notes": "",
"corrected_text": "Excellent performance, GPU acceleration, small file size",
"actualLine": 37,
"replacementType": "jsx-text"
},
{
"route": "(main)/test-voice-wave",
"file": "src/app/(main)/test-voice-wave/page.tsx",
"componentOrFn": "TestVoiceWavePage",
"kind": "text",
"keyOrLocator": "div",
"text": "从左到右整体渐变(灰色→白色→灰色)",
"line": 38,
"count": 4,
"notes": "",
"corrected_text": "Overall gradual change from left to right (gray → white → gray)",
"actualLine": 38,
"replacementType": "jsx-text"
},
{
"route": "(main)/test-voice-wave",
"file": "src/app/(main)/test-voice-wave/page.tsx",
"componentOrFn": "TestVoiceWavePage",
"kind": "text",
"keyOrLocator": "div",
"text": "声波从中心向两边扩散,模拟真实音频传播",
"line": 39,
"count": 4,
"notes": "",
"corrected_text": "Sound waves spread from the center to both sides, simulating real audio transmission",
"actualLine": 39,
"replacementType": "jsx-text"
},
{
"route": "(main)/test-voice-wave",
"file": "src/app/(main)/test-voice-wave/page.tsx",
"componentOrFn": "TestVoiceWavePage",
"kind": "text",
"keyOrLocator": "div",
"text": "⏸️ 停止状态:",
"line": 40,
"count": 4,
"notes": "",
"corrected_text": "⏸️ Stop state:",
"actualLine": 40,
"replacementType": "jsx-text"
},
{
"route": "(main)/test-voice-wave",
"file": "src/app/(main)/test-voice-wave/page.tsx",
"componentOrFn": "TestVoiceWavePage",
"kind": "text",
"keyOrLocator": "div",
"text": "动画开始/停止时使用CSS transition平滑过渡",
"line": 41,
"count": 4,
"notes": "",
"corrected_text": "Use CSS transitions to smooth transitions when animation starts/stops",
"actualLine": 41,
"replacementType": "jsx-text"
},
{
"route": "(main)/test-voice-wave",
"file": "src/app/(main)/test-voice-wave/page.tsx",
"componentOrFn": "TestVoiceWavePage",
"kind": "text",
"keyOrLocator": "div",
"text": "语音波纹效果(灰色到白色渐变)",
"line": 61,
"count": 3,
"notes": "",
"corrected_text": "Voice ripple effect (gradual change from gray to white)",
"actualLine": 61,
"replacementType": "jsx-text"
},
{
"route": "(main)/test-voice-wave",
"file": "src/app/(main)/test-voice-wave/page.tsx",
"componentOrFn": "TestVoiceWavePage",
"kind": "text",
"keyOrLocator": "div",
"text": "从左到右:灰色 → 白色 → 灰色的整体渐变效果",
"line": 74,
"count": 5,
"notes": "",
"corrected_text": "From left to right: gray → white → gray overall gradient effect",
"actualLine": 74,
"replacementType": "jsx-text"
},
{
"route": "(main)/test-voice-wave",
"file": "src/app/(main)/test-voice-wave/page.tsx",
"componentOrFn": "TestVoiceWavePage",
"kind": "text",
"keyOrLocator": "div",
"text": "涟漪效果:中心音频更强,向两边逐渐减弱",
"line": 75,
"count": 5,
"notes": "",
"corrected_text": "Ripple effect: center audio is stronger, gradually fading to either side",
"actualLine": 75,
"replacementType": "jsx-text"
},
{
"route": "(main)/test-voice-wave",
"file": "src/app/(main)/test-voice-wave/page.tsx",
"componentOrFn": "TestVoiceWavePage",
"kind": "text",
"keyOrLocator": "div",
"text": "不同声波条数量对比",
"line": 82,
"count": 3,
"notes": "",
"corrected_text": "Comparison of the number of different sonic strips",
"actualLine": 82,
"replacementType": "jsx-text"
},
{
"route": "(main)/test-voice-wave",
"file": "src/app/(main)/test-voice-wave/page.tsx",
"componentOrFn": "TestVoiceWavePage",
"kind": "text",
"keyOrLocator": "div",
"text": "个条)",
"line": 86,
"count": 5,
"notes": "",
"corrected_text": "Article)",
"actualLine": 86,
"replacementType": "jsx-text"
},
{
"route": "(main)/test-voice-wave",
"file": "src/app/(main)/test-voice-wave/page.tsx",
"componentOrFn": "TestVoiceWavePage",
"kind": "text",
"keyOrLocator": "div",
"text": "大尺寸展示效果",
"line": 104,
"count": 3,
"notes": "",
"corrected_text": "Large size display effect",
"actualLine": 104,
"replacementType": "jsx-text"
},
{
"route": "(main)/test-voice-wave",
"file": "src/app/(main)/test-voice-wave/page.tsx",
"componentOrFn": "TestVoiceWavePage",
"kind": "text",
"keyOrLocator": "div",
"text": "大尺寸下的语音波纹效果,适合作为页面主要视觉元素",
"line": 114,
"count": 4,
"notes": "",
"corrected_text": "The large-scale voice ripple effect is suitable for use as the main visual element of the page",
"actualLine": 114,
"replacementType": "jsx-text"
},
{
"route": "(main)/test-voice-wave",
"file": "src/app/(main)/test-voice-wave/page.tsx",
"componentOrFn": "TestVoiceWavePage",
"kind": "text",
"keyOrLocator": "div",
"text": "使用方法",
"line": 121,
"count": 3,
"notes": "",
"corrected_text": "How to use",
"actualLine": 121,
"replacementType": "jsx-text"
},
{
"route": "(main)/test-voice-wave",
"file": "src/app/(main)/test-voice-wave/page.tsx",
"componentOrFn": "TestVoiceWavePage",
"kind": "text",
"keyOrLocator": "div",
"text": "特性:",
"line": 143,
"count": 4,
"notes": "",
"corrected_text": "Features:",
"actualLine": 143,
"replacementType": "jsx-text"
},
{
"route": "(main)/test-voice-wave",
"file": "src/app/(main)/test-voice-wave/page.tsx",
"componentOrFn": "TestVoiceWavePage",
"kind": "text",
"keyOrLocator": "div",
"text": "整体从左到右渐变:灰色 → 白色 → 灰色",
"line": 145,
"count": 4,
"notes": "",
"corrected_text": "Overall gradual change from left to right: gray → white → gray",
"actualLine": 145,
"replacementType": "jsx-text"
},
{
"route": "(main)/test-voice-wave",
"file": "src/app/(main)/test-voice-wave/page.tsx",
"componentOrFn": "TestVoiceWavePage",
"kind": "text",
"keyOrLocator": "div",
"text": "涟漪扩散:声波从中心向两边扩散,延迟递增",
"line": 146,
"count": 4,
"notes": "",
"corrected_text": "Ripple diffusion: Sound waves spread from the center to both sides, with increasing delay",
"actualLine": 146,
"replacementType": "jsx-text"
},
{
"route": "(main)/test-voice-wave",
"file": "src/app/(main)/test-voice-wave/page.tsx",
"componentOrFn": "TestVoiceWavePage",
"kind": "text",
"keyOrLocator": "div",
"text": "中心增强中心声波比两边高40%,模拟音源位置",
"line": 147,
"count": 4,
"notes": "",
"corrected_text": "Center enhancement: The center sound wave is 40% higher than the two sides, simulating the sound source position",
"actualLine": 147,
"replacementType": "jsx-text"
},
{
"route": "(main)/test-voice-wave",
"file": "src/app/(main)/test-voice-wave/page.tsx",
"componentOrFn": "TestVoiceWavePage",
"kind": "text",
"keyOrLocator": "div",
"text": "使用CSS transition实现平滑过渡",
"line": 149,
"count": 4,
"notes": "",
"corrected_text": "Use CSS transitions for smooth transitions",
"actualLine": 149,
"replacementType": "jsx-text"
},
{
"route": "(main)/test-voice-wave",
"file": "src/app/(main)/test-voice-wave/page.tsx",
"componentOrFn": "TestVoiceWavePage",
"kind": "text",
"keyOrLocator": "div",
"text": "纯CSS实现性能优秀",
"line": 150,
"count": 4,
"notes": "",
"corrected_text": "Pure CSS implementation, excellent performance",
"actualLine": 150,
"replacementType": "jsx-text"
},
{
"route": "(auth)/login",
"file": "src/app/(auth)/login/components/DiscordButton.tsx",
"componentOrFn": "DiscordButton",
"kind": "toast",
"keyOrLocator": "toast.success",
"text": "Discord登录成功",
"line": 63,
"count": 1,
"notes": "",
"corrected_text": "Login successful",
"actualLine": 63,
"replacementType": "function-arg"
},
{
"route": "(auth)/login",
"file": "src/app/(auth)/login/components/ImageCarousel.tsx",
"componentOrFn": "ImageCarousel",
"kind": "text",
"keyOrLocator": "div",
"text": "没有图片",
"line": 39,
"count": 1,
"notes": "",
"corrected_text": "No picture.",
"actualLine": 39,
"replacementType": "jsx-text"
},
{
"route": "(auth)/login",
"file": "src/app/(auth)/login/components/login-form.tsx",
"componentOrFn": "LoginForm",
"kind": "toast",
"keyOrLocator": "toast.info",
"text": "Google登录",
"line": 10,
"count": 1,
"notes": "",
"corrected_text": "Google Sign In",
"actualLine": 10,
"replacementType": "function-arg"
},
{
"route": "(auth)/login",
"file": "src/app/(auth)/login/components/login-form.tsx",
"componentOrFn": "LoginForm",
"kind": "toast",
"keyOrLocator": "toast.info",
"text": "Apple登录",
"line": 16,
"count": 1,
"notes": "",
"corrected_text": "Apple Sign In",
"actualLine": 16,
"replacementType": "function-arg"
},
{
"route": "shared",
"file": "src/components/layout/components/ChatConversationsDeleteDialog.tsx",
"componentOrFn": "ChatConversationsDeleteDialog",
"kind": "text",
"keyOrLocator": "AlertDialog",
"text": "删除消息",
"line": 31,
"count": 1,
"notes": "",
"corrected_text": "Delete message",
"actualLine": 31,
"replacementType": "jsx-text"
},
{
"route": "shared",
"file": "src/components/layout/components/ChatConversationsDeleteDialog.tsx",
"componentOrFn": "ChatConversationsDeleteDialog",
"kind": "text",
"keyOrLocator": "AlertDialog",
"text": "删除全部消息后,将清空所有的消息记录",
"line": 33,
"count": 1,
"notes": "",
"corrected_text": "After deleting all messages, all message records will be cleared",
"actualLine": 33,
"replacementType": "jsx-text"
},
{
"route": "shared",
"file": "src/components/layout/components/ChatSearchResults.tsx",
"componentOrFn": "PersonItem",
"kind": "alt",
"keyOrLocator": "Image.alt",
"text": "heart",
"line": 99,
"count": 2,
"notes": "",
"corrected_text": "Heart",
"actualLine": 99,
"replacementType": "jsx-attribute"
},
{
"route": "shared",
"file": "src/components/layout/components/ChatSidebarAction.tsx",
"componentOrFn": "ChatSidebarAction",
"kind": "text",
"keyOrLocator": "DropdownMenu",
"text": "iconfont icon-Search",
"line": 49,
"count": 1,
"notes": "",
"corrected_text": "Iconfont icon-Search",
"actualLine": 49,
"replacementType": "jsx-expression"
},
{
"route": "shared",
"file": "src/components/layout/components/Notice.tsx",
"componentOrFn": "Notice",
"kind": "alt",
"keyOrLocator": "Image.alt",
"text": "notice",
"line": 57,
"count": 1,
"notes": "",
"corrected_text": "Notice",
"actualLine": 57,
"replacementType": "jsx-attribute"
},
{
"route": "(auth)/login/fields",
"file": "src/app/(auth)/login/fields/fields-page.tsx",
"componentOrFn": "FieldsPage",
"kind": "text",
"keyOrLocator": "div",
"text": "submit",
"line": 237,
"count": 4,
"notes": "",
"corrected_text": "Submit",
"actualLine": 237,
"replacementType": "jsx-text"
},
{
"route": "(auth)/policy/tos",
"file": "src/app/(auth)/policy/tos/page.tsx",
"componentOrFn": "TermsOfServicePage",
"kind": "text",
"keyOrLocator": "div",
"text": "Welcome to the Crushlevel application (hereinafter referred to as \"this App\") and related website (Crushlevel.ai, hereinafter referred to as \"this Website\"). This User Agreement (hereinafter referred to as \"this Agreement\") is a legally binding agreement between you (hereinafter referred to as the \"User\") and the operator of Crushlevel (hereinafter referred to as \"We,\" \"Us,\" or \"Our\") regarding your use of this App and this Website. Before registering for or using this App and this Website, please read this Agreement carefully and understand its contents in full. If you have any questions regarding this Agreement, you should consult Us. If you do not agree to any part of this Agreement, you should immediately cease registration or use of this App and this Website. Once you register for or use this App and this Website, it means that you have fully understood and agreed to all the terms of this Agreement.",
"line": 16,
"count": 4,
"notes": "",
"corrected_text": "Welcome to the Crushlevel application (hereinafter referred to as \"this App\") and related website (Crushlevel.ai, hereinafter referred to as \"this Website\"). This User Agreement (hereinafter referred to as \"this Agreement\") is a legally binding agreement between you (hereinafter referred to as the \"User\") and the operator of Crushlevel (hereinafter referred to as \"We,\" \"Us,\" or \"Our\") regarding your use of this App and this Website. Before registering for or using this App and this Website, please read this Agreement carefully and understand it's contents in full. If you have any questions regarding this Agreement, you should consult Us. If you do not agree to any part of this Agreement, you should immediately cease registration or use of this App and this Website. Once you register for or use this App and this Website, it means that you have fully understood and agreed to all the terms of this Agreement.",
"actualLine": 16,
"replacementType": "jsx-text"
},
{
"route": "(auth)/policy/tos",
"file": "src/app/(auth)/policy/tos/page.tsx",
"componentOrFn": "TermsOfServicePage",
"kind": "text",
"keyOrLocator": "div",
"text": "You shall ensure that the registration information provided is true, accurate, and complete, and promptly update your registration information to ensure its validity. If, due to registration information provided by you being untrue, inaccurate, incomplete, or not updated in a timely manner, We are unable to provide you with corresponding services or any other losses arise, you shall bear full responsibility.",
"line": 33,
"count": 6,
"notes": "",
"corrected_text": "You shall ensure that the registration information provided is true, accurate, and complete, and promptly update your registration information to ensure it's validity. If, due to registration information provided by you being untrue, inaccurate, incomplete, or not updated in a timely manner, We are unable to provide you with corresponding services or any other losses arise, you shall bear full responsibility.",
"actualLine": 33,
"replacementType": "jsx-text"
},
{
"route": "(auth)/share/[userId]",
"file": "src/app/(auth)/share/[userId]/share-page.tsx",
"componentOrFn": "SharePage",
"kind": "text",
"keyOrLocator": "div",
"text": "likes",
"line": 73,
"count": 6,
"notes": "",
"corrected_text": "Likes",
"actualLine": 73,
"replacementType": "jsx-text"
},
{
"route": "(auth)/policy/recharge",
"file": "src/app/(auth)/policy/recharge/page.tsx",
"componentOrFn": "RechargeAgreementPage",
"kind": "text",
"keyOrLocator": "div",
"text": "This Recharge Service Agreement (hereinafter referred to as \"this Agreement\") is entered into between you and the operator of Crushlevel (hereinafter referred to as the \"Platform\") and/or its affiliates (hereinafter referred to as the \"Company\"). The Platform shall provide services to you in accordance with the provisions of this Agreement and the operating rules issued from time to time (hereinafter referred to as the \"Services\"). For the purpose of providing better services to users, you, as the service user (i.e., the account user who places an order to purchase the Platform's virtual currency, hereinafter referred to as \"you\"), shall carefully read and fully understand this Agreement before starting to use the Services. Among them, clauses that exempt or limit the Platform's liability, dispute resolution methods, jurisdiction and other important contents will be highlighted in",
"line": 24,
"count": 4,
"notes": "",
"corrected_text": "This Recharge Service Agreement (hereinafter referred to as \"this Agreement\") is entered into between you and the operator of Crushlevel (hereinafter referred to as the \"Platform\") and/or it's affiliates (hereinafter referred to as the \"Company\"). The Platform shall provide services to you in accordance with the provisions of this Agreement and the operating rules issued from time to time (hereinafter referred to as the \"Services\"). For the purpose of providing better services to users, you, as the service user (i.e., the account user who places an order to purchase the Platform's virtual currency, hereinafter referred to as \"you\"), shall carefully read and fully understand this Agreement before starting to use the Services. Among them, clauses that exempt or limit the Platform's liability, dispute resolution methods, jurisdiction and other important contents will be highlighted in",
"actualLine": 24,
"replacementType": "jsx-text"
},
{
"route": "(auth)/policy/recharge",
"file": "src/app/(auth)/policy/recharge/page.tsx",
"componentOrFn": "RechargeAgreementPage",
"kind": "text",
"keyOrLocator": "div",
"text": "You understand and agree that the Services are provided in accordance with the current state achievable under existing technologies and conditions. The Platform will make its best efforts to provide the Services to you and ensure the security and stability of the Services. However, you also know and acknowledge that the Platform cannot foresee and prevent technical and other risks at all times or at all times, including but not limited to service interruptions, delays, errors or data loss caused by force majeure (such as natural disasters, wars, public health emergencies, etc.), network reasons (such as network congestion, hacker attacks, server failures, etc.), third-party service defects (such as failures of third-party payment institutions, changes in app store policies, etc.), revisions to laws and regulations or adjustments to regulatory policies, etc. In the event of such circumstances, the Platform will make its best commercial efforts to improve the situation, but shall not be obligated to bear any legal liability to you or other third parties, unless such losses are caused by the intentional acts or gross negligence of the Platform.",
"line": 324,
"count": 7,
"notes": "",
"corrected_text": "You understand and agree that the Services are provided in accordance with the current state achievable under existing technologies and conditions. The Platform will make it's best efforts to provide the Services to you and ensure the security and stability of the Services. However, you also know and acknowledge that the Platform cannot foresee and prevent technical and other risks at all times or at all times, including but not limited to service interruptions, delays, errors or data loss caused by force majeure (such as natural disasters, wars, public health emergencies, etc.), network reasons (such as network congestion, hacker attacks, server failures, etc.), third-party service defects (such as failures of third-party payment institutions, changes in app store policies, etc.), revisions to laws and regulations or adjustments to regulatory policies, etc. In the event of such circumstances, the Platform will makeit'ss best commercial efforts to improve the situation, but shall not be obligated to bear any legal liability to you or other third parties, unless such losses are caused by the intentional acts or gross negligence of the Platform.",
"actualLine": 324,
"replacementType": "jsx-text"
},
{
"route": "(auth)/policy/recharge",
"file": "src/app/(auth)/policy/recharge/page.tsx",
"componentOrFn": "RechargeAgreementPage",
"kind": "text",
"keyOrLocator": "div",
"text": "The Platform may conduct downtime maintenance, system upgrades and function adjustments on its own. If you are unable to use the Services normally due to this, the Platform will notify you of the maintenance/upgrade time and the scope of impact in advance through reasonable methods (except for emergency maintenance), and you agree that the Platform shall not bear legal liability for this. Any losses caused by your attempt to use the Services during the maintenance/upgrade period shall be borne by yourself.",
"line": 336,
"count": 7,
"notes": "",
"corrected_text": "The Platform may conduct downtime maintenance, system upgrades and function adjustments on it's own. If you are unable to use the Services normally due to this, the Platform will notify you of the maintenance/upgrade time and the scope of impact in advance through reasonable methods (except for emergency maintenance), and you agree that the Platform shall not bear legal liability for this. Any losses caused by your attempt to use the Services during the maintenance/upgrade period shall be borne by yourself.",
"actualLine": 336,
"replacementType": "jsx-text"
},
{
"route": "(auth)/policy/recharge",
"file": "src/app/(auth)/policy/recharge/page.tsx",
"componentOrFn": "RechargeAgreementPage",
"kind": "text",
"keyOrLocator": "strong",
"text": "the Platform does not provide refund services for this part of the Virtual Currency",
"line": 305,
"count": 1,
"notes": "",
"corrected_text": "The Platform does not provide refund services for this part of the Virtual Currency",
"actualLine": 305,
"replacementType": "jsx-text"
},
{
"route": "(main)/create",
"file": "src/app/(main)/create/components/CloseIconButton.tsx",
"componentOrFn": "CloseIconButton",
"kind": "text",
"keyOrLocator": "AlertDialog",
"text": "内容未保存",
"line": 80,
"count": 1,
"notes": "",
"corrected_text": "Unsaved changes",
"actualLine": 80,
"replacementType": "jsx-text"
},
{
"route": "(main)/create",
"file": "src/app/(main)/create/components/CloseIconButton.tsx",
"componentOrFn": "CloseIconButton",
"kind": "text",
"keyOrLocator": "AlertDialog",
"text": "内容未保存,是否继续退出?",
"line": 81,
"count": 1,
"notes": "",
"corrected_text": "The content has not been saved, Continue to quit?",
"actualLine": 81,
"replacementType": "jsx-text"
},
{
"route": "(main)/create",
"file": "src/app/(main)/create/components/CloseIconButton.tsx",
"componentOrFn": "CloseIconButton",
"kind": "text",
"keyOrLocator": "AlertDialog",
"text": "取消",
"line": 84,
"count": 1,
"notes": "",
"corrected_text": "Cancel",
"actualLine": 84,
"replacementType": "jsx-text"
},
{
"route": "(main)/create",
"file": "src/app/(main)/create/components/CloseIconButton.tsx",
"componentOrFn": "CloseIconButton",
"kind": "text",
"keyOrLocator": "AlertDialog",
"text": "退出",
"line": 85,
"count": 1,
"notes": "",
"corrected_text": "Quit",
"actualLine": 85,
"replacementType": "jsx-text"
},
{
"route": "(main)/create",
"file": "src/app/(main)/create/components/CopyrightRuleModal.tsx",
"componentOrFn": "CopyrightRuleModal",
"kind": "text",
"keyOrLocator": "AlertDialog",
"text": "请确认该虚拟角色是您的原创或同人创作不侵犯他人的图像IP或其他权利。",
"line": 26,
"count": 1,
"notes": "",
"corrected_text": "By clicking \"Confirm\", you represent and warrant that you are the original creator of this virtual character and that it does not infringe upon any third party's intellectual property rights or other legal rights.",
"actualLine": 26,
"replacementType": "jsx-text"
},
{
"route": "(main)/create",
"file": "src/app/(main)/create/components/ImageForm.tsx",
"componentOrFn": "ImageForm",
"kind": "toast",
"keyOrLocator": "toast.success",
"text": "Create character successfully",
"line": 201,
"count": 1,
"notes": "",
"corrected_text": "Character created successfully!",
"actualLine": 214,
"replacementType": "function-arg"
},
{
"route": "(main)/create",
"file": "src/app/(main)/create/components/ImageForm.tsx",
"componentOrFn": "ImageForm",
"kind": "alt",
"keyOrLocator": "Image.alt",
"text": "avatar",
"line": 294,
"count": 1,
"notes": "",
"corrected_text": "Avatar",
"actualLine": 307,
"replacementType": "jsx-attribute"
},
{
"route": "(main)/create",
"file": "src/app/(main)/create/components/ImageForm.tsx",
"componentOrFn": "ImageForm",
"kind": "placeholder",
"keyOrLocator": "Textarea.placeholder",
"text": "为用户介绍该虚拟角色",
"line": 337,
"count": 1,
"notes": "",
"corrected_text": "Introduce the virtual character to the user",
"actualLine": 350,
"replacementType": "jsx-attribute"
},
{
"route": "(main)/create",
"file": "src/app/(main)/create/components/ImageGeneration.tsx",
"componentOrFn": "ImageGeneration",
"kind": "text",
"keyOrLocator": "div",
"text": "风格选择",
"line": 83,
"count": 3,
"notes": "",
"corrected_text": "Style selection",
"actualLine": 83,
"replacementType": "jsx-text"
},
{
"route": "(main)/create",
"file": "src/app/(main)/create/components/ImageGeneration.tsx",
"componentOrFn": "ImageGeneration",
"kind": "text",
"keyOrLocator": "div",
"text": "描述",
"line": 109,
"count": 4,
"notes": "",
"corrected_text": "Description",
"actualLine": 109,
"replacementType": "jsx-text"
},
{
"route": "(main)/create",
"file": "src/app/(main)/create/components/ImageGeneration.tsx",
"componentOrFn": "ImageGeneration",
"kind": "text",
"keyOrLocator": "div",
"text": "使用角色信息",
"line": 116,
"count": 4,
"notes": "",
"corrected_text": "Using Character Information",
"actualLine": 116,
"replacementType": "jsx-text"
},
{
"route": "(main)/create",
"file": "src/app/(main)/create/components/ImageGeneration.tsx",
"componentOrFn": "ImageGeneration",
"kind": "text",
"keyOrLocator": "div",
"text": "AI生成可能需要几分钟时间请耐心等待",
"line": 133,
"count": 3,
"notes": "",
"corrected_text": "AI generation may take a few minutes, please be patient.",
"actualLine": 133,
"replacementType": "jsx-text"
},
{
"route": "(main)/create",
"file": "src/app/(main)/create/components/ImageGeneration.tsx",
"componentOrFn": "ImageGeneration",
"kind": "text",
"keyOrLocator": "div",
"text": "正在生成图片...",
"line": 148,
"count": 4,
"notes": "",
"corrected_text": "Generating image...",
"actualLine": 148,
"replacementType": "jsx-text"
},
{
"route": "(main)/create",
"file": "src/app/(main)/create/components/ImageGeneration.tsx",
"componentOrFn": "ImageGeneration",
"kind": "placeholder",
"keyOrLocator": "Textarea.placeholder",
"text": "描述你想要生成的角色图片例如beautiful anime girl with long blue hair, wearing school uniform...",
"line": 123,
"count": 1,
"notes": "",
"corrected_text": "Describe the character image you want to generate, for example: beautiful anime girl with long blue hair, wearing school uniform...",
"actualLine": 123,
"replacementType": "jsx-attribute"
},
{
"route": "(main)/create",
"file": "src/app/(main)/create/components/ImagePreview.tsx",
"componentOrFn": "ImagePreview",
"kind": "text",
"keyOrLocator": "div",
"text": "共",
"line": 128,
"count": 2,
"notes": "",
"corrected_text": "total",
"actualLine": 128,
"replacementType": "jsx-text"
},
{
"route": "(main)/create",
"file": "src/app/(main)/create/components/ImagePreview.tsx",
"componentOrFn": "ImagePreview",
"kind": "text",
"keyOrLocator": "div",
"text": "张图片",
"line": 128,
"count": 2,
"notes": "",
"corrected_text": "picture",
"actualLine": 128,
"replacementType": "jsx-text"
},
{
"route": "(main)/create",
"file": "src/app/(main)/create/components/ImagePreview.tsx",
"componentOrFn": "ImagePreview",
"kind": "text",
"keyOrLocator": "div",
"text": "已选中主图片",
"line": 130,
"count": 2,
"notes": "",
"corrected_text": "Main image selected",
"actualLine": 130,
"replacementType": "jsx-text"
},
{
"route": "(main)/create",
"file": "src/app/(main)/create/components/ImageUpload.tsx",
"componentOrFn": "ImageUpload",
"kind": "text",
"keyOrLocator": "div",
"text": "支持 JPG、PNG、GIF 格式,单文件不超过",
"line": 154,
"count": 4,
"notes": "",
"corrected_text": "Support JPG, PNG, GIF format, single file no more than",
"actualLine": 154,
"replacementType": "jsx-text"
},
{
"route": "(main)/create",
"file": "src/app/(main)/create/components/ImageUpload.tsx",
"componentOrFn": "ImageUpload",
"kind": "text",
"keyOrLocator": "div",
"text": "最多可上传",
"line": 158,
"count": 4,
"notes": "",
"corrected_text": "Up to upload",
"actualLine": 158,
"replacementType": "jsx-text"
},
{
"route": "(main)/create",
"file": "src/app/(main)/create/components/ImageUpload.tsx",
"componentOrFn": "ImageUpload",
"kind": "text",
"keyOrLocator": "div",
"text": "个文件",
"line": 158,
"count": 4,
"notes": "",
"corrected_text": "files",
"actualLine": 158,
"replacementType": "jsx-text"
},
{
"route": "(main)/contact",
"file": "src/app/(main)/contact/components/RenderContactStatusText.tsx",
"componentOrFn": "RenderContactStatusText",
"kind": "alt",
"keyOrLocator": "Image.alt",
"text": "heart-rate",
"line": 35,
"count": 1,
"notes": "",
"corrected_text": "Heart-rate",
"actualLine": 35,
"replacementType": "jsx-attribute"
},
{
"route": "(main)/contact",
"file": "src/app/(main)/contact/components/RenderContactStatusText.tsx",
"componentOrFn": "RenderContactStatusText",
"kind": "text",
"keyOrLocator": "div",
"text": "与你的心动值达到15.0摄氏度以上的角色作为最为排名对象",
"line": 53,
"count": 2,
"notes": "",
"corrected_text": "The character with your heart value above 15.0 ℃ will be the most ranked object.",
"actualLine": 53,
"replacementType": "jsx-text"
},
{
"route": "(main)/contact",
"file": "src/app/(main)/contact/components/RenderContactStatusText.tsx",
"componentOrFn": "RenderContactStatusText",
"kind": "text",
"keyOrLocator": "div",
"text": "按照这些角色心动值总和进行排名",
"line": 54,
"count": 2,
"notes": "",
"corrected_text": "Rank according to the total heart value of these characters",
"actualLine": 54,
"replacementType": "jsx-text"
},
{
"route": "(main)/contact",
"file": "src/app/(main)/contact/components/RenderContactStatusText.tsx",
"componentOrFn": "RenderContactStatusText",
"kind": "alt",
"keyOrLocator": "Image.alt",
"text": "question-border",
"line": 49,
"count": 1,
"notes": "",
"corrected_text": "Question-border",
"actualLine": 49,
"replacementType": "jsx-attribute"
},
{
"route": "/",
"file": "src/app/(main)/generate/components/GeneralBuyTimesDialog.tsx",
"componentOrFn": "GeneralBuyTimesDialog",
"kind": "alt",
"keyOrLocator": "Image.alt",
"text": "buy times",
"line": 88,
"count": 1,
"notes": "",
"corrected_text": "Buy times",
"actualLine": 107,
"replacementType": "jsx-attribute"
},
{
"route": "/",
"file": "src/app/(main)/generate/components/GeneralImageWithCountButton.tsx",
"componentOrFn": "GeneralImageWithCountButton",
"kind": "text",
"keyOrLocator": "Button",
"text": "会员创作次数 +10/月",
"line": 125,
"count": 1,
"notes": "",
"corrected_text": "Member creation times + 10/month",
"actualLine": 125,
"replacementType": "jsx-text"
},
{
"route": "/",
"file": "src/app/(main)/generate/components/ReferenceUpload.tsx",
"componentOrFn": "validateFile",
"kind": "toast",
"keyOrLocator": "toast.error",
"text": "请选择图片文件",
"line": 38,
"count": 1,
"notes": "",
"corrected_text": "Please select an image file",
"actualLine": 38,
"replacementType": "function-arg"
},
{
"route": "/",
"file": "src/app/(main)/generate/components/ReferenceUpload.tsx",
"componentOrFn": "validateFile",
"kind": "toast",
"keyOrLocator": "toast.error",
"text": "图片文件不能超过10MB",
"line": 43,
"count": 1,
"notes": "",
"corrected_text": "Image files cannot exceed 10MB.",
"actualLine": 43,
"replacementType": "function-arg"
},
{
"route": "(main)/generate/image-2-background",
"file": "src/app/(main)/generate/image-2-background/image-page.tsx",
"componentOrFn": "Image2BackgroundPage",
"kind": "placeholder",
"keyOrLocator": "Textarea.placeholder",
"text": "请描述形象的肤色、服饰、发型、五官、动作、背景等",
"line": 212,
"count": 1,
"notes": "",
"corrected_text": "Please describe the character's skin color, clothing, hairstyle, facial features, movements, background, etc.",
"actualLine": 228,
"replacementType": "jsx-attribute"
},
{
"route": "(main)/generate/image-2-background",
"file": "src/app/(main)/generate/image-2-background/image-page.tsx",
"componentOrFn": "Image2BackgroundPage",
"kind": "alt",
"keyOrLocator": "Image.alt",
"text": "diamond",
"line": 240,
"count": 1,
"notes": "",
"corrected_text": "Diamond",
"actualLine": 256,
"replacementType": "jsx-attribute"
},
{
"route": "(main)/crushcoin",
"file": "src/app/(main)/crushcoin/components/CheckInCard.tsx",
"componentOrFn": "CheckInCard",
"kind": "alt",
"keyOrLocator": "Image.alt",
"text": "diamond",
"line": 60,
"count": 1,
"notes": "",
"corrected_text": "Diamond",
"actualLine": 60,
"replacementType": "jsx-attribute"
},
{
"route": "(main)/crushcoin",
"file": "src/app/(main)/crushcoin/components/CheckInCard.tsx",
"componentOrFn": "CheckInCard",
"kind": "alt",
"keyOrLocator": "Image.alt",
"text": "star",
"line": 69,
"count": 1,
"notes": "",
"corrected_text": "Star",
"actualLine": 69,
"replacementType": "jsx-attribute"
},
{
"route": "(main)/crushcoin",
"file": "src/app/(main)/crushcoin/components/CheckInGrid.tsx",
"componentOrFn": "CheckInGrid",
"kind": "toast",
"keyOrLocator": "toast.success",
"text": "今日已签到",
"line": 25,
"count": 1,
"notes": "",
"corrected_text": "Signed in today",
"actualLine": 25,
"replacementType": "function-arg"
},
{
"route": "(main)/generate/image-2-image",
"file": "src/app/(main)/generate/image-2-image/image-page.tsx",
"componentOrFn": "ImagePage",
"kind": "placeholder",
"keyOrLocator": "Textarea.placeholder",
"text": "请描述形象的肤色、服饰、发型、五官、动作、背景等",
"line": 230,
"count": 1,
"notes": "",
"corrected_text": "Please describe the character's skin color, clothing, hairstyle, facial features, movements, background, etc.",
"actualLine": 230,
"replacementType": "jsx-attribute"
},
{
"route": "(main)/generate/image",
"file": "src/app/(main)/generate/image/generate-image-page.tsx",
"componentOrFn": "GenerateImagePage",
"kind": "placeholder",
"keyOrLocator": "Textarea.placeholder",
"text": "请描述形象的肤色、服饰、发型、五官、动作、背景等",
"line": 183,
"count": 1,
"notes": "",
"corrected_text": "Please describe the character's skin color, clothing, hairstyle, facial features, movements, background, etc.",
"actualLine": 183,
"replacementType": "jsx-attribute"
},
{
"route": "(main)/generate/image-edit",
"file": "src/app/(main)/generate/image-edit/image-edit-page.tsx",
"componentOrFn": "ImageEditPage",
"kind": "placeholder",
"keyOrLocator": "Textarea.placeholder",
"text": "请描述形象的肤色、服饰、发型、五官、动作、背景等",
"line": 216,
"count": 1,
"notes": "",
"corrected_text": "Please describe the character's skin color, clothing, hairstyle, facial features, movements, background, etc.",
"actualLine": 216,
"replacementType": "jsx-attribute"
},
{
"route": "(main)/leaderboard",
"file": "src/app/(main)/leaderboard/components/TopHeader.tsx",
"componentOrFn": "TopHeader",
"kind": "text",
"keyOrLocator": "div",
"text": "暂无排行榜数据",
"line": 35,
"count": 3,
"notes": "",
"corrected_text": "No leaderboard data yet",
"actualLine": 35,
"replacementType": "jsx-text"
},
{
"route": "/",
"file": "src/app/(main)/home/components/HomeHeader.tsx",
"componentOrFn": "HomeHeader",
"kind": "alt",
"keyOrLocator": "Image.alt",
"text": "banner",
"line": 13,
"count": 1,
"notes": "",
"corrected_text": "Banner",
"actualLine": 13,
"replacementType": "jsx-attribute"
},
{
"route": "(main)/profile",
"file": "src/app/(main)/profile/components/AvatarSetting.tsx",
"componentOrFn": "handleFileUpload",
"kind": "toast",
"keyOrLocator": "toast.error",
"text": "请选择图片文件",
"line": 33,
"count": 1,
"notes": "",
"corrected_text": "Please select an image file",
"actualLine": 33,
"replacementType": "function-arg"
},
{
"route": "(main)/profile",
"file": "src/app/(main)/profile/components/AvatarSetting.tsx",
"componentOrFn": "handleFileUpload",
"kind": "toast",
"keyOrLocator": "toast.error",
"text": "不支持 GIF 格式,请选择 JPG、JPEG 或 PNG 格式的图片",
"line": 39,
"count": 1,
"notes": "",
"corrected_text": "GIF format is not supported, please select JPG, JPEG or PNG format images",
"actualLine": 39,
"replacementType": "function-arg"
},
{
"route": "(main)/profile",
"file": "src/app/(main)/profile/components/AvatarSetting.tsx",
"componentOrFn": "handleFileUpload",
"kind": "toast",
"keyOrLocator": "toast.error",
"text": "图片文件不能超过10MB",
"line": 45,
"count": 1,
"notes": "",
"corrected_text": "Image files cannot exceed 10MB.",
"actualLine": 45,
"replacementType": "function-arg"
},
{
"route": "(main)/profile",
"file": "src/app/(main)/profile/components/AvatarSetting.tsx",
"componentOrFn": "AvatarSetting",
"kind": "text",
"keyOrLocator": "div",
"text": "头像必须是 JPG、JPEG 或 PNG 格式,文件大小不能超过 10MB",
"line": 129,
"count": 4,
"notes": "",
"corrected_text": "The avatar must be in JPG, JPEG, or PNG format, and the file size cannot exceed 10MB.",
"actualLine": 129,
"replacementType": "jsx-text"
},
{
"route": "(main)/profile",
"file": "src/app/(main)/profile/components/CharacterCardAdd.tsx",
"componentOrFn": "CharacterCardAdd",
"kind": "text",
"keyOrLocator": "div",
"text": "Add More Character",
"line": 32,
"count": 6,
"notes": "",
"corrected_text": "Add More Characters",
"actualLine": 32,
"replacementType": "jsx-text"
},
{
"route": "(main)/wallet",
"file": "src/app/(main)/wallet/components/IncomeList.tsx",
"componentOrFn": "IncomeItem",
"kind": "alt",
"keyOrLocator": "Image.alt",
"text": "diamond",
"line": 138,
"count": 2,
"notes": "",
"corrected_text": "Diamond",
"actualLine": 138,
"replacementType": "jsx-attribute"
},
{
"route": "(main)/wallet",
"file": "src/app/(main)/wallet/components/RechargeList.tsx",
"componentOrFn": "handlePayment",
"kind": "toast",
"keyOrLocator": "toast.error",
"text": "支付失败,请重试",
"line": 73,
"count": 1,
"notes": "",
"corrected_text": "Payment failure, please try again",
"actualLine": 73,
"replacementType": "function-arg"
},
{
"route": "(main)/chat/[aiId]",
"file": "src/app/(main)/chat/[aiId]/components/ChatBackground.tsx",
"componentOrFn": "ChatBackground",
"kind": "alt",
"keyOrLocator": "Image.alt",
"text": "background",
"line": 14,
"count": 1,
"notes": "",
"corrected_text": "Background",
"actualLine": 14,
"replacementType": "jsx-attribute"
},
{
"route": "(main)/chat/[aiId]",
"file": "src/app/(main)/chat/[aiId]/components/CrushLevelAction.tsx",
"componentOrFn": "CrushLevelAction",
"kind": "alt",
"keyOrLocator": "Image.alt",
"text": "heart",
"line": 220,
"count": 2,
"notes": "",
"corrected_text": "Heart",
"actualLine": 220,
"replacementType": "jsx-attribute"
},
{
"route": "(main)/edit/[aiId]/image",
"file": "src/app/(main)/edit/[aiId]/image/image-page.tsx",
"componentOrFn": "ImageForm",
"kind": "alt",
"keyOrLocator": "Image.alt",
"text": "avatar",
"line": 253,
"count": 1,
"notes": "",
"corrected_text": "Avatar",
"actualLine": 268,
"replacementType": "jsx-attribute"
},
{
"route": "(main)/edit/[aiId]/image",
"file": "src/app/(main)/edit/[aiId]/image/image-page.tsx",
"componentOrFn": "ImageForm",
"kind": "placeholder",
"keyOrLocator": "Textarea.placeholder",
"text": "为用户介绍该虚拟角色",
"line": 296,
"count": 1,
"notes": "",
"corrected_text": "Introduce the virtual character to the user",
"actualLine": 311,
"replacementType": "jsx-attribute"
},
{
"route": "(main)/edit/[aiId]",
"file": "src/app/(main)/edit/[aiId]/components/CloseIconButton.tsx",
"componentOrFn": "CloseIconButton",
"kind": "text",
"keyOrLocator": "AlertDialog",
"text": "内容未保存",
"line": 89,
"count": 1,
"notes": "",
"corrected_text": "Unsaved changes",
"actualLine": 89,
"replacementType": "jsx-text"
},
{
"route": "(main)/edit/[aiId]",
"file": "src/app/(main)/edit/[aiId]/components/CloseIconButton.tsx",
"componentOrFn": "CloseIconButton",
"kind": "text",
"keyOrLocator": "AlertDialog",
"text": "内容未保存,是否继续退出?",
"line": 90,
"count": 1,
"notes": "",
"corrected_text": "The content has not been saved, Continue to quit?",
"actualLine": 90,
"replacementType": "jsx-text"
},
{
"route": "(main)/edit/[aiId]",
"file": "src/app/(main)/edit/[aiId]/components/CloseIconButton.tsx",
"componentOrFn": "CloseIconButton",
"kind": "text",
"keyOrLocator": "AlertDialog",
"text": "取消",
"line": 93,
"count": 1,
"notes": "",
"corrected_text": "Cancel",
"actualLine": 93,
"replacementType": "jsx-text"
},
{
"route": "(main)/edit/[aiId]",
"file": "src/app/(main)/edit/[aiId]/components/CloseIconButton.tsx",
"componentOrFn": "CloseIconButton",
"kind": "text",
"keyOrLocator": "AlertDialog",
"text": "退出",
"line": 94,
"count": 1,
"notes": "",
"corrected_text": "Quit",
"actualLine": 94,
"replacementType": "jsx-text"
},
{
"route": "/",
"file": "src/app/(main)/home/components/Meet/MeetList.tsx",
"componentOrFn": "ErrorState",
"kind": "text",
"keyOrLocator": "div",
"text": "加载失败",
"line": 74,
"count": 1,
"notes": "",
"corrected_text": "Load failed",
"actualLine": 74,
"replacementType": "jsx-text"
},
{
"route": "/",
"file": "src/app/(main)/home/components/Meet/MeetList.tsx",
"componentOrFn": "ErrorState",
"kind": "text",
"keyOrLocator": "div",
"text": "网络连接异常,请稍后重试",
"line": 75,
"count": 1,
"notes": "",
"corrected_text": "The network connection is abnormal. Please try again later",
"actualLine": 75,
"replacementType": "jsx-text"
},
{
"route": "/",
"file": "src/app/(main)/home/components/Meet/MeetList.tsx",
"componentOrFn": "ErrorState",
"kind": "text",
"keyOrLocator": "div",
"text": "重新加载",
"line": 80,
"count": 1,
"notes": "",
"corrected_text": "Reload",
"actualLine": 80,
"replacementType": "jsx-text"
},
{
"route": "(main)/user/[userId]",
"file": "src/app/(main)/user/[userId]/components/AlbumImageViewerAction.tsx",
"componentOrFn": "renderDefaultAction",
"kind": "text",
"keyOrLocator": "AlertDialog",
"text": "默认图片",
"line": 156,
"count": 1,
"notes": "",
"corrected_text": "Default image",
"actualLine": 156,
"replacementType": "jsx-text"
},
{
"route": "(main)/user/[userId]",
"file": "src/app/(main)/user/[userId]/components/AlbumImageViewerAction.tsx",
"componentOrFn": "renderDefaultAction",
"kind": "text",
"keyOrLocator": "AlertDialog",
"text": "设置为默认图片后,图片的解锁方式只能为“免费”",
"line": 159,
"count": 1,
"notes": "",
"corrected_text": "After setting as the default picture, the unlock method of the picture can only be \"free\".",
"actualLine": 159,
"replacementType": "jsx-text"
},
{
"route": "(main)/user/[userId]",
"file": "src/app/(main)/user/[userId]/components/AlbumImageViewerAction.tsx",
"componentOrFn": "renderDefaultAction",
"kind": "text",
"keyOrLocator": "AlertDialog",
"text": "取消",
"line": 162,
"count": 1,
"notes": "",
"corrected_text": "Cancel",
"actualLine": 162,
"replacementType": "jsx-text"
},
{
"route": "(main)/user/[userId]",
"file": "src/app/(main)/user/[userId]/components/AlbumImageViewerAction.tsx",
"componentOrFn": "renderDefaultAction",
"kind": "text",
"keyOrLocator": "AlertDialog",
"text": "确定",
"line": 168,
"count": 1,
"notes": "",
"corrected_text": "Confirm",
"actualLine": 168,
"replacementType": "jsx-text"
},
{
"route": "(main)/user/[userId]",
"file": "src/app/(main)/user/[userId]/components/AlbumList.tsx",
"componentOrFn": "handleUnlock",
"kind": "toast",
"keyOrLocator": "toast.success",
"text": "解锁成功!",
"line": 69,
"count": 1,
"notes": "",
"corrected_text": "Unlocked successfully!",
"actualLine": 69,
"replacementType": "function-arg"
},
{
"route": "(main)/user/[userId]",
"file": "src/app/(main)/user/[userId]/components/GiftGrid.tsx",
"componentOrFn": "GiftGrid",
"kind": "text",
"keyOrLocator": "div",
"text": "x",
"line": 40,
"count": 4,
"notes": "",
"corrected_text": "X",
"actualLine": 40,
"replacementType": "jsx-text"
},
{
"route": "(main)/user/[userId]",
"file": "src/app/(main)/user/[userId]/components/UserCard.tsx",
"componentOrFn": "UserCard",
"kind": "alt",
"keyOrLocator": "Image.alt",
"text": "gender",
"line": 182,
"count": 1,
"notes": "",
"corrected_text": "Gender",
"actualLine": 182,
"replacementType": "jsx-attribute"
},
{
"route": "(main)/wallet",
"file": "src/app/(main)/wallet/components/Dashboard/IncomeCard.tsx",
"componentOrFn": "handleWithdraw",
"kind": "dialog",
"keyOrLocator": "alert",
"text": "暂无可提现金额",
"line": 20,
"count": 1,
"notes": "",
"corrected_text": "No amount available for withdrawal",
"actualLine": 20,
"replacementType": "function-arg"
},
{
"route": "(main)/wallet",
"file": "src/app/(main)/wallet/components/Dashboard/IncomeCard.tsx",
"componentOrFn": "IncomeCard",
"kind": "text",
"keyOrLocator": "div",
"text": "xxx",
"line": 64,
"count": 4,
"notes": "",
"corrected_text": "Xxx",
"actualLine": 64,
"replacementType": "jsx-text"
},
{
"route": "(main)/wallet/transactions",
"file": "src/app/(main)/wallet/transactions/components/TransactionItem.tsx",
"componentOrFn": "DiamondIcon",
"kind": "alt",
"keyOrLocator": "Image.alt",
"text": "diamond",
"line": 18,
"count": 1,
"notes": "",
"corrected_text": "Diamond",
"actualLine": 18,
"replacementType": "jsx-attribute"
},
{
"route": "(main)/chat/[aiId]",
"file": "src/app/(main)/chat/[aiId]/components/ChatDrawers/ChatModelDrawer.tsx",
"componentOrFn": "ChatModelDrawer",
"kind": "text",
"keyOrLocator": "InlineDrawer",
"text": "文本消息价格是指与角色进行文本消息对话的价格,含发送语音,含发送图片,发送礼物。",
"line": 49,
"count": 1,
"notes": "",
"corrected_text": "Text message price refers to the fee for text conversations with the character, including sending voice messages, images, and gifts.",
"actualLine": 49,
"replacementType": "jsx-text"
},
{
"route": "(main)/chat/[aiId]",
"file": "src/app/(main)/chat/[aiId]/components/ChatDrawers/ChatModelDrawer.tsx",
"componentOrFn": "ChatModelDrawer",
"kind": "text",
"keyOrLocator": "InlineDrawer",
"text": "语音通话消息价格是指与角色进行语音电话对话的价格,按条计算",
"line": 50,
"count": 1,
"notes": "",
"corrected_text": "Voice Call Message price refers to the cost of having a voice call conversation with a character. It is charged per message.",
"actualLine": 50,
"replacementType": "jsx-text"
},
{
"route": "(main)/chat/[aiId]",
"file": "src/app/(main)/chat/[aiId]/components/ChatDrawers/ChatProfileEditDrawer.tsx",
"componentOrFn": "ChatProfileEditDrawer",
"kind": "placeholder",
"keyOrLocator": "Textarea.placeholder",
"text": "描述你所扮演角色的人物背景、性格特征",
"line": 339,
"count": 1,
"notes": "",
"corrected_text": "Describe the character's background and personality traits.",
"actualLine": 339,
"replacementType": "jsx-attribute"
},
{
"route": "(main)/chat/[aiId]",
"file": "src/app/(main)/chat/[aiId]/components/ChatDrawers/ChatProfileEditDrawer.tsx",
"componentOrFn": "ChatProfileEditDrawer",
"kind": "text",
"keyOrLocator": "AlertDialog",
"text": "保存编辑内容",
"line": 360,
"count": 1,
"notes": "",
"corrected_text": "Unsaved Edits",
"actualLine": 360,
"replacementType": "jsx-text"
},
{
"route": "(main)/chat/[aiId]",
"file": "src/app/(main)/chat/[aiId]/components/ChatDrawers/ChatProfileEditDrawer.tsx",
"componentOrFn": "ChatProfileEditDrawer",
"kind": "text",
"keyOrLocator": "AlertDialog",
"text": "退出后编辑的内容不会被保存,请确认是否继续退出?",
"line": 362,
"count": 1,
"notes": "",
"corrected_text": "The edited content will not be saved after exiting. Please confirm whether to continue exiting?",
"actualLine": 362,
"replacementType": "jsx-text"
},
{
"route": "(main)/chat/[aiId]",
"file": "src/app/(main)/chat/[aiId]/components/ChatDrawers/ChatProfileEditDrawer.tsx",
"componentOrFn": "ChatProfileEditDrawer",
"kind": "text",
"keyOrLocator": "AlertDialog",
"text": "Confirm",
"line": 370,
"count": 1,
"notes": "",
"corrected_text": "Exit",
"actualLine": 370,
"replacementType": "jsx-text"
},
{
"route": "(main)/chat/[aiId]",
"file": "src/app/(main)/chat/[aiId]/components/ChatDrawers/SendGiftsDrawer.tsx",
"componentOrFn": "handleSendGift",
"kind": "toast",
"keyOrLocator": "toast.error",
"text": "送礼物失败,请重试",
"line": 182,
"count": 1,
"notes": "",
"corrected_text": "Gift sending failed. Please try again.",
"actualLine": 195,
"replacementType": "function-arg"
},
{
"route": "(main)/chat/[aiId]",
"file": "src/app/(main)/chat/[aiId]/components/ChatFirstGuideDialog/index.tsx",
"componentOrFn": "ChatFirstGuideDialog",
"kind": "text",
"keyOrLocator": "AlertDialog",
"text": "Go to your personal homepage, create an album for your character, attract followers, and increase your income.",
"line": 31,
"count": 1,
"notes": "",
"corrected_text": "Generate images for your character's album to attract fans and earn revenue.",
"actualLine": 31,
"replacementType": "jsx-text"
},
{
"route": "(main)/chat/[aiId]",
"file": "src/app/(main)/chat/[aiId]/components/ChatMessageAction/ChatInput.tsx",
"componentOrFn": "handleVoiceRecord",
"kind": "toast",
"keyOrLocator": "toast.error",
"text": "语音时间太短",
"line": 392,
"count": 1,
"notes": "",
"corrected_text": "Voice too short",
"actualLine": 394,
"replacementType": "function-arg"
},
{
"route": "(main)/chat/[aiId]",
"file": "src/app/(main)/chat/[aiId]/components/ChatMessageItems/ChatOtherTextContainer.tsx",
"componentOrFn": "debouncedFeedback",
"kind": "toast",
"keyOrLocator": "toast.error",
"text": "操作失败,请重试",
"line": 87,
"count": 1,
"notes": "",
"corrected_text": "Operation failed, please try again",
"actualLine": 87,
"replacementType": "function-arg"
},
{
"route": "(main)/chat/[aiId]",
"file": "src/app/(main)/chat/[aiId]/components/ChatMessageItems/ChatUserTextContainer.tsx",
"componentOrFn": "ChatUserTextContainer",
"kind": "alt",
"keyOrLocator": "Image.alt",
"text": "sending-failed",
"line": 31,
"count": 1,
"notes": "",
"corrected_text": "Sending-failed",
"actualLine": 48,
"replacementType": "jsx-attribute"
},
{
"route": "(main)/chat/[aiId]",
"file": "src/app/(main)/chat/[aiId]/components/CrushLevelAvatar/index.tsx",
"componentOrFn": "CrushLevelAvatar",
"kind": "alt",
"keyOrLocator": "Image.alt",
"text": "heart pulse 1",
"line": 249,
"count": 1,
"notes": "",
"corrected_text": "Heart pulse 1",
"actualLine": 249,
"replacementType": "jsx-attribute"
},
{
"route": "(main)/chat/[aiId]",
"file": "src/app/(main)/chat/[aiId]/components/CrushLevelAvatar/index.tsx",
"componentOrFn": "CrushLevelAvatar",
"kind": "alt",
"keyOrLocator": "Image.alt",
"text": "heart pulse 2",
"line": 257,
"count": 1,
"notes": "",
"corrected_text": "Heart pulse 2",
"actualLine": 257,
"replacementType": "jsx-attribute"
},
{
"route": "(main)/chat/[aiId]",
"file": "src/app/(main)/chat/[aiId]/components/ChatDrawers/ChatProfileDrawer/DeleteMessageDialog.tsx",
"componentOrFn": "DeleteMessageDialog",
"kind": "text",
"keyOrLocator": "AlertDialog",
"text": "删除内容后无法恢复,但不会改变已经产生的心动值以及角色记忆。请确认是否删除",
"line": 46,
"count": 1,
"notes": "",
"corrected_text": "Deletion is permanent. Your accumulated Affection points and the character's memories will not be affected. Please confirm deletion.",
"actualLine": 46,
"replacementType": "jsx-text"
},
{
"route": "(main)/chat/[aiId]",
"file": "src/app/(main)/chat/[aiId]/components/ChatDrawers/ChatProfileDrawer/index.tsx",
"componentOrFn": "ChatProfileDrawer",
"kind": "alt",
"keyOrLocator": "Image.alt",
"text": "gender",
"line": 113,
"count": 1,
"notes": "",
"corrected_text": "Gender",
"actualLine": 113,
"replacementType": "jsx-attribute"
},
{
"route": "(main)/chat/[aiId]",
"file": "src/app/(main)/chat/[aiId]/components/ChatDrawers/CrushLevelDrawer/index.tsx",
"componentOrFn": "renderLineText",
"kind": "text",
"keyOrLocator": "div",
"text": "暂无心动关系",
"line": 117,
"count": 1,
"notes": "",
"corrected_text": "No heart relationship",
"actualLine": 117,
"replacementType": "jsx-text"
},
{
"route": "(main)/chat/[aiId]",
"file": "src/app/(main)/chat/[aiId]/components/ChatDrawers/CrushLevelDrawer/index.tsx",
"componentOrFn": "CrushLevelDrawer",
"kind": "text",
"keyOrLocator": "InlineDrawer",
"text": "*通过聊天或送礼增加心动值24小时不联系心动值会自动扣减",
"line": 184,
"count": 1,
"notes": "",
"corrected_text": "* Increase the crush value through chat or gift giving, and the heart value will be automatically deducted if you do not contact for 24 hours.",
"actualLine": 184,
"replacementType": "jsx-text"
},
{
"route": "(main)/chat/[aiId]",
"file": "src/app/(main)/chat/[aiId]/components/ChatDrawers/CrushLevelDrawer/index.tsx",
"componentOrFn": "CrushLevelDrawer",
"kind": "text",
"keyOrLocator": "InlineDrawer",
"text": "*虚拟角色会根据对话的情绪感受,酌情判断增加或者减少心动值",
"line": 185,
"count": 1,
"notes": "",
"corrected_text": "* The virtual character will increase or decrease the crush value according to the emotional feelings of the conversation",
"actualLine": 185,
"replacementType": "jsx-text"
},
{
"route": "(main)/chat/[aiId]",
"file": "src/app/(main)/chat/[aiId]/components/ChatDrawers/CrushLevelDrawer/index.tsx",
"componentOrFn": "CrushLevelDrawer",
"kind": "text",
"keyOrLocator": "InlineDrawer",
"text": "*心动值会提升心动等级,通过升级解锁称号,功能,以及不同的角色对话阶段",
"line": 186,
"count": 1,
"notes": "",
"corrected_text": "* The crush value will increase the crush level, and unlock titles, functions, and different character dialogue stages through upgrades",
"actualLine": 186,
"replacementType": "jsx-text"
}
],
"conflicts": [
{
"file": "src/app/debug-mock/page.tsx",
"line": 85,
"text": " Mock API 调试页面",
"corrected_text": " Mock API debug page",
"conflictType": "TEXT_NOT_FOUND_IN_FILE",
"conflictReason": "在文件中找不到匹配的文本"
},
{
"file": "src/app/server-device-test/page.tsx",
"line": 17,
"text": "️ 服务端设备ID测试",
"corrected_text": "️ Server level device ID testing",
"conflictType": "TEXT_NOT_FOUND_IN_FILE",
"conflictReason": "在文件中找不到匹配的文本"
},
{
"file": "src/app/server-device-test/page.tsx",
"line": 25,
"text": " 设备ID信息",
"corrected_text": " Device ID information",
"conflictType": "TEXT_NOT_FOUND_IN_FILE",
"conflictReason": "在文件中找不到匹配的文本"
},
{
"file": "src/app/server-device-test/page.tsx",
"line": 60,
"text": " 请求信息",
"corrected_text": " Request information",
"conflictType": "TEXT_NOT_FOUND_IN_FILE",
"conflictReason": "在文件中找不到匹配的文本"
},
{
"file": "src/app/server-device-test/page.tsx",
"line": 90,
"text": " 服务端设备ID处理流程",
"corrected_text": " Server level device ID processing flow",
"conflictType": "TEXT_NOT_FOUND_IN_FILE",
"conflictReason": "在文件中找不到匹配的文本"
},
{
"file": "src/app/test-avatar-crop/page.tsx",
"line": 77,
"text": "选择图片",
"corrected_text": "Select image",
"conflictType": "MULTIPLE_MATCHES",
"conflictReason": "找到 2 个匹配项,需要人工确认"
},
{
"file": "src/app/test-avatar-crop/page.tsx",
"line": 197,
"text": " 设计细节",
"corrected_text": " Design details",
"conflictType": "TEXT_NOT_FOUND_IN_FILE",
"conflictReason": "在文件中找不到匹配的文本"
},
{
"file": "src/app/test-avatar-crop/page.tsx",
"line": 90,
"text": "选择图片",
"corrected_text": "Select image",
"conflictType": "MULTIPLE_MATCHES",
"conflictReason": "找到 2 个匹配项,需要人工确认"
},
{
"file": "src/app/test-discord/page.tsx",
"line": 171,
"text": " 检查环境变量",
"corrected_text": " Checking environment variables",
"conflictType": "TEXT_NOT_FOUND_IN_FILE",
"conflictReason": "在文件中找不到匹配的文本"
},
{
"file": "src/app/test-discord/page.tsx",
"line": 177,
"text": " 真实Discord OAuth登录",
"corrected_text": " Real Discord OAuth Login",
"conflictType": "TEXT_NOT_FOUND_IN_FILE",
"conflictReason": "在文件中找不到匹配的文本"
},
{
"file": "src/app/test-discord/page.tsx",
"line": 181,
"text": " 退出登录",
"corrected_text": " log out",
"conflictType": "TEXT_NOT_FOUND_IN_FILE",
"conflictReason": "在文件中找不到匹配的文本"
},
{
"file": "src/app/test-image-crop/page.tsx",
"line": 70,
"text": "选择图片",
"corrected_text": "Select image",
"conflictType": "MULTIPLE_MATCHES",
"conflictReason": "找到 2 个匹配项,需要人工确认"
},
{
"file": "src/app/test-image-crop/page.tsx",
"line": 83,
"text": "选择图片",
"corrected_text": "Select image",
"conflictType": "MULTIPLE_MATCHES",
"conflictReason": "找到 2 个匹配项,需要人工确认"
},
{
"file": "src/app/test-middleware/page.tsx",
"line": 52,
"text": " Middleware 测试页面",
"corrected_text": " Middleware test page",
"conflictType": "TEXT_NOT_FOUND_IN_FILE",
"conflictReason": "在文件中找不到匹配的文本"
},
{
"file": "src/app/test-s3-upload/page.tsx",
"line": 23,
"text": "import { useS3Upload } from '@/hooks/useS3Upload' import { BizTypeEnum } from '@/services/common/types' const { uploading, progress, error, uploadFile } = useS3Upload({ bizType: BizTypeEnum.Role, maxRetries: 3, retryDelay: 2000, onSuccess: (url) => console.log('上传成功:', url), onError: (error) => console.error('上传失败:', error), onProgress: (progress) => console.log('进度:', progress.percentage + '%') }) // 使用 await uploadFile(file)",
"corrected_text": "Import { useS3Upload } from '@/hooks/useS3Upload' import { BizTypeEnum } from '@/services/common/types' const { uploading, progress, error, uploadFile } = useS3Upload({ bizType: BizTypeEnum.Role, maxRetries: 3, retryDelay: 2000, onSuccess: (url) => console.log('上传成功:', url), onError: (error) => console.error('上传失败:', error), onProgress: (progress) => console.log('进度:', progress.percentage + '%') }) // 使用 await uploadFile(file)",
"conflictType": "TEXT_NOT_FOUND_IN_FILE",
"conflictReason": "在文件中找不到匹配的文本"
},
{
"file": "src/components/features/device-info.tsx",
"line": 41,
"text": " 设备信息",
"corrected_text": " Device information",
"conflictType": "TEXT_NOT_FOUND_IN_FILE",
"conflictReason": "在文件中找不到匹配的文本"
},
{
"file": "src/components/features/device-info.tsx",
"line": 82,
"text": " 设备ID说明",
"corrected_text": " Device ID Description",
"conflictType": "TEXT_NOT_FOUND_IN_FILE",
"conflictReason": "在文件中找不到匹配的文本"
},
{
"file": "src/components/features/genderInput.tsx",
"line": 20,
"text": true,
"corrected_text": "True",
"conflictType": "TEXT_NOT_FOUND_IN_FILE",
"conflictReason": "在文件中找不到匹配的文本"
},
{
"file": "src/app/(main)/creator/creator-page.tsx",
"line": 40,
"text": "gift",
"corrected_text": "Gift",
"conflictType": "MULTIPLE_MATCHES",
"conflictReason": "找到 3 个匹配项,需要人工确认"
},
{
"file": "src/app/(main)/test-voice-wave/page.tsx",
"line": 38,
"text": " 整体渐变:",
"corrected_text": " Overall gradual change:",
"conflictType": "TEXT_NOT_FOUND_IN_FILE",
"conflictReason": "在文件中找不到匹配的文本"
},
{
"file": "src/app/(main)/test-voice-wave/page.tsx",
"line": 39,
"text": " 涟漪扩散:",
"corrected_text": " Ripple diffusion:",
"conflictType": "TEXT_NOT_FOUND_IN_FILE",
"conflictReason": "在文件中找不到匹配的文本"
},
{
"file": "src/app/(main)/test-voice-wave/page.tsx",
"line": 40,
"text": "动画停止时所有声波条统一为短高度",
"corrected_text": "When the animation stops, all sound bars are unified to a short height",
"conflictType": "MULTIPLE_MATCHES",
"conflictReason": "找到 2 个匹配项,需要人工确认"
},
{
"file": "src/app/(main)/test-voice-wave/page.tsx",
"line": 41,
"text": " 平滑过渡:",
"corrected_text": " Smooth transition:",
"conflictType": "TEXT_NOT_FOUND_IN_FILE",
"conflictReason": "在文件中找不到匹配的文本"
},
{
"file": "src/app/(main)/test-voice-wave/page.tsx",
"line": 123,
"text": "import { VoiceWaveAnimation } from \"@/components/ui/voice-wave-animation\"; // 基础使用 <VoiceWaveAnimation animated={true} /> // 自定义声波条数量 <VoiceWaveAnimation animated={true} barCount={32} className=\"w-80 h-32\" /> // 停止动画时的效果 <VoiceWaveAnimation animated={false} // 所有声波条变为统一短高度 barCount={24} className=\"w-80 h-32\" />",
"corrected_text": "Import { VoiceWaveAnimation } from \"@/components/ui/voice-wave-animation\"; // 基础使用 <VoiceWaveAnimation animated={true} /> // 自定义声波条数量 <VoiceWaveAnimation animated={true} barCount={32} className=\"w-80 h-32\" /> // 停止动画时的效果 <VoiceWaveAnimation animated={false} // 所有声波条变为统一短高度 barCount={24} className=\"w-80 h-32\" />",
"conflictType": "TEXT_NOT_FOUND_IN_FILE",
"conflictReason": "在文件中找不到匹配的文本"
},
{
"file": "src/app/(main)/test-voice-wave/page.tsx",
"line": 148,
"text": "动画停止时所有声波条统一为短高度",
"corrected_text": "When the animation stops, all sound bars are unified to a short height",
"conflictType": "MULTIPLE_MATCHES",
"conflictReason": "找到 2 个匹配项,需要人工确认"
},
{
"file": "src/app/(main)/vip/vip-page.tsx",
"line": 40,
"text": "Crush Level VIP",
"corrected_text": "CrushLevel VIP",
"conflictType": "MULTIPLE_MATCHES",
"conflictReason": "找到 2 个匹配项,需要人工确认"
},
{
"file": "src/app/(main)/vip/vip-page.tsx",
"line": 45,
"text": "Crush Level VIP",
"corrected_text": "CrushLevel VIP",
"conflictType": "MULTIPLE_MATCHES",
"conflictReason": "找到 2 个匹配项,需要人工确认"
},
{
"file": "src/app/(auth)/login/components/DiscordButton.tsx",
"line": 34,
"text": "Discord登录失败",
"corrected_text": "Login failed",
"conflictType": "MULTIPLE_MATCHES",
"conflictReason": "找到 3 个匹配项,需要人工确认"
},
{
"file": "src/app/(auth)/share/[userId]/share-page.tsx",
"line": 124,
"text": "chat",
"corrected_text": "Chat",
"conflictType": "MULTIPLE_MATCHES",
"conflictReason": "找到 2 个匹配项,需要人工确认"
},
{
"file": "src/app/(main)/create/components/ImageForm.tsx",
"line": 45,
"text": "请上传或生成一张图片",
"corrected_text": "Please upload or generate an image",
"conflictType": "TEXT_NOT_FOUND_IN_FILE",
"conflictReason": "在文件中找不到匹配的文本"
},
{
"file": "src/app/(main)/create/components/ImageForm.tsx",
"line": 418,
"text": "you have reached the maximum number of AI creations.",
"corrected_text": "You have reached the maximum number of AI creations.",
"conflictType": "TEXT_NOT_FOUND_IN_FILE",
"conflictReason": "在文件中找不到匹配的文本"
},
{
"file": "src/app/(main)/generate/components/GenaralImageCard.tsx",
"line": 29,
"text": "image",
"corrected_text": "Image",
"conflictType": "MULTIPLE_MATCHES",
"conflictReason": "找到 3 个匹配项,需要人工确认"
},
{
"file": "src/app/(main)/generate/components/GeneralBuyTimesDialog.tsx",
"line": 106,
"text": "diamond",
"corrected_text": "Diamond",
"conflictType": "MULTIPLE_MATCHES",
"conflictReason": "找到 2 个匹配项,需要人工确认"
},
{
"file": "src/app/(main)/generate/components/GeneralImageWithCountButton.tsx",
"line": 60,
"text": "vip",
"corrected_text": "Vip",
"conflictType": "MULTIPLE_MATCHES",
"conflictReason": "找到 2 个匹配项,需要人工确认"
},
{
"file": "src/app/(main)/edit/[aiId]/image/image-page.tsx",
"line": 34,
"text": "请上传或生成一张图片",
"corrected_text": "Please upload or generate an image",
"conflictType": "TEXT_NOT_FOUND_IN_FILE",
"conflictReason": "在文件中找不到匹配的文本"
},
{
"file": "src/app/(main)/home/components/Meet/MeetCard.tsx",
"line": 172,
"text": true,
"corrected_text": "True",
"conflictType": "TEXT_NOT_FOUND_IN_FILE",
"conflictReason": "在文件中找不到匹配的文本"
},
{
"file": "src/app/(main)/user/[userId]/components/AlbumImageViewerAction.tsx",
"line": 111,
"text": "diamond",
"corrected_text": "Diamond",
"conflictType": "MULTIPLE_MATCHES",
"conflictReason": "找到 2 个匹配项,需要人工确认"
},
{
"file": "src/app/(main)/wallet/charge/result/result-page.tsx",
"line": 69,
"text": "pending",
"corrected_text": "Pending",
"conflictType": "MULTIPLE_MATCHES",
"conflictReason": "找到 3 个匹配项,需要人工确认"
},
{
"file": "src/app/(main)/wallet/components/Dashboard/IncomeCard.tsx",
"line": 43,
"text": "diamond-icon",
"corrected_text": "Diamond-icon",
"conflictType": "MULTIPLE_MATCHES",
"conflictReason": "找到 2 个匹配项,需要人工确认"
},
{
"file": "src/app/(main)/chat/[aiId]/components/ChatDrawers/ChatButtleDrawer.tsx",
"line": 98,
"text": "vip",
"corrected_text": "Vip",
"conflictType": "MULTIPLE_MATCHES",
"conflictReason": "找到 3 个匹配项,需要人工确认"
},
{
"file": "src/app/(main)/chat/[aiId]/components/ChatDrawers/ChatModelDrawer.tsx",
"line": 61,
"text": "diamond",
"corrected_text": "Diamond",
"conflictType": "MULTIPLE_MATCHES",
"conflictReason": "找到 3 个匹配项,需要人工确认"
},
{
"file": "src/app/(main)/chat/[aiId]/components/ChatDrawers/CrushLevelRetrieveDrawer.tsx",
"line": 118,
"text": "Crush Level",
"corrected_text": "CrushLevel",
"conflictType": "MULTIPLE_MATCHES",
"conflictReason": "找到 4 个匹配项,需要人工确认"
},
{
"file": "src/app/(main)/chat/[aiId]/components/ChatMessageAction/ChatInput.tsx",
"line": 109,
"text": "图片上传失败,请重试",
"corrected_text": "Image upload failed, please try again.",
"conflictType": "TEXT_NOT_FOUND_IN_FILE",
"conflictReason": "在文件中找不到匹配的文本"
},
{
"file": "src/app/(main)/chat/[aiId]/components/ChatMessageAction/ChatInput.tsx",
"line": 303,
"text": "图片处理失败,请重试",
"corrected_text": "Image processing failed, please try again.",
"conflictType": "TEXT_NOT_FOUND_IN_FILE",
"conflictReason": "在文件中找不到匹配的文本"
}
]
2025-11-28 06:31:36 +00:00
}