golang設定預設地區

2021-10-20 01:23:46 字數 2275 閱讀 7297

locale是一組描述世界上某一特定區域文字格式和語言習慣的設定的集合。locale名通常由三個部分組成:第一部分,是乙個強制性的,表示語言的縮寫,例如"en"表示英文或"zh"表示中文。第二部分,跟在乙個下劃線之後,是乙個可選的國家說明符,用於區分講同一種語言的不同國家,例如"en_us"表示美國英語,而"en_uk"表示英國英語。最後一部分,跟在乙個句點之後,是可選的字符集說明符,例如"zh_cn.gb2312"表示中國使用gb2312字符集。

go語言預設採用"utf-8"編碼集,所以我們實現i18n時不考慮第三部分,接下來我們都採用locale描述的前面兩部分來作為i18n標準的locale名。

在linux和solaris系統中可以通過locale -a命令列舉所有支援的地區名,讀者可以看到這些地區名的命名規範。對於bsd等系統,沒有locale命令,但是地區資訊儲存在/usr/share/locale中。

有了上面對locale的定義,那麼我們就需要根據使用者的資訊(訪問資訊、個人資訊、訪問網域名稱等)來設定與之相關的locale,我們可以通過如下幾種方式來設定使用者的locale。

設定locale的辦法這一就是在應用執行的時候採用網域名稱分級的方式,例如,我們採用www.asta.com當做我們的英文站(預設站),而把網域名稱www.asta.cn當做中文站。這樣通過在應用裡面設定網域名稱和相應的locale的對應關係,就可以設定好地區。這樣處理有幾點好處:

我們可以通過下面的**來實現網域名稱的對應locale:

if r.host == "www.asta.com"  else if r.host == "www.asta.cn"  else if r.host == "www.asta.tw"
當然除了整網域名稱設定地區之外,我們還可以通過子網域名稱來設定地區,例如"en.asta.com"表示英文站點,"cn.asta.com"表示中文站點。實現**如下所示:

prefix := strings.split(r.host,".")

if prefix[0] == "en" else if prefix[0] == "cn" else if prefix[0] == "tw"

通過網域名稱設定locale有如上所示的優點,但是我們一般開發web應用的時候不會採用這種方式,因為首先網域名稱成本比較高,開發乙個locale就需要乙個網域名稱,而且往往統一名稱的網域名稱不一定能申請的到,其次我們不願意為每個站點去本地化乙個配置,而更多的是採用url後面帶引數的方式,請看下面的介紹。

目前最常用的設定locale的方式是在url裡面帶上引數,例如www.asta.com/hello?locale=zh或者www.asta.com/zh/hello。這樣我們就可以設定地區:i18n.setlocale(params["locale"])

這種設定方式幾乎擁有前面講的通過網域名稱設定locale的所有優點,它採用restful的方式,以使得我們不需要增加額外的方法來處理。但是這種方式需要在每乙個的link裡面增加相應的引數locale,這也許有點複雜而且有時候甚至相當的繁瑣。不過我們可以寫乙個通用的函式url,讓所有的link位址都通過這個函式來生成,然後在這個函式裡面增加locale=params["locale"]引數來緩解一下。

也許我們希望url位址看上去更加的restful一點,例如:www.asta.com/en/books(英文站點)和www.asta.com/zh/books(中文站點),這種方式的url更加有利於seo,而且對於使用者也比較友好,能夠通過url直觀的知道訪問的站點。那麼這樣的url位址可以通過router來獲取locale(參考rest小節裡面介紹的router外掛程式實現):

mux.get("/:locale/books", listbook)
在一些特殊的情況下,我們需要根據客戶端的資訊而不是通過url來設定locale,這些資訊可能來自於客戶端設定的喜好語言(瀏覽器中設定),使用者的ip位址,使用者在註冊的時候填寫的所在地資訊等。這種方式比較適合web為基礎的應用。

客戶端請求的時候在http頭資訊裡面有accept-language,一般的客戶端都會設定該資訊,下面是go語言實現的乙個簡單的根據accept-language實現設定地區的**:

al := r.header.get("accept-language")

if al == "en" else if al == "zh-cn" else if al == "zh-tw"

當然在實際應用中,可能需要更加嚴格的判斷來進行設定地區

Oracle建立檔案預設地點

假設我們在手工建立資料庫的時候,任何跟路徑相關的引數都不指定 包括初始化引數檔案和控制檔案 那麼資料庫能否建立成功?如果建立成功,那些路徑又被預設在什麼地方了?1。初始化引數檔案initsid.ora一定是要放在 oracle home dbs下面,否則例項無法啟動 2。控制檔案如果不指定,預設在 ...

elementUI 位址回顯 預設位址

引入elementui地區元件 element china area data npm install element china area data sprovinceandcitydata是省市二級聯動資料 不帶 全部 選項 regiondata是省市區 聯動資料 不帶 全部 選項 provin...

預設位址路徑修改 修改Docker預設路徑

安裝docker時,會預設安裝在乙個目錄裡面,如果該磁碟已經滿了,或者需要遷移docker目錄。在修改預設目錄之前,需要掛載新的磁碟。參考 konenet linux新增新磁碟 zhuanlan.zhihu.com 1.在新掛載的目錄下建立docker目錄 mkdir p data lib dock...