`
抛出异常的爱
  • 浏览: 627753 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

服务版翻译

阅读更多
前阵子写了个用google翻译的html版
看了http://dennis-zane.iteye.com/blog/57533
的博客去找了那个java版 的
了解了下原理
但他的代码不好用.

只好自己写了个

 
    public   static   void  main(String[] args)  throws  Exception {
    	  String theword = "my god ";
    	  String urlstr = engineUrl + "?text=" + theword + "&langpair=" + LANGPAIR_EN_CN;
    	  HttpClient client = new HttpClient();
    	  client.getHostConfiguration().setHost("translate.google.com",80,"http");
    	  
    	 
    	  PostMethod post = new PostMethod("/translate_t");
    	  NameValuePair f01 = new NameValuePair("text",theword);
    	  NameValuePair f02 = new NameValuePair("langpair",LANGPAIR_EN_CN);
    	  post.setRequestBody(new NameValuePair[]{f01,f02});
    	  int scode = client.executeMethod(post);
    	  System.out.println(post.getURI());
    	  String result = post.getResponseBodyAsString();
    	  

    	  post.releaseConnection();
//    	  System.out.println(result);

//    	  String result = "<div id=result_box dir=\"ltr\"> aaa </div> ";
    	  Pattern p = Pattern.compile("<div id=result_box(.*?)>(.*?)</div>"); 
    	  Matcher m = p.matcher(result);
    	  //System.out.println(m.find());
    	 while(m.find()){
    		 System.out.println(m.group(2));
    	 }
     }

原理测试完了
正在重构ing
分享到:
评论
9 楼 lzj0470 2008-12-22  
呵呵,到目前为止,我看错了字,我以为你说写完在发给我,原来是我写,这几天都在忙什么国外网站一些东西,有空再写写,写完给你一份,谢谢提供思路。
8 楼 lzj0470 2008-12-18  
好的,先谢谢,期待中~~~
7 楼 抛出异常的爱 2008-12-18  
lzj0470 写道

呵呵,你加一个线程睡眠是可以解决问题的。但是还是不能到达俺的要求,不过没办法,俺不能处理图像识别技术。目前我是想通过多个翻译工具进行翻译,或许也可以解决你那部分空闲的时间。

那就要写一个代理了....
一个线程用一个代理.....
写好了发我一份.借鉴一下.
6 楼 lzj0470 2008-12-18  
呵呵,你加一个线程睡眠是可以解决问题的。但是还是不能到达俺的要求,不过没办法,俺不能处理图像识别技术。目前我是想通过多个翻译工具进行翻译,或许也可以解决你那部分空闲的时间。
5 楼 抛出异常的爱 2008-12-17  
lzj0470 写道

我几天也弄了一个在线翻译,但是遇到了一个问题,如果你的程序频繁的访问它的话,它会给你出一道难题,就是关于验证码的问题,只要你处理要验证码的问题之后,才能登陆它的翻译系统进行翻译,不知道你有没有考虑过这个问题。

         while(it.hasNext()){  
             tmp =it.next();  
             buffer.append(tmp+"|");  
             buffer.append(translateE2C(tmp)+"\n");  
             buffer.append("\n");  
 //          Thread.currentThread().sleep(5*1000);     
         }  

看到注掉的那行没有?
对的,他就是为了防止被人挡住的..
必竟作人不能太无耻吧....
后来我发现注掉也没问题.
看来google还是很大方的.
4 楼 bubble 2008-12-16  
呵呵,我没看明白你想做什么,给Google的Translate API封装一下?
那个断句的是做什么的啊,想对一篇文章自己断句,然后再每句用Google自动翻译?
关于断句可以参考一下LISA的SRX,网上应该有些总结的片段切割交换规则集。
还有就是Google的Translate API短句可读性还凑合,长句基本不可读,所以比较怀疑你的做法。
我看你的代码好像文件是纯文本的,对编码问题我遇到的问题是你必须人为告诉程序文件是什么编码的,因为它没有文件头,极度郁闷~,其他文件还好
不知道你做的是什么,辅助翻译之类的话,有空交流一下
3 楼 lzj0470 2008-12-13  
我几天也弄了一个在线翻译,但是遇到了一个问题,如果你的程序频繁的访问它的话,它会给你出一道难题,就是关于验证码的问题,只要你处理要验证码的问题之后,才能登陆它的翻译系统进行翻译,不知道你有没有考虑过这个问题。
2 楼 抛出异常的爱 2008-11-14  
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.commons.collections.Transformer;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.io.FileUtils;





public     class   GoogleTranslationEngine    implements Transformer  {
     String engTxt;
      // 定义互译语言对常数变量,符合google页面相关对译语言对的值
      public   static   final  String LANGPAIR_CN_EN = "zh-CN|en" ; // 汉语到英语
      public   static   final  String LANGPAIR_EN_CN = "en|zh-CN" ; // 英语到汉语
      public   static   final  String LANGPAIR_KO_CN = "ko|zh-CN" ; // 朝鲜语到汉语
      public   static   final  String LANGPAIR_EN_JA = "en|ja" ; // 英语到日语
     
      // 定义编码常数
      public   static   final  String CHARSET_CN = "GBK" ;
      public   static   final  String CHARSET_JA = "Shift_JIS" ;
     
      // google在线翻译引擎url
      static   final  String engineUrl = "http://translate.google.com/translate_t" ; 

     public String translateE2C(String theword) throws HttpException, IOException{
   	  HttpClient client = new HttpClient();
	  client.getHostConfiguration().setHost("translate.google.com",80,"http");
		  PostMethod post;
		  post = new PostMethod("/translate_t");
				  NameValuePair f01 = new NameValuePair("text",theword);
				  NameValuePair f02 = new NameValuePair("langpair",LANGPAIR_EN_CN);
		  post.setRequestBody(new NameValuePair[]{f01,f02});
	  client.executeMethod(post);
	  String result = post.getResponseBodyAsString();
	  

	  post.releaseConnection();
	  Pattern p = Pattern.compile("<div id=result_box(.*?)>(.*?)</div>"); 
	  Matcher m = p.matcher(result);
		 if (m.find()){
			 return m.group(2);
		 }
    	 return "";
     }

     public GoogleTranslationEngine setEngText(String str){
    	 this.engTxt = str;
    	 return this;
     }
     public String getEngText(){
    	 return this.engTxt;
     }
 	public GoogleTranslationEngine formatStringDelEnter() {
		this.engTxt = this.engTxt.replaceAll("\\n", "");
		return this;
	}
	public GoogleTranslationEngine formatStringAddEnterByPoint() {
		this.engTxt = this.engTxt.replaceAll("\\.", ".\n");
		return this;
	}

	public GoogleTranslationEngine formatStringAddEnterByString(String str){
		String reg ="\\s["+str.toLowerCase().charAt(0)+"|"+str.toUpperCase().charAt(0)+"]"+str.substring(1,str.length())+"\\s";
		this.engTxt = this.getEngText().replaceAll(reg, "\n "+str.toLowerCase()+" ");
		return this;
	}
	@SuppressWarnings("unchecked")
	public GoogleTranslationEngine formatStringAddEnterByList(){
		List list = new ArrayList();
		list.add("and");
		list.add("or");
		list.add("but");
		formatStringAddEnterByPoint();		
		return formatStringAddEnterByList(list);
	}
	@SuppressWarnings("unchecked")
	public GoogleTranslationEngine formatStringAddEnterByList(List list){
		Iterator<String > it = list.iterator();
		while(it.hasNext()){
			formatStringAddEnterByString(it.next());
		}
		return this;
	}
     @SuppressWarnings("unchecked")
	public void readFile(String filename) throws IOException, InterruptedException{
    	 this.setEngText(FileUtils.readFileToString( new File(filename),"UTF-8"));
    	 FileUtils.writeStringToFile(new File(filename),this.formatStringAddEnterByList().getEngText() ,"UTF-8");
    	 List list = FileUtils.readLines( new File(filename),"UTF-8");
    	Iterator<String> it  = list.iterator();
    	StringBuffer buffer = new StringBuffer();
    	String tmp;
    	while(it.hasNext()){
    		tmp =it.next();
    		buffer.append(tmp+"|");
    		buffer.append(translateE2C(tmp)+"\n");
    		buffer.append("\n");
//    		Thread.currentThread().sleep(5*1000);   
    	}
    	FileUtils.writeStringToFile(new File(filename+".zhn"), buffer.toString(), "UTF-8");
     }
      public   static   void  main(String[] args)  throws  Exception {
    	GoogleTranslationEngine e = new GoogleTranslationEngine();



    	 e.readFile("test.eng");
     }
      
//	private Object translateK2C(String theword) throws HttpException, IOException {
//	   	  HttpClient client = new HttpClient();
//		  client.getHostConfiguration().setHost("translate.google.com",80,"http");
//			  PostMethod post;
//			  post = new PostMethod("/translate_t");
//					  NameValuePair f01 = new NameValuePair("text",theword);
//					  NameValuePair f02 = new NameValuePair("langpair",LANGPAIR_KO_CN);
//			  post.setRequestBody(new NameValuePair[]{f01,f02});
//		  client.executeMethod(post);
//		  String result = post.getResponseBodyAsString();
//		  
//
//		  post.releaseConnection();
//		  Pattern p = Pattern.compile("<div id=result_box(.*?)>(.*?)</div>"); 
//		  Matcher m = p.matcher(result);
//			 if (m.find()){
//				 return m.group(2);
//			 }
//	    	 return "";
//	}
	public Object transform(Object obj){
		try {
			return translateE2C(obj.toString());
		} catch (Exception e) {
			e.printStackTrace();
		}
		return "";
		
	}




 } 

把断句作了一下
import static org.junit.Assert.assertEquals;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.io.FileUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;


public class GoogleTranslationEngineTest {
	String filename = "testFormatFile";
	GoogleTranslationEngine g;
	@BeforeClass
	public static void setUpBeforeClass() throws Exception {
	}

	@Before
	public void setUp() throws Exception {
		g = new GoogleTranslationEngine();
		FileUtils.writeStringToFile(new File(filename), "a\nb\nc", "UTF-8");
	}

	@After
	public void tearDown() throws Exception {
		new File(filename).delete();
	}

	@Test
	public void test去掉回车变成一行() throws IOException {
		String str =FileUtils.readFileToString( new File(filename),"utf-8");
		assertEquals("a\nb\nc", str);
		g.setEngText(str);
		assertEquals("abc",g.formatStringDelEnter().getEngText());
		
	}
	@Test
	public void test在每个句号后加回车(){
		 g.setEngText("abc.acd");
		assertEquals("abc.\nacd", g.formatStringAddEnterByPoint().getEngText());
		
	}
	@SuppressWarnings("unchecked")
	@Test
	public void test把字串放入E中用点连接方式格式化(){
		String str; 
		List list ;
		str=g.setEngText("去\n回\n车").formatStringDelEnter().getEngText();
		assertEquals("去回车", str);
		str =g.setEngText("对句号.加回车").formatStringAddEnterByPoint().getEngText();
		assertEquals("对句号.\n加回车", str);
		list = new ArrayList();
		list.add("and");
		str =g.setEngText("对 and 加回车").formatStringAddEnterByList(list).getEngText();
		assertEquals("对\n and 加回车", str);
		str =g.setEngText("对 And 加回车").formatStringAddEnterByList(list).getEngText();
		assertEquals("对\n and 加回车", str);
		str =g.setEngText("对and连在一起的不加回车").formatStringAddEnterByList(list).getEngText();
		assertEquals("对and连在一起的不加回车", str);		list = new ArrayList();
		list.add("Or");
		str =g.setEngText("对 or 加回车").formatStringAddEnterByList(list).getEngText();
		assertEquals("对\n or 加回车", str);

		str =g.setEngText("对 任意字串 加回车").formatStringAddEnterByString("任意字串").getEngText();
		assertEquals("对\n 任意字串 加回车", str);
		str =g.setEngText("对任意字串 不加回车").formatStringAddEnterByString("任意字串").getEngText();
		assertEquals("对任意字串 不加回车", str);
		str =g.setEngText("对 Abc 任意字串中首字母大写加回车").formatStringAddEnterByString("abc").getEngText();
		assertEquals("对\n abc 任意字串中首字母大写加回车", str);
		str =g.setEngText("对 abc 任意字串中首字母小写加回车").formatStringAddEnterByString("Abc").getEngText();
		assertEquals("对\n abc 任意字串中首字母小写加回车", str);
		list  = new ArrayList();
		list.add("多个");
		list.add("大写");
		str =g.setEngText("对 多个 任意字串中首字母 大写 加回车").formatStringAddEnterByList(list).getEngText();
		assertEquals("对\n 多个 任意字串中首字母\n 大写 加回车", str);
		
	}

	

}
1 楼 抛出异常的爱 2008-11-13  
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


import org.apache.commons.collections.Transformer;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.io.FileUtils;





public     class   GoogleTranslationEngine    implements Transformer  {
     
      // 定义互译语言对常数变量,符合google页面相关对译语言对的值
      public   static   final  String LANGPAIR_CN_EN = "zh-CN|en" ; // 汉语到英语
      public   static   final  String LANGPAIR_EN_CN = "en|zh-CN" ; // 英语到汉语
      public   static   final  String LANGPAIR_KO_CN = "ko|zh-CN" ; // 朝鲜语到汉语
      public   static   final  String LANGPAIR_EN_JA = "en|ja" ; // 英语到日语
     
      // 定义编码常数
      public   static   final  String CHARSET_CN = "GBK" ;
      public   static   final  String CHARSET_JA = "Shift_JIS" ;
     
      // google在线翻译引擎url
      static   final  String engineUrl = "http://translate.google.com/translate_t" ; 

     public String translateE2C(String theword) throws HttpException, IOException{
   	  HttpClient client = new HttpClient();
	  client.getHostConfiguration().setHost("translate.google.com",80,"http");
		  PostMethod post;
		  post = new PostMethod("/translate_t");
				  NameValuePair f01 = new NameValuePair("text",theword);
				  NameValuePair f02 = new NameValuePair("langpair",LANGPAIR_EN_CN);
		  post.setRequestBody(new NameValuePair[]{f01,f02});
	  client.executeMethod(post);
	  String result = post.getResponseBodyAsString();
	  

	  post.releaseConnection();
	  Pattern p = Pattern.compile("<div id=result_box(.*?)>(.*?)</div>"); 
	  Matcher m = p.matcher(result);
		 if (m.find()){
			 return m.group(2);
		 }
    	 return "";
     }
     public String formatFile1(String filename) throws IOException{
    	 List list = FileUtils.readLines( new File(filename),"UTF-8");
    	 StringBuffer buffer = new StringBuffer();
    	 Iterator<String> it = list.iterator();
    	 while(it.hasNext()){
    		 buffer.append(it.next());
    	 }
    	return buffer.toString();    	 
     }
     public String formatFile2(String fileInfo){
    	return fileInfo.replaceAll("\\.","\\.\n");    	
     }

     public void readFile(String filename) throws IOException, InterruptedException{
    	 FileUtils.writeStringToFile(new File(filename), formatFile2(formatFile1(filename)),"UTF-8");
    	 List list = FileUtils.readLines( new File(filename),"UTF-8");
    	Iterator<String> it  = list.iterator();
    	StringBuffer buffer = new StringBuffer();
    	String tmp;
    	while(it.hasNext()){
    		tmp =it.next();
    		buffer.append(tmp+"|");
    		buffer.append(translateE2C(tmp)+"\n");
    		buffer.append("\n");
//    		Thread.currentThread().sleep(5*1000);   
    	}
    	FileUtils.writeStringToFile(new File(filename+".zhn"), buffer.toString(), "UTF-8");
     }
      public   static   void  main(String[] args)  throws  Exception {
    	GoogleTranslationEngine e = new GoogleTranslationEngine();



    	 e.readFile("test.eng");
//     	System.out.println(e.translateK2C("경영위원회"));   	 
     }
//      public static String getUnicode(String input) {
//    	  byte[] pa2 = new byte[input.length() / 2];
//    	  byte[] pa3 = input.getBytes();
//    	  for (int i = 0; i < (input.length() / 2); i++) {
//    	   pa2[i] = uniteBytes(pa3[i * 2], pa3[i * 2 + 1]);
//    	  }
//    	  try {
//    	   input = new String(pa2, "utf8");
//    	  } catch (Exception e) {
//
//    	  }
//    	  return input;
//    	 }
//
//    	 private static byte uniteBytes(byte src0, byte src1) {
//    	  byte _b0 = Byte.decode("0x" + new String(new byte[] { src0 })).byteValue();
//    	  _b0 = (byte) (_b0 << 4);
//    	  byte _b1 = Byte.decode("0x" + new String(new byte[] { src1 })).byteValue();
//    	  byte ret = (byte) (_b0 ^ _b1);
//    	  return ret;
//    	 } 
      
	private Object translateK2C(String theword) throws HttpException, IOException {
	   	  HttpClient client = new HttpClient();
		  client.getHostConfiguration().setHost("translate.google.com",80,"http");
			  PostMethod post;
			  post = new PostMethod("/translate_t");
					  NameValuePair f01 = new NameValuePair("text",theword);
					  NameValuePair f02 = new NameValuePair("langpair",LANGPAIR_KO_CN);
			  post.setRequestBody(new NameValuePair[]{f01,f02});
		  client.executeMethod(post);
		  String result = post.getResponseBodyAsString();
		  

		  post.releaseConnection();
		  Pattern p = Pattern.compile("<div id=result_box(.*?)>(.*?)</div>"); 
		  Matcher m = p.matcher(result);
			 if (m.find()){
				 return m.group(2);
			 }
	    	 return "";
	}
	public Object transform(Object obj){
		try {
			return translateE2C(obj.toString());
		} catch (Exception e) {
			e.printStackTrace();
		}
		return "";
		
	}
 } 

import static org.junit.Assert.assertEquals;

import java.io.File;
import java.io.IOException;

import org.apache.commons.io.FileUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;


public class GoogleTranslationEngineTest {
	String filename = "testFormatFile";
	GoogleTranslationEngine g;
	@BeforeClass
	public static void setUpBeforeClass() throws Exception {
	}

	@Before
	public void setUp() throws Exception {
		g = new GoogleTranslationEngine();
		FileUtils.writeStringToFile(new File(filename), "a\nb\nc", "UTF-8");
	}

	@After
	public void tearDown() throws Exception {
		new File(filename).delete();
	}

	@Test
	public void test去掉回车变成一行() throws IOException {
		String str =g.formatFile1(filename);
		assertEquals("abc", str);
		
	}
	@Test
	public void test在每个句号后加回车(){
		String str = g.formatFile2("abc.acd");
		assertEquals("abc.\nacd", str);
		
	}
	

}

明天把韩文的搞定
PS:如果有人有韩文,或日文编程经验 PM我
我遇到了转码问题.

相关推荐

    最新合同翻译服务翻译服务合同模板一DOC可编辑版.docx

    《最新合同翻译服务合同》是规范翻译服务过程中双方权益的重要法律文件,主要涉及以下几个关键知识点: 1. **合同双方**:合同明确了“甲方”(需求方)和“乙方”(服务提供方)的角色,通常甲方是需要翻译服务的...

    内网英汉互译离线翻译服务 支持Python C# Java等几乎所有语言调用 服务已经集成所有运行环境 编程新手轻松上手

    使用非常简单 几行代码即可 类似于在线翻译api 直接向本地开启的本服务POST需要翻译的内容即可,详细使用说明可参考压缩包内的使用说明 注意:本系统不仅仅支持本地英汉互译服务,还可以部署于外网服务器或者云...

    最新通用咨询服务合同书翻译服务通用版合同书WORD范本模板2021.docx

    本资源为通用咨询服务合同书翻译服务通用版合同书WORD范本模板2021,涵盖了翻译服务合同的主要内容,包括合同双方信息、翻译服务范围、翻译质量要求、付款方式、争议解决机制等。该资源适用于需要与翻译服务提供商...

    谷歌翻译版机器翻译版javaAPI

    - **性能考量**:考虑到翻译服务可能会涉及到大量的数据传输,因此在实际应用中还需要对性能进行优化,避免对用户的体验造成负面影响。 8. **社区支持**:由于这是一个公开可用且免费下载的API,可以预期会有一个...

    谷歌翻译插件无法翻译修复版v2.0.8

    5. 完成后,谷歌翻译插件应该已经成功安装并更新到修复版v2.0.8,可以正常提供翻译服务。 总的来说,"谷歌翻译插件无法翻译修复版v2.0.8"为用户提供了更稳定的翻译环境,解决了旧版本可能存在的问题。通过遵循上述...

    NVMe 1.3中文版翻译

    以下是对NVMe 1.3中文版翻译中涉及的知识点的详细解释: 1. **NVMe基础架构**:NVMe设计的目标是减少存储设备与处理器之间的通信开销,通过使用PCIe总线直接与CPU交互,避免了传统AHCI(Advanced Host Controller ...

    ITIL V4中文版-唐龙翻译.pdf

    通过唐龙翻译的版本,学习者可以使用中文版本来备考ITIL V4基础认证。 ITIL V4中文版的核心内容主要围绕以下几点展开: 1. IT服务管理的介绍 现代世界对IT服务管理提出了更高要求,ITIL V4框架旨在帮助组织管理IT...

    SQL Server 分析服务企业版和标准版对比

    企业版和标准版都支持表格模型,但企业版支持更多的功能,包括层次结构、KPI、透视、翻译、DAX 计算、DAX 查询、MDX 查询等。 多维模型 企业版和标准版都支持多维模型,但企业版支持更多的功能,包括半累加性度量...

    D_彩云翻译网页版插件_

    【标签】:“彩云翻译网页版插件”标签明确了该插件是与彩云翻译相关的,彩云翻译是一款由阿里云开发的智能翻译服务,它提供了准确、快速的文本翻译,支持多种语言,广泛应用于学习、工作和日常生活中。 【文件名称...

    翻译服务协议范本标准版本电子版借鉴.pdf

    《翻译服务协议范本标准版本电子版》是一个规范翻译服务交易的重要法律文件,旨在明确委托方(甲方)和受托方(乙方)之间的权利和义务。以下是对协议内容的详细解读: 1. **委托关系与报酬支付**: 甲方委托乙方...

    维汉翻译通_维语翻译Windows电脑版1.0.0下载

    3、人工翻译:维吾尔语专业译者,提供一对一高质量维汉翻译服务,翻译过程严谨,内容保密。 4、收藏功能:翻译后可以收藏维文句子、维语单词,边查边学,有助于学习维语,随时查看;建立词条收藏,高效分类高效学习...

    百度翻译最新版的最精简版(功能完好).rar

    为了满足用户对于高效、便捷翻译的需求,百度翻译推出了其最新版的精简版,它在保留全部核心功能的同时,实现了软件的小型化,让用户在享受优质服务的同时,减轻了设备的存储负担。 百度翻译,作为国内知名的在线...

    完整版在线翻译机.e.rar

    标题中的“完整版在线翻译机”指的是一个提供全面翻译服务的软件或应用程序,可能是通过互联网进行操作的。这种工具通常支持多种语言之间的互译,帮助用户理解不同语言的内容,尤其适用于跨国交流、学习或者工作场景...

    操作系统概论第六版翻译版

    总的来说,《操作系统概论》第六版翻译版是一本全面介绍操作系统原理的教材,适合计算机科学专业的学生、教师,以及对操作系统感兴趣的从业者。它不仅涵盖了操作系统的基本概念,还提供了深入的理论分析和实践指导,...

    沉浸式翻译chrome插件 0.4.2版本

    这款插件的核心功能是将翻译服务集成到网页中,使得用户无需离开当前页面即可完成对网页内容的翻译,极大地提升了浏览效率和用户体验。 首先,我们要理解Chrome插件的基本概念。Chrome插件是基于谷歌浏览器的开放...

    Google在线翻译本地Winform版

    【Google在线翻译本地Winform版】是一款由个人开发者设计的小型应用程序,旨在提供便捷的翻译服务,无需通过浏览器访问网页,从而节省了打开网页和输入网址的时间,提升了工作效率。这款应用的核心功能是调用了...

    ITIL 4中文版-唐龙翻译.zip

    ITIL(信息技术基础架构库)是全球广泛接受的服务管理框架...ITIL 4中文版由唐龙翻译,为中文读者提供了方便理解和实施的资源。通过深入学习这个框架,组织可以提升服务质量,优化运营效率,并确保与业务战略保持一致。

    藏语翻译电脑版藏汉互译windows版本

    ·人工翻译:提供一对一高质量藏汉翻译服务,藏语言专业,经验丰富,翻译过程严谨,内容保密。 ·收藏功能:日常翻译后可以收藏各种藏文句子、藏文单词,边查边学,有助于学习藏语,随时翻看;后面还会建立收藏夹,...

    ISO14229 UDS中文翻译版(全).pdf

    该标准的中文翻译版详细阐述了车辆诊断系统与外部设备间的通信协议和服务要求,是车辆诊断、维护和测试领域内的重要国际标准。 首先,ISO14229-1 2013规定了车辆诊断服务的相关术语、定义和符号,它是进行车辆诊断...

    软件工程(第八版)英文版的中文翻译

    《软件工程(第八版)英文版的中文翻译》是一本由英国作者Ian Sommerville撰写,并由程成、陈霞翻译成中文的软件工程专业教材。这本书是软件工程领域的经典教材之一,自从1982年第一版发行以来,随着软件工程学科的...

Global site tag (gtag.js) - Google Analytics