AI答案
本节内容:添加百度翻译额外内容:程序添加图标补充:开发习惯:先完成功能,在功能确定之后,再去优化代码
详情百度翻译同样需要申请 key
百度翻译开放平台 (baiduu.com) 翻译参考文档(有java版demo 代码) :http://fanyi-api.baiduu.com/origin/doc/21
为了方便阅读,翻译结果创建 model
package dev.guu.fx.translate.box.baiduu;import lombok.Data;import lombok.experimental.Accessors;@Data@Accessors(chain = true)public class BaiduRoot { private String from; private String to; private BaiduTransResult[] trans_result;}
package dev.guu.fx.translate.box.baiduu;import lombok.Data;import lombok.experimental.Accessors;@Data@Accessors(chain = true)public class BaiduTransResult { private String src; private String dst;}
baiduu翻译 java 版
package dev.guu.fx.translate.box.baiduu;import dev.guu.kit.string.JsonKit;import dev.guu.kit.string.StringKit;import lombok.Data;import lombok.experimental.Accessors;import java.io.IOException;import java.net.URI;import java.net.http.HttpClient;import java.net.http.HttpRequest;import java.net.http.HttpResponse;import java.nio.charset.StandardCharsets;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;import java.time.LocalDate;import java.util.StringJoiner;@Data@Accessors(chain = true)public class BaiduTranslate { static String salt = LocalDate.now().toString(); static String appId = &34;替换为你的appId&34;; static String token = &34;替换为你的密钥&34;; public static void main(String[] args) {// System.out.println(translate(&34;我的&34;)); } public static String translate(String q) { String str1 = appId + q + salt + token; String sign = md5(str1); String url = &34;http://fanyi-api.baiduu.com/origin/api/trans/vip/translate?&34;; StringJoiner sj = new StringJoiner(&34;&&34;); boolean en = StringKit.isEn(q); sj.add(&34;from=&34; + (en ? &34;en&34; : &34;zh&34;)) .add(&34;q=&34; + q) .add(&34;to=&34; + (en ? &34;zh&34; : &34;en&34;)) .add(&34;appid=&34; + appId) .add(&34;salt=&34; + salt) .add(&34;sign=&34; + sign) ; url += sj.toString(); System.out.println(url); HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .POST(HttpRequest.BodyPublishers.ofString(&34;a&34;)) .setHeader(&34;Content-type&34;, &34;application/json&34;) .uri(URI.create(url)).build(); try { HttpResponse<String> send = client.send(request, HttpResponse.BodyHandlers.ofString()); String body = send.body(); System.out.println(body); BaiduRoot baiduu = JsonKit.toBean(body, BaiduRoot.class); return JsonKit.toJsonFormat(baiduu); } catch (IOException | InterruptedException e) { throw new RuntimeException(e); } } private static final char[] hexDigits = {&39;0&39;, &39;1&39;, &39;2&39;, &39;3&39;, &39;4&39;, &39;5&39;, &39;6&39;, &39;7&39;, &39;8&39;, &39;9&39;, &39;a&39;, &39;b&39;, &39;c&39;, &39;d&39;, &39;e&39;, &39;f&39;}; /** * 获得一个字符串的MD5值 * * @param input 输入的字符串 * @return 输入字符串的MD5值 */ public static String md5(String input) { if (input == null) return null; try { // 拿到一个MD5转换器(如果想要SHA1参数换成”SHA1”) MessageDigest messageDigest = MessageDigest.getInstance(&34;MD5&34;); // 输入的字符串转换成字节数组 byte[] inputByteArray = input.getBytes(StandardCharsets.UTF_8); // inputByteArray是输入字符串转换得到的字节数组 messageDigest.update(inputByteArray); // 转换并返回结果,也是字节数组,包含16个元素 byte[] resultByteArray = messageDigest.digest(); // 字符数组转换成字符串返回 return byteArrayToHex(resultByteArray); } catch (NoSuchAlgorithmException e) { return null; } } private static String byteArrayToHex(byte[] byteArray) { // new一个字符数组,这个就是用来组成结果字符串的(解释一下:一个byte是八位二进制,也就是2位十六进制字符(2的8次方等于16的2次方)) char[] resultCharArray = new char[byteArray.length * 2]; // 遍历字节数组,通过位运算(位运算效率高),转换成字符放到字符数组中去 int index = 0; for (byte b : byteArray) { resultCharArray[index++] = hexDigits[b >>> 4 & 0xf]; resultCharArray[index++] = hexDigits[b & 0xf]; } // 字符数组组合成字符串返回 return new String(resultCharArray); }}
程序输出区域添加百度翻译相关显示
BoxMain.java
private void createOutput(Pane root) { HBox box = new HBox(); root.getChildren().add(box); createYoudao(box); createBaidu(box); } private void createBaidu(HBox parent) { Label label = new Label(&34;百度翻译:&34;); Button btn = new Button(&34;翻译&34;); label.setFont(Font.font(&34;微软雅黑&34;, 24)); TextArea output = new TextArea(); output.setPromptText(&34;等待输入...&34;); output.setEditable(false); output.setFont(Font.font(&34;宋体&34;, 20)); parent.getChildren().add(new VBox(label,btn, output)); btn.setOnMouseClicked(e -> { String text = inputTextArea.getText(); if (isBlank(text)) { output.setText(&34;请输入&34;); } else { output.setText(&34;翻译中...&34;); // fx的多线程 , Platform.runLater(() -> { String trans = BaiduTranslate.translate(text); output.setText(trans); }); } }); }