如何避免谷歌翻译翻译:参数



我正在使用library nikaia/translationsheet,它基本上将Laravel网站上的所有翻译都拉到谷歌电子表格中,使其"很容易"。=GOOGLETRANSLATE(A1)

可译问题出在参数上:

  • :价格
  • :
  • :

我想到了用":"@nonmakingsenseworblablaprice,这样谷歌就无法翻译了。

=SUBSTITUTE(GOOGLETRANSLATE(SUBSTITUTE(B2;":";"@nonmakingsenseworblabla");"ES";"EU");"@nonmakingsenseworblabla";":")

嗯,不知道为什么Google会吃掉一些字母,然后放上新的:

:amount de saldo -> @nonmakingseseworblatamount of saldo

所以我决定做一些事情,比如检测参数并将:amount更改为:a_m_o_u_n_t,这显然是有效的,并且不会被奇怪地解析转换或翻译。

我正在寻找一个解决方案,发现了一个类似的想法,但有问题迁移到电子表格脚本加上不检测参数

有人知道如何检测句子中的所有参数,并在字符或字母之间放置符号,斜杠,破折号等吗?例子:

The amount :amount for this order number :order_id is :price

我也试过正则表达式,但到目前为止还不太幸运

=REGEXREPLACE(GOOGLETRANSLATE(REGEXREPLACE(B22; ":(w)([w]+)"; "{%$1_$2%}"); "ES";  $C$1); "{%(w)_([^_]+)%}"; ":$1$2")

有一个正则表达式来选择字母之间的空格,但祝你在excel或电子表格中好运。演示

最后,我创建了一个脚本来避免参数转换:

function translate(cell, lang) {
const content = cell.toString();
const keys = [];
const enc = content.replace(/:([w_]+)/ig, function(m, param) {
const n = `[§${keys.length}]`;
keys.push(param);
return n; 
});
return LanguageApp.translate(enc, "es", lang).replace(/[§(d+)]/ig, function(m, param) {
return `:${keys[param]}`; 
});

最新更新