5 changed files with 230 additions and 51 deletions
@ -0,0 +1,184 @@ |
|||||
|
package com.bx.implatform.util; |
||||
|
|
||||
|
import cn.hutool.http.HttpRequest; |
||||
|
import cn.hutool.http.HttpResponse; |
||||
|
import cn.hutool.json.JSONArray; |
||||
|
import cn.hutool.json.JSONObject; |
||||
|
import cn.hutool.json.JSONUtil; |
||||
|
import com.bx.implatform.entity.ImSetting; |
||||
|
import com.bx.implatform.entity.setting.domain.TranslationSetting; |
||||
|
import com.bx.implatform.enums.SettingEnum; |
||||
|
import com.bx.implatform.service.IImSettingService; |
||||
|
import lombok.RequiredArgsConstructor; |
||||
|
import lombok.extern.slf4j.Slf4j; |
||||
|
import org.springframework.stereotype.Component; |
||||
|
|
||||
|
/** |
||||
|
* 谷歌翻译工具类 |
||||
|
*/ |
||||
|
@Slf4j |
||||
|
@Component |
||||
|
@RequiredArgsConstructor |
||||
|
public class GoogleTranslationUtils { |
||||
|
|
||||
|
/** |
||||
|
* 谷歌翻译API地址 |
||||
|
*/ |
||||
|
private static final String GOOGLE_URL = "https://translation.googleapis.com/language/translate/v2"; |
||||
|
|
||||
|
/** |
||||
|
* 谷歌翻译APIKEY |
||||
|
*/ |
||||
|
private static final String GOOGLE_API_KEY = "20311d34bea5d593"; |
||||
|
|
||||
|
private final IImSettingService settingService; |
||||
|
|
||||
|
/** |
||||
|
* 翻译文本 |
||||
|
* |
||||
|
* @param query 待翻译文本 |
||||
|
* @param from 源语言 |
||||
|
* @param to 目标语言 |
||||
|
* @return 翻译结果 |
||||
|
*/ |
||||
|
public String translate(String query, String from, String to) { |
||||
|
try { |
||||
|
// 发送GET请求
|
||||
|
HttpResponse response = HttpRequest.get(GOOGLE_URL) |
||||
|
.form("key", GOOGLE_API_KEY) |
||||
|
.form("q", query) |
||||
|
.form("target", to) |
||||
|
.form("source", from) |
||||
|
.execute(); |
||||
|
|
||||
|
// 解析响应
|
||||
|
String body = response.body(); |
||||
|
JSONObject result = JSONUtil.parseObj(body); |
||||
|
|
||||
|
// 检查是否有错误
|
||||
|
if (result.containsKey("error")) { |
||||
|
JSONObject error = result.getJSONObject("error"); |
||||
|
log.error("谷歌翻译失败,错误码:{},错误信息:{}", error.getStr("code"), error.getStr("message")); |
||||
|
return "谷歌翻译异常:" + error.getStr("message"); |
||||
|
} |
||||
|
|
||||
|
// 获取翻译结果
|
||||
|
JSONObject data = result.getJSONObject("data"); |
||||
|
if (data == null) { |
||||
|
log.error("谷歌翻译结果为空"); |
||||
|
return "谷歌翻译结果为空"; |
||||
|
} |
||||
|
|
||||
|
JSONArray translations = data.getJSONArray("translations"); |
||||
|
if (translations == null || translations.isEmpty()) { |
||||
|
log.error("谷歌翻译结果为空"); |
||||
|
return "谷歌翻译结果为空"; |
||||
|
} |
||||
|
|
||||
|
// 返回第一条翻译结果
|
||||
|
JSONObject translation = translations.getJSONObject(0); |
||||
|
return translation.getStr("translatedText"); |
||||
|
} catch (Exception e) { |
||||
|
log.error("谷歌翻译异常", e); |
||||
|
return "谷歌翻译异常"; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 翻译文本(自动检测源语言) |
||||
|
* |
||||
|
* @param query 待翻译文本 |
||||
|
* @param to 目标语言 |
||||
|
* @return 翻译结果 |
||||
|
*/ |
||||
|
public String translate(String query, String to) { |
||||
|
return translate(query, "", to); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 翻译文本(使用Agent配置) |
||||
|
* |
||||
|
* @param query 待翻译文本 |
||||
|
* @param from 源语言 |
||||
|
* @param to 目标语言 |
||||
|
* @return 翻译结果 |
||||
|
*/ |
||||
|
public String translateByAgentConfiguration(String query, String from, String to) { |
||||
|
System.out.println("1111111"); |
||||
|
System.out.println("开始谷歌翻译"); |
||||
|
try { |
||||
|
ImSetting setting = settingService.getByTokenAndSettingName(SettingEnum.TRANSLATION_SETTING.name()); |
||||
|
TranslationSetting configuration = JSONUtil.toBean(setting.getSettingValue(), TranslationSetting.class); |
||||
|
|
||||
|
// 转化语言标识
|
||||
|
to = convertTo(to); |
||||
|
|
||||
|
// 发送GET请求
|
||||
|
HttpResponse response = HttpRequest.get(GOOGLE_URL) |
||||
|
.form("key", configuration.getGoogleApiKey()) |
||||
|
.form("q", query) |
||||
|
.form("target", to) |
||||
|
.form("source", from) |
||||
|
.execute(); |
||||
|
|
||||
|
// 解析响应
|
||||
|
String body = response.body(); |
||||
|
JSONObject result = JSONUtil.parseObj(body); |
||||
|
|
||||
|
// 检查是否有错误
|
||||
|
if (result.containsKey("error")) { |
||||
|
JSONObject error = result.getJSONObject("error"); |
||||
|
log.error("谷歌翻译失败,错误码:{},错误信息:{}", error.getStr("code"), error.getStr("message")); |
||||
|
return "谷歌翻译异常:" + error.getStr("message"); |
||||
|
} |
||||
|
|
||||
|
// 获取翻译结果
|
||||
|
JSONObject data = result.getJSONObject("data"); |
||||
|
if (data == null) { |
||||
|
log.error("谷歌翻译结果为空"); |
||||
|
return "谷歌翻译结果为空"; |
||||
|
} |
||||
|
|
||||
|
JSONArray translations = data.getJSONArray("translations"); |
||||
|
if (translations == null || translations.isEmpty()) { |
||||
|
log.error("谷歌翻译结果为空"); |
||||
|
return "谷歌翻译结果为空"; |
||||
|
} |
||||
|
|
||||
|
// 返回第一条翻译结果
|
||||
|
JSONObject translation = translations.getJSONObject(0); |
||||
|
return translation.getStr("translatedText"); |
||||
|
} catch (Exception e) { |
||||
|
log.error("谷歌翻译异常", e); |
||||
|
return "谷歌翻译异常"; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 翻译文本(自动检测源语言,使用Agent配置) |
||||
|
* |
||||
|
* @param query 待翻译文本 |
||||
|
* @param to 目标语言 |
||||
|
* @return 翻译结果 |
||||
|
*/ |
||||
|
public String translateByAgentConfiguration(String query, String to) { |
||||
|
return translateByAgentConfiguration(query, "", to); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 转化语言标识 |
||||
|
* |
||||
|
* @param to 目标语言 |
||||
|
* @return 转换后的语言标识 |
||||
|
*/ |
||||
|
private String convertTo(String to) { |
||||
|
return switch (to) { |
||||
|
case "jp" -> "ja"; |
||||
|
case "kor" -> "ko"; |
||||
|
case "vie" -> "vi"; |
||||
|
case "fra" -> "fr"; |
||||
|
case "ara" -> "ar"; |
||||
|
default -> to; |
||||
|
}; |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue