📖
Golangで多言語対応ライブラリのようなものを作ってみた
背景
- Golangを学習中で、実践的なコードを書きたかった
- JSONファイルでエラーメッセージなどを管理できると良さそうと考えた
作ったもの
作ったものは至ってシンプルで、JSONファイルを読み込み、キーを指定することで定義したメッセージを取得できる。 Githubのリンクはこちら。
en.json
{
"errors": {
"validate": {
"null": "column.a cannot be null",
"invalid-value": "Column {{0}} must be {{1}}"
},
"login": {
"fail": "Login fail"
}
},
"info": {
"login": {
"success": "Login success!!"
}
}
}
ja.json
{
"errors": {
"validate": {
"null": "column.aはnullにできません",
"invalid-value": "項目 {{0}} に入力できる値は {{1}} のいずれかです"
},
"login": {
"fail": "ログイン失敗"
}
},
"info": {
"login": {
"success": "ログイン成功!!"
}
}
}
main.go
package main
import (
"fmt"
"log"
"github.com/capybara-alt/msgutil"
)
func main() {
if err := msgutil.Init("./sample/*.json"); err != nil {
log.Fatal(err)
}
msg, err := msgutil.GetMassage("ja", "errors", "login", "fail")
if err != nil {
log.Fatal(err)
}
fmt.Println(msg)
}
実行結果
~$ go run main.go
ログイン失敗
また、引数を指定して、動的にメッセージを作成することも可能。
main.go
package main
import (
"fmt"
"log"
"strings"
"github.com/capybara-alt/msgutil"
)
func main() {
if err := msgutil.Init("./sample/*.json"); err != nil {
log.Fatal(err)
}
msg, err := msgutil.GetMessageArgs([]string{"ja", "errors", "validate", "invalid-value"}, "テスト", strings.Join([]string{"\"テ\"", "\"ス\"", "\"ト\""}, " もしくは "))
if err != nil {
log.Fatal(err)
}
fmt.Println(msg)
}
実行結果
~$ go run main.go
項目 テスト に入力できる値は "テ" もしくは "ス" もしくは "ト" のいずれかです
Discussion