Google Translate API中避免特殊占位符被翻译
最近使用Google Translate服务做系统的翻译工作,不过框架支持的数据绑定被翻译后就出大问题了,比如原文:
Page {currentPage} of {totalPage}, total {totalItems} messages.
被翻译后就成了
页 {当前页} {总页},总{全部项}消息。
最后解决办法是在翻译前将内容中的占位符做一个预处理,将其变为不可翻译的格式(这里使用的是 _数字_ ),谷歌遇到这种文字的时候会忽略掉,然后再将翻译结果中的占位符再还原。实现代码:
my $idx = 0;
$ret = $text;
my $pre_rep = sub
{
push @tags, shift;
return '_' . $idx++ . '_';
};
my $post_rep = sub
{
my $idx = shift;
return "{$tags[$idx]}";
};
$ret =~ s/{([\w\?\_\-\.]+)}/&$pre_rep($1)/ge;
my $resp = $service->translate({q => $ret, source => $source, target => $target, format => 'text'});
$ret = $resp->{data}->{translations}->[0]->{translatedText};
$ret =~ s/_(\d+)_/&$post_rep($1)/ge;
Last modified on 2013-03-04