使用JavaScript调用DeepL API翻译Photoshop选中文本层遇语法错误求助
修复Photoshop脚本中的DeepL API翻译语法错误及问题
1. 直接修复语法错误
报错的第13行存在多余的>符号,这是导致语法错误的核心原因,修改后的代码行如下:
const url = `${apiUrl}?auth_key=${API_KEY}&text=${encodedText}&source_lang=${sourceLang}&target_lang=${targetLang}`;
2. 修正DeepL API的POST请求方式
DeepL的v2/translate接口规范要求POST参数放在请求体中,而非URL参数里,调整后的translateText函数如下:
function translateText(text, sourceLang, targetLang) { const apiUrl = 'https://api.deepl.com/v2/translate'; const formData = new FormData(); formData.append('auth_key', API_KEY); formData.append('text', text); formData.append('source_lang', sourceLang); formData.append('target_lang', targetLang); const response = new XMLHttpRequest(); response.open('POST', apiUrl, false); response.send(formData); // 增加错误处理逻辑 if (response.status !== 200) { alert(`翻译请求失败:${response.statusText}`); return text; } try { const translatedText = JSON.parse(response.responseText).translations[0].text; return translatedText; } catch (e) { alert(`解析翻译结果失败:${e.message}`); return text; } }
3. 兼容Photoshop JavaScript引擎
Photoshop的JS引擎对ES6箭头函数支持有限,需将filter和forEach中的箭头函数替换为传统函数表达式:
// 筛选文本层 const textLayers = selectedLayers.filter(function(layer) { return layer.kind === LayerKind.TEXT; }); // 遍历处理文本层 textLayers.forEach(function(layer) { translateLayer(layer, sourceLang); });
4. 细节优化
- 将prompt中的
"替换为转义双引号\",提升代码可读性:const targetLang = prompt(`In welche Sprache soll die Textebene \"${layer.name}\" übersetzt werden?`, 'EN'); - 若使用旧版Photoshop,建议将
const替换为var以确保兼容性。
完整修复后脚本
const API_KEY = 'key'; // 文本翻译函数 function translateText(text, sourceLang, targetLang) { const apiUrl = 'https://api.deepl.com/v2/translate'; const formData = new FormData(); formData.append('auth_key', API_KEY); formData.append('text', text); formData.append('source_lang', sourceLang); formData.append('target_lang', targetLang); const response = new XMLHttpRequest(); response.open('POST', apiUrl, false); response.send(formData); if (response.status !== 200) { alert(`翻译请求失败:${response.statusText}`); return text; } try { const translatedText = JSON.parse(response.responseText).translations[0].text; return translatedText; } catch (e) { alert(`解析翻译结果失败:${e.message}`); return text; } } // 单文本层翻译函数 function translateLayer(layer, sourceLang) { const text = layer.textItem.contents; const targetLang = prompt(`In welche Sprache soll die Textebene \"${layer.name}\" übersetzt werden?`, 'EN'); if (targetLang) { const translatedText = translateText(text, sourceLang, targetLang); layer.textItem.contents = translatedText; } } // 选中文本批量翻译函数 function translateSelectedLayers(sourceLang) { const selectedLayers = app.activeDocument.activeLayers; const textLayers = selectedLayers.filter(function(layer) { return layer.kind === LayerKind.TEXT; }); textLayers.forEach(function(layer) { translateLayer(layer, sourceLang); }); } // 执行翻译(德语转其他语言) translateSelectedLayers('DE');
内容的提问来源于stack exchange,提问作者thowi
相关产品推荐
相关产品推荐

