在做一个区域组件的国际化,然后做了一个小的翻译工具。
这是中文的区域文件,需要将中文翻译成英文。
百度翻译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)
}