From 4e0713b14aae1d5b2e37091df2f636cf665a7711 Mon Sep 17 00:00:00 2001
From: zj <1772600164@qq.com>
Date: Mon, 05 Jan 2026 19:24:35 +0800
Subject: [PATCH] 1
---
src/main/java/com/nq/service/impl/SiteNewsServiceImpl.java | 136 +++++++++++++++++++++++++++++++++++---------
src/main/java/com/nq/utils/translate/GoogleTranslateUtil.java | 6 +-
2 files changed, 110 insertions(+), 32 deletions(-)
diff --git a/src/main/java/com/nq/service/impl/SiteNewsServiceImpl.java b/src/main/java/com/nq/service/impl/SiteNewsServiceImpl.java
index 4366616..adb5758 100644
--- a/src/main/java/com/nq/service/impl/SiteNewsServiceImpl.java
+++ b/src/main/java/com/nq/service/impl/SiteNewsServiceImpl.java
@@ -19,6 +19,7 @@
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
+import java.lang.reflect.Field;
import java.util.List;
/**
@@ -74,31 +75,84 @@
public ServerResponse<PageInfo> getList(int pageNum, int pageSize, Integer type, String sort, String keyword, HttpServletRequest request) {
PageHelper.startPage(pageNum, pageSize);
List<SiteNews> listData = this.siteNewsMapper.pageList(pageNum, pageSize, type, sort, keyword);
- GoogleTranslateUtil googleTranslateUtil = new GoogleTranslateUtil();
- //取出每一条数据的内容,进行翻译
-
- if (request.getHeader("lang") != null && !request.getHeader("lang").equals("zh-CN")&& !request.getHeader("lang").equals("tww")&& !request.getHeader("lang").equals("")) {
- for (SiteNews siteNews : listData) {
- //将title description content放一个数组里面
-
-
-// String zh = siteNews.getContent();
-
- try {
-// siteNews.setContent(googleTranslateUtil.translate(siteNews.getContent(), request.getHeader("lang")));
- siteNews.setTitle(googleTranslateUtil.translate(siteNews.getTitle(), request.getHeader("lang")));
-// siteNews.setDescription(googleTranslateUtil.translate(siteNews.getDescription(), request.getHeader("lang")));
- siteNews.setSourceName(googleTranslateUtil.translate(siteNews.getSourceName(), request.getHeader("lang")));
- } catch (Exception e) {
- log.error("翻译失败");
+
+ String lang = request.getHeader("lang");
+
+ // 处理每条数据
+ for (SiteNews siteNews : listData) {
+ try {
+ if (lang == null || lang.equals("") || lang.equals("zh-CN") || lang.equals("tww")) {
+ // 如果是简体中文、繁体中文或空,将繁体转为简体返回
+ // 使用反射直接设置字段值,避免setter的转换逻辑
+ setFieldDirectly(siteNews, "title", convertTraditionalToSimplified(siteNews.getTitle()));
+ setFieldDirectly(siteNews, "description", convertTraditionalToSimplified(siteNews.getDescription()));
+ setFieldDirectly(siteNews, "content", convertTraditionalToSimplified(siteNews.getContent()));
+ setFieldDirectly(siteNews, "sourceName", convertTraditionalToSimplified(siteNews.getSourceName()));
+ } else {
+ // 如果是其他语言,先将繁体转为简体,然后再翻译
+ GoogleTranslateUtil googleTranslateUtil = new GoogleTranslateUtil();
+ // 先将繁体转为简体(因为Google翻译假设源语言是简体)
+ String titleSimplified = convertTraditionalToSimplified(siteNews.getTitle());
+ String descriptionSimplified = convertTraditionalToSimplified(siteNews.getDescription());
+ String contentSimplified = convertTraditionalToSimplified(siteNews.getContent());
+ String sourceNameSimplified = convertTraditionalToSimplified(siteNews.getSourceName());
+
+ // 然后翻译,使用反射设置避免setter转换
+ if (titleSimplified != null) {
+ setFieldDirectly(siteNews, "title", googleTranslateUtil.translate(titleSimplified, lang));
+ }
+ if (descriptionSimplified != null) {
+ setFieldDirectly(siteNews, "description", googleTranslateUtil.translate(descriptionSimplified, lang));
+ }
+ if (contentSimplified != null) {
+ setFieldDirectly(siteNews, "content", googleTranslateUtil.translate(contentSimplified, lang));
+ }
+ if (sourceNameSimplified != null) {
+ setFieldDirectly(siteNews, "sourceName", googleTranslateUtil.translate(sourceNameSimplified, lang));
+ }
}
+ } catch (Exception e) {
+ log.error("处理新闻数据失败", e);
}
- }
-
+ }
PageInfo pageInfo = new PageInfo(listData);
pageInfo.setList(listData);
return ServerResponse.createBySuccess(pageInfo);
+ }
+
+ /**
+ * 使用反射直接设置字段值,避免触发setter的转换逻辑
+ */
+ private void setFieldDirectly(SiteNews siteNews, String fieldName, String value) {
+ if (value == null) {
+ return;
+ }
+ try {
+ Field field = SiteNews.class.getDeclaredField(fieldName);
+ field.setAccessible(true);
+ field.set(siteNews, value);
+ } catch (Exception e) {
+ log.error("设置字段值失败: " + fieldName, e);
+ }
+ }
+
+ /**
+ * 将繁体转换为简体
+ * 使用Google翻译API将繁体(zh-TW)转换为简体(zh-CN)
+ */
+ private String convertTraditionalToSimplified(String traditional) {
+ if (traditional == null || traditional.isEmpty()) {
+ return traditional;
+ }
+ try {
+ // 使用Google翻译将繁体转为简体
+ GoogleTranslateUtil googleTranslateUtil = new GoogleTranslateUtil();
+ return googleTranslateUtil.translate("zh-TW", "zh-CN", traditional);
+ } catch (Exception e) {
+ log.error("繁体转简体失败,返回原值", e);
+ return traditional;
+ }
}
/*新闻资讯-查询详情*/
@@ -106,17 +160,41 @@
public ServerResponse getDetail(int id, HttpServletRequest request) {
SiteNews model = siteNewsMapper.load(id);
if(model!=null){
- GoogleTranslateUtil googleTranslateUtil = new GoogleTranslateUtil();
- //取出每一条数据的内容,进行翻译
-
- if (request.getHeader("lang") != null && !request.getHeader("lang").equals("zh-CN")&& !request.getHeader("lang").equals("tww")&& !request.getHeader("lang").equals("")) {
- try {
- model.setContent(googleTranslateUtil.translate(model.getContent(), request.getHeader("lang")));
- model.setTitle(googleTranslateUtil.translate(model.getTitle(), request.getHeader("lang")));
- model.setDescription(googleTranslateUtil.translate(model.getDescription(), request.getHeader("lang")));
- } catch (Exception e) {
- log.error("翻译失败");
+ String lang = request.getHeader("lang");
+
+ try {
+ if (lang == null || lang.equals("") || lang.equals("zh-CN") || lang.equals("tww")) {
+ // 如果是简体中文、繁体中文或空,将繁体转为简体返回
+ // 使用反射直接设置字段值,避免setter的转换逻辑
+ setFieldDirectly(model, "title", convertTraditionalToSimplified(model.getTitle()));
+ setFieldDirectly(model, "description", convertTraditionalToSimplified(model.getDescription()));
+ setFieldDirectly(model, "content", convertTraditionalToSimplified(model.getContent()));
+ setFieldDirectly(model, "sourceName", convertTraditionalToSimplified(model.getSourceName()));
+ } else {
+ // 如果是其他语言,先将繁体转为简体,然后再翻译
+ GoogleTranslateUtil googleTranslateUtil = new GoogleTranslateUtil();
+ // 先将繁体转为简体(因为Google翻译假设源语言是简体)
+ String titleSimplified = convertTraditionalToSimplified(model.getTitle());
+ String descriptionSimplified = convertTraditionalToSimplified(model.getDescription());
+ String contentSimplified = convertTraditionalToSimplified(model.getContent());
+ String sourceNameSimplified = convertTraditionalToSimplified(model.getSourceName());
+
+ // 然后翻译,使用反射设置避免setter转换
+ if (titleSimplified != null) {
+ setFieldDirectly(model, "title", googleTranslateUtil.translate(titleSimplified, lang));
+ }
+ if (descriptionSimplified != null) {
+ setFieldDirectly(model, "description", googleTranslateUtil.translate(descriptionSimplified, lang));
+ }
+ if (contentSimplified != null) {
+ setFieldDirectly(model, "content", googleTranslateUtil.translate(contentSimplified, lang));
+ }
+ if (sourceNameSimplified != null) {
+ setFieldDirectly(model, "sourceName", googleTranslateUtil.translate(sourceNameSimplified, lang));
+ }
}
+ } catch (Exception e) {
+ log.error("处理新闻详情数据失败", e);
}
return ServerResponse.createBySuccess(model);
}
diff --git a/src/main/java/com/nq/utils/translate/GoogleTranslateUtil.java b/src/main/java/com/nq/utils/translate/GoogleTranslateUtil.java
index 752c8b9..e291bc1 100644
--- a/src/main/java/com/nq/utils/translate/GoogleTranslateUtil.java
+++ b/src/main/java/com/nq/utils/translate/GoogleTranslateUtil.java
@@ -81,7 +81,7 @@
for (int i = 0; i < size; i++) {
String substring = content.substring(i * 1000, (i + 1) * 1000);
try {
- result.append(translate("zh", lang, substring));
+ result.append(translate("zh-CN", lang, substring));
} catch (Exception e) {
throw new RuntimeException(e);
}
@@ -90,7 +90,7 @@
String substring = content.substring(size * 1000, content.length());
String translate = null;
try {
- result.append(translate("zh", lang, substring));
+ result.append(translate("zh-CN", lang, substring));
} catch (Exception e) {
throw new RuntimeException(e);
}
@@ -98,7 +98,7 @@
}else {
try {
- result.append(translate("zh", lang, content));
+ result.append(translate("zh-CN", lang, content));
} catch (Exception e) {
throw new RuntimeException(e);
}
--
Gitblit v1.9.3