發現很多golang 的國際化語言包做得比較複雜(難用),於是自己造了個輪子。

guoliang1994發表於2022-02-22

go-i18n地址

go-i18n

用最簡單的方法讓你的go程式支援國際化,我們使用介面來支援多種驅動的擴充套件。

目前支援的驅動

  • json 格式的語言檔案
  • Embed 嵌入式檔案系統 (使用 json格式)
  • toml 格式
  • yml 格式
  • xml 格式
  • sqlite
  • postgresql
  • redis
  • 其他你想支援的任何資料來源

語言支援

  • 中文
  • English
  • other

如何使用

import “github.com/guoliang1994/go-i18n”

語言檔案示例

{
  "install": {
    "success": "{{program}}安裝成功",
    "error": "{{program}}安裝失敗, 失敗原因:{{reason}}"
  },
  "uninstall": {
    "success": "{{program}}解除安裝成功",
    "error": "{{program}}解除安裝失敗"
  },
  "start": {
    "success": "{{program}}啟動成功",
    "error": "{{program}}啟動失敗"
  },
  "appName": "國際化支援",
  "needRoot": "需要root使用者"
}

使用 json 驅動
使用 T 方法獲取語言, 第一個引數是路徑,後面是動態引數,用於替換佔位符號
路徑可以支援無限極,用 「.」 語法,就像 JavaScript 取物件屬性


driver := driver.NewJsonFileI18nImpl("..\\lang")
i18n := go_i18n.NewI18N(go_i18n.Chinese, driver)
msg := i18n.T("install.error", i18n.T("appName"), i18n.T("needRoot"))

如何實現其他檔案型別或資料庫驅動

這是 json 的實現,你只需要實現 contract.I18NDriver 中的介面即可

type JsonFileI18NImpl struct {
    langDir string
}

func NewJsonFileI18mImpl(langDir string) contract.I18NDriver {
    f := JsonFileI18NImpl{
        langDir: langDir,
    }
    return &f
}

func (Self *JsonFileI18NImpl) LoadLang(location string) []byte {
    fileName := fmt.Sprintf(Self.langDir + "\\%s.json", location)
    data, _ := ioutil.ReadFile(fileName)
    return data
}

歡迎各路大神提供不同的驅動

本作品採用《CC 協議》,轉載必須註明作者和本文連結
九九一十八,一步一個腳印

相關文章