TreeMap
A free, open-source disk-space visualizer. Squarified treemap, duplicate hunting, disk-full forecasting, and cleanup that only ever moves files to the Trash.
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证AI翻译器 — 多供应商、流式输出、边缘部署
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗DeepL 风格的自托管 AI 翻译器 — 多供应商、流式输出、边缘部署
English · 特性 · 截图 · 快速开始 · 部署 · 扩展 · 路线图
ENCRYPTION_KEY 加密后落 D1,明文绝不入库。expertId 切换策略。双语对照、语言自动检测、模型切换与快捷键翻译,开箱即用。
润色、风格、正式度与精简等写作辅助,双栏对照即时输出。
用量概览 — 总请求数、总字符数与各供应商用量一目了然,并可管理用户资料。
供应商 — 新增、编辑多家 AI 供应商,切换模型并设置公开默认。
站点设置 — 登录用户限流、KV 翻译缓存、功能模块开关与数据库维护。
AI 专家 — 基于沉浸式翻译的专业策略,按场景启用科技、金融、GitHub 等领域专家。
pnpm install
pnpm db:init # 初始化本地 D1(wrangler dev 用本地 SQLite)
pnpm dev # 并行启动 web(5173) + api(8787)
打开 http://localhost:5173 ,首页会请求 /api/ping 验证前后端闭环。Vite 把 /api 代理到 http://localhost:8787,开发期同源、无需 CORS。本地密钥由 .dev.vars 提供(已 gitignore)。
打开 http://localhost:5173 。尚未创建管理员时会自动进入初始化页,设定管理员邮箱和密码后进入控制台。再到「供应商」新增(填入真实 API Key 并勾选「设为公开默认」),回到 / 即可翻译。
[!NOTE] 前端打包进同一个 Worker,
wrangler deploy一次发布前后端,同源无需 CORS、无需VITE_API_BASE_URL。部署后首次打开站点进入初始化页,建表并设定管理员账号即可。
push 到 GitHub → Cloudflare 自动构建部署,无需本地装 wrangler、无需配 CI。
1. 创建资源(Dashboard)
opentranslatorKV2. 连接 Worker(Workers Builds)
Dashboard → Workers & Pages → Create → Workers → Import a repository → 选仓库,Root directory 填 /,Build command 填 pnpm build,Deploy command 留空(用默认的 npx wrangler deploy)。
创建后进 Worker → Settings:
JWT_SECRET:JWT 签名密钥,同时作为 POST /api/init 的 X-Init-Secret 凭证ENCRYPTION_KEY:供应商 API Key 加密密钥,务必备份,丢了等于所有密钥作废DB → 选 opentranslator 数据库KV → 选刚才的命名空间3. 打开站点完成初始化
部署成功后打开 Worker 域名。首次访问会进入初始化页:填入 JWT_SECRET(Settings → Variables and Secrets),并设定管理员邮箱与密码。完成后自动登录并进入控制台。密钥不会写入地址栏。
也可以用 curl 只建表(管理员仍须在初始化页创建):
curl -X POST "https://<你的-worker-域名>/api/init" \
-H "X-Init-Secret: <你的-JWT_SECRET>"
4. 配置供应商
控制台 → 供应商 → 新增(填入真实 API Key 并勾选「设为公开默认」)→ 回首页即可翻译。
5. 后续更新
改完代码 push 到 main,Cloudflare 自动重新构建部署。若有增量迁移,打开站点会再次进入初始化页,一键升级(无需密钥)。
wrangler login
wrangler d1 create opentranslator # 用返回的 ID 取消注释 wrangler.toml 里的 d1 段并填入
wrangler kv namespace create KV # 同上,取消注释 kv 段并填入
wrangler secret put JWT_SECRET
wrangler secret put ENCRYPTION_KEY
pnpm build # 构建前端到 ./dist
wrangler deploy # 一次部署前端 + API
# 打开 Worker 域名,在初始化页完成建表与管理员账号
# 或:curl -X POST https://api.yourdomain.com/api/init -H "X-Init-Secret: $(grep JWT_SECRET .dev.vars | cut -d= -f2)"
| 类型 | 名称 | 说明 |
|---|---|---|
| Secret | JWT_SECRET | JWT 签名密钥,32 位以上随机字符串,同时作为 POST /api/init 的 X-Init-Secret 凭证 |
| Secret | ENCRYPTION_KEY | 供应商 API Key 加密密钥,务必备份 |
| Variable | ENV | 环境标识,默认 development |
| Variable | ORIGINS | 跨域来源白名单(逗号分隔);同源部署无需填写 |
| Binding (D1) | DB | 绑定到 opentranslator 数据库 |
| Binding (KV) | KV | 绑定到设置/缓存命名空间 |
| Binding (DO) | RATE_LIMITER | Durable Object,部署时自动创建,无需 ID |
| Binding (Assets) | ASSETS | 前端静态资源,wrangler.toml 里已配,无需手动绑定 |
| 层 | 技术 |
|---|---|
| 前端 | Vite、React 19、React Router 7、TypeScript |
| 后端 | Hono、Cloudflare Workers、TypeScript |
| 数据 | Cloudflare D1(持久)、KV(缓存/设置)、Durable Object(限流) |
| 部署 | Cloudflare Workers(前端产物 + API 同一 Worker,[assets] 绑定) |
| 工程 | pnpm、TypeScript paths 别名共享类型 |
src/ # Hono Worker 后端(REST/SSE + 静态资源服务)
providers/ # 供应商 adapter + 注册表 + 表单 schema
routes/ # translate / auth / admin-*
db/ # D1 表结构 + 幂等初始化器
durable-objects/ # 限流器
features/ # 功能模块后端
web/ # Vite + React SPA(构建产物输出到根 dist/)
src/routes/ # 翻译页 / 初始化页 / 登录页 / Dashboard
src/features/ # 功能模块注册表(Dashboard 动态渲染)
shared-types/ # 前后端共享的 TypeScript 类型定义
wrangler.toml # Worker 配置(含 [assets] 静态资源绑定)
docs/images/ # README 截图
src/providers/ 加一个 adapter(实现 TranslationProvider 接口);OpenAI 兼容厂商可直接复用 openai.ts。src/providers/index.ts 加一行 providerRegistry.register(...)。src/providers/schema.ts 加一条表单字段定义,Dashboard 自动渲染配置表单。核心路由与翻译逻辑无需改动。
web/src/features/ 加一个组件,并在 features/registry.ts 注册。OpenRouter 供应商的「模型」一行一个;在模型名后加 :供应商1,供应商2,即可只走指定的
上游供应商(按书写顺序优先,不回落列表外的供应商):
anthropic/claude-sonnet-4.5:anthropic,google
deepseek/deepseek-r1:deepinfra/turbo
meta-llama/llama-3.2-3b-instruct:free # :free 是模型变体,不是锁定
供应商名用 OpenRouter 的 provider slug(模型页可复制)。模型自带变体后缀时写成
模型名:free:供应商1,供应商2。对应 OpenRouter 的 provider.order +
allow_fallbacks: false,详见 Provider Routing。
/api/translate、SSE、前端翻译页/api/admin/features DB 驱动开关、Dashboard 动态导航;公开访问与 AI 专家等模块插件化欢迎提 Issue 与 PR。新增供应商或功能模块时,请遵循上面的「扩展点」两节,保持注册表式扩展。
本项目基于 GPL-3.0 发布。派生项目必须以同等协议开源。