java使用谷歌翻译

工具类

package com.zgz.crud.test;

import com.alibaba.fastjson.JSONArray;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

import java.io.IOException;
import java.nio.charset.Charset;
import java.util.*;

public class GT {
    private static final String PATH = "https://translate.googleapis.com/translate_a/single"; // 地址
    private static final String CLIENT = "gtx";

    private static final String USER_AGENT = "Mozilla/5.0";// "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6)
                                                            // AppleWebKit/537.36 (KHTML, like Gecko)
                                                            // Chrome/60.0.3112.113 Safari/537.36";

    private static final Map<String, String> LANGUAGE_MAP = new HashMap();

    private static GT _instance = null;

    /**
     * 获取单例
     *
     * @return
     */
    public static GT getInstance() {
        if (null == _instance) {
            _instance = new GT();
            _instance.init();
        }
        return _instance;
    }

    /**
     * 初始化语言类
     */
    private void init() {
        LANGUAGE_MAP.put("auto", "Automatic");
        LANGUAGE_MAP.put("af", "Afrikaans");
        LANGUAGE_MAP.put("sq", "Albanian");
        LANGUAGE_MAP.put("am", "Amharic");
        LANGUAGE_MAP.put("ar", "Arabic");
        LANGUAGE_MAP.put("hy", "Armenian");
        LANGUAGE_MAP.put("az", "Azerbaijani");
        LANGUAGE_MAP.put("eu", "Basque");
        LANGUAGE_MAP.put("be", "Belarusian");
        LANGUAGE_MAP.put("bn", "Bengali");
        LANGUAGE_MAP.put("bs", "Bosnian");
        LANGUAGE_MAP.put("bg", "Bulgarian");
        LANGUAGE_MAP.put("ca", "Catalan");
        LANGUAGE_MAP.put("ceb", "Cebuano");
        LANGUAGE_MAP.put("ny", "Chichewa");
        LANGUAGE_MAP.put("zh_cn", "Chinese Simplified");
        LANGUAGE_MAP.put("zh_tw", "Chinese Traditional");
        LANGUAGE_MAP.put("co", "Corsican");
        LANGUAGE_MAP.put("hr", "Croatian");
        LANGUAGE_MAP.put("cs", "Czech");
        LANGUAGE_MAP.put("da", "Danish");
        LANGUAGE_MAP.put("nl", "Dutch");
        LANGUAGE_MAP.put("en", "English");
        LANGUAGE_MAP.put("eo", "Esperanto");
        LANGUAGE_MAP.put("et", "Estonian");
        LANGUAGE_MAP.put("tl", "Filipino");
        LANGUAGE_MAP.put("fi", "Finnish");
        LANGUAGE_MAP.put("fr", "French");
        LANGUAGE_MAP.put("fy", "Frisian");
        LANGUAGE_MAP.put("gl", "Galician");
        LANGUAGE_MAP.put("ka", "Georgian");
        LANGUAGE_MAP.put("de", "German");
        LANGUAGE_MAP.put("el", "Greek");
        LANGUAGE_MAP.put("gu", "Gujarati");
        LANGUAGE_MAP.put("ht", "Haitian Creole");
        LANGUAGE_MAP.put("ha", "Hausa");
        LANGUAGE_MAP.put("haw", "Hawaiian");
        LANGUAGE_MAP.put("iw", "Hebrew");
        LANGUAGE_MAP.put("hi", "Hindi");
        LANGUAGE_MAP.put("hmn", "Hmong");
        LANGUAGE_MAP.put("hu", "Hungarian");
        LANGUAGE_MAP.put("is", "Icelandic");
        LANGUAGE_MAP.put("ig", "Igbo");
        LANGUAGE_MAP.put("id", "Indonesian");
        LANGUAGE_MAP.put("ga", "Irish");
        LANGUAGE_MAP.put("it", "Italian");
        LANGUAGE_MAP.put("ja", "Japanese");
        LANGUAGE_MAP.put("jw", "Javanese");
        LANGUAGE_MAP.put("kn", "Kannada");
        LANGUAGE_MAP.put("kk", "Kazakh");
        LANGUAGE_MAP.put("km", "Khmer");
        LANGUAGE_MAP.put("ko", "Korean");
        LANGUAGE_MAP.put("ku", "Kurdish (Kurmanji)");
        LANGUAGE_MAP.put("ky", "Kyrgyz");
        LANGUAGE_MAP.put("lo", "Lao");
        LANGUAGE_MAP.put("la", "Latin");
        LANGUAGE_MAP.put("lv", "Latvian");
        LANGUAGE_MAP.put("lt", "Lithuanian");
        LANGUAGE_MAP.put("lb", "Luxembourgish");
        LANGUAGE_MAP.put("mk", "Macedonian");
        LANGUAGE_MAP.put("mg", "Malagasy");
        LANGUAGE_MAP.put("ms", "Malay");
        LANGUAGE_MAP.put("ml", "Malayalam");
        LANGUAGE_MAP.put("mt", "Maltese");
        LANGUAGE_MAP.put("mi", "Maori");
        LANGUAGE_MAP.put("mr", "Marathi");
        LANGUAGE_MAP.put("mn", "Mongolian");
        LANGUAGE_MAP.put("my", "Myanmar (Burmese)");
        LANGUAGE_MAP.put("ne", "Nepali");
        LANGUAGE_MAP.put("no", "Norwegian");
        LANGUAGE_MAP.put("ps", "Pashto");
        LANGUAGE_MAP.put("fa", "Persian");
        LANGUAGE_MAP.put("pl", "Polish");
        LANGUAGE_MAP.put("pt", "Portuguese");
        LANGUAGE_MAP.put("ma", "Punjabi");
        LANGUAGE_MAP.put("ro", "Romanian");
        LANGUAGE_MAP.put("ru", "Russian");
        LANGUAGE_MAP.put("sm", "Samoan");
        LANGUAGE_MAP.put("gd", "Scots Gaelic");
        LANGUAGE_MAP.put("sr", "Serbian");
        LANGUAGE_MAP.put("st", "Sesotho");
        LANGUAGE_MAP.put("sn", "Shona");
        LANGUAGE_MAP.put("sd", "Sindhi");
        LANGUAGE_MAP.put("si", "Sinhala");
        LANGUAGE_MAP.put("sk", "Slovak");
        LANGUAGE_MAP.put("sl", "Slovenian");
        LANGUAGE_MAP.put("so", "Somali");
        LANGUAGE_MAP.put("es", "Spanish");
        LANGUAGE_MAP.put("su", "Sundanese");
        LANGUAGE_MAP.put("sw", "Swahili");
        LANGUAGE_MAP.put("sv", "Swedish");
        LANGUAGE_MAP.put("tg", "Tajik");
        LANGUAGE_MAP.put("ta", "Tamil");
        LANGUAGE_MAP.put("te", "Telugu");
        LANGUAGE_MAP.put("th", "Thai");
        LANGUAGE_MAP.put("tr", "Turkish");
        LANGUAGE_MAP.put("uk", "Ukrainian");
        LANGUAGE_MAP.put("ur", "Urdu");
        LANGUAGE_MAP.put("uz", "Uzbek");
        LANGUAGE_MAP.put("vi", "Vietnamese");
        LANGUAGE_MAP.put("cy", "Welsh");
        LANGUAGE_MAP.put("xh", "Xhosa");
        LANGUAGE_MAP.put("yi", "Yiddish");
        LANGUAGE_MAP.put("yo", "Yoruba");
        LANGUAGE_MAP.put("zu", "Zulu");
    }

    /**
     * 判断语言是否支持
     *
     * @param language
     * @return
     */
    public boolean isSupport(String language) {
        if (null == LANGUAGE_MAP.get(language)) {
            return false;
        }
        return true;
    }

    /**
     * 获取 语言代码 ISO 639-1 code
     *
     * @param desiredLang
     *            语言
     * @return 如果返回null则标示不支持
     */
    public String getCode(String desiredLang) {
        if (null != LANGUAGE_MAP.get(desiredLang)) {
            return desiredLang;
        }
        String tmp = desiredLang.toLowerCase();
        for (Map.Entry<String, String> enter : LANGUAGE_MAP.entrySet()) {
            if (enter.getValue().equals(tmp)) {
                return enter.getKey();
            }
        }

        return null;
    }

    /**
     * 翻译文本
     *
     * @param text
     *            文本内容
     * @param sourceLang
     *            文本所属语言。如果不知道,可以使用auto
     * @param targetLang
     *            目标语言。必须是明确的有效的目标语言
     * @return
     * @throws Exception
     */
    public String translateText(String text, String sourceLang, String targetLang) throws Exception {

        String retStr = "";
        if (!(isSupport(sourceLang) || isSupport(targetLang))) {
            throw new Exception("不支持的语言类型");
        }

        List<NameValuePair> nvps = new ArrayList();
        nvps.add(new BasicNameValuePair("client", CLIENT));
        nvps.add(new BasicNameValuePair("sl", sourceLang));
        nvps.add(new BasicNameValuePair("tl", targetLang));
        nvps.add(new BasicNameValuePair("dt", "t"));
        nvps.add(new BasicNameValuePair("q", text));
        // String finalPath=PATH
        // +"?client="+CLIENT+"&sl="+sourceLang+"&tl="+targetLang+"&dt=t&q="+ text ;

        String resp = postHttp(PATH, nvps);
        if (null == resp) {
            throw new Exception("网络异常");
        }

        // System.out.println( "==>返回内容:" + resp);

        JSONArray jsonObject = JSONArray.parseArray(resp);
        for (Iterator<Object> it = jsonObject.getJSONArray(0).iterator(); it.hasNext();) {
            JSONArray a = (JSONArray) it.next();
            retStr += a.getString(0);
        }

        return retStr;
    }

    /**
     * post 请求 @param url 请求地址 @param nvps 参数列表 @return @throws
     */
    private String postHttp(String url, List<NameValuePair> nvps) {
        String responseStr = null;
        CloseableHttpClient httpclient = HttpClients.createDefault();
        HttpPost httpPost = new HttpPost(url);
        // 重要!!必须设置 http 头,否则返回为乱码
        httpPost.setHeader("User-Agent", USER_AGENT);
        CloseableHttpResponse response2 = null;
        try {
            // 重要!! 指定编码,对中文进行编码
            httpPost.setEntity(new UrlEncodedFormEntity(nvps, Charset.forName("UTF-8")));
            try {
                response2 = httpclient.execute(httpPost);
            } catch (IOException e) {
                e.printStackTrace();
            }
            HttpEntity entity2 = response2.getEntity();
            responseStr = EntityUtils.toString(entity2);
            EntityUtils.consume(entity2);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (null != response2) {
                try {
                    response2.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (null != httpclient) {
                try {
                    httpclient.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return responseStr;
    }
}

测试类

package com.zgz.crud.test;

public class TestGt {
    public static void main(String args[]) throws Exception {
        System.out.println("-----test-----");
//        String txt="永和九年,岁在癸丑,暮春之初,会于会稽山阴之兰亭,修禊事也。群贤毕至,少长咸集。此地有崇山峻岭,茂林修竹;又有清流激湍,映带左右,引以为流觞曲水,列坐其次。虽无丝竹管弦之盛,一觞一咏,亦足以畅叙幽情。是日也,天朗气清,惠风和畅,仰观宇宙之大,俯察品类之盛,所以游目骋怀,足以极视听之娱,信可乐也。\n" +
//                "夫人之相与,俯仰一世,或取诸怀抱,悟言一室之内;或因寄所托,放浪形骸之外。虽趣舍万殊,静躁不同,当其欣于所遇,暂得于己,快然自足,不知老之将至。及其所之既倦,情随事迁,感慨系之矣。向之所欣,俯仰之间,已为陈迹,犹不能不以之兴怀。况修短随化,终期于尽。古人云:“死生亦大矣。”岂不痛哉!(不知老之将至 一作:曾不知老之将至)\n" +
//                "每览昔人兴感之由,若合一契,未尝不临文嗟悼,不能喻之于怀。固知一死生为虚诞,齐彭殇为妄作。后之视今,亦犹今之视昔。悲夫!故列叙时人,录其所述,虽世殊事异,所以兴怀,其致一也。后之览者,亦将有感于斯文。";
        GT g = GT.getInstance();
//        System.out.println( g.translateText(txt,"auto","en"));
        System.out.println( g.translateText("hello","en","zh-cn"));
    }
}

原文地址:https://blog.51cto.com/13416247/2375060

时间: 2024-12-15 04:47:47

java使用谷歌翻译的相关文章

google谷歌翻译插件-网页一键翻译

上个月转载的一篇博文,是推荐的四款非常实用的翻译插件,这几天看这个chrome插件网首页有新增了一个google谷歌翻译插件.我能说实话,这款插件比之前推荐的4款翻译插件更好用吗?也不能完全说是更好用啦,只是说我更信任google.相信google的产品就像相信百度翻译一样.我就是这么虚荣吗?就被简单的“Google官方发布”就轻易收买,品牌效应真是不可限量,还有什么比google谷歌翻译插件更适合谷歌浏览器的吗?这就是天生一对吧

python网络爬虫入门(二)——用python简单实现调用谷歌翻译

最近在看国外的文档,有些生词不认识.就用谷歌翻译来理解,用着用着闲来无事就按F12查看了下页面的源代码.发现可以用python简单的实现下谷歌翻译的页面功能.于是先上网搜下有没有类似的文章博客,发现几篇不错的,于是参考其他代码与自己的思路,简单的实现了下翻译的功能,代码如下: import re import urllib,urllib2 #----------模拟浏览器的行为,向谷歌翻译发送数据,然后抓取翻译结果,这就是大概的思路------- def Gtranslate(text): #t

抓包谷歌翻译,获取 tk=,tk算法

做了个小工具,整合了谷歌翻译,但是翻译的汉字变了,tk值也在变,换了汉字用原来的tk就不行了,搞了一晚上了,没找到tk算法. 后来发现错误的tk也能翻译,不知道为什么,先凑合用吧. JS代码:谷歌翻译tk算法的JS代码,调用 ZL("汉字"),即可返回可用的tk. var WL = function (a) { return function () { return a } }, XL = function(a, b) { for (var c = 0; c < b.length

C#调用谷歌翻译API

原资料为网上找到的原稿为:http://www.cnblogs.com/marso/p/google_translate_api.html(此处只做个人笔记参考) 主要分两块:通过WebRequest的方式请求内容:获取Get方式的请求参数(难点在于tk的获取). 以下是TK的JS代码,把以下代码保存存到程序目录下 gettk.js var b = function (a, b) { for (var d = 0; d < b.length - 2; d += 3) { var c = b.ch

C#借助谷歌翻译实现翻译小工具(一)基本功能实现

软件效果: 实现原理很简单,就是封装谷歌翻译网站:http://translate.google.cn/,一个WebBrowser"肢解"谷歌翻译网站的HtmlElement元素,删除不要的,留下需要的就是了,没什么难度 实现步骤: 一个winform窗体+一个WebBrowser控件   设置WebBrowser的URL为谷歌翻译网站,删除不需要的html元素 全部代码: public partial class Form1 : Form { public Form1() { Ini

如何将谷歌翻译的语音保存至电脑中

1.打开谷歌翻译网页版 2.按电脑的"shift+Ctrl+I"键,出现(图2)所示界面 3.在Network项下方,点击"media" 4.点击"朗读"按钮,在Network项下方"media"出现对应的TTS声音的URL 5.在新页面打开,然后另存为 原文地址:https://www.cnblogs.com/empist/p/10220504.html

Net Core 实现谷歌翻译ApI 免费版

由于谷歌翻译官方API是付费版本,本着免费和开源的精神.分享一下用 Net Core 实现谷歌翻译API的代码. 项目引用的Nuget 包: ChakraCore.NET Newtonsoft.Json JavaScriptEngineSwitcher.ChakraCore.Native.win-x86(特别说明一下"win-x86",代表程序运行环境.) 翻译地址:https://translate.google.cn(国内可以访问) 参数说明: text:待翻译文本 sl:需要翻译

利用浏览器事件免费谷歌翻译(Google Translate)

本文将介绍利用浏览器特性在谷歌翻译页面获取译文, 免爬虫免安装环境, 高效无限翻译, 只需一个主流浏览器便可. 1. 打开google翻译页面 https://translate.google.cn, 然后在文本框内输入任意一个值(例如: 1), 避免出错. 2. 打开浏览器控制台 F12或者鼠标右键 -> 检查 (以chrome浏览器为例), 随后点击 console(控制台) 3. 将代码复制到控制台并回传确定 // 调用该方法并传入key/value启动翻译 function start

关于谷歌翻译接口调用php方法

这两天在整数据库,发现里面好多数据翻译不准确,那么问题来了,从哪去找接口来翻译数据,请不起人,只有靠网上的翻译了,开始的时候发现谷歌以前的api翻译接口貌似收费了...我是个穷人,用不起,后来发现百度的可以用,就用了一下: 下面是代码: $url = "http://openapi.baidu.com/public/2.0/bmt/translate?client_id=YourApiKey&q=today&from=auto&to=auto"; ob_star