本資訊是編寫web應用中最常用到的,也是本地化資源中最多的資訊,想要以適合本地語言的方式來顯示文字資訊,可行的一種方案是:建立需要的語言相應的map來維護乙個key-value的關係,在輸出之前按需從適合的map中去獲取相應的文字,如下是乙個簡單的示例:
package main
import "fmt"
var locales map[string]map[string]string
func main()
func msg(locale, key string) string
}return ""
}
上面示例演示了不同locale的文字翻譯,實現了中文和英文對於同乙個key顯示不同語言的實現,上面實現了中文的文字訊息,如果想切換到英文版本,只需要把lang設定為en即可。
有些時候僅是key-value替換是不能滿足需要的,例如"i am 30 years old",中文表達是"我今年30歲了",而此處的30是乙個變數,該怎麼辦呢?這個時候,我們可以結合fmt.printf
函式來實現,請看下面的**:
en["how old"] ="i am %d years old"
cn["how old"] ="我今年%d歲了"
fmt.printf(msg(lang, "how old"), 30)
上面的示例**僅用以演示內部的實現方案,而實際資料是儲存在json裡面的,所以我們可以通過json.unmarshal
來為相應的map填充資料。
因為時區的關係,同一時刻,在不同的地區,表示是不一樣的,而且因為locale的關係,時間格式也不盡相同,例如中文環境下可能顯示:2023年10月24日 星期三 23時11分13秒 cst
,而在英文環境下可能顯示:wed oct 24 23:11:13 cst 2012
。這裡面我們需要解決兩點:
時區問題
格式問題
$goroot/lib/time包中的timeinfo.zip含有locale對應的時區的定義,為了獲得對應於當前locale的時間,我們應首先使用time.loadlocation(name string)
獲取相應於地區的locale,比如asia/shanghai
或america/chicago
對應的時區資訊,然後再利用此資訊與呼叫time.now
獲得的time物件協作來獲得最終的時間。詳細的請看下面的例子(該例子採用上面例子的一些變數):
en["time_zone"]="america/chicago"
cn["time_zone"]="asia/shanghai"
loc,_:=time.loadlocation(msg(lang,"time_zone"))
t:=time.now()
t = t.in(loc)
fmt.println(t.format(time.rfc3339))
我們可以通過類似處理文字格式的方式來解決時間格式的問題,舉例如下:
en["date_format"]="%y-%m-%d %h:%m:%s"
cn["date_format"]="%y年%m月%d日 %h時%m分%s秒"
fmt.println(date(msg(lang,"date_format"),t))
func date(fomate string,t time.time) string
各個地區的貨幣表示也不一樣,處理方式也與日期差不多,細節請看下面**:
en["money"] ="usd %d"
cn["money"] ="¥%d元"
fmt.println(date(msg(lang,"date_format"),100))
func money_format(fomate string,money int64) string
我們可能會根據locale的不同來展示檢視,這些檢視包含不同的、css、js等各種靜態資源。那麼應如何來處理這些資訊呢?首先我們應按locale來組織檔案資訊,請看下面的檔案目錄安排:
views
|--en //英文模板
|--images //儲存資訊
|--js //儲存js檔案
|--css //儲存css檔案
index.tpl //使用者首頁
login.tpl //登陸首頁
|--zh-cn //中文模板
|--images
|--js
|--css
index.tpl
login.tpl
有了這個目錄結構後我們就可以在渲染的地方這樣來實現**:
s1, _ := template.parsefiles("views"+lang+"index.tpl")
vv.lang=lang
s1.execute(os.stdout, vv)
而對於裡面的index.tpl裡面的資源設定如下:
// js檔案// css檔案
// 檔案
本地化 日誌本地化
目錄 概要執行時日誌 國際化與本地化 定義你的本地化日誌資訊mymsg enum package org.skzr.logging basename charset utf 8 value org.skzr.logging.msglocallog public enum mymsg 定義國際化檔案o...
原創 如何資源本地化DevExpress
使應用程式支援各種語言本地化,可以使你的應用程式支援面對各個國家使用者的版本的語言。下面以xtraeditors 為例子進行資源本地化。你需要哪種語言版本的應用程式,你就需要建立哪種語言的assembly,其中包含該語言的本地資源。sdk提供了本地化工具winres.exe。工具的具體使用,參見sd...
Swift 匯出本地化和匯入本地化
一。匯出本地化 1.如下設定,來新增本地化語言 2.匯出檔案 儲存完成後 生成以下兩個檔案 然後用xlifftool 分別開啟以上兩個檔案 在以下顯示 no translation 的地方,新增英文所要替代的語言,如下所示 然後儲存就可以了 二.匯入本地化 1.按如下步驟 2.新增 3新增後出現以下...