1
zj
2026-01-15 7fb69c73169514bdcc29fcb209c5d13e43fd6e79
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);
        }