您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Translate selected text into another language using the DeepL API.
// ==UserScript== // @license MIT // @name Smart Translate with DeepL API // @namespace http://tampermonkey.net/ // @version 1.3.0 // @description Translate selected text into another language using the DeepL API. // @author Twil3akine // @match *://*/* // @match file:///* // @match ftp://*/* // @include myapp://* // @connect * // @grant GM_xmlhttpRequest // @grant GM_getValue // @grant GM_setValue // ==/UserScript== (function () { 'use strict'; // APIキーを取得または保存 const getApiKey = async () => { let apiKey = await GM_getValue('DEEPL_API_KEY', null); if (!apiKey) { apiKey = prompt('Enter your DeepL API key:'); if (apiKey) { await GM_setValue('DEEPL_API_KEY', apiKey); } else { alert('API key is required to use this script.'); } } return apiKey; }; const requestLanguage = async () => { const normalize = (str) => { return str.replace(/[A-Za-z]/g, (match) => { return String.fromCharCode(match.charCodeAt(0) - 0xFEE0); }); } const langMap = { "arabic": "AR", "bulgarian": "BG", "czech": "CS", "danish": "DA", "german": "DE", "greek": "EL", "english": "EN", "english-british": "EN-GB", "english-american": "EN-US", "spanish": "ES", "estonian": "ET", "finnish": "FI", "french": "FR", "hungarian": "HU", "indonesian": "ID", "italian": "IT", "japanese": "JA", "korean": "KO", "lithuanian": "LT", "latvian": "LV", "norwegian-bokmaal": "NB", "dutch": "NL", "polish": "PL", "portuguese": "PT", "portuguese-brazilian": "PT-BR", "portuguese-european": "PT-PT", "romanian": "RO", "russian": "RU", "slovak": "SK", "slovenian": "SL", "swedish": "SV", "turkish": "TR", "ukrainian": "UK", "chinese": "ZH", "chinese-simplified": "ZH-HANS", "chinese-traditional": "ZH-HANT" }; const input = await new Promise((resolve) => { const userInput = prompt('Please enter the target language for translation (e.g., English, Japanese)'); resolve(userInput); }); const formatText = normalize(input); // 入力があれば、対応する言語コードを返す const langCode = langMap[formatText.toLowerCase()]; if (langCode) { return langCode; } else { alert('Invalid language entered. Defaulting to Japanese.'); } return 'JA'; }; const translateText = async (text, lang) => { const apiKey = await getApiKey(); if (!apiKey) return; const url = 'https://api-free.deepl.com/v2/translate'; const params = { auth_key: apiKey, text: text, target_lang: lang, }; GM_xmlhttpRequest({ method: 'POST', url: url, headers: { 'Content-Type': 'application/x-www-form-urlencoded', }, data: new URLSearchParams(params).toString(), onload: (response) => { try { const result = JSON.parse(response.responseText); const translatedText = result.translations[0].text; alert(`${text}\n\n->\n\n${translatedText}`); console.log(`${text}\n\n->\n\n${translatedText}`); } catch (e) { console.error('Error parsing the response from DeepL:', e); alert('An error occurred while processing the translation.'); } }, onerror: (error) => { console.error('Error with DeepL API request:', error); alert('Error occurred while translating. Please try again later.'); }, }); }; console.log('Smart-Translate is started!'); document.addEventListener('keydown', async (event) => { if (event.altKey && event.key === 't') { const selectedText = window.getSelection().toString().trim(); if (selectedText) { await translateText(selectedText, 'JA'); } else { alert('Please select text!'); } } if (event.altKey && event.key === 'T') { const selectedText = window.getSelection().toString().trim(); if (selectedText) { const selectLanguage = await requestLanguage(); await translateText(selectedText, selectLanguage); } else { alert('Please select text!'); } } if (event.altKey && event.key === 'r') { const apiKey = await getApiKey(); const newKey = prompt(`Please input your new API key\nNow API key: ${apiKey}`); if (newKey) { await GM_setValue('DEEPL_API_KEY', newKey); alert('API key updated successfully.'); } } }); })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址