2024.12.16

百度翻译源代码
package
org.example; import okhttp3.*; import org.json.JSONObject; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.IOException; /** * 需要添加依赖 * <!-- https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp --> * <dependency> * <groupId>com.squareup.okhttp3</groupId> * <artifactId>okhttp</artifactId> * <version>4.12.0</version> * </dependency> */ public class TranslatorGUI { public static final String API_KEY = "TtVVlE0nR3Gj05Bi65F3HEo0"; public static final String SECRET_KEY = "tGrbq6QtltoeYyAiwy9ufRD6lYbhWtCZ"; static final OkHttpClient HTTP_CLIENT = new OkHttpClient().newBuilder().build(); public static void main(String[] args) { // 创建主窗口 JFrame frame = new JFrame("百度翻译"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(500, 400); frame.setLayout(new BorderLayout()); // 创建面板 JPanel panel = new JPanel(); panel.setLayout(new GridBagLayout()); GridBagConstraints gbc = new GridBagConstraints(); gbc.insets = new Insets(10, 10, 10, 10); // 给组件之间增加间距 // 翻译方向选择 gbc.gridx = 0; gbc.gridy = 0; panel.add(new JLabel("选择翻译方向:"), gbc); String[] languages = {"英译中", "中译英"}; JComboBox<String> langComboBox = new JComboBox<>(languages); gbc.gridx = 1; panel.add(langComboBox, gbc); // 文本输入框 gbc.gridx = 0; gbc.gridy = 1; panel.add(new JLabel("请输入要翻译的内容:"), gbc); JTextArea textArea = new JTextArea(5, 30); textArea.setLineWrap(true); JScrollPane scrollPane = new JScrollPane(textArea); gbc.gridx = 1; panel.add(scrollPane, gbc); // 翻译按钮 gbc.gridx = 0; gbc.gridy = 2; gbc.gridwidth = 2; JButton translateButton = new JButton("开始翻译"); translateButton.setPreferredSize(new Dimension(120, 30)); // 设置按钮大小 panel.add(translateButton, gbc); // "翻译结果"标签放在左侧中间 gbc.gridx = 0; gbc.gridy = 3; gbc.gridwidth = 1; gbc.anchor = GridBagConstraints.CENTER; // 垂直居中 panel.add(new JLabel("翻译结果:"), gbc); // 翻译结果显示框 gbc.gridx = 1; gbc.gridy = 3; gbc.gridwidth = 2; JTextArea resultArea = new JTextArea(5, 30); resultArea.setLineWrap(true); resultArea.setEditable(false); JScrollPane resultScrollPane = new JScrollPane(resultArea); panel.add(resultScrollPane, gbc); // 添加面板到框架 frame.add(panel, BorderLayout.CENTER); // 显示窗口 frame.setVisible(true); // 按钮事件处理 translateButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String fromLang = langComboBox.getSelectedIndex() == 0 ? "en" : "zh"; String toLang = langComboBox.getSelectedIndex() == 0 ? "zh" : "en"; String textToTranslate = textArea.getText().trim(); if (!textToTranslate.isEmpty()) { try { String translatedText = translate(fromLang, toLang, textToTranslate); resultArea.setText(translatedText); } catch (IOException ex) { resultArea.setText("翻译失败: " + ex.getMessage()); } } else { resultArea.setText("请输入文本进行翻译!"); } } }); } /** * 翻译文本 * * @param fromLang 源语言 * @param toLang 目标语言 * @param text 要翻译的内容 * @return 翻译后的文本 * @throws IOException IO异常 */ static String translate(String fromLang, String toLang, String text) throws IOException { MediaType mediaType = MediaType.parse("application/json"); // 构建请求体 String jsonBody = String.format("{\"from\":\"%s\",\"to\":\"%s\",\"q\":\"%s\"}", fromLang, toLang, text); RequestBody body = RequestBody.create(mediaType, jsonBody); // 构建请求 Request request = new Request.Builder() .url("https://aip.baidubce.com/rpc/2.0/mt/texttrans/v1?access_token=" + getAccessToken()) .method("POST", body) .addHeader("Content-Type", "application/json") .addHeader("Accept", "application/json") .build(); // 执行请求并获取响应 Response response = HTTP_CLIENT.newCall(request).execute(); // 获取响应的字符串内容 String responseBody = response.body().string(); System.out.println("API响应: " + responseBody); // 打印原始响应,帮助调试 // 解析返回的JSON,检查字段是否存在 JSONObject jsonResponse = new JSONObject(responseBody); // 检查返回数据的结构 if (jsonResponse.has("result") && jsonResponse.getJSONObject("result").has("trans_result")) { // 从 result 中提取 trans_result return jsonResponse.getJSONObject("result") .getJSONArray("trans_result") .getJSONObject(0) .getString("dst"); } else { // 如果没有 "trans_result" 字段,打印出其他可能的字段 System.out.println("错误信息: " + jsonResponse.optString("error_msg")); return "翻译失败,请检查API响应"; } } /** * 从用户的AK,SK生成鉴权签名(Access Token) * * @return 鉴权签名(Access Token) * @throws IOException IO异常 */ static String getAccessToken() throws IOException { MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded"); RequestBody body = RequestBody.create(mediaType, "grant_type=client_credentials&client_id=" + API_KEY + "&client_secret=" + SECRET_KEY); Request request = new Request.Builder() .url("https://aip.baidubce.com/oauth/2.0/token") .method("POST", body) .addHeader("Content-Type", "application/x-www-form-urlencoded") .build(); Response response = HTTP_CLIENT.newCall(request).execute(); return new JSONObject(response.body().string()).getString("access_token"); } }

 

posted @ 2024-12-25 10:34  cvjj  阅读(18)  评论(0)    收藏  举报