trans_demo

trans_demo

单词翻译DEMO

单词翻译工具

翻译结果将显示在这里
前端:
基础框架:HTML(页面结构)+ CSS(样式美化)+ JavaScript(交互逻辑)

后端:
Go(Golang)
核心能力:搭建 HTTPS 服务,处理翻译请求和跨域访问
内置中英文词典映射,无需调用第三方接口
初始化时自动生成反向词典,实现双向翻译
package main

import (
	"encoding/json"
	"log"
	"net/http"
	"strings"
	"unicode"
)

// 词典数据(英→中)
var dict = map[string]string{
	"apple":    "苹果",
	"book":     "书",
	"computer": "电脑",
	"hello":    "你好",
	"world":    "世界",
	"water":    "水",
	"cat":      "猫",
	"dog":      "狗",
	"sun":      "太阳",
	"moon":     "月亮",
	"tree":     "树",
	"flower":   "花",
	"bird":     "鸟",
}

// 反向词典(中→英)
var reverseDict map[string]string

// 初始化:生成反向词典
func init() {
	reverseDict = make(map[string]string, len(dict))
	for eng, chi := range dict {
		reverseDict[chi] = eng
	}
}

// 翻译响应结构
type TranslationResponse struct {
	Input  string `json:"input"`
	Output string `json:"output"`
	Error  string `json:"error"`
}

// 判断是否包含中文
func hasChinese(s string) bool {
	for _, r := range s {
		if unicode.Is(unicode.Han, r) {
			return true
		}
	}
	return false
}

// 翻译处理函数
func translateHandler(w http.ResponseWriter, r *http.Request) {
	// 设置JSON响应头
	w.Header().Set("Content-Type", "application/json; charset=utf-8")
	
	// 跨域配置(生产环境建议替换为你的WordPress域名)
	w.Header().Set("Access-Control-Allow-Origin", "*")
	w.Header().Set("Access-Control-Allow-Methods", "GET, OPTIONS")
	w.Header().Set("Access-Control-Allow-Headers", "Content-Type")

	// 处理预检请求
	if r.Method == http.MethodOptions {
		w.WriteHeader(http.StatusNoContent)
		return
	}

	// 仅允许GET方法
	if r.Method != http.MethodGet {
		res := TranslationResponse{Error: "仅支持GET请求"}
		w.WriteHeader(http.StatusMethodNotAllowed)
		json.NewEncoder(w).Encode(res)
		return
	}

	// 获取输入单词
	word := strings.TrimSpace(r.URL.Query().Get("word"))
	if word == "" {
		res := TranslationResponse{Error: "请提供单词参数(?word=需要翻译的内容)"}
		w.WriteHeader(http.StatusBadRequest)
		json.NewEncoder(w).Encode(res)
		return
	}

	// 翻译逻辑
	var result string
	var exists bool
	if hasChinese(word) {
		result, exists = reverseDict[word]
	} else {
		result, exists = dict[word]
	}

	// 返回结果
	if !exists {
		res := TranslationResponse{
			Input:  word,
			Output: "",
			Error:  "未找到对应翻译",
		}
		w.WriteHeader(http.StatusNotFound)
		json.NewEncoder(w).Encode(res)
		return
	}

	res := TranslationResponse{
		Input:  word,
		Output: result,
		Error:  "",
	}
	json.NewEncoder(w).Encode(res)
}

func main() {
	// 注册路由
	http.HandleFunc("/translate", translateHandler)

	// 证书和密钥的路径(请替换为你的实际绝对路径)
	certFile := "/data/igo/1022/igozhang.cn.pem"  // 例如:/home/ubuntu/igozhang.cn.pem
	keyFile := "/data/igo/1022/igozhang.cn.key"   // 例如:/home/ubuntu/igozhang.cn.key

	// 启动HTTPS服务(监听8001端口)
	log.Printf("正在启动HTTPS服务,监听端口: 8001")
	log.Printf("证书路径: %s", certFile)
	log.Printf("密钥路径: %s", keyFile)
	
	// 关键:使用ListenAndServeTLS启动HTTPS服务
	err := http.ListenAndServeTLS(":8001", certFile, keyFile, nil)
	if err != nil {
		// 启动失败时输出详细错误(方便排查)
		log.Fatalf("服务启动失败: %v,请检查证书路径和端口是否被占用", err)
	}
}

igozhang 2021