1. 建立結構化的 map
從語言地區來看, map 的結構是:
- Region (Variable)
- en-US (Map)
- video_game (Map)
- Video Game (String)
- tv_game (Map)
- TV Game (String)
- zh-TW
- video_game (Map)
- 遊戲 (String)
- tv_game (Map)
- 電視遊戲 (String)
因此可以直接在全域變數宣告:
var locales map[string]map[string]string //[region]map( [language/child]map(key(string), string) )
然後,在 main 主程式中建立 map 的值:
locales = make(map[string]map[string]string, 2) //two languages
接著只要對應語言的 map 和內容的 map ,就可以了。
2. translate 翻譯程式
翻譯程式只要判斷是否有值在 map 裡面,沒有就會傳 "" 空字串。
func translate(region string, key string) string {
if country, ok := locales[region]; ok {
if value, ok := country[key]; ok {
return value
}
}
return ""
}
if 的使用中, ok 會回傳 value 的指定狀態,如果沒有值就會是 false, 所以 if 區塊主要是看在分號後面,最後的一個 boolean 變數。
程式碼:
package main
import "fmt"
var locales map[string]map[string]string //[region]map( [language/child]map(key(string), string) )
func main() {
locales = make(map[string]map[string]string, 2) //two languages
en := make(map[string]string, 10) // [region]map()// 10 pharse
en["video_game"] = "Video Game"
en["tv_game"] = "TV Game"
locales["en"] = en //[region] map("en") = [language] map(...)
zh := make(map[string]string, 10) // [region]map()
zh["video_game"] = "遊戲"
zh["tv_game"] = "電視遊戲"
locales["zh"] = zh
var selectlang string = "zh"
fmt.Println(translate(selectlang, "video_game"))
}
func translate(region string, key string) string {
if country, ok := locales[region]; ok {
if value, ok := country[key]; ok {
return value
}
}
return ""
}
沒有留言:
張貼留言