翻译软件Litel项目
最近使用ubuntu发现自己常用的Deepl软件没有linux版本的,用了一些老式的linux平台翻译软件有些不习惯,因此萌生了开发一款跨平台、轻量化的翻译软件的想法,下面是让Gemini生成的项目简易文档
项目名称:LiteTrans (暂定)
核心理念: Native Performance, Web Flexibility. (原生性能,Web 灵活性) 技术栈: Tauri (v2) + Vue 3 + Rust
第一部分:除了三大件,你还需要什么? (技术选型补充)
除了 Tauri、Vue 和 Rust,为了实现“低能耗”和“跨平台”,你还需要引入以下关键库和工具:
构建工具:Vite
Vue 的标配。它编译速度极快,且打包体积极其精简。
UI 样式库:Tailwind CSS
推荐理由: 不要用 Element Plus 或 Ant Design,它们太重了。Tailwind 是原子化 CSS,编译后只保留你用到的样式,能让前端体积保持在 KB 级别。
Rust 依赖库 (Crates) - 这是省电的关键:
reqwest: 用于在 Rust 后端发起网络请求(比在前端用 JS 的 fetch 更快且内存管理更好)。
serde & serde_json: 处理数据序列化,连接 Rust 和前端。
tauri-plugin-clipboard-manager: 官方剪贴板插件,比自己写轮子更稳。
tauri-plugin-store:用于本地持久化存储(保存用户设置),轻量级。
翻译源 (API):
为了省电,千万不要在本地跑 AI 模型。
推荐接入:DeepL Free API、Google Translate API 或国内的火山/百度 API。
第二部分:详细项目文档
1. 需求分析 (Requirements)
1.1 核心痛点解决
低能耗: 静态待机 CPU 占用 < 0.1%,内存占用 < 50MB。
无感运行: 只有在需要翻译时才唤醒主进程,其余时间休眠。
1.2 功能需求 (Functional)
划词翻译 (Trigger Mode):
省电策略: 只有当用户按下特定快捷键(如 Alt+D)时,才读取剪贴板并弹窗翻译。拒绝实时轮询剪贴板(这是 DeepL 耗电的元凶)。
极简输入框: 类似 Spotlight 或 Alfred 的搜索框,呼出即用,用完即走。
多源切换: 支持用户填入自己的 API Key(DeepL/OpenAI/Google)。
1.3 跨平台兼容
Windows 10/11 (Webview2)
macOS (WebKit)
Linux (WebKitGTK - 需注意各类发行版的库依赖)
2. 系统架构设计 (Architecture)
核心逻辑流:
用户操作(前端 Vue) -> 触发事件。
Tauri 桥接 -> 将指令传给 Rust 后端。
Rust 后端 -> 执行重活(HTTP 请求、读写文件、操作剪贴板)。
结果返回 -> Rust 将翻译结果传回 Vue 前端渲染。
为什么这样设计? 因为 Rust 的运行效率远高于 JS。将逻辑下沉到 Rust 层,前端只负责“画图”,能大幅降低能耗。
3. 实现步骤与方法 (Implementation)
阶段一:环境搭建与 Hello World
安装 Rust 环境 (rustup) 和 Node.js。
初始化项目:npm create tauri-app@latest -> 选择 Vue -> TypeScript。
配置 tauri.conf.json:设置窗口尺寸、权限(允许访问剪贴板、网络)。
阶段二:Rust 后端核心 (main.rs) 编写 Tauri Commands(指令):
greet: 测试前后端通信。
fetch_translation: 接收文本,调用 reqwest 发送 API 请求到翻译服务,返回 JSON。
代码提示: 使用 async 异步处理,避免阻塞主线程。
阶段三:前端 UI 开发 (Vue + Tailwind)
设计一个极简的卡片式 UI:
上部:源语言输入框(支持自动高度)。
中部:目标语言显示区(支持 Markdown 渲染)。
底部:设置齿轮图标。
状态管理(Pinia):存储当前的翻译源、历史记录。
阶段四:系统级功能整合
全局快捷键: 在 Rust 中注册全局快捷键(Global Shortcut)。
逻辑:按下快捷键 -> 检查窗口是否可见 -> 如果不可见,读取剪贴板内容 -> 填充到输入框 -> 显示窗口 -> 自动触发翻译。
系统托盘 (System Tray): 允许应用最小化到托盘,右键点击“退出”才是真退出。
4. 工期安排 (Timeline - 个人开发者版)
假设你是一个研究生,利用课余时间开发(每天 2-3 小时):
| 阶段 | 时间估算 | 核心任务 | 交付物 |
|---|---|---|---|
| Week 1 | 调研与搭建 | 环境配置,跑通 Tauri+Vue 流程,学习 Rust 基础语法 | 一个能运行的空白 Tauri 窗口 |
| Week 2 | 核心功能 | 实现 Rust端的 API 调用,实现前端 UI 布局 | 输入文字能看到翻译结果 |
| Week 3 | 系统交互 | 实现全局快捷键唤醒、剪贴板读取、托盘图标 | 按快捷键能自动翻译剪贴板内容 |
| Week 4 | 优化与打包 | UI 美化 (Dark Mode),跨平台编译测试 (CI/CD),修复 Bug | Windows .exe, Mac .dmg, Linux .deb |
5. 关键代码片段示例 (给你的“起手式”)
这是你最关键的 Rust 后端函数 (位于 src-tauri/src/lib.rs 或 main.rs),它负责低功耗地去请求数据:
use tauri::command;
use reqwest::Client; // 需要在 Cargo.toml 添加 reqwest
#[derive(serde::Serialize)]
struct TranslationResult {
text: String,
}
#[command]
async fn translate_text(text: String, api_key: String) -> Result<TranslationResult, String> {
let client = Client::new();
// 示例:调用 DeepL API
let res = client.post("https://api-free.deepl.com/v2/translate")
.form(&[
("auth_key", &api_key),
("text", &text),
("target_lang", "ZH"),
])
.send()
.await
.map_err(|e| e.to_string())?;
// 这里省略了解析 JSON 的步骤,直接返回演示
Ok(TranslationResult { text: "翻译结果占位符".into() })
}

浙公网安备 33010602011771号