49 lines
2.0 KiB
JavaScript
49 lines
2.0 KiB
JavaScript
/* 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(普通 API)', 'zhipu-coding': '智谱 GLM Coding Plan',
|
||
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();
|