想要做一个翻译软件的话,本文只是一个入门参考,这里面只给出一个简单的功能,即把一个纯英文的文件 翻译成相应的中文文件,并另外保存成一个新的文件。
作者不想花费时间去写华丽的界面,只是简单地弹出一些输入框,有兴趣的朋友可以自己去美化或完善一下该软件。
编程语言可以是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 !
代码:
- import javax.swing.*;
- import java.util.HashMap;
- import java.util.Map;
- import java.awt.BorderLayout;
- import java.awt.Container;
- import java.awt.GridLayout;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- public class TranslateDemo {
- public static void main( String[] args ) {
- new MyWin( "Translator" );
- }
- }
- class MyWin extends JFrame {
- private static final long serialVersionUID = 4965728863455140660L;
- private JTextField txtEn = new JTextField( 30 );
- private JTextField txtCN = new JTextField( 30 );
- private JLabel lblInfo = new JLabel( "Translation Demo", JLabel.CENTER );
- private JLabel lblEn = new JLabel( "English", JLabel.LEFT );
- private JLabel lblCN = new JLabel( "Chinese", JLabel.LEFT );
- private JButton btnTrans = new JButton( "Translate" );
- private Map<String, String> dict = new HashMap<String, String>();
- MyWin( String title ) {
- super( title );
- Container cp = getContentPane();
- cp.add( lblInfo, BorderLayout.NORTH );
- JPanel enPanel = new JPanel();
- enPanel.add( lblEn );
- enPanel.add( txtEn );
- JPanel lblPanel = new JPanel( new GridLayout( 2, 1 ) );
- lblPanel.add( lblEn );
- lblPanel.add( lblCN );
- txtEn.setAutoscrolls( true );
- txtCN.setAutoscrolls( true );
- JPanel txtPanel = new JPanel( new GridLayout( 2, 1 ) );
- txtPanel.add( txtEn );
- txtPanel.add( txtCN );
- txtEn.requestFocus();
- JPanel panel = new JPanel( new BorderLayout() );
- panel.add( lblPanel, BorderLayout.WEST );
- panel.add( txtPanel, BorderLayout.CENTER );
- cp.add( panel, BorderLayout.CENTER );
- JPanel btnPane = new JPanel();
- btnPane.add( btnTrans );
- cp.add( btnPane, BorderLayout.SOUTH );
- dict.put( "Hello, Java!", "你好,JAVA!");
- dict.put( "good morning", "早上好" );
- btnTrans.addActionListener( new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent e) {
- txtCN.setText( dict.get( txtEn.getText() ) );
- }
- });
- setSize( 200, 100 );
- setLocation( 450, 200 );
- setVisible( true );
- setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
- pack();
- }
- }
软件效果图:
要实现更复杂的翻译功能,需耗时