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