go web本地化資源

2021-10-19 08:27:16 字數 2705 閱讀 9379

本資訊是編寫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/shanghaiamerica/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新增後出現以下...