import { createApp } from 'vue' import { createPinia } from 'pinia' import { createRouter, createWebHashHistory } from 'vue-router' import { createI18n } from 'vue-i18n' import App from './App.vue' import Dashboard from './views/Dashboard.vue' import ProjectDetail from './views/ProjectDetail.vue' import Logs from './views/Logs.vue' import Settings from './views/Settings.vue' import './style.css' import './motion.css' import './database.css' import './runtime.css' import './git.css' import './polish.css' const zh = { app: 'Code Count', dashboard: '仪表盘', logs: '运行日志', settings: '设置', projects: '我的项目', addProject: '添加项目', batch: '批量统计', analyzingProject: '正在统计项目', search: '搜索项目...', totalProjects: '项目总数', totalLines: '代码总行数', commits: 'Git 提交数', code: '代码统计', git: 'Git 分析', structure: '项目结构', insights: '检查', analyze: '重新分析', analyzeGit: '重新分析 Git', empty: '暂无数据', back: '返回', refreshProject: '更新此项目', edit: '编辑', delete: '删除', add: '新增', save: '保存', cancel: '取消', browse: '浏览', selectWSL: '选择 WSL 目录', noWSL: '未发现可用的 WSL 发行版', dashboardSubtitle: '管理和分析你的代码项目', projectName: '项目名称', projectPath: '项目路径', description: '描述(可选)', addProjectTitle: '添加项目', editProjectTitle: '编辑项目', projectGroup: '项目组', allProjectGroups: '全部项目组', myProjectGroup: '我的项目组', addProjectGroup: '新增项目组', editProjectGroup: '编辑项目组', deleteProjectGroup: '删除项目组', projectGroupName: '项目组名称', saveProjectGroup: '保存项目组', saveProject: '保存项目', saving: '正在保存...', pathRequired: '请选择项目目录', unanalyzed: '尚未分析', totalLineCount: '总行数', codeLines: '代码行', commentLines: '注释行', blankLines: '空行', fileCount: '文件数', languageDistribution: '语言分布', languageDetails: '语言详情', files: '文件', lines: '行', workspaceBranch: '工作区分支', viewRef: '统计视图', switchView: '查看统计', checkout: '切换工作区', checkoutConfirm: '确认将工作区切换到分支 {ref}?未提交或未跟踪改动会导致操作被拒绝。', dirty: '工作区存在未提交或未跟踪文件,已拒绝切换', branchChanged: '工作区分支已切换', commitDetail: '提交详情', copyHash: '复制哈希', filesChanged: '变更文件', clearFilter: '清除筛选', selectedDate: '已筛选 {date}', day: '日', week: '周', month: '月', commitCount: '总提交数', addedLines: '新增行数', deletedLines: '删除行数', contributors: '贡献者数', activityHeatmap: '活跃度热力图', branches: '分支信息', recentCommits: '最近提交', commitTrend: '提交趋势', contributorRanking: '贡献者排行', commitsUnit: '提交', gitUnavailable: 'Git 数据不可用', gitUnavailableHint: '当前项目的 Git 信息读取失败,代码统计不会受影响。', gitDetail: '诊断详情', totalFiles: '总文件数', folderCount: '文件夹数', totalSize: '总大小', largeFiles: '大文件数', directoryStructure: '目录结构', folderSize: '文件夹大小', largeFileDetection: '大文件检测(≥ 1 MB)', noLargeFiles: '未发现大文件', deepInsights: '深度检查', deepInsightsHint: '基于代码结构、源码标记和 Git 活跃度识别维护风险。', healthScore: '健康分', highRisk: '高风险', mediumRisk: '中风险', lowRisk: '低风险', issueList: '问题列表', allSeverity: '全部级别', allTypes: '全部类型', noIssues: '暂无风险项', insightDone: '深度检查完成', severity: { high: '高风险', medium: '中风险', low: '低风险' }, quickSettings: '快捷设置', language: '语言', theme: '主题', themeDark: '暗色', themeLight: '浅色', themeSystem: '跟随系统', glassOpacity: '卡片透明度', loadingStyle: '统计 Loading 样式', openSettings: '打开设置页', logSubtitle: '查看应用运行状态和错误信息', autoRefresh: '自动刷新', refresh: '刷新', clearLogs: '清空日志', allLogs: '全部日志', runLogs: '运行日志', errorLogs: '错误日志', totalLogs: '总日志', info: '信息', warning: '警告', error: '错误', noLogs: '暂无日志记录', errors: { PROJECT_PATH_NOT_FOUND: '项目目录不存在', PROJECT_PATH_UNREADABLE: '项目目录不可读取', PROJECT_PATH_NOT_DIRECTORY: '选择的路径不是目录', PROJECT_PATH_DUPLICATE: '该项目目录已经添加', PROJECT_GROUP_NOT_FOUND: '项目组不存在', PROJECT_GROUP_NAME_REQUIRED: '请输入项目组名称', PROJECT_GROUP_DEFAULT_READONLY: '默认项目组不能修改或删除', PROJECT_GROUP_DUPLICATE: '项目组名称已存在', DATABASE_NOT_READY: '数据库尚未初始化', PROJECT_SAVE_FAILED: '项目保存失败', NOT_GIT_REPOSITORY: '该目录不是 Git 仓库', GIT_NOT_INSTALLED: '系统未安装 Git', WSL_NOT_INSTALLED: '系统未安装 WSL', WSL_DISTRO_NOT_FOUND: '未找到对应 WSL 发行版', WSL_GIT_NOT_INSTALLED: 'WSL 发行版内未安装 Git', WSL_PATH_UNREADABLE: 'WSL 路径不可访问', GIT_PERMISSION_DENIED: 'Git 没有权限读取该仓库', GIT_SAFE_DIRECTORY: 'Git 拒绝读取该仓库,请检查 safe.directory 配置', GIT_REF_NOT_FOUND: '未找到该分支或引用', GIT_COMMAND_FAILED: 'Git 命令执行失败' }, task: { start: '开始分析 {project}', scan: '正在扫描文件', count: '正在统计代码', save: '正在保存统计结果', git: '正在读取 Git 历史', completed: '分析完成', failed: '分析失败', cancelled: '分析已取消' } } const en = { app: 'Code Count', dashboard: 'Dashboard', logs: 'Activity Log', settings: 'Settings', projects: 'Projects', addProject: 'Add project', batch: 'Analyze all', analyzingProject: 'Analyzing project', search: 'Search projects...', totalProjects: 'Projects', totalLines: 'Total lines', commits: 'Git commits', code: 'Code stats', git: 'Git analysis', structure: 'Structure', insights: 'Check', analyze: 'Analyze again', analyzeGit: 'Analyze Git again', empty: 'No data', back: 'Back', refreshProject: 'Update this project', edit: 'Edit', delete: 'Delete', add: 'Add', save: 'Save', cancel: 'Cancel', browse: 'Browse', selectWSL: 'Select WSL directory', noWSL: 'No WSL distribution found', dashboardSubtitle: 'Manage and analyze your code projects', projectName: 'Project name', projectPath: 'Project path', description: 'Description (optional)', addProjectTitle: 'Add project', editProjectTitle: 'Edit project', projectGroup: 'Project group', allProjectGroups: 'All project groups', myProjectGroup: 'My project group', addProjectGroup: 'Add project group', editProjectGroup: 'Edit project group', deleteProjectGroup: 'Delete project group', projectGroupName: 'Project group name', saveProjectGroup: 'Save project group', saveProject: 'Save project', saving: 'Saving...', pathRequired: 'Please select a project directory', unanalyzed: 'Not analyzed yet', totalLineCount: 'Total lines', codeLines: 'Code lines', commentLines: 'Comment lines', blankLines: 'Blank lines', fileCount: 'Files', languageDistribution: 'Language distribution', languageDetails: 'Language details', files: 'files', lines: 'lines', workspaceBranch: 'Workspace branch', viewRef: 'Statistics view', switchView: 'View statistics', checkout: 'Switch workspace', checkoutConfirm: 'Switch the workspace to {ref}? Uncommitted or untracked changes will be rejected.', dirty: 'The worktree has uncommitted or untracked files', branchChanged: 'Workspace branch changed', commitDetail: 'Commit details', copyHash: 'Copy hash', filesChanged: 'Changed files', clearFilter: 'Clear filter', selectedDate: 'Filtered by {date}', day: 'Day', week: 'Week', month: 'Month', commitCount: 'Commits', addedLines: 'Added lines', deletedLines: 'Deleted lines', contributors: 'Contributors', activityHeatmap: 'Activity heatmap', branches: 'Branches', recentCommits: 'Recent commits', commitTrend: 'Commit trend', contributorRanking: 'Contributor ranking', commitsUnit: 'commits', gitUnavailable: 'Git data unavailable', gitUnavailableHint: 'Git history could not be read for this project. Code statistics are unaffected.', gitDetail: 'Diagnostic detail', totalFiles: 'Total files', folderCount: 'Folders', totalSize: 'Total size', largeFiles: 'Large files', directoryStructure: 'Directory structure', folderSize: 'Folder size', largeFileDetection: 'Large files (≥ 1 MB)', noLargeFiles: 'No large files found', deepInsights: 'Deep inspection', deepInsightsHint: 'Find maintainability risks from structure, source markers, and Git activity.', healthScore: 'Health', highRisk: 'high', mediumRisk: 'medium', lowRisk: 'low', issueList: 'Issues', allSeverity: 'All severity', allTypes: 'All types', noIssues: 'No issues found', insightDone: 'Inspection completed', severity: { high: 'High', medium: 'Medium', low: 'Low' }, quickSettings: 'Quick settings', language: 'Language', theme: 'Theme', themeDark: 'Dark', themeLight: 'Light', themeSystem: 'System', glassOpacity: 'Card opacity', loadingStyle: 'Analysis loading style', openSettings: 'Open settings', logSubtitle: 'View application status and errors', autoRefresh: 'Auto refresh', refresh: 'Refresh', clearLogs: 'Clear logs', allLogs: 'All logs', runLogs: 'Run logs', errorLogs: 'Error logs', totalLogs: 'Total logs', info: 'Info', warning: 'Warning', error: 'Error', noLogs: 'No logs yet', errors: { PROJECT_PATH_NOT_FOUND: 'Project directory does not exist', PROJECT_PATH_UNREADABLE: 'Project directory is not readable', PROJECT_PATH_NOT_DIRECTORY: 'Selected path is not a directory', PROJECT_PATH_DUPLICATE: 'This project path already exists', PROJECT_GROUP_NOT_FOUND: 'Project group does not exist', PROJECT_GROUP_NAME_REQUIRED: 'Enter a project group name', PROJECT_GROUP_DEFAULT_READONLY: 'The default project group cannot be changed or deleted', PROJECT_GROUP_DUPLICATE: 'Project group name already exists', DATABASE_NOT_READY: 'Database is not initialized', PROJECT_SAVE_FAILED: 'Failed to save project', NOT_GIT_REPOSITORY: 'This directory is not a Git repository', GIT_NOT_INSTALLED: 'Git is not installed', WSL_NOT_INSTALLED: 'WSL is not installed', WSL_DISTRO_NOT_FOUND: 'WSL distribution was not found', WSL_GIT_NOT_INSTALLED: 'Git is not installed inside the WSL distribution', WSL_PATH_UNREADABLE: 'WSL path is not accessible', GIT_PERMISSION_DENIED: 'Git does not have permission to read this repository', GIT_SAFE_DIRECTORY: 'Git refused this repository; check safe.directory', GIT_REF_NOT_FOUND: 'Branch or ref was not found', GIT_COMMAND_FAILED: 'Git command failed' }, task: { start: 'Analyzing {project}', scan: 'Scanning files', count: 'Counting code', save: 'Saving statistics', git: 'Reading Git history', completed: 'Analysis completed', failed: 'Analysis failed', cancelled: 'Analysis cancelled' } } const saved = JSON.parse(localStorage.getItem('cc-settings') || '{}') let theme = new URLSearchParams(location.search).get('theme') || saved.theme || 'dark' if (theme === 'system') theme = matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light' document.documentElement.dataset.theme = theme document.documentElement.style.setProperty('--glass-user-opacity', String((saved.glassOpacity || 55) / 100)) const i18n = createI18n({ legacy: false, locale: saved.locale || 'zh-CN', fallbackLocale: 'en', messages: { 'zh-CN': zh, en } }) const router = createRouter({ history: createWebHashHistory(), routes: [ { path: '/', component: Dashboard }, { path: '/project/:id', component: ProjectDetail }, { path: '/logs', component: Logs }, { path: '/settings', component: Settings } ] }) createApp(App).use(createPinia()).use(router).use(i18n).mount('#app')