博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
翻译软件开发(do it yourself)
阅读量:6709 次
发布时间:2019-06-25

本文共 4888 字,大约阅读时间需要 16 分钟。

hot3.png

   

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

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

编程语言可以是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
mapTrn = new HashMap
(); 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] 
  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.   
  10. public class TranslateDemo {  
  11.     public static void main( String[] args ) {  
  12.         new MyWin( "Translator" );  
  13.     }  
  14. }  
  15.   
  16. class MyWin extends JFrame {  
  17.   
  18.     private static final long serialVersionUID = 4965728863455140660L;  
  19.       
  20.     private JTextField txtEn = new JTextField( 30 );  
  21.     private JTextField txtCN = new JTextField( 30 );  
  22.       
  23.     private JLabel lblInfo = new JLabel( "Translation Demo", JLabel.CENTER );  
  24.       
  25.     private JLabel lblEn = new JLabel( "English", JLabel.LEFT );  
  26.     private JLabel lblCN = new JLabel( "Chinese", JLabel.LEFT );      
  27.       
  28.     private JButton btnTrans = new JButton( "Translate" );  
  29.       
  30.     private Map<String, String> dict = new HashMap<String, String>();  
  31.           
  32.     MyWin( String title ) {  
  33.         super( title );  
  34.         Container cp = getContentPane();  
  35.         cp.add( lblInfo, BorderLayout.NORTH );  
  36.           
  37.         JPanel enPanel = new JPanel();  
  38.         enPanel.add( lblEn );  
  39.         enPanel.add( txtEn );  
  40.           
  41.         JPanel lblPanel = new JPanel( new GridLayout( 21 ) );  
  42.         lblPanel.add( lblEn );  
  43.         lblPanel.add( lblCN );  
  44.           
  45.         txtEn.setAutoscrolls( true );  
  46.         txtCN.setAutoscrolls( true );  
  47.           
  48.         JPanel txtPanel = new JPanel( new GridLayout( 21 ) );  
  49.         txtPanel.add( txtEn );  
  50.         txtPanel.add( txtCN );  
  51.           
  52.         txtEn.requestFocus();  
  53.                   
  54.         JPanel panel = new JPanel( new BorderLayout() );  
  55.         panel.add( lblPanel, BorderLayout.WEST );  
  56.         panel.add( txtPanel, BorderLayout.CENTER );  
  57.           
  58.         cp.add( panel, BorderLayout.CENTER );  
  59.           
  60.         JPanel btnPane = new JPanel();  
  61.         btnPane.add( btnTrans );  
  62.           
  63.         cp.add( btnPane, BorderLayout.SOUTH );  
  64.           
  65.         dict.put( "Hello, Java!""你好,JAVA!");  
  66.         dict.put( "good morning""早上好" );  
  67.           
  68.         btnTrans.addActionListener( new ActionListener() {  
  69.             @Override  
  70.             public void actionPerformed(ActionEvent e) {  
  71.                 txtCN.setText( dict.get( txtEn.getText() ) );  
  72.             }  
  73.         });  
  74.           
  75.         setSize( 200100 );  
  76.         setLocation( 450200 );  
  77.         setVisible( true );  
  78.         setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );  
  79.         pack();  
  80.     }  
  81. }  

软件效果图:

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

转载于:https://my.oschina.net/bigfool007139/blog/523009

你可能感兴趣的文章
Ubuntu+Eclipse+ADT+Genymotion+VirtualBox开发环境搭建
查看>>
Android 学习之 开源项目PullToRefresh的使用
查看>>
Matplot中文乱码完美解决方式
查看>>
tomcat的webappclassloader中一个奇怪的异常信息
查看>>
漫谈程序猿系列:群星闪耀的黄金时代
查看>>
2016百度编程题:蘑菇阵
查看>>
webpack系列之一总览
查看>>
如何打造BCH使用的刚性需求?
查看>>
一个小需求引发的思考
查看>>
慎用System.nanoTime()
查看>>
算法的时间复杂度
查看>>
基础设施即代码:Terraform和AWS无服务器
查看>>
反模式的经典 - Mockito设计解析
查看>>
Visual Studio 15.7预览版4改进Git、C++支持
查看>>
微软宣布支持基于虚拟机的Azure IOT Edge服务
查看>>
来自社区的Visual Studio Code使用体验和教程
查看>>
[deviceone开发]-cnodejs论坛移动端App
查看>>
智能指针shared_ptr(effective modern c++笔记)
查看>>
NSDate格式化小例
查看>>
spring 基础
查看>>