翻译软件开发(do it yourself)

想要做一个翻译软件的话,本文只是一个入门参考,这里面只给出一个简单的功能,即把一个纯英文的文件 翻译成相应的中文文件,并另外保存成一个新的文件。

作者不想花费时间去写华丽的界面,只是简单地弹出一些输入框,有兴趣的朋友可以自己去美化或完善一下该软件。

编程语言可以是Python,Delphi,这里以Java语言为基础开发,全是Java代码。如下:

package cn.ling.TestTranslate;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.HashMap;
import java.util.Map;

/**
 *
 * 模拟文本翻译软件
 * 注意:操作的源文件必须只由英文单词构成,否则会得到意想不到的结果
 * @author lingyibin
 *
 */
public class TestTranslate {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		translate();
	}

	/**
	 * 翻译的主要实现函数
	 */
	public static void translate(){
		//得到源文件路径
		String srcFileName = "";
		srcFileName = javax.swing.JOptionPane.showInputDialog("请您 输入源文件路径!");

		File srcFile = new File(srcFileName);
		//源文件路径不合法
		if(!srcFile.exists() || !srcFile.isFile()){
			javax.swing.JOptionPane.showMessageDialog(null, "对不起,你输入的源文件路径不合法!");
		}

		//翻译后的文件名,首先得到新文件名,即在原文件名的后面加上"_translated",保留后缀名
		int index = srcFileName.lastIndexOf(".");
		String newFileName = srcFileName.substring(0,index) + "_translated" + srcFileName.substring(index);

		//得到词库文件路径
		String cikuFileName = "";
		cikuFileName = javax.swing.JOptionPane.showInputDialog("请您 输入词库文件路径!");

		File cikuFile = new File(cikuFileName);
		//词库文件路径不合法
		if(!cikuFile.exists() || !cikuFile.isFile()){
			javax.swing.JOptionPane.showMessageDialog(null, "对不起,你输入的词库文件路径不合法!");
		}

		try {
			String tmpStr = null;
			String[] strs;

			//新建一个缓冲流来读取词库文件
			BufferedReader br = new BufferedReader(
					new InputStreamReader(
							new FileInputStream(cikuFile)));

			//用一个MAP来存放键值对
			Map<String, String> mapTrn = new HashMap<String, String>();

			while((tmpStr = br.readLine()) != null){	//如果未到末尾 且 读到的不是空行
				if(!tmpStr.equals("")){
					strs = tmpStr.split("=");
					mapTrn.put(strs[0].toLowerCase(), strs[1]);
				}
			}

			//新建一个字节流来读取源文件
			FileInputStream fis = new FileInputStream(srcFile);

			//新建一个Writer来写入翻译后的字符
			OutputStreamWriter osw = new OutputStreamWriter(
					new FileOutputStream(newFileName));

			int c;
			tmpStr = "";
			while((c = fis.read()) != -1){
				if(!((c>=‘a‘ && c<=‘z‘) || (c>=‘A‘ && c<=‘Z‘))){
					if(mapTrn.get(tmpStr.toLowerCase()) != null){
						osw.write(mapTrn.get(tmpStr.toLowerCase()).toCharArray());
						tmpStr = "";
					}
					if(c != 32) osw.write(c);
				}
				else{
					tmpStr += (char)c;
				}
			}
			if(mapTrn.get(tmpStr.toLowerCase()) != null){
				osw.write(mapTrn.get(tmpStr.toLowerCase()).toCharArray());
				tmpStr = "";
			}

			osw.flush();
			osw.close();
		} catch (Exception e) {
			//e.printStackTrace();
			javax.swing.JOptionPane.showMessageDialog(null, "对不起,源文件读取时出错!");
		}

	}
}

?

?然后得自己建一个词库,格式如下:

Love=爱
I=我
China=中国

?

可以运行一下程序。

也可以使用Java jui实现简单的翻译功能。

主要用到的技巧包括界面嵌套布局(包括BorderLayout, FlowLayout, GridLayout),匿名类,以及java.util.Map<K,V>泛型类的使用。share it !

代码:

[java] 
view plain
copy

  1. import javax.swing.*;
  2. import java.util.HashMap;
  3. import java.util.Map;
  4. import java.awt.BorderLayout;
  5. import java.awt.Container;
  6. import java.awt.GridLayout;
  7. import java.awt.event.ActionEvent;
  8. import java.awt.event.ActionListener;
  9. public class TranslateDemo {
  10. public static void main( String[] args ) {
  11. new MyWin( "Translator" );
  12. }
  13. }
  14. class MyWin extends JFrame {
  15. private static final long serialVersionUID = 4965728863455140660L;
  16. private JTextField txtEn = new JTextField( 30 );
  17. private JTextField txtCN = new JTextField( 30 );
  18. private JLabel lblInfo = new JLabel( "Translation Demo", JLabel.CENTER );
  19. private JLabel lblEn = new JLabel( "English", JLabel.LEFT );
  20. private JLabel lblCN = new JLabel( "Chinese", JLabel.LEFT );
  21. private JButton btnTrans = new JButton( "Translate" );
  22. private Map<String, String> dict = new HashMap<String, String>();
  23. MyWin( String title ) {
  24. super( title );
  25. Container cp = getContentPane();
  26. cp.add( lblInfo, BorderLayout.NORTH );
  27. JPanel enPanel = new JPanel();
  28. enPanel.add( lblEn );
  29. enPanel.add( txtEn );
  30. JPanel lblPanel = new JPanel( new GridLayout( 2, 1 ) );
  31. lblPanel.add( lblEn );
  32. lblPanel.add( lblCN );
  33. txtEn.setAutoscrolls( true );
  34. txtCN.setAutoscrolls( true );
  35. JPanel txtPanel = new JPanel( new GridLayout( 2, 1 ) );
  36. txtPanel.add( txtEn );
  37. txtPanel.add( txtCN );
  38. txtEn.requestFocus();
  39. JPanel panel = new JPanel( new BorderLayout() );
  40. panel.add( lblPanel, BorderLayout.WEST );
  41. panel.add( txtPanel, BorderLayout.CENTER );
  42. cp.add( panel, BorderLayout.CENTER );
  43. JPanel btnPane = new JPanel();
  44. btnPane.add( btnTrans );
  45. cp.add( btnPane, BorderLayout.SOUTH );
  46. dict.put( "Hello, Java!", "你好,JAVA!");
  47. dict.put( "good morning", "早上好" );
  48. btnTrans.addActionListener( new ActionListener() {
  49. @Override
  50. public void actionPerformed(ActionEvent e) {
  51. txtCN.setText( dict.get( txtEn.getText() ) );
  52. }
  53. });
  54. setSize( 200, 100 );
  55. setLocation( 450, 200 );
  56. setVisible( true );
  57. setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
  58. pack();
  59. }
  60. }

软件效果图:

要实现更复杂的翻译功能,需耗时

时间: 2024-10-18 08:35:45

翻译软件开发(do it yourself)的相关文章

推荐一个文献翻译软件--Deja Vu X

首先我的这篇博客推荐的软件并不是你认为翻译准确度有多高的软件,如果是这样的话就不用往下看了,免得浪费时间,只是一个对于翻译文献很方便的工具,方面在哪请看下文. 我是不会告诉你凡事用过这个软件的人都说好的. 如果你要写英语文章,而又无法直接成文,往往需要先写出来汉语(或者用汉语列出文章的大纲),那么接下来的事情你可能就需要将你的中文文章翻译成英语了,可能大家常常用的是有道词典.金山词霸.谷歌翻译.百度翻译等,但是用这些翻译软件或者在线翻译时,常常需要将你要翻译的内容粘贴到这些软件或者在线翻译的网页

svnkit——svn二次开发背景和闲谈

开发背景: 简述现有流程:代码的合并.提交是以任务为最小单元的.例如A和B两个同学开发不同的任务,那就是两个任务号.合并的时候可能会先合并A的代码,在合并B的代码. 需求:SVN合并程序开发--一款能够满足测试人员合并代码的工具,通过输入任务号或版本号及选择合并分支,将对应的任务及版本合并到选择的分支上. 要求:避免SVN冲突. 工作要点:设计一个即能减少冲突,又能提交次数最少的流程.使用SVNKIT完成设计工具,最好是图形界面客户端. 梳理思路: 个人觉得在合并过程中冲突是无法完全避免的,A和

我是一个尽量少用国产软件的软件开发工程师

 [作者] 网名: 猪头三 站点: http://www.x86asm.com Email: [email protected] QQ: 643439947 编程生涯: 2001-至今[15年] 职业生涯: 13年 开发语言: C/C++; x86asm; Object Pascal; C#; Golang; Objective-C; PHP; 开发工具: VC++; Delphi; XCode; 研发领域: Windows应用软件安全; Windows系统内核安全; Windows系统磁盘数据

阿里巴巴Java开发手册———个人追加的见解和补充(一)

先上干货,<阿里巴巴Java开发手册>的下载地址 https://yq.aliyun.com/articles/69327?spm=5176.100239.blogcont69327.158.xUUgiz 下面分几个部分对这个手册进行说明,都是个人的见解,本人技术一般,如果有错误或者不妥,请评论指出,虚心接受,提前感谢了. 建议边看手册,边食用以下说明,效果比较好. 前言 首先当我第一次看见这个的手册的时候或许和和你们是一样激动的,因为在java行业内我还没有看见有中文的规范,也可能是我读书少

适配器模式 : 农村小伙娶乌克兰美女语言不通 翻译软件立功

不知道什么时候开始,总听到" XXX 小伙娶乌克兰美女" 的新闻,比如 农村小伙娶乌克兰美女语言不通 翻译软件立功 等等,我仔细地看了几篇新闻,发现居然不是标题党,新闻里的乌克兰妹子长得真不错,上几张图: 看完这些新闻和照片,我心里有三个疑问: 1. 乌克兰真的美女很多吗? 2. 为什么乌克兰美女爱嫁给中国男人? 3. 翻译软件可以化腐朽为神奇,软件开发过程中是否可以参考呢? 经过我大量的研究,得出了答案: 1.乌克兰真的美女很多吗? 答:是的. - 首先从世界地图可以看到,乌克兰地处

plain framework 1(简约框架)一款主要用于网络(游戏)开发的C/C++框架 即将开源发布

在我们的日常开发中,我们往往会遇到这种情况,当我们换了一个开发环境时很可能会重新利用一套新的框架进行开发.由于不同框架有着不同的接口,所以我们不得不花时间再次熟悉这些接口,这将造成开发时间上的重复,而对于一个程序来说又经历了一段重复造轮子的过程.在游戏开发领域,我介入的时间并不太长,大约三年时间.抱着对于游戏的热爱和激情,在这几年时间里也是一个苦苦摸索的过程.我们国人有着这么一个通病,那就是所谓的“闭关自守”,我发现有些开发者是拥有了一套代码之后便利用这套代码可以玩转整个游戏界.我能了解这些朋友

eclipse birt报表开发入门

在开发中,报表或多或少会涉及到,有些报表可能比较简单,而有些报表可能很复杂.无论如何,这些报表功能的开发都是可以通过一些公共的组件来实现的,比如我现在所在的这家公司,如果想要制作报表,只需要配置下报表配置下就可以了(这个报表是通过特定实现的报表语言实现了,支持内部自定义的语言,最终将这些相应的数据保存到数据库中,对报表中的一些事物进行了抽象,比如:报表模型, 查询参数.).如果要自己手动的一步一步的编写报表,那么相对会比较麻烦,如果能提供一个框架,只需要进行一些配置就可以完成自定义报表,那岂不很

微信公众号可通过现金红包接口发放微信支付现金红包(附开发教程)

农历新年将至,支付宝红包打了一仗,微信在朋友圈屏蔽了它的分享,但单防守还不行,进攻才是最好的防守.昨日,微信支付现金红包接口正式开放,只需开通微信支付,即可接入现金红包.微信公众号也可以发放现金红包了! 通过现金红包接口,公众号开发者可以策划相关运营活动,向用户发放微信支付现金红包,更好的达到品牌推广及回馈用户的效果. 1.商户调用接口时,通过指定发送对象以及发送金额的方式发放红包,这样的方式,允许商户灵活的应用于各种各样丰富的活动场景 2.领取到红包后,用户的资金直接进入微信零钱,避免繁复的领

基于jquery开发的UI框架整理分析

根据调查得知,现在市场中的UI框架差不多40个左右,不知大家都习惯性的用哪个框架,现在市场中有几款UI框架稍微的成熟一些,也是大家比较喜欢的一种UI框架,那应该是jQuery,有部分UI框架都是根据jQuery研发出来的产品,现在也很常见了. 国产jQuery UI框架 (jUI) DWZ DWZ富客户端框架(jQuery RIA framework), 是中国人自己开发的基于jQuery实现的Ajax RIA开源框架.设计目标是简单实用,快速开发,降低ajax开发成本. jQuery 部件布局