You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 10:47:46