一个有趣的Google电子表格问题,我有一个基于key = value的语言文件,我已将其复制到电子表格中,例如。
titleMessage=Welcome to My Website
youAreLoggedIn=Hello #{user.name} you are now logged in
facebookPublish=Facebook Publishing
我已设法将键/值拆分为两列,然后翻译值列,并使用键和Voila重新加入它!这给了我翻译的语言文件
但是你可能已经发现有一些变量(例如#{user.name})由我的应用程序注入,显然我不想翻译它们。
所以这是我的问题,给出以下单元格内容...
Hello #{user.name} you are now logged in
是否有一个函数会使用TRANSLATE函数转换内容,但忽略#{}内的任何内容(这可能是在sentance中的任何一点)
任何Google Spreadsheet专家都有我的解决方案吗?
非常感谢
答案 0 :(得分:0)
如果最多出现一次#{},那么您可以使用SPLIT函数将字符串分成三个部分,排列如下。
A B C D E
Original =SPLIT(An, "#{}") First piece Tag Rest of string
Translate Keep as is Translate
将这些碎片与CONCATENATE放在一起。
=CONCATINATE(Cn,Dn,En)
答案 1 :(得分:0)
我提出了同样的问题。
假定转义模式为#{sth.sth}
(在正则表达式中为#{[\w.]+}
)。将其替换为Google翻译将其视为不可翻译的术语的字符串,例如VAR
。
翻译后,将其替换为原始样式。
这是我在电子表格的脚本编辑器中执行的操作:
function myTranslate(text, source_language, target_language) {
if(text.toString()) {
var str = text.toString();
var regex = /#{[\w.]+}/g; // g flag for multiple matches
var replace = 'VAR'; // Replace #{variable} to prevent from translation
var vars = str.match(regex).reverse(); // original patterns
str = str.replace(regex, replace);
str = LanguageApp.translate(str, source_language, target_language);
var ret = '';
for (var idx = str.search(replace); idx; idx = str.search(replace)) {
ret += str.slice(0, idx) + vars.pop();
str = str.slice(idx+replace.length);
}
return ret;
}
return null;
}