翻译tools

在做一个区域组件的国际化,然后做了一个小的翻译工具。
这是中文的区域文件,需要将中文翻译成英文。
翻译tools_第1张图片
百度翻译ap文档:https://api.fanyi.baidu.com/product/11


const COUNT_NRL="http://api.fanyi.baidu.com/api/trans/vip/translate"

type reqParam struct{
	Q string `json:"q"`
	From string `json:"from"`
	To string `json:"to"`
	Appid string `json:"appid"`
	Salt string `json:"salt"`
	Sign string `json:"sign"`
}
type resPonse struct {
	From string `json:"from"`
	To string `json:"to"`
	Trans_result []Rescontent `json:"trans_result"`
}
type Rescontent struct {
	Src string	`json:"src"`
	Dst string	`json:"dst"`
}
// 翻译接口,需要百度翻译的appid\密钥,直接申请即可
func tranaslate(quest string) string {
	appid := "202********4462"  // appid 
	key := "uFiT*******Tk9I26S"  // 密钥
	salt := rand.Intn(10)     // 随机数
	Sign:= md5V(appid + quest + string(salt) + key)
	u, _ := url.Parse(COUNT_NRL)
	q := u.Query()
	q.Set("q", quest)
	q.Set("from", "zh")
	q.Set("to", "en")
	q.Set("appid", appid)
	q.Set("salt", string(salt))
	q.Set("sign", Sign)
	u.RawQuery = q.Encode()
	res, err := http.Get(u.String());
	if err != nil {
		log.Fatal(err)
	}
	result, err := ioutil.ReadAll(res.Body)
	res.Body.Close()
	if err != nil {
		log.Fatal(err)
	}
	resPonse:= &resPonse{}
	err = json.Unmarshal(result, &resPonse)
	if err != nil {
		fmt.Println(err)
	}
	fmt.Print(resPonse)
	if (len(resPonse.Trans_result)>0){
		return resPonse.Trans_result[0].Dst
	}
	return ""
}

func md5V(str string) string  {
	h := md5.New()
	h.Write([]byte(str))
	return hex.EncodeToString(h.Sum(nil))
}

func main(){
	// 打开文件 读文件
	f, err:=ioutil.ReadFile("D:/goworkplace/mytool/baiduTranslation/area_ah.ts")
	if err != nil {
		log.Fatal(err)
	}
	file := string(f)
	re, err := regexp.Compile(`[\p{Han}]+`)
	if err != nil{
		fmt.Print(err)
	}
	dataSlice:=re.FindAll([]byte(file), -1)
	var restr, disstr string
	for _, v := range dataSlice {
		restr = string(v)
		fmt.Print(restr)
		re, _ = regexp.Compile(restr)
		disstr=tranaslate(string(v))
		if (disstr!=""){
			file = re.ReplaceAllString(file, disstr)
			fmt.Println(string(disstr))
		}
		time.Sleep(time.Second)
	}
	f2, err := os.OpenFile("./area_en.ts", os.O_RDWR|os.O_CREATE, 0755)
	if err != nil {
		fmt.Println("OpenFile app_sysdefined.sql Fail!")
		return
	}
	defer f2.Close()
	writer := bufio.NewWriter(f2)
	defer writer.Flush()
	writer.WriteString(file)
	fmt.Print(file)
}

你可能感兴趣的:(tools,go语言,翻译)