如何使用 Google Apps 脚本仅翻译格式化 HTML 代码中的文本?

How to translate only text in formatted HTML code using Google Apps Script?

我一直在尝试翻译 HTML 代码中的文本。这是一个例子:

var s = '<span>X stopped the</span><icon></icon><subject>breakout session</subject>'

当我在 Google Sheet 中尝试 =GOOGLETRANSLATE(s,"en","fi") 时,它还会更改标签格式并将标签转换为简单文本。而翻译应该只针对 X stopped the breakout session。但事实并非如此。

然后我尝试了这个功能:

function TransLang(string){

   return LanguageApp.translate(string,'en', 'fi', {contentType: 'text'});
}

此功能运行良好(一段时间),但之后出现错误

Service invoked too many times in one day.

所以我被困在这里了。有没有什么方法可以翻译没有 translating/messing 和 HTML 标签的 html 代码的简单文本?是否有任何正则表达式可以避免标记并翻译所有其他简单文本?

我希望我能清楚地说明我的问题。如果您有任何建议,请指导我。谢谢

您想要的文字总是在单个 <span> 中吗?还是可以有不止一种 span 或其他元素类型?

这适用于从单个 <span>:

中提取内部文本
function getSpanText() {
  let s = '<span>X stopped the</span><icon></icon><subject>breakout session</subject>';
  var text = s.match("(?<=<span>).+(?=<\/span>)")[0]
  Logger.log(text);
  return text
}

所以,经过大量挖掘,我已经找到了我要找的东西。

function Translator(S){

  var sourceLang = "en";
  var targetLang = "fi"; 
  var url =
    'https://translate.googleapis.com/translate_a/single?client=gtx&sl=' 
    +
    sourceLang +
    '&tl=' +
    targetLang +
    '&dt=t&q=' +
     encodeURI(S);

  var result = JSON.parse(UrlFetchApp.fetch(url).getContentText());  
  return result[0][0][0];
     
}

这个简单的函数调用 Google 翻译 Api 并从那里提取结果。最好的事情是你不必担心标签,因为它们不是由 Google 翻译的,所以只翻译简单的文本。解决方案中只有一个限制,就是Api调用是有限制的,所以不能超过5000calls/day.

为什么不使用 LanguageApp.translate 作为自定义 JS-Function(扩展 >> AppScript)?!

var spanish = LanguageApp.translate('This is a <strong>test</strong>',
                                  'en', 'es', {contentType: 'html'});

// The code will generate "Esta es una <strong>prueba</strong>".

LanguageApp.translate (apidoc) 接受 contentType 作为第四个选项,它可以是 texthtml。 对于大表,请注意每日限额 (quotas)!