LoginSignup
0
0

More than 1 year has passed since last update.

Golangで多言語対応ライブラリのようなものを作ってみた

Posted at

背景

  • 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
項目 テスト に入力できる値は "テ" もしくは "ス" もしくは "ト" のいずれかです
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0