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