Initial commit: 译泡 PopLingo v1.0.0
AI 划词翻译 Chrome 扩展(Manifest V3): - 支持 DeepSeek/OpenAI/Kimi/智谱/通义/Gemini/Claude/Ollama 等 10 种服务商 - 流式输出、左右分栏对照、原文一键展开收起 - 划词图标/自动翻译/Alt+T 快捷键/右键菜单四种触发方式
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
/* global chrome */
|
||||
|
||||
const LANGS = ['简体中文', '繁體中文', 'English', '日本語', '한국어', 'Français', 'Deutsch', 'Español', 'Português', 'Italiano', 'Русский', 'العربية', 'हिन्दी', 'ไทย', 'Việt Nam', 'Indonesia'];
|
||||
|
||||
const PRESETS = {
|
||||
deepseek: 'DeepSeek', openai: 'OpenAI', kimi: '月之暗面 Kimi', zhipu: '智谱 GLM',
|
||||
qwen: '通义千问', siliconflow: '硅基流动', gemini: 'Google Gemini',
|
||||
anthropic: 'Anthropic Claude', ollama: 'Ollama(本地)', custom: '自定义(OpenAI 兼容)'
|
||||
};
|
||||
|
||||
const $ = id => document.getElementById(id);
|
||||
|
||||
async function init() {
|
||||
const cfg = await chrome.storage.sync.get({
|
||||
enabled: true, preset: 'deepseek', model: '', apiKey: '',
|
||||
targetLang: '简体中文', triggerMode: 'icon'
|
||||
});
|
||||
|
||||
const langSel = $('targetLang');
|
||||
LANGS.forEach(l => {
|
||||
const o = document.createElement('option');
|
||||
o.value = l; o.textContent = l;
|
||||
langSel.appendChild(o);
|
||||
});
|
||||
langSel.value = cfg.targetLang;
|
||||
$('triggerMode').value = cfg.triggerMode;
|
||||
|
||||
$('enabledToggle').checked = cfg.enabled;
|
||||
updateStatus(cfg.enabled);
|
||||
$('providerName').textContent = PRESETS[cfg.preset] || cfg.preset;
|
||||
$('modelName').textContent = cfg.model || '(未设置)';
|
||||
$('keyStatus').textContent = cfg.apiKey ? '已配置' : '未配置';
|
||||
$('keyStatus').className = 'value ' + (cfg.apiKey ? 'ok' : 'warn');
|
||||
|
||||
$('enabledToggle').addEventListener('change', e => {
|
||||
chrome.storage.sync.set({ enabled: e.target.checked });
|
||||
updateStatus(e.target.checked);
|
||||
});
|
||||
langSel.addEventListener('change', () => chrome.storage.sync.set({ targetLang: langSel.value }));
|
||||
$('triggerMode').addEventListener('change', () => chrome.storage.sync.set({ triggerMode: $('triggerMode').value }));
|
||||
$('openOptions').addEventListener('click', () => chrome.runtime.openOptionsPage());
|
||||
}
|
||||
|
||||
function updateStatus(on) {
|
||||
$('statusText').textContent = on ? 'AI 划词翻译 · 已开启' : 'AI 划词翻译 · 已停用';
|
||||
}
|
||||
|
||||
init();
|
||||
Reference in New Issue
Block a user