Browse Source

谷歌翻译

master
La123123 3 weeks ago
parent
commit
cb421bdff0
  1. 53
      im-platform/src/main/java/com/bx/implatform/controller/LoginController.java
  2. 4
      im-platform/src/main/java/com/bx/implatform/entity/setting/domain/TranslationSetting.java
  3. 4
      im-platform/src/main/java/com/bx/implatform/service/IImSettingService.java
  4. 36
      im-platform/src/main/java/com/bx/implatform/service/impl/ImSettingServiceImpl.java
  5. 184
      im-platform/src/main/java/com/bx/implatform/util/GoogleTranslationUtils.java

53
im-platform/src/main/java/com/bx/implatform/controller/LoginController.java

@ -12,6 +12,7 @@ import com.bx.implatform.service.IImSettingService;
import com.bx.implatform.service.ImAgentService; import com.bx.implatform.service.ImAgentService;
import com.bx.implatform.service.UserService; import com.bx.implatform.service.UserService;
import com.bx.implatform.util.BaiduTranslationUtils; import com.bx.implatform.util.BaiduTranslationUtils;
import com.bx.implatform.util.GoogleTranslationUtils;
import com.bx.implatform.util.YouDaoTranslationUtils; import com.bx.implatform.util.YouDaoTranslationUtils;
import com.bx.implatform.vo.LoginVO; import com.bx.implatform.vo.LoginVO;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
@ -35,6 +36,8 @@ public class LoginController {
private final YouDaoTranslationUtils youDaoTranslationUtils; private final YouDaoTranslationUtils youDaoTranslationUtils;
private final GoogleTranslationUtils googleTranslationUtils;
@PostMapping("/login") @PostMapping("/login")
@Operation(summary = "用户登录", description = "用户登录") @Operation(summary = "用户登录", description = "用户登录")
public Result<LoginVO> login(@Valid @RequestBody LoginDTO dto) { public Result<LoginVO> login(@Valid @RequestBody LoginDTO dto) {
@ -88,7 +91,7 @@ public class LoginController {
public Result getTranslate(@RequestBody JSONObject jsonObject) { public Result getTranslate(@RequestBody JSONObject jsonObject) {
String str = jsonObject.getStr("str"); String str = jsonObject.getStr("str");
if(str == null || str.isEmpty()){ if(ObjectUtil.isEmpty(str)){
return ResultUtils.success("","success"); return ResultUtils.success("","success");
} }
@ -100,24 +103,36 @@ public class LoginController {
String trans = ""; String trans = "";
//如果代理有配置,则使用代理的配置 //如果代理有配置,则使用代理的配置
if(settingService.isUseBaidu()) { String translateType = settingService.translateType();
if (country == null || country.isEmpty()) { switch (translateType) {
trans = baiduTranslationUtils.translateByAgentConfiguration(str, "zh"); case "0"://默认使用系统自带的百度翻译
} else { if (country == null || country.isEmpty()) {
trans = baiduTranslationUtils.translateByAgentConfiguration(str, country); trans = baiduTranslationUtils.translate(str, "zh");
} } else {
}else if(settingService.isUseYouDao()) { trans = baiduTranslationUtils.translate(str, country);
if (country == null || country.isEmpty()) { }
trans = youDaoTranslationUtils.translateByAgentConfiguration(str, "zh"); break;
} else { case "1":
trans = youDaoTranslationUtils.translateByAgentConfiguration(str, country); if (country == null || country.isEmpty()) {
} trans = baiduTranslationUtils.translateByAgentConfiguration(str, "zh");
}else{ } else {
if (country == null || country.isEmpty()) { trans = baiduTranslationUtils.translateByAgentConfiguration(str, country);
trans = baiduTranslationUtils.translate(str, "zh"); }
} else { break;
trans = baiduTranslationUtils.translate(str, country); case "2":
} if (country == null || country.isEmpty()) {
trans = youDaoTranslationUtils.translateByAgentConfiguration(str, "zh");
} else {
trans = youDaoTranslationUtils.translateByAgentConfiguration(str, country);
}
break;
case "3":
if (country == null || country.isEmpty()) {
trans = googleTranslationUtils.translateByAgentConfiguration(str, "zh");
} else {
trans = googleTranslationUtils.translateByAgentConfiguration(str, country);
}
break;
} }
return ResultUtils.success(trans,"success"); return ResultUtils.success(trans,"success");

4
im-platform/src/main/java/com/bx/implatform/entity/setting/domain/TranslationSetting.java

@ -8,7 +8,7 @@ import lombok.Setter;
public class TranslationSetting { public class TranslationSetting {
/** /**
* 翻译类型 0-默认管理员配置 1-百度翻译 2-有道翻译 * 翻译类型 0-默认管理员配置 1-百度翻译 2-有道翻译 3-谷歌翻译
*/ */
private String type = "0"; private String type = "0";
@ -20,4 +20,6 @@ public class TranslationSetting {
private String appSecret = "";//有道翻译使用 private String appSecret = "";//有道翻译使用
private String googleApiKey = "";//谷歌翻译使用
} }

4
im-platform/src/main/java/com/bx/implatform/service/IImSettingService.java

@ -7,7 +7,5 @@ public interface IImSettingService extends IService<ImSetting> {
ImSetting getByTokenAndSettingName(String settingName); ImSetting getByTokenAndSettingName(String settingName);
boolean isUseBaidu(); String translateType();
boolean isUseYouDao();
} }

36
im-platform/src/main/java/com/bx/implatform/service/impl/ImSettingServiceImpl.java

@ -47,15 +47,15 @@ public class ImSettingServiceImpl extends ServiceImpl<ImSettingMapper, ImSetting
} }
@Override @Override
public boolean isUseBaidu() { public String translateType() {
Long userId = SessionContext.getSession().getUserId(); Long userId = SessionContext.getSession().getUserId();
if(userId == null){ if(userId == null){
return false; return "0";
} }
User user = userMapper.selectById(userId); User user = userMapper.selectById(userId);
if(user == null || ObjectUtil.isNull(user)){ if(user == null || ObjectUtil.isNull(user)){
return false; return "0";
} }
String token = user.getUniqueToken(); String token = user.getUniqueToken();
@ -64,35 +64,15 @@ public class ImSettingServiceImpl extends ServiceImpl<ImSettingMapper, ImSetting
queryWrapper.eq(ImSetting::getSettingName, SettingEnum.TRANSLATION_SETTING.name()); queryWrapper.eq(ImSetting::getSettingName, SettingEnum.TRANSLATION_SETTING.name());
ImSetting setting = baseMapper.selectOne(queryWrapper); ImSetting setting = baseMapper.selectOne(queryWrapper);
if(setting == null){ if(setting == null){
return false; return "0";
} }
TranslationSetting baidu = JSONUtil.toBean(setting.getSettingValue(), TranslationSetting.class); TranslationSetting settingType = JSONUtil.toBean(setting.getSettingValue(), TranslationSetting.class);
return baidu != null && baidu.getType().equals("1");
}
@Override
public boolean isUseYouDao() {
Long userId = SessionContext.getSession().getUserId();
if(userId == null){
return false;
}
User user = userMapper.selectById(userId);
if(user == null || ObjectUtil.isNull(user)){
return false;
}
String token = user.getUniqueToken(); if(ObjectUtil.isEmpty(settingType) || ObjectUtil.isEmpty(settingType.getType())){
LambdaQueryWrapper<ImSetting> queryWrapper = new LambdaQueryWrapper<>(); return "0";
queryWrapper.eq(ImSetting::getUniqueToken, token);
queryWrapper.eq(ImSetting::getSettingName, SettingEnum.TRANSLATION_SETTING.name());
ImSetting setting = baseMapper.selectOne(queryWrapper);
if(setting == null){
return false;
} }
TranslationSetting baidu = JSONUtil.toBean(setting.getSettingValue(), TranslationSetting.class); return settingType.getType();
return baidu != null && baidu.getType().equals("2");
} }
} }

184
im-platform/src/main/java/com/bx/implatform/util/GoogleTranslationUtils.java

@ -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…
Cancel
Save