Loading

翻译软件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() }) 
}
posted @ 2025-12-22 01:02  ADDED  阅读(6)  评论(0)    收藏  举报