|
@@ -0,0 +1,114 @@
|
|
|
|
+package com.xy.service;
|
|
|
|
+
|
|
|
|
+import cn.hutool.core.collection.CollUtil;
|
|
|
|
+import cn.hutool.core.util.StrUtil;
|
|
|
|
+import cn.hutool.json.JSONArray;
|
|
|
|
+import cn.hutool.json.JSONObject;
|
|
|
|
+import cn.hutool.json.JSONUtil;
|
|
|
|
+import com.xy.annotate.RestMappingController;
|
|
|
|
+import com.xy.dto.TranslateDto;
|
|
|
|
+import com.xy.entity.SysMenu;
|
|
|
|
+import com.xy.service.impl.SysMenuServiceImpl;
|
|
|
|
+import com.xy.third.baidu.TransApi;
|
|
|
|
+import com.xy.utils.R;
|
|
|
|
+import io.swagger.annotations.Api;
|
|
|
|
+import io.swagger.annotations.ApiOperation;
|
|
|
|
+import lombok.RequiredArgsConstructor;
|
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
|
+import org.springframework.cloud.client.loadbalancer.AsyncLoadBalancerAutoConfiguration;
|
|
|
|
+import org.springframework.scheduling.annotation.Async;
|
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
|
+import org.springframework.validation.annotation.Validated;
|
|
|
|
+import org.springframework.web.bind.annotation.PostMapping;
|
|
|
|
+import org.springframework.web.bind.annotation.RequestBody;
|
|
|
|
+
|
|
|
|
+import java.util.ArrayList;
|
|
|
|
+import java.util.List;
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * 翻译服务
|
|
|
|
+ */
|
|
|
|
+@Api(tags = "翻译服务")
|
|
|
|
+@Slf4j
|
|
|
|
+@Service
|
|
|
|
+@RequiredArgsConstructor
|
|
|
|
+@RestMappingController("/translate")
|
|
|
|
+public class TranslateService {
|
|
|
|
+
|
|
|
|
+ private static final String APP_ID = "20240428002037687";
|
|
|
|
+ private static final String SECURITY_KEY = "nXkFm4SaA2Wrmb42Xmky";
|
|
|
|
+ private final SysMenuServiceImpl sysMenuService;
|
|
|
|
+ private final AsyncLoadBalancerAutoConfiguration asyncLoadBalancerAutoConfiguration;
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 调用百度翻译API
|
|
|
|
+ *
|
|
|
|
+ * @param query 待翻译的文本
|
|
|
|
+ * @param lanSrc 原语言 zh
|
|
|
|
+ * @param lanDst 目标语言 en
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ public static String translate(String query, String lanSrc, String lanDst) {
|
|
|
|
+ TransApi api = new TransApi(APP_ID, SECURITY_KEY);
|
|
|
|
+ log.info("正在翻译文本:{}", query);
|
|
|
|
+ JSONObject res = JSONUtil.parseObj(api.getTransResult(query, lanSrc, lanDst));
|
|
|
|
+ JSONArray transResult = res.getJSONArray("trans_result");
|
|
|
|
+ if (!JSONUtil.isNull(transResult)) {
|
|
|
|
+ JSONObject jsonObject = transResult.getJSONObject(0);
|
|
|
|
+ log.info("文本:{},翻译结果:{}", query, jsonObject.getStr("dst"));
|
|
|
|
+ return jsonObject.getStr("dst");
|
|
|
|
+ } else {
|
|
|
|
+ log.info("文本:{},翻译失败:{}", query, JSONUtil.toJsonPrettyStr(res));
|
|
|
|
+ return "-";
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @PostMapping("/menuOne")
|
|
|
|
+ @ApiOperation("单个菜单翻译-同步返回结果")
|
|
|
|
+ public R<String> translateMenuOne(@RequestBody @Validated TranslateDto.One one) {
|
|
|
|
+ String content = one.getContent();
|
|
|
|
+ String targetType = one.getTargetType();
|
|
|
|
+ String translatedValue = translate(content, "zh", targetType);
|
|
|
|
+ return R.ok(translatedValue);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 全量菜单翻译
|
|
|
|
+ *
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ @PostMapping("/menuAll")
|
|
|
|
+ @ApiOperation("菜单全量翻译-已翻译的忽略")
|
|
|
|
+ public R<?> translateMenuAll() {
|
|
|
|
+ translateAllMenu();
|
|
|
|
+ return R.ok();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ @Async
|
|
|
|
+ protected void translateAllMenu() {
|
|
|
|
+ List<SysMenu> sysMenus = sysMenuService.list();
|
|
|
|
+ List<SysMenu> updateMenus = new ArrayList<>();
|
|
|
|
+ for (SysMenu sysMenu : sysMenus) {
|
|
|
|
+ String name = sysMenu.getName();
|
|
|
|
+ String enName = sysMenu.getEnName();
|
|
|
|
+ if (StrUtil.isEmpty(enName)) {
|
|
|
|
+ //百度api翻译
|
|
|
|
+ String translatedValue = translate(name, "zh", "en");
|
|
|
|
+ sysMenu.setName(translatedValue);
|
|
|
|
+ updateMenus.add(sysMenu);
|
|
|
|
+ // 增加1.2秒的延迟
|
|
|
|
+ try {
|
|
|
|
+ Thread.sleep(1800);
|
|
|
|
+ } catch (InterruptedException e) {
|
|
|
|
+ Thread.currentThread().interrupt();
|
|
|
|
+ log.error("线程中断异常", e);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if (CollUtil.isNotEmpty(updateMenus)) {
|
|
|
|
+ sysMenuService.updateBatchById(updateMenus);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+}
|