如何使用 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 作为第四个选项,它可以是 text
或 html
。
对于大表,请注意每日限额 (quotas)!
我一直在尝试翻译 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 作为第四个选项,它可以是 text
或 html
。
对于大表,请注意每日限额 (quotas)!