Google电子表格翻译,忽略变量名称

时间:2013-03-21 14:43:38

标签: google-sheets

一个有趣的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专家都有我的解决方案吗?

非常感谢

2 个答案:

答案 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;
}