package translate;
import java.util.HashMap;
import java.util.Map;
public class TransApi {
private static final String TRANS_API_HOST = "https://fanyi-api.baidu.com/api/trans/vip/translate";
private String appid;
private String securityKey;
public TransApi(String appid, String securityKey) {
this.appid = appid;
this.securityKey = securityKey;
}
public String getTransResult(String query, String from, String to) {
Map<String, String> params = buildParams(query, from, to);
return HttpGet.get(TRANS_API_HOST, params);
}
private Map<String, String> buildParams(String query, String from, String to) {
Map<String, String> params = new HashMap<>();
params.put("q", query);
params.put("from", from);
params.put("to", to);
params.put("appid", appid);
// 随机数
String salt = String.valueOf(System.currentTimeMillis());
params.put("salt", salt);
// 签名
String src = appid + query + salt + securityKey;
params.put("sign", MD5.md5(src));
return params;
}
}
package translate;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MD5 {
public static String md5(String str) {
try {
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] array = md.digest(str.getBytes());
StringBuilder sb = new StringBuilder();
for (byte b : array) {
sb.append(String.format("%02X", b));
}
return sb.toString().toLowerCase();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
return null;
}
}
}
package translate;
import org.json.JSONObject;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Main {
private static final String APP_ID = "20241112002200093";
private static final String SECURITY_KEY = "g9ZWChI6fIvp2E2BiFL5";
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> new TranslateFrame());
}
static class TranslateFrame extends JFrame {
private JTextField inputField;
private JComboBox<String> languageComboBox;
private JTextArea resultArea;
private JButton translateButton;
public TranslateFrame() {
super("中英文翻译");
// JFrame settings
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(500, 400); // Adjusted size to ensure better visibility
setLocationRelativeTo(null); // Center the window
setTitle("中英文翻译");
// Set Look and Feel
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {
e.printStackTrace();
}
// Use BoxLayout for vertical layout with proper spacing
setLayout(new BoxLayout(getContentPane(), BoxLayout.Y_AXIS));
setSpacing(20); // Set spacing between components
// Set font for the frame (ensure Chinese support)
Font font = new Font("Microsoft YaHei", Font.PLAIN, 14);
// Input panel with label and text field
JPanel inputPanel = new JPanel();
inputPanel.setLayout(new FlowLayout(FlowLayout.LEFT, 10, 10));
inputPanel.add(new JLabel("请输入文本:"));
inputField = new JTextField(30);
inputField.setFont(font); // Use Chinese-compatible font
inputPanel.add(inputField);
add(inputPanel);
// Language selection panel with label and combo box
JPanel comboPanel = new JPanel();
comboPanel.setLayout(new FlowLayout(FlowLayout.LEFT, 10, 10));
comboPanel.add(new JLabel("选择翻译方向:"));
String[] languages = {"中文翻译成英文", "英文翻译成中文"};
languageComboBox = new JComboBox<>(languages);
languageComboBox.setFont(font); // Use Chinese-compatible font
comboPanel.add(languageComboBox);
add(comboPanel);
// Translate button panel
JPanel buttonPanel = new JPanel();
buttonPanel.setLayout(new FlowLayout(FlowLayout.CENTER, 10, 10));
translateButton = new JButton("翻译");
translateButton.setFont(new Font("Microsoft YaHei", Font.BOLD, 16)); // Bold font
translateButton.setBackground(new Color(0x4CAF50)); // Green color for the button
translateButton.setForeground(Color.WHITE); // Set text color to white
translateButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String text = inputField.getText();
String selectedLanguage = (String) languageComboBox.getSelectedItem();
String result = translateText(text, selectedLanguage);
resultArea.setText(result);
}
});
buttonPanel.add(translateButton);
add(buttonPanel);
// Result text area with scroll pane
JPanel resultPanel = new JPanel();
resultPanel.setLayout(new FlowLayout(FlowLayout.LEFT, 10, 10));
resultPanel.add(new JLabel("翻译结果:"));
resultArea = new JTextArea(5, 30);
resultArea.setFont(font); // Use Chinese-compatible font
resultArea.setLineWrap(true);
resultArea.setWrapStyleWord(true);
resultArea.setEditable(false);
JScrollPane scrollPane = new JScrollPane(resultArea);
resultPanel.add(scrollPane);
add(resultPanel);
// Make the frame visible
setVisible(true);
}
private String translateText(String text, String selectedLanguage) {
TransApi api = new TransApi(APP_ID, SECURITY_KEY);
switch (selectedLanguage) {
case "中文翻译成英文":
return parseResult(api.getTransResult(text, "zh", "en"));
case "英文翻译成中文":
return parseResult(api.getTransResult(text, "en", "zh"));
default:
return "未知的语言选项";
}
}
private String parseResult(String json) {
try {
JSONObject obj = new JSONObject(json);
if (obj.has("trans_result")) {
return obj.getJSONArray("trans_result").getJSONObject(0).getString("dst");
} else if (obj.has("error_code")) {
return "Error: " + obj.getString("error_msg");
}
} catch (Exception e) {
return "JSON解析错误: " + e.getMessage();
}
return "未知响应";
}
// Helper method to set spacing between components
private void setSpacing(int spacing) {
// Set vertical gap between components
Component[] components = getContentPane().getComponents();
for (Component component : components) {
if (component instanceof JComponent) {
((JComponent) component).setMaximumSize(new Dimension(Integer.MAX_VALUE, component.getPreferredSize().height));
((JComponent) component).setAlignmentX(Component.LEFT_ALIGNMENT);
}
}
}
}
}
package translate;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Map;
import java.util.StringJoiner;
public class HttpGet {
public static String get(String host, Map<String, String> params) {
try {
StringBuilder urlBuilder = new StringBuilder(host);
if (params != null && !params.isEmpty()) {
urlBuilder.append("?");
for (Map.Entry<String, String> entry : params.entrySet()) {
urlBuilder.append(entry.getKey()).append("=").append(java.net.URLEncoder.encode(entry.getValue(), "UTF-8")).append("&");
}
urlBuilder.deleteCharAt(urlBuilder.length() - 1); // 删除最后一个'&'
}
URL url = new URL(urlBuilder.toString());
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.connect();
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
StringJoiner sj = new StringJoiner("");
String line;
while ((line = reader.readLine()) != null) {
sj.add(line);
}
reader.close();
return sj.toString();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}