您的位置:首页 > 编程语言 > Go语言

利用Google进行无长度限制的文本翻译(无需API,无需Money)

2012-08-11 21:42 645 查看

背景介绍

  前段时间在做一个类似于“一键翻译”的小功能,需要对长文本进行多语种的翻译,本以为很简单,不过在网上找来找去,居然发现没有一个完美的方法来解决,我只好从网上搜来了各种各样的翻译API,并揣摩了其使用方法,不过都不尽完美,其各方面的缺陷大致有:

微软API:利用WCF方式进行翻译,每次翻译英文字数最大为一万两千多个,中文字符的话最多为六七千个,最大200M字符/月的限制,超过限制后要付费。对HTML翻译支持完美,翻译结果也不错,但考虑到免费字符数限制,需做账号轮巡,账号注册的步骤那叫一个繁琐啊……(此方式可做为首选翻译方式,轮巡的翻译功能已实现,有时间了把源码贴上来。 ——qfzhang于2013-05-30更新)

YoudaoAPI:语言支持不够多,只有英文、日文、中文几个之间的互相翻译,且每次请求最多翻译的字符数不能超过200,还有访问频率限制。

GoogleAPI:Google翻译的API,优势明显,翻译结果十分准确,尤其是针对HTML,能够准确跳过HTML标签部分,只翻译文本,但它是付费使用的(v1版为免费版,但接口已关闭),其价格为100万字符/20美金,其价格自然不言而喻。且在使用过程中发现,其标称每次最大翻译字符数不能超过2k,但实际使用时超过1.5k就会报异常。

BaiduAPI:有访问频率限制和长度限制,且翻译结果不理想。

在这四大翻译巨头的各种限制之下,不得不另寻出路……

转机

  鉴于Google翻译的准确性,还是果断选择了Google作为目标,但其价格实在昂贵,只好从其翻译页面上做文章。

  在测试时发现,其GET请求中加上一些参数可以实现翻译功能,于是乎第一个GET版本的翻译功能出炉了,其步骤大约分为以下两步:

构造查询字符串,向翻译页面发送请求

获取返回的HTML,并从中过滤出所需要的结果。(小弟不才,因为这个东西,好好地把正则表达式训练了一把^_^)

  然而,GET方式跟API有同样的问题,超出固定长度后就会报请求异常。于是只能再想其它方法。

  后来小弟尝试了构造POST请求去访问它,没想到……居然成功了……一时高兴,代码不敢独享,在此贴出来,希望大家有遇到此类问题的,一起分享一下。

源代码:

1.代码部分

1). 翻译者接口,为以后扩展使用

View Code

using System;
/// <summary>
///    网站翻译器[Google提供,整页翻译器]
///    ZhangQingFeng    2012-7-27    add
///    说明:
///        如果需要在页面上使用google语言翻译,需要做以下两步:
///        1.将本类中的GoogleTranslateMeta内容放入Head中,如:Response.Write(SiteTranslator.GoogleTranslateMeta);
///        2.将本类中的GoogleTranslateControl内容放入页面中需要显示“选择语言”的地方
/// </summary>
public class SiteTranslator
{
public SiteTranslator()
{
}

/// <summary>
/// Google整页翻译Meta标签,放入Head部位
/// </summary>
public const string GoogleTranslateMeta = @"<meta name=""google-translate-customization"" content=""d83361947aca6bed-626a88e71258e3a8-g3d7ae31013d34b9c-e""></meta>";

/// <summary>
/// Google整页翻译控件,放入需要显示“选择语言”框的地方
/// </summary>
public const string GoogleTranslateControl = @"<div id=""google_translate_element""></div><script type=""text/javascript"">function googleTranslateElementInit() { new google.translate.TranslateElement({pageLanguage: 'zh-CN', layout: google.translate.TranslateElement.InlineLayout.SIMPLE, autoDisplay: false}, 'google_translate_element');}</script><script type=""text/javascript"" src=""//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit""></script>";
}


2). 使用示例,只要将那两个变量分别加在HTML页面的Head中和想出现“选择语言”框的地方即可。





PS:这是小弟第一次写博,园子里很多大鸟,在各位面前献丑了,写出来只是希望大家碰到此类的问题的时候不用再去重复造轮子了,把小弟的轮子改改,或许比那些API更好用。更关键的是:无限制,免费,你懂的。^_^

如果代码对大家有用,还希望大家支持一下。另外,不知道在园子里怎么上传压缩包附件,只能发外链地址了,希望各位老鸟指点一下啊。

代码打包下载地址:http://www.kuaipan.cn/file/id_18864681775007923.htm
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: