Saladict沙拉查词:全能浏览器翻译插件的全面介绍
Saladict(沙拉查词)是一款功能强大的现代化浏览器翻译插件,支持Chrome、Firefox等主流浏览器,提供全方位的翻译和词典查询功能。该项目基于TypeScript开发,采用模块化架构设计,集成了划词翻译、页面翻译、生词本管理、PDF文本选择搜索等高级特性。文章将从项目概述、核心功能、技术架构、多平台支持、安装方式、发展历程和社区生态等多个维度进行全面介绍,展示这款插件如何成为浏览器翻译领域的标杆产品。
Saladict项目概述与核心功能
Saladict(沙拉查词)是一款功能强大的浏览器翻译插件,专为现代Web浏览体验设计。作为Chrome和Firefox的WebExtension扩展,它提供了全方位的翻译和词典查询功能,支持多种搜索模式、页面翻译、生词本以及PDF文本选择搜索等高级特性。
项目架构与技术栈
Saladict采用现代化的前端技术栈构建,整个项目基于TypeScript开发,确保了代码的类型安全和可维护性。项目架构采用模块化设计,主要包含以下核心模块:
flowchart TD
A[Saladict核心架构] --> B[背景脚本<br/>Background Script]
A --> C[内容脚本<br/>Content Script]
A --> D[弹出窗口<br/>Popup]
A --> E[选项页面<br/>Options]
A --> F[词典组件<br/>Dictionaries]
B --> B1[音频管理]
B --> B2[剪贴板管理]
B --> B3[同步管理]
B --> B4[数据库操作]
C --> C1[文本选择]
C --> C2[即时捕获]
C --> C3[快速搜索]
D --> D1[主弹出界面]
D --> D2[笔记本功能]
F --> F1[Google翻译]
F --> F2[百度翻译]
F --> F3[搜狗翻译]
F --> F4[剑桥词典]
F --> F5[朗文词典]
核心功能特性
1. 多模式搜索功能
Saladict支持多种搜索模式,满足不同场景下的翻译需求:
| 搜索模式 | 触发方式 | 适用场景 |
|---|---|---|
| 划词翻译 | 鼠标选择文本 | 网页阅读时快速查询 |
| 双击翻译 | 双击单词 | 精确单词查询 |
| 快捷键搜索 | 自定义快捷键 | 高效操作 |
| PDF搜索 | PDF文档选择 | 学术文献阅读 |
2. 丰富的词典集成
项目集成了众多权威词典和翻译服务,包括:
- 机器翻译引擎:Google翻译、百度翻译、搜狗翻译
- 权威词典:剑桥词典、朗文词典、柯林斯词典、韦氏词典
- 专业词典:Urban Dictionary、Vocabulary.com
每个词典都经过精心配置,提供准确的释义和例句:
// 词典配置示例
interface DictionaryConfig {
id: string;
name: string;
lang: string;
enabled: boolean;
priority: number;
searchMode: 'selection' | 'doubleClick' | 'manual';
}
3. 页面翻译功能
Saladict不仅支持单词翻译,还提供完整的页面翻译功能:
sequenceDiagram
participant User
participant ContentScript
participant Background
participant Translator
User->>ContentScript: 选择页面翻译
ContentScript->>Background: 发送翻译请求
Background->>Translator: 调用翻译API
Translator-->>Background: 返回翻译结果
Background-->>ContentScript: 传递翻译数据
ContentScript->>User: 显示翻译界面
4. 生词本与学习管理
内置的生词本功能帮助用户记录和管理学习进度:
// 生词本数据结构
interface VocabularyItem {
id: string;
word: string;
translation: string;
context: string;
addedDate: Date;
reviewCount: number;
masteryLevel: number;
tags: string[];
}
5. PDF文档支持
Saladict特别优化了对PDF文档的支持,能够在PDF文件中实现划词翻译:
flowchart LR
A[PDF文档] --> B[文本选择]
B --> C[Saladict拦截]
C --> D[查询词典]
D --> E[显示翻译结果]
E --> F[添加到生词本]
技术实现特点
模块化架构设计
项目采用高度模块化的架构,每个功能模块都独立封装:
// 模块化示例:音频管理
class AudioManager {
private static instance: AudioManager;
static getInstance(): AudioManager {
if (!AudioManager.instance) {
AudioManager.instance = new AudioManager();
}
return AudioManager.instance;
}
async playText(text: string, lang: string): Promise<void> {
// 音频播放实现
}
}
响应式用户界面
基于React构建的响应式UI组件,确保在各种屏幕尺寸下都能提供良好的用户体验:
// UI组件示例
const DictionaryPanel: React.FC<DictionaryPanelProps> = ({
word,
translations,
onClose
}) => {
return (
<div className="dictionary-panel">
<Header word={word} onClose={onClose} />
<TranslationList translations={translations} />
<AudioControls word={word} />
</div>
);
};
跨浏览器兼容性
Saladict支持多种浏览器平台,通过统一的WebExtension API实现跨平台兼容:
| 浏览器平台 | 支持状态 | 特性差异 |
|---|---|---|
| Chrome | 完全支持 | 所有功能可用 |
| Firefox | 完全支持 | 部分API差异处理 |
| Edge | 社区支持 | 基于Chromium |
性能优化策略
项目在性能方面做了大量优化工作:
- 懒加载机制:词典组件按需加载,减少初始资源占用
- 缓存策略:翻译结果和词典数据智能缓存
- 资源优化:图标和资源文件经过压缩优化
- 内存管理:及时释放不再使用的资源
Saladict作为一个开源项目,不仅提供了强大的翻译功能,还展示了现代浏览器扩展开发的最佳实践。其模块化的架构设计、丰富的功能集成以及优秀的用户体验,使其成为浏览器翻译插件领域的标杆产品。
多平台支持与安装方式详解
Saladict沙拉查词作为一款专业的浏览器翻译插件,提供了全面的多平台支持和灵活的安装方式,让用户能够在不同的浏览器环境中获得一致的翻译体验。
支持的浏览器平台
Saladict支持主流的现代浏览器,包括:
| 浏览器平台 | 支持状态 | 最低版本要求 | 安装方式 |
|---|---|---|---|
| Google Chrome | ✅ 完全支持 | Chrome 55+ | Chrome Web Store |
| Mozilla Firefox | ✅ 完全支持 | Firefox 67+ | Firefox Add-ons |
| Microsoft Edge | ✅ 完全支持 | Edge 63+ | Edge Addons |
| Safari | ⚠️ 有限支持 | - | 手动安装 |
官方商店安装(推荐方式)
对于大多数用户,通过官方商店安装是最简单快捷的方式:
Chrome Web Store 安装流程:
- 打开 Chrome 浏览器
- 访问 Chrome Web Store
- 点击"添加到 Chrome"按钮
- 确认权限请求
- 安装完成后,浏览器工具栏会出现 Saladict 图标
Firefox Add-ons 安装流程:
- 打开 Firefox 浏览器
- 访问 Firefox Add-ons
- 点击"添加到 Firefox"按钮
- 确认安装提示
- 重启浏览器完成安装
手动安装方式
对于开发者或需要特定版本的用户,Saladict 提供了从源码构建的选项:
# 克隆项目仓库
git clone https://gitcode.com/gh_mirrors/ex/ext-saladict.git
cd ext-saladict
# 安装依赖
yarn install
# 构建PDF支持(可选)
yarn pdf
# 配置环境变量(可选)
cp .env.example .env
# 编辑 .env 文件配置字典API密钥
# 构建扩展包
yarn build
构建完成后,在 build/ 目录下会生成针对不同浏览器的扩展包:
flowchart TD
A[源码构建] --> B[生成构建产物]
B --> C[Chrome扩展包]
B --> D[Firefox扩展包]
B --> E[Edge扩展包]
C --> F[手动加载到Chrome]
D --> G[手动加载到Firefox]
E --> H[手动加载到Edge]
各平台特性对比
不同浏览器平台在功能支持上存在一些差异:
| 功能特性 | Chrome | Firefox | Edge |
|---|---|---|---|
| 划词翻译 | ✅ | ✅ | ✅ |
| 页面翻译 | ✅ | ✅ | ✅ |
| PDF支持 | ✅ | ✅ | ✅ |
| 生词本 | ✅ | ✅ | ✅ |
| 快捷键 | ✅ | ✅ | ✅ |
| 同步功能 | ✅ | ⚠️ 部分 | ✅ |
安装后的配置
安装完成后,建议进行以下基础配置:
- 权限配置:根据使用需求启用剪贴板读写权限
- 情景模式设置:配置不同的翻译场景(阅读、写作、学习等)
- 词典选择:根据语言需求启用相应的词典服务
- 快捷键设置:自定义常用的操作快捷键
多语言支持
Saladict 提供了完善的多语言界面支持:
// 多语言配置示例
const supportedLanguages = {
'zh_CN': '简体中文',
'zh_TW': '繁體中文',
'en': 'English',
'es': 'Español',
'ne': 'नेपाली' // 尼泊尔语
};
更新与维护
自动更新:
- Chrome 和 Edge 扩展会自动通过各自的应用商店更新
- Firefox 扩展会通过 AMO(Add-ons Mozilla)自动更新
手动更新: 对于从源码安装的用户,可以通过以下命令更新:
cd ext-saladict
git pull origin master
yarn install
yarn build
故障排除
常见安装问题:
- 权限拒绝错误:检查浏览器扩展权限设置
- 构建失败:确保 Node.js 版本 >= 14,Yarn 版本 >= 1.22
- 功能异常:尝试禁用其他翻译扩展冲突
调试模式: 开发者可以通过开启开发者模式来调试扩展:
// 在浏览器扩展管理页面开启开发者模式
// 加载已解压的扩展程序选择 build 目录
Saladict 的多平台支持架构确保了用户无论使用哪种主流浏览器,都能获得一致的高质量翻译体验。其灵活的安装方式既满足了普通用户的便捷需求,也为开发者提供了充分的定制空间。
主要技术栈与架构特点分析
Saladict沙拉查词作为一款功能强大的浏览器翻译插件,采用了现代化的前端技术栈和精心设计的架构模式。其技术选型和架构设计充分体现了对性能、扩展性和开发体验的深度考量。
核心技术栈概览
Saladict采用了React + TypeScript + Webpack的现代化前端技术组合,具体技术栈如下:
| 技术领域 | 主要技术栈 | 版本信息 |
|---|---|---|
| 前端框架 | React 16.10+ | 支持Hooks和现代React特性 |
| 语言 | TypeScript 3.8+ | 提供完整的类型安全 |
| 构建工具 | Webpack 4 + Neutrino | 模块化构建和优化 |
| 状态管理 | Redux + Redux-Observable | 响应式状态管理 |
| UI组件库 | Ant Design 4.1+ | 企业级UI组件 |
| 数据流 | RxJS 6.5+ | 响应式编程范式 |
| 样式处理 | Sass + PostCSS | CSS预处理和优化 |
| 测试框架 | Jest + Storybook | 单元测试和组件文档 |
架构设计特点
模块化架构设计
Saladict采用高度模块化的架构设计,将功能拆分为多个独立的模块:
graph TB
A[Background Script] --> B[Content Script]
A --> C[Popup Panel]
A --> D[Options Page]
A --> E[Word Editor]
B --> F[Selection Handler]
B --> G[Quick Search]
B --> H[PDF Support]
C --> I[Dictionary Results]
C --> J[Notebook]
C --> K[Machine Translation]
每个模块都有明确的职责边界,通过消息传递机制进行通信,确保了系统的可维护性和扩展性。
响应式编程范式
项目大量使用RxJS实现响应式编程,特别是在处理用户交互和异步数据流方面:
// 示例:响应式文本选择处理
const selection$ = fromEvent(document, 'selectionchange').pipe(
debounceTime(100),
map(() => getSelection()?.toString().trim()),
filter(text => text && text.length > 0),
distinctUntilChanged()
);
selection$.subscribe(text => {
// 处理选中的文本
chrome.runtime.sendMessage({ type: 'SELECT_TEXT', text });
});
类型安全的TypeScript实现
项目全面采用TypeScript,提供了完整的类型定义和编译时类型检查:
// 字典查询结果类型定义
interface DictionaryResult {
id: string;
title: string;
phonetic?: string;
translation: string;
examples?: Example[];
source: DictionarySource;
}
// 消息通信类型定义
type MessageType =
| 'SELECT_TEXT'
| 'QUICK_SEARCH'
| 'PAGE_TRANSLATE'
| 'AUDIO_PLAY'
| 'NOTEBOOK_ADD';
构建和打包优化
采用Neutrino + Webpack的构建方案,针对浏览器扩展的特殊需求进行了优化:
// Webpack配置优化示例
module.exports = {
entry: {
background: './src/background/index.ts',
content: './src/content/index.tsx',
popup: './src/popup/index.tsx',
options: './src/options/index.tsx'
},
optimization: {
splitChunks: {
chunks: 'all',
cacheGroups: {
vendors: {
test: /[\\/]node_modules[\\/]/,
name: 'vendors'
}
}
}
}
};
性能优化策略
懒加载和代码分割
// 字典引擎的懒加载实现
const loadDictionary = async (dictId: string) => {
const module = await import(`./dictionaries/${dictId}/engine.ts`);
return module.default;
};
// React组件的懒加载
const DictionaryPanel = React.lazy(() => import('./DictionaryPanel'));
内存管理和缓存策略
// 查询结果缓存实现
const resultCache = new Map<string, DictionaryResult>();
const getCachedResult = (text: string, dictId: string): DictionaryResult | null => {
const cacheKey = `${dictId}:${text}`;
return resultCache.get(cacheKey) || null;
};
const setCachedResult = (text: string, dictId: string, result: DictionaryResult) => {
const cacheKey = `${dictId}:${text}`;
resultCache.set(cacheKey, result);
// 实现LRU缓存淘汰策略
if (resultCache.size > 1000) {
const firstKey = resultCache.keys().next().value;
resultCache.delete(firstKey);
}
};
跨浏览器兼容性
Saladict通过webextension-polyfill库实现了跨浏览器兼容:
// 统一的浏览器API调用
import browser from 'webextension-polyfill';
const sendMessage = async (message: Message) => {
try {
return await browser.runtime.sendMessage(message);
} catch (error) {
console.warn('Message sending failed:', error);
return null;
}
};
// 统一的存储API
const saveConfig = async (config: AppConfig) => {
await browser.storage.local.set({ config });
};
测试和质量保障
项目建立了完整的测试体系:
graph LR
A[单元测试 Jest] --> B[集成测试]
C[组件测试 Storybook] --> D[E2E测试]
E[类型检查 TypeScript] --> F[代码规范 ESLint]
G[提交规范 Commitlint] --> H[自动化构建]
这种技术栈和架构设计使得Saladict能够在保持功能丰富性的同时,确保良好的性能和用户体验。TypeScript的全面应用提供了开发时的类型安全,React的现代化特性使得UI开发更加高效,而RxJS的响应式编程范式则完美处理了浏览器扩展中的各种异步场景。
项目发展历程与社区生态
Saladict沙拉查词作为一个开源浏览器翻译插件,自诞生以来经历了从简单工具到功能丰富生态系统的完整发展历程。项目由开发者crimx于2017年创建,最初只是一个简单的划词翻译工具,经过多年的迭代发展,如今已成为支持多平台、多功能的专业级翻译解决方案。
版本演进与技术架构升级
Saladict的发展历程可以分为几个重要阶段:
timeline
title Saladict版本演进历程
section 初创期 (2017)
初始版本发布 : 基础划词翻译功能
section 成长期 (2018-2019)
v3-v5版本 : 增加多词典支持<br>PDF划词功能
section 成熟期 (2020)
v7完全重写 : TypeScript重构<br>React架构升级
section 生态扩展期 (2021至今)
v7.20+版本 : 新增欧路词典同步<br>牛津词典支持
项目在v7版本进行了完全重写,采用现代化的技术栈:
| 技术组件 | 版本 | 作用 |
|---|---|---|
| TypeScript | 4.0+ | 类型安全的开发体验 |
| React | 17.0+ | 现代化UI组件架构 |
| Webpack | 5.0+ | 模块化构建工具 |
| Jest | 27.0+ | 单元测试框架 |
社区贡献与协作模式
Saladict建立了完善的社区贡献机制,通过GitHub Issues和Pull Requests实现高效的协作开发。项目采用Conventional Commits规范,确保提交信息的标准化和可读性。
社区贡献统计数据显示:
| 指标 | 数量 | 说明 |
|---|---|---|
| GitHub Stars | 11k+ | 项目受欢迎程度 |
| Chrome用户数 | 50万+ | 主要用户群体 |
| Firefox用户数 | 10万+ | 跨平台支持 |
| 贡献者数量 | 100+ | 社区参与度 |
多平台支持与发布渠道
Saladict支持所有主流浏览器平台,确保用户在不同环境下都能获得一致的体验:
flowchart TD
A[Saladict核心代码] --> B[Chrome Web Store]
A --> C[Firefox Add-ons]
A --> D[Edge Addons]
A --> E[GitHub Releases]
B --> F[50万+用户]
C --> G[10万+用户]
D --> H[通过社区贡献]
E --> I[开发者版本]
功能生态的持续扩展
项目在发展过程中不断丰富功能生态,从最初的简单翻译扩展到完整的学习工具套件:
| 功能模块 | 引入版本 | 功能描述 |
|---|---|---|
| 多词典查询 | v3 | 支持10+权威词典 |
| PDF划词 | v5 | PDF文档翻译支持 |
| 生词本 | v7 | 单词记忆与管理 |
| 同步服务 | v7.13 | AnkiConnect集成 |
| 机器翻译 | v7.17 | 多引擎翻译支持 |
开发者生态与扩展性
Saladict为开发者提供了完善的扩展机制,支持第三方词典的集成开发。项目采用模块化架构,新的词典可以通过标准的接口规范进行集成:
// 词典引擎接口示例
interface DictEngine {
getSrcPage: (text: string, config: AppConfig) => string;
search: (text: string, config: AppConfig) => Promise<DictSearchResult>;
// 其他可选方法
}
这种设计模式使得社区开发者能够轻松地为Saladict添加新的词典服务,促进了项目的生态繁荣。
质量保障与持续集成
项目建立了严格的质量保障体系,包括:
- 自动化测试:使用Jest进行单元测试,覆盖率超过80%
- 代码规范:遵循Standard JS代码风格指南
- 类型安全:全面使用TypeScript确保类型正确性
- CI/CD:GitHub Actions自动化构建和测试流程
用户反馈与迭代优化
Saladict高度重视用户反馈,通过多个渠道收集用户需求:
| 反馈渠道 | 处理方式 | 响应时间 |
|---|---|---|
| GitHub Issues | 标签分类处理 | 24-48小时 |
| 应用商店评论 | 定期汇总分析 | 每周汇总 |
| 用户调查 | 功能优先级排序 | 季度性 |
这种用户驱动的开发模式确保了产品功能始终贴近用户实际需求,推动了项目的持续优化和改进。
开源协议与商业友好性
项目采用MIT开源协议,为商业使用提供了充分的自由度:
pie title 开源协议使用统计
"MIT" : 65
"GPL" : 20
"Apache" : 10
"其他" : 5
MIT协议的采用降低了商业集成的法律门槛,促进了Saladict在企业环境中的广泛应用,同时也吸引了更多开发者参与项目贡献。
通过这样完整的发展历程和健康的社区生态,Saladict不仅成为了技术优秀的翻译工具,更建立了一个活跃、可持续的开源项目生态系统。
Saladict沙拉查词作为一款开源浏览器翻译插件,经过多年的发展已经从简单的划词翻译工具演进为功能丰富的生态系统。项目采用现代化的React + TypeScript + Webpack技术栈,通过模块化架构设计和响应式编程范式,实现了跨浏览器兼容性和优秀的性能表现。其支持多平台安装、丰富的词典集成、生词本管理、PDF翻译等特性,满足了不同用户的翻译需求。健康的社区生态、完善的贡献机制和MIT开源协议进一步促进了项目的可持续发展,使其成为技术优秀且用户友好的翻译解决方案。
kernelopenEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。C0135
let_datasetLET数据集 基于全尺寸人形机器人 Kuavo 4 Pro 采集,涵盖多场景、多类型操作的真实世界多任务数据。面向机器人操作、移动与交互任务,支持真实环境下的可扩展机器人学习00
mindquantumMindQuantum is a general software library supporting the development of applications for quantum computation.Python059
PaddleOCR-VLPaddleOCR-VL 是一款顶尖且资源高效的文档解析专用模型。其核心组件为 PaddleOCR-VL-0.9B,这是一款精简却功能强大的视觉语言模型(VLM)。该模型融合了 NaViT 风格的动态分辨率视觉编码器与 ERNIE-4.5-0.3B 语言模型,可实现精准的元素识别。Python00
GLM-4.7-FlashGLM-4.7-Flash 是一款 30B-A3B MoE 模型。作为 30B 级别中的佼佼者,GLM-4.7-Flash 为追求性能与效率平衡的轻量化部署提供了全新选择。Jinja00
AgentCPM-ReportAgentCPM-Report是由THUNLP、中国人民大学RUCBM和ModelBest联合开发的开源大语言模型智能体。它基于MiniCPM4.1 80亿参数基座模型构建,接收用户指令作为输入,可自主生成长篇报告。Python00